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