source: proiecte/PPPP/gdm/debian/patches/22_shutdown_menu.patch @ 134

Last change on this file since 134 was 134, checked in by (none), 14 years ago

gdm sources with the modifications for webcam

File size: 9.3 KB
RevLine 
[134]1#
2# Description: Move shutdown menu to lower right hand corner as it is easy to accidentally use below user list
3# Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/434338
4# Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=596151
5#
6diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/gui/simple-greeter/gdm-greeter-login-window.c gdm-2.28.1.new/gui/simple-greeter/gdm-greeter-login-window.c
7--- gdm-2.28.1/gui/simple-greeter/gdm-greeter-login-window.c    2009-10-20 12:30:15.000000000 +1100
8+++ gdm-2.28.1.new/gui/simple-greeter/gdm-greeter-login-window.c        2009-10-20 12:30:16.000000000 +1100
9@@ -550,6 +550,10 @@
10         show_suspend_button = FALSE;
11 #endif
12 
13+        /* Buttons now in shutdown menu */
14+        show_restart_buttons = FALSE;
15+        show_suspend_button = FALSE;
16+
17         /* we want to run this even if we're supposed to
18            be in the mode already so that we reset everything
19            to a known state */
20diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/gui/simple-greeter/gdm-greeter-panel.c gdm-2.28.1.new/gui/simple-greeter/gdm-greeter-panel.c
21--- gdm-2.28.1/gui/simple-greeter/gdm-greeter-panel.c   2009-10-20 09:12:45.000000000 +1100
22+++ gdm-2.28.1.new/gui/simple-greeter/gdm-greeter-panel.c       2009-10-20 12:30:16.000000000 +1100
23@@ -34,6 +34,8 @@
24 
25 #include <gconf/gconf-client.h>
26 
27+#include <devkit-power-gobject/devicekit-power.h>
28+
29 #include "gdm-languages.h"
30 #include "gdm-layouts.h"
31 #include "gdm-greeter-panel.h"
32@@ -66,6 +68,8 @@
33 
34         char                   *default_session_name;
35         char                   *default_language_name;
36+
37+        DkpClient              *dkp_client;
38 };
39 
40 enum {
41@@ -564,6 +568,138 @@
42 }
43 
44 static void
45+do_system_suspend (GtkWidget       *widget,
46+                   GdmGreeterPanel       *login_window)
47+{
48+        gboolean ret;
49+        GError *error;
50+       
51+        g_debug ("GdmGreeterPanel: Suspend button clicked");
52+        ret = dkp_client_suspend (login_window->priv->dkp_client, &error);
53+        if (!ret) {
54+                g_warning ("Suspend failure: %s", error->message);
55+                g_error_free (error);
56+        }
57+}
58+
59+static void
60+do_system_hibernate (GtkWidget       *widget,
61+                     GdmGreeterPanel *login_window)
62+{
63+        gboolean ret;
64+        GError *error;
65+       
66+        g_debug ("GdmGreeterPanel: Hibernate button clicked");
67+        ret = dkp_client_hibernate (login_window->priv->dkp_client, &error);
68+        if (!ret) {
69+                g_warning ("Hibernate failure: %s", error->message);
70+                g_error_free (error);
71+        }
72+}
73+
74+#include <dbus/dbus-glib.h>
75+
76+#define CK_NAME              "org.freedesktop.ConsoleKit"
77+#define CK_MANAGER_PATH      "/org/freedesktop/ConsoleKit/Manager"
78+#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager"
79+
80+static gboolean
81+try_system_stop (DBusGConnection *connection,
82+                 GError         **error)
83+{
84+        DBusGProxy      *proxy;
85+        gboolean         res;
86+
87+        g_debug ("GdmGreeterPanel: trying to stop system");
88+
89+        proxy = dbus_g_proxy_new_for_name (connection,
90+                                           CK_NAME,
91+                                           CK_MANAGER_PATH,
92+                                           CK_MANAGER_INTERFACE);
93+        res = dbus_g_proxy_call_with_timeout (proxy,
94+                                              "Stop",
95+                                              INT_MAX,
96+                                              error,
97+                                              /* parameters: */
98+                                              G_TYPE_INVALID,
99+                                              /* return values: */
100+                                              G_TYPE_INVALID);
101+        return res;
102+}
103+
104+static gboolean
105+try_system_restart (DBusGConnection *connection,
106+                    GError         **error)
107+{
108+        DBusGProxy      *proxy;
109+        gboolean         res;
110+
111+        g_debug ("GdmGreeterPanel: trying to restart system");
112+
113+        proxy = dbus_g_proxy_new_for_name (connection,
114+                                           CK_NAME,
115+                                           CK_MANAGER_PATH,
116+                                           CK_MANAGER_INTERFACE);
117+        res = dbus_g_proxy_call_with_timeout (proxy,
118+                                              "Restart",
119+                                              INT_MAX,
120+                                              error,
121+                                              /* parameters: */
122+                                              G_TYPE_INVALID,
123+                                              /* return values: */
124+                                              G_TYPE_INVALID);
125+        return res;
126+}
127+
128+static void
129+do_system_restart ()
130+{
131+        gboolean         res;
132+        GError          *error;
133+        DBusGConnection *connection;
134+
135+        error = NULL;
136+        connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
137+        if (connection == NULL) {
138+                g_warning ("Unable to get system bus connection: %s", error->message);
139+                g_error_free (error);
140+                return;
141+        }
142+
143+        res = try_system_restart (connection, &error);
144+        if (!res) {
145+                g_debug ("GdmGreeterPanel: unable to restart system: %s: %s",
146+                         dbus_g_error_get_name (error),
147+                         error->message);
148+                g_error_free (error);
149+        }
150+}
151+
152+static void
153+do_system_stop ()
154+{
155+        gboolean         res;
156+        GError          *error;
157+        DBusGConnection *connection;
158+
159+        error = NULL;
160+        connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
161+        if (connection == NULL) {
162+                g_warning ("Unable to get system bus connection: %s", error->message);
163+                g_error_free (error);
164+                return;
165+        }
166+
167+        res = try_system_stop (connection, &error);
168+        if (!res) {
169+                g_debug ("GdmGreeterPanel: unable to stop system: %s: %s",
170+                         dbus_g_error_get_name (error),
171+                         error->message);
172+                g_error_free (error);
173+        }
174+}
175+
176+static void
177 gdm_greeter_panel_init (GdmGreeterPanel *panel)
178 {
179         NaTray    *tray;
180@@ -642,6 +778,47 @@
181                 gtk_widget_show (panel->priv->hostname_label);
182         }
183 
184+        {
185+                GtkWidget *shutdown_menu;
186+                GtkWidget *menu, *menu_item;
187+
188+                panel->priv->dkp_client = dkp_client_new ();
189+
190+                shutdown_menu = gtk_menu_bar_new ();
191+
192+                menu_item = gtk_image_menu_item_new ();
193+                menu = gtk_menu_new ();
194+                gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu);
195+                gtk_menu_item_set_label (GTK_MENU_ITEM (menu_item), "");
196+                gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item),
197+                                               gtk_image_new_from_icon_name ("system-shutdown", GTK_ICON_SIZE_BUTTON));
198+                gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menu_item), TRUE);
199+                gtk_menu_shell_append (GTK_MENU_SHELL (shutdown_menu), menu_item);
200+
201+                if (dkp_client_can_suspend (panel->priv->dkp_client)) {
202+                        menu_item = gtk_menu_item_new_with_label (_("Suspend"));
203+                        g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_suspend), panel);
204+                        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
205+                }
206+
207+                if (dkp_client_can_hibernate (panel->priv->dkp_client)) {           
208+                        menu_item = gtk_menu_item_new_with_label (_("Hibernate"));
209+                        g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_hibernate), panel);
210+                        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
211+                }
212+
213+                menu_item = gtk_menu_item_new_with_label (_("Restart"));
214+                g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_restart), NULL);
215+                gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
216+
217+                menu_item = gtk_menu_item_new_with_label (_("Shut Down"));
218+                g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_stop), NULL);
219+                gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
220+
221+                gtk_box_pack_end (GTK_BOX (panel->priv->hbox), GTK_WIDGET (shutdown_menu), FALSE, FALSE, 0);
222+                gtk_widget_show_all (GTK_WIDGET (shutdown_menu));
223+        }
224+
225         panel->priv->clock = gdm_clock_widget_new ();
226         gtk_box_pack_end (GTK_BOX (panel->priv->hbox),
227                             GTK_WIDGET (panel->priv->clock), FALSE, FALSE, 6);
228diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/gui/simple-greeter/Makefile.am gdm-2.28.1.new/gui/simple-greeter/Makefile.am
229--- gdm-2.28.1/gui/simple-greeter/Makefile.am   2009-10-20 12:30:15.000000000 +1100
230+++ gdm-2.28.1.new/gui/simple-greeter/Makefile.am       2009-10-20 12:33:43.000000000 +1100
231@@ -142,6 +142,7 @@
232        $(top_builddir)/common/libgdmcommon.la  \
233        $(top_builddir)/gui/simple-greeter/libnotificationarea/libnotificationarea.la   \
234        $(SIMPLE_GREETER_LIBS)          \
235+       $(DEVKIT_POWER_LIBS)            \
236        $(GTK_LIBS)                     \
237        $(GCONF_LIBS)                   \
238        $(LIBXKLAVIER_LIBS)             \
Note: See TracBrowser for help on using the repository browser.