static void gbp_greeter_application_addin_handle_command_line (IdeApplicationAddin *addin, IdeApplication *application, GApplicationCommandLine *cmdline) { GbpGreeterApplicationAddin *self = (GbpGreeterApplicationAddin *)addin; g_auto(GStrv) argv = NULL; GVariantDict *dict; const gchar *clone_uri = NULL; gint argc; g_assert (GBP_IS_GREETER_APPLICATION_ADDIN (self)); g_assert (IDE_IS_APPLICATION (application)); g_assert (G_IS_APPLICATION_COMMAND_LINE (cmdline)); dict = g_application_command_line_get_options_dict (cmdline); argv = ide_application_get_argv (IDE_APPLICATION (application), cmdline); argc = g_strv_length (argv); /* * If we are processing the arguments for the startup of the primary * instance, then we want to show the greeter if no arguments are * provided. (That means argc == 1, the programe executable). * * Also, if they provided --greeter or -g we'll show a new greeter. */ if ((!g_application_command_line_get_is_remote (cmdline) && argc == 1) || g_variant_dict_contains (dict, "greeter")) { present_greeter_with_surface (NULL, NULL, addin); return; } /* * If the --clone=URI option was provided, switch the greeter to the * clone surface and begin cloning. */ if (dict != NULL && g_variant_dict_lookup (dict, "clone", "&s", &clone_uri)) { IdeGreeterWorkspace *workspace; IdeWorkbench *workbench; IdeSurface *surface; workbench = ide_workbench_new (); ide_application_add_workbench (self->application, workbench); workspace = ide_greeter_workspace_new (self->application); ide_workbench_add_workspace (workbench, IDE_WORKSPACE (workspace)); surface = ide_workspace_get_surface_by_name (IDE_WORKSPACE (workspace), "clone"); ide_workspace_set_visible_surface (IDE_WORKSPACE (workspace), surface); if (IDE_IS_CLONE_SURFACE (surface)) ide_clone_surface_set_uri (IDE_CLONE_SURFACE (surface), clone_uri); ide_workbench_focus_workspace (workbench, IDE_WORKSPACE (workspace)); } }
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); }
static gint gedit_app_command_line (GApplication *application, GApplicationCommandLine *cl) { GeditAppPrivate *priv; GVariantDict *options; const gchar *encoding_charset; const gchar **remaining_args; priv = gedit_app_get_instance_private (GEDIT_APP (application)); options = g_application_command_line_get_options_dict (cl); g_variant_dict_lookup (options, "new-window", "b", &priv->new_window); g_variant_dict_lookup (options, "new-document", "b", &priv->new_document); g_variant_dict_lookup (options, "geometry", "s", &priv->geometry); if (g_variant_dict_contains (options, "wait")) { priv->command_line = cl; } if (g_variant_dict_lookup (options, "encoding", "&s", &encoding_charset)) { priv->encoding = gtk_source_encoding_get_from_charset (encoding_charset); if (priv->encoding == NULL) { g_application_command_line_printerr (cl, _("%s: invalid encoding."), encoding_charset); } } /* Parse filenames */ if (g_variant_dict_lookup (options, G_OPTION_REMAINING, "^a&ay", &remaining_args)) { gint i; for (i = 0; remaining_args[i]; i++) { if (*remaining_args[i] == '+') { if (*(remaining_args[i] + 1) == '\0') { /* goto the last line of the document */ priv->line_position = G_MAXINT; priv->column_position = 0; } else { get_line_column_position (remaining_args[i] + 1, &priv->line_position, &priv->column_position); } } else if (*remaining_args[i] == '-' && *(remaining_args[i] + 1) == '\0') { priv->stdin_stream = g_application_command_line_get_stdin (cl); } else { GFile *file; file = g_application_command_line_create_file_for_arg (cl, remaining_args[i]); priv->file_list = g_slist_prepend (priv->file_list, file); } } priv->file_list = g_slist_reverse (priv->file_list); g_free (remaining_args); } g_application_activate (application); clear_options (GEDIT_APP (application)); return 0; }