[gtk+/places-sidebar: 538/539] Adjust the drag destination row when it is above the currently highlighted row
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/places-sidebar: 538/539] Adjust the drag destination row when it is above the currently highlighted row
- Date: Fri, 19 Apr 2013 22:29:47 +0000 (UTC)
commit a1b9bf7fbc9da6b162327c59ee2d347f1b16a033
Author: Federico Mena Quintero <federico gnome org>
Date: Fri Apr 19 17:22:39 2013 -0500
Adjust the drag destination row when it is above the currently highlighted row
This makes the feedback accurate and without hysteresis. Haven't I written this code ten times before?
Signed-off-by: Federico Mena Quintero <federico gnome org>
gtk/gtkplacessidebar.c | 41 ++++++++++++++++++++++++++++++++++-------
1 file changed, 34 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index 697dad5..7982e0f 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -1431,12 +1431,35 @@ remove_drop_bookmark_feedback_row (GtkPlacesSidebar *sidebar)
}
}
+#if 0
+static const char *
+pos_to_string (GtkTreeViewDropPosition pos)
+{
+ switch (pos) {
+ case GTK_TREE_VIEW_DROP_BEFORE:
+ return "before";
+
+ case GTK_TREE_VIEW_DROP_AFTER:
+ return "after";
+
+ case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
+ return "into_or_before";
+
+ case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
+ return "into_or_after";
+
+ default:
+ return "w00t";
+ }
+}
+#endif
+
static void
start_drop_feedback (GtkPlacesSidebar *sidebar, GtkTreePath *path, GtkTreeViewDropPosition pos, gboolean
drop_as_bookmarks)
{
if (drop_as_bookmarks) {
int new_bookmark_index;
- GtkTreeIter iter;
+ GtkTreePath *new_path;
new_bookmark_index = gtk_tree_path_get_indices (path)[0];
@@ -1444,7 +1467,11 @@ start_drop_feedback (GtkPlacesSidebar *sidebar, GtkTreePath *path, GtkTreeViewDr
new_bookmark_index++;
if (sidebar->new_bookmark_index != new_bookmark_index) {
- GtkTreePath *new_path;
+ GtkTreeIter iter;
+
+ if (sidebar->new_bookmark_index != -1
+ && sidebar->new_bookmark_index < new_bookmark_index)
+ new_bookmark_index--; /* since the removal of the old feedback row pushed
items one position up */
remove_drop_bookmark_feedback_row (sidebar);
@@ -1456,11 +1483,11 @@ start_drop_feedback (GtkPlacesSidebar *sidebar, GtkTreePath *path, GtkTreeViewDr
PLACES_SIDEBAR_COLUMN_NAME, _("New bookmark"),
PLACES_SIDEBAR_COLUMN_NO_EJECT, TRUE,
-1);
-
- new_path = gtk_tree_model_get_path (GTK_TREE_MODEL (sidebar->store), &iter);
- gtk_tree_view_set_drag_dest_row (sidebar->tree_view, new_path,
GTK_TREE_VIEW_DROP_INTO_OR_BEFORE);
- gtk_tree_path_free (new_path);
}
+
+ new_path = gtk_tree_path_new_from_indices (new_bookmark_index, -1);
+ gtk_tree_view_set_drag_dest_row (sidebar->tree_view, new_path,
GTK_TREE_VIEW_DROP_INTO_OR_BEFORE);
+ gtk_tree_path_free (new_path);
} else
gtk_tree_view_set_drag_dest_row (sidebar->tree_view, path, pos);
}
@@ -1468,7 +1495,6 @@ start_drop_feedback (GtkPlacesSidebar *sidebar, GtkTreePath *path, GtkTreeViewDr
static void
stop_drop_feedback (GtkPlacesSidebar *sidebar)
{
- remove_drop_bookmark_feedback_row (sidebar);
gtk_tree_view_set_drag_dest_row (sidebar->tree_view, NULL, 0);
}
@@ -1576,6 +1602,7 @@ drag_leave_callback (GtkTreeView *tree_view,
{
free_drag_data (sidebar);
stop_drop_feedback (sidebar);
+ remove_drop_bookmark_feedback_row (sidebar);
g_signal_stop_emission_by_name (tree_view, "drag-leave");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]