Index: views/controls/menu/native_menu_gtk.cc |
diff --git a/views/controls/menu/native_menu_gtk.cc b/views/controls/menu/native_menu_gtk.cc |
index b5e59c0e961ea76a73e690366b27dcac1da32696..a50b9b8275849d43fc91a0fb5a11b3aed51b74ca 100644 |
--- a/views/controls/menu/native_menu_gtk.cc |
+++ b/views/controls/menu/native_menu_gtk.cc |
@@ -86,10 +86,15 @@ void NativeMenuGtk::RunMenuAt(const gfx::Point& point, int alignment) { |
DCHECK(!menu_shown_); |
menu_shown_ = true; |
+ // Listen for "hide" signal so that we know when to return from the blocking |
+ // RunMenuAt call. |
+ gint handle_id = |
+ g_signal_connect(G_OBJECT(menu_), "hide", G_CALLBACK(OnMenuHidden), this); |
// Block until menu is no longer shown by running a nested message loop. |
MessageLoopForUI::current()->Run(NULL); |
+ g_signal_handler_disconnect(G_OBJECT(menu_), handle_id); |
menu_shown_ = false; |
} |
@@ -223,9 +228,6 @@ void NativeMenuGtk::ResetMenu() { |
if (menu_) |
gtk_widget_destroy(menu_); |
menu_ = gtk_menu_new(); |
- // Listen for "hide" signal so that we know when to return from the blocking |
- // RunMenuAt call. |
- g_signal_connect(G_OBJECT(menu_), "hide", G_CALLBACK(OnMenuHidden), this); |
} |
// static |