Blame SOURCES/0018-manager-port-away-from-dbus-glib-to-GDBus.patch

d379a5
From 62a3cf703542e282f6c378cf633dd494b4cc786c Mon Sep 17 00:00:00 2001
5d36d8
From: Ray Strode <rstrode@redhat.com>
5d36d8
Date: Wed, 8 Mar 2017 16:36:44 -0500
5d36d8
Subject: [PATCH 18/19] manager: port away from dbus-glib to GDBus
5d36d8
5d36d8
---
d379a5
 capplet/gsm-properties-dialog.c | 52 +++++++++++++++++----------------
d379a5
 capplet/meson.build             |  3 +-
d379a5
 gnome-session/gsm-manager.c     | 16 +++++-----
d379a5
 gnome-session/gsm-manager.h     |  3 +-
d379a5
 meson.build                     |  1 -
d379a5
 tools/gnome-session-selector.c  | 48 ++++++++++++++++--------------
d379a5
 tools/meson.build               |  3 +-
d379a5
 7 files changed, 65 insertions(+), 61 deletions(-)
5d36d8
5d36d8
diff --git a/capplet/gsm-properties-dialog.c b/capplet/gsm-properties-dialog.c
5d36d8
index 51fa5106..04452c1a 100644
5d36d8
--- a/capplet/gsm-properties-dialog.c
5d36d8
+++ b/capplet/gsm-properties-dialog.c
5d36d8
@@ -1,66 +1,66 @@
5d36d8
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
5d36d8
  *
5d36d8
  * Copyright (C) 1999 Free Software Foundation, Inc.
5d36d8
  * Copyright (C) 2007 Vincent Untz.
5d36d8
  * Copyright (C) 2008 Lucas Rocha.
5d36d8
  * Copyright (C) 2008 William Jon McCann <jmccann@redhat.com>
5d36d8
  *
5d36d8
  * This program is free software; you can redistribute it and/or modify
5d36d8
  * it under the terms of the GNU General Public License as published by
5d36d8
  * the Free Software Foundation; either version 2 of the License, or
5d36d8
  * (at your option) any later version.
5d36d8
  *
5d36d8
  * This program is distributed in the hope that it will be useful,
5d36d8
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
5d36d8
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5d36d8
  * GNU General Public License for more details.
5d36d8
  *
5d36d8
  * You should have received a copy of the GNU General Public License
5d36d8
  * along with this program; if not, write to the Free Software
5d36d8
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
5d36d8
  *
5d36d8
  */
5d36d8
 
5d36d8
 #include "config.h"
5d36d8
 
5d36d8
 #include <glib.h>
5d36d8
 #include <glib/gi18n.h>
5d36d8
 #include <gtk/gtk.h>
5d36d8
 
5d36d8
+#include <gio/gio.h>
5d36d8
+
5d36d8
 #include "gsm-properties-dialog.h"
5d36d8
 #include "gsm-app-dialog.h"
5d36d8
 #include "gsm-util.h"
5d36d8
 #include "gsp-app.h"
5d36d8
 #include "gsp-app-manager.h"
5d36d8
-#include <dbus/dbus-glib.h>
5d36d8
-#include <dbus/dbus-glib-lowlevel.h>
5d36d8
 
5d36d8
 #define GSM_SERVICE_DBUS   "org.gnome.SessionManager"
5d36d8
 #define GSM_PATH_DBUS      "/org/gnome/SessionManager"
5d36d8
 #define GSM_INTERFACE_DBUS "org.gnome.SessionManager"
5d36d8
 
5d36d8
 #define GSM_PROPERTIES_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_PROPERTIES_DIALOG, GsmPropertiesDialogPrivate))
5d36d8
 
5d36d8
 #define GTKBUILDER_FILE "session-properties.ui"
5d36d8
 
5d36d8
 #define CAPPLET_TREEVIEW_WIDGET_NAME      "session_properties_treeview"
5d36d8
 #define CAPPLET_ADD_WIDGET_NAME           "session_properties_add_button"
5d36d8
 #define CAPPLET_DELETE_WIDGET_NAME        "session_properties_delete_button"
5d36d8
 #define CAPPLET_EDIT_WIDGET_NAME          "session_properties_edit_button"
5d36d8
 #define CAPPLET_SAVE_WIDGET_NAME          "session_properties_save_button"
5d36d8
 #define CAPPLET_SESSION_SAVED_WIDGET_NAME "session_properties_session_saved_label"
5d36d8
 #define CAPPLET_REMEMBER_WIDGET_NAME      "session_properties_remember_toggle"
5d36d8
 
5d36d8
 #define STARTUP_APP_ICON     "system-run"
5d36d8
 
5d36d8
 #define SPC_SETTINGS_SCHEMA          "org.gnome.SessionManager"
5d36d8
 #define SPC_SETTINGS_AUTOSAVE_KEY    "auto-save-session"
5d36d8
 
5d36d8
 struct GsmPropertiesDialogPrivate
