diff options
-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); |