Hello, I am thrilled to hear of this request.

> In my X-application (here SDL..) I want to know on
> which mouse a button was pressed. Accroding to
> XInput.h / XDeviceButtonEvent there is a field which
> is named "deviceid". But this has allways the same
> value. It doesn't matter which button I pressed. Any
> ideas how to solve this problem?

To distinguish to mice has a bit of a history for me. In 2002 I followed the 
idea
that it would be beneficial for 3D environemts to work with two hands
rather than one. The issue was raised by Prof. John Park in Seoul,
Korea, in the context of investigating protein structures. My personal
vision is an extension towards collaborative meetings throgh the
internet with multiple participants sharing one screen but each having
one individual mouse.

I got to the point that I could distinguish the mice (USB and PS/2), but
never learned how to have two cursors on the screen and something else
got priority. But I am still subscribed to this mailing list!!!!

Since you in Berlin are accidentially very close to me in Rostock,
it might be a good idea that we both meet, or just ring me up. I still
have my source from back then, just the diff to the current distribution
is a bit difficult. I could tar this up for you or anybody else being
interested. Also I have a demo program. The idea behind my implementation
is that the device id is hidden in the upper bits of the button id in the
server side, since we usually do not need to distinguish 2^8 buttons. The
Xclient breaks things apart again. This renders the patched X server
compatible with current binaries.

        [EMAIL PROTECTED]:/data/Xfree86/xc$ cvs diff
        cvs diff: authorization failed: server anoncvs.xfree86.org rejected
        access to /cvs for user anoncvs
        cvs diff: used empty password; try "cvs login" with a real password

Can anybody help how to make a diff to a 3 year old source?

I happened to have tagged the lines I added. I hope your mailer doesn't
wrap them. I attached a grep through the source.

Back then I had hoped to find a high school student to go after this as
a Jugend Forscht project. It did not work out. Neither could I find a
CS student here in Rostock for it - admittedly, I am at the medical
faculty which makes communication a bit more difficult.

Well, maybe somebody on this list has a shortcut to what I did. I'm very
curious to hear about it.

Best regards,

Steffen

T: +49 381 494 5885


