summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-09-05 22:36:00 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-09-06 17:11:33 -0400
commite559a310c6cd45fe14ff78a7115da50aac644d50 (patch)
tree9425b8484f606b109f07d003fceb955632be6b4a /demos
parent9cd7f97d03ac53d71ab08d8e17bffc48151eea35 (diff)
downloadgtk+-e559a310c6cd45fe14ff78a7115da50aac644d50.tar.gz
gtk-demo: Add a way to launch individual demos
Add a --run option which takes the name of an example and launches it. Also add a --autoquit option which can be used to quit after a given number of seconds.
Diffstat (limited to 'demos')
-rw-r--r--demos/gtk-demo/main.c70
1 files changed, 69 insertions, 1 deletions
diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c
index f7dc2e3bcf..f6e4fbf5c1 100644
--- a/demos/gtk-demo/main.c
+++ b/demos/gtk-demo/main.c
@@ -1044,6 +1044,70 @@ activate (GApplication *app)
g_object_unref (builder);
}
+static gboolean
+auto_quit (gpointer data)
+{
+ g_application_quit (G_APPLICATION (data));
+ return G_SOURCE_REMOVE;
+}
+
+static void
+command_line (GApplication *app,
+ GApplicationCommandLine *cmdline)
+{
+ GVariantDict *options;
+ const gchar *name = NULL;
+ gint autoquit = 0;
+ Demo *d, *c;
+ GDoDemoFunc func = 0;
+ GtkWidget *window, *demo;
+
+ activate (app);
+
+ options = g_application_command_line_get_options_dict (cmdline);
+ g_variant_dict_lookup (options, "run", "&s", &name);
+ g_variant_dict_lookup (options, "autoquit", "i", &autoquit);
+
+ if (name == NULL)
+ goto out;
+
+ window = gtk_application_get_windows (GTK_APPLICATION (app))->data;
+
+ d = gtk_demos;
+
+ while (d->title)
+ {
+ c = d->children;
+ if (g_strcmp0 (d->name, name) == 0)
+ {
+ func = d->func;
+ goto out;
+ }
+ d++;
+ while (c && c->title)
+ {
+ if (g_strcmp0 (c->name, name) == 0)
+ {
+ func = c->func;
+ goto out;
+ }
+ c++;
+ }
+ }
+
+out:
+ if (func)
+ {
+ demo = (func) (window);
+
+ gtk_window_set_transient_for (GTK_WINDOW (demo), GTK_WINDOW (window));
+ gtk_window_set_modal (GTK_WINDOW (demo), TRUE);
+ }
+
+ if (autoquit > 0)
+ g_timeout_add_seconds (autoquit, auto_quit, app);
+}
+
int
main (int argc, char **argv)
{
@@ -1063,14 +1127,18 @@ main (int argc, char **argv)
}
/* -- End of hack -- */
- app = gtk_application_new ("org.gtk.Demo", G_APPLICATION_NON_UNIQUE);
+ app = gtk_application_new ("org.gtk.Demo", G_APPLICATION_NON_UNIQUE|G_APPLICATION_HANDLES_COMMAND_LINE);
g_action_map_add_action_entries (G_ACTION_MAP (app),
app_entries, G_N_ELEMENTS (app_entries),
app);
+ g_application_add_main_option (G_APPLICATION (app), "run", 0, 0, G_OPTION_ARG_STRING, "Run an example", "EXAMPLE");
+ g_application_add_main_option (G_APPLICATION (app), "autoquit", 0, 0, G_OPTION_ARG_INT, "Quit after a delay", "SECONDS");
+
g_signal_connect (app, "startup", G_CALLBACK (startup), NULL);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
+ g_signal_connect (app, "command-line", G_CALLBACK (command_line), NULL);
g_application_run (G_APPLICATION (app), argc, argv);