diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-24 03:31:17 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-24 03:31:17 +0000 |
commit | a106946bf1fbfeb6003510e3c26dd919611fa4fd (patch) | |
tree | 9c5619d10027ebe4ac12833a67c3ba5c0c65744b /chrome/browser/gtk | |
parent | 3a535b0727f125452cc37733fac880753b14a503 (diff) | |
download | chromium_src-a106946bf1fbfeb6003510e3c26dd919611fa4fd.zip chromium_src-a106946bf1fbfeb6003510e3c26dd919611fa4fd.tar.gz chromium_src-a106946bf1fbfeb6003510e3c26dd919611fa4fd.tar.bz2 |
Fix a bookmark manager context menu crash, and show the context menu on right click.
http://crbug.com/14196
http://crbug.com/14443
Review URL: http://codereview.chromium.org/147055
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19102 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r-- | chrome/browser/gtk/bookmark_manager_gtk.cc | 18 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_manager_gtk.h | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/chrome/browser/gtk/bookmark_manager_gtk.cc b/chrome/browser/gtk/bookmark_manager_gtk.cc index 66ddf38..80a5eec 100644 --- a/chrome/browser/gtk/bookmark_manager_gtk.cc +++ b/chrome/browser/gtk/bookmark_manager_gtk.cc @@ -373,6 +373,8 @@ GtkWidget* BookmarkManagerGtk::MakeLeftPane() { G_CALLBACK(OnLeftTreeViewRowCollapsed), this); g_signal_connect(left_tree_view_, "focus-in-event", G_CALLBACK(OnLeftTreeViewFocusIn), this); + g_signal_connect(left_tree_view_, "button-release-event", + G_CALLBACK(OnTreeViewButtonRelease), this); // The left side is only a drag destination (not a source). gtk_drag_dest_set(left_tree_view_, GTK_DEST_DEFAULT_DROP, @@ -429,6 +431,8 @@ GtkWidget* BookmarkManagerGtk::MakeRightPane() { G_CALLBACK(OnRightSelectionChanged), this); g_signal_connect(right_tree_view_, "focus-in-event", G_CALLBACK(OnRightTreeViewFocusIn), this); + g_signal_connect(right_tree_view_, "button-release-event", + G_CALLBACK(OnTreeViewButtonRelease), this); // We don't advertise GDK_ACTION_COPY, but since we don't explicitly do // any deleting following a succesful move, this should work. @@ -469,6 +473,12 @@ void BookmarkManagerGtk::ResetOrganizeMenu(bool left) { else if (parent) nodes.push_back(parent); + // We DeleteSoon on the old one to give any reference holders (e.g. + // the event that caused this reset) a chance to release their refs. + BookmarkContextMenu* old_menu = organize_menu_.release(); + if (old_menu) + MessageLoop::current()->DeleteSoon(FROM_HERE, old_menu); + organize_menu_.reset(new BookmarkContextMenu(window_, profile_, NULL, NULL, parent, nodes, BookmarkContextMenu::BOOKMARK_MANAGER_ORGANIZE_MENU)); gtk_menu_item_set_submenu(GTK_MENU_ITEM(organize_), organize_menu_->menu()); @@ -944,6 +954,14 @@ void BookmarkManagerGtk::OnRightTreeViewFocusIn(GtkTreeView* tree_view, } // static +gboolean BookmarkManagerGtk::OnTreeViewButtonRelease(GtkTreeView* tree_view, + GdkEventButton* button, BookmarkManagerGtk* bookmark_manager) { + if (button->button == 3) + bookmark_manager->organize_menu_->PopupAsContext(button->time); + return FALSE; +} + +// static void BookmarkManagerGtk::OnImportItemActivated(GtkMenuItem* menuitem, BookmarkManagerGtk* bm) { SelectFileDialog::FileTypeInfo file_type_info; diff --git a/chrome/browser/gtk/bookmark_manager_gtk.h b/chrome/browser/gtk/bookmark_manager_gtk.h index 8678acb..da797b1 100644 --- a/chrome/browser/gtk/bookmark_manager_gtk.h +++ b/chrome/browser/gtk/bookmark_manager_gtk.h @@ -185,6 +185,9 @@ class BookmarkManagerGtk : public BookmarkModelObserver, static void OnLeftTreeViewFocusIn(GtkTreeView* tree_view, GdkEventFocus* event, BookmarkManagerGtk* bookmark_manager); + static gboolean OnTreeViewButtonRelease(GtkTreeView* tree_view, + GdkEventButton* button, BookmarkManagerGtk* bookmark_manager); + // Tools menu item callbacks. static void OnImportItemActivated(GtkMenuItem* menuitem, BookmarkManagerGtk* bookmark_manager); |