summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2021-08-19 02:15:59 +0200
committerBenjamin Otte <otte@redhat.com>2021-08-19 03:16:48 +0200
commit7bc1c9a5626aa5d681b65507524aacd5da2d079f (patch)
treec454635d3bfe0b67eb3977f47f218aaff8ab6626
parent1596fdeba3fa8d7ce98cf3481c20f2b23e1c27be (diff)
downloadgtk+-7bc1c9a5626aa5d681b65507524aacd5da2d079f.tar.gz
demo: Add a dnd special-case for textures
If the DND/clipboard machinery knows a texture is a texture, it will try to serialize it. Paintables can't be serialized, so it wouldn't try.
-rw-r--r--demos/gtk-demo/demoimage.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/demos/gtk-demo/demoimage.c b/demos/gtk-demo/demoimage.c
index a7ecb6e213..8fdc4257a5 100644
--- a/demos/gtk-demo/demoimage.c
+++ b/demos/gtk-demo/demoimage.c
@@ -100,7 +100,11 @@ prepare_drag (GtkDragSource *source,
DemoImage *demo = DEMO_IMAGE (widget);
GdkPaintable *paintable = get_image_paintable (GTK_IMAGE (demo->image));
- return gdk_content_provider_new_typed (GDK_TYPE_PAINTABLE, paintable);
+ /* Textures can be serialized, paintables can't, so special case the textures */
+ if (GDK_IS_TEXTURE (paintable))
+ return gdk_content_provider_new_typed (GDK_TYPE_TEXTURE, paintable);
+ else
+ return gdk_content_provider_new_typed (GDK_TYPE_PAINTABLE, paintable);
}
static gboolean
@@ -129,7 +133,11 @@ copy_image (GtkWidget *widget,
GdkPaintable *paintable = get_image_paintable (GTK_IMAGE (demo->image));
GValue value = G_VALUE_INIT;
- g_value_init (&value, GDK_TYPE_PAINTABLE);
+ /* Textures can be serialized, paintables can't, so special case the textures */
+ if (GDK_IS_TEXTURE (paintable))
+ g_value_init (&value, GDK_TYPE_TEXTURE);
+ else
+ g_value_init (&value, GDK_TYPE_PAINTABLE);
g_value_set_object (&value, paintable);
gdk_clipboard_set_value (clipboard, &value);
g_value_unset (&value);