Commit 0b6ad30c authored by Jiri (George) Lebl's avatar Jiri (George) Lebl Committed by George Lebl

Whack the gdmconfig again, gdmconfig is now really dead

Thu Apr 25 17:20:52 2002  George Lebl <jirka@5z.com>

	* Makefile.am, configure.in, gdm.spec.in, gdmsetup-security.in:
	  Whack the gdmconfig again, gdmconfig is now really dead

	* configure.in, docs/Makefile.am: don't build gdmconfig docs

	* gui/greeter/greeter.c, gui/greeter/greeter_canvas_item.c,
	  gui/greeter/greeter_events.c, gui/greeter/greeter_geometry.c,
	  gui/greeter/greeter_item.c, gui/greeter/greeter_item.h,
	  gui/greeter/greeter_item_capslock.c, gui/greeter/greeter_parser.c,
	  gui/greeter/greeter_parser.h:  Handle multi-item buttons so that
	  we can catch clicks on the labels next to the buttons in the
	  circles theme.  Add 'show modes' since some items may not be shown
	  depending on what the daemon tells us.  Reformat some code to be in
	  the same style.  Fix a bunch of leaks and some other minor fixes.
	  Also the text is now not taken from a "val" property but from the
	  content since text in a property is just on crack.

	* gui/greeter/greeter.dtd: update a tad but it's still out of date

	* gui/greeter/themes/circles/circles.xml: update for the above
	  changes
