Index: chrome/browser/ui/gtk/browser_titlebar.cc |
diff --git a/chrome/browser/ui/gtk/browser_titlebar.cc b/chrome/browser/ui/gtk/browser_titlebar.cc |
index 559045f725810389f225fdaa516ff0c9402ec387..e646d3059b12d2b54d7422dd17cbdcf71e0dd62b 100644 |
--- a/chrome/browser/ui/gtk/browser_titlebar.cc |
+++ b/chrome/browser/ui/gtk/browser_titlebar.cc |
@@ -18,7 +18,9 @@ |
#include "base/utf_string_conversions.h" |
#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/managed_mode.h" |
#include "chrome/browser/prefs/pref_service.h" |
+#include "chrome/browser/profiles/avatar_menu_model.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/profiles/profile_info_cache.h" |
#include "chrome/browser/profiles/profile_manager.h" |
@@ -112,16 +114,6 @@ gboolean OnMouseMoveEvent(GtkWidget* widget, GdkEventMotion* event, |
return TRUE; |
} |
-GdkPixbuf* GetOTRAvatar() { |
- static GdkPixbuf* otr_avatar = NULL; |
- if (!otr_avatar) { |
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
- otr_avatar = rb.GetNativeImageNamed( |
- IDR_OTR_ICON, ui::ResourceBundle::RTL_ENABLED).ToGdkPixbuf(); |
- } |
- return otr_avatar; |
-} |
- |
// Converts a GdkColor to a color_utils::HSL. |
color_utils::HSL GdkColorToHSL(const GdkColor* color) { |
color_utils::HSL hsl; |
@@ -150,15 +142,6 @@ GdkColor PickLuminosityContrastingColor(const GdkColor* base, |
return *one; |
} |
-// Returns true if there are multiple profiles created. This is used to |
-// determine whether to display the avatar image. |
-bool HasMultipleProfiles() { |
- ProfileInfoCache& cache = |
- g_browser_process->profile_manager()->GetProfileInfoCache(); |
- return ProfileManager::IsMultipleProfilesEnabled() && |
- cache.GetNumberOfProfiles() > 1; |
-} |
- |
} // namespace |
//////////////////////////////////////////////////////////////////////////////// |
@@ -803,11 +786,14 @@ void BrowserTitlebar::UpdateAvatar() { |
if (!avatar_) { |
if (IsOffTheRecord()) { |
- avatar_ = gtk_image_new_from_pixbuf(GetOTRAvatar()); |
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
+ gfx::Image avatar_image = |
+ rb.GetNativeImageNamed(IDR_OTR_ICON, ui::ResourceBundle::RTL_ENABLED); |
+ avatar_ = gtk_image_new_from_pixbuf(avatar_image.ToGdkPixbuf()); |
gtk_misc_set_alignment(GTK_MISC(avatar_), 0.0, 1.0); |
gtk_widget_set_size_request(avatar_, -1, 0); |
} else { |
- // Is using multi-profile avatar. |
+ // Use a clickable avatar. |
avatar_ = avatar_button_->widget(); |
} |
} |
@@ -827,23 +813,32 @@ void BrowserTitlebar::UpdateAvatar() { |
if (IsOffTheRecord()) |
return; |
- 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) { |
- bool is_gaia_picture = |
+ bool is_gaia_picture = false; |
+ gfx::Image avatar; |
+ if (ManagedMode::IsInManagedMode()) { |
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
+ avatar = rb.GetNativeImageNamed(IDR_MANAGED_MODE_AVATAR, |
+ ui::ResourceBundle::RTL_ENABLED); |
+ } else { |
+ 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; |
+ |
+ is_gaia_picture = |
cache.IsUsingGAIAPictureOfProfileAtIndex(index) && |
cache.GetGAIAPictureOfProfileAtIndex(index); |
- avatar_button_->SetIcon( |
- cache.GetAvatarIconOfProfileAtIndex(index), is_gaia_picture); |
- |
- BubbleGtk::ArrowLocationGtk arrow_location = |
- display_avatar_on_left_ ^ base::i18n::IsRTL() ? |
- BubbleGtk::ARROW_LOCATION_TOP_LEFT : |
- BubbleGtk::ARROW_LOCATION_TOP_RIGHT; |
- avatar_button_->set_menu_arrow_location(arrow_location); |
+ avatar = cache.GetAvatarIconOfProfileAtIndex(index); |
} |
+ avatar_button_->SetIcon(avatar, is_gaia_picture); |
+ |
+ BubbleGtk::ArrowLocationGtk arrow_location = |
+ display_avatar_on_left_ ^ base::i18n::IsRTL() ? |
+ BubbleGtk::ARROW_LOCATION_TOP_LEFT : |
+ BubbleGtk::ARROW_LOCATION_TOP_RIGHT; |
+ avatar_button_->set_menu_arrow_location(arrow_location); |
} |
void BrowserTitlebar::ShowFaviconMenu(GdkEventButton* event) { |
@@ -1093,8 +1088,13 @@ void BrowserTitlebar::ActiveWindowChanged(GdkWindow* active_window) { |
} |
bool BrowserTitlebar::ShouldDisplayAvatar() { |
- return (IsOffTheRecord() || HasMultipleProfiles()) && |
- browser_window_->browser()->is_type_tabbed(); |
+ if (IsOffTheRecord() || ManagedMode::IsInManagedMode()) |
+ return true; |
+ |
+ if (!browser_window_->browser()->is_type_tabbed()) |
+ return false; |
+ |
+ return AvatarMenuModel::ShouldShowAvatarMenu(); |
} |
bool BrowserTitlebar::IsOffTheRecord() { |