Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7060)

Unified Diff: chrome/browser/gtk/go_button_gtk.cc

Issue 149681: GTK Themes: Make the omnibox area look more native. (Closed)
Patch Set: Change names for Dean Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/gtk/go_button_gtk.h ('k') | chrome/browser/gtk/location_bar_view_gtk.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/go_button_gtk.cc
diff --git a/chrome/browser/gtk/go_button_gtk.cc b/chrome/browser/gtk/go_button_gtk.cc
index 6ea9369d352f9a5d3cf216056b86f8713ee5bd08..34455de2d60ed4c5a641806fede4a29019796b83 100644
--- a/chrome/browser/gtk/go_button_gtk.cc
+++ b/chrome/browser/gtk/go_button_gtk.cc
@@ -9,9 +9,10 @@
#include "base/message_loop.h"
#include "chrome/app/chrome_dll_resource.h"
#include "chrome/browser/browser.h"
-#include "chrome/browser/gtk/location_bar_view_gtk.h"
#include "chrome/browser/gtk/gtk_theme_provider.h"
+#include "chrome/browser/gtk/location_bar_view_gtk.h"
#include "chrome/browser/profile.h"
+#include "chrome/common/notification_service.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
@@ -23,10 +24,10 @@ GoButtonGtk::GoButtonGtk(LocationBarViewGtk* location_bar, Browser* browser)
intended_mode_(MODE_GO),
visible_mode_(MODE_GO),
state_(BS_NORMAL),
- go_(browser ? GtkThemeProvider::GetFrom(browser->profile()) : NULL,
- IDR_GO, IDR_GO_P, IDR_GO_H, 0),
- stop_(browser ? GtkThemeProvider::GetFrom(browser->profile()) : NULL,
- IDR_STOP, IDR_STOP_P, IDR_STOP_H, 0),
+ theme_provider_(browser ?
+ GtkThemeProvider::GetFrom(browser->profile()) : NULL),
+ go_(theme_provider_, IDR_GO, IDR_GO_P, IDR_GO_H, 0),
+ stop_(theme_provider_, IDR_STOP, IDR_STOP_P, IDR_STOP_H, 0),
widget_(gtk_button_new()) {
gtk_widget_set_size_request(widget_.get(),
gdk_pixbuf_get_width(go_.pixbufs(0)),
@@ -47,6 +48,13 @@ GoButtonGtk::GoButtonGtk(LocationBarViewGtk* location_bar, Browser* browser)
GTK_WIDGET_UNSET_FLAGS(widget_.get(), GTK_CAN_FOCUS);
SetTooltip();
+
+ if (theme_provider_) {
+ theme_provider_->InitThemesFor(this);
+ registrar_.Add(this,
+ NotificationType::BROWSER_THEME_CHANGED,
+ NotificationService::AllSources());
+ }
}
GoButtonGtk::~GoButtonGtk() {
@@ -65,9 +73,21 @@ void GoButtonGtk::ChangeMode(Mode mode, bool force) {
gtk_widget_queue_draw(widget_.get());
SetTooltip();
visible_mode_ = mode;
+
+ UpdateThemeButtons();
}
}
+void GoButtonGtk::Observe(NotificationType type,
+ const NotificationSource& source, const NotificationDetails& details) {
+ DCHECK(NotificationType::BROWSER_THEME_CHANGED == type);
+
+ GtkThemeProvider* provider = static_cast<GtkThemeProvider*>(
+ Source<GtkThemeProvider>(source).ptr());
+ DCHECK(provider == theme_provider_);
+ UpdateThemeButtons();
+}
+
Task* GoButtonGtk::CreateButtonTimerTask() {
return stop_timer_.NewRunnableMethod(&GoButtonGtk::OnButtonTimer);
}
@@ -81,10 +101,14 @@ void GoButtonGtk::OnButtonTimer() {
gboolean GoButtonGtk::OnExpose(GtkWidget* widget,
GdkEventExpose* e,
GoButtonGtk* button) {
- if (button->visible_mode_ == MODE_GO) {
- return button->go_.OnExpose(widget, e);
+ if (button->theme_provider_->UseGtkTheme()) {
+ return FALSE;
} else {
- return button->stop_.OnExpose(widget, e);
+ if (button->visible_mode_ == MODE_GO) {
+ return button->go_.OnExpose(widget, e);
+ } else {
+ return button->stop_.OnExpose(widget, e);
+ }
}
}
@@ -173,3 +197,31 @@ void GoButtonGtk::SetTooltip() {
widget_.get(), l10n_util::GetStringUTF8(IDS_TOOLTIP_STOP).c_str());
}
}
+
+void GoButtonGtk::UpdateThemeButtons() {
+ if (theme_provider_->UseGtkTheme()) {
+ // TODO(erg): Waiting for Glen to make a version of these that don't have a
+ // button border on it.
+ if (intended_mode_ == MODE_GO) {
+ gtk_button_set_image(
+ GTK_BUTTON(widget_.get()),
+ gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_BUTTON));
+ } else {
+ gtk_button_set_image(
+ GTK_BUTTON(widget_.get()),
+ gtk_image_new_from_stock(GTK_STOCK_STOP, GTK_ICON_SIZE_BUTTON));
+ }
+
+ gtk_widget_set_size_request(widget_.get(), -1, -1);
+ gtk_widget_set_app_paintable(widget_.get(), FALSE);
+ gtk_widget_set_double_buffered(widget_.get(), TRUE);
+ } else {
+ gtk_widget_set_size_request(widget_.get(),
+ gdk_pixbuf_get_width(go_.pixbufs(0)),
+ gdk_pixbuf_get_height(go_.pixbufs(0)));
+
+ gtk_widget_set_app_paintable(widget_.get(), TRUE);
+ // We effectively double-buffer by virtue of having only one image...
+ gtk_widget_set_double_buffered(widget_.get(), FALSE);
+ }
+}
« no previous file with comments | « chrome/browser/gtk/go_button_gtk.h ('k') | chrome/browser/gtk/location_bar_view_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698