diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-15 20:30:54 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-15 20:30:54 +0000 |
commit | 30729c347ccfc3773a7e0bece475632cbe59ad60 (patch) | |
tree | fbc7ca41023e6ed821ece20f45560dabdc7adcdc /chrome | |
parent | 349d8e01b1feef1e6fa79a5ee6557a8a0507791b (diff) | |
download | chromium_src-30729c347ccfc3773a7e0bece475632cbe59ad60.zip chromium_src-30729c347ccfc3773a7e0bece475632cbe59ad60.tar.gz chromium_src-30729c347ccfc3773a7e0bece475632cbe59ad60.tar.bz2 |
Make more things clickable in the bookmark bar menus:
- folder within a folder
- "empty" menu item
Note that it can be hard to click on a folder within a folder since hovering over the folder pops up a submenu that grabs focus, so you end up needing to right click twice. It's a little odd but the hackery required to fix it doesn't seem worth it.
BUG=15886
TEST=right click on an empty menu item
Review URL: http://codereview.chromium.org/155586
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20785 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/gtk/bookmark_menu_controller_gtk.cc | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/chrome/browser/gtk/bookmark_menu_controller_gtk.cc b/chrome/browser/gtk/bookmark_menu_controller_gtk.cc index 58629b8..b68b51c 100644 --- a/chrome/browser/gtk/bookmark_menu_controller_gtk.cc +++ b/chrome/browser/gtk/bookmark_menu_controller_gtk.cc @@ -38,6 +38,11 @@ const BookmarkNode* GetNodeFromMenuItem(GtkWidget* menu_item) { g_object_get_data(G_OBJECT(menu_item), "bookmark-node")); } +const BookmarkNode* GetParentNodeFromEmptyMenuItem(GtkWidget* menu_item) { + return static_cast<const BookmarkNode*>( + g_object_get_data(G_OBJECT(menu_item), "parent-node")); +} + void* AsVoid(const BookmarkNode* node) { return const_cast<BookmarkNode*>(node); } @@ -115,6 +120,8 @@ void BookmarkMenuController::BuildMenu(const BookmarkNode* parent, GtkWidget* menu_item = gtk_image_menu_item_new_with_label( WideToUTF8(node->GetTitle()).c_str()); g_object_set_data(G_OBJECT(menu_item), "bookmark-node", AsVoid(node)); + g_signal_connect(G_OBJECT(menu_item), "button-press-event", + G_CALLBACK(OnButtonPressed), this); if (node->is_url()) { SkBitmap icon = profile_->GetBookmarkModel()->GetFavIcon(node); @@ -125,8 +132,6 @@ void BookmarkMenuController::BuildMenu(const BookmarkNode* parent, SetImageMenuItem(menu_item, icon); g_signal_connect(G_OBJECT(menu_item), "activate", G_CALLBACK(OnMenuItemActivated), this); - g_signal_connect(G_OBJECT(menu_item), "button-press-event", - G_CALLBACK(OnButtonPressed), this); g_signal_connect(G_OBJECT(menu_item), "button-release-event", G_CALLBACK(OnButtonReleased), this); } else if (node->is_folder()) { @@ -160,6 +165,11 @@ void BookmarkMenuController::BuildMenu(const BookmarkNode* parent, GtkWidget* empty_menu = gtk_menu_item_new_with_label( l10n_util::GetStringUTF8(IDS_MENU_EMPTY_SUBMENU).c_str()); gtk_widget_set_sensitive(empty_menu, FALSE); + // We connect to the menu rather than the item because the item is + // insensitive and doesn't listen for button presses. + g_signal_connect(G_OBJECT(menu), "button-press-event", + G_CALLBACK(OnButtonPressed), this); + g_object_set_data(G_OBJECT(menu), "parent-node", AsVoid(parent)); gtk_menu_shell_append(GTK_MENU_SHELL(menu), empty_menu); } } @@ -174,9 +184,11 @@ gboolean BookmarkMenuController::OnButtonPressed( if (event->button == 3) { // Show the right click menu and stop processing this button event. const BookmarkNode* node = GetNodeFromMenuItem(sender); - const BookmarkNode* parent = node->GetParent(); + const BookmarkNode* parent = node ? node->GetParent() : + GetParentNodeFromEmptyMenuItem(sender); std::vector<const BookmarkNode*> nodes; - nodes.push_back(node); + if (node) + nodes.push_back(node); controller->context_menu_.reset( new BookmarkContextMenu( sender, controller->profile_, controller->browser_, |