1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# Fix shutdown without gdm
# https://bugs.gentoo.org/show_bug.cgi?id=259138
--- a/gnome-panel/panel-gdm.c 2009-02-15 20:33:57.000000000 +0000
+++ b/gnome-panel/panel-gdm.c 2009-02-15 20:38:47.000000000 +0000
@@ -233,6 +233,15 @@
char *response;
g_assert (data->fd <= 0);
+
+ if (g_file_test (GDM_PROTOCOL_SOCKET_PATH, G_FILE_TEST_EXISTS))
+ strcpy (addr.sun_path, GDM_PROTOCOL_SOCKET_PATH);
+ else if (g_file_test ("/tmp/.gdm_socket", G_FILE_TEST_EXISTS))
+ strcpy (addr.sun_path, "/tmp/.gdm_socket");
+ else {
+ gdm_shutdown_protocol_connection (data);
+ return FALSE;
+ }
data->fd = socket (AF_UNIX, SOCK_STREAM, 0);
if (data->fd < 0) {
@@ -242,11 +251,6 @@
return FALSE;
}
- if (g_file_test (GDM_PROTOCOL_SOCKET_PATH, G_FILE_TEST_EXISTS))
- strcpy (addr.sun_path, GDM_PROTOCOL_SOCKET_PATH);
- else
- strcpy (addr.sun_path, "/tmp/.gdm_socket");
-
addr.sun_family = AF_UNIX;
if (connect (data->fd, (struct sockaddr *) &addr, sizeof (addr)) < 0) {
@@ -398,6 +402,16 @@
gdm_shutdown_protocol_connection (&gdm_protocol_data);
}
+gboolean
+gdm_available (void)
+{
+ if (!gdm_init_protocol_connection (&gdm_protocol_data))
+ return FALSE;
+
+ gdm_shutdown_protocol_connection (&gdm_protocol_data);
+ return TRUE;
+}
+
void
gdm_new_login (void)
{
--- a/gnome-panel/panel-gdm.h 2009-02-15 20:33:57.000000000 +0000
+++ b/gnome-panel/panel-gdm.h 2009-02-15 20:38:58.000000000 +0000
@@ -46,6 +46,7 @@
void gdm_set_logout_action (GdmLogoutAction action);
GdmLogoutAction gdm_get_logout_action (void);
void gdm_new_login (void);
+gboolean gdm_available (void);
G_END_DECLS
--- a/gnome-panel/panel-logout.c 2009-02-15 20:33:57.000000000 +0000
+++ b/gnome-panel/panel-logout.c 2009-02-15 20:40:48.000000000 +0000
@@ -341,10 +341,12 @@
// FIXME need to verify that this response can be used
logout_dialog->priv->default_response = PANEL_LOGOUT_DIALOG_LOGOUT;
- //FIXME is gdm running?
- gtk_dialog_add_button (GTK_DIALOG (logout_dialog),
- _("_Switch User"),
- PANEL_LOGOUT_RESPONSE_SWITCH_USER);
+ //FIXME need to have a more flexible test for availability
+ if (gdm_available())
+ gtk_dialog_add_button (GTK_DIALOG (logout_dialog),
+ _("_Switch User"),
+ PANEL_LOGOUT_RESPONSE_SWITCH_USER);
+
gtk_dialog_add_button (GTK_DIALOG (logout_dialog),
GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL);
|