View | Details | Raw Unified | Return to bug 238348
Collapse All | Expand All

(-)Makefile (-2 / +3 lines)
Lines 18-26 Link Here
18
		libdbus-glib-1.so:devel/dbus-glib \
18
		libdbus-glib-1.so:devel/dbus-glib \
19
		libnotify.so:devel/libnotify \
19
		libnotify.so:devel/libnotify \
20
		libstartup-notification-1.so:x11/startup-notification \
20
		libstartup-notification-1.so:x11/startup-notification \
21
		libxklavier.so:x11/libxklavier
21
		libxklavier.so:x11/libxklavier \
22
		libconsolekit.so:sysutils/consolekit2
22
23
23
USES=		gettext-tools gmake gnome pkgconfig tar:bzip2 xfce:gtk3
24
USES=		gettext-tools gl gmake gnome pkgconfig tar:bzip2 xfce:gtk3
24
USE_GL=		gl
25
USE_GL=		gl
25
USE_GNOME=	cairo gdkpixbuf2 glib20 gtk30 intltool
26
USE_GNOME=	cairo gdkpixbuf2 glib20 gtk30 intltool
26
USE_XFCE=	garcon libexo libutil
27
USE_XFCE=	garcon libexo libutil
(-)files/patch-src_gs-listener-dbus.c (+161 lines)
Line 0 Link Here
1
--- src/gs-listener-dbus.c.orig	2019-03-15 02:23:32 UTC
2
+++ src/gs-listener-dbus.c
3
@@ -74,10 +74,6 @@ static DBusHandlerResult gs_listener_message_handler  
4
 #define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager"
5
 #define CK_SESSION_INTERFACE "org.freedesktop.ConsoleKit.Session"
6
 
7
-#define SESSION_NAME         "org.gnome.SessionManager"
8
-#define SESSION_PATH         "/org/gnome/SessionManager"
9
-#define SESSION_INTERFACE    "org.gnome.SessionManager"
10
-
11
 #define TYPE_MISMATCH_ERROR GS_LISTENER_INTERFACE ".TypeMismatch"
12
 
13
 struct GSListenerPrivate {
14
@@ -108,7 +104,7 @@ typedef struct {
15
     char     *reason;
16
     char     *connection;
17
     guint32   cookie;
18
-    guint32   foreign_cookie;
19
+    gint32    fd;
20
     GTimeVal  since;
21
 } GSListenerRefEntry;
22
 
23
@@ -604,34 +600,44 @@ listener_ref_entry_check (GSListener *listener,
24
 static void
25
 add_session_inhibit (GSListener         *listener,
26
                      GSListenerRefEntry *entry) {
27
-    DBusMessage     *message;
28
-    DBusMessage     *reply;
29
-    DBusMessageIter  iter;
30
-    DBusMessageIter  reply_iter;
31
+    DBusMessage     *message, *reply;
32
+    DBusMessageIter  iter, reply_iter;
33
     DBusError        error;
34
-    guint            xid;
35
-    guint            flags;
36
+    const gchar     *mode = "block";
37
+    /* it is a colon-separated list of lock types */
38
+    const gchar     *what = "idle";
39
 
40
     g_return_if_fail (listener != NULL);
41
 
42
     dbus_error_init (&error);
43
 
44
-    message = dbus_message_new_method_call (SESSION_NAME,
45
-                                            SESSION_PATH,
46
-                                            SESSION_INTERFACE,
47
+#if defined(WITH_SYSTEMD)
48
+    message = dbus_message_new_method_call (SYSTEMD_LOGIND_SERVICE,
49
+                                            SYSTEMD_LOGIND_PATH,
50
+                                            SYSTEMD_LOGIND_INTERFACE,
51
                                             "Inhibit");
52
+#elif defined(WITH_CONSOLE_KIT)
53
+    message = dbus_message_new_method_call (CK_NAME,
54
+                                            CK_MANAGER_PATH,
55
+                                            CK_MANAGER_INTERFACE,
56
+                                            "Inhibit");
57
+#endif
58
     if (message == NULL) {
59
         gs_debug ("Couldn't allocate the dbus message");
60
         return;
61
     }
62
 
63
     dbus_message_iter_init_append (message, &iter);
64
-    xid = 0;
65
-    flags = 8;
66
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &entry->application);
67
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &xid);
68
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &entry->reason);
69
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &flags);
70
+    /* what parameter */
71
+    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &what);
72
+    /* who parameter */
73
+    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING,
74
+                                    &entry->application);
75
+    /* why parameter */
76
+    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING,
77
+                                    &entry->reason);
78
+    /* mode parameter */
79
+    dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &mode);
80
 