./lib/X11/XlibInt.c:                    ev->button      = event->u.u.detail & 
0x0F; /* steffen */
./lib/X11/XlibInt.c:                    ev->device_id   = 
event->u.keyButtonPointer.device_id; /* steffen */
./lib/X11/XlibInt.c:                    ev->is_hint     = event->u.u.detail & 
0x0F; /* steffen */
./lib/X11/XlibInt.c:                    ev->device_id   = 
event->u.keyButtonPointer.device_id; /* steffen */
./lib/X11/XlibInt.c:                    ev->detail      = event->u.u.detail & 
0x0F; /* steffen */
./lib/X11/XlibInt.c:                    ev->device_id   = 
event->u.keyButtonPointer.device_id; /* steffen */
./lib/X11/Xlib.h:       DeviceID device_id;     /* identifier of device */ /* 
steffen */
./lib/X11/Xlib.h:       DeviceID device_id;     /* identifier of device */ /* 
steffen */
./lib/X11/Xlib.h:       DeviceID device_id;     /* identifier of device */ /* 
steffen */
./lib/X11/EvToWire.c:/* #define MultipleMice */ /* steffen */
./lib/X11/EvToWire.c: event->u.keyButtonPointer.device_id=ev->device_id; /* 
steffen */
./lib/X11/EvToWire.c:                      adapt the xEvent structure.  steffen
./lib/X11/EvToWire.c:                      event->u.u.detail |=c;    /* steffen 
*/
./lib/X11/EvToWire.c: event->u.keyButtonPointer.device_id=ev->device_id; /* 
steffen */
./lib/X11/EvToWire.c:                      adapt the xEvent structure.  steffen
./lib/X11/EvToWire.c:                      event->u.u.detail |=c;    /* steffen 
*/
./lib/X11/EvToWire.c: event->u.keyButtonPointer.device_id=ev->device_id; /* 
steffen */
./lib/X11/EvToWire.c:                      adapt the xEvent structure.  steffen
./lib/X11/EvToWire.c:                      event->u.u.detail |=c;    /* steffen 
*/
./config/cf/cygwin.cf:#define BuildXftLibrary           NO      /* steffen */
./config/cf/cygwin.cf:#define BuildXft1Library  NO      /* steffen */
./config/cf/cygwin.cf:#define BuildFreetype2Library     NO      /* steffen */
./config/cf/cygwin.cf:#define BuildRandRLibrary NO      /* steffen */
./config/cf/cygwin.cf:#define BuildXResLibrary  NO      /* steffen */
./config/cf/cygwin.cf:#define BuildGlxExt             NO      /* steffen */
./programs/Xserver/hw/xwin/winmouse.c:static int lastDeviceThatPressedButton=0; 
// steffen // nothing serious, just to improve playing
./programs/Xserver/hw/xwin/winmouse.c: 
xCurrentEvent.u.keyButtonPointer.device_id=7353; // steffen
./programs/Xserver/hw/xwin/winmouse.c: xCurrentEvent.u.u.detail|=(rand()%4)<<6; 
// steffen
./programs/Xserver/hw/xwin/winmouse.c: printf("winMouseButtonsSendEvent: 
%d\n",iButton);               // steffen
./programs/Xserver/hw/xwin/winmouse.c:  xCurrentEvent.u.u.detail &= 0x3F;  // 
just for safety           // steffen
./programs/Xserver/hw/xwin/winmouse.c:  if (ButtonPress == iEventType) { // 
steffen
./programs/Xserver/hw/xwin/winmouse.c: lastDeviceThatPressedButton=rand()%4;    
                     // steffen
./programs/Xserver/hw/xwin/winmouse.c:  } // steffen
./programs/Xserver/hw/xwin/winmouse.c: 
xCurrentEvent.u.u.detail|=lastDeviceThatPressedButton<<6;       // steffen
./programs/Xserver/hw/kdrive/kinput.c:    ErrorF(stderr,"mouse name: %s, 
devid=%d\n",mi->name,mi->mouseid);     /* steffen */
./programs/Xserver/hw/kdrive/kinput.c:    ErrorF(stderr,"mouse name: %s, 
devid=%d\n",mi->name,mi->mouseid);     /* steffen */
./programs/Xserver/hw/kdrive/kinput.c:    ErrorF(stderr,"mouse name: %s, 
devid=%d\n",mi->name,mi->mouseid);     /* steffen */
./programs/Xserver/hw/kdrive/kinput.c:    ErrorF(stderr,"mouse name: %s, 
devid=%d\n",mi->name,mi->mouseid);     /* steffen */
./programs/Xserver/hw/kdrive/kinput.c:          /* steffen */
./programs/Xserver/hw/kdrive/kinput.c:    ErrorF(stderr,"mouse name: %s, 
devid=%d\n",mi->name,mi->mouseid);     /* steffen */
./programs/Xserver/hw/kdrive/kinput.c:    ErrorF(stderr,"mouse name: %s, 
devid=%d\n",mi->name,mi->mouseid);     /* steffen */
./programs/Xserver/hw/xfree86/common/xf86Xinput.c: /*xev->detail = 0;*/ /* 
steffen */
./programs/Xserver/hw/xfree86/common/xf86Xinput.c: xev->detail = 
mouse2id(device) << 6; /* steffen */
./programs/Xserver/hw/xfree86/common/xf86Xinput.c:              /* xev->detail 
= 0; */ /* steffen */
./programs/Xserver/hw/xfree86/common/xf86Xinput.c: xev->detail = 
mouse2id(device) << 6; /* steffen */
./programs/Xserver/hw/xfree86/common/xf86Xinput.c:    xev->detail |= 
mouse2id(device) << 6; /* steffen */
./programs/Xserver/hw/xfree86/common/xf86Xinput.c:      xev->detail |= 
mouse2id(device) << 6; /* steffen */
./programs/Xserver/hw/xfree86/common/xf86Xinput.c:      xE->u.u.detail |=  
mouse2id(device) << 6; /* steffen */
./programs/Xserver/dix/events.c:/* steffen */
./programs/Xserver/dix/events.c:    /* steffen
./programs/Xserver/dix/events.c:    switch (xE->u.u.type) { /* steffen */
./programs/Xserver/dix/events.c:        case MotionNotify: case ButtonPress: 
case ButtonRelease: /* steffen */
./programs/Xserver/dix/events.c:           /* xE->u.u.detail |= 
(mouse2id(mouse)<<6); */                         /* steffen */
./programs/Xserver/dix/events.c:           break; /* steffen */
./programs/Xserver/dix/events.c:        default: /* steffen */
./programs/Xserver/dix/events.c:           break; /* steffen */
./programs/Xserver/dix/events.c:    } /* steffen */
./programs/Xserver/dix/events.c:            if ( (xE->u.u.detail & 0x0F) == 0)  
                                /* steffen */
./programs/Xserver/dix/events.c:            if ( (xE->u.u.detail & 0x0F) <= 5)  
                                /* steffen */
./programs/Xserver/dix/events.c:                butc->state |= (Button1Mask >> 
1) << (xE->u.u.detail & 0x0F);   /* steffen */
./programs/Xserver/dix/events.c:            xE->u.u.detail &= 0x0F; /* steffen 
*/
./programs/Xserver/dix/events.c:            xE->u.u.detail |= butc->map[key];  
/* steffen */
./programs/Xserver/dix/events.c:            if ( (xE->u.u.detail & 0x0F) == 0) 
/* steffen */
./programs/Xserver/dix/events.c:            if ( (xE->u.u.detail & 0x0F) <= 5) 
/* steffen */
./programs/Xserver/dix/events.c:                butc->state &= ~( (Button1Mask 
>> 1) << (xE->u.u.detail & 0x0F) );      /* steffen */
./programs/Xserver/dix/events.c:    /* xE->u.u.detail |= (mouse2id(mouse)<<6); 
*/                /* steffen */
./programs/Xserver/dix/events.c:    /* tempGrab.detail.exact |= 
(mouse2id(tempGrab.device)<<6); */   /* steffen */
./include/Xproto.h:  Steffen's change for an incorporation of the device_id
./include/Xproto.h:     Value if device_id was set as part of xEvent steffen
./include/Xproto.h:     Value if device_id was included in xEvent steffen
./include/Xproto.h:         /*CARD32 device_id; */      /* steffen */
./include/extensions/xtrapdi.h: Value for device_id included // steffen


--
  Steffen Möller, PhD
  University of Rostock
  Institute of Immunology
  Schillingallee 70
  18057 Rostock
  T: +49 381 494 5885
  F: +49 381 494 5882
  E: [EMAIL PROTECTED]
_______________________________________________
Devel mailing list
Devel@XFree86.Org
http://XFree86.Org/mailman/listinfo/devel

Reply via email to