diff --git a/gnome-settings-daemon/ChangeLog b/gnome-settings-daemon/ChangeLog index 8b183935e..7b6aa06f1 100644 --- a/gnome-settings-daemon/ChangeLog +++ b/gnome-settings-daemon/ChangeLog @@ -1,3 +1,9 @@ +Wed Jan 9 21:22:30 2002 Jonathan Blandford + + * gnome-settings-keyboard.c (filter): weee! locate_cursor works + now!!!! + * gnome-settings-locate-pointer: speed up animation. + 2002-01-09 Anders Carlsson * gnome-settings-daemon.c (main): Call gconf_client_add_dir. diff --git a/gnome-settings-daemon/gnome-settings-keyboard.c b/gnome-settings-daemon/gnome-settings-keyboard.c index bd928064a..d5e19e1dd 100644 --- a/gnome-settings-daemon/gnome-settings-keyboard.c +++ b/gnome-settings-daemon/gnome-settings-keyboard.c @@ -33,12 +33,14 @@ #include "gnome-settings-keyboard.h" #include "gnome-settings-daemon.h" #include "gnome-settings-locate-pointer.h" +#include +#include #ifdef HAVE_X11_EXTENSIONS_XF86MISC_H # include #endif -#define HAVE_XKB +#undef HAVE_XKB #ifdef HAVE_XKB # include #endif @@ -102,7 +104,9 @@ apply_settings (void) &kbdcontrol); } -#ifdef HAVE_XKB + +#if 0 +//def HAVE_XKB /* XKB support */ static GdkFilterReturn @@ -120,10 +124,98 @@ gnome_settings_keyboard_xkb_filter (GdkXEvent *xevent, } #endif +#define KEYBOARD_GROUP_SHIFT 13 +#define KEYBOARD_GROUP_MASK ((1 << 13) | (1 << 14)) +/* Owen magic */ +static GdkFilterReturn +filter (GdkXEvent *xevent, + GdkEvent *event, + gpointer data) +{ + XEvent *xev = (XEvent *) xevent; + guint keyval; + gint group; + + if (xev->type == KeyPress || + xev->type == KeyRelease) { + + /* get the keysym */ + group = (xev->xkey.state & KEYBOARD_GROUP_MASK) >> KEYBOARD_GROUP_SHIFT; + gdk_keymap_translate_keyboard_state (gdk_keymap_get_default (), + xev->xkey.keycode, + xev->xkey.state, + group, + &keyval, + NULL, NULL, NULL); + if (keyval == GDK_Control_L) { + if (xev->type == KeyPress) { + XAllowEvents (gdk_x11_get_default_xdisplay (), + SyncKeyboard, + xev->xkey.time); + } else { + XAllowEvents (gdk_x11_get_default_xdisplay (), + AsyncKeyboard, + xev->xkey.time); + gnome_settings_locate_pointer (); + } + } else { + XAllowEvents (gdk_x11_get_default_xdisplay (), + ReplayKeyboard, + xev->xkey.time); + XUngrabKeyboard (gdk_x11_get_default_xdisplay (), + xev->xkey.time); + } + + return GDK_FILTER_REMOVE; + } + return GDK_FILTER_CONTINUE; + +} + static void gnome_settings_keyboard_init_xkb (void) { -#ifdef HAVE_XKB + GdkKeymapKey *keys; + int n_keys; + + if (gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (), + GDK_Control_L, + &keys, + &n_keys)) { + gint i; + + for (i = 0; i < n_keys; i++) { + XGrabKey (gdk_x11_get_default_xdisplay (), + keys[i].keycode, + AnyModifier, + GDK_ROOT_WINDOW (), + False, + GrabModeAsync, + GrabModeSync); + } + g_free (keys); + gdk_window_add_filter (gdk_get_default_root_window (), filter, NULL); + } +} + + + +void +gnome_settings_keyboard_init (GConfClient *client) +{ + gnome_settings_daemon_register_callback ("/desktop/gnome/peripherals/keyboard", (KeyCallbackFunc) apply_settings); + gnome_settings_keyboard_init_xkb (); +} + +void +gnome_settings_keyboard_load (GConfClient *client) +{ + apply_settings (); +} + + +#if 0 + //def HAVE_XKB gint xkb_major = XkbMajorVersion; gint xkb_minor = XkbMinorVersion; g_print ("foo1\n"); @@ -143,19 +235,3 @@ gnome_settings_keyboard_init_xkb (void) } } #endif -} - - - -void -gnome_settings_keyboard_init (GConfClient *client) -{ - gnome_settings_daemon_register_callback ("/desktop/gnome/peripherals/keyboard", (KeyCallbackFunc) apply_settings); - gnome_settings_keyboard_init_xkb (); -} - -void -gnome_settings_keyboard_load (GConfClient *client) -{ - apply_settings (); -} diff --git a/gnome-settings-daemon/gnome-settings-locate-pointer.c b/gnome-settings-daemon/gnome-settings-locate-pointer.c index 5a01c445e..4b0757742 100644 --- a/gnome-settings-daemon/gnome-settings-locate-pointer.c +++ b/gnome-settings-daemon/gnome-settings-locate-pointer.c @@ -216,5 +216,5 @@ gnome_settings_locate_pointer (void) stage = STAGE_ONE; setup_window (); gdk_window_show (window); - locate_pointer_id = gtk_timeout_add (125, locate_pointer_timeout, NULL); + locate_pointer_id = gtk_timeout_add (100, locate_pointer_timeout, NULL); }