diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-21 17:55:40 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-21 17:55:40 +0000 |
commit | 9d8ad763d1cc3b0665f6feb9bf66b4f6480a4ace (patch) | |
tree | ba305bd7e284e3fc6362478511bec15cc74b9db6 /chrome/browser/gtk/menu_gtk.cc | |
parent | 66556c41055ac04e7adbbf47b2578e2ca389a1be (diff) | |
download | chromium_src-9d8ad763d1cc3b0665f6feb9bf66b4f6480a4ace.zip chromium_src-9d8ad763d1cc3b0665f6feb9bf66b4f6480a4ace.tar.gz chromium_src-9d8ad763d1cc3b0665f6feb9bf66b4f6480a4ace.tar.bz2 |
Activate download shelf button while the menu is showing.
TEST=download something. Press the down arrow button on the right of the item. A menu should popup and the button should appear to depress. The button should pop back when you close the menu (either by clicking away from it or by choosing an item in it).
Review URL: http://codereview.chromium.org/113684
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16623 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/menu_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/menu_gtk.cc | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc index 6441034..9786534 100644 --- a/chrome/browser/gtk/menu_gtk.cc +++ b/chrome/browser/gtk/menu_gtk.cc @@ -17,6 +17,7 @@ MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, : delegate_(delegate), dummy_accel_group_(gtk_accel_group_new()), menu_(gtk_menu_new()) { + ConnectSignalHandlers(); BuildMenuIn(menu_.get(), menu_data, accel_group); } @@ -24,6 +25,7 @@ MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, bool load) : delegate_(delegate), dummy_accel_group_(NULL), menu_(gtk_menu_new()) { + ConnectSignalHandlers(); if (load) BuildMenuFromDelegate(); } @@ -34,6 +36,10 @@ MenuGtk::~MenuGtk() { g_object_unref(dummy_accel_group_); } +void MenuGtk::ConnectSignalHandlers() { + g_signal_connect(menu_.get(), "hide", G_CALLBACK(OnMenuHidden), this); +} + void MenuGtk::AppendMenuItemWithLabel(int command_id, const std::string& label) { GtkWidget* menu_item = gtk_menu_item_new_with_label(label.c_str()); @@ -265,8 +271,11 @@ void MenuGtk::MenuPositionFunc(GtkMenu* menu, gdk_screen_get_monitor_geometry(screen, monitor, &screen_rect); - *x += widget->allocation.x; - *y += widget->allocation.y + widget->allocation.height; + if (GTK_WIDGET_NO_WINDOW(widget)) { + *x += widget->allocation.x; + *y += widget->allocation.y; + } + *y += widget->allocation.height; // g_object_get_data() returns NULL if no such object is found. |left_align| // acts as a boolean, but we can't actually cast it to bool because gcc @@ -281,6 +290,11 @@ void MenuGtk::MenuPositionFunc(GtkMenu* menu, } // static +void MenuGtk::OnMenuHidden(GtkWidget* widget, MenuGtk* menu) { + menu->delegate_->StoppedShowing(); +} + +// static void MenuGtk::SetMenuItemInfo(GtkWidget* widget, gpointer userdata) { MenuGtk* menu = reinterpret_cast<MenuGtk*>(userdata); int id; |