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

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

Issue 11348304: Implement script bubble for GTK. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ok Created 8 years, 1 month 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/ui/gtk/location_bar_view_gtk.h ('k') | chrome/browser/ui/gtk/script_bubble_gtk.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/gtk/location_bar_view_gtk.cc
diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.cc b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
index 52f93cbec2ece813345b95b25c1d0ac8cef0aa45..e73891547f7efbdd48e45f43f0f5bbdc675d2ff6 100644
--- a/chrome/browser/ui/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
@@ -30,6 +30,7 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/location_bar_controller.h"
+#include "chrome/browser/extensions/script_bubble_controller.h"
#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/favicon/favicon_tab_helper.h"
#include "chrome/browser/prefs/pref_service.h"
@@ -59,6 +60,7 @@
#include "chrome/browser/ui/gtk/nine_box.h"
#include "chrome/browser/ui/gtk/omnibox/omnibox_view_gtk.h"
#include "chrome/browser/ui/gtk/rounded_window.h"
+#include "chrome/browser/ui/gtk/script_bubble_gtk.h"
#include "chrome/browser/ui/gtk/view_id_util.h"
#include "chrome/browser/ui/gtk/zoom_bubble_gtk.h"
#include "chrome/browser/ui/intents/web_intent_picker_controller.h"
@@ -67,6 +69,7 @@
#include "chrome/browser/ui/omnibox/omnibox_popup_model.h"
#include "chrome/browser/ui/webui/extensions/extension_info_ui.h"
#include "chrome/browser/ui/zoom/zoom_controller.h"
+#include "chrome/common/badge_util.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/extension.h"
@@ -387,6 +390,8 @@ const GdkColor LocationBarViewGtk::kBackgroundColor =
LocationBarViewGtk::LocationBarViewGtk(Browser* browser)
: zoom_image_(NULL),
+ script_bubble_button_image_(NULL),
+ num_running_scripts_(0u),
star_image_(NULL),
starred_(false),
star_sized_(false),
@@ -424,6 +429,7 @@ LocationBarViewGtk::LocationBarViewGtk(Browser* browser)
LocationBarViewGtk::~LocationBarViewGtk() {
// All of our widgets should be children of / owned by the alignment.
zoom_.Destroy();
+ script_bubble_button_.Destroy();
star_.Destroy();
hbox_.Destroy();
content_setting_hbox_.Destroy();
@@ -565,6 +571,10 @@ void LocationBarViewGtk::Init(bool popup_window_mode) {
gtk_box_pack_end(GTK_BOX(hbox_.get()), star_.get(), FALSE, FALSE, 0);
}
+ CreateScriptBubbleButton();
+ gtk_box_pack_end(GTK_BOX(hbox_.get()), script_bubble_button_.get(), FALSE,
+ FALSE, 0);
+
CreateZoomButton();
gtk_box_pack_end(GTK_BOX(hbox_.get()), zoom_.get(), FALSE, FALSE, 0);
@@ -725,6 +735,7 @@ GtkWidget* LocationBarViewGtk::GetPageActionWidget(
void LocationBarViewGtk::Update(const WebContents* contents) {
UpdateZoomIcon();
+ UpdateScriptBubbleIcon();
UpdateStarIcon();
UpdateSiteTypeArea();
UpdateContentSettingsIcons();
@@ -839,6 +850,20 @@ void LocationBarViewGtk::CreateZoomButton() {
OnZoomButtonPressThunk));
}
+void LocationBarViewGtk::CreateScriptBubbleButton() {
+ script_bubble_button_.Own(CreateIconButton(&script_bubble_button_image_,
+ 0,
+ VIEW_ID_SCRIPT_BUBBLE,
+ IDS_TOOLTIP_SCRIPT_BUBBLE,
+ OnScriptBubbleButtonPressThunk));
+ gtk_image_set_from_pixbuf(
+ GTK_IMAGE(script_bubble_button_image_),
+ theme_service_->GetImageNamed(
+ IDR_EXTENSIONS_SCRIPT_BUBBLE).ToGdkPixbuf());
+ g_signal_connect_after(script_bubble_button_image_, "expose-event",
+ G_CALLBACK(&OnScriptBubbleButtonExposeThunk), this);
+}
+
void LocationBarViewGtk::CreateStarButton() {
star_.Own(CreateIconButton(&star_image_,
0,
@@ -950,6 +975,8 @@ void LocationBarViewGtk::UpdateContentSettingsIcons() {
}
void LocationBarViewGtk::UpdatePageActions() {
+ UpdateScriptBubbleIcon();
+
std::vector<ExtensionAction*> new_page_actions;
WebContents* contents = GetWebContents();
@@ -1148,6 +1175,7 @@ void LocationBarViewGtk::Observe(int type,
}
UpdateZoomIcon();
+ UpdateScriptBubbleIcon();
UpdateStarIcon();
UpdateSiteTypeArea();
UpdateContentSettingsIcons();
@@ -1500,6 +1528,30 @@ gboolean LocationBarViewGtk::OnZoomButtonPress(GtkWidget* widget,
return FALSE;
}
+gboolean LocationBarViewGtk::OnScriptBubbleButtonPress(GtkWidget* widget,
+ GdkEventButton* event) {
+ if (event->button == 1 && GetWebContents()) {
+ ScriptBubbleGtk::Show(script_bubble_button_image_, GetWebContents());
+ return TRUE;
+ }
+ return FALSE;
+}
+
+gboolean LocationBarViewGtk::OnScriptBubbleButtonExpose(GtkWidget* widget,
+ GdkEventExpose* event) {
+ gfx::CanvasSkiaPaint canvas(event, false);
+ GtkAllocation allocation;
+ gtk_widget_get_allocation(widget, &allocation);
+ badge_util::PaintBadge(&canvas,
+ gfx::Rect(allocation),
+ base::UintToString(num_running_scripts_),
+ SK_ColorWHITE,
+ SkColorSetRGB(0, 170, 0),
+ allocation.width,
+ Extension::ActionInfo::TYPE_PAGE);
+ return FALSE;
+}
+
void LocationBarViewGtk::OnStarButtonSizeAllocate(GtkWidget* sender,
GtkAllocation* allocation) {
if (!on_star_sized_.is_null()) {
@@ -1584,6 +1636,23 @@ void LocationBarViewGtk::UpdateZoomIcon() {
gtk_widget_show(zoom_.get());
}
+void LocationBarViewGtk::UpdateScriptBubbleIcon() {
+ num_running_scripts_ = 0;
+ if (GetWebContents()) {
+ extensions::TabHelper* tab_helper =
+ extensions::TabHelper::FromWebContents(GetWebContents());
+ if (tab_helper && tab_helper->script_bubble_controller()) {
+ num_running_scripts_ = tab_helper->script_bubble_controller()->
+ extensions_running_scripts().size();
+ }
+ }
+
+ if (num_running_scripts_ == 0u)
+ gtk_widget_hide(script_bubble_button_.get());
+ else
+ gtk_widget_show(script_bubble_button_.get());
+}
+
void LocationBarViewGtk::UpdateStarIcon() {
if (!star_.get())
return;
« no previous file with comments | « chrome/browser/ui/gtk/location_bar_view_gtk.h ('k') | chrome/browser/ui/gtk/script_bubble_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698