diff options
-rw-r--r-- | chrome/app/generated_resources.grd | 2 | ||||
-rw-r--r-- | chrome/browser/profiles/avatar_menu_model.cc | 7 | ||||
-rw-r--r-- | chrome/browser/profiles/avatar_menu_model.h | 4 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/avatar_menu_bubble_gtk.cc | 63 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/avatar_menu_bubble_gtk.h | 5 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/browser_titlebar.cc | 14 |
6 files changed, 68 insertions, 27 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 3f1a699..f933a48 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -8292,7 +8292,7 @@ The following plug-in is unresponsive: <ph name="PLUGIN_NAME">$1 <!-- Managed User Avatar Menu --> <message name="IDS_MANAGED_USER_INFO" desc="A text which explains that the user is managed by a custodian."> - This user is managed by <ph name="CUSTODIAN_NAME">$1<ex>custodian@gmail.com</ex></ph>. Usage and history from this user may be tracked. + This user is managed by <ph name="CUSTODIAN_NAME">$1<ex>custodian@gmail.com</ex></ph>. Usage and history from this user may be viewed by the manager. </message> <message name="IDS_MANAGED_USER_AVATAR_LABEL" desc="A label for the managed user which is used in the avatar menu and as a label in the titlebar."> Limited user diff --git a/chrome/browser/profiles/avatar_menu_model.cc b/chrome/browser/profiles/avatar_menu_model.cc index 8587b39..e79b00e 100644 --- a/chrome/browser/profiles/avatar_menu_model.cc +++ b/chrome/browser/profiles/avatar_menu_model.cc @@ -29,7 +29,9 @@ #include "content/public/browser/site_instance.h" #include "google_apis/gaia/gaia_urls.h" #include "grit/generated_resources.h" +#include "grit/theme_resources.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/resource/resource_bundle.h" #if defined(ENABLE_MANAGED_USERS) #include "chrome/browser/managed_mode/managed_user_service.h" @@ -241,6 +243,11 @@ base::string16 AvatarMenuModel::GetManagedUserInformation() const { return base::string16(); } +const gfx::Image& AvatarMenuModel::GetManagedUserIcon() const { + return ResourceBundle::GetSharedInstance().GetNativeImageNamed( + IDR_MANAGED_USER_ICON); +} + void AvatarMenuModel::Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) { diff --git a/chrome/browser/profiles/avatar_menu_model.h b/chrome/browser/profiles/avatar_menu_model.h index b591d40..b0db227 100644 --- a/chrome/browser/profiles/avatar_menu_model.h +++ b/chrome/browser/profiles/avatar_menu_model.h @@ -95,6 +95,10 @@ class AvatarMenuModel : public content::NotificationObserver { // string will be returned. base::string16 GetManagedUserInformation() const; + // Returns the icon for the managed user which will be displayed in the + // avatar menu. + const gfx::Image& GetManagedUserIcon() const; + // This model is also used for the always-present Mac system menubar. As the // last active browser changes, the model needs to update accordingly. void set_browser(Browser* browser) { browser_ = browser; } diff --git a/chrome/browser/ui/gtk/avatar_menu_bubble_gtk.cc b/chrome/browser/ui/gtk/avatar_menu_bubble_gtk.cc index 529583d..d9e4120 100644 --- a/chrome/browser/ui/gtk/avatar_menu_bubble_gtk.cc +++ b/chrome/browser/ui/gtk/avatar_menu_bubble_gtk.cc @@ -124,6 +124,17 @@ void AvatarMenuBubbleGtk::OnSwitchProfileLinkClicked(GtkWidget* link) { OnAvatarMenuModelChanged(avatar_menu_model_.get()); } +void AvatarMenuBubbleGtk::OnRealize(GtkWidget* parent_widget) { + if (!managed_user_info_) + return; + + // Use the same background color for the GtkTextView as the background color + // of the enclosing widget. + GtkStyle* style = gtk_widget_get_style(parent_widget); + GdkColor bg_color = style->bg[GTK_STATE_NORMAL]; + gtk_widget_modify_base(managed_user_info_, GTK_STATE_NORMAL, &bg_color); +} + void AvatarMenuBubbleGtk::InitMenuContents() { size_t profile_count = avatar_menu_model_->GetNumberOfItems(); GtkWidget* items_vbox = gtk_vbox_new(FALSE, ui::kContentAreaSpacing); @@ -173,21 +184,41 @@ void AvatarMenuBubbleGtk::InitManagedUserContents() { gtk_hseparator_new(), TRUE, TRUE, 0); // Add information about managed users. - GtkWidget* status_label = - theme_service_->BuildLabel(std::string(), ui::kGdkBlack); - char* markup = g_markup_printf_escaped( - "<span size='small'>%s</span>", - UTF16ToUTF8(avatar_menu_model_->GetManagedUserInformation()).c_str()); - const int kLabelWidth = 150; - gtk_widget_set_size_request(status_label, kLabelWidth, -1); - gtk_label_set_markup(GTK_LABEL(status_label), markup); - gtk_label_set_line_wrap(GTK_LABEL(status_label), TRUE); - gtk_misc_set_alignment(GTK_MISC(status_label), 0, 0); - g_free(markup); - gtk_box_pack_start(GTK_BOX(inner_contents_), status_label, FALSE, FALSE, 0); - - gtk_box_pack_start(GTK_BOX(inner_contents_), - gtk_hseparator_new(), TRUE, TRUE, 0); + managed_user_info_ = gtk_text_view_new(); + gtk_text_view_set_editable(GTK_TEXT_VIEW(managed_user_info_), FALSE); + gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(managed_user_info_), FALSE); + GtkTextBuffer* text_buffer = + gtk_text_view_get_buffer(GTK_TEXT_VIEW(managed_user_info_)); + std::string info = + UTF16ToUTF8(avatar_menu_model_->GetManagedUserInformation()); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(managed_user_info_), GTK_WRAP_WORD); + + // Insert the managed user icon. Insert it inside a hbox in order to be able + // to define a padding around it. + GtkTextIter start_iter; + gtk_text_buffer_get_start_iter(text_buffer, &start_iter); + GtkWidget* icon_box = gtk_hbox_new(FALSE, 0); + GdkPixbuf* limited_user_pixbuf = + avatar_menu_model_->GetManagedUserIcon().ToGdkPixbuf(); + GtkWidget* limited_user_img = gtk_image_new_from_pixbuf(limited_user_pixbuf); + gtk_box_pack_start(GTK_BOX(icon_box), limited_user_img, FALSE, FALSE, 5); + GtkTextChildAnchor* anchor = + gtk_text_buffer_create_child_anchor(text_buffer, &start_iter); + gtk_text_view_add_child_at_anchor( + GTK_TEXT_VIEW(managed_user_info_), icon_box, anchor); + + // Insert the information text. + GtkTextIter end_iter; + gtk_text_buffer_get_end_iter(text_buffer, &end_iter); + GtkTextTag* text_tag = gtk_text_buffer_create_tag( + text_buffer, NULL, "size-set", TRUE, "size", 10 * PANGO_SCALE, NULL); + gtk_text_buffer_insert_with_tags( + text_buffer, &end_iter, info.c_str(), info.size(), text_tag, NULL); + + gtk_box_pack_start( + GTK_BOX(inner_contents_), managed_user_info_, FALSE, FALSE, 0); + gtk_box_pack_start( + GTK_BOX(inner_contents_), gtk_hseparator_new(), TRUE, TRUE, 0); // The switch profile link. GtkWidget* switch_profile_link = theme_service_->BuildChromeLinkButton( @@ -201,6 +232,8 @@ void AvatarMenuBubbleGtk::InitManagedUserContents() { gtk_container_add(GTK_CONTAINER(link_align), switch_profile_link); gtk_box_pack_start(GTK_BOX(inner_contents_), link_align, FALSE, FALSE, 0); + g_signal_connect( + inner_contents_, "realize", G_CALLBACK(OnRealizeThunk), this); } void AvatarMenuBubbleGtk::InitContents() { diff --git a/chrome/browser/ui/gtk/avatar_menu_bubble_gtk.h b/chrome/browser/ui/gtk/avatar_menu_bubble_gtk.h index f611f68..3c2136bd 100644 --- a/chrome/browser/ui/gtk/avatar_menu_bubble_gtk.h +++ b/chrome/browser/ui/gtk/avatar_menu_bubble_gtk.h @@ -51,6 +51,7 @@ class AvatarMenuBubbleGtk : public BubbleDelegateGtk, GtkRequisition*); CHROMEGTK_CALLBACK_0(AvatarMenuBubbleGtk, void, OnNewProfileLinkClicked); CHROMEGTK_CALLBACK_0(AvatarMenuBubbleGtk, void, OnSwitchProfileLinkClicked); + CHROMEGTK_CALLBACK_0(AvatarMenuBubbleGtk, void, OnRealize); // Create all widgets in this bubble. void InitContents(); @@ -74,6 +75,10 @@ class AvatarMenuBubbleGtk : public BubbleDelegateGtk, // widgets in the bubble. GtkWidget* inner_contents_; + // A weak pointer to the GtkTextView which holds general information about + // managed users. + GtkWidget* managed_user_info_; + // A weak pointer to the bubble window. BubbleGtk* bubble_; diff --git a/chrome/browser/ui/gtk/browser_titlebar.cc b/chrome/browser/ui/gtk/browser_titlebar.cc index 09a9897..899dead 100644 --- a/chrome/browser/ui/gtk/browser_titlebar.cc +++ b/chrome/browser/ui/gtk/browser_titlebar.cc @@ -19,6 +19,7 @@ #include "base/utf_string_conversions.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/managed_mode/managed_user_service.h" #include "chrome/browser/profiles/avatar_menu_model.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_info_cache.h" @@ -56,11 +57,6 @@ #include "ui/base/x/active_window_watcher_x.h" #include "ui/gfx/image/image.h" -#if defined(ENABLE_MANAGED_USERS) -#include "chrome/browser/managed_mode/managed_user_service.h" -#include "chrome/browser/managed_mode/managed_user_service_factory.h" -#endif - using content::WebContents; namespace { @@ -820,10 +816,8 @@ void BrowserTitlebar::UpdateAvatar() { gtk_widget_show_all(avatar_); -#if defined(ENABLE_MANAGED_USERS) - ManagedUserService* service = ManagedUserServiceFactory::GetForProfile( - browser_window_->browser()->profile()); - if (service->ProfileIsManaged()) { + Profile* profile = browser_window_->browser()->profile(); + if (ManagedUserService::ProfileIsManaged(profile)) { avatar_label_ = gtk_label_new(NULL); avatar_label_bg_ = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(avatar_label_bg_), avatar_label_); @@ -842,7 +836,6 @@ void BrowserTitlebar::UpdateAvatar() { gtk_widget_hide(titlebar_left_label_frame_); } } -#endif if (display_avatar_on_left_) { gtk_container_add(GTK_CONTAINER(titlebar_left_avatar_frame_), avatar_); @@ -861,7 +854,6 @@ void BrowserTitlebar::UpdateAvatar() { gfx::Image avatar; ProfileInfoCache& cache = g_browser_process->profile_manager()->GetProfileInfoCache(); - Profile* profile = browser_window_->browser()->profile(); size_t index = cache.GetIndexOfProfileWithPath(profile->GetPath()); if (index == std::string::npos) return; |