[libdazzle] tree: propagate drag action to builders



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]