[libdazzle] tree: propagate drag action to builders
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdazzle] tree: propagate drag action to builders
- Date: Wed, 6 Dec 2017 02:14:03 +0000 (UTC)
commit 1059e8635a50e528509151a9853ca6a3d8962da9
Author: Christian Hergert <chergert redhat com>
Date: Tue Dec 5 17:22:55 2017 -0800
tree: propagate drag action to builders
This lets the builder know how it should perform the action. For
example, a file-browser might use this to do a move instead of
a copy operation.
src/tree/dzl-tree-builder.c | 12 ++++++++----
src/tree/dzl-tree-builder.h | 2 ++
src/tree/dzl-tree-private.h | 2 ++
src/tree/dzl-tree-store.c | 6 ++++--
tests/test-tree.c | 2 ++
5 files changed, 18 insertions(+), 6 deletions(-)
---
diff --git a/src/tree/dzl-tree-builder.c b/src/tree/dzl-tree-builder.c
index 4c7c6f7..c26fc64 100644
--- a/src/tree/dzl-tree-builder.c
+++ b/src/tree/dzl-tree-builder.c
@@ -162,6 +162,7 @@ _dzl_tree_builder_drag_node_received (DzlTreeBuilder *builder,
DzlTreeNode *drag_node,
DzlTreeNode *drop_node,
DzlTreeDropPosition position,
+ GdkDragAction action,
GtkSelectionData *data)
{
gboolean ret = FALSE;
@@ -172,7 +173,7 @@ _dzl_tree_builder_drag_node_received (DzlTreeBuilder *builder,
g_return_val_if_fail (data != NULL, FALSE);
g_signal_emit (builder, signals [DRAG_NODE_RECEIVED], 0,
- drag_node, drop_node, position, data,
+ drag_node, drop_node, position, action, data,
&ret);
return ret;
@@ -242,6 +243,7 @@ gboolean
_dzl_tree_builder_drag_data_received (DzlTreeBuilder *builder,
DzlTreeNode *drop_node,
DzlTreeDropPosition position,
+ GdkDragAction action,
GtkSelectionData *data)
{
gboolean ret = FALSE;
@@ -251,7 +253,7 @@ _dzl_tree_builder_drag_data_received (DzlTreeBuilder *builder,
g_return_val_if_fail (data != NULL, FALSE);
g_signal_emit (builder, signals [DRAG_DATA_RECEIVED], 0,
- drop_node, position, data,
+ drop_node, position, action, data,
&ret);
return ret;
@@ -372,10 +374,11 @@ dzl_tree_builder_class_init (DzlTreeBuilderClass *klass)
G_STRUCT_OFFSET (DzlTreeBuilderClass, drag_node_received),
NULL, NULL, NULL,
G_TYPE_BOOLEAN,
- 4,
+ 5,
DZL_TYPE_TREE_NODE,
DZL_TYPE_TREE_NODE,
DZL_TYPE_TREE_DROP_POSITION,
+ GDK_TYPE_DRAG_ACTION,
GTK_TYPE_SELECTION_DATA);
signals [DRAG_NODE_DELETE] =
@@ -426,9 +429,10 @@ dzl_tree_builder_class_init (DzlTreeBuilderClass *klass)
g_signal_accumulator_true_handled, NULL,
NULL,
G_TYPE_BOOLEAN,
- 3,
+ 4,
DZL_TYPE_TREE_NODE,
DZL_TYPE_TREE_DROP_POSITION,
+ GDK_TYPE_DRAG_ACTION,
GTK_TYPE_SELECTION_DATA);
signals [NODE_DROPPABLE] =
diff --git a/src/tree/dzl-tree-builder.h b/src/tree/dzl-tree-builder.h
index 62d0029..a2904a6 100644
--- a/src/tree/dzl-tree-builder.h
+++ b/src/tree/dzl-tree-builder.h
@@ -63,10 +63,12 @@ struct _DzlTreeBuilderClass
DzlTreeNode *drag_node,
DzlTreeNode *drop_node,
DzlTreeDropPosition position,
+ GdkDragAction action,
GtkSelectionData *data);
gboolean (*drag_data_received) (DzlTreeBuilder *builder,
DzlTreeNode *drop_node,
DzlTreeDropPosition position,
+ GdkDragAction action,
GtkSelectionData *data);
gboolean (*drag_node_delete) (DzlTreeBuilder *builder,
DzlTreeNode *node);
diff --git a/src/tree/dzl-tree-private.h b/src/tree/dzl-tree-private.h
index a0c949d..ed988fe 100644
--- a/src/tree/dzl-tree-private.h
+++ b/src/tree/dzl-tree-private.h
@@ -75,11 +75,13 @@ gboolean _dzl_tree_builder_drag_data_get (DzlTreeBuilder
gboolean _dzl_tree_builder_drag_data_received (DzlTreeBuilder *builder,
DzlTreeNode *drop_node,
DzlTreeDropPosition position,
+ GdkDragAction action,
GtkSelectionData *data);
gboolean _dzl_tree_builder_drag_node_received (DzlTreeBuilder *builder,
DzlTreeNode *drag_node,
DzlTreeNode *drop_node,
DzlTreeDropPosition position,
+ GdkDragAction action,
GtkSelectionData *data);
gboolean _dzl_tree_builder_drag_node_delete (DzlTreeBuilder *builder,
DzlTreeNode *node);
diff --git a/src/tree/dzl-tree-store.c b/src/tree/dzl-tree-store.c
index a25ae10..87b3e07 100644
--- a/src/tree/dzl-tree-store.c
+++ b/src/tree/dzl-tree-store.c
@@ -201,6 +201,7 @@ dzl_tree_store_drag_data_received (GtkTreeDragDest *dest,
g_autoptr(DzlTreeNode) drop_node = NULL;
GPtrArray *builders;
DzlTreeDropPosition pos = 0;
+ GdkDragAction action;
g_assert (GTK_IS_TREE_DRAG_DEST (self));
g_assert (self->tree != NULL);
@@ -209,6 +210,7 @@ dzl_tree_store_drag_data_received (GtkTreeDragDest *dest,
builders = _dzl_tree_get_builders (self->tree);
drop_node = _dzl_tree_get_drop_node (self->tree, &pos);
+ action = _dzl_tree_get_drag_action (self->tree);
/*
* If we have a drag/drop of a node onto/adjacent another node, then
@@ -241,7 +243,7 @@ dzl_tree_store_drag_data_received (GtkTreeDragDest *dest,
g_assert (DZL_IS_TREE_BUILDER (builder));
- if (_dzl_tree_builder_drag_node_received (builder, drag_node, drop_node, pos, data))
+ if (_dzl_tree_builder_drag_node_received (builder, drag_node, drop_node, pos, action,
data))
return TRUE;
}
}
@@ -254,7 +256,7 @@ dzl_tree_store_drag_data_received (GtkTreeDragDest *dest,
g_assert (DZL_IS_TREE_BUILDER (builder));
- if (_dzl_tree_builder_drag_data_received (builder, drop_node, pos, data))
+ if (_dzl_tree_builder_drag_data_received (builder, drop_node, pos, action, data))
return TRUE;
}
diff --git a/tests/test-tree.c b/tests/test-tree.c
index 63c5bbc..7c42f00 100644
--- a/tests/test-tree.c
+++ b/tests/test-tree.c
@@ -91,6 +91,7 @@ static gboolean
drag_data_received_cb (DzlTreeBuilder *builder,
DzlTreeNode *node,
DzlTreeDropPosition position,
+ GdkDragAction action,
GtkSelectionData *data)
{
g_assert (DZL_IS_TREE_BUILDER (builder));
@@ -149,6 +150,7 @@ drag_node_received_cb (DzlTreeBuilder *builder,
DzlTreeNode *drag_node,
DzlTreeNode *drop_node,
DzlTreeDropPosition position,
+ GdkDragAction action,
GtkSelectionData *data,
gpointer user_data)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]