summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-16 20:52:28 +0000
committererg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-16 20:52:28 +0000
commitd9edd31291a2b2d1d8492305dfccfa963c0b24cf (patch)
treed80cc090936c40c67c8d31eeac5437e6d35c821b
parent29a98368a74cc97d046c3a5b4f3db2dfaaeef22f (diff)
downloadchromium_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.cc7
-rw-r--r--chrome/browser/ui/gtk/browser_window_gtk.cc8
-rw-r--r--chrome/browser/ui/gtk/gtk_theme_provider.cc5
-rw-r--r--chrome/browser/ui/gtk/gtk_util.cc28
-rw-r--r--chrome/browser/ui/gtk/gtk_util.h6
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.