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