summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-03-10 23:51:17 +0100
committerMatthias Clasen <mclasen@redhat.com>2023-03-10 23:51:17 +0100
commitf00659d97f52f16f8a7f0995653957edc51dd43d (patch)
treea1c941771d27a7d4e81be8842bf06fbffd24de9d
parent0f0204029258f25c56bd9730e9ae31e24fe3a53b (diff)
downloadgtk+-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.c61
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);