Index: chrome/browser/ui/gtk/gtk_theme_service.h |
diff --git a/chrome/browser/ui/gtk/gtk_theme_service.h b/chrome/browser/ui/gtk/gtk_theme_service.h |
index 41420dc20e8509d2b10a925d5c71eb7489d4f795..0c5d98907d7076af9133d5080c648a5e4a819548 100644 |
--- a/chrome/browser/ui/gtk/gtk_theme_service.h |
+++ b/chrome/browser/ui/gtk/gtk_theme_service.h |
@@ -35,6 +35,15 @@ typedef struct _GtkWidget GtkWidget; |
// Specialization of ThemeService which supplies system colors. |
class GtkThemeService : public ThemeService { |
public: |
+ // A list of integer keys for a separate PerDisplaySurfaceMap that keeps |
+ // what would otherwise be static icons on the X11 server. |
+ enum CairoDefaultIcon { |
+ NATIVE_FAVICON = 1, |
+ CHROME_FAVICON, |
+ NATIVE_FOLDER, |
+ CHROME_FOLDER |
+ }; |
+ |
// Returns GtkThemeService, casted from our superclass. |
static GtkThemeService* GetFrom(Profile* profile); |
@@ -120,6 +129,10 @@ class GtkThemeService : public ThemeService { |
CairoCachedSurface* GetUnthemedSurfaceNamed(int id, |
GtkWidget* widget_on_display); |
+ // A way to get a cached cairo surface for the equivalent of GetFolderIcon() |
+ // or GetDefaultFavicon(). Uses the ids defined in CairoDefaultIcon. |
+ CairoCachedSurface* GetCairoIcon(int id, GtkWidget* widget_on_display); |
+ |
// Returns colors that we pass to webkit to match the system theme. |
const SkColor& get_focus_ring_color() const { return focus_ring_color_; } |
const SkColor& get_thumb_active_color() const { return thumb_active_color_; } |
@@ -156,6 +169,8 @@ class GtkThemeService : public ThemeService { |
typedef std::map<int, CairoCachedSurface*> CairoCachedSurfaceMap; |
typedef std::map<GdkDisplay*, CairoCachedSurfaceMap> PerDisplaySurfaceMap; |
+ typedef GdkPixbuf*(GtkThemeService::*PixbufProvidingMethod)(int id) const; |
+ |
// Clears all the GTK color overrides. |
virtual void ClearAllThemeData(); |
@@ -235,10 +250,21 @@ class GtkThemeService : public ThemeService { |
void GetSelectedEntryForegroundHSL(color_utils::HSL* tint) const; |
// Implements GetXXXSurfaceNamed(), given the appropriate pixbuf to use. |
- CairoCachedSurface* GetSurfaceNamedImpl(int id, |
- PerDisplaySurfaceMap* surface_map, |
- GdkPixbuf* pixbuf, |
- GtkWidget* widget_on_display); |
+ CairoCachedSurface* GetSurfaceNamedImpl( |
+ int id, |
+ PerDisplaySurfaceMap* surface_map, |
+ PixbufProvidingMethod provider, |
+ GtkWidget* widget_on_display); |
+ |
+ // PixbufProvidingMethods passed to GetSurfaceNamedImpl from GetSurface* |
+ // methods. We don't want to always fetch the pixbuf and pass the pixbuf to |
+ // GetSurfaceNamedImpl which will throw away the result most of the time. |
+ // |
+ // Especially since GetUnthemedNativePixbuf always locks and |
+ // GetRTLEnabledPixbufNamedWrapper locks in debug builds. |
+ GdkPixbuf* GetRTLEnabledPixbufNamedWrapper(int id) const; |
+ GdkPixbuf* GetUnthemedNativePixbuf(int id) const; |
+ GdkPixbuf* GetPixbufForIconId(int id) const; |
// Handles signal from GTK that our theme has been changed. |
CHROMEGTK_CALLBACK_1(GtkThemeService, void, OnStyleSet, GtkStyle*); |
@@ -306,6 +332,7 @@ class GtkThemeService : public ThemeService { |
// Cairo surfaces for each GdkDisplay. |
PerDisplaySurfaceMap per_display_surfaces_; |
PerDisplaySurfaceMap per_display_unthemed_surfaces_; |
+ PerDisplaySurfaceMap per_display_icon_surfaces_; |
PrefChangeRegistrar registrar_; |