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

Unified Diff: chrome/browser/gtk/toolbar_star_toggle_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/toolbar_star_toggle_gtk.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/toolbar_star_toggle_gtk.cc
diff --git a/chrome/browser/gtk/toolbar_star_toggle_gtk.cc b/chrome/browser/gtk/toolbar_star_toggle_gtk.cc
index 0fd10454521a81edf76779199c86bd027a960271..631ad2c0cf5facddd384c22b46554e61324c4acf 100644
--- a/chrome/browser/gtk/toolbar_star_toggle_gtk.cc
+++ b/chrome/browser/gtk/toolbar_star_toggle_gtk.cc
@@ -10,16 +10,16 @@
#include "chrome/browser/gtk/browser_toolbar_gtk.h"
#include "chrome/browser/gtk/gtk_theme_provider.h"
#include "chrome/browser/profile.h"
+#include "chrome/common/notification_service.h"
#include "grit/theme_resources.h"
ToolbarStarToggleGtk::ToolbarStarToggleGtk(BrowserToolbarGtk* host)
: host_(host),
widget_(gtk_button_new()),
is_starred_(false),
- unstarred_(GtkThemeProvider::GetFrom(host->profile()),
- IDR_STAR, IDR_STAR_P, IDR_STAR_H, IDR_STAR_D),
- starred_(GtkThemeProvider::GetFrom(host->profile()),
- IDR_STARRED, IDR_STARRED_P, IDR_STARRED_H, 0) {
+ theme_provider_(GtkThemeProvider::GetFrom(host->profile())),
+ unstarred_(theme_provider_, IDR_STAR, IDR_STAR_P, IDR_STAR_H, IDR_STAR_D),
+ starred_(theme_provider_, IDR_STARRED, IDR_STARRED_P, IDR_STARRED_H, 0) {
gtk_widget_set_size_request(widget_.get(),
gdk_pixbuf_get_width(unstarred_.pixbufs(0)),
gdk_pixbuf_get_height(unstarred_.pixbufs(0)));
@@ -27,15 +27,31 @@ ToolbarStarToggleGtk::ToolbarStarToggleGtk(BrowserToolbarGtk* host)
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);
+
g_signal_connect(G_OBJECT(widget_.get()), "expose-event",
G_CALLBACK(OnExpose), this);
GTK_WIDGET_UNSET_FLAGS(widget_.get(), GTK_CAN_FOCUS);
+
+ theme_provider_->InitThemesFor(this);
+ registrar_.Add(this,
+ NotificationType::BROWSER_THEME_CHANGED,
+ NotificationService::AllSources());
}
ToolbarStarToggleGtk::~ToolbarStarToggleGtk() {
widget_.Destroy();
}
+void ToolbarStarToggleGtk::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_);
+ UpdateGTKButton();
+}
+
void ToolbarStarToggleGtk::ShowStarBubble(const GURL& url,
bool newly_bookmarked) {
GtkWidget* widget = widget_.get();
@@ -56,14 +72,46 @@ void ToolbarStarToggleGtk::ShowStarBubble(const GURL& url,
void ToolbarStarToggleGtk::SetStarred(bool starred) {
is_starred_ = starred;
gtk_widget_queue_draw(widget_.get());
+ UpdateGTKButton();
}
// static
gboolean ToolbarStarToggleGtk::OnExpose(GtkWidget* widget, GdkEventExpose* e,
ToolbarStarToggleGtk* button) {
- if (button->is_starred_) {
- return button->starred_.OnExpose(widget, e);
+ if (button->theme_provider_->UseGtkTheme()) {
+ return FALSE;
+ } else {
+ if (button->is_starred_) {
+ return button->starred_.OnExpose(widget, e);
+ } else {
+ return button->unstarred_.OnExpose(widget, e);
+ }
+ }
+}
+
+void ToolbarStarToggleGtk::UpdateGTKButton() {
+ if (theme_provider_->UseGtkTheme()) {
+ GdkPixbuf* pixbuf = NULL;
+ if (is_starred_) {
+ pixbuf = theme_provider_->GetPixbufNamed(IDR_STARRED_NOBORDER);
+ } else {
+ pixbuf = theme_provider_->GetPixbufNamed(IDR_STAR_NOBORDER);
+ }
+
+ gtk_button_set_image(
+ GTK_BUTTON(widget_.get()),
+ gtk_image_new_from_pixbuf(pixbuf));
+
+ 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 {
- return button->unstarred_.OnExpose(widget, e);
+ gtk_widget_set_size_request(widget_.get(),
+ gdk_pixbuf_get_width(unstarred_.pixbufs(0)),
+ gdk_pixbuf_get_height(unstarred_.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/toolbar_star_toggle_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698