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); |