[gnome-todo] task-list-view: Cleanup DnD implementation
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] task-list-view: Cleanup DnD implementation
- Date: Fri, 30 Apr 2021 17:26:22 +0000 (UTC)
commit 34363c5435f3c9b4e3a1226fed2467f4a20b2dc9
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri Apr 30 13:39:37 2021 -0300
task-list-view: Cleanup DnD implementation
Remove the highlighted row from GtdTaskListViewPrivate since
we can simply use GtkListBox's methods to handle it. Add a
'enter' handler to update the highlithed row.
src/gui/gtd-task-list-view.c | 61 +++++++++++++++++++++++++++-----------------
1 file changed, 38 insertions(+), 23 deletions(-)
---
diff --git a/src/gui/gtd-task-list-view.c b/src/gui/gtd-task-list-view.c
index 02d8a0ee..221ba2bc 100644
--- a/src/gui/gtd-task-list-view.c
+++ b/src/gui/gtd-task-list-view.c
@@ -93,7 +93,6 @@ typedef struct
GtdMarkdownRenderer *renderer;
/* DnD */
- GtkListBoxRow *highlighted_row;
guint scroll_timeout_id;
gboolean scroll_up;
@@ -647,13 +646,6 @@ get_drop_row_at_y (GtdTaskListView *self,
return drop_row ? drop_row : NULL;
}
-static void
-unset_previously_highlighted_row (GtdTaskListView *self)
-{
- GtdTaskListViewPrivate *priv = gtd_task_list_view_get_instance_private (self);
- priv->highlighted_row = NULL;
-}
-
static inline gboolean
scroll_to_dnd (gpointer user_data)
{
@@ -718,12 +710,37 @@ check_dnd_scroll (GtdTaskListView *self,
}
}
+static GdkDragAction
+on_drop_target_drag_enter_cb (GtkDropTarget *drop_target,
+ gdouble x,
+ gdouble y,
+ GtdTaskListView *self)
+{
+ GtdTaskListViewPrivate *priv = gtd_task_list_view_get_instance_private (self);
+ GtkListBoxRow *highlighted_row;
+
+ GTD_ENTRY;
+
+ gtk_list_box_drag_unhighlight_row (priv->listbox);
+ highlighted_row = get_drop_row_at_y (self, y);
+ if (highlighted_row)
+ gtk_list_box_drag_highlight_row (priv->listbox, highlighted_row);
+
+ GTD_RETURN (GDK_ACTION_MOVE);
+}
+
static void
on_drop_target_drag_leave_cb (GtkDropTarget *drop_target,
GtdTaskListView *self)
{
- unset_previously_highlighted_row (self);
+ GtdTaskListViewPrivate *priv = gtd_task_list_view_get_instance_private (self);
+
+ GTD_ENTRY;
+
+ gtk_list_box_drag_unhighlight_row (priv->listbox);
check_dnd_scroll (self, TRUE, -1);
+
+ GTD_EXIT;
}
static GdkDragAction
@@ -749,15 +766,12 @@ on_drop_target_drag_motion_cb (GtkDropTarget *drop_target,
GTD_GOTO (fail);
}
- unset_previously_highlighted_row (self);
+ gtk_list_box_drag_unhighlight_row (priv->listbox);
highlighted_row = get_drop_row_at_y (self, y);
- if (!highlighted_row)
- GTD_GOTO (success);
+ if (highlighted_row)
+ gtk_list_box_drag_highlight_row (priv->listbox, highlighted_row);
- priv->highlighted_row = highlighted_row;
-
-success:
check_dnd_scroll (self, FALSE, y);
GTD_RETURN (GDK_ACTION_MOVE);
@@ -774,7 +788,6 @@ on_drop_target_drag_drop_cb (GtkDropTarget *drop_target,
{
GtdTaskListViewPrivate *priv;
GtkListBoxRow *drop_row;
- GtdProvider *provider;
GtdTaskRow *hovered_row;
GtkWidget *row;
GtdTask *hovered_task;
@@ -796,7 +809,7 @@ on_drop_target_drag_drop_cb (GtkDropTarget *drop_target,
GTD_RETURN (FALSE);
}
- unset_previously_highlighted_row (self);
+ gtk_list_box_drag_unhighlight_row (priv->listbox);
source_task = g_value_get_object (value);
g_assert (source_task != NULL);
@@ -819,15 +832,16 @@ on_drop_target_drag_drop_cb (GtkDropTarget *drop_target,
new_position = gtd_task_get_position (hovered_task) + 1;
current_position = gtd_task_get_position (source_task);
- if (new_position != current_position)
- gtd_task_list_move_task_to_position (GTD_TASK_LIST (priv->model), source_task, new_position);
+ GTD_TRACE_MSG ("Dropping task %p at %ld", source_task, new_position);
- /* Finally, save the task */
- provider = gtd_task_list_get_provider (gtd_task_get_list (source_task));
- gtd_provider_update_task (provider, source_task, NULL, NULL, NULL);
+ if (new_position != current_position)
+ {
+ gtd_task_list_move_task_to_position (GTD_TASK_LIST (priv->model),
+ source_task,
+ new_position);
+ }
check_dnd_scroll (self, TRUE, -1);
- gdk_drop_finish (drop, GDK_ACTION_MOVE);
GTD_RETURN (TRUE);
}
@@ -1051,6 +1065,7 @@ gtd_task_list_view_init (GtdTaskListView *self)
target = gtk_drop_target_new (GTD_TYPE_TASK, GDK_ACTION_MOVE);
gtk_drop_target_set_preload (target, TRUE);
g_signal_connect (target, "drop", G_CALLBACK (on_drop_target_drag_drop_cb), self);
+ g_signal_connect (target, "enter", G_CALLBACK (on_drop_target_drag_enter_cb), self);
g_signal_connect (target, "leave", G_CALLBACK (on_drop_target_drag_leave_cb), self);
g_signal_connect (target, "motion", G_CALLBACK (on_drop_target_drag_motion_cb), self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]