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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/location_bar_view_gtk.h" 5 #include "chrome/browser/gtk/location_bar_view_gtk.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "app/gfx/gtk_util.h" 9 #include "app/gfx/gtk_util.h"
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 } 669 }
670 670
671 //////////////////////////////////////////////////////////////////////////////// 671 ////////////////////////////////////////////////////////////////////////////////
672 // LocationBarViewGtk::PageActionViewGtk 672 // LocationBarViewGtk::PageActionViewGtk
673 673
674 LocationBarViewGtk::PageActionViewGtk::PageActionViewGtk( 674 LocationBarViewGtk::PageActionViewGtk::PageActionViewGtk(
675 LocationBarViewGtk* owner, Profile* profile, 675 LocationBarViewGtk* owner, Profile* profile,
676 const ExtensionAction* page_action) 676 const ExtensionAction* page_action)
677 : owner_(owner), 677 : owner_(owner),
678 profile_(profile), 678 profile_(profile),
679 page_action_(page_action) { 679 page_action_(page_action),
680 last_icon_skbitmap_(NULL),
681 last_icon_pixbuf_(NULL) {
680 event_box_.Own(gtk_event_box_new()); 682 event_box_.Own(gtk_event_box_new());
681 // Make the event box not visible so it does not paint a background. 683 // Make the event box not visible so it does not paint a background.
682 gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_.get()), FALSE); 684 gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_.get()), FALSE);
683 g_signal_connect(event_box_.get(), "button-press-event", 685 g_signal_connect(event_box_.get(), "button-press-event",
684 G_CALLBACK(&OnButtonPressed), this); 686 G_CALLBACK(&OnButtonPressed), this);
685 687
686 image_.Own(gtk_image_new()); 688 image_.Own(gtk_image_new());
687 gtk_container_add(GTK_CONTAINER(event_box_.get()), image_.get()); 689 gtk_container_add(GTK_CONTAINER(event_box_.get()), image_.get());
688 690
689 Extension* extension = profile->GetExtensionsService()->GetExtensionById( 691 Extension* extension = profile->GetExtensionsService()->GetExtensionById(
(...skipping 12 matching lines...) Expand all
702 704
703 LocationBarViewGtk::PageActionViewGtk::~PageActionViewGtk() { 705 LocationBarViewGtk::PageActionViewGtk::~PageActionViewGtk() {
704 if (tracker_) 706 if (tracker_)
705 tracker_->StopTrackingImageLoad(); 707 tracker_->StopTrackingImageLoad();
706 image_.Destroy(); 708 image_.Destroy();
707 event_box_.Destroy(); 709 event_box_.Destroy();
708 for (size_t i = 0; i < pixbufs_.size(); ++i) { 710 for (size_t i = 0; i < pixbufs_.size(); ++i) {
709 if (pixbufs_[i]) 711 if (pixbufs_[i])
710 g_object_unref(pixbufs_[i]); 712 g_object_unref(pixbufs_[i]);
711 } 713 }
714 if (last_icon_pixbuf_)
715 g_object_unref(last_icon_pixbuf_);
712 } 716 }
713 717
714 void LocationBarViewGtk::PageActionViewGtk::UpdateVisibility( 718 void LocationBarViewGtk::PageActionViewGtk::UpdateVisibility(
715 TabContents* contents, GURL url) { 719 TabContents* contents, GURL url) {
716 // Save this off so we can pass it back to the extension when the action gets 720 // Save this off so we can pass it back to the extension when the action gets
717 // executed. See PageActionImageView::OnMousePressed. 721 // executed. See PageActionImageView::OnMousePressed.
718 current_tab_id_ = ExtensionTabUtil::GetTabId(contents); 722 current_tab_id_ = ExtensionTabUtil::GetTabId(contents);
719 current_url_ = url; 723 current_url_ = url;
720 724
721 const ExtensionActionState* state = 725 const ExtensionActionState* state =
722 contents->GetPageActionState(page_action_); 726 contents->GetPageActionState(page_action_);
723 bool visible = state != NULL; 727 bool visible = state && !state->hidden();
724 if (visible) { 728 if (visible) {
725 // Set the tooltip. 729 // Set the tooltip.
726 if (state->title().empty()) 730 if (state->title().empty())
727 gtk_widget_set_tooltip_text(event_box_.get(), 731 gtk_widget_set_tooltip_text(event_box_.get(),
728 page_action_->title().c_str()); 732 page_action_->title().c_str());
729 else 733 else
730 gtk_widget_set_tooltip_text(event_box_.get(), state->title().c_str()); 734 gtk_widget_set_tooltip_text(event_box_.get(), state->title().c_str());
735
731 // Set the image. 736 // Set the image.
732 int index = state->icon_index(); 737 SkBitmap* icon = state->icon();
733 // The image index (if not within bounds) will be set to the first image. 738 GdkPixbuf* pixbuf = NULL;
734 if (index < 0 || index >= static_cast<int>(pixbufs_.size())) 739 if (icon) {
735 index = 0; 740 if (icon != last_icon_skbitmap_) {
741 if (last_icon_pixbuf_)
742 g_object_unref(last_icon_pixbuf_);
743 last_icon_skbitmap_ = icon;
744 last_icon_pixbuf_ = gfx::GdkPixbufFromSkBitmap(icon);
745 }
746 DCHECK(last_icon_pixbuf_);
747 pixbuf = last_icon_pixbuf_;
748 } else {
749 int index = state->icon_index();
750 // The image index (if not within bounds) will be set to the first image.
751 if (index < 0 || index >= static_cast<int>(pixbufs_.size()))
752 index = 0;
753 pixbuf = pixbufs_[index];
754 }
755
736 // The pixbuf might not be loaded yet. 756 // The pixbuf might not be loaded yet.
737 if (pixbufs_[index]) 757 if (pixbuf)
738 gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()), pixbufs_[index]); 758 gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()), pixbuf);
739 else 759 else
740 visible = false; 760 visible = false;
741 } 761 }
742 762
743 if (visible) { 763 if (visible) {
744 gtk_widget_show_all(event_box_.get()); 764 gtk_widget_show_all(event_box_.get());
745 } else { 765 } else {
746 gtk_widget_hide_all(event_box_.get()); 766 gtk_widget_hide_all(event_box_.get());
747 } 767 }
748 } 768 }
(...skipping 14 matching lines...) Expand all
763 LocationBarViewGtk::PageActionViewGtk* page_action_view) { 783 LocationBarViewGtk::PageActionViewGtk* page_action_view) {
764 ExtensionBrowserEventRouter::GetInstance()->PageActionExecuted( 784 ExtensionBrowserEventRouter::GetInstance()->PageActionExecuted(
765 page_action_view->profile_, 785 page_action_view->profile_,
766 page_action_view->page_action_->extension_id(), 786 page_action_view->page_action_->extension_id(),
767 page_action_view->page_action_->id(), 787 page_action_view->page_action_->id(),
768 page_action_view->current_tab_id_, 788 page_action_view->current_tab_id_,
769 page_action_view->current_url_.spec(), 789 page_action_view->current_url_.spec(),
770 event->button); 790 event->button);
771 return true; 791 return true;
772 } 792 }
OLDNEW
« 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