[Xfce4-commits] [xfce/xfce4-settings] 01/01: Load settings only when we acquire the bus name

noreply at xfce.org noreply at xfce.org
Sun Jun 10 20:51:41 CEST 2018


This is an automated email from the git hooks/post-receive script.

a   l   i       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfce4-settings.

commit 63760919e9cbaf176eef84c497f376d50d9d9a64
Author: Ali Abdallah <ali at xfce.org>
Date:   Sun Jun 10 20:47:45 2018 +0200

    Load settings only when we acquire the bus name
    
    If we don't wait to acquire the bus name to load various settings we
    might mess up with the current running instance of xfsettingsd. So
    do all settings task only when we acquire the bus name.
---
 xfsettingsd/main.c | 165 +++++++++++++++++++++++++++++------------------------
 1 file changed, 91 insertions(+), 74 deletions(-)

diff --git a/xfsettingsd/main.c b/xfsettingsd/main.c
index 6d34913..86b2954 100644
--- a/xfsettingsd/main.c
+++ b/xfsettingsd/main.c
@@ -67,13 +67,33 @@
 #define XFSETTINGS_DBUS_NAME    "org.xfce.SettingsDaemon"
 #define XFSETTINGS_DESKTOP_FILE (SYSCONFIGDIR "/xdg/autostart/xfsettingsd.desktop")
 
+#define UNREF_GOBJECT(obj) \
+    if (obj) \
+    g_object_unref (G_OBJECT(obj))
 
-static XfceSMClient *sm_client = NULL;
 static gboolean opt_version = FALSE;
 static gboolean opt_no_daemon = FALSE;
 static gboolean opt_replace = FALSE;
 static guint owner_id;
 
