mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-16 20:38:48 +02:00
gapplication: add a way to override the app-id
Some applications support running in a mode where they present themselves as a different application to the user (for example web browsers or terminals). To facilitate this, add an option --gapplication-app-id which allows users to override an application's id from desktop files or similar. Applications need to opt-in to this by setting the G_APPLICATION_CAN_OVERRIDE_APP_ID flag. https://bugzilla.gnome.org/show_bug.cgi?id=743933
This commit is contained in:
parent
15dea440c4
commit
b32f8ba19b
@ -474,8 +474,10 @@ g_application_parse_command_line (GApplication *application,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
gboolean become_service = FALSE;
|
gboolean become_service = FALSE;
|
||||||
|
gchar *app_id = NULL;
|
||||||
GVariantDict *dict = NULL;
|
GVariantDict *dict = NULL;
|
||||||
GOptionContext *context;
|
GOptionContext *context;
|
||||||
|
GOptionGroup *gapplication_group;
|
||||||
|
|
||||||
/* Due to the memory management of GOptionGroup we can only parse
|
/* Due to the memory management of GOptionGroup we can only parse
|
||||||
* options once. That's because once you add a group to the
|
* options once. That's because once you add a group to the
|
||||||
@ -487,6 +489,12 @@ g_application_parse_command_line (GApplication *application,
|
|||||||
|
|
||||||
context = g_option_context_new (NULL);
|
context = g_option_context_new (NULL);
|
||||||
|
|
||||||
|
gapplication_group = g_option_group_new ("gapplication",
|
||||||
|
_("GApplication options"), _("Show GApplication options"),
|
||||||
|
NULL, NULL);
|
||||||
|
g_option_group_set_translation_domain (gapplication_group, GETTEXT_PACKAGE);
|
||||||
|
g_option_context_add_group (context, gapplication_group);
|
||||||
|
|
||||||
/* If the application has not registered local options and it has
|
/* If the application has not registered local options and it has
|
||||||
* G_APPLICATION_HANDLES_COMMAND_LINE then we have to assume that
|
* G_APPLICATION_HANDLES_COMMAND_LINE then we have to assume that
|
||||||
* their primary instance commandline handler may want to deal with
|
* their primary instance commandline handler may want to deal with
|
||||||
@ -525,20 +533,25 @@ g_application_parse_command_line (GApplication *application,
|
|||||||
*/
|
*/
|
||||||
if ((application->priv->flags & (G_APPLICATION_IS_SERVICE | G_APPLICATION_IS_LAUNCHER)) == 0)
|
if ((application->priv->flags & (G_APPLICATION_IS_SERVICE | G_APPLICATION_IS_LAUNCHER)) == 0)
|
||||||
{
|
{
|
||||||
GOptionGroup *option_group;
|
|
||||||
GOptionEntry entries[] = {
|
GOptionEntry entries[] = {
|
||||||
{ "gapplication-service", '\0', 0, G_OPTION_ARG_NONE, &become_service,
|
{ "gapplication-service", '\0', 0, G_OPTION_ARG_NONE, &become_service,
|
||||||
N_("Enter GApplication service mode (use from D-Bus service files)") },
|
N_("Enter GApplication service mode (use from D-Bus service files)") },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
option_group = g_option_group_new ("gapplication",
|
g_option_group_add_entries (gapplication_group, entries);
|
||||||
_("GApplication options"), _("Show GApplication options"),
|
}
|
||||||
NULL, NULL);
|
|
||||||
g_option_group_set_translation_domain (option_group, GETTEXT_PACKAGE);
|
|
||||||
g_option_group_add_entries (option_group, entries);
|
|
||||||
|
|
||||||
g_option_context_add_group (context, option_group);
|
/* Allow overriding the ID if the application allows it */
|
||||||
|
if (application->priv->flags & G_APPLICATION_CAN_OVERRIDE_APP_ID)
|
||||||
|
{
|
||||||
|
GOptionEntry entries[] = {
|
||||||
|
{ "gapplication-app-id", '\0', 0, G_OPTION_ARG_STRING, &app_id,
|
||||||
|
N_("Override the application's ID") },
|
||||||
|
{ NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
g_option_group_add_entries (gapplication_group, entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we parse... */
|
/* Now we parse... */
|
||||||
@ -549,6 +562,10 @@ g_application_parse_command_line (GApplication *application,
|
|||||||
if (become_service)
|
if (become_service)
|
||||||
application->priv->flags |= G_APPLICATION_IS_SERVICE;
|
application->priv->flags |= G_APPLICATION_IS_SERVICE;
|
||||||
|
|
||||||
|
/* Check for --gapplication-app-id */
|
||||||
|
if (app_id)
|
||||||
|
g_application_set_application_id (application, app_id);
|
||||||
|
|
||||||
dict = g_variant_dict_new (NULL);
|
dict = g_variant_dict_new (NULL);
|
||||||
if (application->priv->packed_options)
|
if (application->priv->packed_options)
|
||||||
{
|
{
|
||||||
@ -562,6 +579,7 @@ out:
|
|||||||
application->priv->options_parsed = TRUE;
|
application->priv->options_parsed = TRUE;
|
||||||
|
|
||||||
g_option_context_free (context);
|
g_option_context_free (context);
|
||||||
|
g_free (app_id);
|
||||||
|
|
||||||
return dict;
|
return dict;
|
||||||
}
|
}
|
||||||
|
@ -1464,6 +1464,9 @@ typedef enum
|
|||||||
* owner of the application ID nor does it check if an existing
|
* owner of the application ID nor does it check if an existing
|
||||||
* owner already exists. Everything occurs in the local process.
|
* owner already exists. Everything occurs in the local process.
|
||||||
* Since: 2.30.
|
* Since: 2.30.
|
||||||
|
* @G_APPLICATION_CAN_OVERRIDE_APP_ID: Allow users to override the
|
||||||
|
* application ID from the command line with `--gapplication-app-id`.
|
||||||
|
* Since: 2.48
|
||||||
*
|
*
|
||||||
* Flags used to define the behaviour of a #GApplication.
|
* Flags used to define the behaviour of a #GApplication.
|
||||||
*
|
*
|
||||||
@ -1479,7 +1482,9 @@ typedef enum
|
|||||||
G_APPLICATION_HANDLES_COMMAND_LINE = (1 << 3),
|
G_APPLICATION_HANDLES_COMMAND_LINE = (1 << 3),
|
||||||
G_APPLICATION_SEND_ENVIRONMENT = (1 << 4),
|
G_APPLICATION_SEND_ENVIRONMENT = (1 << 4),
|
||||||
|
|
||||||
G_APPLICATION_NON_UNIQUE = (1 << 5)
|
G_APPLICATION_NON_UNIQUE = (1 << 5),
|
||||||
|
|
||||||
|
G_APPLICATION_CAN_OVERRIDE_APP_ID = (1 << 6)
|
||||||
} GApplicationFlags;
|
} GApplicationFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user