diff -uNr gnome-panel-2.24.3-logout/gnome-panel/panel-gdm.c gnome-panel-2.24.3-fixed/gnome-panel/panel-gdm.c --- gnome-panel-2.24.3-logout/gnome-panel/panel-gdm.c 2009-02-15 20:33:57.000000000 +0000 +++ gnome-panel-2.24.3-fixed/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) { diff -uNr gnome-panel-2.24.3-logout/gnome-panel/panel-gdm.h gnome-panel-2.24.3-fixed/gnome-panel/panel-gdm.h --- gnome-panel-2.24.3-logout/gnome-panel/panel-gdm.h 2009-02-15 20:33:57.000000000 +0000 +++ gnome-panel-2.24.3-fixed/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 diff -uNr gnome-panel-2.24.3-logout/gnome-panel/panel-logout.c gnome-panel-2.24.3-fixed/gnome-panel/panel-logout.c --- gnome-panel-2.24.3-logout/gnome-panel/panel-logout.c 2009-02-15 20:33:57.000000000 +0000 +++ gnome-panel-2.24.3-fixed/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);