summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog31
-rw-r--r--acinclude.m487
-rw-r--r--common/Makefile.am20
-rw-r--r--configure.ac110
-rw-r--r--daemon/Makefile.am60
-rw-r--r--daemon/gdm-factory-slave.c104
-rw-r--r--daemon/gdm-product-slave.c108
-rw-r--r--daemon/gdm-simple-slave.c109
-rw-r--r--daemon/gdm-slave.c91
-rw-r--r--daemon/gdm-slave.h3
-rw-r--r--gui/Makefile.am1
-rw-r--r--gui/modules/.cvsignore6
-rw-r--r--gui/modules/AccessDwellMouseEvents.in62
-rw-r--r--gui/modules/AccessKeyMouseEvents.in91
-rw-r--r--gui/modules/Makefile.am88
-rw-r--r--gui/modules/dwellmouselistener.c760
-rw-r--r--gui/modules/keymouselistener.c1010
-rw-r--r--gui/simple-chooser/Makefile.am10
-rw-r--r--gui/simple-greeter/Makefile.am28
-rw-r--r--gui/simple-greeter/libnotificationarea/Makefile.am4
-rw-r--r--libgreeter/Makefile.am4
-rw-r--r--po/ChangeLog6
-rw-r--r--po/POTFILES.in2
23 files changed, 301 insertions, 2494 deletions
diff --git a/ChangeLog b/ChangeLog
index 23e6053c..215c1af0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,34 @@
+2007-10-04 William Jon McCann <mccann@jhu.edu>
+
+ * acinclude.m4:
+ * common/Makefile.am:
+ * configure.ac:
+ * daemon/Makefile.am:
+ * daemon/gdm-factory-slave.c: (run_greeter),
+ (idle_connect_to_display):
+ * daemon/gdm-product-slave.c: (setup_server),
+ (idle_connect_to_display):
+ * daemon/gdm-simple-slave.c: (run_greeter),
+ (idle_connect_to_display):
+ * daemon/gdm-slave.c: (gdm_slave_set_busy_cursor),
+ (set_local_auth), (gdm_slave_connect_to_x11_display):
+ * daemon/gdm-slave.h:
+ * gui/Makefile.am:
+ * gui/modules/.cvsignore:
+ * gui/modules/AccessDwellMouseEvents.in:
+ * gui/modules/AccessKeyMouseEvents.in:
+ * gui/modules/Makefile.am:
+ * gui/modules/dwellmouselistener.c:
+ * gui/modules/keymouselistener.c:
+ * gui/simple-chooser/Makefile.am:
+ * gui/simple-greeter/Makefile.am:
+ * gui/simple-greeter/libnotificationarea/Makefile.am:
+ * libgreeter/Makefile.am:
+ Fix up the handling of dependencies. Make the daemon
+ only depend on x11, glib, gobject, dbus. Move some
+ things from the slaves to the base class.
+ Remove the unused modules for now.
+
2007-10-03 William Jon McCann <mccann@jhu.edu>
* gui/simple-greeter/greeter-main.c: (main):
diff --git a/acinclude.m4 b/acinclude.m4
index 970dbec2..3b3bbe3f 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -286,3 +286,90 @@ fi
AC_MSG_RESULT($result)
])
+
+dnl EXTRA_COMPILE_WARNINGS
+dnl Turn on many useful compiler warnings
+dnl For now, only works on GCC
+AC_DEFUN([EXTRA_COMPILE_WARNINGS],[
+ dnl ******************************
+ dnl More compiler warnings
+ dnl ******************************
+
+ AC_ARG_ENABLE(compile-warnings,
+ AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],
+ [Turn on compiler warnings]),,
+ [enable_compile_warnings="m4_default([$1],[yes])"])
+
+ warnCFLAGS=
+ if test "x$GCC" != xyes; then
+ enable_compile_warnings=no
+ fi
+
+ warning_flags=
+ realsave_CFLAGS="$CFLAGS"
+
+ case "$enable_compile_warnings" in
+ no)
+ warning_flags=
+ ;;
+ minimum)
+ warning_flags="-Wall"
+ ;;
+ yes)
+ warning_flags="-Wall -Wmissing-prototypes"
+ ;;
+ maximum|error)
+ warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
+ CFLAGS="$warning_flags $CFLAGS"
+ for option in -Wno-sign-compare; do
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $option"
+ AC_MSG_CHECKING([whether gcc understands $option])
+ AC_TRY_COMPILE([], [],
+ has_option=yes,
+ has_option=no,)
+ CFLAGS="$SAVE_CFLAGS"
+ AC_MSG_RESULT($has_option)
+ if test $has_option = yes; then
+ warning_flags="$warning_flags $option"
+ fi
+ unset has_option
+ unset SAVE_CFLAGS
+ done
+ unset option
+ if test "$enable_compile_warnings" = "error" ; then
+ warning_flags="$warning_flags -Werror"
+ fi
+ ;;
+ *)
+ AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
+ ;;
+ esac
+ CFLAGS="$realsave_CFLAGS"
+ AC_MSG_CHECKING(what warning flags to pass to the C compiler)
+ AC_MSG_RESULT($warning_flags)
+
+ AC_ARG_ENABLE(iso-c,
+ AC_HELP_STRING([--enable-iso-c],
+ [Try to warn if code is not ISO C ]),,
+ [enable_iso_c=no])
+
+ AC_MSG_CHECKING(what language compliance flags to pass to the C compiler)
+ complCFLAGS=
+ if test "x$enable_iso_c" != "xno"; then
+ if test "x$GCC" = "xyes"; then
+ case " $CFLAGS " in
+ *[\ \ ]-ansi[\ \ ]*) ;;
+ *) complCFLAGS="$complCFLAGS -ansi" ;;
+ esac
+ case " $CFLAGS " in
+ *[\ \ ]-pedantic[\ \ ]*) ;;
+ *) complCFLAGS="$complCFLAGS -pedantic" ;;
+ esac
+ fi
+ fi
+ AC_MSG_RESULT($complCFLAGS)
+
+ WARN_CFLAGS="$warning_flags $complCFLAGS"
+ AC_SUBST(WARN_CFLAGS)
+])
diff --git a/common/Makefile.am b/common/Makefile.am
index d1b31b93..1d3afce1 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -3,9 +3,9 @@
NULL =
INCLUDES = \
- -I. \
- -I.. \
- -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
+ -I. \
+ -I.. \
+ -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
-DAUTHDIR=\"$(authdir)\" \
-DBINDIR=\"$(bindir)\" \
-DDATADIR=\"$(datadir)\" \
@@ -21,8 +21,8 @@ INCLUDES = \
-DGDM_DEFAULTS_CONF=\"$(GDM_DEFAULTS_CONF)\" \
-DGDM_CUSTOM_CONF=\"$(GDM_CUSTOM_CONF)\" \
-DGDM_OLD_CONF=\"$(GDM_OLD_CONF)\" \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS)
+ $(COMMON_CFLAGS) \
+ $(NULL)
noinst_LTLIBRARIES = \
libgdmcommon.la \
@@ -79,7 +79,7 @@ libgdmcommon_la_CPPFLAGS = \
$(NULL)
libgdmcommon_la_CFLAGS = \
- $(DBUS_CFLAGS) \
+ $(COMMON_CFLAGS) \
$(NULL)
libgdmcommon_la_LIBADD = \
@@ -101,7 +101,7 @@ test_log_SOURCES = \
test_log_LDADD = \
libgdmcommon.la \
- $(GLIB_LIBS) \
+ $(COMMON_LIBS) \
$(NULL)
test_settings_server_SOURCES = \
@@ -110,8 +110,7 @@ test_settings_server_SOURCES = \
test_settings_server_LDADD = \
libgdmcommon.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
+ $(COMMON_LIBS) \
$(NULL)
test_settings_client_SOURCES = \
@@ -120,8 +119,7 @@ test_settings_client_SOURCES = \
test_settings_client_LDADD = \
libgdmcommon.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
+ $(COMMON_LIBS) \
$(NULL)
CLEANFILES = \
diff --git a/configure.ac b/configure.ac
index 8c884053..97d07542 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,13 +24,14 @@ IT_PROG_INTLTOOL([0.35.0])
GNOME_DOC_INIT
-DBUS_GLIB_REQUIRED=0.74
-GLIB_REQUIRED=2.13.0
-GTK_REQUIRED=2.10.0
-GNOME_VFS_REQUIRED=2.18.0
-PANGO_REQUIRED=1.3.0
-LIBGLADE_REQUIRED=1.99.2
-SCROLLKEEPER_REQUIRED=0.1.4
+X11_REQUIRED_VERSION=1.0.0
+DBUS_GLIB_REQUIRED_VERSION=0.74
+GLIB_REQUIRED_VERSION=2.13.0
+GTK_REQUIRED_VERSION=2.10.0
+GNOME_VFS_REQUIRED_VERSION=2.18.0
+PANGO_REQUIRED_VERSION=1.3.0
+LIBGLADE_REQUIRED_VERSION=1.99.2
+SCROLLKEEPER_REQUIRED_VERSION=0.1.4
dnl
dnl Let the user configure where to look for the configuration files.
@@ -159,64 +160,56 @@ dnl checks needed for Darwin compatibility to linux **environ.
AC_CHECK_HEADERS(crt_externs.h)
AC_CHECK_FUNCS(_NSGetEnviron)
-GNOME_COMPILE_WARNINGS
-CFLAGS="$CFLAGS $WARN_CFLAGS"
+EXTRA_COMPILE_WARNINGS(yes)
-PKG_CHECK_MODULES(COMMON, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED)
+PKG_CHECK_MODULES(COMMON,
+ dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION
+ gobject-2.0 >= $GLIB_REQUIRED_VERSION
+)
AC_SUBST(COMMON_CFLAGS)
AC_SUBST(COMMON_LIBS)
-PKG_CHECK_MODULES(DAEMON, gtk+-2.0 >= $GTK_REQUIRED)
+PKG_CHECK_MODULES(DAEMON,
+ dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION
+ gobject-2.0 >= $GLIB_REQUIRED_VERSION
+ x11 >= $X11_REQUIRED_VERSION
+)
AC_SUBST(DAEMON_CFLAGS)
AC_SUBST(DAEMON_LIBS)
-PKG_CHECK_MODULES(GUI, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED)
-AC_SUBST(GUI_CFLAGS)
-AC_SUBST(GUI_LIBS)
-
-PKG_CHECK_MODULES(GUIGLADE, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED)
-AC_SUBST(GUIGLADE_CFLAGS)
-AC_SUBST(GUIGLADE_LIBS)
-
-PKG_CHECK_MODULES(GUING, gtk+-2.0 >= $GTK_REQUIRED)
-AC_SUBST(GUING_CFLAGS)
-AC_SUBST(GUING_LIBS)
-
-PKG_CHECK_MODULES(GREETER, gtk+-2.0 >= $GTK_REQUIRED)
+PKG_CHECK_MODULES(GREETER,
+ dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION
+ gtk+-2.0 >= $GTK_REQUIRED_VERSION
+)
AC_SUBST(GREETER_CFLAGS)
AC_SUBST(GREETER_LIBS)
-dnl libbackground
-PKG_CHECK_MODULES(CAPPLET, "gtk+-2.0 gconf-2.0")
-dnl ==========================================================================
-
-PKG_CHECK_MODULES(UTILS, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED)
-AC_SUBST(UTILS_CFLAGS)
-AC_SUBST(UTILS_LIBS)
-
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQUIRED)
-AC_SUBST(GLIB_CFLAGS)
-AC_SUBST(GLIB_LIBS)
-
-PKG_CHECK_MODULES(GOBJECT, gobject-2.0 >= $GLIB_REQUIRED)
-AC_SUBST(GOBJECT_CFLAGS)
-AC_SUBST(GOBJECT_LIBS)
-
-PKG_CHECK_MODULES(PANGO, pango >= $PANGO_REQUIRED)
-AC_SUBST(PANGO_CFLAGS)
-AC_SUBST(PANGO_LIBS)
-
-PKG_CHECK_MODULES(PANGOFT, pangoft2 >= $PANGO_REQUIRED)
-AC_SUBST(PANGOFT_CFLAGS)
-AC_SUBST(PANGOFT_LIBS)
+PKG_CHECK_MODULES(SIMPLE_GREETER,
+ dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION
+ gtk+-2.0 >= $GTK_REQUIRED_VERSION
+ libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION
+ gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED_VERSION
+)
+AC_SUBST(SIMPLE_GREETER_CFLAGS)
+AC_SUBST(SIMPLE_GREETER_LIBS)
-PKG_CHECK_MODULES(GDK, gdk-2.0 >= $GTK_REQUIRED)
-AC_SUBST(GDK_CFLAGS)
-AC_SUBST(GDK_LIBS)
+PKG_CHECK_MODULES(CHOOSER,
+ dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION
+ gtk+-2.0 >= $GTK_REQUIRED_VERSION
+)
+AC_SUBST(CHOOSER_CFLAGS)
+AC_SUBST(CHOOSER_LIBS)
+
+PKG_CHECK_MODULES(SIMPLE_CHOOSER,
+ dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION
+ gtk+-2.0 >= $GTK_REQUIRED_VERSION
+ libglade-2.0 >= $LIBGLADE_REQUIRED_VERSION
+ gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED_VERSION
+)
+AC_SUBST(SIMPLE_CHOOSER_CFLAGS)
+AC_SUBST(SIMPLE_CHOOSER_LIBS)
-PKG_CHECK_MODULES(GDKPIXBUF, gdk-pixbuf-2.0 >= $GTK_REQUIRED)
-AC_SUBST(GDKPIXBUF_CFLAGS)
-AC_SUBST(GDKPIXBUF_LIBS)
+dnl ==========================================================================
dnl Allow users to run gdmsetup using the console helper PAM stuff.
if test "x$enable_console_helper" = "xyes"; then
@@ -266,9 +259,6 @@ AC_CHECK_FUNC(inet_aton,,[
AC_CHECK_LIB(resolv,inet_aton, [
EXTRA_CHOOSER_LIBS="$EXTRA_CHOOSER_LIBS -lresolv"])])
-COMMON_GNOME_LIBS="libgdmcommon-ui.a"
-AC_SUBST(COMMON_GNOME_LIBS)
-
dnl *****************************
dnl IPv6 specific checks
dnl *****************************
@@ -844,14 +834,7 @@ dnl ---------------------------------------------------------------------------
dnl - D-Bus
dnl ---------------------------------------------------------------------------
-PKG_CHECK_MODULES(DBUS, dbus-glib-1 >= $DBUS_GLIB_REQUIRED)
-AC_SUBST(DBUS_CFLAGS)
-AC_SUBST(DBUS_LIBS)
-
-dnl ---------------------------------------------------------------------------
dnl - Are we specifying a different dbus root ?
-dnl ---------------------------------------------------------------------------
-
AC_ARG_WITH(dbus-sys,
[AC_HELP_STRING([--with-dbus-sys=<dir>],
[where D-BUS system.d directory is])])
@@ -1329,7 +1312,6 @@ Makefile
daemon/Makefile
libgreeter/Makefile
gui/Makefile
-gui/modules/Makefile
gui/simple-greeter/Makefile
gui/simple-greeter/libnotificationarea/Makefile
gui/simple-chooser/Makefile
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index afaaf7ad..fdf9b967 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -1,7 +1,5 @@
NULL =
-# Note that we have cflags for just about everything even if
-# we don't link to everything
INCLUDES = \
-I. \
-I.. \
@@ -21,12 +19,11 @@ INCLUDES = \
-DGDM_DEFAULTS_CONF=\"$(GDM_DEFAULTS_CONF)\" \
-DGDM_CUSTOM_CONF=\"$(GDM_CUSTOM_CONF)\" \
-DGDM_OLD_CONF=\"$(GDM_OLD_CONF)\" \
- $(GUI_CFLAGS) \
+ $(DISABLE_DEPRECATED_CFLAGS) \
$(DAEMON_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DEBUG_CFLAGS) \
-DLANG_CONFIG_FILE=\"$(LANG_CONFIG_FILE)\" \
- $(GNOME_INCLUDEDIR) \
- -DGREETERTHEMEDIR=\""$(datadir)/gdm/themes"\" \
- $(DBUS_CFLAGS) \
$(NULL)
BUILT_SOURCES = \
@@ -74,10 +71,8 @@ test_session_SOURCES = \
$(NULL)
test_session_LDADD = \
- $(GLIB_LIBS) \
- $(GOBJECT_LIBS) \
+ $(DAEMON_LIBS) \
$(PAM_LIBS) \
- $(DBUS_LIBS) \
$(NULL)
libexec_PROGRAMS = \
@@ -113,23 +108,12 @@ gdm_simple_slave_SOURCES = \
$(NULL)
gdm_simple_slave_LDFLAGS = \
- $(EXTRA_SLAVE_LIBS) \
$(PAM_LIBS) \
$(NULL)
gdm_simple_slave_LDADD = \
$(DAEMON_LIBS) \
- $(INTLLIBS) \
- $(GLIB_LIBS) \
- $(GOBJECT_LIBS) \
- $(GDK_LIBS) \
$(top_builddir)/common/libgdmcommon.la \
- $(X_LIBS) \
- $(XINERAMA_LIBS) \
- $(DBUS_LIBS) \
- -lXau \
- -lX11 \
- -lXext \
$(NULL)
gdm_factory_slave_SOURCES = \
@@ -159,17 +143,7 @@ gdm_factory_slave_LDFLAGS = \
gdm_factory_slave_LDADD = \
$(DAEMON_LIBS) \
- $(INTLLIBS) \
- $(GLIB_LIBS) \
- $(GOBJECT_LIBS) \
- $(GDK_LIBS) \
$(top_builddir)/common/libgdmcommon.la \
- $(X_LIBS) \
- $(XINERAMA_LIBS) \
- $(DBUS_LIBS) \
- -lXau \
- -lX11 \
- -lXext \
$(NULL)
gdm_product_slave_SOURCES = \
@@ -192,23 +166,12 @@ gdm_product_slave_SOURCES = \
$(NULL)
gdm_product_slave_LDFLAGS = \
- $(EXTRA_SLAVE_LIBS) \
$(PAM_LIBS) \
$(NULL)
gdm_product_slave_LDADD = \
$(DAEMON_LIBS) \
- $(INTLLIBS) \
- $(GLIB_LIBS) \
- $(GOBJECT_LIBS) \
- $(GDK_LIBS) \
$(top_builddir)/common/libgdmcommon.la \
- $(X_LIBS) \
- $(XINERAMA_LIBS) \
- $(DBUS_LIBS) \
- -lXau \
- -lX11 \
- -lXext \
$(NULL)
gdm_session_worker_SOURCES = \
@@ -222,10 +185,8 @@ gdm_session_worker_LDFLAGS = \
$(NULL)
gdm_session_worker_LDADD = \
- $(GLIB_LIBS) \
- $(GOBJECT_LIBS) \
+ $(DAEMON_LIBS) \
$(top_builddir)/common/libgdmcommon.la \
- $(DBUS_LIBS) \
$(NULL)
sbin_PROGRAMS = \
@@ -289,18 +250,7 @@ gdm_binary_LDFLAGS = \
gdm_binary_LDADD = \
$(DAEMON_LIBS) \
- $(INTLLIBS) \
- $(GLIB_LIBS) \
- $(GOBJECT_LIBS) \
- $(GDK_LIBS) \
$(top_builddir)/common/libgdmcommon.la \
- $(X_LIBS) \
- $(XINERAMA_LIBS) \
- $(XDMCP_LIBS) \
- $(DBUS_LIBS) \
- -lXau \
- -lX11 \
- -lXext \
$(NULL)
if WITH_CONSOLE_KIT
diff --git a/daemon/gdm-factory-slave.c b/daemon/gdm-factory-slave.c
index f0215859..13549486 100644
--- a/daemon/gdm-factory-slave.c
+++ b/daemon/gdm-factory-slave.c
@@ -34,8 +34,6 @@
#include <glib.h>
#include <glib/gi18n.h>
#include <glib-object.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbus/dbus-glib.h>
@@ -93,21 +91,6 @@ static void gdm_factory_slave_finalize (GObject *object);
G_DEFINE_TYPE (GdmFactorySlave, gdm_factory_slave, GDM_TYPE_SLAVE)
static void
-set_busy_cursor (GdmFactorySlave *factory_slave)
-{
- if (factory_slave->priv->server_display != NULL) {
- Cursor xcursor;
-
- xcursor = XCreateFontCursor (factory_slave->priv->server_display, GDK_WATCH);
- XDefineCursor (factory_slave->priv->server_display,
- DefaultRootWindow (factory_slave->priv->server_display),
- xcursor);
- XFreeCursor (factory_slave->priv->server_display, xcursor);
- XSync (factory_slave->priv->server_display, False);
- }
-}
-
-static void
gdm_factory_slave_whack_temp_auth_file (GdmFactorySlave *factory_slave)
{
#if 0
@@ -627,7 +610,7 @@ run_greeter (GdmFactorySlave *slave)
}
/* Set the busy cursor */
- set_busy_cursor (slave);
+ gdm_slave_set_busy_cursor (GDM_SLAVE (slave));
/* FIXME: send a signal back to the master */
@@ -709,89 +692,6 @@ run_greeter (GdmFactorySlave *slave)
g_free (auth_file);
}
-static void
-set_local_auth (GdmFactorySlave *slave)
-{
- GString *binary_cookie;
- GString *cookie;
- char *display_x11_cookie;
-
- g_object_get (slave,
- "display-x11-cookie", &display_x11_cookie,
- NULL);
-
- g_debug ("Setting authorization key for display %s", display_x11_cookie);
-
- cookie = g_string_new (display_x11_cookie);
- binary_cookie = g_string_new (NULL);
- if (! gdm_string_hex_decode (cookie,
- 0,
- NULL,
- binary_cookie,
- 0)) {
- g_warning ("Unable to decode hex cookie");
- goto out;
- }
-
- g_debug ("Decoded cookie len %d", binary_cookie->len);
-
- XSetAuthorization ("MIT-MAGIC-COOKIE-1",
- (int) strlen ("MIT-MAGIC-COOKIE-1"),
- (char *)binary_cookie->str,
- binary_cookie->len);
-
- out:
- g_string_free (binary_cookie, TRUE);
- g_string_free (cookie, TRUE);
- g_free (display_x11_cookie);
-}
-
-static gboolean
-connect_to_display (GdmFactorySlave *slave)
-{
- char *display_name;
- gboolean ret;
-
- ret = FALSE;
-
- g_object_get (slave,
- "display-name", &display_name,
- NULL);
-
- /* We keep our own (windowless) connection (dsp) open to avoid the
- * X server resetting due to lack of active connections. */
-
- g_debug ("Server is ready - opening display %s", display_name);
-
- g_setenv ("DISPLAY", display_name, TRUE);
- g_unsetenv ("XAUTHORITY"); /* just in case it's set */
-
- set_local_auth (slave);
-
-#if 0
- /* X error handlers to avoid the default one (i.e. exit (1)) */
- do_xfailed_on_xio_error = TRUE;
- XSetErrorHandler (gdm_factory_slave_xerror_handler);
- XSetIOErrorHandler (gdm_factory_slave_xioerror_handler);
-#endif
-
- gdm_sigchld_block_push ();
- slave->priv->server_display = XOpenDisplay (display_name);
- gdm_sigchld_block_pop ();
-
- if (slave->priv->server_display == NULL) {
- g_warning ("Unable to connect to display %s", display_name);
- ret = FALSE;
- } else {
- g_debug ("Connected to display %s", display_name);
- ret = TRUE;
- }
-
- g_free (display_name);
-
- return ret;
-}
-
static gboolean
idle_connect_to_display (GdmFactorySlave *slave)
{
@@ -801,7 +701,7 @@ idle_connect_to_display (GdmFactorySlave *slave)
g_debug ("Connect to display");
- res = connect_to_display (slave);
+ res = gdm_slave_connect_to_x11_display (GDM_SLAVE (slave));
if (res) {
/* FIXME: handle wait-for-go */
diff --git a/daemon/gdm-product-slave.c b/daemon/gdm-product-slave.c
index 524e3a96..fee17a35 100644
--- a/daemon/gdm-product-slave.c
+++ b/daemon/gdm-product-slave.c
@@ -34,8 +34,6 @@
#include <glib.h>
#include <glib/gi18n.h>
#include <glib-object.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbus/dbus-glib.h>
@@ -101,21 +99,6 @@ static void gdm_product_slave_finalize (GObject *object);
G_DEFINE_TYPE (GdmProductSlave, gdm_product_slave, GDM_TYPE_SLAVE)
static void
-set_busy_cursor (GdmProductSlave *product_slave)
-{
- if (product_slave->priv->server_display != NULL) {
- Cursor xcursor;
-
- xcursor = XCreateFontCursor (product_slave->priv->server_display, GDK_WATCH);
- XDefineCursor (product_slave->priv->server_display,
- DefaultRootWindow (product_slave->priv->server_display),
- xcursor);
- XFreeCursor (product_slave->priv->server_display, xcursor);
- XSync (product_slave->priv->server_display, False);
- }
-}
-
-static void
gdm_product_slave_whack_temp_auth_file (GdmProductSlave *product_slave)
{
#if 0
@@ -615,7 +598,7 @@ setup_server (GdmProductSlave *slave)
NULL);
/* Set the busy cursor */
- set_busy_cursor (slave);
+ gdm_slave_set_busy_cursor (GDM_SLAVE (slave));
/* FIXME: send a signal back to the master */
@@ -633,96 +616,13 @@ setup_server (GdmProductSlave *slave)
/* Run the init script. gdmslave suspends until script has terminated */
gdm_product_slave_exec_script (slave,
- GDMCONFDIR"/Init",
- "gdm");
+ GDMCONFDIR"/Init",
+ "gdm");
g_free (display_name);
g_free (auth_file);
}
-static void
-set_local_auth (GdmProductSlave *slave)
-{
- GString *binary_cookie;
- GString *cookie;
- char *display_x11_cookie;
-
- g_object_get (slave,
- "display-x11-cookie", &display_x11_cookie,
- NULL);
-
- g_debug ("Setting authorization key for display %s", display_x11_cookie);
-
- cookie = g_string_new (display_x11_cookie);
- binary_cookie = g_string_new (NULL);
- if (! gdm_string_hex_decode (cookie,
- 0,
- NULL,
- binary_cookie,
- 0)) {
- g_warning ("Unable to decode hex cookie");
- goto out;
- }
-
- g_debug ("Decoded cookie len %d", binary_cookie->len);
-
- XSetAuthorization ("MIT-MAGIC-COOKIE-1",
- (int) strlen ("MIT-MAGIC-COOKIE-1"),
- (char *)binary_cookie->str,
- binary_cookie->len);
-
- out:
- g_string_free (binary_cookie, TRUE);
- g_string_free (cookie, TRUE);
- g_free (display_x11_cookie);
-}
-
-static gboolean
-connect_to_display (GdmProductSlave *slave)
-{
- char *display_name;
- gboolean ret;
-
- ret = FALSE;
-
- g_object_get (slave,
- "display-name", &display_name,
- NULL);
-
- /* We keep our own (windowless) connection (dsp) open to avoid the
- * X server resetting due to lack of active connections. */
-
- g_debug ("Server is ready - opening display %s", display_name);
-
- g_setenv ("DISPLAY", display_name, TRUE);
- g_unsetenv ("XAUTHORITY"); /* just in case it's set */
-
- set_local_auth (slave);
-
-#if 0
- /* X error handlers to avoid the default one (i.e. exit (1)) */
- do_xfailed_on_xio_error = TRUE;
- XSetErrorHandler (gdm_product_slave_xerror_handler);
- XSetIOErrorHandler (gdm_product_slave_xioerror_handler);
-#endif
-
- gdm_sigchld_block_push ();
- slave->priv->server_display = XOpenDisplay (display_name);
- gdm_sigchld_block_pop ();
-
- if (slave->priv->server_display == NULL) {
- g_warning ("Unable to connect to display %s", display_name);
- ret = FALSE;
- } else {
- g_debug ("Connected to display %s", display_name);
- ret = TRUE;
- }
-
- g_free (display_name);
-
- return ret;
-}
-
static gboolean
setup_session (GdmProductSlave *slave)
{
@@ -767,7 +667,7 @@ idle_connect_to_display (GdmProductSlave *slave)
slave->priv->connection_attempts++;
- res = connect_to_display (slave);
+ res = gdm_slave_connect_to_x11_display (GDM_SLAVE (slave));
if (res) {
/* FIXME: handle wait-for-go */
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 03caea31..13be3de1 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -34,8 +34,6 @@
#include <glib.h>
#include <glib/gi18n.h>
#include <glib-object.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbus/dbus-glib.h>
@@ -74,7 +72,6 @@ struct GdmSimpleSlavePrivate
int ping_interval;
GPid server_pid;
- Display *server_display;
guint connection_attempts;
/* user selected */
@@ -110,21 +107,6 @@ static void gdm_simple_slave_finalize (GObject *object);
G_DEFINE_TYPE (GdmSimpleSlave, gdm_simple_slave, GDM_TYPE_SLAVE)
static void
-set_busy_cursor (GdmSimpleSlave *simple_slave)
-{
- if (simple_slave->priv->server_display != NULL) {
- Cursor xcursor;
-
- xcursor = XCreateFontCursor (simple_slave->priv->server_display, GDK_WATCH);
- XDefineCursor (simple_slave->priv->server_display,
- DefaultRootWindow (simple_slave->priv->server_display),
- xcursor);
- XFreeCursor (simple_slave->priv->server_display, xcursor);
- XSync (simple_slave->priv->server_display, False);
- }
-}
-
-static void
gdm_simple_slave_whack_temp_auth_file (GdmSimpleSlave *simple_slave)
{
#if 0
@@ -999,7 +981,7 @@ run_greeter (GdmSimpleSlave *slave)
}
/* Set the busy cursor */
- set_busy_cursor (slave);
+ gdm_slave_set_busy_cursor (GDM_SLAVE (slave));
/* FIXME: send a signal back to the master */
@@ -1086,89 +1068,6 @@ run_greeter (GdmSimpleSlave *slave)
g_free (auth_file);
}
-static void
-set_local_auth (GdmSimpleSlave *slave)
-{
- GString *binary_cookie;
- GString *cookie;
- char *display_x11_cookie;
-
- g_object_get (slave,
- "display-x11-cookie", &display_x11_cookie,
- NULL);
-
- g_debug ("Setting authorization key for display %s", display_x11_cookie);
-
- cookie = g_string_new (display_x11_cookie);
- binary_cookie = g_string_new (NULL);
- if (! gdm_string_hex_decode (cookie,
- 0,
- NULL,
- binary_cookie,
- 0)) {
- g_warning ("Unable to decode hex cookie");
- goto out;
- }
-
- g_debug ("Decoded cookie len %d", binary_cookie->len);
-
- XSetAuthorization ("MIT-MAGIC-COOKIE-1",
- (int) strlen ("MIT-MAGIC-COOKIE-1"),
- (char *)binary_cookie->str,
- binary_cookie->len);
-
- out:
- g_string_free (binary_cookie, TRUE);
- g_string_free (cookie, TRUE);
- g_free (display_x11_cookie);
-}
-
-static gboolean
-connect_to_display (GdmSimpleSlave *slave)
-{
- char *display_name;
- gboolean ret;
-
- ret = FALSE;
-
- g_object_get (slave,
- "display-name", &display_name,
- NULL);
-
- /* We keep our own (windowless) connection (dsp) open to avoid the
- * X server resetting due to lack of active connections. */
-
- g_debug ("Server is ready - opening display %s", display_name);
-
- g_setenv ("DISPLAY", display_name, TRUE);
- g_unsetenv ("XAUTHORITY"); /* just in case it's set */
-
- set_local_auth (slave);
-
-#if 0
- /* X error handlers to avoid the default one (i.e. exit (1)) */
- do_xfailed_on_xio_error = TRUE;
- XSetErrorHandler (gdm_simple_slave_xerror_handler);
- XSetIOErrorHandler (gdm_simple_slave_xioerror_handler);
-#endif
-
- gdm_sigchld_block_push ();
- slave->priv->server_display = XOpenDisplay (display_name);
- gdm_sigchld_block_pop ();
-
- if (slave->priv->server_display == NULL) {
- g_warning ("Unable to connect to display %s", display_name);
- ret = FALSE;
- } else {
- g_debug ("Connected to display %s", display_name);
- ret = TRUE;
- }
-
- g_free (display_name);
-
- return ret;
-}
-
static gboolean
idle_connect_to_display (GdmSimpleSlave *slave)
{
@@ -1176,7 +1075,7 @@ idle_connect_to_display (GdmSimpleSlave *slave)
slave->priv->connection_attempts++;
- res = connect_to_display (slave);
+ res = gdm_slave_connect_to_x11_display (GDM_SLAVE (slave));
if (res) {
/* FIXME: handle wait-for-go */
@@ -1192,8 +1091,8 @@ idle_connect_to_display (GdmSimpleSlave *slave)
}
static void
-server_ready_cb (GdmServer *server,
- GdmSimpleSlave *slave)
+server_ready_cb (GdmServer *server,
+ GdmSimpleSlave *slave)
{
g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
}
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 83518754..e6e0bdd5 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -34,14 +34,13 @@
#include <glib.h>
#include <glib/gi18n.h>
#include <glib-object.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <X11/Xlib.h> /* for Display */
+#include <X11/cursorfont.h> /* for watch cursor */
#include "gdm-common.h"
@@ -65,6 +64,8 @@ struct GdmSlavePrivate
guint output_watch_id;
guint error_watch_id;
+ Display *server_display;
+
/* cached display values */
char *display_id;
char *display_name;
@@ -109,6 +110,92 @@ static void gdm_slave_finalize (GObject *object);
G_DEFINE_ABSTRACT_TYPE (GdmSlave, gdm_slave, G_TYPE_OBJECT)
+#define CURSOR_WATCH XC_watch
+void
+gdm_slave_set_busy_cursor (GdmSlave *slave)
+{
+ if (slave->priv->server_display != NULL) {
+ Cursor xcursor;
+
+ xcursor = XCreateFontCursor (slave->priv->server_display, CURSOR_WATCH);
+ XDefineCursor (slave->priv->server_display,
+ DefaultRootWindow (slave->priv->server_display),
+ xcursor);
+ XFreeCursor (slave->priv->server_display, xcursor);
+ XSync (slave->priv->server_display, False);
+ }
+}
+
+static void
+set_local_auth (GdmSlave *slave)
+{
+ GString *binary_cookie;
+ GString *cookie;
+
+ g_debug ("Setting authorization key for display %s", slave->priv->display_x11_cookie);
+
+ cookie = g_string_new (slave->priv->display_x11_cookie);
+ binary_cookie = g_string_new (NULL);
+ if (! gdm_string_hex_decode (cookie,
+ 0,
+ NULL,
+ binary_cookie,
+ 0)) {
+ g_warning ("Unable to decode hex cookie");
+ goto out;
+ }
+
+ g_debug ("Decoded cookie len %d", binary_cookie->len);
+
+ XSetAuthorization ("MIT-MAGIC-COOKIE-1",
+ (int) strlen ("MIT-MAGIC-COOKIE-1"),
+ (char *)binary_cookie->str,
+ binary_cookie->len);
+
+ out:
+ g_string_free (binary_cookie, TRUE);
+ g_string_free (cookie, TRUE);
+}
+
+gboolean
+gdm_slave_connect_to_x11_display (GdmSlave *slave)
+{
+ gboolean ret;
+
+ ret = FALSE;
+
+ /* We keep our own (windowless) connection (dsp) open to avoid the
+ * X server resetting due to lack of active connections. */
+
+ g_debug ("Server is ready - opening display %s", slave->priv->display_name);
+
+ g_setenv ("DISPLAY", slave->priv->display_name, TRUE);
+ g_unsetenv ("XAUTHORITY"); /* just in case it's set */
+
+ set_local_auth (slave);
+
+#if 0
+ /* X error handlers to avoid the default one (i.e. exit (1)) */
+ do_xfailed_on_xio_error = TRUE;
+ XSetErrorHandler (gdm_slave_xerror_handler);
+ XSetIOErrorHandler (gdm_slave_xioerror_handler);
+#endif
+
+ gdm_sigchld_block_push ();
+ slave->priv->server_display = XOpenDisplay (slave->priv->display_name);
+ gdm_sigchld_block_pop ();
+
+ if (slave->priv->server_display == NULL) {
+ g_warning ("Unable to connect to display %s", slave->priv->display_name);
+ ret = FALSE;
+ } else {
+ g_debug ("Connected to display %s", slave->priv->display_name);
+ ret = TRUE;
+ }
+
+ return ret;
+}
+
static void
display_proxy_destroyed_cb (DBusGProxy *display_proxy,
GdmSlave *slave)
diff --git a/daemon/gdm-slave.h b/daemon/gdm-slave.h
index 1ef8a88c..eaa4cc3b 100644
--- a/daemon/gdm-slave.h
+++ b/daemon/gdm-slave.h
@@ -60,7 +60,8 @@ gboolean gdm_slave_stop (GdmSlave *slave);
gboolean gdm_slave_add_user_authorization (GdmSlave *slave,
const char *username,
char **filename);
-
+gboolean gdm_slave_connect_to_x11_display (GdmSlave *slave);
+void gdm_slave_set_busy_cursor (GdmSlave *slave);
void gdm_slave_stopped (GdmSlave *slave);
G_END_DECLS
diff --git a/gui/Makefile.am b/gui/Makefile.am
index d141a30c..2f054d98 100644
--- a/gui/Makefile.am
+++ b/gui/Makefile.am
@@ -1,7 +1,6 @@
NULL =
SUBDIRS = \
- modules \
simple-chooser \
simple-greeter \
$(NULL)
diff --git a/gui/modules/.cvsignore b/gui/modules/.cvsignore
deleted file mode 100644
index a843dfe9..00000000
--- a/gui/modules/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-AccessDwellMouseEvents
-AccessKeyMouseEvents
diff --git a/gui/modules/AccessDwellMouseEvents.in b/gui/modules/AccessDwellMouseEvents.in
deleted file mode 100644
index cb19a6ea..00000000
--- a/gui/modules/AccessDwellMouseEvents.in
+++ /dev/null
@@ -1,62 +0,0 @@
-# This is the configuration file for the keymouselistener.so module.
-# The confiuration syntax is as follows:
-#
-# crossing inital_direction timeout executable_path +args
-#
-# For executable_path give the full executable path path of the program or the
-# DefaultPath is used.
-#
-# where:
-#
-# + crossing is a string that includes any combination of TBLR characters, where
-# T means Top, B means Bottom, L means Left, and R means Right.
-#
-# + initial_direction can be either the I or O character which indicates
-# that the initial crossing is a motion In or Out of the window.
-#
-# e.g.
-# TBLR I 10000 @AT_BINDIR@/gok --login --access-method=dwellselection
-#
-# Means the user crosses into the top border, out the bottom border, into the left
-# border, and then out the right border (in that order). The initial_direction
-# value of I is what specifies that the first crossing is into the top border
-# rather than out of the top border. Each border crossing must occur within
-# 10000ms of the last border crossing for the gesture to be valid.
-#
-# It is possible to invoke multiple actions from a single gesture using the <Add>
-# keyword. Action specified with <Add> are invoked by the previous gesture
-# defined in the file. If the <Add> action is the first action defined in the
-# file, then it is ignored.
-#
-# e.g.
-#
-# <Add> @AT_BINDIR@/orca -n -d main-window
-#
-
-# AT Progarm - GOK (GNOME On-screen Keyboard)
-#
-# Support several different options for different user needs. Note these
-# gestures all start by moving the mouse into the top window border.
-#
-TBLR I 10000 @AT_BINDIR@/gok --login --access-method=dwellselection
-TLBR I 10000 @AT_BINDIR@/gok --login --access-method=automaticscanning --scan-action=switch1 --select-action=switch1
-TRBL I 10000 @AT_BINDIR@/gok --login --access-method=inversescanning --scan-action=switch1 --select-action=switch2
-TBRL I 10000 @AT_BINDIR@/gok --login --access-method=automaticscanning --scan-action=switch3 --select-action=switch3
-
-# AT Program - ORCA
-#
-# Note these gestures all start by moving the mouse into the bottom window
-# border.
-#
-# Speech
-#
-BTRL I 10000 @AT_BINDIR@/orca -n -d main-window
-
-# Magnifier
-#
-BTLR I 10000 @AT_BINDIR@/orca -n -d main-window -d speech -e magnifier
-
-# Speech and Magnifier
-#
-BRTL I 10000 @AT_BINDIR@/orca -n -d main-window -e magnifier
-
diff --git a/gui/modules/AccessKeyMouseEvents.in b/gui/modules/AccessKeyMouseEvents.in
deleted file mode 100644
index a70be06a..00000000
--- a/gui/modules/AccessKeyMouseEvents.in
+++ /dev/null
@@ -1,91 +0,0 @@
-# This is the configuration file for the keymouselistener.so module.
-# The confiuration syntax is as follows:
-#
-# For keyboard gestures:
-#
-# <modifier>[<modifier>...]key #times duration timeout executable_path +args
-#
-# For executable_path give the full executable path path of the program or the
-# DefaultPath is used. For key, this can be one of the normal keys such as 'k'
-# for the letter 'k', or 'F10' for the F10 key. If you wish to use one of the
-# 'modifier' keys you have to specify which one exactly, meaning usually
-# appending _L or _R depending on if it's the left or right one. The useful
-# ones are: Shift_L, Shift_R, Control_L, Control_R, Meta_L, Meta_R, Alt_L, Alt_R.
-# Do note that the modifier is optional.
-#
-# e.g.
-#
-# <Control>k 1 1000 10000 @AT_BINDIR@/gok --login --access-method=directselection
-#
-# Means press Contol-k 5 times, holding each keypress down for at least 1000ms
-# (1s) each time and with no greater interval than 10000ms (10s) between each
-# event in the sequence. A duration value of 0 indicates that a keypress of
-# any length is accepted. The timeout value is only meaningful if the #times
-# value is > 1. Completing the above example sequence will invoke the gnome on
-# screen keyboard program, gok. Note that you cannot release the <Control> key
-# while pressing otherwise the sequence will be lost.
-#
-# e.g.
-# Shift_L 5 1000 10000 @AT_BINDIR@/gok --login --access-method=directselection
-# Shift_R 5 1000 10000 @AT_BINDIR@/gok --login --access-method=directselection
-#
-# Will start gok if you press either shift key 5 times holding it down for more
-# then 1 second each time.
-#
-# For mouse button gestures the format is the same except the mouse button number
-# is specified instead of a key gesture:
-#
-# <Mouse#> #times duration timeout executable_path +args
-#
-# e.g.
-#
-# <Mouse2> 4 3000 6000 @AT_BINDIR@/orca -n -d main-window
-#
-# Note that mouse numbers are 1-based so <Mouse1> is the left mouse button,
-# <Mouse3> is the right mouse button and <Mouse2> is the middle mouse button.
-#
-# It is possible to invoke multiple actions from a single gesture using the <Add>
-# keyword. Actions specified with <Add> are invoked by the previous gesture
-# defined in the file. If the <Add> action is the first action defined in the
-# file, then it is ignored.
-#
-# e.g.
-#
-# <Add> @AT_BINDIR@/gnome-mag
-#
-
-# AT Program - GOK (GNOME On-screen Keyboard)
-#
-# Include a gesture for both right and left mouse button, for both right
-# and left handed users.
-#
-# hold right or left mouse button 3 times for 3 seconds each time.
-<Mouse1> 3 3000 10000 @AT_BINDIR@/gok --login --access-method=directselection
-<Mouse3> 3 3000 10000 @AT_BINDIR@/gok --login --access-method=directselection
-
-# Also support Xinput switches
-#
-<Switch1> 1 5000 0 @AT_BINDIR@/gok --login --access-method=automaticscanning --scan-action=switch1 --select-action=switch1
-<Switch2> 3 50 3000 @AT_BINDIR@/gok --login --access-method=inversescanning --scan-action=switch1 --select-action=switch2
-<Switch3> 3 1000 10000 @AT_BINDIR@/gok --login --access-method=automaticscanning --scan-action=switch3 --select-action=switch3
-
-# Although most GOK users would want to use a mouse/switch button to start GOK,
-# also include a keybinding for starting GOK with direct selection mode.
-#
-<Control>k 1 1000 10000 @AT_BINDIR@/gok --login --access-method=directselection
-
-# AT Program - ORCA
-#
-# press ctrl-s for 1 second to launch orca in speech mode
-#
-<Control>s 1 1000 10000 @AT_BINDIR@/orca -n -d main-window
-
-# press ctrl-m for 1 second to launch orca in mag mode
-#
-<Control>m 1 1000 10000 @AT_BINDIR@/orca -n -d main-window -d speech -e magnifier
-
-# press ctrl-o or ctrl-g for 1 second to launch orca in speech and mag mode
-#
-<Control>o 1 1000 10000 @AT_BINDIR@/orca -n -d main-window -e magnifier
-<Control>g 1 1000 10000 @AT_BINDIR@/orca -n -d main-window -e magnifier
-
diff --git a/gui/modules/Makefile.am b/gui/modules/Makefile.am
deleted file mode 100644
index 868d0db9..00000000
--- a/gui/modules/Makefile.am
+++ /dev/null
@@ -1,88 +0,0 @@
-## Process this file with automake to produce makefile.in
-
-INCLUDES = \
- -I. \
- -I.. \
- -DGDMCONFDIR=\"${gdmconfdir}\" \
- -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
- $(GUI_CFLAGS)
-
-#
-# -DG_DISABLE_DEPRECATED \
-# -DGDK_DISABLE_DEPRECATED \
-# -DGDK_PIXBUF_DISABLE_DEPRECATED \
-# -DGTK_DISABLE_DEPRECATED \
-# -DGNOME_DISABLE_DEPRECATED \
-#
-
-libkeymouselistener_la_SOURCES = \
- keymouselistener.c
-
-libkeymouselistener_la_LDFLAGS = \
- -rpath $(moduledir) -module -avoid-version \
- $(GUI_LIBS) \
- $(X_LIBS) \
- $(X_EXTRA_LIBS)
-
-libdwellmouselistener_la_SOURCES = \
- dwellmouselistener.c
-
-libdwellmouselistener_la_LDFLAGS = \
- -rpath $(moduledir) -module -avoid-version \
- $(GUI_LIBS) \
- $(X_LIBS) \
- $(X_EXTRA_LIBS)
-
-moduledir = $(libdir)/gtk-2.0/modules
-
-module_LTLIBRARIES = \
- libkeymouselistener.la \
- libdwellmouselistener.la
-
-moduleconfdir = $(gdmconfdir)/modules
-
-noinst_DATA = \
- AccessKeyMouseEvents \
- AccessDwellMouseEvents
-
-EXTRA_DIST = \
- AccessKeyMouseEvents.in \
- AccessDwellMouseEvents.in
-
-CLEANFILES = AccessKeyMouseEvents AccessDwellMouseEvents
-
-AccessKeyMouseEvents: $(srcdir)/AccessKeyMouseEvents.in
- sed -e 's,[@]AT_BINDIR[@],$(AT_BINDIR),g' \
- <$(srcdir)/AccessKeyMouseEvents.in >AccessKeyMouseEvents
-
-AccessDwellMouseEvents: $(srcdir)/AccessDwellMouseEvents.in
- sed -e 's,[@]AT_BINDIR[@],$(AT_BINDIR),g' \
- <$(srcdir)/AccessDwellMouseEvents.in >AccessDwellMouseEvents
-
-uninstall-hook:
- rm -f $(DESTDIR)$(moduleconfdir)/AccessKeyMouseEvents \
- $(DESTDIR)$(moduleconfdir)/factory-AccessKeyMouseEvents \
- $(DESTDIR)$(moduleconfdir)/AccessDwellMouseEvents \
- $(DESTDIR)$(moduleconfdir)/factory-AccessDwellMouseEvents
-
-install-data-hook: AccessKeyMouseEvents AccessDwellMouseEvents
- if test '!' -d $(DESTDIR)$(moduleconfdir); then \
- $(mkinstalldirs) $(DESTDIR)$(moduleconfdir); \
- chmod 755 $(DESTDIR)$(moduleconfdir); \
- fi
- -if cmp -s $(DESTDIR)$(moduleconfdir)/AccessKeyMouseEvents $(DESTDIR)$(moduleconfdir)/factory-AccessKeyMouseEvents 2>&1 /dev/null ; then \
- cp -f $(DESTDIR)$(moduleconfdir)/AccessKeyMouseEvents $(DESTDIR)$(moduleconfdir)/AccessKeyMouseEvents.orig; \
- $(INSTALL_DATA) AccessKeyMouseEvents $(DESTDIR)$(moduleconfdir)/AccessKeyMouseEvents; \
- fi
- if test '!' -f $(DESTDIR)$(moduleconfdir)/AccessKeyMouseEvents; then \
- $(INSTALL_DATA) AccessKeyMouseEvents $(DESTDIR)$(moduleconfdir)/AccessKeyMouseEvents; \
- fi
- $(INSTALL_DATA) AccessKeyMouseEvents $(DESTDIR)$(moduleconfdir)/factory-AccessKeyMouseEvents
- -if cmp -s $(DESTDIR)$(moduleconfdir)/AccessDwellMouseEvents $(DESTDIR)$(moduleconfdir)/factory-AccessDwellMouseEvents 2>&1 /dev/null ; then \
- cp -f $(DESTDIR)$(moduleconfdir)/AccessDwellMouseEvents $(DESTDIR)$(moduleconfdir)/AccessDwellMouseEvents.orig; \
- $(INSTALL_DATA) AccessDwellMouseEvents $(DESTDIR)$(moduleconfdir)/AccessDwellMouseEvents; \
- fi
- if test '!' -f $(DESTDIR)$(moduleconfdir)/AccessDwellMouseEvents; then \
- $(INSTALL_DATA) AccessDwellMouseEvents $(DESTDIR)$(moduleconfdir)/AccessDwellMouseEvents; \
- fi
- $(INSTALL_DATA) AccessDwellMouseEvents $(DESTDIR)$(moduleconfdir)/factory-AccessDwellMouseEvents
diff --git a/gui/modules/dwellmouselistener.c b/gui/modules/dwellmouselistener.c
deleted file mode 100644
index 419b30ae..00000000
--- a/gui/modules/dwellmouselistener.c
+++ /dev/null
@@ -1,760 +0,0 @@
-/* GDM - The Gnome Display Manager
- * Copyright (C) 1999, 2000 Martin K. Petersen <mkp@mkp.net>
- *
- * This file Copyright (c) 2003 Sun Microsystems Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include "config.h"
-
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <math.h>
-
-#include <glib.h>
-#include <gmodule.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-
-#include <X11/Xlib.h>
-
-#ifdef HAVE_XINPUT
-#include <X11/extensions/XInput.h>
-#endif
-
-/*
- * Note that CONFIGFILE will have to be changed to something more generic
- * if this module is ever moved outside of gdm.
- */
-
-#define CONFIGFILE GDMCONFDIR "/modules/AccessDwellMouseEvents"
-#define iseol(ch) ((ch) == '\r' || (ch) == '\f' || (ch) == '\0' || \
- (ch) == '\n')
-
-typedef enum
-{
- BINDING_DWELL_BORDER_TOP = 1 << 0,
- BINDING_DWELL_BORDER_BOTTOM = 1 << 1,
- BINDING_DWELL_BORDER_RIGHT = 1 << 2,
- BINDING_DWELL_BORDER_LEFT = 1 << 3,
- BINDING_DWELL_BORDER_ERROR = 1 << 4
-} BindingType;
-
-typedef enum
-{
- BINDING_DWELL_DIRECTION_IN = 1 << 0,
- BINDING_DWELL_DIRECTION_OUT = 1 << 1,
- BINDING_DWELL_DIRECTION_ERROR = 1 << 2
-} BindingDirection;
-
-typedef struct {
- int num_gestures;
- BindingType *gesture;
- BindingDirection start_direction;
-} Dwell;
-
-typedef struct {
- Dwell input;
- char *binding_str;
- GSList *actions;
- guint timeout;
-} Binding;
-
-typedef struct {
- BindingType type;
- BindingDirection direction;
- guint32 time;
-} Crossings;
-
-static int lineno = 0;
-static GSList *binding_list = NULL;
-
-extern char **environ;
-
-static guint enter_signal_id = 0;
-static guint leave_signal_id = 0;
-static int xinput_type_motion = 0;
-
-static Crossings *crossings = NULL;
-static int cross_pos = 0;
-static guint max_crossings = 0;
-static XID *ext_input_devices = NULL;
-static gint ext_device_count = 0;
-static gboolean latch_core_pointer = TRUE;
-
-static void create_event_watcher (void);
-static void load_bindings(gchar *path);
-static gchar * screen_exec_display_string (GdkScreen *screen, const char *old);
-static gchar ** get_exec_environment (GdkScreen *screen);
-static Binding * parse_line(gchar *buf);
-static gboolean binding_already_used (Binding *binding);
-static gboolean debug_gestures = FALSE;
-
-BindingType get_binding_type(char c);
-BindingDirection get_binding_direction(char c);
-
-static gboolean
-is_ext_device (XID id)
-{
- gint i;
- for (i=0; i < ext_device_count; i++)
- if (id == ext_input_devices[i])
- return TRUE;
-
- if (debug_gestures)
- syslog (LOG_WARNING, "is-ext-device failed for %d", (int) id);
-
- return FALSE;
-}
-
-static void
-init_xinput (GdkDisplay *display, GdkWindow *root)
-{
-#ifdef HAVE_XINPUT
- XEventClass event_list[40];
- int i, j, number = 0, num_devices;
- XDeviceInfo *devices = NULL;
- XDevice *device = NULL;
-
- devices = XListInputDevices (GDK_DISPLAY_XDISPLAY (display),
- &num_devices);
-
- if (debug_gestures)
- syslog (LOG_WARNING, "Checking %d input devices...",
- num_devices);
-
- for (i=0; i < num_devices; i++) {
- if (devices[i].use == IsXExtensionDevice) {
- device = XOpenDevice (GDK_DISPLAY_XDISPLAY (display),
- devices[i].id);
- for (j=0; j < device->num_classes && number < 39; j++) {
- switch (device->classes[j].input_class)
- {
- case ValuatorClass:
- DeviceMotionNotify (device,
- xinput_type_motion,
- event_list[number]);
- number++;
- default:
- break;
- }
- }
- ++ext_device_count;
-
- if (ext_input_devices) {
- ext_input_devices = g_realloc (ext_input_devices,
- sizeof (XID *) * ext_device_count);
- } else {
- ext_input_devices = g_malloc (sizeof (XID *));
- }
- ext_input_devices[ext_device_count - 1] = devices[i].id;
- }
- }
-
- if (debug_gestures)
- syslog (LOG_WARNING, "%d event types available", number);
-
- if (XSelectExtensionEvent (GDK_WINDOW_XDISPLAY (root),
- GDK_WINDOW_XWINDOW (root),
- event_list, number)) {
- if (debug_gestures)
- syslog (LOG_WARNING,
- "Can't select input device events!");
- }
-#endif
-}
-
-static gchar *
-screen_exec_display_string (GdkScreen *screen, const char *old)
-{
- GString *str;
- const gchar *old_display;
- gchar *retval;
- gchar *p;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
- old_display = gdk_display_get_name (gdk_screen_get_display (screen));
-
- str = g_string_new ("DISPLAY=");
- g_string_append (str, old_display);
-
- p = strrchr (str->str, '.');
- if (p && p > strchr (str->str, ':'))
- g_string_truncate (str, p - str->str);
-
- g_string_append_printf (str, ".%d", gdk_screen_get_number (screen));
-
- retval = str->str;
-
- g_string_free (str, FALSE);
-
- return retval;
-}
-
-/**
- * get_exec_environment:
- *
- * Description: Modifies the current program environment to
- * ensure that $DISPLAY is set such that a launched application
- * inheriting this environment would appear on screen.
- *
- * Returns: a newly-allocated %NULL-terminated array of strings or
- * %NULL on error. Use g_strfreev() to free it.
- *
- * mainly ripped from egg_screen_exec_display_string in
- * gnome-panel/egg-screen-exec.c
- **/
-static gchar **
-get_exec_environment (GdkScreen *screen)
-{
- gchar **retval = NULL;
- gint i;
- gint display_index = -1;
-
- g_assert (GDK_IS_SCREEN (screen));
-
- for (i=0; environ [i]; i++)
- if (strncmp (environ [i], "DISPLAY", 7) == 0)
- display_index = i;
-
- if (display_index == -1)
- display_index = i++;
-
- retval = g_new0 (char *, i + 1);
-
- for (i=0; environ [i]; i++)
- if (i == display_index)
- retval [i] = screen_exec_display_string (screen,
- environ[i]);
- else
- retval [i] = g_strdup (environ [i]);
-
- retval [i] = NULL;
-
- return retval;
-}
-
-BindingType
-get_binding_type(char c)
-{
- BindingType rc;
-
- if (c == toupper ('T'))
- rc = BINDING_DWELL_BORDER_TOP;
- else if (c == toupper ('B'))
- rc = BINDING_DWELL_BORDER_BOTTOM;
- else if (c == toupper ('R'))
- rc = BINDING_DWELL_BORDER_RIGHT;
- else if (c == toupper ('L'))
- rc = BINDING_DWELL_BORDER_LEFT;
- else
- rc = BINDING_DWELL_BORDER_ERROR;
-
- return rc;
-}
-
-BindingDirection
-get_binding_direction(char c)
-{
- BindingDirection rc;
-
- if (c == toupper ('I'))
- rc = BINDING_DWELL_DIRECTION_IN;
- else if (c == toupper ('O'))
- rc = BINDING_DWELL_DIRECTION_OUT;
- else
- rc = BINDING_DWELL_DIRECTION_ERROR;
-
- return rc;
-}
-
-static void
-free_binding (Binding *binding)
-{
- if (binding == NULL)
- return;
-
- g_slist_foreach (binding->actions, (GFunc)g_free, NULL);
- g_slist_free (binding->actions);
- g_free (binding->binding_str);
- g_free (binding->input.gesture);
- g_free (binding);
-}
-
-static Binding *
-parse_line(gchar *buf)
-{
- gchar *keystring, *keyservice;
- Binding *tmp_binding = NULL;
- static GdkDisplay *display = NULL;
-
- lineno++;
-
- if (!display) {
- if ((display = gdk_display_get_default ()) == NULL)
- return NULL;
- }
-
- if ((*buf == '#') || (iseol (*buf)) || (buf == NULL))
- return NULL;
-
- /* Find the binding name */
- keystring = strtok (buf, " \t\n\r\f");
- if (keystring == NULL) {
- /* TODO - Add an error message */
- return NULL;
- }
-
- tmp_binding = g_new0 (Binding, 1);
- tmp_binding->binding_str = g_strdup (keystring);
-
- if (strcmp (tmp_binding->binding_str, "<Add>") != 0) {
- BindingType bt;
- BindingDirection bd;
- guint timeout;
- gchar *tmp_string;
- int i, j;
-
- tmp_binding->input.gesture = g_new0 (BindingType,
- strlen (tmp_binding->binding_str));
-
- j=0;
- for (i=0; i < strlen(tmp_binding->binding_str); i++) {
- bt = get_binding_type (tmp_binding->binding_str[i]);
-
- if (bt == BINDING_DWELL_BORDER_ERROR) {
- if (debug_gestures)
- syslog (LOG_WARNING,
- "Invalid value in binding %s",
- tmp_binding->binding_str);
-
- continue;
- }
-
- tmp_binding->input.gesture[j++] = bt;
- }
- tmp_binding->input.num_gestures = j;
-
- if (j > max_crossings)
- max_crossings = j;
-
- /* [TODO] Need to clean up here. */
- tmp_string = strtok (NULL, " \t\n\r\f");
- if (tmp_string == NULL) {
- /* TODO - Add an error message */
- free_binding (tmp_binding);
- return NULL;
- }
-
- bd = get_binding_direction (tmp_string[0]);
-
- if (bd == BINDING_DWELL_DIRECTION_ERROR) {
- if (debug_gestures)
- syslog (LOG_WARNING, "Invalid value in binding %s",
- tmp_binding->binding_str);
- } else {
- tmp_binding->input.start_direction = bd;
- }
-
- /*
- * Find the timeout duration (in ms). Timeout value is the
- * time within which consecutive keypress actions must be
- * performed by the user before the sequence is discarded.
- */
-
- tmp_string = strtok (NULL, " \t\n\r\f");
- if (tmp_string == NULL) {
- /* TODO - Add an error message */
- free_binding (tmp_binding);
- return NULL;
- }
-
- timeout = atoi (tmp_string);
- if (timeout <= 0) {
- /* TODO - Add an error message */;
- free_binding (tmp_binding);
- return NULL;
- }
- tmp_binding->timeout = timeout;
- }
-
- /* Find service. Permit blank space so arguments can be supplied. */
- keyservice = strtok (NULL, "\n\r\f");
- if (keyservice == NULL) {
- /* TODO - Add an error message */
- free_binding (tmp_binding);
- return NULL;
- }
-
- /* skip over initial whitespace */
- while (*keyservice && isspace (*keyservice))
- keyservice++;
-
- tmp_binding->actions = g_slist_append (tmp_binding->actions,
- g_strdup (keyservice));
-
- return tmp_binding;
-}
-
-static gboolean
-binding_already_used (Binding *binding)
-{
- GSList *li;
-
- for (li=binding_list; li != NULL; li = li->next) {
- Binding *tmp_binding = (Binding*) li->data;
-
- if (tmp_binding != binding &&
- tmp_binding->input.start_direction == binding->input.start_direction)
- {
- int i;
-
- for (i=0; i < tmp_binding->input.num_gestures; i++) {
- if (tmp_binding->input.gesture !=
- binding->input.gesture)
- break;
- }
-
- if (i == tmp_binding->input.num_gestures)
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static void
-load_bindings(gchar *path)
-{
- FILE *fp;
- Binding *tmp_binding;
- gchar buf[1024];
-
- fp = fopen (path, "r");
- if (fp == NULL) {
- /* TODO - I18n */
- if (debug_gestures)
- syslog (LOG_WARNING,
- "Cannot open bindings file: %s", path);
- return;
- }
-
- while (fgets (buf, sizeof (buf), fp) != NULL) {
- tmp_binding = (Binding *)parse_line (buf);
-
- if (tmp_binding) {
- /* Is the key already associated with an existing */
- /* binding? */
- if (strcmp (tmp_binding->binding_str, "<Add>") == 0) {
- /* Add another action to the last binding */
- Binding *last_binding;
- GSList *last_item = g_slist_last (binding_list);
-
- /* If there is no last_item to add onto */
- /* ignore the entry */
- if (last_item) {
- last_binding = (Binding *)last_item->data;
-
- /* Add the action to the last */
- /* binding's actions list */
- last_binding->actions =
- g_slist_append (last_binding->actions,
- g_strdup ((gchar *)tmp_binding->actions->data));
- }
- free_binding (tmp_binding);
-
- /* Ignore duplicate bindings */
- } else if (!binding_already_used (tmp_binding))
- binding_list = g_slist_append (binding_list,
- tmp_binding);
- else
- free_binding (tmp_binding);
- }
- }
- fclose (fp);
-}
-
-static gboolean
-change_cursor_back (gpointer data)
-{
- GdkCursor *cursor = gdk_cursor_new (GDK_LEFT_PTR);
- gdk_window_set_cursor (gdk_get_default_root_window (), cursor);
- gdk_cursor_unref (cursor);
-
- return FALSE;
-}
-
-
-static gboolean
-leave_enter_emission_hook (GSignalInvocationHint *ihint,
- guint n_param_values,
- const GValue *param_values,
- gpointer data)
-{
- GObject *object;
- GtkWidget *widget;
- GtkWindow *window;
- GdkEventCrossing *event;
- GdkRectangle rect;
- GSList *li;
- double mid_x, mid_y;
- int i;
-
- object = g_value_get_object (param_values + 0);
- event = g_value_get_boxed (param_values + 1);
- widget = GTK_WIDGET (object);
- window = GTK_WINDOW (object);
-
- if (event->detail == GDK_NOTIFY_INFERIOR ||
- !GTK_IS_WINDOW (object) || !GTK_WIDGET_TOPLEVEL (object)) {
- return TRUE;
- }
-
- gdk_window_get_frame_extents (widget->window, &rect);
-
- mid_x = rect.x + (rect.width / 2);
- mid_y = rect.y + (rect.height / 2);
-
- /* avoid division by 0 */
- if (fabs (event->x_root - mid_x) <= 0.001) {
- if (event->x_root < mid_x)
- crossings[cross_pos].type = BINDING_DWELL_BORDER_LEFT;
- else
- crossings[cross_pos].type = BINDING_DWELL_BORDER_RIGHT;
- } else {
- double slope = (event->y_root - mid_y) / (event->x_root - mid_x);
-
- if (event->y_root < mid_y) {
- if (slope > 1 || slope < -1)
- crossings[cross_pos].type = BINDING_DWELL_BORDER_TOP;
- else if (slope >= 0)
- crossings[cross_pos].type = BINDING_DWELL_BORDER_LEFT;
- else
- crossings[cross_pos].type = BINDING_DWELL_BORDER_RIGHT;
- } else {
- if (slope > 1 || slope < -1)
- crossings[cross_pos].type = BINDING_DWELL_BORDER_BOTTOM;
- else if (slope >= 0)
- crossings[cross_pos].type = BINDING_DWELL_BORDER_RIGHT;
- else
- crossings[cross_pos].type = BINDING_DWELL_BORDER_LEFT;
- }
- }
-
- if (ihint->signal_id == enter_signal_id)
- crossings[cross_pos].direction = BINDING_DWELL_DIRECTION_IN;
- else if (ihint->signal_id == leave_signal_id)
- crossings[cross_pos].direction = BINDING_DWELL_DIRECTION_OUT;
-
- if (debug_gestures) {
- if (crossings[cross_pos].type == BINDING_DWELL_BORDER_BOTTOM)
- syslog (LOG_WARNING, "Crossing bottom.");
- else if (crossings[cross_pos].type == BINDING_DWELL_BORDER_TOP)
- syslog (LOG_WARNING, "Crossing top.");
- else if (crossings[cross_pos].type == BINDING_DWELL_BORDER_LEFT)
- syslog (LOG_WARNING, "Crossing left.");
- else if (crossings[cross_pos].type == BINDING_DWELL_BORDER_RIGHT)
- syslog (LOG_WARNING, "Crossing right.");
-
- if (crossings[cross_pos].direction == BINDING_DWELL_DIRECTION_IN)
- syslog (LOG_WARNING, "Crossing in.");
- else if (crossings[cross_pos].direction == BINDING_DWELL_DIRECTION_OUT)
- syslog (LOG_WARNING, "Crossing out.");
- }
-
- crossings[cross_pos].time = event->time;
-
- /* Check to see if a gesture has been completed */
- for (li=binding_list; li != NULL; li = li->next) {
- Binding *curr_binding = (Binding *) li->data;
- GSList *act_li;
- gboolean retval;
- gchar **argv = NULL;
- gchar **envp = NULL;
- int start_pos = (cross_pos - curr_binding->input.num_gestures + 1 +
- max_crossings) % max_crossings;
-
- if (debug_gestures) {
- syslog (LOG_WARNING, "Checking against registered gestures");
- }
-
- /* being anal here */
- if (start_pos < 0)
- start_pos = 0;
-
- /* check direction */
- if (curr_binding->input.start_direction != crossings[start_pos].direction)
- continue;
-
- /* check borders */
- for (i=0; i < curr_binding->input.num_gestures; i++) {
- if (curr_binding->input.gesture[i] !=
- crossings[(start_pos + i) % max_crossings].type)
- break;
- }
-
- if (i != curr_binding->input.num_gestures)
- continue;
-
- /* check timeout values */
- for (i=1; i < curr_binding->input.num_gestures; i++) {
- int cur_pos = (start_pos + i) % max_crossings;
- int prev_pos = (start_pos + i - 1) % max_crossings;
- guint32 diff_time = crossings[cur_pos].time -
- crossings[prev_pos].time;
-
- if (curr_binding->timeout != 0 &&
- curr_binding->timeout < diff_time)
- break;
- }
-
- if (i != curr_binding->input.num_gestures)
- continue;
-
- /* gesture recognized */
- if (debug_gestures) {
- syslog (LOG_WARNING, "Found gesture");
- }
-
- for (act_li=curr_binding->actions; act_li != NULL; act_li=act_li->next) {
- gchar *action = (gchar *)act_li->data;
-
- g_return_val_if_fail (action != NULL, TRUE);
-
- if (!g_shell_parse_argv (action, NULL, &argv, NULL))
- continue;
-
- envp = get_exec_environment (gtk_window_get_screen(window));
-
- if (debug_gestures)
- syslog (LOG_WARNING, "Action is %s", action);
-
- retval = g_spawn_async (NULL, argv, envp,
- G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
-
- g_strfreev (argv);
- g_strfreev (envp);
-
- if ( ! retval) {
- GtkWidget *dialog = gtk_message_dialog_new (NULL,
- 0, GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("Error while trying to run (%s)\n"\
- "which is linked to (%s)"),
- action, curr_binding->binding_str);
- gtk_dialog_set_has_separator (GTK_DIALOG (dialog),
- FALSE);
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
- gtk_widget_show (dialog);
- } else {
- GdkCursor *cursor = gdk_cursor_new (GDK_WATCH);
- gdk_window_set_cursor (gdk_get_default_root_window (),
- cursor);
- gdk_cursor_unref (cursor);
- g_timeout_add (2000, change_cursor_back, NULL);
- latch_core_pointer = FALSE;
- /* once we've recognized a gesture, we need to *
- * leave the pointer alone */
- }
- }
- }
-
- cross_pos = (cross_pos + 1) % max_crossings;
-
- return TRUE;
-}
-
-static GdkFilterReturn
-gestures_filter (GdkXEvent *gdk_xevent,
- GdkEvent *event,
- gpointer data)
-{
- XEvent *xevent = (XEvent *)gdk_xevent;
-
- if (xevent->type == xinput_type_motion) {
- XDeviceMotionEvent *motion = (XDeviceMotionEvent *) xevent;
- if ((motion->axes_count < 2) || !is_ext_device (motion->deviceid))
- return GDK_FILTER_CONTINUE;
- if (latch_core_pointer)
- XWarpPointer (motion->display, None,
- motion->root,
- 0, 0, 0, 0, motion->axis_data[0], motion->axis_data[1]);
- }
- return GDK_FILTER_CONTINUE;
-}
-
-static void
-create_event_watcher (void)
-{
- GdkDisplay *display;
- gint i;
-
- display = gdk_display_get_default ();
- if (!display)
- return;
-
- load_bindings(CONFIGFILE);
-
- crossings = g_new0(Crossings, max_crossings);
-
- for (i=0; i < max_crossings; i++) {
- crossings[i].type = BINDING_DWELL_BORDER_ERROR;
- crossings[i].direction = BINDING_DWELL_DIRECTION_ERROR;
- crossings[i].time = 0;
- }
-
- init_xinput (display,
- gdk_screen_get_root_window (
- gdk_display_get_default_screen (display)));
-
- gdk_window_add_filter (NULL, gestures_filter, NULL);
-
- /* set up emission hook */
- gtk_type_class (GTK_TYPE_WIDGET);
- enter_signal_id = g_signal_lookup ("enter-notify-event", GTK_TYPE_WIDGET);
- leave_signal_id = g_signal_lookup ("leave-notify-event", GTK_TYPE_WIDGET);
-
- g_signal_add_emission_hook (enter_signal_id, 0,
- leave_enter_emission_hook, NULL, (GDestroyNotify) NULL);
- g_signal_add_emission_hook (leave_signal_id, 0,
- leave_enter_emission_hook, NULL, (GDestroyNotify) NULL);
-}
-
-/* The init function for this gtk module */
-G_MODULE_EXPORT void gtk_module_init (int *argc, char* argv[]);
-
-void gtk_module_init (int *argc, char* argv[])
-{
- if (g_getenv ("GDM_DEBUG_GESTURES") != NULL)
- debug_gestures = TRUE;
-
- if (debug_gestures) {
- /* If not running under GDM, then need to openlog ourselves */
- if (g_getenv ("RUNNING_UNDER_GDM") == NULL)
- openlog ("gesturelistener", LOG_PID, LOG_DAEMON);
-
- syslog (LOG_WARNING, "dwellmouselistener loaded.");
- }
-
- create_event_watcher ();
-}
-
-/* EOF */
diff --git a/gui/modules/keymouselistener.c b/gui/modules/keymouselistener.c
deleted file mode 100644
index 759034df..00000000
--- a/gui/modules/keymouselistener.c
+++ /dev/null
@@ -1,1010 +0,0 @@
-/* GDM - The Gnome Display Manager
- * Copyright (C) 1999, 2000 Martin K. Petersen <mkp@mkp.net>
- *
- * This file Copyright (c) 2003 Sun Microsystems Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <syslog.h>
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/keysym.h>
-
-#include <glib.h>
-#include <gmodule.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-
-#ifdef HAVE_XINPUT
-#include <X11/extensions/XInput.h>
-#endif
-
-/*
- * Note that CONFIGFILE will have to be moved to somewhere more generic
- * if this module is ever moved outside of gdm.
- */
-#define CONFIGFILE GDMCONFDIR "/modules/AccessKeyMouseEvents"
-#define iseol(ch) ((ch) == '\r' || (ch) == '\f' || (ch) == '\0' || \
- (ch) == '\n')
-
-#define N_INPUT_TYPES 40
-
-typedef enum
-{
- GESTURE_TYPE_KEY = 1 << 0,
- GESTURE_TYPE_MOUSE = 1 << 1,
- GESTURE_TYPE_BUTTON = 1 << 2
-} GestureType;
-
-typedef enum {
- XINPUT_TYPE_MOTION = 0,
- XINPUT_TYPE_BUTTON_PRESS = 1,
- XINPUT_TYPE_BUTTON_RELEASE = 2,
- XINPUT_TYPE_KEY_PRESS = 3,
- XINPUT_TYPE_KEY_RELEASE = 4
-} XInputEventType;
-
-typedef struct {
- guint keysym;
- GdkModifierType state;
- guint keycode;
-} Key;
-
-typedef struct {
- guint number;
- GdkModifierType state;
-} Button;
-
-union Input {
- Key key;
- Button button;
-};
-
-typedef struct {
- GestureType type;
- union Input input;
- char *gesture_str;
- GSList *actions;
- guint n_times;
- guint duration;
- guint timeout;
- gint start_time;
- gint seq_count;
-} Gesture;
-
-static int xinput_types[N_INPUT_TYPES];
-
-extern char **environ;
-
-static gboolean debug_gestures = FALSE;
-static GSList *gesture_list = NULL;
-static int lineno = 0;
-
-static gchar * screen_exec_display_string (GdkScreen *screen, const char *old);
-static void create_event_watcher (void);
-static void load_gestures(gchar *path);
-static gchar ** get_exec_environment (XEvent *xevent);
-static Gesture * parse_line(gchar *buf);
-static GdkFilterReturn gestures_filter (GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data);
-static gint is_mouseX (const gchar *string);
-static gint is_switchX (const gchar *string);
-
-#define gesture_list_get_matches(a, b, c) (g_slist_find_custom (a, b, c))
-
-static void
-free_gesture (Gesture *gesture)
-{
- if (gesture == NULL)
- return;
-
- g_slist_foreach (gesture->actions, (GFunc)g_free, NULL);
- g_slist_free (gesture->actions);
- g_free (gesture->gesture_str);
- g_free (gesture);
-}
-
-static gchar *
-screen_exec_display_string (GdkScreen *screen, const char *old)
-{
- GString *str;
- const gchar *old_display;
- gchar *retval;
- gchar *p;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
- old_display = gdk_display_get_name (gdk_screen_get_display (screen));
-
- str = g_string_new ("DISPLAY=");
- g_string_append (str, old_display);
-
- p = strrchr (str->str, '.');
- if (p && p > strchr (str->str, ':'))
- g_string_truncate (str, p - str->str);
-
- g_string_append_printf (str, ".%d", gdk_screen_get_number (screen));
-
- retval = str->str;
-
- g_string_free (str, FALSE);
-
- return retval;
-}
-
-static void
-init_xinput (GdkDisplay *display, GdkWindow *root)
-{
-#ifdef HAVE_XINPUT
- XEventClass event_list[40];
- int i, j, number = 0, num_devices;
- XDeviceInfo *devices = NULL;
- XDevice *device = NULL;
-
- devices = XListInputDevices (GDK_DISPLAY_XDISPLAY (display),
- &num_devices);
-
- if (debug_gestures)
- syslog (LOG_WARNING, "checking %d input devices...", num_devices);
-
- for (i=0; i < num_devices; i++) {
- if (devices[i].use == IsXExtensionDevice)
- {
- device = XOpenDevice (GDK_DISPLAY_XDISPLAY (display),
- devices[i].id);
-
- for (j=0; j < device->num_classes && number < 39; j++) {
-
- switch (device->classes[j].input_class)
- {
- case KeyClass:
- DeviceKeyPress (device,
- xinput_types[XINPUT_TYPE_KEY_PRESS],
- event_list[number]);
- number++;
- DeviceKeyRelease (device,
- xinput_types[XINPUT_TYPE_KEY_RELEASE],
- event_list[number]);
- number++;
- break;
- case ButtonClass:
- DeviceButtonPress (device,
- xinput_types[XINPUT_TYPE_BUTTON_PRESS],
- event_list[number]);
- number++;
- DeviceButtonRelease (device,
- xinput_types[XINPUT_TYPE_BUTTON_RELEASE],
- event_list[number]);
- number++;
- break;
- case ValuatorClass:
- DeviceMotionNotify (device,
- xinput_types[XINPUT_TYPE_MOTION],
- event_list[number]);
- number++;
- }
- }
- }
- }
-
- if (debug_gestures)
- syslog (LOG_WARNING, "%d event types available", number);
-
- if (XSelectExtensionEvent(GDK_WINDOW_XDISPLAY (root),
- GDK_WINDOW_XWINDOW (root),
- event_list, number)) {
- if (debug_gestures)
- syslog (LOG_WARNING,
- "Can't select input device events!");
- }
-#endif
-}
-
-static void create_event_watcher (void)
-{
- GdkDisplay *display;
-
- display = gdk_display_get_default();
- if (!display)
- return;
-
- load_gestures(CONFIGFILE);
-
- init_xinput (display, gdk_screen_get_root_window (
- gdk_display_get_default_screen (display)));
-
- gdk_window_add_filter (NULL, gestures_filter, NULL);
-
- return;
-}
-
-
-static void
-load_gestures(gchar *path)
-{
- FILE *fp;
- Gesture *tmp_gesture;
- gchar buf[1024];
-
- fp = fopen (path, "r");
- if (fp == NULL) {
- /* TODO - I18n */
- if (debug_gestures)
- syslog (LOG_WARNING, _("Cannot open gestures file: %s"),
- path);
- return;
- }
-
- while (fgets (buf, sizeof (buf), fp) != NULL) {
-
- tmp_gesture = (Gesture *)parse_line(buf);
- if (tmp_gesture) {
-
- /* Is the key already associated with an existing
- gesture? */
- if (strcmp (tmp_gesture->gesture_str, "<Add>") == 0) {
-
- /* Add another action to the last gesture */
- Gesture *last_gesture;
- GSList *last_item = g_slist_last (gesture_list);
-
- /* If there is no last_item to add onto ignore
- the entry */
- if (last_item) {
- last_gesture = (Gesture *)
- last_item->data;
-
- /* Add the action to the last gesture's
- actions list */
- last_gesture->actions =
- g_slist_append (last_gesture->actions,
- g_strdup ((gchar *)tmp_gesture->actions->data));
- }
- free_gesture (tmp_gesture);
-
- /* We must be able to deal with multiple
- unambiguous gestures attached to one
- switch/button */
- } else {
- gesture_list = g_slist_append (gesture_list,
- tmp_gesture);
- }
- }
- }
- fclose (fp);
-}
-
-
-/**
- * get_exec_environment:
- *
- * Description: Modifies the current program environment to
- * ensure that $DISPLAY is set such that a launched application
- * inheriting this environment would appear on screen.
- *
- * Returns: a newly-allocated %NULL-terminated array of strings or
- * %NULL on error. Use g_strfreev() to free it.
- *
- * mainly ripped from egg_screen_exec_display_string in
- * gnome-panel/egg-screen-exec.c
- **/
-static gchar **
-get_exec_environment (XEvent *xevent)
-{
- gchar **retval = NULL;
- gint i;
- gint display_index = -1;
-
- GdkScreen *screen = NULL;
- GdkWindow *window = gdk_xid_table_lookup (xevent->xkey.root);
-
- if (window)
- screen = gdk_drawable_get_screen (GDK_DRAWABLE (window));
-
- /* TODO: revisit this fallback, it's suspect since Xi events might not
- have xkey.root set */
-
- else
- screen = gdk_display_get_default_screen (gdk_display_get_default ());
-
- g_assert (GDK_IS_SCREEN (screen));
-
- for (i=0; environ [i]; i++)
- if (!strncmp (environ [i], "DISPLAY", 7))
- display_index = i;
-
- if (display_index == -1)
- display_index = i++;
-
- retval = g_new0 (char *, i + 1);
-
- for (i=0; environ [i]; i++) {
- if (i == display_index)
- retval [i] = screen_exec_display_string (screen,
- environ[i]);
- else
- retval [i] = g_strdup (environ [i]);
- }
-
- retval [i] = NULL;
-
- return retval;
-}
-
-static Gesture *
-parse_line (gchar *buf)
-{
- static GdkDisplay *display = NULL;
- Gesture *tmp_gesture = NULL;
- gchar *keystring;
- gchar *keyservice;
- gint button = 0;
-
- if (!display) {
- if ((display = gdk_display_get_default()) == NULL)
- return NULL;
- }
- lineno++;
-
- if ((*buf == '#') || (iseol(*buf)) || (buf == NULL))
- return NULL;
-
- /* Find the key name */
- keystring = strtok (buf, " \t\n\r\f");
- if (keystring == NULL) {
- /* TODO - Error messages */
- return NULL;
- }
-
- tmp_gesture = g_new0 (Gesture, 1);
- tmp_gesture->gesture_str = g_strdup (keystring);
-
- if (strcmp (tmp_gesture->gesture_str, "<Add>") != 0) {
- guint n, duration, timeout;
- gchar *tmp_string;
-
- tmp_gesture->start_time = 0;
- tmp_gesture->seq_count = 0;
-
- button = is_mouseX (tmp_gesture->gesture_str);
- if (button > 0) {
- tmp_gesture->type = GESTURE_TYPE_MOUSE;
- tmp_gesture->input.button.number = button;
- } else if ((button = is_switchX (tmp_gesture->gesture_str)) == TRUE) {
- tmp_gesture->type = GESTURE_TYPE_BUTTON;
- tmp_gesture->input.button.number = button;
- } else {
- tmp_gesture->type = GESTURE_TYPE_KEY;
- gtk_accelerator_parse (tmp_gesture->gesture_str,
- &(tmp_gesture->input.key.keysym),
- &(tmp_gesture->input.key.state));
- if (tmp_gesture->input.key.keysym == 0 &&
- tmp_gesture->input.key.state == 0) {
- /* TODO - Error messages here */
- free_gesture (tmp_gesture);
- return NULL;
- }
- tmp_gesture->input.key.keycode =
- XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (display),
- tmp_gesture->input.key.keysym);
- }
-
- if (tmp_gesture->type == 0) {
- /* TODO - Error messages here */
- free_gesture (tmp_gesture);
- return NULL;
- }
- /* [TODO] Need to clean up here. */
-
- /* Find the repetition number */
- tmp_string = strtok (NULL, " \t\n\r\f");
- if (tmp_string == NULL) {
- /* TODO - Error messages */
- free_gesture (tmp_gesture);
- return NULL;
- }
-
- /* TODO - the above doesn't check for the string to
- be all digits */
- if ((n=atoi (tmp_string)) <= 0) {
- /* Add an error message */
- free_gesture (tmp_gesture);
- return NULL;
- }
- tmp_gesture->n_times = n;
-
- /*
- * Find the key press duration (in ms)
- */
- tmp_string = strtok (NULL, " \t\n\r\f");
- if (tmp_string == NULL) {
- /* TODO - Error messages */
- free_gesture (tmp_gesture);
- return NULL;
- }
- /* TODO - the above doesn't check for the string to
- be all digits */
-
- duration = atoi (tmp_string);
- if (duration < 0) {
- /* Add an error message */
- free_gesture (tmp_gesture);
- return NULL;
- }
- tmp_gesture->duration = duration;
-
- /*
- * Find the timeout duration (in ms). Timeout value is the
- * time within which consecutive keypress actions must be
- * performed by the user before the sequence is discarded.
- */
- tmp_string = strtok (NULL, " \t\n\r\f");
- if (tmp_string == NULL) {
- /* TODO - Error messages */
- free_gesture (tmp_gesture);
- return NULL;
- }
-
- /*
- * A gesture with an n_times value greater than 1 and a
- * non-positive timeout can never be triggered, so do not
- * accept such gestures. The value of timeout is not used
- * if n_times is 1, so don't bother setting the timeout in
- * this case.
- */
- tmp_gesture->timeout = 0;
- if (tmp_gesture->n_times > 1) {
- if ((timeout=atoi (tmp_string)) <= 0) {
- /* Add an error message */;
- free_gesture (tmp_gesture);
- return NULL;
- }
- tmp_gesture->timeout = timeout;
- }
- }
-
- /*
- * Find service. Permit blank space so arguments can be supplied.
- */
- keyservice = strtok (NULL, "\n\r\f");
- if (keyservice == NULL) {
- /* TODO - Error messages */
- free_gesture (tmp_gesture);
- return NULL;
- }
- /* skip over initial whitespace */
- while (*keyservice && isspace (*keyservice))
- keyservice++;
-
- tmp_gesture->actions = g_slist_append(tmp_gesture->actions,
- g_strdup(keyservice));
-
- if (debug_gestures)
- syslog (LOG_WARNING, "gesture parsed for %s button %d",
- (tmp_gesture->type == GESTURE_TYPE_MOUSE) ? "mouse" :
- ((tmp_gesture->type == GESTURE_TYPE_BUTTON) ? "switch" :
- "key"), tmp_gesture->input.button.number);
-
- return tmp_gesture;
-}
-
-/*
- * These modifiers are ignored because they make no sense.
- * .eg <NumLock>x
- *
- * FIXME: [sadly, NumLock isn't always mapped to the same modifier, so the logic
- * below is faulty - bill]
- */
-#define IGNORED_MODS (GDK_LOCK_MASK | GDK_MOD2_MASK | GDK_MOD3_MASK)
-#define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK | \
- GDK_MOD4_MASK | GDK_MOD5_MASK)
-
-static gboolean
-change_cursor_back (gpointer data)
-{
- GdkCursor *cursor = gdk_cursor_new (GDK_LEFT_PTR);
- gdk_window_set_cursor (gdk_get_default_root_window (), cursor);
- gdk_cursor_unref (cursor);
-
- return FALSE;
-}
-
-static gint
-event_time (XEvent *ev)
-{
- if ((ev->type == KeyPress) ||
- (ev->type == KeyRelease))
- return ((XKeyEvent *) ev)->time;
- else if ((ev->type == ButtonPress) ||
- (ev->type == ButtonRelease))
- return ((XButtonEvent *) ev)->time;
- else if ((ev->type == xinput_types[XINPUT_TYPE_KEY_PRESS]) ||
- (ev->type == xinput_types[XINPUT_TYPE_KEY_RELEASE]))
- return ((XDeviceKeyEvent *) ev)->time;
- else if ((ev->type == xinput_types[XINPUT_TYPE_BUTTON_PRESS]) ||
- (ev->type == xinput_types[XINPUT_TYPE_BUTTON_RELEASE]))
- return ((XDeviceButtonEvent *) ev)->time;
- else
- return 0;
-}
-
-static gint
-elapsed_time (XEvent *ev1, XEvent *ev2)
-{
- return event_time (ev2) - event_time (ev1);
-}
-
-static gboolean
-keycodes_equal (XEvent *ev1, XEvent *ev2)
-{
- if (ev1->type == ev2->type)
- {
- if (ev1->type == KeyPress || ev1->type == KeyRelease)
- {
- return (((XKeyEvent *) ev1)->keycode == ((XKeyEvent *) ev2)->keycode);
- }
- else if (ev1->type == xinput_types[XINPUT_TYPE_KEY_PRESS] ||
- ev1->type == xinput_types[XINPUT_TYPE_KEY_RELEASE])
- {
- return (((XDeviceKeyEvent *) ev1)->keycode == ((XDeviceKeyEvent *) ev2)->keycode);
- }
- }
- return FALSE;
-}
-
-static gint
-key_gesture_compare_func (gconstpointer a, gconstpointer b)
-{
- const Gesture *gesture = a;
- const XEvent *xev = b;
-
- if (gesture->type == GESTURE_TYPE_KEY)
- {
- if (((xev->type == KeyPress) || (xev->type == KeyRelease)) &&
- (xev->xkey.keycode == gesture->input.key.keycode) &&
- ((xev->xkey.state & USED_MODS) == gesture->input.key.state))
- return 0;
- else if (((xev->type == xinput_types[XINPUT_TYPE_KEY_PRESS]) ||
- (xev->type == xinput_types[XINPUT_TYPE_KEY_RELEASE])) &&
- (xev->xkey.keycode == gesture->input.key.keycode) &&
- ((xev->xkey.state & USED_MODS) == gesture->input.key.state))
- return 0;
- else
- return 1;
- }
- else if ((gesture->type == GESTURE_TYPE_MOUSE) &&
- ((xev->type == ButtonPress) || (xev->type == ButtonRelease)) &&
- (xev->xbutton.button == gesture->input.button.number))
- return 0;
- else if ((gesture->type == GESTURE_TYPE_BUTTON) &&
- ((xev->type == xinput_types[XINPUT_TYPE_BUTTON_PRESS]) ||
- (xev->type == xinput_types[XINPUT_TYPE_BUTTON_RELEASE])) &&
- ((XDeviceButtonEvent *) xev)->button == gesture->input.button.number)
- return 0;
- else
- return 1;
-}
-
-#define event_is_gesture_type(xevent) (xevent->type == KeyPress ||\
- xevent->type == KeyRelease ||\
- xevent->type == ButtonPress ||\
- xevent->type == ButtonRelease ||\
- xevent->type == xinput_types[XINPUT_TYPE_KEY_PRESS] ||\
- xevent->type == xinput_types[XINPUT_TYPE_KEY_RELEASE] ||\
- xevent->type == xinput_types[XINPUT_TYPE_BUTTON_PRESS] ||\
- xevent->type == xinput_types[XINPUT_TYPE_BUTTON_RELEASE])
-
-static GdkFilterReturn
-gestures_filter (GdkXEvent *gdk_xevent,
- GdkEvent *event,
- gpointer data)
-{
- XEvent *xevent = (XEvent *)gdk_xevent;
- GSList *li, *act_li;
- Gesture *curr_gesture = NULL;
- XID xinput_device = None;
-
- static XEvent *last_event = NULL;
- static gint seq_count = 0;
-
- if (!event_is_gesture_type (xevent))
- return GDK_FILTER_CONTINUE;
-
- if (!last_event)
- last_event = g_new0(XEvent, 1);
-
- if ((xevent->type == KeyPress) ||
- (xevent->type == xinput_types[XINPUT_TYPE_KEY_PRESS]))
- {
-
- if (debug_gestures)
- syslog (LOG_WARNING, "key press");
-
- if (last_event->type == KeyPress &&
- last_event->xkey.keycode == xevent->xkey.keycode) {
- /* these come from auto key-repeat */
-
- if (debug_gestures)
- syslog (LOG_WARNING, "rejecting repeat");
-
- return GDK_FILTER_CONTINUE;
- }
-
- if (seq_count > 0 &&
- last_event->type != KeyRelease) {
-
- if (debug_gestures)
- syslog (LOG_WARNING,
- "last event wasn't a release, resetting seq");
- seq_count = 0;
- }
- else if (seq_count > 0 &&
- keycodes_equal (last_event, xevent)) {
-
- if (debug_gestures)
- syslog (LOG_WARNING,
- "keycode doesn't match last event, resetting seq");
- seq_count = 0;
- }
-
- /* Find the associated gesture for this keycode & state */
- li = gesture_list_get_matches (gesture_list, xevent,
- key_gesture_compare_func);
-
- if (li) {
- curr_gesture = li->data;
- if (debug_gestures)
- syslog (LOG_WARNING,
- "found a press match [%s]",
- curr_gesture->gesture_str);
-
- /* xevent time values are in milliseconds. */
- /* The config file spec is in ms */
- if (curr_gesture->timeout > 0 && seq_count > 0 &&
- elapsed_time (last_event, xevent) >
- curr_gesture->timeout) {
-
- if (debug_gestures)
- syslog (LOG_WARNING,
- "timeout exceeded: reset seq and gesture");
-
- /* The timeout has been exceeded.
- Reset the sequence. */
- seq_count = 0;
- curr_gesture = NULL;
- }
- }
- }
- else if ((xevent->type == KeyRelease) ||
- (xevent->type == xinput_types[XINPUT_TYPE_KEY_RELEASE]))
- {
- if (debug_gestures)
- syslog (LOG_WARNING, "key release");
-
- if (seq_count > 0 &&
- ((last_event->type != KeyPress &&
- last_event->type != xinput_types[XINPUT_TYPE_KEY_PRESS]) ||
- ! keycodes_equal (last_event, xevent))) {
-
- if (debug_gestures)
- syslog (LOG_WARNING,
- "either last event not a keypress, or keycodes don't match. Resetting seq.");
-
- seq_count = 0;
- }
-
- /*
- * Find the associated gesture for this keycode & state
- *
- * Note that here we check the state against the last_event,
- * otherwise key gestures based on modifier keys such as
- * Control_R won't work.
- */
- li = gesture_list_get_matches (gesture_list, xevent,
- key_gesture_compare_func);
-
- if (li) {
- curr_gesture = li->data;
-
- if (debug_gestures)
- syslog (LOG_WARNING, "found a release match [%s]",
- curr_gesture->gesture_str);
-
- if ((curr_gesture->duration > 0) &&
- (elapsed_time (last_event, xevent) < curr_gesture->duration)) {
-
- seq_count = 0;
- curr_gesture = NULL;
-
- if (debug_gestures)
- syslog (LOG_WARNING, "setting current gesture to NULL");
- } else {
- seq_count++;
-
- if (debug_gestures)
- syslog (LOG_WARNING, "incrementing seq_count");
- }
- }
- }
- else if ((xevent->type == ButtonPress) ||
- (xevent->type == xinput_types[XINPUT_TYPE_BUTTON_PRESS])) {
- gint button = 0;
- gint time = 0;
-
- if (xevent->type == ButtonPress) {
- button = xevent->xbutton.button;
- time = xevent->xbutton.time;
-
- if (debug_gestures)
- syslog (LOG_WARNING, "button press: %d", button);
-
- if (seq_count > 0 && (last_event->type != ButtonRelease))
- seq_count = 0;
- else if (seq_count > 0 && last_event->xbutton.button != button) {
- seq_count = 0;
- }
- }
-#ifdef HAVE_XINPUT
- else {
- button = ((XDeviceButtonEvent *) xevent)->button;
- time = ((XDeviceButtonEvent *) xevent)->time;
- if (debug_gestures)
- syslog (LOG_WARNING, "xinput button press: %d", button);
- if (seq_count > 0 &&
- last_event->type != xinput_types[XINPUT_TYPE_BUTTON_RELEASE]) {
- seq_count = 0;
- }
- else if (seq_count > 0 &&
- ((XDeviceButtonEvent *) last_event)->button != button) {
- seq_count = 0;
- }
- }
-#endif
-
- /*
- * Find the associated gesture for this button.
- */
- li = gesture_list_get_matches (gesture_list, xevent,
- key_gesture_compare_func);
- if (li) {
- if (debug_gestures)
- syslog (LOG_WARNING, "found match for press");
-
- curr_gesture = li->data;
-
- if (curr_gesture->timeout > 0 && seq_count > 0) {
-
- /* xevent time values are in milliseconds. */
- /* The config file spec is in ms */
- if (elapsed_time (last_event, xevent) > curr_gesture->timeout) {
-
- /* Timeout has elapsed. Reset the sequence. */
- seq_count = 0;
- curr_gesture = NULL;
-
- if (debug_gestures)
- syslog (LOG_WARNING, "gesture timed out.");
- }
- }
- }
- else if (debug_gestures)
- syslog (LOG_WARNING, "no match for press %d", button);
- }
- else if ((xevent->type == ButtonRelease) ||
- (xevent->type == xinput_types[XINPUT_TYPE_BUTTON_RELEASE]))
- {
- gint button = 0;
- gint time = 0;
-
- if (xevent->type == ButtonRelease)
- {
- button = xevent->xbutton.button;
- time = xevent->xbutton.time;
- if (seq_count > 0 &&
- (last_event->type != ButtonPress ||
- last_event->xbutton.button != button)) {
- if (debug_gestures)
- syslog (LOG_WARNING,
- "resetting count to zero, based on failure to match last event.");
- seq_count = 0;
- }
- }
-#ifdef HAVE_XINPUT
- else
- {
- button = ((XDeviceButtonEvent *)(xevent))->button;
- time = ((XDeviceButtonEvent *)(xevent))->time;
- xinput_device = ((XDeviceButtonEvent *)(xevent))->deviceid;
-
- if (seq_count > 0 &&
- (last_event->type != xinput_types[XINPUT_TYPE_BUTTON_PRESS] ||
- ((XDeviceButtonEvent *) last_event)->button != button)) {
-
- if (debug_gestures)
- syslog (LOG_WARNING,
- "resetting count to zero, based on failure to match last input event.");
-
- seq_count = 0;
- }
- }
-#endif
-
- li = gesture_list_get_matches (gesture_list, xevent,
- key_gesture_compare_func);
-
- if (li) {
- if (debug_gestures)
- syslog (LOG_WARNING, "found match for release");
- curr_gesture = li->data;
- if ((curr_gesture->duration > 0) &&
- (elapsed_time (last_event, xevent) < curr_gesture->duration)) {
- seq_count = 0;
- curr_gesture = NULL;
- if (debug_gestures)
- syslog (LOG_WARNING, "insufficient duration.");
- } else {
- if (debug_gestures)
- syslog (LOG_WARNING, "duration OK");
- seq_count++;
- }
- }
- else if (debug_gestures)
- syslog (LOG_WARNING, "no match for release - button %d",
- button);
- }
-
- /*
- * Did this event complete any gesture sequences?
- */
- last_event = memcpy (last_event, xevent, sizeof(XEvent));
- if (curr_gesture) {
- if (seq_count != curr_gesture->n_times) {
-
- if (debug_gestures)
- syslog (LOG_WARNING,
- "waiting for %d more repetitions...",
- curr_gesture->n_times - seq_count);
-
- return GDK_FILTER_CONTINUE;
- } else {
- gboolean retval;
- gchar **argv = NULL;
- gchar **envp = NULL;
-
- if (debug_gestures)
- syslog (LOG_WARNING, "gesture complete!");
-
- seq_count = 0;
- for (act_li = curr_gesture->actions;
- act_li != NULL; act_li = act_li->next) {
-
- gchar *action = (gchar *)act_li->data;
- g_return_val_if_fail (action != NULL, GDK_FILTER_CONTINUE);
- if (!g_shell_parse_argv (action, NULL, &argv, NULL))
- continue;
-
- envp = get_exec_environment (xevent);
-
- if (debug_gestures)
- syslog (LOG_WARNING, "Action is %s", action);
-
- retval = g_spawn_async (NULL,
- argv,
- envp,
- G_SPAWN_SEARCH_PATH,
- NULL,
- NULL,
- NULL,
- NULL);
-
- g_strfreev (argv);
- g_strfreev (envp);
-
- if ( ! retval) {
- GtkWidget *dialog =
- gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("Error while trying to run (%s)\n"\
- "which is linked to (%s)"),
- action,
- curr_gesture->gesture_str);
- gtk_dialog_set_has_separator (GTK_DIALOG (dialog),
- FALSE);
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy),
- NULL);
- gtk_widget_show (dialog);
- } else {
- GdkCursor *cursor = gdk_cursor_new (GDK_WATCH);
- gdk_window_set_cursor (gdk_get_default_root_window (),
- cursor);
- gdk_cursor_unref (cursor);
- g_timeout_add (2000,
- change_cursor_back,
- NULL);
- }
- }
- return GDK_FILTER_CONTINUE;
- }
- }
- return GDK_FILTER_CONTINUE;
-}
-
-
-static gint
-is_mouseX (const gchar *string)
-{
- if ((string[0] == '<') &&
- (string[1] == 'm' || string[1] == 'M') &&
- (string[2] == 'o' || string[2] == 'O') &&
- (string[3] == 'u' || string[3] == 'U') &&
- (string[4] == 's' || string[4] == 'S') &&
- (string[5] == 'e' || string[5] == 'E') &&
- (isdigit(string[6]) &&
- (atoi(&string[6]) > 0) &&
- (atoi(&string[6]) < 6)) &&
- (string[7] == '>'))
- return atoi(&string[6]);
- else
- return 0;
-}
-
-static gint
-is_switchX (const gchar *string)
-{
- if ((string[0] == '<') &&
- (string[1] == 's' || string[1] == 'S') &&
- (string[2] == 'w' || string[2] == 'W') &&
- (string[3] == 'i' || string[3] == 'I') &&
- (string[4] == 't' || string[4] == 'T') &&
- (string[5] == 'c' || string[5] == 'C') &&
- (string[6] == 'h' || string[6] == 'H') &&
- (isdigit(string[7]) &&
- (atoi(&string[7]) > 0) &&
- (atoi(&string[7]) < 6)) &&
- (string[8] == '>'))
- return atoi(&string[7]);
- else
- return 0;
-}
-
-/* The init function for this gtk module */
-G_MODULE_EXPORT void gtk_module_init(int *argc, char* argv[]);
-
-void gtk_module_init(int *argc, char* argv[])
-{
- if (g_getenv ("GDM_DEBUG_GESTURES") != NULL)
- debug_gestures = TRUE;
-
- if (debug_gestures) {
- /* If not running under GDM, then need to openlog ourselves */
- if (g_getenv ("RUNNING_UNDER_GDM") == NULL)
- openlog ("gesturelistener", LOG_PID, LOG_DAEMON);
-
- syslog (LOG_WARNING, "keymouselistener loaded.");
- }
-
- create_event_watcher ();
-}
diff --git a/gui/simple-chooser/Makefile.am b/gui/simple-chooser/Makefile.am
index 7822e312..aa5e44c6 100644
--- a/gui/simple-chooser/Makefile.am
+++ b/gui/simple-chooser/Makefile.am
@@ -11,9 +11,7 @@ INCLUDES = \
-DLIBEXECDIR=\""$(libexecdir)"\" \
-DSBINDIR=\""$(sbindir)"\" \
-DPIXMAPDIR=\""$(pixmapdir)"\" \
- $(GUI_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(CHOOSER_CFLAGS) \
+ $(SIMPLE_CHOOSER_CFLAGS) \
$(NULL)
libexec_PROGRAMS = \
@@ -29,11 +27,7 @@ gdm_simple_chooser_SOURCES = \
gdm_simple_chooser_LDADD = \
$(EXTRA_CHOOSER_LIBS) \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
- $(GOBJECT_LIBS) \
- $(GUI_LIBS) \
- $(CHOOSER_LIBS) \
+ $(SIMPLE_CHOOSER_LIBS) \
$(XDMCP_LIBS) \
$(top_builddir)/common/libgdmcommon.la \
$(NULL)
diff --git a/gui/simple-greeter/Makefile.am b/gui/simple-greeter/Makefile.am
index 0ee66155..4f83e98d 100644
--- a/gui/simple-greeter/Makefile.am
+++ b/gui/simple-greeter/Makefile.am
@@ -16,10 +16,8 @@ INCLUDES = \
-DGLADEDIR=\""$(pkgdatadir)"\" \
-DLIBEXECDIR=\""$(libexecdir)"\" \
-DSBINDIR=\""$(sbindir)"\" \
- $(GUI_CFLAGS) \
- $(DBUS_CFLAGS) \
$(GREETER_CFLAGS) \
- $(CAPPLET_CFLAGS) \
+ $(SIMPLE_GREETER_CFLAGS) \
$(NULL)
noinst_PROGRAMS = \
@@ -38,8 +36,7 @@ test_greeter_background_SOURCES = \
$(NULL)
test_greeter_background_LDADD = \
- $(CAPPLET_LIBS) \
- $(GUI_LIBS) \
+ $(SIMPLE_GREETER_LIBS) \
$(NULL)
test_greeter_panel_SOURCES = \
@@ -49,8 +46,8 @@ test_greeter_panel_SOURCES = \
$(NULL)
test_greeter_panel_LDADD = \
+ $(GREETER_LIBS) \
$(top_builddir)/gui/simple-greeter/libnotificationarea/libnotificationarea.la \
- $(GUI_LIBS) \
$(NULL)
test_language_chooser_SOURCES = \
@@ -63,7 +60,7 @@ test_language_chooser_SOURCES = \
$(NULL)
test_language_chooser_LDADD = \
- $(GUI_LIBS) \
+ $(GREETER_LIBS) \
$(NULL)
test_session_chooser_SOURCES = \
@@ -74,11 +71,11 @@ test_session_chooser_SOURCES = \
gdm-session-chooser-dialog.c \
$(NULL)
-test_session_chooser_LDADD = \
- $(GUI_LIBS) \
+test_session_chooser_LDADD = \
+ $(GREETER_LIBS) \
$(NULL)
-test_user_chooser_SOURCES = \
+test_user_chooser_SOURCES = \
test-user-chooser.c \
gdm-user-chooser-widget.h \
gdm-user-chooser-widget.c \
@@ -92,7 +89,7 @@ test_user_chooser_SOURCES = \
$(NULL)
test_user_chooser_LDADD = \
- $(GUI_LIBS) \
+ $(SIMPLE_GREETER_LIBS) \
$(NULL)
test_user_manager_SOURCES = \
@@ -105,7 +102,7 @@ test_user_manager_SOURCES = \
$(NULL)
test_user_manager_LDADD = \
- $(GUI_LIBS) \
+ $(SIMPLE_GREETER_LIBS) \
$(NULL)
libexec_PROGRAMS = \
@@ -133,12 +130,7 @@ gdm_simple_greeter_LDADD = \
-L$(top_builddir)/libgreeter \
-lgreeter \
$(top_builddir)/gui/simple-greeter/libnotificationarea/libnotificationarea.la \
- $(GLIB_LIBS) \
- $(DBUS_LIBS) \
- $(GOBJECT_LIBS) \
- $(GUI_LIBS) \
- $(GREETER_LIBS) \
- $(CAPPLET_LIBS) \
+ $(SIMPLE_GREETER_LIBS) \
$(NULL)
gladedir = $(pkgdatadir)
diff --git a/gui/simple-greeter/libnotificationarea/Makefile.am b/gui/simple-greeter/libnotificationarea/Makefile.am
index 5f766e1a..d1c82e34 100644
--- a/gui/simple-greeter/libnotificationarea/Makefile.am
+++ b/gui/simple-greeter/libnotificationarea/Makefile.am
@@ -10,7 +10,7 @@ INCLUDES = \
-DLOGDIR=\"$(logdir)\" \
-DPIXMAPDIR=\"$(pixmapdir)\" \
-DSBINDIR=\"$(sbindir)\" \
- $(GUI_CFLAGS) \
+ $(GREETER_CFLAGS) \
$(NULL)
noinst_LTLIBRARIES = \
@@ -62,5 +62,5 @@ testtray_SOURCES = \
testtray_LDADD = \
libnotificationarea.la \
- $(GUI_LIBS) \
+ $(GREETER_LIBS) \
$(NULL)
diff --git a/libgreeter/Makefile.am b/libgreeter/Makefile.am
index 9f129dda..cdc71cc7 100644
--- a/libgreeter/Makefile.am
+++ b/libgreeter/Makefile.am
@@ -14,12 +14,12 @@ libgreeter_la_SOURCES = \
$(NULL)
libgreeter_la_CPPFLAGS = \
+ $(WARN_CFLAGS) \
$(DISABLE_DEPRECATED_CFLAGS) \
$(NULL)
libgreeter_la_CFLAGS = \
- $(DBUS_CFLAGS) \
- $(GUI_CFLAGS) \
+ $(GREETER_CFLAGS) \
-I$(top_srcdir)/common/ \
$(NULL)
diff --git a/po/ChangeLog b/po/ChangeLog
index 5a545355..a0133714 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-04 William Jon McCann <mccann@jhu.edu>
+
+ reviewed by: <delete if not using a buddy>
+
+ * POTFILES.in:
+
2007-10-03 William Jon McCann <mccann@jhu.edu>
* POTFILES.in: Add new files.
diff --git a/po/POTFILES.in b/po/POTFILES.in
index e0d462d1..ba4dc33b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -48,8 +48,6 @@ daemon/session-worker-main.c
daemon/simple-slave-main.c
daemon/test-session.c
data/gdm.schemas.in.in
-gui/modules/dwellmouselistener.c
-gui/modules/keymouselistener.c
gui/simple-chooser/gdm-host-chooser-widget.c
gui/simple-greeter/gdm-session-chooser-widget.c
gui/simple-greeter/gdm-simple-greeter.c