1
0
Fork 0
mirror of https://gitlab.gnome.org/GNOME/calls.git synced 2024-07-02 15:09:31 +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:
Mohammed Sadiq 2021-02-25 14:36:27 +05:30 committed by Evangelos Ribeiro Tzaras
parent ba451b4167
commit 47a7d58074

View file

@ -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);
} }