From 9fab7a684b8548da00d6fea30f535526193890c8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 12 Aug 2014 20:22:14 -0400 Subject: [PATCH] widget-factory: Add a flowbox example This is now really polished yet, but will let us work towards 'responsive grid'. --- demos/widget-factory/widget-factory.c | 77 ++++++++++++++++++++++++++ demos/widget-factory/widget-factory.ui | 59 +++++++++++++++++++- 2 files changed, 135 insertions(+), 1 deletion(-) diff --git a/demos/widget-factory/widget-factory.c b/demos/widget-factory/widget-factory.c index efc3c9bf5f..58cd5e5f46 100644 --- a/demos/widget-factory/widget-factory.c +++ b/demos/widget-factory/widget-factory.c @@ -531,6 +531,75 @@ populate_colors (GtkWidget *widget) gtk_list_box_invalidate_headers (GTK_LIST_BOX (widget)); } +static void +background_loaded_cb (GObject *source, + GAsyncResult *res, + gpointer data) +{ + GtkWidget *flowbox = data; + GtkWidget *child; + GdkPixbuf *pixbuf; + GError *error = NULL; + + pixbuf = gdk_pixbuf_new_from_stream_finish (res, &error); + if (error) + { + g_warning ("%s", error->message); + g_error_free (error); + return; + } + + child = gtk_image_new_from_pixbuf (pixbuf); + gtk_widget_show (child); + gtk_flow_box_insert (GTK_FLOW_BOX (flowbox), child, -1); +} + +static void +populate_flowbox (GtkWidget *button, GtkWidget *flowbox) +{ + const gchar *location; + GDir *dir; + GError *error = NULL; + const gchar *name; + gchar *filename; + GFile *file; + GInputStream *stream; + + g_signal_handlers_disconnect_by_func (button, populate_flowbox, flowbox); + + location = "/usr/share/backgrounds/gnome"; + dir = g_dir_open (location, 0, &error); + if (error) + { + g_warning ("%s", error->message); + g_error_free (error); + return; + } + + while ((name = g_dir_read_name (dir)) != NULL) + { + filename = g_build_filename (location, name, NULL); + file = g_file_new_for_path (filename); + stream = G_INPUT_STREAM (g_file_read (file, NULL, &error)); + if (error) + { + g_warning ("%s", error->message); + g_clear_error (&error); + } + else + { + gdk_pixbuf_new_from_stream_at_scale_async (stream, 110, 110, TRUE, NULL, + background_loaded_cb, flowbox); + } + + g_object_unref (file); + g_object_unref (stream); + g_free (filename); + } + + g_dir_close (dir); +} + static void row_activated (GtkListBox *box, GtkListBoxRow *row) { @@ -686,6 +755,14 @@ activate (GApplication *app) widget = (GtkWidget *)gtk_builder_get_object (builder, "preference_dialog_button"); g_signal_connect (widget, "clicked", G_CALLBACK (show_dialog), dialog); + dialog = (GtkWidget *)gtk_builder_get_object (builder, "selection_dialog"); + g_signal_connect (dialog, "response", G_CALLBACK (close_dialog), NULL); + widget = (GtkWidget *)gtk_builder_get_object (builder, "selection_dialog_button"); + g_signal_connect (widget, "clicked", G_CALLBACK (show_dialog), dialog); + + widget2 = (GtkWidget *)gtk_builder_get_object (builder, "selection_flowbox"); + g_signal_connect (widget, "clicked", G_CALLBACK (populate_flowbox), widget2); + widget = (GtkWidget *)gtk_builder_get_object (builder, "charletree"); populate_model ((GtkTreeStore *)gtk_tree_view_get_model (GTK_TREE_VIEW (widget))); gtk_tree_view_expand_all (GTK_TREE_VIEW (widget)); diff --git a/demos/widget-factory/widget-factory.ui b/demos/widget-factory/widget-factory.ui index ed84d81f92..97e0563e5c 100644 --- a/demos/widget-factory/widget-factory.ui +++ b/demos/widget-factory/widget-factory.ui @@ -2919,7 +2919,8 @@ Suspendisse feugiat quam quis dolor accumsan cursus. True in automatic - 200 + 6 + 226 True @@ -2968,6 +2969,13 @@ Suspendisse feugiat quam quis dolor accumsan cursus. True + + + True + _Select + True + + @@ -3322,6 +3330,55 @@ bad things might happen. + + window + True + 1 + Choose one + + + + + + True + never + never + + + True + single + 10 + 10 + 10 + 3 + 9 + + + + + + + + + True + _Cancel + True + + + + + True + True + True + _Select + True + + + + cancel_selection_dialog + select_selection_dialog + + vertical