diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-20 21:21:17 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-20 21:21:17 +0000 |
commit | 89b0600da74755aa3e19255177eb48287f4377b7 (patch) | |
tree | 0187aafcb97cab1fb1afc0c505d455633ef25da4 /chrome/browser/gtk/menu_gtk.cc | |
parent | a5b04d1c6d10a3a6a1a246342761e55382da711b (diff) | |
download | chromium_src-89b0600da74755aa3e19255177eb48287f4377b7.zip chromium_src-89b0600da74755aa3e19255177eb48287f4377b7.tar.gz chromium_src-89b0600da74755aa3e19255177eb48287f4377b7.tar.bz2 |
Prevent setting the checkbox value in menus from activating the menu item.
http://crbug.com/11942
Review URL: http://codereview.chromium.org/115589
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16539 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/menu_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/menu_gtk.cc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc index 6279b28..6441034 100644 --- a/chrome/browser/gtk/menu_gtk.cc +++ b/chrome/browser/gtk/menu_gtk.cc @@ -297,8 +297,29 @@ void MenuGtk::SetMenuItemInfo(GtkWidget* widget, gpointer userdata) { if (GTK_IS_CHECK_MENU_ITEM(widget)) { GtkCheckMenuItem* item = GTK_CHECK_MENU_ITEM(widget); + + // gtk_check_menu_item_set_active() will send the activate signal. Touching + // the underlying "active" property will also call the "activate" handler + // for this menu item. So we prevent the correct activate handler from + // being called while we set the checkbox. + if (data) { + g_signal_handlers_block_by_func( + item, reinterpret_cast<void*>(OnMenuItemActivated), userdata); + } else { + g_signal_handlers_block_by_func( + item, reinterpret_cast<void*>(OnMenuItemActivatedById), userdata); + } + gtk_check_menu_item_set_active( item, menu->delegate_->IsItemChecked(id)); + + if (data) { + g_signal_handlers_unblock_by_func( + item, reinterpret_cast<void*>(OnMenuItemActivated), userdata); + } else { + g_signal_handlers_unblock_by_func( + item, reinterpret_cast<void*>(OnMenuItemActivatedById), userdata); + } } if (GTK_IS_MENU_ITEM(widget)) { |