raveit65 pushed to mate-session-manager (master). "fix user switching if more than 2 desktop managers are installed"
notifications at fedoraproject.org
notifications at fedoraproject.org
Wed Apr 1 20:22:53 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=master&id=7ab6767dea65b3b85002bcf2c0b3c01687e3b3c4
More information about the scm-commits
mailing list