5d36d8
 {
5d36d8
         GtkBuilder        *xml;
5d36d8
         GtkListStore      *list_store;
5d36d8
         GtkTreeModel      *tree_filter;
5d36d8
 
5d36d8
         GtkTreeView       *treeview;
5d36d8
         GtkWidget         *add_button;
5d36d8
@@ -454,101 +454,103 @@ on_edit_app_clicked (GtkWidget           *widget,
5d36d8
                 g_object_unref (app);
5d36d8
         }
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 on_row_activated (GtkTreeView         *tree_view,
5d36d8
                   GtkTreePath         *path,
5d36d8
                   GtkTreeViewColumn   *column,
5d36d8
                   GsmPropertiesDialog *dialog)
5d36d8
 {
5d36d8
         on_edit_app_clicked (NULL, dialog);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 session_saved_message (GsmPropertiesDialog *dialog,
5d36d8
                        const char *msg,
5d36d8
                        gboolean is_error)
5d36d8
 {
5d36d8
         GtkLabel *label;
5d36d8
         gchar *markup;
5d36d8
         label = GTK_LABEL (gtk_builder_get_object (dialog->priv->xml, CAPPLET_SESSION_SAVED_WIDGET_NAME));
5d36d8
         if (is_error)
5d36d8
                 markup = g_markup_printf_escaped ("%s", msg);
5d36d8
         else
5d36d8
                 markup = g_markup_escape_text (msg, -1);
5d36d8
         gtk_label_set_markup (label, markup);
5d36d8
         g_free (markup);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
-session_saved_cb (DBusGProxy *proxy,
5d36d8
-                  DBusGProxyCall *call_id,
5d36d8
-                  void *user_data)
5d36d8
+session_saved_cb (GDBusConnection *conn,
5d36d8
+                  GAsyncResult *result,
5d36d8
+                  gpointer user_data)
5d36d8
 {
5d36d8
-        gboolean res;
5d36d8
+        GVariant *reply;
5d36d8
         GsmPropertiesDialog *dialog = user_data;
5d36d8
+        GError *error = NULL;
5d36d8
 
5d36d8
-        res = dbus_g_proxy_end_call (proxy, call_id, NULL, G_TYPE_INVALID);
5d36d8
-        if (res)
5d36d8
+        reply = g_dbus_connection_call_finish (conn, result, &error);
5d36d8
+        if (error == NULL)
5d36d8
                 session_saved_message (dialog, _("Your session has been saved."), FALSE);
5d36d8
         else
5d36d8
                 session_saved_message (dialog, _("Failed to save session"), TRUE);
5d36d8
 
5d36d8
-        g_object_unref (proxy);
5d36d8
+        g_clear_error (&error);
5d36d8
+
5d36d8
+        g_variant_unref (reply);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 save_session_directly (GsmPropertiesDialog *dialog)
5d36d8
 {
5d36d8
-        DBusGConnection *conn;
5d36d8
-        DBusGProxy *proxy;
5d36d8
-        DBusGProxyCall *call;
5d36d8
+        GDBusConnection *conn;
5d36d8
 
5d36d8
-        conn = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
5d36d8
+        conn = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
5d36d8
         if (conn == NULL) {
5d36d8
                 session_saved_message (dialog, _("Could not connect to the session bus"), TRUE);
5d36d8
                 return;
5d36d8
         }
5d36d8
 
5d36d8
-        proxy = dbus_g_proxy_new_for_name (conn, GSM_SERVICE_DBUS, GSM_PATH_DBUS, GSM_INTERFACE_DBUS);
5d36d8
-        if (proxy == NULL) {
5d36d8
-                session_saved_message (dialog, _("Could not connect to the session manager"), TRUE);
5d36d8
-                return;
5d36d8
-        }
5d36d8
-
5d36d8
-        call = dbus_g_proxy_begin_call (proxy, "SaveSession", session_saved_cb, dialog, NULL, G_TYPE_INVALID);
5d36d8
-        if (call == NULL) {
5d36d8
-                session_saved_message (dialog, _("Failed to save session"), TRUE);
5d36d8
-                g_object_unref (proxy);
5d36d8
-                return;
5d36d8
-        }
5d36d8
+        g_dbus_connection_call (conn,
5d36d8
+                                GSM_SERVICE_DBUS,
5d36d8
+                                GSM_PATH_DBUS,
5d36d8
+                                GSM_INTERFACE_DBUS,
5d36d8
+                                "SaveSession",
5d36d8
+                                NULL,
5d36d8
+                                NULL,
5d36d8
+                                G_DBUS_CALL_FLAGS_NONE,
5d36d8
+                                -1,
5d36d8
+                                NULL,
5d36d8
+                                (GAsyncReadyCallback)
5d36d8
+                                session_saved_cb,
5d36d8
+                                dialog);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 save_session_from_selector (GsmPropertiesDialog *dialog,
5d36d8
                             const char          *program_path)
5d36d8
 {
5d36d8
         char *command_line = g_strdup_printf ("%s --action save", program_path);
5d36d8
 
5d36d8
         g_spawn_command_line_sync (command_line, NULL, NULL, NULL, NULL);
5d36d8
 
5d36d8
         g_free (command_line);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 on_save_session_clicked (GtkWidget           *widget,
5d36d8
                          GsmPropertiesDialog *dialog)
5d36d8
 {
5d36d8
         char *program_path;
5d36d8
 
5d36d8
         program_path = g_find_program_in_path ("gnome-session-selector");
5d36d8
 
5d36d8
         if (program_path != NULL) {
5d36d8
                 save_session_from_selector (dialog, program_path);
5d36d8
                 g_free (program_path);
5d36d8
         } else {
5d36d8
                 save_session_directly (dialog);
5d36d8
         }
5d36d8
 }
5d36d8
 
5d36d8
 static void
d379a5
diff --git a/capplet/meson.build b/capplet/meson.build
d379a5
index ae6cb6b9..8dad9c80 100644
d379a5
--- a/capplet/meson.build
d379a5
+++ b/capplet/meson.build
d379a5
@@ -1,37 +1,36 @@
d379a5
 install_data(
d379a5
   install_dir: session_bindir
5d36d8
 )
5d36d8
 
d379a5
 deps = session_deps + [
d379a5
   glib_dep,
d379a5
   gtk_dep,
d379a5
   x11_dep,
d379a5
   sm_dep,
d379a5
-  ice_dep,
d379a5
-  dbus_glib_dep
d379a5
+  ice_dep
d379a5
 ]
d379a5
 
d379a5
 cflags = [
d379a5
   '-DLOCALE_DIR="@0@"'.format(session_localedir),
d379a5
   '-DGTKBUILDER_DIR="@0@"'.format(session_pkgdatadir)
d379a5
 ]
d379a5
 
d379a5
 sources = files(
d379a5
   '../gnome-session/gsm-util.c',
d379a5
   'gsm-app-dialog.c',
d379a5
   'gsm-properties-dialog.c',
d379a5
   'gsp-app.c',
d379a5
   'gsp-app-manager.c',
d379a5
   'gsp-keyfile.c',
d379a5
   'main.c'
d379a5
 )
d379a5
 
d379a5
 executable(
d379a5
   'gnome-session-properties',
d379a5
   sources,
d379a5
   include_directories: [ top_inc, include_directories('../gnome-session') ],
d379a5
   dependencies: deps,
d379a5
   c_args: cflags,
d379a5
   install: true,
d379a5
   install_dir: session_bindir
5d36d8
 )
5d36d8
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
d379a5
index 325c6c46..f4a94d1a 100644
5d36d8
--- a/gnome-session/gsm-manager.c
5d36d8
+++ b/gnome-session/gsm-manager.c
244a5d
@@ -1210,78 +1210,78 @@ _client_request_save (GsmClient            *client,
5d36d8
 
5d36d8
         error = NULL;
5d36d8
         ret = gsm_client_request_save (client, data->flags, &error);
5d36d8
         if (ret) {
5d36d8
                 g_debug ("GsmManager: adding client to query clients: %s", gsm_client_peek_id (client));
5d36d8
                 data->manager->priv->query_clients = g_slist_prepend (data->manager->priv->query_clients,
5d36d8
                                                                       client);
5d36d8
         } else if (error) {
5d36d8
                 g_debug ("GsmManager: unable to query client: %s", error->message);
5d36d8
                 g_error_free (error);
5d36d8
         }
5d36d8
 
5d36d8
         return FALSE;
5d36d8
 }
5d36d8
 
5d36d8
 static gboolean
5d36d8
 _client_request_save_helper (const char           *id,
5d36d8
                              GsmClient            *client,
5d36d8
                              ClientEndSessionData *data)
5d36d8
 {
5d36d8
         return _client_request_save (client, data);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 fail_pending_save_invocations (GsmManager *manager,
5d36d8
                                GError     *error)
5d36d8
 {
5d36d8
         GSList *l;
5d36d8
 
5d36d8
         for (l = manager->priv->pending_save_invocations; l != NULL; l = l->next) {
5d36d8
-                DBusGMethodInvocation *context = l->data;
5d36d8
+                GDBusMethodInvocation *invocation = l->data;
5d36d8
 
5d36d8
-                dbus_g_method_return_error (context, error);
5d36d8
+                g_dbus_method_invocation_return_gerror (invocation, error);
5d36d8
         }
5d36d8
 
5d36d8
         g_slist_free (manager->priv->pending_save_invocations);
5d36d8
         manager->priv->pending_save_invocations = NULL;
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 finish_pending_save_invocations (GsmManager *manager)
5d36d8
 {
5d36d8
         GSList *l;
5d36d8
 
5d36d8
         for (l = manager->priv->pending_save_invocations; l != NULL; l = l->next) {
5d36d8
-                DBusGMethodInvocation *context = l->data;
5d36d8
+                GDBusMethodInvocation *invocation = l->data;
5d36d8
 
5d36d8
-                dbus_g_method_return (context);
5d36d8
+                g_dbus_method_invocation_return_value (invocation, NULL);
5d36d8
         }
5d36d8
 
5d36d8
         g_slist_free (manager->priv->pending_save_invocations);
5d36d8
         manager->priv->pending_save_invocations = NULL;
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 query_save_session_complete (GsmManager *manager)
5d36d8
 {
5d36d8
         GError *error = NULL;
5d36d8
 
5d36d8
         if (g_slist_length (manager->priv->next_query_clients) > 0) {
5d36d8
                 ClientEndSessionData data;
5d36d8
 
5d36d8
                 data.manager = manager;
5d36d8
                 data.flags = GSM_CLIENT_END_SESSION_FLAG_LAST;
5d36d8
 
5d36d8
                 g_slist_foreach (manager->priv->next_query_clients,
5d36d8
                                  (GFunc)_client_request_save,
5d36d8
                                  &data);
5d36d8
 
5d36d8
                 g_slist_free (manager->priv->next_query_clients);
5d36d8
                 manager->priv->next_query_clients = NULL;
5d36d8
 
5d36d8
                 return;
5d36d8
         }
5d36d8
 
5d36d8
         if (manager->priv->query_timeout_id > 0) {
5d36d8
                 g_source_remove (manager->priv->query_timeout_id);
5d36d8
                 manager->priv->query_timeout_id = 0;
244a5d
@@ -2790,96 +2790,96 @@ gsm_manager_initialization_error (GsmExportedManager    *skeleton,
5d36d8
 {
5d36d8
         if (manager->priv->phase != GSM_MANAGER_PHASE_INITIALIZATION) {
5d36d8
                 g_dbus_method_invocation_return_error (invocation,
5d36d8
                                                        GSM_MANAGER_ERROR,
5d36d8
                                                        GSM_MANAGER_ERROR_NOT_IN_INITIALIZATION,
5d36d8
                                                        "InitializationError interface is only available during the Initialization phase");
5d36d8
                 return TRUE;
5d36d8
         }
5d36d8
 
5d36d8
         gsm_util_init_error (fatal, "%s", message);
5d36d8
         gsm_exported_manager_complete_initialization_error (skeleton, invocation);
5d36d8
 
5d36d8
         return TRUE;
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 user_logout (GsmManager           *manager,
5d36d8
              GsmManagerLogoutMode  mode)
5d36d8
 {
5d36d8
         if (manager->priv->phase >= GSM_MANAGER_PHASE_QUERY_END_SESSION) {
5d36d8
                 manager->priv->logout_mode = mode;
5d36d8
                 end_session_or_show_shell_dialog (manager);
5d36d8
                 return;
5d36d8
         }
5d36d8
 
5d36d8
         request_logout (manager, mode);
5d36d8
 }
5d36d8
 
5d36d8
 gboolean
5d36d8
 gsm_manager_save_session (GsmManager            *manager,
5d36d8
-                          DBusGMethodInvocation *context)
5d36d8
+                          GDBusMethodInvocation *invocation)
5d36d8
 {
5d36d8
         ClientEndSessionData data;
5d36d8
         GError *error;
5d36d8
 
5d36d8
         g_debug ("GsmManager: SaveSession called");
5d36d8
 
5d36d8
         g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE);
5d36d8
 
5d36d8
         if (manager->priv->phase != GSM_MANAGER_PHASE_RUNNING) {
5d36d8
                 error = g_error_new (GSM_MANAGER_ERROR,
5d36d8
                                      GSM_MANAGER_ERROR_NOT_IN_RUNNING,
5d36d8
                                      "SaveSession interface is only available during the Running phase");
5d36d8
-                dbus_g_method_return_error (context, error);
5d36d8
+                g_dbus_method_invocation_return_gerror (invocation, error);
5d36d8
                 g_error_free (error);
5d36d8
                 return FALSE;
5d36d8
         }
5d36d8
 
5d36d8
         data.manager = manager;
5d36d8
         data.flags = 0;
5d36d8
         gsm_store_foreach (manager->priv->clients,
5d36d8
                            (GsmStoreFunc)_client_request_save_helper,
5d36d8
                            &data);
5d36d8
 
5d36d8
         if (manager->priv->query_clients) {
5d36d8
                 manager->priv->query_timeout_id = g_timeout_add_seconds (GSM_MANAGER_SAVE_SESSION_TIMEOUT,
5d36d8
                                                                          (GSourceFunc)_on_query_save_session_timeout,
5d36d8
                                                                          manager);
5d36d8
 
5d36d8
                 manager->priv->pending_save_invocations = g_slist_prepend (manager->priv->pending_save_invocations,
5d36d8
-                                                                           context);
5d36d8
+                                                                           invocation);
5d36d8
 
5d36d8
                 return TRUE;
5d36d8
         } else {
5d36d8
                 g_debug ("GsmManager: Nothing to save");
5d36d8
-                dbus_g_method_return (context);
5d36d8
+                g_dbus_method_invocation_return_value (invocation, NULL);
5d36d8
                 return TRUE;
5d36d8
         }
5d36d8
 
5d36d8
         return TRUE;
5d36d8
 }
5d36d8
 
5d36d8
 gboolean
5d36d8
 gsm_manager_logout (GsmManager *manager,
5d36d8
                     guint logout_mode,
5d36d8
                     GError **error)
5d36d8
 {
5d36d8
         if (manager->priv->phase < GSM_MANAGER_PHASE_RUNNING) {
5d36d8
                 g_set_error (error,
5d36d8
                              GSM_MANAGER_ERROR,
5d36d8
                              GSM_MANAGER_ERROR_NOT_IN_RUNNING,
5d36d8
                              "Logout interface is only available after the Running phase starts");
5d36d8
                 return FALSE;
5d36d8
         }
5d36d8
 
5d36d8
         if (_log_out_is_locked_down (manager)) {
5d36d8
                 g_set_error (error,
5d36d8
                              GSM_MANAGER_ERROR,
5d36d8
                              GSM_MANAGER_ERROR_LOCKED_DOWN,
5d36d8
                              "Logout has been locked down");
5d36d8
                 return FALSE;
5d36d8
         }
5d36d8
 
5d36d8
         switch (logout_mode) {
5d36d8
         case GSM_MANAGER_LOGOUT_MODE_NORMAL:
5d36d8
         case GSM_MANAGER_LOGOUT_MODE_NO_CONFIRMATION:
5d36d8
diff --git a/gnome-session/gsm-manager.h b/gnome-session/gsm-manager.h
5d36d8
index fcf36019..88a88ccc 100644
5d36d8
--- a/gnome-session/gsm-manager.h
5d36d8
+++ b/gnome-session/gsm-manager.h
5d36d8
@@ -1,54 +1,55 @@
5d36d8
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
5d36d8
  *
5d36d8
  * Copyright (C) 2008 William Jon McCann <jmccann@redhat.com>
5d36d8
  *
5d36d8
  * This program is free software; you can redistribute it and/or modify
5d36d8
  * it under the terms of the GNU General Public License as published by
5d36d8
  * the Free Software Foundation; either version 2 of the License, or
5d36d8
  * (at your option) any later version.
5d36d8
  *
5d36d8
  * This program is distributed in the hope that it will be useful,
5d36d8
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
5d36d8
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5d36d8
  * GNU General Public License for more details.
5d36d8
  *
5d36d8
  * You should have received a copy of the GNU General Public License
5d36d8
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
5d36d8
  *
5d36d8
  */
5d36d8
 
5d36d8
 
5d36d8
 #ifndef __GSM_MANAGER_H
5d36d8
 #define __GSM_MANAGER_H
5d36d8
 
5d36d8
 #include <glib-object.h>
5d36d8
+#include <gio/gio.h>
5d36d8
 
5d36d8
 #include "gsm-store.h"
5d36d8
 #include "gsm-manager-logout-mode.h"
5d36d8
 
5d36d8
 G_BEGIN_DECLS
5d36d8
 
5d36d8
 #define GSM_TYPE_MANAGER         (gsm_manager_get_type ())
5d36d8
 #define GSM_MANAGER(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GSM_TYPE_MANAGER, GsmManager))
5d36d8
 #define GSM_MANAGER_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GSM_TYPE_MANAGER, GsmManagerClass))
5d36d8
 #define GSM_IS_MANAGER(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSM_TYPE_MANAGER))
5d36d8
 #define GSM_IS_MANAGER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GSM_TYPE_MANAGER))
5d36d8
 #define GSM_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSM_TYPE_MANAGER, GsmManagerClass))
5d36d8
 
5d36d8
 typedef struct GsmManagerPrivate GsmManagerPrivate;
5d36d8
 
5d36d8
 typedef struct
5d36d8
 {
5d36d8
         GObject            parent;
5d36d8
         GsmManagerPrivate *priv;
5d36d8
 } GsmManager;
5d36d8
 
5d36d8
 typedef struct
5d36d8
 {
5d36d8
         GObjectClass   parent_class;
5d36d8
 
5d36d8
         void          (* phase_changed)       (GsmManager      *manager,
5d36d8
                                                const char      *phase);
5d36d8
 } GsmManagerClass;
5d36d8
 
5d36d8
 typedef enum {
5d36d8
@@ -98,42 +99,42 @@ GType               gsm_manager_get_type                       (void);
5d36d8
 GsmManager *        gsm_manager_new                            (GsmStore       *client_store,
5d36d8
                                                                 gboolean        failsafe);
5d36d8
 GsmManager *        gsm_manager_get                            (void);
5d36d8
 
5d36d8
 gboolean            gsm_manager_get_failsafe                   (GsmManager     *manager);
5d36d8
 
5d36d8
 gboolean            gsm_manager_add_autostart_app              (GsmManager     *manager,
5d36d8
                                                                 const char     *path,
5d36d8
                                                                 const char     *provides);
5d36d8
 gboolean            gsm_manager_add_required_app               (GsmManager     *manager,
5d36d8
                                                                 const char     *path,
5d36d8
                                                                 const char     *provides);
5d36d8
 gboolean            gsm_manager_add_autostart_apps_from_dir    (GsmManager     *manager,
5d36d8
                                                                 const char     *path);
5d36d8
 gboolean            gsm_manager_add_legacy_session_apps        (GsmManager     *manager,
5d36d8
                                                                 const char     *path);
5d36d8
 
5d36d8
 void                gsm_manager_start                          (GsmManager     *manager);
5d36d8
 
5d36d8
 const char *        _gsm_manager_get_default_session           (GsmManager     *manager);
5d36d8
 char *              _gsm_manager_get_saved_session             (GsmManager     *manager);
5d36d8
 
5d36d8
 void                _gsm_manager_set_active_session            (GsmManager     *manager,
5d36d8
                                                                 const char     *session_name,
5d36d8
                                                                 gboolean        is_fallback);
5d36d8
 
5d36d8
 void                _gsm_manager_set_renderer                  (GsmManager     *manager,
5d36d8
                                                                 const char     *renderer);
5d36d8
 
5d36d8
 gboolean            gsm_manager_save_session                   (GsmManager     *manager,
5d36d8
-								DBusGMethodInvocation *context);
5d36d8
+                                                                GDBusMethodInvocation *context);
5d36d8
 
5d36d8
 gboolean            gsm_manager_logout                         (GsmManager     *manager,
5d36d8
                                                                 guint           logout_mode,
5d36d8
                                                                 GError        **error);
5d36d8
 
5d36d8
 gboolean            gsm_manager_set_phase                      (GsmManager     *manager,
5d36d8
                                                                 GsmManagerPhase phase);
5d36d8
 
5d36d8
 G_END_DECLS
5d36d8
 
5d36d8
 #endif /* __GSM_MANAGER_H */
d379a5
diff --git a/meson.build b/meson.build
d379a5
index 24221bb6..9a16d5b1 100644
d379a5
--- a/meson.build
d379a5
+++ b/meson.build
d379a5
@@ -72,61 +72,60 @@ if enable_deprecation_flags
d379a5
 endif
d379a5
 
d379a5
 compiler_flags = []
d379a5
 if session_debug
d379a5
   test_cflags = [
d379a5
     '-Werror=format=2',
d379a5
     '-Werror=implicit-function-declaration',
d379a5
     '-Werror=init-self',
d379a5
     '-Werror=missing-include-dirs',
d379a5
     '-Werror=missing-prototypes',
d379a5
     '-Werror=pointer-arith',
d379a5
     '-Werror=return-type',
d379a5
     '-Wnested-externs',
d379a5
     '-Wstrict-prototypes'
d379a5
   ]
d379a5
 
d379a5
   compiler_flags += cc.get_supported_arguments(test_cflags)
d379a5
 endif
d379a5
 
d379a5
 add_project_arguments(common_flags + compiler_flags, language: 'c')
d379a5
 
d379a5
 glib_req_version = '>= 2.46.0'
d379a5
 
d379a5
 gio_dep = dependency('gio-2.0', version: glib_req_version)
d379a5
 glib_dep = dependency('glib-2.0', version: glib_req_version)
d379a5
 gtk_dep = dependency('gtk+-3.0', version: '>= 3.18.0')
d379a5
 xtrans_dep = dependency('xtrans')
d379a5
 ice_dep = dependency('ice')
d379a5
 sm_dep = dependency('sm')
d379a5
 x11_dep = dependency('x11')
d379a5
-dbus_glib_dep = dependency('dbus-glib-1')
d379a5
 
d379a5
 session_deps = [
d379a5
   gio_dep,
d379a5
   glib_dep,
d379a5
   dependency('gnome-desktop-3.0', version: '>= 3.18.0'),
d379a5
   dependency('json-glib-1.0', version: '>= 0.10')
d379a5
 ]
d379a5
 
d379a5
 session_bin_deps = session_deps + [
d379a5
   xtrans_dep,
d379a5
   ice_dep,
d379a5
   sm_dep
d379a5
 ]
d379a5
 
d379a5
 # Check for session selector GTK+ UI
d379a5
 enable_session_selector = get_option('session_selector')
d379a5
 
d379a5
 # Check for session tracking backend
d379a5
 session_tracking = 'null backend'
d379a5
 
d379a5
 enable_systemd = get_option('systemd')
d379a5
 enable_systemd_journal = get_option('systemd_journal')
d379a5
 enable_consolekit = get_option('consolekit')
d379a5
 if enable_systemd or enable_consolekit
d379a5
   session_bin_deps += dependency('gio-unix-2.0', version: glib_req_version)
d379a5
 
d379a5
   # Check for systemd
d379a5
   if enable_systemd
d379a5
     libsystemd_dep = dependency('libsystemd', version: '>= 209', required: false)
d379a5
     session_bin_deps += libsystemd_dep
5d36d8
diff --git a/tools/gnome-session-selector.c b/tools/gnome-session-selector.c
244a5d
index a41cd260..6ad307b0 100644
5d36d8
--- a/tools/gnome-session-selector.c
5d36d8
+++ b/tools/gnome-session-selector.c
5d36d8
@@ -7,63 +7,60 @@
5d36d8
  * the Free Software Foundation; either version 2 of the License, or
5d36d8
  * (at your option) any later version.
5d36d8
  *
5d36d8
  * This program is distributed in the hope that it will be useful,
5d36d8
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
5d36d8
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5d36d8
  * GNU General Public License for more details.
5d36d8
  *
5d36d8
  * You should have received a copy of the GNU General Public License
5d36d8
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
5d36d8
  *
5d36d8
  * Written by: Matthias Clasen <mclasen@redhat.com>
5d36d8
  */
5d36d8
 
5d36d8
 #include "config.h"
5d36d8
 
5d36d8
 #include <fcntl.h>
5d36d8
 #include <stdlib.h>
5d36d8
 #include <string.h>
5d36d8
 #include <sys/types.h>
5d36d8
 #include <sys/stat.h>
5d36d8
 #include <unistd.h>
5d36d8
 
5d36d8
 #include <glib.h>
5d36d8
 #include <gtk/gtk.h>
5d36d8
 #include <gio/gio.h>
5d36d8
 
5d36d8
 #include <glib/gi18n.h>
5d36d8
 #include <glib/gstdio.h>
5d36d8
 
5d36d8
-#include <dbus/dbus-glib.h>
5d36d8
-#include <dbus/dbus-glib-lowlevel.h>
5d36d8
-
5d36d8
 #define GSM_SERVICE_DBUS   "org.gnome.SessionManager"
5d36d8
 #define GSM_PATH_DBUS      "/org/gnome/SessionManager"
5d36d8
 #define GSM_INTERFACE_DBUS "org.gnome.SessionManager"
5d36d8
 
5d36d8
 #define GSM_MANAGER_SCHEMA        "org.gnome.SessionManager"
5d36d8
 #define KEY_AUTOSAVE_ONE_SHOT     "auto-save-session-one-shot"
5d36d8
 #define DEFAULT_SESSION_NAME      "gnome-classic"
5d36d8
 
5d36d8
 static GtkBuilder *builder;
5d36d8
 static GtkWidget *session_list;
5d36d8
 static GtkListStore *store;
5d36d8
 static GtkTreeModelSort *sort_model;
5d36d8
 static char *info_text;
5d36d8
 
5d36d8
 static void select_session (const char *name);
5d36d8
 static gboolean make_session_current (const char *name);
5d36d8
 
5d36d8
 static char *
5d36d8
 get_session_path (const char *name)
5d36d8
 {
5d36d8
         return g_build_filename (g_get_user_config_dir (), "gnome-session", name, NULL);
5d36d8
 }
5d36d8
 
5d36d8
 static char *
5d36d8
 find_new_session_name (void)
5d36d8
 {
5d36d8
         char *name;
5d36d8
         char *path;
5d36d8
         int i;
5d36d8
 
5d36d8
@@ -694,86 +691,93 @@ on_row_activated (GtkTreeView       *tree_view,
5d36d8
         gtk_main_quit ();
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 auto_save_next_session (void)
5d36d8
 {
5d36d8
         GSettings *settings;
5d36d8
 
5d36d8
         settings = g_settings_new (GSM_MANAGER_SCHEMA);
5d36d8
         g_settings_set_boolean (settings, KEY_AUTOSAVE_ONE_SHOT, TRUE);
5d36d8
         g_object_unref (settings);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 auto_save_next_session_if_needed (void)
5d36d8
 {
5d36d8
         char *marker;
5d36d8
 
5d36d8
         marker = g_build_filename (g_get_user_config_dir (),
5d36d8
                                    "gnome-session", "saved-session",
5d36d8
                                    ".new-session", NULL);
5d36d8
 
5d36d8
         if (g_file_test (marker, G_FILE_TEST_EXISTS)) {
5d36d8
                 auto_save_next_session ();
5d36d8
                 unlink (marker);
5d36d8
         }
5d36d8
         g_free (marker);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
-save_session (void)
5d36d8
+session_saved_cb (GDBusConnection *conn,
5d36d8
+                  GAsyncResult *result)
5d36d8
 {
5d36d8
-        DBusGConnection *conn;
5d36d8
-        DBusGProxy *proxy;
5d36d8
-        GError *error;
5d36d8
+        GVariant *reply;
5d36d8
 
5d36d8
-        conn = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
5d36d8
-        if (conn == NULL) {
5d36d8
-                g_warning ("Could not connect to the session bus");
5d36d8
-                return;
5d36d8
-        }
5d36d8
+        reply = g_dbus_connection_call_finish (conn, result, NULL);
5d36d8
 
5d36d8
-        proxy = dbus_g_proxy_new_for_name (conn, GSM_SERVICE_DBUS, GSM_PATH_DBUS, GSM_INTERFACE_DBUS);
5d36d8
-        if (proxy == NULL) {
5d36d8
-                g_warning ("Could not connect to the session manager");
5d36d8
-                return;
5d36d8
-        }
5d36d8
+        g_variant_unref (reply);
5d36d8
+}
5d36d8
 
5d36d8
-        error = NULL;
5d36d8
-        if (!dbus_g_proxy_call (proxy, "SaveSession", &error, G_TYPE_INVALID, G_TYPE_INVALID)) {
5d36d8
-                g_warning ("Failed to save session: %s", error->message);
5d36d8
-                g_error_free (error);
5d36d8
+static void
5d36d8
+save_session (void)
5d36d8
+{
5d36d8
+        GDBusConnection *conn;
5d36d8
+
5d36d8
+        conn = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
5d36d8
+        if (conn == NULL) {
5d36d8
                 return;
5d36d8
         }
5d36d8
 
5d36d8
-        g_object_unref (proxy);
5d36d8
+        g_dbus_connection_call (conn,
5d36d8
+                                GSM_SERVICE_DBUS,
5d36d8
+                                GSM_PATH_DBUS,
5d36d8
+                                GSM_INTERFACE_DBUS,
5d36d8
+                                "SaveSession",
5d36d8
+                                NULL,
5d36d8
+                                NULL,
5d36d8
+                                G_DBUS_CALL_FLAGS_NONE,
5d36d8
+                                -1,
5d36d8
+                                NULL,
5d36d8
+                                (GAsyncReadyCallback)
5d36d8
+                                session_saved_cb,
5d36d8
+                                NULL);
5d36d8
 }
5d36d8
 
5d36d8
 static int
5d36d8
 compare_sessions (GtkTreeModel *model,
5d36d8
                   GtkTreeIter  *a,
5d36d8
                   GtkTreeIter  *b,
5d36d8
                   gpointer      data)
5d36d8
 {
5d36d8
     char *name_a, *name_b;
5d36d8
     int result;
5d36d8
 
5d36d8
     gtk_tree_model_get (model, a, 0, &name_a, -1);
5d36d8
     gtk_tree_model_get (model, b, 0, &name_b, -1);
5d36d8
 
5d36d8
     result = g_utf8_collate (name_a, name_b);
5d36d8
 
5d36d8
     g_free (name_a);
5d36d8
     g_free (name_b);
5d36d8
 
5d36d8
     return result;
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 on_map (GtkWidget *widget,
5d36d8
         gpointer   data)
5d36d8
 {
5d36d8
         gdk_window_focus (gtk_widget_get_window (widget), GDK_CURRENT_TIME);
5d36d8
 }
5d36d8
 
5d36d8
 int
d379a5
diff --git a/tools/meson.build b/tools/meson.build
d379a5
index 4bd24220..10ee918c 100644
d379a5
--- a/tools/meson.build
d379a5
+++ b/tools/meson.build
d379a5
@@ -1,53 +1,52 @@
d379a5
 install_data(
d379a5
   'gnome-session-custom-session',
d379a5
   install_dir: session_bindir
d379a5
 )
d379a5
 
d379a5
 deps = session_deps + [
d379a5
   sm_dep,
d379a5
   ice_dep
d379a5
 ]
d379a5
 
d379a5
 cflags = ['-DLOCALE_DIR="@0@"'.format(session_localedir)]
d379a5
 
d379a5
 programs = [
d379a5
   # name, deps, cflags, install_dir
d379a5
   ['gnome-session-quit', deps, cflags, session_bindir],
d379a5
   ['gnome-session-inhibit', session_deps, cflags, session_bindir]
d379a5
 ]
d379a5
 
d379a5
 if enable_session_selector
d379a5
   deps = [
d379a5
     glib_dep,
d379a5
-    gtk_dep,
d379a5
-    dbus_glib_dep
d379a5
+    gtk_dep
d379a5
   ]
d379a5
 
d379a5
   cflags += '-DGTKBUILDER_DIR="@0@"'.format(session_pkgdatadir)
d379a5
 
d379a5
   programs += [['gnome-session-selector', deps, cflags, session_bindir]]
d379a5
 endif
d379a5
 
d379a5
 deps = [
d379a5
   gtk_dep,
d379a5
   x11_dep,
d379a5
   dependency('egl'),
d379a5
   dependency('glesv2')
d379a5
 ]
d379a5
 
d379a5
 cflags = '-DPKGDATADIR="@0@"'.format(session_pkgdatadir)
d379a5
 
d379a5
 programs += [['gnome-session-check-accelerated-gles-helper', deps, cflags, session_libexecdir]]
d379a5
 
d379a5
 deps = [
d379a5
   glib_dep,
d379a5
   x11_dep,
d379a5
   dependency('gl'),
d379a5
   dependency('epoxy'),
d379a5
   dependency('xcomposite')
d379a5
 ]
d379a5
 
d379a5
 programs += [['gnome-session-check-accelerated-gl-helper', deps, cflags, session_libexecdir]]
d379a5
 
d379a5
 deps += [gtk_dep]
d379a5
 
5d36d8
-- 
d379a5
2.17.0
5d36d8