OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/gtk/gtk_theme_provider.h" | 5 #include "chrome/browser/gtk/gtk_theme_provider.h" |
6 | 6 |
7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
8 | 8 |
9 #include "base/gfx/gtk_util.h" | 9 #include "base/gfx/gtk_util.h" |
10 #include "chrome/browser/metrics/user_metrics.h" | 10 #include "chrome/browser/metrics/user_metrics.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 | 30 |
31 } // namespace | 31 } // namespace |
32 | 32 |
33 // static | 33 // static |
34 GtkThemeProvider* GtkThemeProvider::GetFrom(Profile* profile) { | 34 GtkThemeProvider* GtkThemeProvider::GetFrom(Profile* profile) { |
35 return static_cast<GtkThemeProvider*>(profile->GetThemeProvider()); | 35 return static_cast<GtkThemeProvider*>(profile->GetThemeProvider()); |
36 } | 36 } |
37 | 37 |
38 GtkThemeProvider::GtkThemeProvider() | 38 GtkThemeProvider::GtkThemeProvider() |
39 : BrowserThemeProvider(), | 39 : BrowserThemeProvider(), |
40 fake_window_(gtk_window_new(GTK_WINDOW_TOPLEVEL)), | 40 fake_window_(gtk_window_new(GTK_WINDOW_TOPLEVEL)) { |
41 fake_label_(gtk_label_new("")) { | 41 fake_label_.Own(gtk_label_new("")); |
| 42 |
42 // Only realized widgets receive style-set notifications, which we need to | 43 // Only realized widgets receive style-set notifications, which we need to |
43 // broadcast new theme images and colors. | 44 // broadcast new theme images and colors. |
44 gtk_widget_realize(fake_window_); | 45 gtk_widget_realize(fake_window_); |
45 g_signal_connect(fake_window_, "style-set", G_CALLBACK(&OnStyleSet), this); | 46 g_signal_connect(fake_window_, "style-set", G_CALLBACK(&OnStyleSet), this); |
46 } | 47 } |
47 | 48 |
48 GtkThemeProvider::~GtkThemeProvider() { | 49 GtkThemeProvider::~GtkThemeProvider() { |
49 profile()->GetPrefs()->RemovePrefObserver(prefs::kUsesSystemTheme, this); | 50 profile()->GetPrefs()->RemovePrefObserver(prefs::kUsesSystemTheme, this); |
50 gtk_widget_destroy(fake_window_); | 51 gtk_widget_destroy(fake_window_); |
51 gtk_widget_destroy(fake_label_); | 52 fake_label_.Destroy(); |
52 | 53 |
53 // Disconnect from the destroy signal of any redisual widgets in | 54 // Disconnect from the destroy signal of any redisual widgets in |
54 // |chrome_buttons_|. | 55 // |chrome_buttons_|. |
55 for (std::vector<GtkWidget*>::iterator it = chrome_buttons_.begin(); | 56 for (std::vector<GtkWidget*>::iterator it = chrome_buttons_.begin(); |
56 it != chrome_buttons_.end(); ++it) { | 57 it != chrome_buttons_.end(); ++it) { |
57 gtk_signal_disconnect_by_data(GTK_OBJECT(*it), this); | 58 gtk_signal_disconnect_by_data(GTK_OBJECT(*it), this); |
58 } | 59 } |
59 } | 60 } |
60 | 61 |
61 void GtkThemeProvider::Init(Profile* profile) { | 62 void GtkThemeProvider::Init(Profile* profile) { |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 GtkThemeProvider* provider) { | 162 GtkThemeProvider* provider) { |
162 if (provider->profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme)) { | 163 if (provider->profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme)) { |
163 provider->ClearAllThemeData(); | 164 provider->ClearAllThemeData(); |
164 provider->LoadGtkValues(); | 165 provider->LoadGtkValues(); |
165 provider->NotifyThemeChanged(); | 166 provider->NotifyThemeChanged(); |
166 } | 167 } |
167 } | 168 } |
168 | 169 |
169 void GtkThemeProvider::LoadGtkValues() { | 170 void GtkThemeProvider::LoadGtkValues() { |
170 GtkStyle* window_style = gtk_rc_get_style(fake_window_); | 171 GtkStyle* window_style = gtk_rc_get_style(fake_window_); |
171 GtkStyle* label_style = gtk_rc_get_style(fake_label_); | 172 GtkStyle* label_style = gtk_rc_get_style(fake_label_.get()); |
172 | 173 |
173 SetThemeColorFromGtk(kColorFrame, &window_style->bg[GTK_STATE_SELECTED]); | 174 SetThemeColorFromGtk(kColorFrame, &window_style->bg[GTK_STATE_SELECTED]); |
174 // Skip COLOR_FRAME_INACTIVE and the incognito colors, as they will be | 175 // Skip COLOR_FRAME_INACTIVE and the incognito colors, as they will be |
175 // autogenerated from tints. | 176 // autogenerated from tints. |
176 SetThemeColorFromGtk(kColorToolbar, | 177 SetThemeColorFromGtk(kColorToolbar, |
177 &window_style->bg[GTK_STATE_NORMAL]); | 178 &window_style->bg[GTK_STATE_NORMAL]); |
178 SetThemeColorFromGtk(kColorTabText, | 179 SetThemeColorFromGtk(kColorTabText, |
179 &label_style->text[GTK_STATE_NORMAL]); | 180 &label_style->text[GTK_STATE_NORMAL]); |
180 SetThemeColorFromGtk(kColorBackgroundTabText, | 181 SetThemeColorFromGtk(kColorBackgroundTabText, |
181 &label_style->text[GTK_STATE_NORMAL]); | 182 &label_style->text[GTK_STATE_NORMAL]); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 } | 235 } |
235 | 236 |
236 void GtkThemeProvider::OnDestroyChromeButton(GtkWidget* button, | 237 void GtkThemeProvider::OnDestroyChromeButton(GtkWidget* button, |
237 GtkThemeProvider* provider) { | 238 GtkThemeProvider* provider) { |
238 std::vector<GtkWidget*>::iterator it = | 239 std::vector<GtkWidget*>::iterator it = |
239 find(provider->chrome_buttons_.begin(), provider->chrome_buttons_.end(), | 240 find(provider->chrome_buttons_.begin(), provider->chrome_buttons_.end(), |
240 button); | 241 button); |
241 if (it != provider->chrome_buttons_.end()) | 242 if (it != provider->chrome_buttons_.end()) |
242 provider->chrome_buttons_.erase(it); | 243 provider->chrome_buttons_.erase(it); |
243 } | 244 } |
OLD | NEW |