summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/gtk/bookmark_manager_gtk.cc18
-rw-r--r--chrome/browser/gtk/bookmark_manager_gtk.h3
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);