mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2025-01-05 19:15:32 +00:00
application: Fix handling commandline arguments
handle_local_options() are supposed to be handled only in local instance, and not in remote instance.
This commit is contained in:
parent
ba451b4167
commit
47a7d58074
1 changed files with 66 additions and 55 deletions
|
@ -112,59 +112,6 @@ calls_application_dbus_unregister (GApplication *application,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static gint
|
|
||||||
handle_local_options (GApplication *application,
|
|
||||||
GVariantDict *options)
|
|
||||||
{
|
|
||||||
gboolean ok;
|
|
||||||
g_autoptr (GError) error = NULL;
|
|
||||||
const char *arg;
|
|
||||||
g_autoptr (GVariant) providers = NULL;
|
|
||||||
|
|
||||||
g_debug ("Registering application");
|
|
||||||
ok = g_application_register (application, NULL, &error);
|
|
||||||
if (!ok) {
|
|
||||||
g_error ("Error registering application: %s",
|
|
||||||
error->message);
|
|
||||||
}
|
|
||||||
|
|
||||||
ok = g_variant_dict_contains (options, "version");
|
|
||||||
if (ok) {
|
|
||||||
char * version = g_str_equal (VCS_TAG, "") ? PACKAGE_VERSION : VCS_TAG;
|
|
||||||
|
|
||||||
g_print ("%s %s\n", APP_DATA_NAME, version);
|
|
||||||
exit (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
providers = g_variant_dict_lookup_value (options, "provider", G_VARIANT_TYPE_STRING_ARRAY);
|
|
||||||
if (providers) {
|
|
||||||
g_action_group_activate_action (G_ACTION_GROUP (application),
|
|
||||||
"set-provider-names",
|
|
||||||
providers);
|
|
||||||
} else {
|
|
||||||
g_action_group_activate_action (G_ACTION_GROUP (application),
|
|
||||||
"set-default-providers",
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
ok = g_variant_dict_contains (options, "daemon");
|
|
||||||
if (ok) {
|
|
||||||
g_action_group_activate_action (G_ACTION_GROUP (application),
|
|
||||||
"set-daemon",
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
ok = g_variant_dict_lookup (options, "dial", "&s", &arg);
|
|
||||||
if (ok) {
|
|
||||||
g_action_group_activate_action (G_ACTION_GROUP (application),
|
|
||||||
"dial",
|
|
||||||
g_variant_new_string (arg));
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1; // Continue processing signal
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_provider_names_action (GSimpleAction *action,
|
set_provider_names_action (GSimpleAction *action,
|
||||||
GVariant *parameter,
|
GVariant *parameter,
|
||||||
|
@ -380,6 +327,20 @@ static const GActionEntry actions[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
calls_application_handle_local_options (GApplication *application,
|
||||||
|
GVariantDict *options)
|
||||||
|
{
|
||||||
|
if (g_variant_dict_contains (options, "version")) {
|
||||||
|
g_print ("%s %s\n", APP_DATA_NAME, *VCS_TAG ? VCS_TAG : PACKAGE_VERSION);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
startup (GApplication *application)
|
startup (GApplication *application)
|
||||||
{
|
{
|
||||||
|
@ -427,6 +388,55 @@ startup (GApplication *application)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
calls_application_command_line (GApplication *application,
|
||||||
|
GApplicationCommandLine *command_line)
|
||||||
|
{
|
||||||
|
CallsApplication *self = CALLS_APPLICATION (application);
|
||||||
|
GVariantDict *options;
|
||||||
|
const char *arg;
|
||||||
|
g_autoptr (GVariant) providers = NULL;
|
||||||
|
g_auto(GStrv) arguments = NULL;
|
||||||
|
gint argc;
|
||||||
|
|
||||||
|
options = g_application_command_line_get_options_dict (command_line);
|
||||||
|
|
||||||
|
providers = g_variant_dict_lookup_value (options, "provider", G_VARIANT_TYPE_STRING_ARRAY);
|
||||||
|
if (providers) {
|
||||||
|
g_action_group_activate_action (G_ACTION_GROUP (application),
|
||||||
|
"set-provider-names",
|
||||||
|
providers);
|
||||||
|
} else {
|
||||||
|
g_action_group_activate_action (G_ACTION_GROUP (application),
|
||||||
|
"set-default-providers",
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_variant_dict_contains (options, "daemon"))
|
||||||
|
g_action_group_activate_action (G_ACTION_GROUP (application),
|
||||||
|
"set-daemon", NULL);
|
||||||
|
|
||||||
|
if (g_variant_dict_lookup (options, "dial", "&s", &arg))
|
||||||
|
g_action_group_activate_action (G_ACTION_GROUP (application),
|
||||||
|
"dial", g_variant_new_string (arg));
|
||||||
|
|
||||||
|
arguments = g_application_command_line_get_arguments (command_line, &argc);
|
||||||
|
|
||||||
|
/* Keep only the first URI, if there are many */
|
||||||
|
for (guint i = 0; i < argc; i++)
|
||||||
|
if (g_str_has_prefix (arguments[i], "tel:") ||
|
||||||
|
g_str_has_prefix (arguments[i], "sip:") ||
|
||||||
|
g_str_has_prefix (arguments[i], "sips:")) {
|
||||||
|
g_free (self->uri);
|
||||||
|
self->uri = g_strdup (arguments[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_application_activate (application);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
notify_window_visible_cb (GtkWidget *window,
|
notify_window_visible_cb (GtkWidget *window,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
|
@ -634,8 +644,9 @@ calls_application_class_init (CallsApplicationClass *klass)
|
||||||
|
|
||||||
object_class->finalize = finalize;
|
object_class->finalize = finalize;
|
||||||
|
|
||||||
application_class->handle_local_options = handle_local_options;
|
application_class->handle_local_options = calls_application_handle_local_options;
|
||||||
application_class->startup = startup;
|
application_class->startup = startup;
|
||||||
|
application_class->command_line = calls_application_command_line;
|
||||||
application_class->activate = activate;
|
application_class->activate = activate;
|
||||||
application_class->open = app_open;
|
application_class->open = app_open;
|
||||||
application_class->dbus_register = calls_application_dbus_register;
|
application_class->dbus_register = calls_application_dbus_register;
|
||||||
|
@ -689,7 +700,7 @@ calls_application_new (void)
|
||||||
{
|
{
|
||||||
return g_object_new (CALLS_TYPE_APPLICATION,
|
return g_object_new (CALLS_TYPE_APPLICATION,
|
||||||
"application-id", APP_ID,
|
"application-id", APP_ID,
|
||||||
"flags", G_APPLICATION_HANDLES_OPEN,
|
"flags", G_APPLICATION_HANDLES_OPEN | G_APPLICATION_HANDLES_COMMAND_LINE,
|
||||||
"register-session", TRUE,
|
"register-session", TRUE,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue