diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-16 20:52:28 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-16 20:52:28 +0000 |
commit | d9edd31291a2b2d1d8492305dfccfa963c0b24cf (patch) | |
tree | d80cc090936c40c67c8d31eeac5437e6d35c821b | |
parent | 29a98368a74cc97d046c3a5b4f3db2dfaaeef22f (diff) | |
download | chromium_src-d9edd31291a2b2d1d8492305dfccfa963c0b24cf.zip chromium_src-d9edd31291a2b2d1d8492305dfccfa963c0b24cf.tar.gz chromium_src-d9edd31291a2b2d1d8492305dfccfa963c0b24cf.tar.bz2 |
Pass the theme icons for Chrome if there are.
BUG=55176
TEST=1,Install Chrome icon from http://gnome-look.org/content/show.php/Buuf?content=81153. 2, Launch Chrome. 3, See task manager with Alt-Tab and check the Chrome icon to the theme icon.
Review URL: http://codereview.chromium.org/6250043
Patch from Naoki Takano <takano.naoki@gmail.com>.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75179 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/browser_main.cc | 7 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/browser_window_gtk.cc | 8 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/gtk_theme_provider.cc | 5 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/gtk_util.cc | 28 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/gtk_util.h | 6 |
5 files changed, 43 insertions, 11 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc index 694d214..2a42a88 100644 --- a/chrome/browser/browser_main.cc +++ b/chrome/browser/browser_main.cc @@ -1256,11 +1256,8 @@ int BrowserMain(const MainFunctionParams& parameters) { #endif // defined(OS_MACOSX) } -#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_CHROMEOS) - // gdk_pixbuf_loader_write always fails on chromeos device. - // Disabling for chromeos as well because chromeos is not using them. - // http://crosbug.com/4996 . - gtk_util::SetDefaultWindowIcon(); +#if defined(TOOLKIT_GTK) + g_set_application_name(l10n_util::GetStringUTF8(IDS_PRODUCT_NAME).c_str()); #endif std::string try_chrome = diff --git a/chrome/browser/ui/gtk/browser_window_gtk.cc b/chrome/browser/ui/gtk/browser_window_gtk.cc index a3db334..708800b 100644 --- a/chrome/browser/ui/gtk/browser_window_gtk.cc +++ b/chrome/browser/ui/gtk/browser_window_gtk.cc @@ -1644,6 +1644,14 @@ void BrowserWindowGtk::InitWidgets() { // proper control layout. UpdateCustomFrame(); + // We have to call this after the first window is created, but after that only + // when the theme changes. + static bool default_icon_set = false; + if (!default_icon_set) { + gtk_util::SetDefaultWindowIcon(window_); + default_icon_set = true; + } + gtk_container_add(GTK_CONTAINER(window_), window_container_); gtk_widget_show(window_container_); browser_->tabstrip_model()->AddObserver(this); diff --git a/chrome/browser/ui/gtk/gtk_theme_provider.cc b/chrome/browser/ui/gtk/gtk_theme_provider.cc index d0227ae..7c88d1a 100644 --- a/chrome/browser/ui/gtk/gtk_theme_provider.cc +++ b/chrome/browser/ui/gtk/gtk_theme_provider.cc @@ -11,6 +11,8 @@ #include "base/environment.h" #include "base/nix/xdg_util.h" #include "base/stl_util-inl.h" +#include "chrome/browser/browser_list.h" +#include "chrome/browser/browser_window.h" #include "chrome/browser/metrics/user_metrics.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" @@ -632,6 +634,9 @@ void GtkThemeProvider::NotifyThemeChanged(const Extension* extension) { gtk_chrome_button_set_use_gtk_rendering( GTK_CHROME_BUTTON(*it), use_gtk_); } + + GtkWindow* window = BrowserList::GetLastActive()->window()->GetNativeHandle(); + gtk_util::SetDefaultWindowIcon(window); } void GtkThemeProvider::FreePlatformCaches() { diff --git a/chrome/browser/ui/gtk/gtk_util.cc b/chrome/browser/ui/gtk/gtk_util.cc index e757c74..366d5fc 100644 --- a/chrome/browser/ui/gtk/gtk_util.cc +++ b/chrome/browser/ui/gtk/gtk_util.cc @@ -56,6 +56,12 @@ using WebKit::WebDragOperationMove; namespace { +#if defined(GOOGLE_CHROME_BUILD) +static const char* kIconName = "google-chrome"; +#else +static const char* kIconName = "chromium-browser"; +#endif + const char kBoldLabelMarkup[] = "<span weight='bold'>%s</span>"; // Callback used in RemoveAllChildren. @@ -609,10 +615,24 @@ void SetWindowIcon(GtkWindow* window) { g_list_free(icon_list); } -void SetDefaultWindowIcon() { - GList* icon_list = GetIconList(); - gtk_window_set_default_icon_list(icon_list); - g_list_free(icon_list); +void SetDefaultWindowIcon(GtkWindow* window) { + GtkIconTheme* theme = + gtk_icon_theme_get_for_screen(gtk_widget_get_screen(GTK_WIDGET(window))); + + if (gtk_icon_theme_has_icon(theme, kIconName)) { + gtk_window_set_default_icon_name(kIconName); + // Sometimes the WM fails to update the icon when we tell it to. The above + // line should be enough to update all existing windows, but it can fail, + // e.g. with Lucid/metacity. The following line seems to fix the common + // case where the first window created doesn't have an icon. + gtk_window_set_icon_name(window, kIconName); + } else { + GList* icon_list = GetIconList(); + gtk_window_set_default_icon_list(icon_list); + // Same logic applies here. + gtk_window_set_icon_list(window, icon_list); + g_list_free(icon_list); + } } GtkWidget* AddButtonToDialog(GtkWidget* dialog, const gchar* text, diff --git a/chrome/browser/ui/gtk/gtk_util.h b/chrome/browser/ui/gtk/gtk_util.h index d88ecdc..02c36e5 100644 --- a/chrome/browser/ui/gtk/gtk_util.h +++ b/chrome/browser/ui/gtk/gtk_util.h @@ -203,8 +203,10 @@ bool WidgetContainsCursor(GtkWidget* widget); // border or alt-tab list). void SetWindowIcon(GtkWindow* window); -// Sets the default window icon for windows created in this app. -void SetDefaultWindowIcon(); +// Sets the default window icon for all windows created in this app. |window| +// is used to determine if a themed icon exists. If so, we use that icon, +// otherwise we use the icon packaged with Chrome. +void SetDefaultWindowIcon(GtkWindow* window); // Adds an action button with the given text to the dialog. Only useful when you // want a stock icon but not the stock text to go with it. Returns the button. |