diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-03-10 23:51:17 +0100 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-03-10 23:51:17 +0100 |
commit | f00659d97f52f16f8a7f0995653957edc51dd43d (patch) | |
tree | a1c941771d27a7d4e81be8842bf06fbffd24de9d | |
parent | 0f0204029258f25c56bd9730e9ae31e24fe3a53b (diff) | |
download | gtk+-f00659d97f52f16f8a7f0995653957edc51dd43d.tar.gz |
gtk-demo: Add a file chooser to the menu demo
So we can try this with bigger images.
-rw-r--r-- | demos/gtk-demo/menu.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/demos/gtk-demo/menu.c b/demos/gtk-demo/menu.c index 63610632c0..6ea4a505ad 100644 --- a/demos/gtk-demo/menu.c +++ b/demos/gtk-demo/menu.c @@ -13,6 +13,62 @@ #include <gtk/gtk.h> #include "demo3widget.h" +static void +file_opened (GObject *source, + GAsyncResult *result, + void *data) +{ + GFile *file; + GError *error = NULL; + GdkTexture *texture; + + file = gtk_file_dialog_open_finish (GTK_FILE_DIALOG (source), result, &error); + + if (!file) + { + g_print ("%s\n", error->message); + g_error_free (error); + return; + } + + texture = gdk_texture_new_from_file (file, &error); + g_object_unref (file); + if (!texture) + { + g_print ("%s\n", error->message); + g_error_free (error); + return; + } + + g_object_set (G_OBJECT (data), "texture", texture, NULL); + g_object_unref (texture); +} + +static void +open_file (GtkWidget *picker, + GtkWidget *demo) +{ + GtkWindow *parent = GTK_WINDOW (gtk_widget_get_root (picker)); + GtkFileDialog *dialog; + GtkFileFilter *filter; + GListStore *filters; + + dialog = gtk_file_dialog_new (); + + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, "Images"); + gtk_file_filter_add_pixbuf_formats (filter); + filters = g_list_store_new (GTK_TYPE_FILE_FILTER); + g_list_store_append (filters, filter); + g_object_unref (filter); + + gtk_file_dialog_set_filters (dialog, G_LIST_MODEL (filters)); + g_object_unref (filters); + + gtk_file_dialog_open (dialog, parent, NULL, file_opened, demo); + + g_object_unref (dialog); +} GtkWidget * do_menu (GtkWidget *do_widget) @@ -27,6 +83,7 @@ do_menu (GtkWidget *do_widget) GtkWidget *widget; GtkWidget *scale; GtkWidget *dropdown; + GtkWidget *button; window = gtk_window_new (); gtk_window_set_title (GTK_WINDOW (window), "Menu"); @@ -48,6 +105,10 @@ do_menu (GtkWidget *do_widget) box2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_append (GTK_BOX (box), box2); + button = gtk_button_new_from_icon_name ("document-open-symbolic"); + g_signal_connect (button, "clicked", G_CALLBACK (open_file), widget); + gtk_box_append (GTK_BOX (box2), button); + scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0.01, 10.0, 0.1); gtk_range_set_value (GTK_RANGE (scale), 1.0); gtk_widget_set_hexpand (scale, TRUE); |