OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/ui/gtk/browser_actions_toolbar_gtk.h" | 5 #include "chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h" |
6 | 6 |
7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <vector> | 10 #include <vector> |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 gtk_util::GrabAllInput(toolbar_->overflow_menu_->widget()); | 271 gtk_util::GrabAllInput(toolbar_->overflow_menu_->widget()); |
272 } | 272 } |
273 | 273 |
274 virtual void CommandWillBeExecuted() { | 274 virtual void CommandWillBeExecuted() { |
275 // If the context menu was showing for the overflow menu, and a command | 275 // If the context menu was showing for the overflow menu, and a command |
276 // is executed, then stop showing the overflow menu. | 276 // is executed, then stop showing the overflow menu. |
277 if (toolbar_->overflow_menu_.get()) | 277 if (toolbar_->overflow_menu_.get()) |
278 toolbar_->overflow_menu_->Cancel(); | 278 toolbar_->overflow_menu_->Cancel(); |
279 } | 279 } |
280 | 280 |
281 // Returns true to prevent further processing of the event that caused us to | |
282 // show the popup, or false to continue processing. | |
283 bool ShowPopup() { | |
284 ExtensionAction* browser_action = extension_->browser_action(); | |
285 | |
286 int tab_id = toolbar_->GetCurrentTabId(); | |
287 if (tab_id < 0) { | |
288 NOTREACHED() << "No current tab."; | |
289 return true; | |
290 } | |
291 | |
292 if (browser_action->HasPopup(tab_id)) { | |
293 ExtensionPopupGtk::Show( | |
294 browser_action->GetPopupUrl(tab_id), toolbar_->browser(), widget()); | |
295 return true; | |
296 } | |
297 | |
298 return false; | |
299 } | |
300 | |
301 void SetImage(GdkPixbuf* image) { | 281 void SetImage(GdkPixbuf* image) { |
302 if (!image_) { | 282 if (!image_) { |
303 image_ = gtk_image_new_from_pixbuf(image); | 283 image_ = gtk_image_new_from_pixbuf(image); |
304 gtk_button_set_image(GTK_BUTTON(button()), image_); | 284 gtk_button_set_image(GTK_BUTTON(button()), image_); |
305 } else { | 285 } else { |
306 gtk_image_set_from_pixbuf(GTK_IMAGE(image_), image); | 286 gtk_image_set_from_pixbuf(GTK_IMAGE(image_), image); |
307 } | 287 } |
308 } | 288 } |
309 | 289 |
310 static gboolean OnButtonPress(GtkWidget* widget, | 290 static gboolean OnButtonPress(GtkWidget* widget, |
311 GdkEventButton* event, | 291 GdkEventButton* event, |
312 BrowserActionButton* action) { | 292 BrowserActionButton* action) { |
313 if (event->button != 3) | 293 if (event->button != 3) |
314 return FALSE; | 294 return FALSE; |
315 | 295 |
316 MenuGtk* menu = action->GetContextMenu(); | 296 MenuGtk* menu = action->GetContextMenu(); |
317 if (!menu) | 297 if (!menu) |
318 return FALSE; | 298 return FALSE; |
319 | 299 |
320 action->button_->SetPaintOverride(GTK_STATE_ACTIVE); | 300 action->button_->SetPaintOverride(GTK_STATE_ACTIVE); |
321 menu->PopupForWidget(widget, event->button, event->time); | 301 menu->PopupForWidget(widget, event->button, event->time); |
322 | 302 |
323 return TRUE; | 303 return TRUE; |
324 } | 304 } |
325 | 305 |
326 static void OnClicked(GtkWidget* widget, BrowserActionButton* action) { | 306 static void OnClicked(GtkWidget* widget, BrowserActionButton* action) { |
327 if (action->ShowPopup()) | 307 ExtensionToolbarModel* model = action->toolbar_->model(); |
328 return; | 308 const Extension* extension = action->extension_; |
| 309 Browser* browser = action->toolbar_->browser(); |
| 310 GtkWidget* chevron = action->toolbar_->chevron(); |
| 311 GURL popup_url; |
329 | 312 |
330 action->toolbar_->model()->ExecuteBrowserAction( | 313 switch (model->ExecuteBrowserAction(extension, browser, &popup_url)) { |
331 action->extension_->id(), action->toolbar_->browser()); | 314 case ExtensionToolbarModel::ACTION_NONE: |
| 315 break; |
| 316 case ExtensionToolbarModel::ACTION_SHOW_POPUP: |
| 317 ExtensionPopupGtk::Show(popup_url, browser, chevron); |
| 318 break; |
| 319 } |
332 } | 320 } |
333 | 321 |
334 static gboolean OnExposeEvent(GtkWidget* widget, | 322 static gboolean OnExposeEvent(GtkWidget* widget, |
335 GdkEventExpose* event, | 323 GdkEventExpose* event, |
336 BrowserActionButton* button) { | 324 BrowserActionButton* button) { |
337 int tab_id = button->toolbar_->GetCurrentTabId(); | 325 int tab_id = button->toolbar_->GetCurrentTabId(); |
338 if (tab_id < 0) | 326 if (tab_id < 0) |
339 return FALSE; | 327 return FALSE; |
340 | 328 |
341 ExtensionAction* action = button->extension_->browser_action(); | 329 ExtensionAction* action = button->extension_->browser_action(); |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 } | 775 } |
788 | 776 |
789 bool BrowserActionsToolbarGtk::GetAcceleratorForCommandId( | 777 bool BrowserActionsToolbarGtk::GetAcceleratorForCommandId( |
790 int command_id, | 778 int command_id, |
791 ui::Accelerator* accelerator) { | 779 ui::Accelerator* accelerator) { |
792 return false; | 780 return false; |
793 } | 781 } |
794 | 782 |
795 void BrowserActionsToolbarGtk::ExecuteCommand(int command_id) { | 783 void BrowserActionsToolbarGtk::ExecuteCommand(int command_id) { |
796 const Extension* extension = model_->GetExtensionByIndex(command_id); | 784 const Extension* extension = model_->GetExtensionByIndex(command_id); |
797 ExtensionAction* browser_action = extension->browser_action(); | 785 GURL popup_url; |
798 | 786 |
799 int tab_id = GetCurrentTabId(); | 787 switch (model_->ExecuteBrowserAction(extension, browser(), &popup_url)) { |
800 if (tab_id < 0) { | 788 case ExtensionToolbarModel::ACTION_NONE: |
801 NOTREACHED() << "No current tab."; | 789 break; |
802 return; | 790 case ExtensionToolbarModel::ACTION_SHOW_POPUP: |
803 } | 791 ExtensionPopupGtk::Show(popup_url, browser(), chevron()); |
804 | 792 break; |
805 if (browser_action->HasPopup(tab_id)) { | |
806 ExtensionPopupGtk::Show( | |
807 browser_action->GetPopupUrl(tab_id), browser(), chevron()); | |
808 } else { | |
809 model_->ExecuteBrowserAction(extension->id(), browser()); | |
810 } | 793 } |
811 } | 794 } |
812 | 795 |
813 void BrowserActionsToolbarGtk::StoppedShowing() { | 796 void BrowserActionsToolbarGtk::StoppedShowing() { |
814 overflow_button_->UnsetPaintOverride(); | 797 overflow_button_->UnsetPaintOverride(); |
815 } | 798 } |
816 | 799 |
817 bool BrowserActionsToolbarGtk::AlwaysShowIconForCmd(int command_id) const { | 800 bool BrowserActionsToolbarGtk::AlwaysShowIconForCmd(int command_id) const { |
818 return true; | 801 return true; |
819 } | 802 } |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1082 | 1065 |
1083 menu->PopupAsContext(gfx::Point(event->x_root, event->y_root), | 1066 menu->PopupAsContext(gfx::Point(event->x_root, event->y_root), |
1084 event->time); | 1067 event->time); |
1085 return TRUE; | 1068 return TRUE; |
1086 } | 1069 } |
1087 | 1070 |
1088 void BrowserActionsToolbarGtk::OnButtonShowOrHide(GtkWidget* sender) { | 1071 void BrowserActionsToolbarGtk::OnButtonShowOrHide(GtkWidget* sender) { |
1089 if (!resize_animation_.is_animating()) | 1072 if (!resize_animation_.is_animating()) |
1090 UpdateChevronVisibility(); | 1073 UpdateChevronVisibility(); |
1091 } | 1074 } |
OLD | NEW |