diff options
-rw-r--r-- | chrome/browser/gtk/bookmark_manager_gtk.cc | 36 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_manager_gtk.h | 3 |
2 files changed, 35 insertions, 4 deletions
diff --git a/chrome/browser/gtk/bookmark_manager_gtk.cc b/chrome/browser/gtk/bookmark_manager_gtk.cc index c2a892f..37609df 100644 --- a/chrome/browser/gtk/bookmark_manager_gtk.cc +++ b/chrome/browser/gtk/bookmark_manager_gtk.cc @@ -433,6 +433,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-press-event", + G_CALLBACK(OnRightTreeViewButtonPress), this); g_signal_connect(right_tree_view_, "button-release-event", G_CALLBACK(OnTreeViewButtonRelease), this); @@ -811,10 +813,16 @@ void BookmarkManagerGtk::OnLeftTreeViewRowCollapsed(GtkTreeView *tree_view, void BookmarkManagerGtk::OnRightTreeViewDragGet( GtkWidget* tree_view, GdkDragContext* context, GtkSelectionData* selection_data, - guint target_type, guint time, BookmarkManagerGtk* bookmark_manager) { - bookmark_utils::WriteBookmarksToSelection( - bookmark_manager->GetRightSelection(), selection_data, target_type, - bookmark_manager->profile_); + guint target_type, guint time, BookmarkManagerGtk* bm) { + // No selection, do nothing. This shouldn't get hit, but if it does an early + // return avoids a crash. + if (gtk_tree_selection_count_selected_rows(bm->right_selection()) == 0) { + NOTREACHED(); + return; + } + + bookmark_utils::WriteBookmarksToSelection(bm->GetRightSelection(), + selection_data, target_type, bm->profile_); } // static @@ -952,6 +960,26 @@ void BookmarkManagerGtk::OnRightTreeViewFocusIn(GtkTreeView* tree_view, } // static +gboolean BookmarkManagerGtk::OnRightTreeViewButtonPress(GtkWidget* tree_view, + GdkEventButton* event, BookmarkManagerGtk* bm) { + int x, y; + gtk_widget_get_pointer(tree_view, &x, &y); + + GtkTreePath* path; + GtkTreeViewDropPosition pos; + gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(tree_view), + x, y, &path, &pos); + // Ignore left clicks that occur below the lowest row so we don't try to + // start an empty drag, or allow the user to start a drag on the selected + // row by dragging on whitespace. + if (path == NULL && event->button == 1) + return TRUE; + + gtk_tree_path_free(path); + return FALSE; +} + +// static gboolean BookmarkManagerGtk::OnTreeViewButtonRelease(GtkTreeView* tree_view, GdkEventButton* button, BookmarkManagerGtk* bookmark_manager) { if (button->button == 3) diff --git a/chrome/browser/gtk/bookmark_manager_gtk.h b/chrome/browser/gtk/bookmark_manager_gtk.h index d7d802e8..77b3455 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 OnRightTreeViewButtonPress(GtkWidget* tree_view, + GdkEventButton* event, BookmarkManagerGtk* bookmark_manager); + static gboolean OnTreeViewButtonRelease(GtkTreeView* tree_view, GdkEventButton* button, BookmarkManagerGtk* bookmark_manager); |