+struct t_data_set
+{
+    XfceSMClient         *sm_client;
+    GObject              *pointer_helper;
+    GObject              *keyboards_helper;
+    GObject              *accessibility_helper;
+    GObject              *shortcuts_helper;
+    GObject              *keyboard_layout_helper;
+    GObject              *gtk_decorations_helper;
+    GObject              *xsettings_helper;
+    GObject              *clipboard_daemon;
+#ifdef HAVE_XRANDR
+    GObject              *displays_helper;
+#endif
+    GObject              *workspaces_helper;
+};
+
+
 static GOptionEntry option_entries[] =
 {
     { "version", 'V', 0, G_OPTION_ARG_NONE, &opt_version, N_("Version information"), NULL },
@@ -97,7 +117,53 @@ on_name_acquired (GDBusConnection *connection,
                   const gchar     *name,
                   gpointer         user_data)
 {
-    GBusNameOwnerFlags    dbus_flags;
+    GBusNameOwnerFlags         dbus_flags;
+    struct t_data_set         *s_data;
+    GError                    *error = NULL;
+
+    s_data = (struct t_data_set*) user_data;
+
+    /* connect to session always, even if we quit below.  this way the
+     * session manager won't wait for us to time out. */
+    s_data->sm_client = xfce_sm_client_get ();
+    xfce_sm_client_set_restart_style (s_data->sm_client, XFCE_SM_CLIENT_RESTART_IMMEDIATELY);
+    xfce_sm_client_set_desktop_file (s_data->sm_client, XFSETTINGS_DESKTOP_FILE);
+    xfce_sm_client_set_priority (s_data->sm_client, XFCE_SM_CLIENT_PRIORITY_CORE);
+    g_signal_connect (G_OBJECT (s_data->sm_client), "quit", G_CALLBACK (gtk_main_quit), NULL);
+    if (!xfce_sm_client_connect (s_data->sm_client, &error) && error)
+    {
+        g_printerr ("Failed to connect to session manager: %s\n", error->message);
+        g_clear_error (&error);
+    }
+
+    /* launch settings manager */
+    s_data->xsettings_helper = g_object_new (XFCE_TYPE_XSETTINGS_HELPER, NULL);
+    xfce_xsettings_helper_register (XFCE_XSETTINGS_HELPER (s_data->xsettings_helper),
+                                    gdk_display_get_default (), opt_replace);
+
+    /* create the sub daemons */
+#ifdef HAVE_XRANDR
+    s_data->displays_helper = g_object_new (XFCE_TYPE_DISPLAYS_HELPER, NULL);
+#endif
+    s_data->pointer_helper = g_object_new (XFCE_TYPE_POINTERS_HELPER, NULL);
+    s_data->keyboards_helper = g_object_new (XFCE_TYPE_KEYBOARDS_HELPER, NULL);
+    s_data->accessibility_helper = g_object_new (XFCE_TYPE_ACCESSIBILITY_HELPER, NULL);
+    s_data->shortcuts_helper = g_object_new (XFCE_TYPE_KEYBOARD_SHORTCUTS_HELPER, NULL);
+    s_data->keyboard_layout_helper = g_object_new (XFCE_TYPE_KEYBOARD_LAYOUT_HELPER, NULL);
+    s_data->workspaces_helper = g_object_new (XFCE_TYPE_WORKSPACES_HELPER, NULL);
+    s_data->gtk_decorations_helper = g_object_new (XFCE_TYPE_DECORATIONS_HELPER, NULL);
+
+    if (g_getenv ("XFSETTINGSD_NO_CLIPBOARD") == NULL)
+    {
+        s_data->clipboard_daemon = g_object_new (GSD_TYPE_CLIPBOARD_MANAGER, NULL);
+        if (!gsd_clipboard_manager_start (GSD_CLIPBOARD_MANAGER (s_data->clipboard_daemon), opt_replace))
+        {
+            UNREF_GOBJECT (G_OBJECT (s_data->clipboard_daemon));
+            s_data->clipboard_daemon = NULL;
+
+            g_printerr (G_LOG_DOMAIN ": %s\n", "Another clipboard manager is already running.");
+        }
+    }
 
     /* Update the name flags to allow replacement */
     dbus_flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT;
@@ -143,24 +209,13 @@ main (gint argc, gchar **argv)
 {
     GError               *error = NULL;
     GOptionContext       *context;
-    GObject              *pointer_helper;
-    GObject              *keyboards_helper;
-    GObject              *accessibility_helper;
-    GObject              *shortcuts_helper;
-    GObject              *keyboard_layout_helper;
-    GObject              *gtk_decorations_helper;
-    GObject              *xsettings_helper;
-    GObject              *clipboard_daemon = NULL;
-#ifdef HAVE_XRANDR
-    GObject              *displays_helper;
-#endif
-    GObject              *workspaces_helper;
+    struct t_data_set     s_data;
     guint                 i;
     const gint            signums[] = { SIGQUIT, SIGTERM };
-    GDBusConnection       *dbus_connection;
+    GDBusConnection      *dbus_connection;
     GBusNameOwnerFlags    dbus_flags;
-    gboolean name_owned;
-    GVariant* name_owned_variant;
+    gboolean              name_owned;
+    GVariant             *name_owned_variant;
 
     xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
 
@@ -227,6 +282,9 @@ main (gint argc, gchar **argv)
         return EXIT_FAILURE;
     }
 
+    /* Initialize our data set */
+    memset (&s_data, 0, sizeof (struct t_data_set));
+
     dbus_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
     if (G_LIKELY (!error))
     {
@@ -264,7 +322,7 @@ main (gint argc, gchar **argv)
         if (opt_replace || name_owned)
             dbus_flags = G_BUS_NAME_OWNER_FLAGS_REPLACE ;
 
-        owner_id = g_bus_own_name_on_connection (dbus_connection, XFSETTINGS_DBUS_NAME, dbus_flags, on_name_acquired, on_name_lost, NULL, NULL );
+        owner_id = g_bus_own_name_on_connection (dbus_connection, XFSETTINGS_DBUS_NAME, dbus_flags, on_name_acquired, on_name_lost, &s_data, NULL );
     }
     else
     {
@@ -282,48 +340,6 @@ main (gint argc, gchar **argv)
         return EXIT_FAILURE;
     }
 
-    /* connect to session always, even if we quit below.  this way the
-     * session manager won't wait for us to time out. */
-    sm_client = xfce_sm_client_get ();
-    xfce_sm_client_set_restart_style (sm_client, XFCE_SM_CLIENT_RESTART_IMMEDIATELY);
-    xfce_sm_client_set_desktop_file (sm_client, XFSETTINGS_DESKTOP_FILE);
-    xfce_sm_client_set_priority (sm_client, XFCE_SM_CLIENT_PRIORITY_CORE);
-    g_signal_connect (G_OBJECT (sm_client), "quit", G_CALLBACK (gtk_main_quit), NULL);
-    if (!xfce_sm_client_connect (sm_client, &error) && error)
-    {
-        g_printerr ("Failed to connect to session manager: %s\n", error->message);
-        g_clear_error (&error);
-    }
-
-    /* launch settings manager */
-    xsettings_helper = g_object_new (XFCE_TYPE_XSETTINGS_HELPER, NULL);
-    xfce_xsettings_helper_register (XFCE_XSETTINGS_HELPER (xsettings_helper),
-                                    gdk_display_get_default (), opt_replace);
-
-    /* create the sub daemons */
-#ifdef HAVE_XRANDR
-    displays_helper = g_object_new (XFCE_TYPE_DISPLAYS_HELPER, NULL);
-#endif
-    pointer_helper = g_object_new (XFCE_TYPE_POINTERS_HELPER, NULL);
-    keyboards_helper = g_object_new (XFCE_TYPE_KEYBOARDS_HELPER, NULL);
-    accessibility_helper = g_object_new (XFCE_TYPE_ACCESSIBILITY_HELPER, NULL);
-    shortcuts_helper = g_object_new (XFCE_TYPE_KEYBOARD_SHORTCUTS_HELPER, NULL);
-    keyboard_layout_helper = g_object_new (XFCE_TYPE_KEYBOARD_LAYOUT_HELPER, NULL);
-    workspaces_helper = g_object_new (XFCE_TYPE_WORKSPACES_HELPER, NULL);
-    gtk_decorations_helper = g_object_new (XFCE_TYPE_DECORATIONS_HELPER, NULL);
-
-    if (g_getenv ("XFSETTINGSD_NO_CLIPBOARD") == NULL)
-    {
-        clipboard_daemon = g_object_new (GSD_TYPE_CLIPBOARD_MANAGER, NULL);
-        if (!gsd_clipboard_manager_start (GSD_CLIPBOARD_MANAGER (clipboard_daemon), opt_replace))
-        {
-            g_object_unref (G_OBJECT (clipboard_daemon));
-            clipboard_daemon = NULL;
-
-            g_printerr (G_LOG_DOMAIN ": %s\n", "Another clipboard manager is already running.");
-        }
-    }
-
     /* setup signal handlers to properly quit the main loop */
     if (xfce_posix_signal_handler_init (NULL))
     {
@@ -341,27 +357,28 @@ main (gint argc, gchar **argv)
     }
 
     /* release the sub daemons */
-    g_object_unref (G_OBJECT (xsettings_helper));
+    UNREF_GOBJECT(s_data.xsettings_helper);
+
 #ifdef HAVE_XRANDR
-    g_object_unref (G_OBJECT (displays_helper));
+    UNREF_GOBJECT (s_data.displays_helper);
 #endif
-    g_object_unref (G_OBJECT (pointer_helper));
-    g_object_unref (G_OBJECT (keyboards_helper));
-    g_object_unref (G_OBJECT (accessibility_helper));
-    g_object_unref (G_OBJECT (shortcuts_helper));
-    g_object_unref (G_OBJECT (keyboard_layout_helper));
-    g_object_unref (G_OBJECT (workspaces_helper));
-    g_object_unref (G_OBJECT (gtk_decorations_helper));
-
-    if (G_LIKELY (clipboard_daemon != NULL))
+    UNREF_GOBJECT (s_data.pointer_helper);
+    UNREF_GOBJECT (s_data.keyboards_helper);
+    UNREF_GOBJECT (s_data.accessibility_helper);
+    UNREF_GOBJECT (s_data.shortcuts_helper);
+    UNREF_GOBJECT (s_data.keyboard_layout_helper);
+    UNREF_GOBJECT (s_data.workspaces_helper);
+    UNREF_GOBJECT (s_data.gtk_decorations_helper);
+
+    if (G_LIKELY (s_data.clipboard_daemon != NULL))
     {
-        gsd_clipboard_manager_stop (GSD_CLIPBOARD_MANAGER (clipboard_daemon));
-        g_object_unref (G_OBJECT (clipboard_daemon));
+        gsd_clipboard_manager_stop (GSD_CLIPBOARD_MANAGER (s_data.clipboard_daemon));
+        UNREF_GOBJECT (s_data.clipboard_daemon);
     }
 
     xfconf_shutdown ();
 
-    g_object_unref (G_OBJECT (sm_client));
+    UNREF_GOBJECT (s_data.sm_client);
 
     return EXIT_SUCCESS;
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list