[libdazzle] tree-builder: add signals for DnD operations
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdazzle] tree-builder: add signals for DnD operations
- Date: Tue, 5 Dec 2017 10:22:52 +0000 (UTC)
commit 4b90ae552e444a67935b74f4ec215a774fb9d670
Author: Christian Hergert <chergert redhat com>
Date: Tue Dec 5 02:08:53 2017 -0800
tree-builder: add signals for DnD operations
These allow us to do some common operations through the builders
that we can use to plumb DnD into the node design.
src/tree/dzl-tree-builder.c | 153 ++++++++++++++++++++++++++++++++++++++++++-
src/tree/dzl-tree-builder.h | 18 +++++
src/tree/dzl-tree-private.h | 17 +++++
3 files changed, 187 insertions(+), 1 deletions(-)
---
diff --git a/src/tree/dzl-tree-builder.c b/src/tree/dzl-tree-builder.c
index c7fa463..b9e360c 100644
--- a/src/tree/dzl-tree-builder.c
+++ b/src/tree/dzl-tree-builder.c
@@ -20,6 +20,8 @@
#include <glib/gi18n.h>
+#include "dzl-enums.h"
+
#include "tree/dzl-tree.h"
#include "tree/dzl-tree-builder.h"
#include "util/dzl-macros.h"
@@ -41,8 +43,13 @@ enum {
ADDED,
REMOVED,
BUILD_NODE,
+ DRAG_DATA_RECEIVED,
+ DRAG_NODE_RECEIVED,
NODE_ACTIVATED,
NODE_COLLAPSED,
+ NODE_DRAGGABLE,
+ NODE_DROPPABLE,
+ DRAG_DATA_GET,
NODE_EXPANDED,
NODE_POPUP,
NODE_SELECTED,
@@ -149,6 +156,92 @@ _dzl_tree_builder_node_expanded (DzlTreeBuilder *builder,
g_signal_emit (builder, signals [NODE_EXPANDED], 0, node);
}
+gboolean
+_dzl_tree_builder_drag_node_received (DzlTreeBuilder *builder,
+ DzlTreeNode *drag_node,
+ DzlTreeNode *drop_node,
+ DzlTreeDropPosition position,
+ GtkSelectionData *data)
+{
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (DZL_IS_TREE_BUILDER (builder), FALSE);
+ g_return_val_if_fail (DZL_IS_TREE_NODE (drag_node), FALSE);
+ g_return_val_if_fail (DZL_IS_TREE_NODE (drop_node), FALSE);
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ g_signal_emit (builder, signals [DRAG_NODE_RECEIVED], 0,
+ drag_node, drop_node, position, data,
+ &ret);
+
+ return ret;
+}
+
+gboolean
+_dzl_tree_builder_node_draggable (DzlTreeBuilder *builder,
+ DzlTreeNode *node)
+{
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (DZL_IS_TREE_BUILDER (builder), FALSE);
+ g_return_val_if_fail (DZL_IS_TREE_NODE (node), FALSE);
+
+ g_signal_emit (builder, signals [NODE_DRAGGABLE], 0, node, &ret);
+
+ return ret;
+}
+
+gboolean
+_dzl_tree_builder_node_droppable (DzlTreeBuilder *builder,
+ DzlTreeNode *node,
+ GtkSelectionData *data)
+{
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (DZL_IS_TREE_BUILDER (builder), FALSE);
+ g_return_val_if_fail (DZL_IS_TREE_NODE (node), FALSE);
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ g_signal_emit (builder, signals [NODE_DROPPABLE], 0, node, data, &ret);
+
+ return ret;
+}
+
+gboolean
+_dzl_tree_builder_drag_data_get (DzlTreeBuilder *builder,
+ DzlTreeNode *node,
+ GtkSelectionData *data)
+{
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (DZL_IS_TREE_BUILDER (builder), FALSE);
+ g_return_val_if_fail (DZL_IS_TREE_NODE (node), FALSE);
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ g_signal_emit (builder, signals [DRAG_DATA_GET], 0, node, data, &ret);
+
+ return ret;
+}
+
+gboolean
+_dzl_tree_builder_drag_data_received (DzlTreeBuilder *builder,
+ DzlTreeNode *drop_node,
+ DzlTreeDropPosition position,
+ GtkSelectionData *data)
+{
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (DZL_IS_TREE_BUILDER (builder), FALSE);
+ g_return_val_if_fail (DZL_IS_TREE_NODE (drop_node), FALSE);
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ g_signal_emit (builder, signals [DRAG_DATA_RECEIVED], 0,
+ drop_node, position, data,
+ &ret);
+
+ return ret;
+}
+
void
_dzl_tree_builder_set_tree (DzlTreeBuilder *builder,
DzlTree *tree)
@@ -169,7 +262,7 @@ _dzl_tree_builder_set_tree (DzlTreeBuilder *builder,
*
* Gets the tree that owns the builder.
*
- * Returns: (transfer none) (type DzlTree) (nullable): A #DzlTree or %NULL.
+ * Returns: (transfer none) (nullable): A #DzlTree or %NULL.
*/
DzlTree *
dzl_tree_builder_get_tree (DzlTreeBuilder *builder)
@@ -257,6 +350,19 @@ dzl_tree_builder_class_init (DzlTreeBuilderClass *klass)
G_TYPE_FROM_CLASS (klass),
g_cclosure_marshal_VOID__OBJECTv);
+ signals [DRAG_NODE_RECEIVED] =
+ g_signal_new ("drag-node-received",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (DzlTreeBuilderClass, drag_node_received),
+ NULL, NULL, NULL,
+ G_TYPE_BOOLEAN,
+ 4,
+ DZL_TYPE_TREE_NODE,
+ DZL_TYPE_TREE_NODE,
+ DZL_TYPE_TREE_DROP_POSITION,
+ GTK_TYPE_SELECTION_DATA);
+
signals [NODE_ACTIVATED] =
g_signal_new ("node-activated",
G_TYPE_FROM_CLASS (klass),
@@ -267,6 +373,51 @@ dzl_tree_builder_class_init (DzlTreeBuilderClass *klass)
1,
DZL_TYPE_TREE_NODE);
+ signals [NODE_DRAGGABLE] =
+ g_signal_new ("node-draggable",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (DzlTreeBuilderClass, node_draggable),
+ g_signal_accumulator_true_handled, NULL,
+ NULL,
+ G_TYPE_BOOLEAN,
+ 1, DZL_TYPE_TREE_NODE);
+
+ signals [DRAG_DATA_GET] =
+ g_signal_new ("drag-data-get",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (DzlTreeBuilderClass, drag_data_get),
+ g_signal_accumulator_true_handled, NULL,
+ NULL,
+ G_TYPE_BOOLEAN,
+ 2,
+ DZL_TYPE_TREE_NODE,
+ GTK_TYPE_SELECTION_DATA);
+
+ signals [DRAG_DATA_RECEIVED] =
+ g_signal_new ("drag-data-received",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (DzlTreeBuilderClass, drag_data_received),
+ g_signal_accumulator_true_handled, NULL,
+ NULL,
+ G_TYPE_BOOLEAN,
+ 3,
+ DZL_TYPE_TREE_NODE,
+ DZL_TYPE_TREE_DROP_POSITION,
+ GTK_TYPE_SELECTION_DATA);
+
+ signals [NODE_DROPPABLE] =
+ g_signal_new ("node-droppable",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (DzlTreeBuilderClass, node_droppable),
+ g_signal_accumulator_true_handled, NULL,
+ NULL,
+ G_TYPE_BOOLEAN,
+ 2, DZL_TYPE_TREE_NODE, GTK_TYPE_SELECTION_DATA);
+
signals [NODE_COLLAPSED] =
g_signal_new ("node-collapsed",
G_TYPE_FROM_CLASS (klass),
diff --git a/src/tree/dzl-tree-builder.h b/src/tree/dzl-tree-builder.h
index 596fc1d..ba2c47d 100644
--- a/src/tree/dzl-tree-builder.h
+++ b/src/tree/dzl-tree-builder.h
@@ -52,6 +52,24 @@ struct _DzlTreeBuilderClass
void (*node_collapsed) (DzlTreeBuilder *builder,
DzlTreeNode *node);
+ gboolean (*node_draggable) (DzlTreeBuilder *builder,
+ DzlTreeNode *node);
+ gboolean (*node_droppable) (DzlTreeBuilder *builder,
+ DzlTreeNode *node,
+ GtkSelectionData *data);
+ gboolean (*drag_data_get) (DzlTreeBuilder *builder ,
+ DzlTreeNode *node,
+ GtkSelectionData *data);
+ gboolean (*drag_node_received) (DzlTreeBuilder *builder,
+ DzlTreeNode *drag_node,
+ DzlTreeNode *drop_node,
+ DzlTreeDropPosition position,
+ GtkSelectionData *data);
+ gboolean (*drag_data_received) (DzlTreeBuilder *builder,
+ DzlTreeNode *drop_node,
+ DzlTreeDropPosition position,
+ GtkSelectionData *data);
+
/*< private >*/
gpointer _padding[12];
};
diff --git a/src/tree/dzl-tree-private.h b/src/tree/dzl-tree-private.h
index da779c6..956ab13 100644
--- a/src/tree/dzl-tree-private.h
+++ b/src/tree/dzl-tree-private.h
@@ -66,6 +66,18 @@ void _dzl_tree_builder_removed (DzlTreeBuilder
DzlTree *tree);
void _dzl_tree_builder_build_node (DzlTreeBuilder *builder,
DzlTreeNode *node);
+gboolean _dzl_tree_builder_drag_data_get (DzlTreeBuilder *builder,
+ DzlTreeNode *node,
+ GtkSelectionData *data);
+gboolean _dzl_tree_builder_drag_data_received (DzlTreeBuilder *builder,
+ DzlTreeNode *drop_node,
+ DzlTreeDropPosition position,
+ GtkSelectionData *data);
+gboolean _dzl_tree_builder_drag_node_received (DzlTreeBuilder *builder,
+ DzlTreeNode *drag_node,
+ DzlTreeNode *drop_node,
+ DzlTreeDropPosition position,
+ GtkSelectionData *data);
gboolean _dzl_tree_builder_node_activated (DzlTreeBuilder *builder,
DzlTreeNode *node);
void _dzl_tree_builder_node_popup (DzlTreeBuilder *builder,
@@ -79,6 +91,11 @@ void _dzl_tree_builder_node_collapsed (DzlTreeBuilder
DzlTreeNode *node);
void _dzl_tree_builder_node_expanded (DzlTreeBuilder *builder,
DzlTreeNode *node);
+gboolean _dzl_tree_builder_node_draggable (DzlTreeBuilder *builder,
+ DzlTreeNode *node);
+gboolean _dzl_tree_builder_node_droppable (DzlTreeBuilder *builder,
+ DzlTreeNode *node,
+ GtkSelectionData *data);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]