numlockx/0001-XI2-support.patch
2010-10-22 11:27:32 +02:00

103 lines
2.5 KiB
Diff

diff -upNr numlockx-1.0.orign/main.c numlockx-1.0/main.c
--- numlockx-1.0.orign/main.c 2001-04-30 22:55:20.000000000 +0200
+++ numlockx-1.0/main.c 2010-10-22 10:56:33.686559525 +0200
@@ -47,6 +47,8 @@ DEALINGS IN THE SOFTWARE.
#include <X11/XKBlib.h>
#endif
+#include <X11/extensions/XInput2.h>
+
#include <X11/keysym.h>
void usage( const char* argv0 )
@@ -95,10 +97,10 @@ unsigned int xkb_mask_modifier( XkbDescP
return 0;
}
-unsigned int xkb_numlock_mask()
+unsigned int xkb_numlock_mask( int deviceid )
{
XkbDescPtr xkb;
- if(( xkb = XkbGetKeyboard( dpy, XkbAllComponentsMask, XkbUseCoreKbd )) != NULL )
+ if(( xkb = XkbGetKeyboard( dpy, XkbAllComponentsMask, deviceid )) != NULL )
{
unsigned int mask = xkb_mask_modifier( xkb, "NumLock" );
XkbFreeKeyboard( xkb, 0, True );
@@ -107,29 +109,52 @@ unsigned int xkb_numlock_mask()
return 0;
}
-int xkb_set_on()
+int xkb_set_on( int deviceid )
{
unsigned int mask;
if( !xkb_init())
return 0;
- mask = xkb_numlock_mask();
+ mask = xkb_numlock_mask ( deviceid );
if( mask == 0 )
return 0;
- XkbLockModifiers ( dpy, XkbUseCoreKbd, mask, mask);
+ XkbLockModifiers ( dpy, deviceid, mask, mask);
return 1;
}
-int xkb_set_off()
+int xkb_set_off( int deviceid )
{
unsigned int mask;
if( !xkb_init())
return 0;
- mask = xkb_numlock_mask();
+ mask = xkb_numlock_mask ( deviceid );
if( mask == 0 )
return 0;
- XkbLockModifiers ( dpy, XkbUseCoreKbd, mask, 0);
+ XkbLockModifiers ( dpy, deviceid, mask, 0);
return 1;
}
+
+static int xkb_foreach_keyboard( int (*func)(int))
+{
+ XIDeviceInfo *info;
+ int ndevices;
+
+ info = XIQueryDevice ( dpy, XIAllDevices, &ndevices );
+
+ while ( ndevices-- )
+ {
+ XIDeviceInfo *d = &info[ndevices];
+ if ( d->use != XISlaveKeyboard )
+ continue;
+ if ( d->attachment != 3 ) /* virtual core keyboard */
+ continue;
+
+ func( d->deviceid);
+ }
+
+ XIFreeDeviceInfo ( info );
+
+ return 1;
+}
#endif
#ifdef HAVE_XTEST
@@ -179,7 +204,7 @@ void xtest_set_off()
void numlock_set_on()
{
#ifdef HAVE_XKB
- if( xkb_set_on())
+ if ( xkb_foreach_keyboard( xkb_set_on))
return;
#endif
#ifdef HAVE_XTEST
@@ -190,7 +215,7 @@ void numlock_set_on()
void numlock_set_off()
{
#ifdef HAVE_XKB
- if( xkb_set_off())
+ if ( xkb_foreach_keyboard( xkb_set_off))
return;
#endif
#ifdef HAVE_XTEST