diff options
author | Sascha Hlusiak <saschahlusiak@arcor.de> | 2007-03-26 18:05:41 -0400 |
---|---|---|
committer | Sascha Hlusiak <saschahlusiak@arcor.de> | 2007-03-26 18:05:41 -0400 |
commit | 0a0b5a3e24701734c55679a7c05e022e01d831f8 (patch) | |
tree | e96fece1bdc3d90b73bb4253e8e7abdc0cdc41a6 | |
parent | 423a0e79266734e4dc2427673401c65f7e783305 (diff) |
Added code to generate key eventy
-rw-r--r-- | man/joystick.man | 24 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/jstk.c | 45 | ||||
-rw-r--r-- | src/jstk.h | 6 | ||||
-rw-r--r-- | src/jstk_axis.c | 1 | ||||
-rw-r--r-- | src/jstk_options.h | 6 |
6 files changed, 56 insertions, 28 deletions
diff --git a/man/joystick.man b/man/joystick.man index 30fab40..43cf7e8 100644 --- a/man/joystick.man +++ b/man/joystick.man @@ -63,7 +63,14 @@ Use positive and negative values to control the direction. Default: 1.0 .TP 7 .BI "\*qamplify="<factor> \*q Amplifies the movement of all axes by the given factor when pressed. Different -factors can be combined. +factors can be combined. +.TP 7 +.BI "\*qkey="<keycode>[,<keycode>[,<keycode>[,<keycode>]]] +When button is pressed, a series of keydown events with the specified keycode is +generated. When the button is released, there are keyup events in the opposite +order generated. + +See special section about key events below. .TP 7 .B "\*qdisable-mouse\*q" .TP 7 @@ -108,8 +115,21 @@ This can be between Default: 10 .RE +.SH "GENERATING KEY EVENTS" +Proving a \*qkey=<keycode>[,<keycode>[...]]\*q option will generate X Events with the specified keycode. +To lookup keycodes for KeySyms, you can use +.BR "xmodmap -pk" . +You can use unused keycodes and map to a KEYSYMNAME of your choice using xmodmap(1). + +Example: +To make the button perform +.I "Alt_L+Tab" +, use \*qkey=64,23\*q. For a lowercase +.I d +, use \*qkey=40\*q. + .SH "SEE ALSO" -__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__) +__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__), xmodmap(1) .SH AUTHORS Sascha Hlusiak .fi diff --git a/src/Makefile.am b/src/Makefile.am index ac4ea27..1beb07c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -31,4 +31,4 @@ @DRIVER_NAME@_drv_la_SOURCES = jstk.c jstk.h \ linux_jstk.c linux_jstk.h \ jstk_axis.c jstk_axis.h \ - jstk_options.c jstk_options.h
\ No newline at end of file + jstk_options.c jstk_options.h @@ -33,7 +33,6 @@ #include <xf86Xinput.h> #include <xisb.h> #include <exevents.h> /* Needed for InitValuator/Proximity stuff */ -#include <X11/keysym.h> #include <math.h> @@ -91,7 +90,6 @@ xf86JstkConvert(LocalDevicePtr local, - /* * xf86JstkRead -- * This is called, when there is data to read at the device @@ -134,7 +132,18 @@ xf86JstkRead(LocalDevicePtr local) jstkStartButtonAxisTimer(local, number); break; - case MAPPING_KEY: /* FIXME */ + case MAPPING_KEY: + for (i=0;i<MAXKEYSPERBUTTON;i++) { + unsigned int k; + if (priv->button[number].pressed == 1) + k = priv->button[number].keys[i]; + else k = priv->button[number].keys[MAXKEYSPERBUTTON - i - 1]; + if (k != 0) { + DBG(1, ErrorF("Generating key %s event with keycode %d\n", + (priv->button[number].pressed)?"press":"release", k)); + xf86PostKeyboardEvent(local->dev, k, priv->button[number].pressed); + } + } break; case MAPPING_SPEED_MULTIPLY: priv->amplify = 1.0; @@ -184,7 +193,7 @@ xf86JstkRead(LocalDevicePtr local) if (priv->mouse_enabled == TRUE) jstkStartAxisTimer(local, number); break; - case TYPE_ABSOLUTE: /* FIXME */ + case TYPE_ABSOLUTE: /* FIXME: add range */ if (priv->mouse_enabled == TRUE) jstkHandleAbsoluteAxis(local, number); break; @@ -216,19 +225,15 @@ xf86JstkProc(DeviceIntPtr pJstk, DBG(1, ErrorF("xf86JstkProc what=INIT\n")); for (i=1; i<MAXBUTTONS; i++) map[i] = i; - if (InitButtonClassDeviceStruct(pJstk, - priv->buttons, - map) == FALSE) - { - ErrorF("unable to allocate Button class device\n"); - return !Success; - } + if (InitButtonClassDeviceStruct(pJstk,priv->buttons,map) == FALSE) { + ErrorF("unable to allocate Button class device\n"); + return !Success; + } - if (InitFocusClassDeviceStruct(pJstk) == FALSE) - { - ErrorF("unable to init Focus class device\n"); - return !Success; - } + if (InitFocusClassDeviceStruct(pJstk) == FALSE) { + ErrorF("unable to init Focus class device\n"); + return !Success; + } // if (InitPtrFeedbackClassDeviceStruct(pJstk, // xf86JstkControlProc) == FALSE) @@ -238,7 +243,7 @@ xf86JstkProc(DeviceIntPtr pJstk, // } if (InitValuatorClassDeviceStruct(pJstk, - 2, /* FIXME */ + 2, xf86GetMotionEvents, local->history_size, Relative) /* relative or absolute */ @@ -363,7 +368,7 @@ xf86JstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) priv = (JoystickDevPtr) local->private; local->name = dev->identifier; - local->flags = XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS; + local->flags = XI86_POINTER_CAPABLE | XI86_KEYBOARD_CAPABLE | XI86_SEND_DRAG_EVENTS; local->device_control = xf86JstkProc; local->read_input = xf86JstkRead; local->close_proc = NULL; @@ -373,7 +378,7 @@ xf86JstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) local->fd = -1; local->dev = NULL; local->private = priv; - local->type_name = XI_MOUSE; + local->type_name = "JOYSTICK"; local->history_size = 0; local->always_core_feedback = 0; local->conf_idev = dev; @@ -464,7 +469,7 @@ xf86JstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) if (s != NULL) { xf86Msg(X_CONFIG, "%s: Option \"mapbutton%d\" \"%s\"\n", local->name, i+1, s); - jstkParseButtonOption(s, &priv->button[i], local->name); + jstkParseButtonOption(s, priv, i, local->name); } } @@ -52,6 +52,7 @@ extern int debug_level; #define MAXBUTTONS 32 #define MAXAXES MAXBUTTONS +#define MAXKEYSPERBUTTON 4 enum JOYSTICKTYPE { TYPE_NONE, @@ -101,15 +102,16 @@ typedef struct float temp,amplify; enum JOYSTICKTYPE type; enum JOYSTICKMAPPING mapping; - }axis[32]; /* Configuration per axis */ + }axis[MAXAXES]; /* Configuration per axis */ struct BUTTON { char pressed; int value; + unsigned int keys[MAXKEYSPERBUTTON]; float temp; enum JOYSTICKMAPPING mapping; - }button[32]; /* Configuration per button */ + }button[MAXBUTTONS]; /* Configuration per button */ int axes, buttons; /* Number of axes and buttons */ } JoystickDevRec, *JoystickDevPtr; diff --git a/src/jstk_axis.c b/src/jstk_axis.c index ad5254d..91c0455 100644 --- a/src/jstk_axis.c +++ b/src/jstk_axis.c @@ -30,6 +30,7 @@ #include <xf86Xinput.h> #include <xf86_OSproc.h> +#include <math.h> #include "jstk.h" #include "jstk_axis.h" diff --git a/src/jstk_options.h b/src/jstk_options.h index 494da6b..b6c2dfc 100644 --- a/src/jstk_options.h +++ b/src/jstk_options.h @@ -24,10 +24,10 @@ #ifndef __JSTK_OPTIONS_H_INCLUDED__ #define __JSTK_OPTIONS_H_INCLUDED__ - void jstkParseButtonOption(const char* org, - struct BUTTON *button, - const char* name); + JoystickDevPtr priv, + int number, + const char* name); void jstkParseAxisOption(const char* org, struct AXIS *axis, const char* name); |