12259
|
1 |
--- src/gpm-manager.c.orig 2008-03-30 01:28:02.535684000 +0800
|
|
2 |
+++ src/gpm-manager.c 2008-03-30 01:23:38.211239000 +0800
|
17490
|
3 |
@@ -436,6 +414,61 @@
|
12259
|
4 |
return TRUE;
|
|
5 |
}
|
|
6 |
|
|
7 |
+
|
|
8 |
+#define GSM_DBUS_SERVICE "org.gnome.SessionManager"
|
|
9 |
+#define GSM_DBUS_PATH "/org/gnome/SessionManager"
|
|
10 |
+#define GSM_DBUS_INTERFACE "org.gnome.SessionManager"
|
|
11 |
+
|
17490
|
12 |
+#include <pwd.h>
|
|
13 |
+
|
|
14 |
+static gboolean
|
|
15 |
+can_shutdown ()
|
|
16 |
+{
|
|
17 |
+ uid_t uid;
|
|
18 |
+ struct passwd *pw;
|
|
19 |
+
|
|
20 |
+ uid = getuid ();
|
|
21 |
+ if ((pw = getpwuid (uid)) != NULL) {
|
|
22 |
+ return (gboolean)chkauthattr ("solaris.system.shutdown", pw->pw_name);
|
|
23 |
+ }
|
|
24 |
+ return FALSE;
|
|
25 |
+}
|
|
26 |
+
|
12259
|
27 |
+/**
|
|
28 |
+ * gsm_dbus_method:
|
|
29 |
+ * @method: The g-s-m DBUS method name, e.g. "Logout" or "Shutdown"
|
|
30 |
+ **/
|
|
31 |
+static gboolean
|
|
32 |
+gpm_manager_action_interactive (GpmManager *manager)
|
|
33 |
+{
|
|
34 |
+ DBusGConnection *connection;
|
|
35 |
+ DBusGProxy *proxy;
|
|
36 |
+ GError *error = NULL;
|
|
37 |
+
|
17490
|
38 |
+ if (can_shutdown() == FALSE)
|
|
39 |
+ return FALSE;
|
|
40 |
+
|
12259
|
41 |
+ connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
|
|
42 |
+ if (connection == NULL) {
|
|
43 |
+ if (error) {
|
13729
|
44 |
+ egg_warning ("Couldn't connect to PowerManager %s",
|
12259
|
45 |
+ error->message);
|
|
46 |
+ g_error_free (error);
|
|
47 |
+ }
|
|
48 |
+ return FALSE;
|
|
49 |
+ }
|
|
50 |
+
|
|
51 |
+ proxy = dbus_g_proxy_new_for_name (connection,
|
|
52 |
+ GSM_DBUS_SERVICE,
|
|
53 |
+ GSM_DBUS_PATH,
|
|
54 |
+ GSM_DBUS_INTERFACE);
|
|
55 |
+ dbus_g_proxy_call_no_reply (proxy, "Shutdown",
|
|
56 |
+ G_TYPE_INVALID,
|
|
57 |
+ G_TYPE_INVALID);
|
|
58 |
+ g_object_unref (proxy);
|
|
59 |
+ return TRUE;
|
|
60 |
+}
|
|
61 |
+
|
|
62 |
/**
|
|
63 |
* manager_policy_do:
|
|
64 |
* @manager: This class instance
|
|
65 |
@@ -495,9 +510,8 @@
|
|
66 |
} else if (strcmp (action, ACTION_INTERACTIVE) == 0) {
|
|
67 |
gpm_info_explain_reason (manager->priv->info, GPM_EVENT_NOTIFICATION,
|
|
68 |
_("GNOME interactive logout."), reason);
|
|
69 |
- gnome_client_request_save (gnome_master_client (),
|
|
70 |
- GNOME_SAVE_GLOBAL,
|
|
71 |
- TRUE, GNOME_INTERACT_ANY, FALSE, TRUE);
|
|
72 |
+ if (gpm_manager_action_interactive (manager) == FALSE)
|
13729
|
73 |
+ egg_warning ("Couldn't ask for interactive dialog from session manager");
|
12259
|
74 |
} else {
|
13729
|
75 |
egg_warning ("unknown action %s", action);
|
12259
|
76 |
}
|