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

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

Issue 269079: Implement new page action API. (Closed)
Patch Set: compile fixes Created 11 years, 2 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/location_bar_view_gtk.h ('k') | chrome/browser/tab_contents/tab_contents.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/location_bar_view_gtk.cc
diff --git a/chrome/browser/gtk/location_bar_view_gtk.cc b/chrome/browser/gtk/location_bar_view_gtk.cc
index cd7aeefefa1ac1ef16c2029733a34a3bea625acd..78bbd044ffb442d08b0dd48eb0851118bd8cc0e5 100644
--- a/chrome/browser/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/gtk/location_bar_view_gtk.cc
@@ -676,7 +676,9 @@ LocationBarViewGtk::PageActionViewGtk::PageActionViewGtk(
const ExtensionAction* page_action)
: owner_(owner),
profile_(profile),
- page_action_(page_action) {
+ page_action_(page_action),
+ last_icon_skbitmap_(NULL),
+ last_icon_pixbuf_(NULL) {
event_box_.Own(gtk_event_box_new());
// Make the event box not visible so it does not paint a background.
gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_.get()), FALSE);
@@ -709,6 +711,8 @@ LocationBarViewGtk::PageActionViewGtk::~PageActionViewGtk() {
if (pixbufs_[i])
g_object_unref(pixbufs_[i]);
}
+ if (last_icon_pixbuf_)
+ g_object_unref(last_icon_pixbuf_);
}
void LocationBarViewGtk::PageActionViewGtk::UpdateVisibility(
@@ -720,7 +724,7 @@ void LocationBarViewGtk::PageActionViewGtk::UpdateVisibility(
const ExtensionActionState* state =
contents->GetPageActionState(page_action_);
- bool visible = state != NULL;
+ bool visible = state && !state->hidden();
if (visible) {
// Set the tooltip.
if (state->title().empty())
@@ -728,14 +732,30 @@ void LocationBarViewGtk::PageActionViewGtk::UpdateVisibility(
page_action_->title().c_str());
else
gtk_widget_set_tooltip_text(event_box_.get(), state->title().c_str());
+
// Set the image.
- int index = state->icon_index();
- // The image index (if not within bounds) will be set to the first image.
- if (index < 0 || index >= static_cast<int>(pixbufs_.size()))
- index = 0;
+ SkBitmap* icon = state->icon();
+ GdkPixbuf* pixbuf = NULL;
+ if (icon) {
+ if (icon != last_icon_skbitmap_) {
+ if (last_icon_pixbuf_)
+ g_object_unref(last_icon_pixbuf_);
+ last_icon_skbitmap_ = icon;
+ last_icon_pixbuf_ = gfx::GdkPixbufFromSkBitmap(icon);
+ }
+ DCHECK(last_icon_pixbuf_);
+ pixbuf = last_icon_pixbuf_;
+ } else {
+ int index = state->icon_index();
+ // The image index (if not within bounds) will be set to the first image.
+ if (index < 0 || index >= static_cast<int>(pixbufs_.size()))
+ index = 0;
+ pixbuf = pixbufs_[index];
+ }
+
// The pixbuf might not be loaded yet.
- if (pixbufs_[index])
- gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()), pixbufs_[index]);
+ if (pixbuf)
+ gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()), pixbuf);
else
visible = false;
}
« no previous file with comments | « chrome/browser/gtk/location_bar_view_gtk.h ('k') | chrome/browser/tab_contents/tab_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698