[libdazzle] tree: track drag action for applying DnD
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdazzle] tree: track drag action for applying DnD
- Date: Wed, 6 Dec 2017 02:13:58 +0000 (UTC)
commit 77bfba2366738610ea6f9fe8a7654ef50e697f0e
Author: Christian Hergert <chergert redhat com>
Date: Tue Dec 5 17:22:14 2017 -0800
tree: track drag action for applying DnD
We need this for the builders to ensure they propagate the
proper action (such as move instead of copy).
src/tree/dzl-tree-private.h | 1 +
src/tree/dzl-tree.c | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 0 deletions(-)
---
diff --git a/src/tree/dzl-tree-private.h b/src/tree/dzl-tree-private.h
index 5683fbd..a0c949d 100644
--- a/src/tree/dzl-tree-private.h
+++ b/src/tree/dzl-tree-private.h
@@ -45,6 +45,7 @@ void _dzl_tree_remove (DzlTree
DzlTreeNode *_dzl_tree_get_drop_node (DzlTree *self,
DzlTreeDropPosition *pos);
GPtrArray *_dzl_tree_get_builders (DzlTree *self);
+GdkDragAction _dzl_tree_get_drag_action (DzlTree *self);
gboolean _dzl_tree_get_iter (DzlTree *self,
DzlTreeNode *node,
GtkTreeIter *iter);
diff --git a/src/tree/dzl-tree.c b/src/tree/dzl-tree.c
index e09d9fd..ee43e11 100644
--- a/src/tree/dzl-tree.c
+++ b/src/tree/dzl-tree.c
@@ -42,6 +42,7 @@ typedef struct
GtkCellRenderer *cell_text;
GtkTreeViewDropPosition last_drop_pos;
+ GdkDragAction drag_action;
GdkRGBA dim_foreground;
@@ -962,6 +963,28 @@ _dzl_tree_get_drop_node (DzlTree *self,
}
static void
+dzl_tree_drag_data_received (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time_)
+{
+ DzlTree *self = (DzlTree *)widget;
+ DzlTreePrivate *priv = dzl_tree_get_instance_private (self);
+
+ g_assert (DZL_IS_TREE (widget));
+ g_assert (GDK_IS_DRAG_CONTEXT (context));
+ g_assert (data != NULL);
+
+ /* Drag the drag action for use in dispatch */
+ priv->drag_action = gdk_drag_context_get_selected_action (context);
+
+ GTK_WIDGET_CLASS (dzl_tree_parent_class)->drag_data_received (widget, context, x, y, data, info, time_);
+}
+
+static void
dzl_tree_style_updated (GtkWidget *widget)
{
DzlTree *self = (DzlTree *)widget;
@@ -1094,6 +1117,7 @@ dzl_tree_class_init (DzlTreeClass *klass)
widget_class->style_updated = dzl_tree_style_updated;
widget_class->drag_motion = dzl_tree_drag_motion;
+ widget_class->drag_data_received = dzl_tree_drag_data_received;
widget_class->drag_end = dzl_tree_drag_end;
tree_view_class->row_activated = dzl_tree_row_activated;
@@ -1943,3 +1967,13 @@ _dzl_tree_get_builders (DzlTree *self)
return priv->builders;
}
+
+GdkDragAction
+_dzl_tree_get_drag_action (DzlTree *self)
+{
+ DzlTreePrivate *priv = dzl_tree_get_instance_private (self);
+
+ g_return_val_if_fail (DZL_IS_TREE (self), 0);
+
+ return priv->drag_action;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]