81
     /* FIXME: use async? */
82
     reply = dbus_connection_send_with_reply_and_block (listener->priv->connection,
83
@@ -647,54 +653,23 @@ add_session_inhibit (GSListener         *listener,
84
     }
85
 
86
     dbus_message_iter_init (reply, &reply_iter);
87
-    dbus_message_iter_get_basic (&reply_iter, &entry->foreign_cookie);
88
+    if (DBUS_TYPE_UNIX_FD == dbus_message_iter_get_arg_type(&reply_iter))
89
+        dbus_message_iter_get_basic (&reply_iter, &entry->fd);
90
 
91
     dbus_message_unref (reply);
92
 }
93
 
94
 static void
95
-remove_session_inhibit (GSListener         *listener,
96
-                        GSListenerRefEntry *entry) {
97
-    DBusMessage     *message;
98
-    DBusMessage     *reply;
99
-    DBusMessageIter  iter;
100
-    DBusError        error;
101
-
102
-    g_return_if_fail (listener != NULL);
103
-
104
-    if (entry->foreign_cookie == 0) {
105
+remove_session_inhibit (GSListenerRefEntry *entry) {
106
+    if (entry->fd < 0) {
107
         gs_debug ("Can't remove inhibitor from session: Session cookie not set");
108
         return;
109
     }
110
 
111
-    dbus_error_init (&error);
112
-
113
-    message = dbus_message_new_method_call (SESSION_NAME,
114
-                                            SESSION_PATH,
115
-                                            SESSION_INTERFACE,
116
-                                            "Uninhibit");
117
-    if (message == NULL) {
118
-        gs_debug ("Couldn't allocate the dbus message");
119
+    if (close(entry->fd) < 0) {
120
+        gs_debug ("Can't close file descriptor");
121
         return;
122
     }
123
-
124
-    dbus_message_iter_init_append (message, &iter);
125
-    dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &entry->foreign_cookie);
126
-
127
-    /* FIXME: use async? */
128
-    reply = dbus_connection_send_with_reply_and_block (listener->priv->connection,
129
-            message,
130
-            -1,
131
-            &error);
132
-    dbus_message_unref (message);
133
-
134
-    if (dbus_error_is_set (&error)) {
135
-        gs_debug ("%s raised:\n %s\n\n", error.name, error.message);
136
-        dbus_error_free (&error);
137
-        return;
138
-    }
139
-
140
-    dbus_message_unref (reply);
141
 }
142
 
143
 static void
144
@@ -745,7 +720,7 @@ listener_remove_ref_entry (GSListener *listener,
145
 
146
     if (entry_type == REF_ENTRY_TYPE_INHIBIT) {
147
         /* remove inhibit from xfce session */
148
-        remove_session_inhibit (listener, entry);
149
+        remove_session_inhibit (entry);
150
     }
151
 
152
     removed = g_hash_table_remove (hash, &cookie);
153
@@ -977,7 +952,7 @@ listener_ref_entry_remove_for_connection (GSListener  
154
 
155
             if (entry->entry_type == REF_ENTRY_TYPE_INHIBIT) {
156
                 /* remove inhibit from xfce session */
157
-                remove_session_inhibit (listener, entry);
158
+                remove_session_inhibit (entry);
159
             }
160
 
161
             g_hash_table_iter_remove (&iter);

Return to bug 238348