| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "app/resource_bundle.h" | 9 #include "app/resource_bundle.h" |
| 10 #include "base/stl_util-inl.h" | 10 #include "base/stl_util-inl.h" |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 void GtkThemeProvider::UseDefaultTheme() { | 188 void GtkThemeProvider::UseDefaultTheme() { |
| 189 profile()->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, false); | 189 profile()->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, false); |
| 190 LoadDefaultValues(); | 190 LoadDefaultValues(); |
| 191 BrowserThemeProvider::UseDefaultTheme(); | 191 BrowserThemeProvider::UseDefaultTheme(); |
| 192 } | 192 } |
| 193 | 193 |
| 194 void GtkThemeProvider::SetNativeTheme() { | 194 void GtkThemeProvider::SetNativeTheme() { |
| 195 profile()->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, true); | 195 profile()->GetPrefs()->SetBoolean(prefs::kUsesSystemTheme, true); |
| 196 ClearAllThemeData(); | 196 ClearAllThemeData(); |
| 197 LoadGtkValues(); | 197 LoadGtkValues(); |
| 198 NotifyThemeChanged(); | 198 NotifyThemeChanged(NULL); |
| 199 } | 199 } |
| 200 | 200 |
| 201 void GtkThemeProvider::Observe(NotificationType type, | 201 void GtkThemeProvider::Observe(NotificationType type, |
| 202 const NotificationSource& source, | 202 const NotificationSource& source, |
| 203 const NotificationDetails& details) { | 203 const NotificationDetails& details) { |
| 204 if ((type == NotificationType::PREF_CHANGED) && | 204 if ((type == NotificationType::PREF_CHANGED) && |
| 205 (*Details<std::wstring>(details).ptr() == prefs::kUsesSystemTheme)) | 205 (*Details<std::wstring>(details).ptr() == prefs::kUsesSystemTheme)) |
| 206 use_gtk_ = profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme); | 206 use_gtk_ = profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme); |
| 207 } | 207 } |
| 208 | 208 |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 | 388 |
| 389 void GtkThemeProvider::LoadThemePrefs() { | 389 void GtkThemeProvider::LoadThemePrefs() { |
| 390 if (use_gtk_) { | 390 if (use_gtk_) { |
| 391 LoadGtkValues(); | 391 LoadGtkValues(); |
| 392 } else { | 392 } else { |
| 393 LoadDefaultValues(); | 393 LoadDefaultValues(); |
| 394 BrowserThemeProvider::LoadThemePrefs(); | 394 BrowserThemeProvider::LoadThemePrefs(); |
| 395 } | 395 } |
| 396 } | 396 } |
| 397 | 397 |
| 398 void GtkThemeProvider::NotifyThemeChanged() { | 398 void GtkThemeProvider::NotifyThemeChanged(Extension* extension) { |
| 399 BrowserThemeProvider::NotifyThemeChanged(); | 399 BrowserThemeProvider::NotifyThemeChanged(extension); |
| 400 | 400 |
| 401 // Notify all GtkChromeButtons of their new rendering mode: | 401 // Notify all GtkChromeButtons of their new rendering mode: |
| 402 for (std::vector<GtkWidget*>::iterator it = chrome_buttons_.begin(); | 402 for (std::vector<GtkWidget*>::iterator it = chrome_buttons_.begin(); |
| 403 it != chrome_buttons_.end(); ++it) { | 403 it != chrome_buttons_.end(); ++it) { |
| 404 gtk_chrome_button_set_use_gtk_rendering( | 404 gtk_chrome_button_set_use_gtk_rendering( |
| 405 GTK_CHROME_BUTTON(*it), use_gtk_); | 405 GTK_CHROME_BUTTON(*it), use_gtk_); |
| 406 } | 406 } |
| 407 } | 407 } |
| 408 | 408 |
| 409 void GtkThemeProvider::FreePlatformCaches() { | 409 void GtkThemeProvider::FreePlatformCaches() { |
| 410 BrowserThemeProvider::FreePlatformCaches(); | 410 BrowserThemeProvider::FreePlatformCaches(); |
| 411 FreePerDisplaySurfaces(); | 411 FreePerDisplaySurfaces(); |
| 412 STLDeleteValues(>k_images_); | 412 STLDeleteValues(>k_images_); |
| 413 } | 413 } |
| 414 | 414 |
| 415 // static | 415 // static |
| 416 void GtkThemeProvider::OnStyleSet(GtkWidget* widget, | 416 void GtkThemeProvider::OnStyleSet(GtkWidget* widget, |
| 417 GtkStyle* previous_style, | 417 GtkStyle* previous_style, |
| 418 GtkThemeProvider* provider) { | 418 GtkThemeProvider* provider) { |
| 419 GdkPixbuf* default_folder_icon = default_folder_icon_; | 419 GdkPixbuf* default_folder_icon = default_folder_icon_; |
| 420 GdkPixbuf* default_bookmark_icon = default_bookmark_icon_; | 420 GdkPixbuf* default_bookmark_icon = default_bookmark_icon_; |
| 421 default_folder_icon_ = NULL; | 421 default_folder_icon_ = NULL; |
| 422 default_bookmark_icon_ = NULL; | 422 default_bookmark_icon_ = NULL; |
| 423 | 423 |
| 424 if (provider->profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme)) { | 424 if (provider->profile()->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme)) { |
| 425 provider->ClearAllThemeData(); | 425 provider->ClearAllThemeData(); |
| 426 provider->LoadGtkValues(); | 426 provider->LoadGtkValues(); |
| 427 provider->NotifyThemeChanged(); | 427 provider->NotifyThemeChanged(NULL); |
| 428 } | 428 } |
| 429 | 429 |
| 430 // Free the old icons only after the theme change notification has gone | 430 // Free the old icons only after the theme change notification has gone |
| 431 // through. | 431 // through. |
| 432 if (default_folder_icon) | 432 if (default_folder_icon) |
| 433 g_object_unref(default_folder_icon); | 433 g_object_unref(default_folder_icon); |
| 434 if (default_bookmark_icon) | 434 if (default_bookmark_icon) |
| 435 g_object_unref(default_bookmark_icon); | 435 g_object_unref(default_bookmark_icon); |
| 436 } | 436 } |
| 437 | 437 |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 } | 730 } |
| 731 | 731 |
| 732 void GtkThemeProvider::OnDestroyChromeButton(GtkWidget* button, | 732 void GtkThemeProvider::OnDestroyChromeButton(GtkWidget* button, |
| 733 GtkThemeProvider* provider) { | 733 GtkThemeProvider* provider) { |
| 734 std::vector<GtkWidget*>::iterator it = | 734 std::vector<GtkWidget*>::iterator it = |
| 735 find(provider->chrome_buttons_.begin(), provider->chrome_buttons_.end(), | 735 find(provider->chrome_buttons_.begin(), provider->chrome_buttons_.end(), |
| 736 button); | 736 button); |
| 737 if (it != provider->chrome_buttons_.end()) | 737 if (it != provider->chrome_buttons_.end()) |
| 738 provider->chrome_buttons_.erase(it); | 738 provider->chrome_buttons_.erase(it); |
| 739 } | 739 } |
| OLD | NEW |