~ubuntu-branches/ubuntu/feisty/gdm/feisty

« back to all changes in this revision

Viewing changes to debian/patches/11_powermanagement.patch

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2006-10-12 22:26:09 UTC
  • Revision ID: james.westby@ubuntu.com-20061012222609-vf2wiudbfktzrf1k
Tags: 2.16.1-0ubuntu3
* debian/patches/11_powermanagement.patch:
  - updated to make hibernate work from the login screen too (Ubuntu: #3642)

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
4
 
@@ -597,6 +597,42 @@
 
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
 
4
@@ -634,6 +634,42 @@
5
5
        }
6
6
 }
7
7
 
44
44
 #ifdef __linux__
45
45
 static void
46
46
 change_to_first_and_clear (gboolean restart)
47
 
@@ -3228,9 +3264,80 @@
 
47
@@ -810,6 +846,7 @@
 
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;
 
55
@@ -819,6 +856,7 @@
 
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;
 
63
@@ -870,6 +908,10 @@
 
64
            if (gdm_get_value_string (GDM_KEY_SUSPEND) == NULL)
 
65
                    status = DISPLAY_REMANAGE;
 
66
            break;
 
67
+    case DISPLAY_HIBERNATE:
 
68
+           if (gdm_get_value_string (GDM_KEY_HIBERNATE) == NULL)
 
69
+                   status = DISPLAY_REMANAGE;
 
70
+           break;
 
71
     default:
 
72
            break;
 
73
     }
 
74
@@ -921,6 +963,15 @@
 
75
        goto start_autopsy;
 
76
        break;
 
77
 
 
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 ();
 
82
+
 
83
+       status = DISPLAY_REMANAGE;
 
84
+       goto start_autopsy;
 
85
+       break;
 
86
+
 
87
     case DISPLAY_RESTARTGDM:
 
88
        gdm_restart_now ();
 
89
        break;
 
90
@@ -1085,6 +1136,10 @@
 
91
                suspend_machine ();
 
92
                break;
 
93
 
 
94
+       case GDM_LOGOUT_ACTION_HIBERNATE:
 
95
+               hibernate_machine ();
 
96
+               break;
 
97
+
 
98
        default:
 
99
                break;
 
100
        }
 
101
@@ -2359,6 +2414,22 @@
 
102
                if (sysmenu && gdm_get_value_string (GDM_KEY_SUSPEND) != NULL) {
 
103
                        suspend_machine ();
 
104
                }
 
105
+       } else if (strncmp (msg, GDM_SOP_HIBERNATE_MACHINE " ",
 
106
+                           strlen (GDM_SOP_HIBERNATE_MACHINE " ")) == 0) {
 
107
+               GdmDisplay *d;
 
108
+               long slave_pid;
 
109
+               gboolean sysmenu;
 
110
+
 
111
+               if (sscanf (msg, GDM_SOP_HIBERNATE_MACHINE " %ld", &slave_pid) != 1)
 
112
+                       return;
 
113
+               d = gdm_display_lookup (slave_pid);
 
114
+
 
115
+               gdm_info (_("Master hibernating..."));
 
116
+
 
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 ();
 
120
+               }
 
121
        } else if (strncmp (msg, GDM_SOP_CHOSEN_THEME " ",
 
122
                            strlen (GDM_SOP_CHOSEN_THEME " ")) == 0) {
 
123
                GdmDisplay *d;
 
124
@@ -3269,9 +3340,80 @@
48
125
                                g_string_append (msg, "!");
49
126
                        sep = ";";
50
127
                }
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;
 
207
                                was_ok = TRUE;
 
208
                        }
 
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;
 
214
+                               was_ok = TRUE;
 
215
+                       }
 
216
                }
 
217
                if (was_ok) {
 
218
                        gdm_connection_write (conn, "OK\n");
 
219
@@ -3371,6 +3520,13 @@
 
220
                                        GDM_LOGOUT_ACTION_SUSPEND;
 
221
                                was_ok = TRUE;
 
222
                        }
 
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;
 
228
+                               was_ok = TRUE;
 
229
+                       }
 
230
                }
 
231
                if (was_ok) {
 
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);
156
261
        else
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;
191
296
 
192
 
@@ -1167,6 +1171,8 @@
 
297
@@ -706,6 +710,7 @@
 
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> */
 
303
 
 
304
 /* Start a new standard X flexible server */
 
305
@@ -1166,6 +1171,8 @@
193
306
  *      200 = Too many messages
194
307
  *      999 = Unknown error
195
308
  */
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"
206
319
 /*
207
320
  */
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
212
 
@@ -70,6 +70,7 @@
 
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 */
 
336
                        return TRUE;
 
337
+               case GDM_INTERRUPT_HIBERNATE:
 
338
+                       if (d->attached &&
 
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,
 
343
+                                       (long)getpid ());
 
344
+
 
345
+                               gdm_slave_send (msg, FALSE /* wait_for_ack */);
 
346
+                               g_free (msg);
 
347
+                       }
 
348
+                       /* Not interrupted, continue reading input,
 
349
+                        * just proxy this to the master server */
 
350
+                       return TRUE;
 
351
                case GDM_INTERRUPT_LOGIN_SOUND:
 
352
                        if (d->attached &&
 
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
 
357
@@ -71,6 +71,7 @@
213
358
 gboolean GdmHaltFound          = FALSE;
214
359
 gboolean GdmRebootFound        = FALSE;
215
360
 gboolean GdmSuspendFound       = FALSE;
217
362
 gboolean GdmConfiguratorFound  = FALSE;
218
363
 
219
364
 /* FIXME: hack */
220
 
@@ -822,6 +823,7 @@
 
365
@@ -806,6 +807,7 @@
221
366
            gdm_config_reload_string (GDM_KEY_HALT) ||
222
367
            gdm_config_reload_string (GDM_KEY_REBOOT) ||
223
368
            gdm_config_reload_string (GDM_KEY_SUSPEND) ||
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));
234
379
 
235
380
 
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))
264
409
 
265
410
   return TRUE;
266
411
 }
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
270
 
@@ -39,6 +39,7 @@
 
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
 
415
@@ -40,6 +40,7 @@
271
416
 extern gboolean GdmHaltFound;
272
417
 extern gboolean GdmRebootFound;
273
418
 extern gboolean GdmSuspendFound;