summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-24 03:31:17 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-24 03:31:17 +0000
commita106946bf1fbfeb6003510e3c26dd919611fa4fd (patch)
tree9c5619d10027ebe4ac12833a67c3ba5c0c65744b /chrome/browser/gtk
parent3a535b0727f125452cc37733fac880753b14a503 (diff)
downloadchromium_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.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);