diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-21 20:17:25 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-21 20:17:25 +0000 |
commit | 419766797da235ca0017e51ec22a9d55c437cae1 (patch) | |
tree | d5501c7d9caee7dc4950d5625263dc210e07e65c /chrome/browser/gtk | |
parent | 78825af8f342b243d7e031b81afd6e24fdf361e7 (diff) | |
download | chromium_src-419766797da235ca0017e51ec22a9d55c437cae1.zip chromium_src-419766797da235ca0017e51ec22a9d55c437cae1.tar.gz chromium_src-419766797da235ca0017e51ec22a9d55c437cae1.tar.bz2 |
GTK: Popup notification is readable with dark themes in chrome theme mode.
Review URL: http://codereview.chromium.org/155860
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21206 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r-- | chrome/browser/gtk/blocked_popup_container_view_gtk.cc | 41 | ||||
-rw-r--r-- | chrome/browser/gtk/blocked_popup_container_view_gtk.h | 11 |
2 files changed, 50 insertions, 2 deletions
diff --git a/chrome/browser/gtk/blocked_popup_container_view_gtk.cc b/chrome/browser/gtk/blocked_popup_container_view_gtk.cc index 6224ff2..f68a245 100644 --- a/chrome/browser/gtk/blocked_popup_container_view_gtk.cc +++ b/chrome/browser/gtk/blocked_popup_container_view_gtk.cc @@ -14,6 +14,7 @@ #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/browser/tab_contents/tab_contents_view_gtk.h" #include "chrome/common/gtk_util.h" +#include "chrome/common/notification_service.h" #include "grit/generated_resources.h" #include "grit/theme_resources.h" @@ -74,8 +75,14 @@ void BlockedPopupContainerViewGtk::ShowView() { void BlockedPopupContainerViewGtk::UpdateLabel() { size_t blocked_popups = model_->GetBlockedPopupCount(); - gtk_button_set_label( - GTK_BUTTON(menu_button_), + GtkWidget* label = gtk_bin_get_child(GTK_BIN(menu_button_)); + if (!label) { + label = gtk_label_new(""); + gtk_container_add(GTK_CONTAINER(menu_button_), label); + } + + gtk_label_set_text( + GTK_LABEL(label), (blocked_popups > 0) ? l10n_util::GetStringFUTF8(IDS_POPUPS_BLOCKED_COUNT, UintToString16(blocked_popups)).c_str() : @@ -92,6 +99,31 @@ void BlockedPopupContainerViewGtk::Destroy() { delete this; } +void BlockedPopupContainerViewGtk::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + DCHECK(type == NotificationType::BROWSER_THEME_CHANGED); + + // Make sure the label exists (so we can change its colors). + UpdateLabel(); + + // Update the label's colors. + GtkWidget* label = gtk_bin_get_child(GTK_BIN(menu_button_)); + if (theme_provider_->UseGtkTheme()) { + gtk_widget_modify_fg(label, GTK_STATE_NORMAL, NULL); + gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, NULL); + gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, NULL); + gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, NULL); + } else { + GdkColor color = theme_provider_->GetGdkColor( + BrowserThemeProvider::COLOR_BOOKMARK_TEXT); + gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &color); + gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &color); + gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &color); + gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &color); + } +} + bool BlockedPopupContainerViewGtk::IsCommandEnabled(int command_id) const { return true; } @@ -126,6 +158,11 @@ BlockedPopupContainerViewGtk::BlockedPopupContainerViewGtk( theme_provider_(GtkThemeProvider::GetFrom(container->profile())), close_button_(CustomDrawButton::CloseButton()) { Init(); + + registrar_.Add(this, + NotificationType::BROWSER_THEME_CHANGED, + NotificationService::AllSources()); + theme_provider_->InitThemesFor(this); } void BlockedPopupContainerViewGtk::Init() { diff --git a/chrome/browser/gtk/blocked_popup_container_view_gtk.h b/chrome/browser/gtk/blocked_popup_container_view_gtk.h index 02bd791..f74e880 100644 --- a/chrome/browser/gtk/blocked_popup_container_view_gtk.h +++ b/chrome/browser/gtk/blocked_popup_container_view_gtk.h @@ -11,12 +11,15 @@ #include "base/scoped_ptr.h" #include "chrome/browser/blocked_popup_container.h" #include "chrome/browser/gtk/menu_gtk.h" +#include "chrome/common/notification_observer.h" +#include "chrome/common/notification_registrar.h" #include "chrome/common/owned_widget_gtk.h" class BlockedPopupContainerInternalView; class CustomDrawButton; class GtkThemeProvider; class MenuGtk; +class NotificationObserver; class PrefService; class Profile; class TabContents; @@ -29,6 +32,7 @@ class ImageButton; // The GTK blocked popup container notification. class BlockedPopupContainerViewGtk : public BlockedPopupContainerView, + public NotificationObserver, public MenuGtk::Delegate { public: virtual ~BlockedPopupContainerViewGtk(); @@ -51,6 +55,11 @@ class BlockedPopupContainerViewGtk : public BlockedPopupContainerView, virtual void HideView(); virtual void Destroy(); + // Overridden from NotificationObserver: + virtual void Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details); + // Overridden from MenuGtk::Delegate: virtual bool IsCommandEnabled(int command_id) const; virtual bool IsItemChecked(int command_id) const; @@ -76,6 +85,8 @@ class BlockedPopupContainerViewGtk : public BlockedPopupContainerView, static gboolean OnContainerExpose(GtkWidget* widget, GdkEventExpose* event, BlockedPopupContainerViewGtk* container); + NotificationRegistrar registrar_; + // Our model; calling the shots. BlockedPopupContainer* model_; |