1
diff -Nur gdm-2.14.9/daemon/gdm.c gdm-2.14.9.new/daemon/gdm.c
2
--- gdm-2.14.9/daemon/gdm.c 2006-06-16 10:42:18.000000000 +0200
3
+++ gdm-2.14.9.new/daemon/gdm.c 2006-06-16 10:42:27.000000000 +0200
1
diff -Nur gdm-2.16.1/daemon/gdm.c gdm-2.16.1.new/daemon/gdm.c
2
--- gdm-2.16.1/daemon/gdm.c 2006-10-12 22:11:30.000000000 +0200
3
+++ gdm-2.16.1.new/daemon/gdm.c 2006-10-12 22:11:31.000000000 +0200
46
46
change_to_first_and_clear (gboolean restart)
47
@@ -3228,9 +3264,80 @@
48
(status == DISPLAY_RESTARTGDM ||
49
status == DISPLAY_REBOOT ||
50
status == DISPLAY_SUSPEND ||
51
+ status == DISPLAY_HIBERNATE ||
52
status == DISPLAY_HALT)) {
53
gdm_info (_("Restart GDM, Restart machine, Suspend, or Halt request when there is no system menu from display %s"), d->name);
54
status = DISPLAY_REMANAGE;
56
(status == DISPLAY_RESTARTGDM ||
57
status == DISPLAY_REBOOT ||
58
status == DISPLAY_SUSPEND ||
59
+ status == DISPLAY_HIBERNATE ||
60
status == DISPLAY_HALT)) {
61
gdm_info (_("Restart GDM, Restart machine, Suspend or Halt request from a non-static display %s"), d->name);
62
status = DISPLAY_REMANAGE;
64
if (gdm_get_value_string (GDM_KEY_SUSPEND) == NULL)
65
status = DISPLAY_REMANAGE;
67
+ case DISPLAY_HIBERNATE:
68
+ if (gdm_get_value_string (GDM_KEY_HIBERNATE) == NULL)
69
+ status = DISPLAY_REMANAGE;
78
+ case DISPLAY_HIBERNATE: /* Hibernate machine */
79
+ /* XXX: this is ugly, why should there be a hibernate like this,
80
+ * see GDM_SOP_HIBERNATE_MACHINE */
81
+ hibernate_machine ();
83
+ status = DISPLAY_REMANAGE;
87
case DISPLAY_RESTARTGDM:
90
@@ -1085,6 +1136,10 @@
94
+ case GDM_LOGOUT_ACTION_HIBERNATE:
95
+ hibernate_machine ();
101
@@ -2359,6 +2414,22 @@
102
if (sysmenu && gdm_get_value_string (GDM_KEY_SUSPEND) != NULL) {
105
+ } else if (strncmp (msg, GDM_SOP_HIBERNATE_MACHINE " ",
106
+ strlen (GDM_SOP_HIBERNATE_MACHINE " ")) == 0) {
111
+ if (sscanf (msg, GDM_SOP_HIBERNATE_MACHINE " %ld", &slave_pid) != 1)
113
+ d = gdm_display_lookup (slave_pid);
115
+ gdm_info (_("Master hibernating..."));
117
+ sysmenu = gdm_get_value_bool_per_display (d->name, GDM_KEY_SYSTEM_MENU);
118
+ if (sysmenu && gdm_get_value_string (GDM_KEY_HIBERNATE) != NULL) {
119
+ hibernate_machine ();
121
} else if (strncmp (msg, GDM_SOP_CHOSEN_THEME " ",
122
strlen (GDM_SOP_CHOSEN_THEME " ")) == 0) {
124
@@ -3269,9 +3340,80 @@
48
125
g_string_append (msg, "!");
125
202
} else if (strncmp (msg, GDM_SUP_SET_LOGOUT_ACTION " ",
126
203
strlen (GDM_SUP_SET_LOGOUT_ACTION " ")) == 0) {
127
204
const gchar *action =
128
diff -Nur gdm-2.14.9/daemon/gdmconfig.c gdm-2.14.9.new/daemon/gdmconfig.c
129
--- gdm-2.14.9/daemon/gdmconfig.c 2006-06-16 10:42:18.000000000 +0200
130
+++ gdm-2.14.9.new/daemon/gdmconfig.c 2006-06-16 10:44:20.000000000 +0200
205
@@ -3318,6 +3460,13 @@
206
GDM_LOGOUT_ACTION_SUSPEND;
209
+ } else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_HIBERNATE) == 0) {
210
+ if (sysmenu && disp->attached &&
211
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_HIBERNATE))) {
212
+ disp->logout_action =
213
+ GDM_LOGOUT_ACTION_HIBERNATE;
218
gdm_connection_write (conn, "OK\n");
219
@@ -3371,6 +3520,13 @@
220
GDM_LOGOUT_ACTION_SUSPEND;
223
+ } else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_HIBERNATE) == 0) {
224
+ if (sysmenu && disp->attached &&
225
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_HIBERNATE))) {
226
+ safe_logout_action =
227
+ GDM_LOGOUT_ACTION_HIBERNATE;
232
gdm_connection_write (conn, "OK\n");
233
diff -Nur gdm-2.16.1/daemon/gdmconfig.c gdm-2.16.1.new/daemon/gdmconfig.c
234
--- gdm-2.16.1/daemon/gdmconfig.c 2006-10-12 22:11:30.000000000 +0200
235
+++ gdm-2.16.1.new/daemon/gdmconfig.c 2006-10-12 22:11:31.000000000 +0200
131
236
@@ -116,6 +116,7 @@
132
237
static gchar *GdmHalt = NULL;
133
238
static gchar *GdmReboot = NULL;
144
249
gdm_config_add_hash (GDM_KEY_LOG_DIR, &GdmLogDir, &string_type);
145
250
gdm_config_add_hash (GDM_KEY_PID_FILE, &GdmPidFile, &string_type);
146
251
gdm_config_add_hash (GDM_KEY_GLOBAL_FACE_DIR, &GdmGlobalFaceDir, &string_type);
147
@@ -1060,7 +1062,8 @@
252
@@ -1061,7 +1063,8 @@
148
253
/* Halt, Reboot, and Suspend commands */
149
254
} else if (is_key (key, GDM_KEY_HALT) ||
150
255
is_key (key, GDM_KEY_REBOOT) ||
154
259
if (value != NULL)
155
260
*setting = ve_get_first_working_command (value, FALSE);
157
diff -Nur gdm-2.14.9/daemon/gdm.h gdm-2.14.9.new/daemon/gdm.h
158
--- gdm-2.14.9/daemon/gdm.h 2006-06-16 10:42:18.000000000 +0200
159
+++ gdm-2.14.9.new/daemon/gdm.h 2006-06-16 10:42:27.000000000 +0200
262
diff -Nur gdm-2.16.1/daemon/gdm.h gdm-2.16.1.new/daemon/gdm.h
263
--- gdm-2.16.1/daemon/gdm.h 2006-10-12 22:11:30.000000000 +0200
264
+++ gdm-2.16.1.new/daemon/gdm.h 2006-10-12 22:12:05.000000000 +0200
160
265
@@ -69,6 +69,7 @@
161
266
#define DISPLAY_REBOOT 8 /* Rebewt */
162
267
#define DISPLAY_HALT 16 /* Halt */
189
294
GDM_LOGOUT_ACTION_LAST
190
295
} GdmLogoutAction;
192
@@ -1167,6 +1171,8 @@
298
#define GDM_SOP_SOFT_RESTART_SERVERS "SOFT_RESTART_SERVERS" /* no arguments */
299
/* Suspend the machine if it is even allowed */
300
#define GDM_SOP_SUSPEND_MACHINE "SUSPEND_MACHINE" /* no arguments */
301
+#define GDM_SOP_HIBERNATE_MACHINE "HIBERNATE_MACHINE" /* no arguments */
302
#define GDM_SOP_CHOSEN_THEME "CHOSEN_THEME" /* <slave pid> <theme name> */
304
/* Start a new standard X flexible server */
305
@@ -1166,6 +1171,8 @@
193
306
* 200 = Too many messages
194
307
* 999 = Unknown error
198
311
#define GDM_SUP_SET_SAFE_LOGOUT_ACTION "SET_SAFE_LOGOUT_ACTION" /* <action> */
199
312
/* SET_SAFE_LOGOUT_ACTION: Tell the daemon to halt/restart/suspend
200
313
* after everybody logs out. If only one
201
@@ -1198,6 +1204,7 @@
314
@@ -1197,6 +1204,7 @@
202
315
#define GDM_SUP_LOGOUT_ACTION_HALT "HALT"
203
316
#define GDM_SUP_LOGOUT_ACTION_REBOOT "REBOOT"
204
317
#define GDM_SUP_LOGOUT_ACTION_SUSPEND "SUSPEND"
208
321
#define GDM_SUP_QUERY_VT "QUERY_VT" /* None */
209
diff -Nur gdm-2.14.9/gui/greeter/greeter.c gdm-2.14.9.new/gui/greeter/greeter.c
210
--- gdm-2.14.9/gui/greeter/greeter.c 2006-06-10 00:14:49.000000000 +0200
211
+++ gdm-2.14.9.new/gui/greeter/greeter.c 2006-06-16 10:42:27.000000000 +0200
322
diff -Nur gdm-2.16.1/daemon/slave.c gdm-2.16.1.new/daemon/slave.c
323
--- gdm-2.16.1/daemon/slave.c 2006-10-12 22:11:30.000000000 +0200
324
+++ gdm-2.16.1.new/daemon/slave.c 2006-10-12 22:11:31.000000000 +0200
325
@@ -4674,6 +4674,7 @@
326
WEXITSTATUS (status) == DISPLAY_REBOOT ||
327
WEXITSTATUS (status) == DISPLAY_HALT ||
328
WEXITSTATUS (status) == DISPLAY_SUSPEND ||
329
+ WEXITSTATUS (status) == DISPLAY_HIBERNATE ||
330
WEXITSTATUS (status) == DISPLAY_RUN_CHOOSER ||
331
WEXITSTATUS (status) == DISPLAY_RESTARTGDM ||
332
WEXITSTATUS (status) == DISPLAY_GREETERFAILED)) {
333
@@ -4937,6 +4938,20 @@
334
/* Not interrupted, continue reading input,
335
* just proxy this to the master server */
337
+ case GDM_INTERRUPT_HIBERNATE:
339
+ gdm_get_value_bool_per_display (d->name, GDM_KEY_SYSTEM_MENU) &&
340
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_HIBERNATE))) {
341
+ gchar *msg = g_strdup_printf ("%s %ld",
342
+ GDM_SOP_HIBERNATE_MACHINE,
345
+ gdm_slave_send (msg, FALSE /* wait_for_ack */);
348
+ /* Not interrupted, continue reading input,
349
+ * just proxy this to the master server */
351
case GDM_INTERRUPT_LOGIN_SOUND:
353
! play_login_sound (gdm_get_value_string (GDM_KEY_SOUND_ON_LOGIN_FILE))) {
354
diff -Nur gdm-2.16.1/gui/greeter/greeter.c gdm-2.16.1.new/gui/greeter/greeter.c
355
--- gdm-2.16.1/gui/greeter/greeter.c 2006-08-08 17:24:05.000000000 +0200
356
+++ gdm-2.16.1.new/gui/greeter/greeter.c 2006-10-12 22:11:31.000000000 +0200
213
358
gboolean GdmHaltFound = FALSE;
214
359
gboolean GdmRebootFound = FALSE;
215
360
gboolean GdmSuspendFound = FALSE;
225
370
gdm_config_reload_string (GDM_KEY_CONFIGURATOR) ||
226
371
gdm_config_reload_string (GDM_KEY_INFO_MSG_FILE) ||
227
372
gdm_config_reload_string (GDM_KEY_INFO_MSG_FONT) ||
228
@@ -1177,6 +1179,7 @@
373
@@ -1150,6 +1152,7 @@
229
374
GdmHaltFound = gdm_working_command_exists (gdm_config_get_string (GDM_KEY_HALT));
230
375
GdmRebootFound = gdm_working_command_exists (gdm_config_get_string (GDM_KEY_REBOOT));
231
376
GdmSuspendFound = gdm_working_command_exists (gdm_config_get_string (GDM_KEY_SUSPEND));
233
378
GdmConfiguratorFound = gdm_working_command_exists (gdm_config_get_string (GDM_KEY_CONFIGURATOR));
236
diff -Nur gdm-2.14.9/gui/greeter/greeter_configuration.h gdm-2.14.9.new/gui/greeter/greeter_configuration.h
237
--- gdm-2.14.9/gui/greeter/greeter_configuration.h 2005-04-19 04:57:56.000000000 +0200
238
+++ gdm-2.14.9.new/gui/greeter/greeter_configuration.h 2006-06-16 10:42:27.000000000 +0200
381
diff -Nur gdm-2.16.1/gui/greeter/greeter_configuration.h gdm-2.16.1.new/gui/greeter/greeter_configuration.h
382
--- gdm-2.16.1/gui/greeter/greeter_configuration.h 2005-04-19 04:57:56.000000000 +0200
383
+++ gdm-2.16.1.new/gui/greeter/greeter_configuration.h 2006-10-12 22:11:31.000000000 +0200
239
384
@@ -30,10 +30,12 @@
240
385
extern gchar *GdmHalt;
241
386
extern gchar *GdmReboot;
249
394
extern gboolean GdmConfiguratorFound;
250
395
extern gchar *GdmSessionDir;
251
396
extern gchar *GdmDefaultSession;
252
diff -Nur gdm-2.14.9/gui/greeter/greeter_item.c gdm-2.14.9.new/gui/greeter/greeter_item.c
253
--- gdm-2.14.9/gui/greeter/greeter_item.c 2006-05-12 07:58:23.000000000 +0200
254
+++ gdm-2.14.9.new/gui/greeter/greeter_item.c 2006-06-16 10:42:27.000000000 +0200
397
diff -Nur gdm-2.16.1/gui/greeter/greeter_item.c gdm-2.16.1.new/gui/greeter/greeter_item.c
398
--- gdm-2.16.1/gui/greeter/greeter_item.c 2006-04-27 04:10:16.000000000 +0200
399
+++ gdm-2.16.1.new/gui/greeter/greeter_item.c 2006-10-12 22:11:31.000000000 +0200
255
400
@@ -214,6 +214,11 @@
256
401
(info->show_type != NULL &&
257
402
strcmp (info->show_type, "timed") == 0))
267
diff -Nur gdm-2.14.9/gui/greeter/greeter_system.c gdm-2.14.9.new/gui/greeter/greeter_system.c
268
--- gdm-2.14.9/gui/greeter/greeter_system.c 2006-06-10 00:14:49.000000000 +0200
269
+++ gdm-2.14.9.new/gui/greeter/greeter_system.c 2006-06-16 10:42:27.000000000 +0200
412
diff -Nur gdm-2.16.1/gui/greeter/greeter_system.c gdm-2.16.1.new/gui/greeter/greeter_system.c
413
--- gdm-2.16.1/gui/greeter/greeter_system.c 2006-08-03 04:32:39.000000000 +0200
414
+++ gdm-2.16.1.new/gui/greeter/greeter_system.c 2006-10-12 22:11:31.000000000 +0200
271
416
extern gboolean GdmHaltFound;
272
417
extern gboolean GdmRebootFound;
273
418
extern gboolean GdmSuspendFound;