summaryrefslogtreecommitdiff
path: root/gnome-settings-daemon/gnome-settings-mouse.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnome-settings-daemon/gnome-settings-mouse.c')
-rw-r--r--gnome-settings-daemon/gnome-settings-mouse.c307
1 files changed, 0 insertions, 307 deletions
diff --git a/gnome-settings-daemon/gnome-settings-mouse.c b/gnome-settings-daemon/gnome-settings-mouse.c
deleted file mode 100644
index 825674571..000000000
--- a/gnome-settings-daemon/gnome-settings-mouse.c
+++ /dev/null
@@ -1,307 +0,0 @@
-#include <string.h>
-#include <math.h>
-
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
-#include <gdk/gdkkeysyms.h>
-#include <X11/keysym.h>
-
-#include <gconf/gconf.h>
-
-#include "gnome-settings-locate-pointer.h"
-#include "gnome-settings-daemon.h"
-
-#define DEFAULT_PTR_MAP_SIZE 128
-
-static void
-set_left_handed (gboolean left_handed)
-{
- unsigned char *buttons;
- gint n_buttons, i;
- gint idx_1 = 0, idx_3 = 1;
-
- buttons = g_alloca (DEFAULT_PTR_MAP_SIZE);
- n_buttons = XGetPointerMapping (GDK_DISPLAY (), buttons, DEFAULT_PTR_MAP_SIZE);
- if (n_buttons > DEFAULT_PTR_MAP_SIZE) {
- buttons = g_alloca (n_buttons);
- n_buttons = XGetPointerMapping (GDK_DISPLAY (), buttons, n_buttons);
- }
-
- for (i = 0; i < n_buttons; i++)
- {
- if (buttons[i] == 1)
- idx_1 = i;
- else if (buttons[i] == ((n_buttons < 3) ? 2 : 3))
- idx_3 = i;
- }
-
- if ((left_handed && idx_1 < idx_3) ||
- (!left_handed && idx_1 > idx_3))
- {
- buttons[idx_1] = ((n_buttons < 3) ? 2 : 3);
- buttons[idx_3] = 1;
- }
-
- XSetPointerMapping (GDK_DISPLAY (), buttons, n_buttons);
-}
-
-static void
-set_motion_acceleration (gfloat motion_acceleration)
-{
- gint numerator, denominator;
-
- if (motion_acceleration >= 1.0)
- {
- /* we want to get the acceleration, with a resolution of 0.5
- */
- if ((motion_acceleration - floor (motion_acceleration)) < 0.25)
- {
- numerator = floor (motion_acceleration);
- denominator = 1;
- }
- else if ((motion_acceleration - floor (motion_acceleration)) < 0.5)
- {
- numerator = ceil (2.0 * motion_acceleration);
- denominator = 2;
- }
- else if ((motion_acceleration - floor (motion_acceleration)) < 0.75)
- {
- numerator = floor (2.0 *motion_acceleration);
- denominator = 2;
- }
- else
- {
- numerator = ceil (motion_acceleration);
- denominator = 1;
- }
- }
- else if (motion_acceleration < 1.0 && motion_acceleration > 0)
- {
- /* This we do to 1/10ths */
- numerator = floor (motion_acceleration * 10) + 1;
- denominator= 10;
- }
- else
- {
- numerator = -1;
- denominator = -1;
- }
-
- XChangePointerControl (GDK_DISPLAY (), True, False,
- numerator, denominator,
- 0);
-}
-
-static void
-set_motion_threshold (gint motion_threshold)
-{
- XChangePointerControl (GDK_DISPLAY (), False, True,
- 0, 0, motion_threshold);
-}
-
-
-#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;
-
- GdkScreen *screen = (GdkScreen *)data;
-
- 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 || keyval == GDK_Control_R)
- {
- 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 (screen);
- }
- }
- 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
-set_locate_pointer (gboolean locate_pointer)
-{
- GdkKeymapKey *keys;
- GdkDisplay *display;
- int n_screens;
- int n_keys;
- gboolean has_entries;
- static const guint keyvals[] = { GDK_Control_L, GDK_Control_R };
- unsigned j;
-
- display = gdk_display_get_default ();
- n_screens = gdk_display_get_n_screens (display);
-
- for (j = 0 ; j < G_N_ELEMENTS (keyvals) ; j++) {
- has_entries = gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
- keyvals[j],
- &keys,
- &n_keys);
- if (has_entries)
- {
- gint i, j;
-
- for (i = 0; i < n_keys; i++)
- {
- for(j=0; j< n_screens; j++)
- {
- GdkScreen *screen = gdk_display_get_screen (display, j);
- Window xroot = gdk_x11_drawable_get_xid (gdk_screen_get_root_window (screen));
-
- if (locate_pointer)
- {
- XGrabKey (GDK_DISPLAY_XDISPLAY (display),
- keys[i].keycode,
- 0,
- xroot,
- False,
- GrabModeAsync,
- GrabModeSync);
- XGrabKey (GDK_DISPLAY_XDISPLAY (display),
- keys[i].keycode,
- LockMask,
- xroot,
- False,
- GrabModeAsync,
- GrabModeSync);
- XGrabKey (GDK_DISPLAY_XDISPLAY (display),
- keys[i].keycode,
- Mod2Mask,
- xroot,
- False,
- GrabModeAsync,
- GrabModeSync);
- XGrabKey (GDK_DISPLAY_XDISPLAY (display),
- keys[i].keycode,
- Mod4Mask,
- xroot,
- False,
- GrabModeAsync,
- GrabModeSync);
- }
- else
- {
- XUngrabKey (GDK_DISPLAY_XDISPLAY (display),
- keys[i].keycode,
- Mod4Mask,
- xroot);
- XUngrabKey (GDK_DISPLAY_XDISPLAY (display),
- keys[i].keycode,
- Mod2Mask,
- xroot);
- XUngrabKey (GDK_DISPLAY_XDISPLAY (display),
- keys[i].keycode,
- LockMask,
- xroot);
- XUngrabKey (GDK_DISPLAY_XDISPLAY (display),
- keys[i].keycode,
- 0,
- xroot);
- }
- }
- }
- g_free (keys);
- if (locate_pointer)
- {
- for (i = 0; i < n_screens; i++)
- {
- GdkScreen *screen;
- screen = gdk_display_get_screen (display, i);
- gdk_window_add_filter (gdk_screen_get_root_window (screen),
- filter,
- screen);
- }
- }
- else
- {
- for (i = 0; i < n_screens; i++)
- {
- GdkScreen *screen;
- screen = gdk_display_get_screen (display, i);
- gdk_window_remove_filter (gdk_screen_get_root_window (screen),
- filter,
- screen);
- }
- }
- }
- }
-}
-
-static void
-mouse_callback (GConfEntry *entry)
-{
- if (! strcmp (entry->key, "/desktop/gnome/peripherals/mouse/left_handed"))
- {
- if (entry->value->type == GCONF_VALUE_BOOL)
- set_left_handed (gconf_value_get_bool (entry->value));
- }
- else if (! strcmp (entry->key, "/desktop/gnome/peripherals/mouse/motion_acceleration"))
- {
- if (entry->value->type == GCONF_VALUE_FLOAT)
- set_motion_acceleration (gconf_value_get_float (entry->value));
- }
- else if (! strcmp (entry->key, "/desktop/gnome/peripherals/mouse/motion_threshold"))
- {
- if (entry->value->type == GCONF_VALUE_INT)
- set_motion_threshold (gconf_value_get_int (entry->value));
- }
- else if (! strcmp (entry->key, "/desktop/gnome/peripherals/mouse/locate_pointer"))
- {
- if (entry->value->type == GCONF_VALUE_BOOL)
- set_locate_pointer (gconf_value_get_bool (entry->value));
- }
-}
-
-void
-gnome_settings_mouse_init (GConfClient *client)
-{
- gnome_settings_daemon_register_callback ("/desktop/gnome/peripherals/mouse", mouse_callback);
-}
-
-
-void
-gnome_settings_mouse_load (GConfClient *client)
-{
- set_left_handed (gconf_client_get_bool (client, "/desktop/gnome/peripherals/mouse/left_handed", NULL));
- set_motion_acceleration (gconf_client_get_float (client, "/desktop/gnome/peripherals/mouse/motion_acceleration", NULL));
- set_motion_threshold (gconf_client_get_int (client, "/desktop/gnome/peripherals/mouse/motion_threshold", NULL));
- set_locate_pointer (gconf_client_get_bool (client, "/desktop/gnome/peripherals/mouse/locate_pointer", NULL));
-}