mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-24 14:36:13 +01:00
GApplication: Add g_application_add_main_option
This function adds a single main option entry to be handeled by GApplication. The option entry has it arg_data field set to NULL and will be added to the applications packed_options. The rationale for this is that bindings will be able to add command line options even when they can't use the un-boxed struct GOptionEntry. https://bugzilla.gnome.org/show_bug.cgi?id=727455
This commit is contained in:
parent
4f775b7b7f
commit
bf9c862504
@ -3040,6 +3040,7 @@ g_application_withdraw_notification
|
||||
<SUBSECTION>
|
||||
g_application_run
|
||||
g_application_add_main_option_entries
|
||||
g_application_add_main_option
|
||||
g_application_add_option_group
|
||||
<SUBSECTION>
|
||||
g_application_set_default
|
||||
|
@ -239,6 +239,9 @@ struct _GApplicationPrivate
|
||||
GSList *option_groups;
|
||||
GHashTable *packed_options;
|
||||
gboolean options_parsed;
|
||||
|
||||
/* Allocated option strings, from g_application_add_main_option() */
|
||||
GSList *option_strings;
|
||||
};
|
||||
|
||||
enum
|
||||
@ -664,6 +667,64 @@ g_application_add_main_option_entries (GApplication *application,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* g_application_add_main_option:
|
||||
* @application: the #GApplication
|
||||
* @long_name: the long name of an option used to specify it in a commandline
|
||||
* @short_name: the short name of an option
|
||||
* @flags: flags from #GOptionFlags
|
||||
* @arg: the type of the option, as a #GOptionArg
|
||||
* @description: the description for the option in `--help` output
|
||||
* @arg_description: (nullable): the placeholder to use for the extra argument
|
||||
* parsed by the option in `--help` output
|
||||
*
|
||||
* Add an option to be handled by @application.
|
||||
*
|
||||
* Calling this function is the equivalent of calling
|
||||
* g_application_add_main_option_entries() with a single #GOptionEntry
|
||||
* that has its arg_data member set to %NULL.
|
||||
*
|
||||
* The parsed arguments will be packed into a #GVariantDict which
|
||||
* is passed to #GApplication::handle-local-options. If
|
||||
* %G_APPLICATION_HANDLES_COMMAND_LINE is set, then it will also
|
||||
* be sent to the primary instance. See
|
||||
* g_application_add_main_option_entries() for more details.
|
||||
*
|
||||
* See #GOptionEntry for more documentation of the arguments.
|
||||
*
|
||||
* Since: 2.42
|
||||
**/
|
||||
void
|
||||
g_application_add_main_option (GApplication *application,
|
||||
const char *long_name,
|
||||
char short_name,
|
||||
gint flags,
|
||||
GOptionArg arg,
|
||||
const char *description,
|
||||
const char *arg_description)
|
||||
{
|
||||
gchar *dup_string;
|
||||
GOptionEntry my_entry[2] = {
|
||||
{ NULL, short_name, flags, arg, NULL, NULL, NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
g_return_if_fail (G_IS_APPLICATION (application));
|
||||
g_return_if_fail (long_name != NULL);
|
||||
g_return_if_fail (description != NULL);
|
||||
|
||||
my_entry[0].long_name = dup_string = g_strdup (long_name);
|
||||
application->priv->option_strings = g_slist_prepend (application->priv->option_strings, dup_string);
|
||||
|
||||
my_entry[0].description = dup_string = g_strdup (description);
|
||||
application->priv->option_strings = g_slist_prepend (application->priv->option_strings, dup_string);
|
||||
|
||||
my_entry[0].arg_description = dup_string = g_strdup (arg_description);
|
||||
application->priv->option_strings = g_slist_prepend (application->priv->option_strings, dup_string);
|
||||
|
||||
g_application_add_main_option_entries (application, my_entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_application_add_option_group:
|
||||
* @application: the #GApplication
|
||||
@ -1140,8 +1201,10 @@ g_application_finalize (GObject *object)
|
||||
if (application->priv->main_options)
|
||||
g_option_group_free (application->priv->main_options);
|
||||
if (application->priv->packed_options)
|
||||
{
|
||||
g_slist_free_full (application->priv->option_strings, g_free);
|
||||
g_hash_table_unref (application->priv->packed_options);
|
||||
|
||||
}
|
||||
if (application->priv->impl)
|
||||
g_application_impl_destroy (application->priv->impl);
|
||||
g_free (application->priv->id);
|
||||
|
@ -168,6 +168,15 @@ void g_application_set_action_group (GApplic
|
||||
GLIB_AVAILABLE_IN_2_40
|
||||
void g_application_add_main_option_entries (GApplication *application,
|
||||
const GOptionEntry *entries);
|
||||
|
||||
GLIB_AVAILABLE_IN_2_42
|
||||
void g_application_add_main_option (GApplication *application,
|
||||
const char *long_name,
|
||||
char short_name,
|
||||
gint flags,
|
||||
GOptionArg arg,
|
||||
const char *description,
|
||||
const char *arg_description);
|
||||
GLIB_AVAILABLE_IN_2_40
|
||||
void g_application_add_option_group (GApplication *application,
|
||||
GOptionGroup *group);
|
||||
|
Loading…
Reference in New Issue
Block a user