diff options
author | George Lebl <jirka@5z.com> | 2002-07-09 02:50:00 +0000 |
---|---|---|
committer | George Lebl <jirka@src.gnome.org> | 2002-07-09 02:50:00 +0000 |
commit | 1747a04db0d98a53dd2bec91ec34e518a7038e7a (patch) | |
tree | 52be56a1faa0dc8f43cfba7ad08802fd655bacf3 | |
parent | 9348367b6b4f34fe39b41bceeb0a14811c34100f (diff) | |
download | gdm-1747a04db0d98a53dd2bec91ec34e518a7038e7a.tar.gz |
if available include <sys/sockio.h>. Should fix first part of #86679
Mon Jul 08 20:01:23 2002 George Lebl <jirka@5z.com>
* configure.in, acconfig.h, daemon/misc.c, gui/gdmchooser.c:
if available include <sys/sockio.h>. Should fix first
part of #86679
* gui/Makefile.am: link gdmsetup and gdmflexiserver with -lXau,
should fix second part of #86679
* gui/gdmwm.c: Fix #86620, don't set up the wm stuff if the
substructureredirect selection fails on the root window.
* daemon/slave.c: don't clear the env for chooser, greeter and
config. I suppose it was fairly foolish to do so anyway.
Should fix #87387 partly
* configure.in, daemon/gdm.in, daemon/Makefile.am: rename
gdm to gdm-binary and install a new script called gdm
which calls gdm-binary. This way the standard env is
read in and other good stuff can happen. Should fix #87387
completely
* gui/gdmchooser.c, gui/gdmlogin.c: properly center windows
* gui/gdmchooser.c: don't die on every minor problem, and
fix querying the interfaces
* gui/gdmchooser.c, gui/gdmsetup.c: fix crashes and the event
fixup function
* gui/gdmchooser.glade: fix signal connections so that we can
actually select some host
-rw-r--r-- | ChangeLog | 33 | ||||
-rw-r--r-- | acconfig.h | 1 | ||||
-rw-r--r-- | configure.in | 7 | ||||
-rw-r--r-- | daemon/.cvsignore | 2 | ||||
-rw-r--r-- | daemon/Makefile.am | 11 | ||||
-rw-r--r-- | daemon/gdm.in | 9 | ||||
-rw-r--r-- | daemon/misc.c | 5 | ||||
-rw-r--r-- | daemon/slave.c | 14 | ||||
-rw-r--r-- | gui/Makefile.am | 2 | ||||
-rw-r--r-- | gui/gdmchooser.c | 52 | ||||
-rw-r--r-- | gui/gdmchooser.glade | 3 | ||||
-rw-r--r-- | gui/gdmlogin.c | 21 | ||||
-rw-r--r-- | gui/gdmsetup.c | 11 | ||||
-rw-r--r-- | gui/gdmwm.c | 21 |
14 files changed, 152 insertions, 40 deletions
@@ -1,3 +1,36 @@ +Mon Jul 08 20:01:23 2002 George Lebl <jirka@5z.com> + + * configure.in, acconfig.h, daemon/misc.c, gui/gdmchooser.c: + if available include <sys/sockio.h>. Should fix first + part of #86679 + + * gui/Makefile.am: link gdmsetup and gdmflexiserver with -lXau, + should fix second part of #86679 + + * gui/gdmwm.c: Fix #86620, don't set up the wm stuff if the + substructureredirect selection fails on the root window. + + * daemon/slave.c: don't clear the env for chooser, greeter and + config. I suppose it was fairly foolish to do so anyway. + Should fix #87387 partly + + * configure.in, daemon/gdm.in, daemon/Makefile.am: rename + gdm to gdm-binary and install a new script called gdm + which calls gdm-binary. This way the standard env is + read in and other good stuff can happen. Should fix #87387 + completely + + * gui/gdmchooser.c, gui/gdmlogin.c: properly center windows + + * gui/gdmchooser.c: don't die on every minor problem, and + fix querying the interfaces + + * gui/gdmchooser.c, gui/gdmsetup.c: fix crashes and the event + fixup function + + * gui/gdmchooser.glade: fix signal connections so that we can + actually select some host + 2002-07-08 Frederic Crozat <fcrozat@mandrakesoft.com> * gui/greeter/themes/happygnome/Makefile.am: @@ -27,3 +27,4 @@ #undef EXPANDED_SESSDIR #undef GETTEXT_PACKAGE #undef HAVE_LOGINCAP +#undef HAVE_SYS_SOCKIO_H diff --git a/configure.in b/configure.in index c0af9135..63128b92 100644 --- a/configure.in +++ b/configure.in @@ -304,6 +304,12 @@ AC_CHECK_HEADER(login_cap.h, [ AC_DEFINE(HAVE_LOGINCAP)]) # +# Check for sys/sockio.h +# +AC_CHECK_HEADERS(sys/sockio.h, [ + AC_DEFINE(HAVE_SYS_SOCKIO_H)]) + +# # Xdmcp checking # XDMCP_LIBS="" @@ -442,6 +448,7 @@ vicious-extensions/Makefile config/gdm.conf config/Gnome config/gnomerc +daemon/gdm gdm-restart gdm-safe-restart gdmsetup-security diff --git a/daemon/.cvsignore b/daemon/.cvsignore index bcb7e499..6f47639e 100644 --- a/daemon/.cvsignore +++ b/daemon/.cvsignore @@ -3,4 +3,4 @@ Makefile.in .deps .libs gdm -gdmgreeter +gdm-binary diff --git a/daemon/Makefile.am b/daemon/Makefile.am index f1ed1c89..eeabb39f 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -21,9 +21,9 @@ INCLUDES = \ $(GNOME_INCLUDEDIR) -bin_PROGRAMS = gdm +bin_PROGRAMS = gdm-binary -gdm_SOURCES = \ +gdm_binary_SOURCES = \ gdm.c \ gdm.h \ display.c \ @@ -53,9 +53,9 @@ gdm_SOURCES = \ gdm-net.c \ gdm-net.h -EXTRA_gdm_SOURCES = verify-pam.c verify-crypt.c verify-shadow.c +EXTRA_gdm_binary_SOURCES = verify-pam.c verify-crypt.c verify-shadow.c -gdm_LDADD = \ +gdm_binary_LDADD = \ $(DAEMON_LIBS) \ $(X_LIBS) \ $(XDMCP_LIBS) \ @@ -67,3 +67,6 @@ gdm_LDADD = \ -L$(top_builddir)/vicious-extensions \ -lvicious +bin_SCRIPTS = gdm + +EXTRA_DIST = gdm.in diff --git a/daemon/gdm.in b/daemon/gdm.in new file mode 100644 index 00000000..5c54f180 --- /dev/null +++ b/daemon/gdm.in @@ -0,0 +1,9 @@ +#!/bin/sh +# A script so that +# 1) we read the standard system env vars +# 2) syadmins/integrators can add their own private options etc... + +exec @EXPANDED_BINDIR@/gdm-binary "$@" + +# fallback, use PATH +exec gdm-binary "$@" diff --git a/daemon/misc.c b/daemon/misc.c index 23b45958..322611f5 100644 --- a/daemon/misc.c +++ b/daemon/misc.c @@ -34,6 +34,9 @@ #include <errno.h> #include <grp.h> #include <sys/types.h> +#ifdef HAVE_SYS_SOCKIO_H +#include <sys/sockio.h> +#endif #include <vicious.h> @@ -708,7 +711,7 @@ gdm_peek_local_address_list (void) #endif ifc.ifc_len = sizeof(struct ifreq) * num; - ifc.ifc_buf = buf = g_malloc (ifc.ifc_len); + ifc.ifc_buf = buf = g_malloc0 (ifc.ifc_len); if (ioctl (sockfd, SIOCGIFCONF, &ifc) < 0) { gdm_error (_("%s: Cannot get local addresses!"), "gdm_peek_local_address_list"); diff --git a/daemon/slave.c b/daemon/slave.c index adab7797..38f8dae0 100644 --- a/daemon/slave.c +++ b/daemon/slave.c @@ -736,7 +736,9 @@ run_config (GdmDisplay *display, struct passwd *pwent) setgid (0); /* setup environment */ - gdm_clearenv_no_lang (); + /* FIXME: clearing environment is likely fairly stupid, + * is there any reason we should do it anyway? */ + /* gdm_clearenv_no_lang (); */ /* root here */ gnome_setenv ("XAUTHORITY", display->authfile, TRUE); @@ -1308,7 +1310,10 @@ gdm_slave_greeter (void) _("%s: Couldn't set userid to %d"), "gdm_slave_greeter", GdmUserId); - gdm_clearenv_no_lang (); + /* FIXME: clearing environment is likely fairly stupid, + * is there any reason we should do it anyway? */ + /* gdm_clearenv_no_lang (); */ + gnome_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE); gnome_setenv ("DISPLAY", d->name, TRUE); @@ -1656,7 +1661,10 @@ gdm_slave_chooser (void) _("%s: Couldn't set userid to %d"), "gdm_slave_chooser", GdmUserId); - gdm_clearenv_no_lang (); + /* FIXME: clearing environment is likely fairly stupid, + * is there any reason we should do it anyway? */ + /* gdm_clearenv_no_lang (); */ + gnome_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE); gnome_setenv ("DISPLAY", d->name, TRUE); diff --git a/gui/Makefile.am b/gui/Makefile.am index 02e3a788..760d5472 100644 --- a/gui/Makefile.am +++ b/gui/Makefile.am @@ -92,6 +92,7 @@ gdmlogin_LDADD = \ gdmsetup_LDFLAGS = -export-dynamic gdmsetup_LDADD = \ $(GUI_LIBS) \ + -lXau \ $(INTLLIBS) \ -L$(top_builddir)/vicious-extensions \ -lviciousui @@ -110,6 +111,7 @@ gdmXnestchooser_LDADD = \ gdmflexiserver_LDADD = \ $(GUI_LIBS) \ + -lXau \ $(INTLLIBS) \ -L$(top_builddir)/vicious-extensions \ -lviciousui diff --git a/gui/gdmchooser.c b/gui/gdmchooser.c index 9b955b25..e1f0e31b 100644 --- a/gui/gdmchooser.c +++ b/gui/gdmchooser.c @@ -44,6 +44,9 @@ #include <fcntl.h> #include <sys/ioctl.h> #include <net/if.h> +#ifdef HAVE_SYS_SOCKIO_H +#include <sys/sockio.h> +#endif #include <viciousui.h> @@ -79,6 +82,7 @@ static gchar *client_address = NULL; static gint connection_type = 0; static void gdm_chooser_abort (const gchar *format, ...) G_GNUC_PRINTF (1, 2); +static void gdm_chooser_warn (const gchar *format, ...) G_GNUC_PRINTF (1, 2); /* Exported for glade */ gboolean gdm_chooser_cancel (void); @@ -415,14 +419,15 @@ gdm_chooser_find_bcaddr (void) #endif ifc.ifc_len = sizeof (struct ifreq) * num; - ifc.ifc_buf = buf = g_malloc (ifc.ifc_len); + ifc.ifc_buf = buf = g_malloc0 (ifc.ifc_len); if (ioctl (sockfd, SIOCGIFCONF, &ifc) < 0) { g_free (buf); - gdm_chooser_abort ("Cannot get local addresses!"); + gdm_chooser_warn ("Cannot get local addresses!"); return; } ifr = ifc.ifc_req; + num = ifc.ifc_len / sizeof(struct ifreq); for (i = 0 ; i < num ; i++) { if ( ! ve_string_empty (ifr[i].ifr_name)) { struct ifreq ifreq; @@ -436,7 +441,7 @@ gdm_chooser_find_bcaddr (void) ifreq.ifr_name[sizeof (ifreq.ifr_name) - 1] = '\0'; if (ioctl (sockfd, SIOCGIFFLAGS, &ifreq) < 0) - gdm_chooser_abort ("Could not get SIOCGIFFLAGS for %s", ifr[i].ifr_name); + gdm_chooser_warn ("Could not get SIOCGIFFLAGS for %s", ifr[i].ifr_name); if ((ifreq.ifr_flags & IFF_UP) == 0 || (ifreq.ifr_flags & IFF_BROADCAST) == 0 || @@ -744,14 +749,29 @@ gdm_chooser_abort (const gchar *format, ...) exit (EXIT_FAILURE); } +static void +gdm_chooser_warn (const gchar *format, ...) +{ + va_list args; + gchar *s; + + va_start (args, format); + s = g_strdup_vprintf (format, args); + va_end (args); + + syslog (LOG_ERR, "%s", s); + closelog (); +} + static void gdm_chooser_parse_config (void) { + /* stupid, or is it? struct stat unused; - if (stat (GDM_CONFIG_FILE, &unused) == -1) gdm_chooser_abort (_("gdm_chooser_parse_config: No configuration file: %s. Aborting."), GDM_CONFIG_FILE); + */ gnome_config_push_prefix ("=" GDM_CONFIG_FILE "=/"); @@ -897,10 +917,17 @@ gdm_chooser_gui_init (void) gtk_rc_parse (GdmGtkRC); /* Load default host image */ - if (access (GdmHostDefaultIcon, R_OK) != 0) - gdm_chooser_abort (_("Can't open default host icon: %s"), GdmHostDefaultIcon); - else + if (access (GdmHostDefaultIcon, R_OK) != 0) { + gdm_chooser_warn (_("Can't open default host icon: %s"), GdmHostDefaultIcon); + /* bogus image */ + defhostimg = gdk_pixbuf_new (GDK_COLORSPACE_RGB, + FALSE /* has_alpha */, + 8 /* bits_per_sample */, + 48 /* width */, + 48 /* height */); + } else { defhostimg = gdk_pixbuf_new_from_file (GdmHostDefaultIcon, NULL); + } /* Main window */ chooser_app = glade_helper_load ("gdmchooser.glade", @@ -1011,11 +1038,17 @@ gdm_event (GSignalInvocationHint *ihint, const GValue *param_values, gpointer data) { + GdkEvent *event; + /* HAAAAAAAAAAAAAAAAACK */ /* Since the user has not logged in yet and may have left/right * mouse buttons switched, we just translate every right mouse click * to a left mouse click */ - GdkEvent *event = g_value_get_pointer ((GValue *)param_values); + if (n_param_values != 2 || + !G_VALUE_HOLDS (¶m_values[1], GDK_TYPE_EVENT)) + return FALSE; + + event = g_value_get_boxed (¶m_values[1]); if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS || @@ -1122,8 +1155,11 @@ main (int argc, char *argv[]) NULL /* destroy_notify */); } + gtk_widget_queue_resize (chooser); gtk_widget_show_now (chooser); + gdm_wm_center_window (GTK_WINDOW (chooser)); + /* can it ever happen that it'd be NULL here ??? */ if (chooser->window != NULL) { gdm_wm_init (GDK_WINDOW_XWINDOW (chooser->window)); diff --git a/gui/gdmchooser.glade b/gui/gdmchooser.glade index 01edee16..e00dbd60 100644 --- a/gui/gdmchooser.glade +++ b/gui/gdmchooser.glade @@ -17,7 +17,6 @@ <child internal-child="vbox"> <widget class="GtkVBox" id="dialog-vbox1"> - <property name="border_width">2</property> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> @@ -188,6 +187,8 @@ <property name="text_spacing">2</property> <property name="text_editable">False</property> <property name="text_static">False</property> + <signal name="select_icon" handler="gdm_chooser_browser_select" last_modification_time="Tue, 09 Jul 2002 02:43:48 GMT"/> + <signal name="unselect_icon" handler="gdm_chooser_browser_unselect" last_modification_time="Tue, 09 Jul 2002 02:44:00 GMT"/> </widget> </child> </widget> diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c index 6a590133..6fad3cbb 100644 --- a/gui/gdmlogin.c +++ b/gui/gdmlogin.c @@ -2716,16 +2716,6 @@ create_handle (void) return title_box; } -static void -login_realized (GtkWidget *w) -{ - /* In case we're out of bounds, after realization we'll have correct - * limits to make the window be on screen */ - if (GdmSetPosition) { - set_screen_pos (login, GdmPositionX, GdmPositionY); - } -} - static gboolean update_clock (gpointer data) { @@ -3331,11 +3321,9 @@ gdm_login_gui_init (void) "resizable", TRUE, NULL); + /* do it now, and we'll also do it later */ if (GdmSetPosition) { set_screen_pos (login, GdmPositionX, GdmPositionY); - g_signal_connect (G_OBJECT (login), "realize", - G_CALLBACK (login_realized), - NULL); } else { gdm_wm_center_window (GTK_WINDOW (login)); } @@ -4119,8 +4107,15 @@ main (int argc, char *argv[]) NULL /* destroy_notify */); } + gtk_widget_queue_resize (login); gtk_widget_show_now (login); + if (GdmSetPosition) { + set_screen_pos (login, GdmPositionX, GdmPositionY); + } else { + gdm_wm_center_window (GTK_WINDOW (login)); + } + /* can it ever happen that it'd be NULL here ??? */ if (login->window != NULL) { gdm_wm_init (GDK_WINDOW_XWINDOW (login->window)); diff --git a/gui/gdmsetup.c b/gui/gdmsetup.c index 7b8644d6..80cf3787 100644 --- a/gui/gdmsetup.c +++ b/gui/gdmsetup.c @@ -1905,11 +1905,17 @@ gdm_event (GSignalInvocationHint *ihint, const GValue *param_values, gpointer data) { + GdkEvent *event; + /* HAAAAAAAAAAAAAAAAACK */ /* Since the user has not logged in yet and may have left/right * mouse buttons switched, we just translate every right mouse click * to a left mouse click */ - GdkEvent *event = g_value_get_pointer ((GValue *)param_values); + if (n_param_values != 2 || + !G_VALUE_HOLDS (¶m_values[1], GDK_TYPE_EVENT)) + return FALSE; + + event = g_value_get_boxed (¶m_values[1]); if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS || @@ -1955,6 +1961,9 @@ main (int argc, char *argv[]) gtk_rc_parse (gtkrc); g_free (gtkrc); + /* evil, but oh well */ + g_type_class_ref (GTK_TYPE_WIDGET); + /* also setup third button to work as first to work in reverse * situations transparently */ sid = g_signal_lookup ("event", diff --git a/gui/gdmwm.c b/gui/gdmwm.c index 5a83f9d2..ce4e0323 100644 --- a/gui/gdmwm.c +++ b/gui/gdmwm.c @@ -187,7 +187,7 @@ trap_push (void) gdk_error_trap_push (); } -static gboolean +static int trap_pop (void) { trap_depth --; @@ -1087,6 +1087,18 @@ gdm_wm_init (Window login_window) wm_root = DefaultRootWindow (wm_disp); + /* set event mask for events on root window */ + XGetWindowAttributes (wm_disp, wm_root, &attribs); + XSelectInput (wm_disp, wm_root, + attribs.your_event_mask | + SubstructureNotifyMask | + SubstructureRedirectMask); + + if (trap_pop () != 0) + return; + + trap_push (); + add_all_current_windows (); source = g_source_new (&event_funcs, sizeof (GSource)); @@ -1099,13 +1111,6 @@ gdm_wm_init (Window login_window) g_source_set_can_recurse (source, FALSE); g_source_attach (source, NULL); - /* set event mask for events on root window */ - XGetWindowAttributes (wm_disp, wm_root, &attribs); - XSelectInput (wm_disp, wm_root, - attribs.your_event_mask | - SubstructureNotifyMask | - SubstructureRedirectMask); - trap_pop (); } |