summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Murphy <hello@jamiethalacker.dev>2022-06-28 13:18:50 -0700
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2022-06-28 21:47:36 +0000
commitb8bf39f6f6394560753e8bbfb619b19248f0d895 (patch)
tree6ae03ffea8acc3c9ef254ce0830090b7a43fde2f
parent3a559eabe7f88a0dea097572ae696befe9798f46 (diff)
downloadgnome-todo-b8bf39f6f6394560753e8bbfb619b19248f0d895.tar.gz
gtd-sidebar-list-row: Add drag/drop handler
-rw-r--r--src/plugins/task-lists-workspace/gtd-sidebar-list-row.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/plugins/task-lists-workspace/gtd-sidebar-list-row.c b/src/plugins/task-lists-workspace/gtd-sidebar-list-row.c
index a18b09c8..5919665f 100644
--- a/src/plugins/task-lists-workspace/gtd-sidebar-list-row.c
+++ b/src/plugins/task-lists-workspace/gtd-sidebar-list-row.c
@@ -136,6 +136,19 @@ set_list (GtdSidebarListRow *self,
*/
static void
+on_import_task_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ g_autoptr (GError) error = NULL;
+
+ gtd_task_list_import_task_finish (GTD_TASK_LIST (object), result, &error);
+
+ if (error)
+ g_warning ("Error updating task: %s", error->message);
+}
+
+static void
on_list_changed_cb (GtdSidebarListRow *self)
{
update_counter_label (self);
@@ -161,6 +174,53 @@ on_rename_popover_hidden_cb (GtkPopover *popover,
gtk_widget_set_parent (GTK_WIDGET (popover), NULL);
}
+static gboolean
+on_task_drop (GtkDropTarget *target,
+ const GValue *value,
+ double x,
+ double y,
+ GtdSidebarListRow *self)
+{
+ GtdTask *task;
+
+ GTD_ENTRY;
+
+ task = g_value_get_object (value);
+ gtd_task_list_import_task (self->list,
+ task,
+ NULL,
+ on_import_task_cb,
+ self);
+
+ GTD_RETURN (TRUE);
+}
+
+
+static gboolean
+on_task_enter_drop (GtkDropTarget *target,
+ double x,
+ double y,
+ GtdSidebarListRow *self)
+{
+ GTD_ENTRY;
+
+ gtk_widget_set_state_flags (GTK_WIDGET (self), GTK_STATE_FLAG_SELECTED , FALSE);
+
+ GTD_RETURN (TRUE);
+}
+
+static gboolean
+on_task_leave_drop (GtkDropTarget *target,
+ double x,
+ double y,
+ GtdSidebarListRow *self)
+{
+ GTD_ENTRY;
+
+ gtk_widget_unset_state_flags (GTK_WIDGET (self), GTK_STATE_FLAG_SELECTED);
+
+ GTD_RETURN (TRUE);
+}
/*
* GObject overrides
@@ -244,7 +304,16 @@ gtd_sidebar_list_row_class_init (GtdSidebarListRowClass *klass)
static void
gtd_sidebar_list_row_init (GtdSidebarListRow *self)
{
+ GtkDropTarget *target;
+
gtk_widget_init_template (GTK_WIDGET (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_task_drop), self);
+ g_signal_connect (target, "enter", G_CALLBACK (on_task_enter_drop), self);
+ g_signal_connect (target, "leave", G_CALLBACK (on_task_leave_drop), self);
+ gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (target));
}
GtkWidget*