raveit65 pushed to mate-session-manager (f20). "Merge branch 'f21' into f20"

notifications at fedoraproject.org notifications at fedoraproject.org
Wed Apr 1 20:29:41 UTC 2015


>From 0b9f51c08417c59b465f4fa7ac609cc69a52ed25 Mon Sep 17 00:00:00 2001
From: raveit65 <chat-to-me at raveit.de>
Date: Wed, 1 Apr 2015 22:27:51 +0200
Subject: fix user switching if more than 2 desktop managers are installed


diff --git a/mate-session-manager.spec b/mate-session-manager.spec
index bf3c29c..61c96ea 100644
--- a/mate-session-manager.spec
+++ b/mate-session-manager.spec
@@ -1,6 +1,6 @@
 Name:           mate-session-manager
 Version:        1.8.2
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        MATE Desktop session manager
 License:        GPLv2+
 URL:            http://mate-desktop.org
@@ -9,6 +9,7 @@ Source0:        http://pub.mate-desktop.org/releases/1.8/%{name}-%{version}.tar.
 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778817
 # https://github.com/mate-desktop/mate-session-manager/pull/71
 Patch0:         mate-session-manager_avoid-dereferencing-NULL-pointer.patch
+Patch1:         mate-session-manager_1.8-ckeck-for-running-DM-for-user-switching.patch
 
 BuildRequires:  dbus-glib-devel
 BuildRequires:  desktop-file-utils
@@ -39,6 +40,7 @@ full-featured user session.
 %prep
 %setup -q
 %patch0 -p1 -b .NULL-pointer
+%patch1 -p1 -b .user-switching
 
 %build
 %configure                    \
@@ -98,6 +100,9 @@ fi
 
 
 %changelog
+* Wed Apr 01 2015 Wolfgang Ulbrich <chat-to-me at raveit.de> - 1.8.2-2
+- fix user switching if more than 2 desktop managers are installed
+
 * Wed Mar 11 2015 Wolfgang Ulbrich <chat-to-me at raveit.de> - 1.8.2.1
 - update to 1.8.2 release
 - add upstream patch from pull request
diff --git a/mate-session-manager_1.8-ckeck-for-running-DM-for-user-switching.patch b/mate-session-manager_1.8-ckeck-for-running-DM-for-user-switching.patch
new file mode 100644
index 0000000..6af21b0
--- /dev/null
+++ b/mate-session-manager_1.8-ckeck-for-running-DM-for-user-switching.patch
@@ -0,0 +1,120 @@
+diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c
+index eda565b..b7df6de 100644
+--- a/mate-session/gsm-manager.c
++++ b/mate-session/gsm-manager.c
+@@ -1013,18 +1013,21 @@ cancel_end_session (GsmManager *manager)
+ }
+ 
+ static gboolean
+-is_program_in_path (const char *program)
++process_is_running (const char * name)
+ {
+-        char *tmp = g_find_program_in_path (program);
+-        if (tmp != NULL)
+-        {
+-                g_free (tmp);
+-                return TRUE;
+-        }
+-        else
+-        {
+-                return FALSE;
+-        }
++       int num_processes;
++       char * command = g_strdup_printf ("pidof %s | wc -l", name);
++       FILE *fp = popen(command, "r");
++       fscanf(fp, "%d", &num_processes);
++       pclose(fp);
++       g_free (command);
++
++       if (num_processes > 0) {
++           return TRUE;
++       }
++       else {
++           return FALSE;
++       }
+ }
+ 
+ static void
+@@ -1033,8 +1036,9 @@ manager_switch_user (GsmManager *manager)
+         GError  *error;
+         gboolean res;
+         char    *command;
++        const gchar *xdg_seat_path = g_getenv ("XDG_SEAT_PATH");
+ 
+-        if (is_program_in_path (MDM_FLEXISERVER_COMMAND)) {
++        if (process_is_running("mdm")) {
+                 /* MDM */
+                 command = g_strdup_printf ("%s %s",
+                                            MDM_FLEXISERVER_COMMAND,
+@@ -1056,7 +1060,7 @@ manager_switch_user (GsmManager *manager)
+                         g_error_free (error);
+                 }
+         }
+-        else if (is_program_in_path (GDM_FLEXISERVER_COMMAND)) {
++        else if (process_is_running("gdm") || process_is_running("gdm3")) {
+                 /* GDM */
+                 command = g_strdup_printf ("%s %s",
+                                                GDM_FLEXISERVER_COMMAND,
+@@ -1078,36 +1082,33 @@ manager_switch_user (GsmManager *manager)
+                         g_error_free (error);
+                 }
+         }
+-        else {
++        else if (xdg_seat_path != NULL) {
+                 /* LightDM */
+-                const gchar *xdg_seat_path = g_getenv ("XDG_SEAT_PATH");
+-                if (xdg_seat_path != NULL) {
+-                        GDBusProxyFlags flags = G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START;
+-                        GDBusProxy *proxy = NULL;
+-                        error = NULL;
++                GDBusProxyFlags flags = G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START;
++                GDBusProxy *proxy = NULL;
++                error = NULL;
+ 
+-                        proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM,
+-                                                              flags,
+-                                                              NULL,
+-                                                              "org.freedesktop.DisplayManager",
+-                                                              xdg_seat_path,
+-                                                              "org.freedesktop.DisplayManager.Seat",
+-                                                              NULL,
+-                                                              &error);
+-                        if (proxy != NULL) {
+-                                g_dbus_proxy_call_sync (proxy,
+-                                                        "SwitchToGreeter",
+-                                                        g_variant_new ("()"),
+-                                                        G_DBUS_CALL_FLAGS_NONE,
+-                                                        -1,
+-                                                        NULL,
+-                                                        NULL);
+-                                g_object_unref (proxy);
+-                        }
+-                        else {
+-                                g_debug ("GsmManager: Unable to start LightDM greeter: %s", error->message);
+-                                g_error_free (error);
+-                        }
++                proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM,
++                                                      flags,
++                                                      NULL,
++                                                      "org.freedesktop.DisplayManager",
++                                                      xdg_seat_path,
++                                                      "org.freedesktop.DisplayManager.Seat",
++                                                      NULL,
++                                                      &error);
++                if (proxy != NULL) {
++                        g_dbus_proxy_call_sync (proxy,
++                                                "SwitchToGreeter",
++                                                g_variant_new ("()"),
++                                                G_DBUS_CALL_FLAGS_NONE,
++                                                -1,
++                                                NULL,
++                                                NULL);
++                        g_object_unref (proxy);
++                }
++                else {
++                        g_debug ("GsmManager: Unable to start LightDM greeter: %s", error->message);
++                        g_error_free (error);
+                 }
+         }
+ }
+
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/mate-session-manager.git/commit/?h=f20&id=4784126eb43be6bbd6095b03092e60267e573847


More information about the scm-commits mailing list