[gnome-software/135-restart-and-install-update-button-does-not-trigger-reboot-when-using-lxde] gs-common: Replace g_bus_get_sync() with its async variants



commit 84b608736c9dc1d65f994cfecddc8dc9cb053aa0
Author: Milan Crha <mcrha redhat com>
Date:   Thu Jul 14 09:02:14 2022 +0200

    gs-common: Replace g_bus_get_sync() with its async variants

 src/gs-common.c | 252 +++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 150 insertions(+), 102 deletions(-)
---
diff --git a/src/gs-common.c b/src/gs-common.c
index 7196164ca..45693c456 100644
--- a/src/gs-common.c
+++ b/src/gs-common.c
@@ -929,6 +929,38 @@ gs_utils_invoke_reboot_ready3_cb (GObject *source_object,
        }
 }
 
+static void
+gs_utils_invoke_reboot_ready2_got_session_bus_cb (GObject *source_object,
+                                                 GAsyncResult *result,
+                                                 gpointer user_data)
+{
+       g_autoptr(GTask) task = user_data;
+       g_autoptr(GDBusConnection) bus = NULL;
+       g_autoptr(GError) local_error = NULL;
+       GCancellable *cancellable;
+
+       bus = g_bus_get_finish (result, &local_error);
+       if (bus == NULL) {
+               g_dbus_error_strip_remote_error (local_error);
+               g_prefix_error_literal (&local_error, "Failed to get D-Bus session bus: ");
+               g_task_return_error (task, g_steal_pointer (&local_error));
+               return;
+       }
+
+       cancellable = g_task_get_cancellable (task);
+
+       g_task_set_task_data (task, (gpointer) "org.gnome.SessionManager.Reboot", NULL);
+       g_dbus_connection_call (bus,
+                               "org.gnome.SessionManager",
+                               "/org/gnome/SessionManager",
+                               "org.gnome.SessionManager",
+                               "Reboot",
+                               NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+                               G_MAXINT, cancellable,
+                               gs_utils_invoke_reboot_ready3_cb,
+                               g_steal_pointer (&task));
+}
+
 static void
 gs_utils_invoke_reboot_ready2_cb (GObject *source_object,
                                  GAsyncResult *result,
@@ -959,14 +991,90 @@ gs_utils_invoke_reboot_ready2_cb (GObject *source_object,
 
                cancellable = g_task_get_cancellable (task);
 
-               bus = g_bus_get_sync (G_BUS_TYPE_SESSION, cancellable, &local_error);
-               if (bus == NULL) {
-                       g_dbus_error_strip_remote_error (local_error);
-                       g_prefix_error_literal (&local_error, "Failed to get D-Bus session bus: ");
-                       g_task_return_error (task, g_steal_pointer (&local_error));
-                       return;
+               g_bus_get (G_BUS_TYPE_SESSION, cancellable,
+                          gs_utils_invoke_reboot_ready2_got_session_bus_cb,
+                          g_steal_pointer (&task));
+       }
+}
+
+static void
+gs_utils_invoke_reboot_ready1_got_session_bus_cb (GObject *source_object,
+                                                 GAsyncResult *result,
+                                                 gpointer user_data)
+{
+       g_autoptr(GTask) task = user_data;
+       g_autoptr(GDBusConnection) bus = NULL;
+       g_autoptr(GError) local_error = NULL;
+       GCancellable *cancellable;
+       const gchar *xdg_desktop;
+       gboolean call_session_manager = FALSE;
+
+       bus = g_bus_get_finish (result, &local_error);
+       if (bus == NULL) {
+               g_dbus_error_strip_remote_error (local_error);
+               g_prefix_error_literal (&local_error, "Failed to get D-Bus session bus: ");
+               g_task_return_error (task, g_steal_pointer (&local_error));
+               return;
+       }
+
+       cancellable = g_task_get_cancellable (task);
+
+       xdg_desktop = g_getenv ("XDG_CURRENT_DESKTOP");
+       if (xdg_desktop != NULL) {
+               if (strstr (xdg_desktop, "KDE")) {
+                       g_task_set_task_data (task, (gpointer) "org.kde.Shutdown.logoutAndReboot", NULL);
+                       g_dbus_connection_call (bus,
+                                               "org.kde.Shutdown",
+                                               "/Shutdown",
+                                               "org.kde.Shutdown",
+                                               "logoutAndReboot",
+                                               NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+                                               G_MAXINT, cancellable,
+                                               gs_utils_invoke_reboot_ready2_cb,
+                                               g_steal_pointer (&task));
+               } else if (strstr (xdg_desktop, "LXDE")) {
+                       g_task_set_task_data (task, (gpointer) "org.lxde.SessionManager.RequestReboot", NULL);
+                       g_dbus_connection_call (bus,
+                                               "org.lxde.SessionManager",
+                                               "/org/lxde/SessionManager",
+                                               "org.lxde.SessionManager",
+                                               "RequestReboot",
+                                               NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+                                               G_MAXINT, cancellable,
+                                               gs_utils_invoke_reboot_ready2_cb,
+                                               g_steal_pointer (&task));
+               } else if (strstr (xdg_desktop, "MATE")) {
+                       g_task_set_task_data (task, (gpointer) "org.gnome.SessionManager.RequestReboot", 
NULL);
+                       g_dbus_connection_call (bus,
+                                               "org.gnome.SessionManager",
+                                               "/org/gnome/SessionManager",
+                                               "org.gnome.SessionManager",
+                                               "RequestReboot",
+                                               NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
+                                               G_MAXINT, cancellable,
+                                               gs_utils_invoke_reboot_ready2_cb,
+                                               g_steal_pointer (&task));
+               } else if (strstr (xdg_desktop, "XFCE")) {
+                       g_task_set_task_data (task, (gpointer) "org.xfce.Session.Manager.Restart", NULL);
+                       g_dbus_connection_call (bus,
+                                               "org.xfce.SessionManager",
+                                               "/org/xfce/SessionManager",
+                                               "org.xfce.Session.Manager",
+                                               "Restart",
+                                               g_variant_new ("(b)", TRUE), /* allow_save */
+                                               NULL, G_DBUS_CALL_FLAGS_NONE,
+                                               G_MAXINT, cancellable,
+                                               gs_utils_invoke_reboot_ready2_cb,
+                                               g_steal_pointer (&task));
+               } else {
+                       /* Let the "GNOME" and "X-Cinnamon" be the default */
+                       call_session_manager = TRUE;
                }
+       } else {
+               call_session_manager = TRUE;
+       }
 
+       if (call_session_manager) {
                g_task_set_task_data (task, (gpointer) "org.gnome.SessionManager.Reboot", NULL);
                g_dbus_connection_call (bus,
                                        "org.gnome.SessionManager",
@@ -993,11 +1101,8 @@ gs_utils_invoke_reboot_ready1_cb (GObject *source_object,
        if (ret_val != NULL) {
                g_task_return_boolean (task, TRUE);
        } else {
-               g_autoptr(GDBusConnection) bus = NULL;
                GCancellable *cancellable;
                const gchar *method_name = g_task_get_task_data (task);
-               const gchar *xdg_desktop;
-               gboolean call_session_manager = FALSE;
 
                g_dbus_error_strip_remote_error (local_error);
                g_prefix_error (&local_error, "Failed to call %s: ", method_name);
@@ -1012,82 +1117,42 @@ gs_utils_invoke_reboot_ready1_cb (GObject *source_object,
 
                cancellable = g_task_get_cancellable (task);
 
-               bus = g_bus_get_sync (G_BUS_TYPE_SESSION, cancellable, &local_error);
-               if (bus == NULL) {
-                       g_dbus_error_strip_remote_error (local_error);
-                       g_prefix_error_literal (&local_error, "Failed to get D-Bus session bus: ");
-                       g_task_return_error (task, g_steal_pointer (&local_error));
-                       return;
-               }
+               g_bus_get (G_BUS_TYPE_SESSION, cancellable,
+                          gs_utils_invoke_reboot_ready1_got_session_bus_cb,
+                          g_steal_pointer (&task));
+       }
+}
 
-               xdg_desktop = g_getenv ("XDG_CURRENT_DESKTOP");
-               if (xdg_desktop != NULL) {
-                       if (strstr (xdg_desktop, "KDE")) {
-                               g_task_set_task_data (task, (gpointer) "org.kde.Shutdown.logoutAndReboot", 
NULL);
-                               g_dbus_connection_call (bus,
-                                                       "org.kde.Shutdown",
-                                                       "/Shutdown",
-                                                       "org.kde.Shutdown",
-                                                       "logoutAndReboot",
-                                                       NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
-                                                       G_MAXINT, cancellable,
-                                                       gs_utils_invoke_reboot_ready2_cb,
-                                                       g_steal_pointer (&task));
-                       } else if (strstr (xdg_desktop, "LXDE")) {
-                               g_task_set_task_data (task, (gpointer) 
"org.lxde.SessionManager.RequestReboot", NULL);
-                               g_dbus_connection_call (bus,
-                                                       "org.lxde.SessionManager",
-                                                       "/org/lxde/SessionManager",
-                                                       "org.lxde.SessionManager",
-                                                       "RequestReboot",
-                                                       NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
-                                                       G_MAXINT, cancellable,
-                                                       gs_utils_invoke_reboot_ready2_cb,
-                                                       g_steal_pointer (&task));
-                       } else if (strstr (xdg_desktop, "MATE")) {
-                               g_task_set_task_data (task, (gpointer) 
"org.gnome.SessionManager.RequestReboot", NULL);
-                               g_dbus_connection_call (bus,
-                                                       "org.gnome.SessionManager",
-                                                       "/org/gnome/SessionManager",
-                                                       "org.gnome.SessionManager",
-                                                       "RequestReboot",
-                                                       NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
-                                                       G_MAXINT, cancellable,
-                                                       gs_utils_invoke_reboot_ready2_cb,
-                                                       g_steal_pointer (&task));
-                       } else if (strstr (xdg_desktop, "XFCE")) {
-                               g_task_set_task_data (task, (gpointer) "org.xfce.Session.Manager.Restart", 
NULL);
-                               g_dbus_connection_call (bus,
-                                                       "org.xfce.SessionManager",
-                                                       "/org/xfce/SessionManager",
-                                                       "org.xfce.Session.Manager",
-                                                       "Restart",
-                                                       g_variant_new ("(b)", TRUE), /* allow_save */
-                                                       NULL, G_DBUS_CALL_FLAGS_NONE,
-                                                       G_MAXINT, cancellable,
-                                                       gs_utils_invoke_reboot_ready2_cb,
-                                                       g_steal_pointer (&task));
-                       } else {
-                               /* Let the "GNOME" and "X-Cinnamon" be the default */
-                               call_session_manager = TRUE;
-                       }
-               } else {
-                       call_session_manager = TRUE;
-               }
+static void
+gs_utils_invoke_reboot_got_system_bus_cb (GObject *source_object,
+                                         GAsyncResult *result,
+                                         gpointer user_data)
+{
+       g_autoptr(GTask) task = user_data;
+       g_autoptr(GDBusConnection) bus = NULL;
+       g_autoptr(GError) local_error = NULL;
+       GCancellable *cancellable;
 
-               if (call_session_manager) {
-                       g_task_set_task_data (task, (gpointer) "org.gnome.SessionManager.Reboot", NULL);
-                       g_dbus_connection_call (bus,
-                                               "org.gnome.SessionManager",
-                                               "/org/gnome/SessionManager",
-                                               "org.gnome.SessionManager",
-                                               "Reboot",
-                                               NULL, NULL, G_DBUS_CALL_FLAGS_NONE,
-                                               G_MAXINT, cancellable,
-                                               gs_utils_invoke_reboot_ready3_cb,
-                                               g_steal_pointer (&task));
-               }
+       bus = g_bus_get_finish (result, &local_error);
+       if (bus == NULL) {
+               g_dbus_error_strip_remote_error (local_error);
+               g_prefix_error_literal (&local_error, "Failed to get D-Bus system bus: ");
+               g_task_return_error (task, g_steal_pointer (&local_error));
+               return;
        }
+
+       cancellable = g_task_get_cancellable (task);
+
+       g_dbus_connection_call (bus,
+                               "org.freedesktop.login1",
+                               "/org/freedesktop/login1",
+                               "org.freedesktop.login1.Manager",
+                               "Reboot",
+                               g_variant_new ("(b)", TRUE), /* interactive */
+                               NULL, G_DBUS_CALL_FLAGS_NONE,
+                               G_MAXINT, cancellable,
+                               gs_utils_invoke_reboot_ready1_cb,
+                               g_steal_pointer (&task));
 }
 
 /**
@@ -1109,9 +1174,7 @@ gs_utils_invoke_reboot_async (GCancellable *cancellable,
                              GAsyncReadyCallback ready_callback,
                              gpointer user_data)
 {
-       g_autoptr(GDBusConnection) bus = NULL;
        g_autoptr(GTask) task = NULL;
-       g_autoptr(GError) local_error = NULL;
 
        if (!ready_callback)
                ready_callback = gs_utils_reboot_call_done_cb;
@@ -1120,24 +1183,9 @@ gs_utils_invoke_reboot_async (GCancellable *cancellable,
        g_task_set_source_tag (task, gs_utils_invoke_reboot_async);
        g_task_set_task_data (task, (gpointer) "org.freedesktop.login1.Manager.Reboot", NULL);
 
-       bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, cancellable, &local_error);
-       if (bus == NULL) {
-               g_dbus_error_strip_remote_error (local_error);
-               g_prefix_error_literal (&local_error, "Failed to get D-Bus system bus: ");
-               g_task_return_error (task, g_steal_pointer (&local_error));
-               return;
-       }
-
-       g_dbus_connection_call (bus,
-                               "org.freedesktop.login1",
-                               "/org/freedesktop/login1",
-                               "org.freedesktop.login1.Manager",
-                               "Reboot",
-                               g_variant_new ("(b)", TRUE), /* interactive */
-                               NULL, G_DBUS_CALL_FLAGS_NONE,
-                               G_MAXINT, cancellable,
-                               gs_utils_invoke_reboot_ready1_cb,
-                               g_steal_pointer (&task));
+       g_bus_get (G_BUS_TYPE_SYSTEM, cancellable,
+                  gs_utils_invoke_reboot_got_system_bus_cb,
+                  g_steal_pointer (&task));
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]