From dbe5e57b8e53da897d132ff76042cc033dc0a9dc Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 12 Dec 2021 18:01:50 -0500 Subject: [PATCH 1/2] inspector: Show more datatypes for the clipboard It is easy enough to show colors, files and pixbufs. --- gtk/inspector/gtkdataviewer.c | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/gtk/inspector/gtkdataviewer.c b/gtk/inspector/gtkdataviewer.c index acfafea88b..fd8154b4a8 100644 --- a/gtk/inspector/gtkdataviewer.c +++ b/gtk/inspector/gtkdataviewer.c @@ -24,6 +24,9 @@ #include "gtkbinlayout.h" #include "gtklabel.h" #include "gtkpicture.h" +#include "gtkcolorswatchprivate.h" +#include "gtkbox.h" + struct _GtkDataViewer { @@ -258,6 +261,47 @@ gtk_data_viewer_load_value (GtkDataViewer *self, gtk_widget_set_size_request (self->contents, 256, 256); gtk_widget_set_parent (self->contents, GTK_WIDGET (self)); } + else if (g_type_is_a (G_VALUE_TYPE (value), GDK_TYPE_PIXBUF)) + { + self->contents = gtk_picture_new_for_pixbuf (g_value_get_object (value)); + gtk_widget_set_size_request (self->contents, 256, 256); + gtk_widget_set_parent (self->contents, GTK_WIDGET (self)); + } + else if (g_type_is_a (G_VALUE_TYPE (value), GDK_TYPE_RGBA)) + { + const GdkRGBA *color = g_value_get_boxed (value); + + self->contents = gtk_color_swatch_new (); + gtk_color_swatch_set_rgba (GTK_COLOR_SWATCH (self->contents), color); + gtk_widget_set_size_request (self->contents, 48, 32); + gtk_widget_set_halign (self->contents, GTK_ALIGN_CENTER); + gtk_widget_set_parent (self->contents, GTK_WIDGET (self)); + } + else if (g_type_is_a (G_VALUE_TYPE (value), G_TYPE_FILE)) + { + GFile *file = g_value_get_object (value); + + self->contents = gtk_label_new (g_file_peek_path (file)); + gtk_label_set_ellipsize (GTK_LABEL (self->contents), PANGO_ELLIPSIZE_START); + gtk_widget_set_halign (self->contents, GTK_ALIGN_CENTER); + gtk_widget_set_parent (self->contents, GTK_WIDGET (self)); + } + else if (g_type_is_a (G_VALUE_TYPE (value), GDK_TYPE_FILE_LIST)) + { + GList *l; + + self->contents = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); + gtk_widget_set_parent (self->contents, GTK_WIDGET (self)); + + for (l = g_value_get_boxed (value); l; l = l->next) + { + GFile *file = l->data; + GtkWidget *label = gtk_label_new (g_file_peek_path (file)); + gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_START); + gtk_widget_set_halign (label, GTK_ALIGN_CENTER); + gtk_box_append (GTK_BOX (self->contents), label); + } + } else { gtk_data_viewer_load_error (self, From a463ead7396a57df7656c1cbebbb8e1958bd4168 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 12 Dec 2021 18:27:58 -0500 Subject: [PATCH 2/2] gdk: Drop some pointless code There is no point in sorting png first when registering (de)serializers, since we ignore the png format now when walking the list. --- gdk/gdkcontentdeserializer.c | 21 +-------------------- gdk/gdkcontentserializer.c | 31 ++++++------------------------- 2 files changed, 7 insertions(+), 45 deletions(-) diff --git a/gdk/gdkcontentdeserializer.c b/gdk/gdkcontentdeserializer.c index 9ab3482c6f..081380f447 100644 --- a/gdk/gdkcontentdeserializer.c +++ b/gdk/gdkcontentdeserializer.c @@ -49,7 +49,7 @@ typedef struct _Deserializer Deserializer; -struct _Deserializer +struct _Deserializer { const char * mime_type; /* interned */ GType type; @@ -934,25 +934,6 @@ init (void) formats = gdk_pixbuf_get_formats (); - /* Make sure png comes first */ - for (f = formats; f; f = f->next) - { - GdkPixbufFormat *fmt = f->data; - char *name; - - name = gdk_pixbuf_format_get_name (fmt); - if (g_str_equal (name, "png")) - { - formats = g_slist_delete_link (formats, f); - formats = g_slist_prepend (formats, fmt); - - g_free (name); - break; - } - - g_free (name); - } - for (f = formats; f; f = f->next) { GdkPixbufFormat *fmt = f->data; diff --git a/gdk/gdkcontentserializer.c b/gdk/gdkcontentserializer.c index d359c558f8..75734e2765 100644 --- a/gdk/gdkcontentserializer.c +++ b/gdk/gdkcontentserializer.c @@ -54,7 +54,7 @@ typedef struct _Serializer Serializer; -struct _Serializer +struct _Serializer { const char * mime_type; /* interned */ GType type; @@ -446,7 +446,7 @@ lookup_serializer (const char *mime_type, serializer->type == type) return serializer; } - + return NULL; } @@ -630,7 +630,7 @@ pixbuf_serializer (GdkContentSerializer *serializer) const GValue *value; GdkPixbuf *pixbuf; const char *name; - + name = gdk_content_serializer_get_user_data (serializer); value = gdk_content_serializer_get_value (serializer); @@ -651,7 +651,7 @@ pixbuf_serializer (GdkContentSerializer *serializer) gdk_pixbuf_save_to_stream_async (pixbuf, gdk_content_serializer_get_output_stream (serializer), name, - gdk_content_serializer_get_cancellable (serializer), + gdk_content_serializer_get_cancellable (serializer), pixbuf_serializer_finish, serializer, g_str_equal (name, "png") ? "compression" : NULL, "2", @@ -823,7 +823,7 @@ file_uri_serializer (GdkContentSerializer *serializer) else if (G_VALUE_HOLDS (value, GDK_TYPE_FILE_LIST)) { GSList *l; - + for (l = g_value_get_boxed (value); l; l = l->next) { uri = g_file_get_uri (l->data); @@ -867,7 +867,7 @@ file_text_serializer (GdkContentSerializer *serializer) { GString *str; GSList *l; - + str = g_string_new (NULL); for (l = g_value_get_boxed (value); l; l = l->next) @@ -966,25 +966,6 @@ init (void) formats = gdk_pixbuf_get_formats (); - /* Make sure png comes first */ - for (f = formats; f; f = f->next) - { - GdkPixbufFormat *fmt = f->data; - char *name; - - name = gdk_pixbuf_format_get_name (fmt); - if (g_str_equal (name, "png")) - { - formats = g_slist_delete_link (formats, f); - formats = g_slist_prepend (formats, fmt); - - g_free (name); - break; - } - - g_free (name); - } - for (f = formats; f; f = f->next) { GdkPixbufFormat *fmt = f->data;