parent 05ed8db2
Thu Apr 25 17:20:52 2002 George Lebl <jirka@5z.com>
* Makefile.am, configure.in, gdm.spec.in, gdmsetup-security.in:
Whack the gdmconfig again, gdmconfig is now really dead
* configure.in, docs/Makefile.am: don't build gdmconfig docs
* gui/greeter/greeter.c, gui/greeter/greeter_canvas_item.c,
gui/greeter/greeter_events.c, gui/greeter/greeter_geometry.c,
gui/greeter/greeter_item.c, gui/greeter/greeter_item.h,
gui/greeter/greeter_item_capslock.c, gui/greeter/greeter_parser.c,
gui/greeter/greeter_parser.h: Handle multi-item buttons so that
we can catch clicks on the labels next to the buttons in the
circles theme. Add 'show modes' since some items may not be shown
depending on what the daemon tells us. Reformat some code to be in
the same style. Fix a bunch of leaks and some other minor fixes.
Also the text is now not taken from a "val" property but from the
content since text in a property is just on crack.
* gui/greeter/greeter.dtd: update a tad but it's still out of date
* gui/greeter/themes/circles/circles.xml: update for the above
changes
2002-04-25 Jacob Berkman <jacob@ximian.com>
* configure.in (AC_OUTPUT): add gdmsetup-security
......
......@@ -12,9 +12,7 @@ EXTRA_DIST = \
intltool-merge.in \
intltool-update.in \
gdm-restart.in \
gdm-safe-restart.in \
gdmconfig \
gdmconfig-security.in
gdm-safe-restart.in
sbin_SCRIPTS = gdm-restart gdm-safe-restart gdmconfig
......
......@@ -133,7 +133,7 @@ if test -z $LIBGLADE_CONVERT; then
AC_MSG_ERROR([libglade-convert (from libglade 2.0) is needed to build gdm.])
fi
dnl Allow users to run gdmconfig using the console helper PAM stuff.
dnl Allow users to run gdmsetup using the console helper PAM stuff.
if test "x$enable_console_helper" = "xyes"; then
AM_CONDITIONAL(CONSOLE_HELPER, true)
else
......@@ -425,8 +425,6 @@ pixmaps/Makefile
config/Makefile
docs/Makefile
docs/C/Makefile
docs/gdmconfig/Makefile
docs/gdmconfig/C/Makefile
omf-install/Makefile
po/Makefile.in
vicious-extensions/Makefile
......@@ -435,7 +433,6 @@ config/Gnome
config/gnomerc
gdm-restart
gdm-safe-restart
gdmconfig-security
gdmsetup-security
gdm.spec
])
......
SUBDIRS = C gdmconfig
SUBDIRS = C
EXTRA_DIST = sgmldocs.make
......@@ -114,7 +114,7 @@ exit 0
%{_datadir}/gnome/apps/*/*
%{_datadir}/gnome/help/*
%{_datadir}/omf/gdm
# %config %{sysconfdir}/security/console.apps/gdmconfig
# %config %{sysconfdir}/security/console.apps/gdmsetup
# %config %{sysconfdir}/X11/gdm/gnomerc
# %config %{sysconfdir}/X11/gdm/gdm.conf
# %config %{sysconfdir}/X11/gdm/locale.alias
......@@ -122,14 +122,14 @@ exit 0
# %config %{sysconfdir}/X11/gdm/Init/*
# %config %{sysconfdir}/X11/gdm/PreSession/*
# %config %{sysconfdir}/X11/gdm/PostSession/*
# %{_datadir}/gdm/gdmconfig.glade
# %{_datadir}/gdm/gdmsetup.glade
# %{_datadir}/gdm/gdmchooser.glade
# %{_datadir}/gnome/apps/System/gdmconfig.desktop
# %{_datadir}/gnome/apps/System/gdmsetup.desktop
# %{_datadir}/gnome/apps/Settings/gdmphotosetup.desktop
# %{_datadir}/locale/*/*/*
# %{_datadir}/pixmaps/*
# %{_datadir}/gnome/help/gdm/*
# %{_datadir}/gnome/help/gdmconfig/*
# %{_datadir}/gnome/help/gdmsetup/*
%attr(750, gdm, gdm) %dir %{localstatedir}/gdm
......
#!/bin/sh
# Just a script for some bin name compatibility
exec gdmsetup "$@"
#%PAM-1.0
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_permit.so
session optional /lib/security/pam_xauth.so
account required /lib/security/pam_permit.so
USER=root
PROGRAM=@EXPANDED_GDMCONFIGDIR@/gdmconfig
SESSION=true
FALLBACK=false
USER=root
PROGRAM=@EXPANDED_GDMCONFIGDIR@/gdmconfig
PROGRAM=@EXPANDED_GDMCONFIGDIR@/gdmsetup
SESSION=true
FALLBACK=false
......@@ -600,6 +600,35 @@ setup_cursor (GdkCursorType type)
gdk_cursor_destroy (cursor);
}
static char *
get_theme_file (const char *in)
{
char *file;
if (g_path_is_absolute (in))
{
file = g_strdup (in);
}
else
{
file = NULL;
if (DOING_GDM_DEVELOPMENT)
{
file = g_build_filename ("themes", in, NULL);
if (access (file, F_OK) != 0)
{
g_free (file);
file = NULL;
}
}
/* FIXME: look for the theme using the gnome_program thingie */
/* FIXME: Perhaps there should be a themedir config var */
if (file == NULL)
file = g_build_filename (GREETERTHEMEDIR, in, NULL);
}
return file;
}
int
main (int argc, char *argv[])
{
......@@ -703,30 +732,7 @@ main (int argc, char *argv[])
gdm_wm_screen.height);
gtk_container_add (GTK_CONTAINER (window), canvas);
if (g_path_is_absolute (GreeterConfTheme))
{
theme_file = g_strdup (GreeterConfTheme);
}
else
{
theme_file = NULL;
if (DOING_GDM_DEVELOPMENT)
{
theme_file = g_build_filename ("themes",
GreeterConfTheme,
NULL);
if (access (theme_file, F_OK) != 0)
{
g_free (theme_file);
theme_file = NULL;
}
}
if (theme_file == NULL)
theme_file = g_build_filename (GREETERTHEMEDIR,
GreeterConfTheme,
NULL);
}
theme_file = get_theme_file (GreeterConfTheme);
theme_dir = g_path_get_dirname (theme_file);
error = NULL;
......@@ -736,8 +742,64 @@ main (int argc, char *argv[])
gdm_wm_screen.height,
&error);
/* Try circles.xml */
if (root == NULL)
g_warning ("Failed to parse file: %s!", error->message);
{
g_free (theme_file);
g_free (theme_dir);
theme_file = get_theme_file (GreeterConfTheme);
theme_dir = g_path_get_dirname (theme_file);
root = greeter_parse (theme_file, theme_dir,
GNOME_CANVAS (canvas),
gdm_wm_screen.width,
gdm_wm_screen.height,
NULL);
}
if (root == NULL)
{
GtkWidget *dialog;
gdm_wm_init (0);
gdm_wm_focus_new_windows (TRUE);
dialog = gtk_message_dialog_new (NULL /* parent */,
GTK_DIALOG_MODAL /* flags */,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
_("There was an error loading the "
"theme, and the default theme "
"also could not have been loaded, "
"I will attempt to start the "
"standard greeter"));
gtk_widget_show_all (dialog);
gdm_wm_center_window (GTK_WINDOW (dialog));
gtk_dialog_run (GTK_DIALOG (dialog));
execl (EXPANDED_BINDIR "/gdmlogin", EXPANDED_BINDIR "/gdmlogin", NULL);
execlp ("gdmlogin", "gdmlogin", NULL);
dialog = gtk_message_dialog_new (NULL /* parent */,
GTK_DIALOG_MODAL /* flags */,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
_("I could not start the standard "
"greeter. This display will abort "
"and you may have to login another "
"way and fix the installation of "
"gdm"));
gtk_widget_show_all (dialog);
gdm_wm_center_window (GTK_WINDOW (dialog));
gtk_dialog_run (GTK_DIALOG (dialog));
_exit (DISPLAY_ABORT);
}
greeter_layout (root, GNOME_CANVAS (canvas));
......@@ -748,79 +810,83 @@ main (int argc, char *argv[])
gtk_widget_show_now (window);
/* can it ever happen that it'd be NULL here ??? */
if (window->window != NULL) {
gdm_wm_init (GDK_WINDOW_XWINDOW (window->window));
if (window->window != NULL)
{
gdm_wm_init (GDK_WINDOW_XWINDOW (window->window));
/* Run the focus, note that this will work no matter what
* since gdm_wm_init will set the display to the gdk one
* if it fails */
gdm_wm_focus_window (GDK_WINDOW_XWINDOW (window->window));
}
/* Run the focus, note that this will work no matter what
* since gdm_wm_init will set the display to the gdk one
* if it fails */
gdm_wm_focus_window (GDK_WINDOW_XWINDOW (window->window));
}
if (session_dir_whacked_out) {
GtkWidget *dialog;
if (session_dir_whacked_out)
{
GtkWidget *dialog;
gdm_wm_focus_new_windows (TRUE);
gdm_wm_focus_new_windows (TRUE);
dialog = gtk_message_dialog_new (NULL /* parent */,
GTK_DIALOG_MODAL /* flags */,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
_("Your session directory is missing or empty!\n\n"
"There are two available sessions you can use, but\n"
"you should log in and correct the gdm configuration."));
gtk_widget_show_all (dialog);
gdm_wm_center_window (GTK_WINDOW (dialog));
dialog = gtk_message_dialog_new (NULL /* parent */,
GTK_DIALOG_MODAL /* flags */,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
_("Your session directory is missing or empty!\n\n"
"There are two available sessions you can use, but\n"
"you should log in and correct the gdm configuration."));
gtk_widget_show_all (dialog);
gdm_wm_center_window (GTK_WINDOW (dialog));
gdm_wm_no_login_focus_push ();
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
gdm_wm_no_login_focus_pop ();
}
gdm_wm_no_login_focus_push ();
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
gdm_wm_no_login_focus_pop ();
}
if (g_getenv ("GDM_WHACKED_GREETER_CONFIG") != NULL) {
GtkWidget *dialog;
if (g_getenv ("GDM_WHACKED_GREETER_CONFIG") != NULL)
{
GtkWidget *dialog;
gdm_wm_focus_new_windows (TRUE);
gdm_wm_focus_new_windows (TRUE);
dialog = gtk_message_dialog_new (NULL /* parent */,
GTK_DIALOG_MODAL /* flags */,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
_("The configuration file contains an invalid command\n"
"line for the login dialog, and thus I ran the\n"
"default command. Please fix your configuration."));
gtk_widget_show_all (dialog);
gdm_wm_center_window (GTK_WINDOW (dialog));
dialog = gtk_message_dialog_new (NULL /* parent */,
GTK_DIALOG_MODAL /* flags */,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
_("The configuration file contains an invalid command\n"
"line for the login dialog, and thus I ran the\n"
"default command. Please fix your configuration."));
gtk_widget_show_all (dialog);
gdm_wm_center_window (GTK_WINDOW (dialog));
gdm_wm_no_login_focus_push ();
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
gdm_wm_no_login_focus_pop ();
gdm_wm_no_login_focus_push ();
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
gdm_wm_no_login_focus_pop ();
}
/* There was no config file */
if (used_defaults) {
GtkWidget *dialog;
gdm_wm_focus_new_windows (TRUE);
dialog = gtk_message_dialog_new (NULL /* parent */,
GTK_DIALOG_MODAL /* flags */,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
_("The configuration was not found. GDM is using\n"
"defaults to run this session. You should log in\n"
"and create a configuration file with the GDM\n"
"configuration program."));
gtk_widget_show_all (dialog);
gdm_wm_center_window (GTK_WINDOW (dialog));
gdm_wm_no_login_focus_push ();
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
gdm_wm_no_login_focus_pop ();
}
if (used_defaults)
{
GtkWidget *dialog;
gdm_wm_focus_new_windows (TRUE);
dialog = gtk_message_dialog_new (NULL /* parent */,
GTK_DIALOG_MODAL /* flags */,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
_("The configuration was not found. GDM is using\n"
"defaults to run this session. You should log in\n"
"and create a configuration file with the GDM\n"
"configuration program."));
gtk_widget_show_all (dialog);
gdm_wm_center_window (GTK_WINDOW (dialog));
gdm_wm_no_login_focus_push ();
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
gdm_wm_no_login_focus_pop ();
}
gtk_main ();
......
<!-- dtd for greeter -->
<!-- FIXME: this doesn't seem up to date -- George -->
<!ENTITY % colorattrs
"file CDATA #IMPLIED
......@@ -8,10 +9,11 @@
>
<!ELEMENT greeter (item+)>
<!ELEMENT item (pos,normal?,active?,prelight?,children?)>
<!ELEMENT item (pos,normal?,active?,prelight?,children?,show?,text?)>
<!ELEMENT children (item+)>
<!ELEMENT pos EMPTY>
<!ELEMENT text EMPTY>
<!ELEMENT show EMPTY>
<!ELEMENT text (#PCDATA)>
<!ELEMENT normal EMPTY>
<!ELEMENT active EMPTY>
<!ELEMENT prelight EMPTY>
......@@ -38,3 +40,7 @@
<!ATTLIST prelight
%colorattrs;
>
<!ATTLIST show
modes CDATA #REQUIRED
>
......@@ -102,7 +102,10 @@ greeter_item_create_canvas_item (GreeterItemInfo *item)
if (item->item != NULL)
return;
if ( ! greeter_item_is_visible (item))
return;
g_assert (item->parent->group_item);
if (item->fixed_children != NULL ||
......@@ -205,7 +208,8 @@ greeter_item_create_canvas_item (GreeterItemInfo *item)
if (item->item_type == GREETER_ITEM_TYPE_RECT ||
item->item_type == GREETER_ITEM_TYPE_SVG ||
item->item_type == GREETER_ITEM_TYPE_PIXMAP)
item->item_type == GREETER_ITEM_TYPE_PIXMAP ||
item->item_type == GREETER_ITEM_TYPE_LABEL)
gtk_signal_connect (GTK_OBJECT (item->item), "event",
(GtkSignalFunc) greeter_item_event_handler,
item);
......
......@@ -12,6 +12,81 @@ struct CallbackInfo {
static GHashTable *callback_hash = NULL;
static void
state_run (GreeterItemInfo *info,
GreeterItemState old_state)
{
if (info->state != old_state &&
info->item != NULL)
{
if (info->pixbufs[info->state])
gnome_canvas_item_set (info->item,
"pixbuf", info->pixbufs[info->state],
NULL);
if (info->have_color[info->state])
gnome_canvas_item_set (info->item,
"fill_color_rgba", info->colors[info->state],
NULL);
if (info->fonts[info->state])
gnome_canvas_item_set (info->item,
"font_desc", info->fonts[info->state],
NULL);
}
}
static void propagate_state (GreeterItemInfo *info,
GreeterItemState old_state);
static void
propagate_state_foreach (gpointer data, gpointer user_data)
{
GreeterItemInfo *info = data;
GreeterItemState state = GPOINTER_TO_INT (user_data);
GreeterItemState old_state;
old_state = info->state;
info->state = state;
propagate_state (info, old_state);
}
static void
propagate_state (GreeterItemInfo *info,
GreeterItemState old_state)
{
state_run (info, old_state);
g_list_foreach (info->fixed_children, propagate_state_foreach,
GINT_TO_POINTER (info->state));
g_list_foreach (info->box_children, propagate_state_foreach,
GINT_TO_POINTER (info->state));
}
static void propagate_reset_state (GreeterItemInfo *info,
GreeterItemState old_state);
static void
propagate_reset_state_foreach (gpointer data, gpointer user_data)
{
GreeterItemInfo *info = data;
GreeterItemState old_state;
old_state = info->state;
info->state = info->base_state;
propagate_state (info, old_state);
}
static void
propagate_reset_state (GreeterItemInfo *info,
GreeterItemState old_state)
{
state_run (info, old_state);
g_list_foreach (info->fixed_children, propagate_reset_state_foreach, NULL);
g_list_foreach (info->box_children, propagate_reset_state_foreach, NULL);
}
gint
greeter_item_event_handler (GnomeCanvasItem *item,
GdkEvent *event,
......@@ -19,8 +94,21 @@ greeter_item_event_handler (GnomeCanvasItem *item,
{
GreeterItemState old_state;
GreeterItemInfo *info;
GreeterItemInfo *button;
info = data;
button = greeter_item_find_my_button (info);
if (button != NULL && button != info)
{
/* FIXME: this is a hack, we have not really left the container,
* but the container gets a stupid leave event and
* we send it an enter event back, it does two event propagations
* one of them is pointless. */
/* if this is a button, fake an event on the button */
return greeter_item_event_handler (button->item,
event,
button);
}
old_state = info->state;
......@@ -65,17 +153,19 @@ greeter_item_event_handler (GnomeCanvasItem *item,
else
info->state = GREETER_ITEM_STATE_NORMAL;
info->base_state = info->state;
if (info->state != old_state)
{
if (info->pixbufs[info->state])
gnome_canvas_item_set (item,
"pixbuf", info->pixbufs[info->state],
NULL);
if (info->have_color[info->state])
gnome_canvas_item_set (item,
"fill_color_rgba", info->colors[info->state],
NULL);
if (info->button)
{
if (info->state == GREETER_ITEM_STATE_NORMAL)
propagate_reset_state (info, old_state);
else
propagate_state (info, old_state);
}
else
state_run (info, old_state);
}
return FALSE;
......
......@@ -25,6 +25,9 @@ greeter_item_size_allocate (GreeterItemInfo *item,
{
item->allocation = *allocation;
if ( ! greeter_item_is_visible (item))
return;
if (item->item == NULL)
greeter_item_create_canvas_item (item);
......@@ -79,6 +82,8 @@ fixup_from_anchor (GtkAllocation *rect,
rect->x -= rect->width;
rect->y -= rect->height;
break;
default:
break;
}
}
......@@ -98,7 +103,11 @@ greeter_size_allocate_fixed (GreeterItemInfo *fixed,
while (l != NULL)
{
child = l->data;
l = l->next;
if ( ! greeter_item_is_visible (child))
continue;
greeter_item_size_request (child,
&requisition,
fixed->allocation.width,
......@@ -127,8 +136,6 @@ greeter_size_allocate_fixed (GreeterItemInfo *fixed,
greeter_item_size_allocate (child,
&child_allocation,
canvas);
l = l->next;
}
}
......@@ -162,9 +169,12 @@ greeter_size_allocate_box (GreeterItemInfo *box,
child = children->data;
children = children->next;
nvis_children += 1;
if (child->expand)
nexpand_children += 1;
if (greeter_item_is_visible (child))
{
nvis_children += 1;
if (child->expand)
nexpand_children += 1;
}
}
if (nvis_children > 0)
......@@ -221,6 +231,9 @@ greeter_size_allocate_box (GreeterItemInfo *box,
child = children->data;
children = children->next;
if ( ! greeter_item_is_visible (child))
continue;
if (box->box_homogeneous)
{
if (nvis_children == 1)
......@@ -324,6 +337,9 @@ greeter_size_request_box (GreeterItemInfo *box,
child = children->data;
children = children->next;
if ( ! greeter_item_is_visible (child))
continue;
greeter_item_size_request (child,
&child_requisition,
0, 0, canvas);
......@@ -433,7 +449,7 @@ greeter_item_size_request (GreeterItemInfo *item,
req->width = x2 - x1;
req->height = y2 - y1;
gtk_object_destroy (canvas_item);
gtk_object_destroy (GTK_OBJECT (canvas_item));
g_free (text);
}
......
......@@ -35,6 +35,11 @@ greeter_item_info_new (GreeterItemInfo *parent,
info->box_orientation = GTK_ORIENTATION_VERTICAL;
info->state = GREETER_ITEM_STATE_NORMAL;
info->base_state = GREETER_ITEM_STATE_NORMAL;
info->show_modes = GREETER_ITEM_SHOW_EVERYWHERE;
info->button = FALSE;
return info;
}
......@@ -72,22 +77,25 @@ greeter_item_update_text (GreeterItemInfo *info)
}
static void
get_clock (char *str, int str_len)
static char *
get_clock (void)
{
char str[256];
struct tm *the_tm;
time_t the_time;
time (&the_time);
the_tm = localtime (&the_time);
if (strftime (str, str_len, "%a %b %d, %I:%M %p", the_tm) == 0) {
if (strftime (str, sizeof (str)-1, _("%a %b %d, %I:%M %p"), the_tm) == 0) {
/* according to docs, if the string does not fit, the
* contents of str are undefined, thus just use
* ??? */
strcpy (str, "???");
}
str [str_len-1] = '\0'; /* just for sanity */
str [sizeof (str)-1] = '\0'; /* just for sanity */
return g_locale_to_utf8 (str, -1, NULL, NULL, NULL);
}
......@@ -97,6 +105,7 @@ greeter_item_expand_text (const char *text)
GString *str;
const char *p;
const char *q;
char *clock;
int r;
char buf[256];
......@@ -129,8 +138,9 @@ greeter_item_expand_text (const char *text)
g_string_append (str, buf);
break;
case 'c':
get_clock (buf, sizeof(buf));
g_string_append (str, buf);
clock = get_clock ();
g_string_append (str, clock);
g_free (clock);
break;
case 0:
g_warning ("Unescape %% at end of text\n");
......@@ -161,3 +171,56 @@ greeter_item_expand_text (const char *text)
return g_string_free (str, FALSE);
}
gboolean
greeter_item_is_visible (GreeterItemInfo *info)
{
static gboolean checked = FALSE;
static gboolean GDM_IS_LOCAL = FALSE;
static gboolean GDM_FLEXI_SERVER = FALSE;
static gboolean GDM_TIMED_LOGIN_OK = FALSE;
if ( ! checked)
{
if (g_getenv ("GDM_IS_LOCAL") != NULL)
GDM_IS_LOCAL = TRUE;
if (g_getenv ("GDM_FLEXI_SERVER") != NULL)
GDM_FLEXI_SERVER = TRUE;
if (g_getenv ("GDM_TIMED_LOGIN_OK") != NULL)
GDM_TIMED_LOGIN_OK = TRUE;
}
if (GDM_IS_LOCAL && ! GDM_FLEXI_SERVER &&
! (info->show_modes & GREETER_ITEM_SHOW_CONSOLE_FIXED))
return FALSE;