From 8743121f4d594bcb3a9a2c294560fcdb081dd43a Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 27 May 2019 19:52:15 -0300 Subject: [PATCH] source-dialog: Move Online Accounts panel spawn to utils So that it can be reused by other files. --- src/gui/gcal-source-dialog.c | 76 ++++-------------------------------- src/utils/gcal-utils.c | 55 ++++++++++++++++++++++++++ src/utils/gcal-utils.h | 5 +++ 3 files changed, 67 insertions(+), 69 deletions(-) diff --git a/src/gui/gcal-source-dialog.c b/src/gui/gcal-source-dialog.c index cc90f5ea..8fac4439 100644 --- a/src/gui/gcal-source-dialog.c +++ b/src/gui/gcal-source-dialog.c @@ -191,10 +191,6 @@ static void stack_visible_child_name_changed (GObject *ob static void settings_button_clicked (GtkWidget *button, gpointer user_data); - -static void spawn_goa_with_args (const gchar *action, - const gchar *arg); - static gboolean pulse_web_entry (GcalSourceDialog *dialog); static void url_entry_text_changed (GObject *object, @@ -571,7 +567,8 @@ description_label_link_activated (GtkWidget *widget, gchar *uri, gpointer user_data) { - spawn_goa_with_args (NULL, NULL); + GApplication *app = g_application_get_default (); + gcal_utils_launch_online_accounts_panel (g_application_get_dbus_connection (app), NULL, NULL); return TRUE; } @@ -630,69 +627,6 @@ name_entry_text_changed (GObject *object, e_source_set_display_name (self->source, gtk_entry_get_text (GTK_ENTRY (self->name_entry))); } -static GVariant* -build_dbus_parameters (const gchar *action, - const gchar *arg) -{ - GVariantBuilder builder; - GVariant *array[1], *params2[3]; - - g_variant_builder_init (&builder, G_VARIANT_TYPE ("av")); - - if (!action && !arg) - { - g_variant_builder_add (&builder, "v", g_variant_new_string ("")); - } - else - { - if (action) - g_variant_builder_add (&builder, "v", g_variant_new_string (action)); - - if (arg) - g_variant_builder_add (&builder, "v", g_variant_new_string (arg)); - } - - array[0] = g_variant_new ("v", g_variant_new ("(sav)", "online-accounts", &builder)); - - params2[0] = g_variant_new_string ("launch-panel"); - params2[1] = g_variant_new_array (G_VARIANT_TYPE ("v"), array, 1); - params2[2] = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0); - - return g_variant_new_tuple (params2, 3); -} - -static void -spawn_goa_with_args (const gchar *action, - const gchar *arg) -{ - GDBusProxy *proxy; - - proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.gnome.ControlCenter", - "/org/gnome/ControlCenter", - "org.gtk.Actions", - NULL, - NULL); - - if (!proxy) - { - g_warning ("Couldn't open Online Accounts panel"); - return; - } - - g_dbus_proxy_call_sync (proxy, - "Activate", - build_dbus_parameters (action, arg), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - NULL); - - g_clear_object (&proxy); -} - static void response_signal (GtkDialog *dialog, gint response_id, @@ -776,13 +710,17 @@ settings_button_clicked (GtkWidget *button, gpointer user_data) { GcalSourceDialog *self; + GApplication *app; const gchar *account_id; self = GCAL_SOURCE_DIALOG (user_data); /* Selects the account to open */ account_id = g_object_get_data (G_OBJECT (self->account_label), "account-id"); - spawn_goa_with_args ((gchar*) account_id, NULL); + app = g_application_get_default (); + gcal_utils_launch_online_accounts_panel (g_application_get_dbus_connection (app), + (gchar*) account_id, + NULL); } static void diff --git a/src/utils/gcal-utils.c b/src/utils/gcal-utils.c index 855ac459..495efc0a 100644 --- a/src/utils/gcal-utils.c +++ b/src/utils/gcal-utils.c @@ -1188,3 +1188,58 @@ gcal_translate_child_window_position (GtkWidget *target, return TRUE; } + +void +gcal_utils_launch_online_accounts_panel (GDBusConnection *connection, + const gchar *action, + const gchar *arg) +{ + g_autoptr (GDBusProxy) proxy = NULL; + GVariantBuilder builder; + GVariant *params[3]; + GVariant *array[1]; + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("av")); + + if (!action && !arg) + { + g_variant_builder_add (&builder, "v", g_variant_new_string ("")); + } + else + { + if (action) + g_variant_builder_add (&builder, "v", g_variant_new_string (action)); + + if (arg) + g_variant_builder_add (&builder, "v", g_variant_new_string (arg)); + } + + array[0] = g_variant_new ("v", g_variant_new ("(sav)", "online-accounts", &builder)); + + params[0] = g_variant_new_string ("launch-panel"); + params[1] = g_variant_new_array (G_VARIANT_TYPE ("v"), array, 1); + params[2] = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0); + + proxy = g_dbus_proxy_new_sync (connection, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + "org.gnome.ControlCenter", + "/org/gnome/ControlCenter", + "org.gtk.Actions", + NULL, + NULL); + + if (!proxy) + { + g_warning ("Couldn't open Online Accounts panel"); + return; + } + + g_dbus_proxy_call_sync (proxy, + "Activate", + g_variant_new_tuple (params, 3), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + NULL); +} diff --git a/src/utils/gcal-utils.h b/src/utils/gcal-utils.h index 924fc6e8..9dd751e4 100644 --- a/src/utils/gcal-utils.h +++ b/src/utils/gcal-utils.h @@ -121,4 +121,9 @@ gboolean gcal_translate_child_window_position (GtkWidget gdouble src_y, gdouble *real_x, gdouble *real_y); + +void gcal_utils_launch_online_accounts_panel (GDBusConnection *connection, + const gchar *action, + const gchar *arg); + #endif /* __GCAL_UTILS_H__ */