raveit65 pushed to mate-session-manager (f22). "fix user switching if more than 2 desktop managers are installed"

notifications at fedoraproject.org notifications at fedoraproject.org
Wed Apr 1 20:23:48 UTC 2015


>From 7ab6767dea65b3b85002bcf2c0b3c01687e3b3c4 Mon Sep 17 00:00:00 2001
From: raveit65 <chat-to-me at raveit.de>
Date: Wed, 1 Apr 2015 22:22:36 +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 0027885..dd4896b 100644
--- a/mate-session-manager.spec
+++ b/mate-session-manager.spec
@@ -1,11 +1,14 @@
 Name:           mate-session-manager
 Version:        1.9.90
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        MATE Desktop session manager
 License:        GPLv2+
 URL:            http://mate-desktop.org
 Source0:        http://pub.mate-desktop.org/releases/1.9/%{name}-%{version}.tar.xz
 
+# https://github.com/mate-desktop/mate-session-manager/pull/80
+Patch0:         mate-session-manager_ckeck-for-running-DM-for-user-switching.patch
+
 BuildRequires:  dbus-glib-devel
 BuildRequires:  desktop-file-utils
 BuildRequires:  gtk2-devel
@@ -36,6 +39,8 @@ full-featured user session.
 %prep
 %setup -q
 
+%patch0 -p1 -b .user-switching
+
 %build
 %configure                    \
     --disable-static          \
@@ -95,6 +100,9 @@ fi
 
 
 %changelog
+* Wed Apr 01 2015 Wolfgang Ulbrich <chat-to-me at raveit.de> - 1.9.90-2
+- fix user switching if more than 2 desktop managers are installed
+
 * Thu Feb 26 2015 Wolfgang Ulbrich <chat-to-me at raveit.de> - 1.9.90-1
 - update to 1.9.90 release
 
diff --git a/mate-session-manager_ckeck-for-running-DM-for-user-switching.patch b/mate-session-manager_ckeck-for-running-DM-for-user-switching.patch
new file mode 100644
index 0000000..4359b8c
--- /dev/null
+++ b/mate-session-manager_ckeck-for-running-DM-for-user-switching.patch
@@ -0,0 +1,129 @@
+diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c
+index 2a4d140..11af41b 100644
+--- a/mate-session/gsm-manager.c
++++ b/mate-session/gsm-manager.c
+@@ -1034,18 +1034,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
+@@ -1054,6 +1057,7 @@ manager_switch_user (GsmManager *manager)
+         GError  *error;
+         gboolean res;
+         char    *command;
++        const gchar *xdg_seat_path = g_getenv ("XDG_SEAT_PATH");
+ 
+         /* We have to do this here and in request_switch_user() because this
+          * function can be called at a later time, not just directly after
+@@ -1063,7 +1067,7 @@ manager_switch_user (GsmManager *manager)
+                 return;
+         }
+ 
+-        if (is_program_in_path (MDM_FLEXISERVER_COMMAND)) {
++        if (process_is_running("mdm")) {
+                 /* MDM */
+                 command = g_strdup_printf ("%s %s",
+                                            MDM_FLEXISERVER_COMMAND,
+@@ -1079,7 +1083,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,
+@@ -1095,38 +1099,35 @@ 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);
++                }
++         }
+ }
+ 
+ static gboolean
+
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/mate-session-manager.git/commit/?h=f22&id=7ab6767dea65b3b85002bcf2c0b3c01687e3b3c4


More information about the scm-commits mailing list