summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/menu_gtk.cc
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-21 17:55:40 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-21 17:55:40 +0000
commit9d8ad763d1cc3b0665f6feb9bf66b4f6480a4ace (patch)
treeba305bd7e284e3fc6362478511bec15cc74b9db6 /chrome/browser/gtk/menu_gtk.cc
parent66556c41055ac04e7adbbf47b2578e2ca389a1be (diff)
downloadchromium_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.cc18
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;