[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
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [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
- Date: Thu, 14 Jul 2022 07:02:50 +0000 (UTC)
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]