diff options
author | Benjamin Otte <otte@redhat.com> | 2021-08-20 05:52:10 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2021-08-30 06:02:16 +0200 |
commit | cbc050b9ed6708e84c0a97f327400d08512ad65f (patch) | |
tree | f3f00ec327583711247266ccfa3befe9de591f48 | |
parent | 18affbd390abe4f31cb2480faf56bf6e6b3e37d8 (diff) | |
download | gtk+-cbc050b9ed6708e84c0a97f327400d08512ad65f.tar.gz |
recorder: Make the render nodes in the list draggable
You can (soon) drag any of the nodes directly into the node-editor.
-rw-r--r-- | gtk/inspector/recorder.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gtk/inspector/recorder.c b/gtk/inspector/recorder.c index 7b3ead81ee..7b9793b98a 100644 --- a/gtk/inspector/recorder.c +++ b/gtk/inspector/recorder.c @@ -21,6 +21,8 @@ #include <gtk/gtkbinlayout.h> #include <gtk/gtkbox.h> +#include <gtk/gtkdragsource.h> +#include <gtk/gtkeventcontroller.h> #include <gtk/gtkfilechooserdialog.h> #include <gtk/gtksignallistitemfactory.h> #include <gtk/gtklabel.h> @@ -344,15 +346,39 @@ node_name (GskRenderNode *node) } } +static GdkContentProvider * +prepare_render_node_drag (GtkDragSource *source, + double x, + double y, + GtkListItem *list_item) +{ + GtkTreeListRow *row_item; + GdkPaintable *paintable; + GskRenderNode *node; + + row_item = gtk_list_item_get_item (list_item); + if (row_item == NULL) + return NULL; + + paintable = gtk_tree_list_row_get_item (row_item); + node = gtk_render_node_paintable_get_render_node (GTK_RENDER_NODE_PAINTABLE (paintable)); + + return gdk_content_provider_new_typed (GSK_TYPE_RENDER_NODE, node); +} + static void setup_widget_for_render_node (GtkSignalListItemFactory *factory, GtkListItem *list_item) { GtkWidget *expander, *box, *child; + GtkDragSource *source; /* expander */ expander = gtk_tree_expander_new (); gtk_list_item_set_child (list_item, expander); + source = gtk_drag_source_new (); + g_signal_connect (source, "prepare", G_CALLBACK (prepare_render_node_drag), list_item); + gtk_widget_add_controller (expander, GTK_EVENT_CONTROLLER (source)); box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); gtk_tree_expander_set_child (GTK_TREE_EXPANDER (expander), box); |