/* This is essentially CorePointerProc with ScrollAxes added */ static int TestPointerProc(DeviceIntPtr pDev, int what) { #define NBUTTONS 10 #define NAXES 4 BYTE map[NBUTTONS + 1]; int i = 0; Atom btn_labels[NBUTTONS] = { 0 }; Atom axes_labels[NAXES] = { 0 }; switch (what) { case DEVICE_INIT: for (i = 1; i <= NBUTTONS; i++) map[i] = i; btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP); btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN); btn_labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT); btn_labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT); /* don't know about the rest */ axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X); axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_VSCROLL); axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_HSCROLL); if (!InitPointerDeviceStruct ((DevicePtr) pDev, map, NBUTTONS, btn_labels, (PtrCtrlProcPtr) NoopDDA, GetMotionHistorySize(), NAXES, axes_labels)) { ErrorF("Could not initialize device '%s'. Out of memory.\n", pDev->name); return BadAlloc; } pDev->valuator->axisVal[0] = screenInfo.screens[0]->width / 2; pDev->last.valuators[0] = pDev->valuator->axisVal[0]; pDev->valuator->axisVal[1] = screenInfo.screens[0]->height / 2; pDev->last.valuators[1] = pDev->valuator->axisVal[1]; /* protocol-xiquerydevice.c relies on these increment */ SetScrollValuator(pDev, 2, SCROLL_TYPE_VERTICAL, 2.4, SCROLL_FLAG_NONE); SetScrollValuator(pDev, 3, SCROLL_TYPE_HORIZONTAL, 3.5, SCROLL_FLAG_PREFERRED); break; case DEVICE_CLOSE: break; default: break; } return Success; #undef NBUTTONS #undef NAXES }
static int vfbMouseProc(DeviceIntPtr pDevice, int onoff) { BYTE map[4]; DevicePtr pDev = (DevicePtr)pDevice; switch (onoff) { case DEVICE_INIT: map[1] = 1; map[2] = 2; map[3] = 3; InitPointerDeviceStruct(pDev, map, 3, miPointerGetMotionEvents, (PtrCtrlProcPtr)NoopDDA, miPointerGetMotionBufferSize()); break; case DEVICE_ON: pDev->on = TRUE; break; case DEVICE_OFF: pDev->on = FALSE; break; case DEVICE_CLOSE: break; } return Success; }
int winMouseProc (DeviceIntPtr pDeviceInt, int iState) { CARD8 map[6]; DevicePtr pDevice = (DevicePtr) pDeviceInt; switch (iState) { case DEVICE_INIT: map[1] = 1; map[2] = 2; map[3] = 3; map[4] = 4; map[5] = 5; InitPointerDeviceStruct (pDevice, map, 5, /* Buttons 4 and 5 are mouse wheel events */ miPointerGetMotionEvents, winMouseCtrl, miPointerGetMotionBufferSize ()); break; case DEVICE_ON: pDevice->on = TRUE; break; case DEVICE_CLOSE: case DEVICE_OFF: pDevice->on = FALSE; break; } return Success; }
static int PointerProc( DevicePtr pPtr, int what, int argc, char *argv[]) { #define NUM_BUTTONS 1 CARD8 map[NUM_BUTTONS]; switch(what) { case DEVICE_INIT: { map[0] = 0; InitPointerDeviceStruct(pPtr, map, NUM_BUTTONS, GetMotionHistory, (PtrCtrlProcPtr)_XpVoidNoop, GetMotionHistorySize(), 2); break; } case DEVICE_ON: break; case DEVICE_OFF: break; case DEVICE_CLOSE: break; } return Success; }
static int vfbMouseProc(DeviceIntPtr pDevice, int onoff) { #define NBUTTONS 3 #define NAXES 2 BYTE map[NBUTTONS + 1]; DevicePtr pDev = (DevicePtr) pDevice; Atom btn_labels[NBUTTONS] = { 0 }; Atom axes_labels[NAXES] = { 0 }; switch (onoff) { case DEVICE_INIT: map[1] = 1; map[2] = 2; map[3] = 3; btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X); axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); InitPointerDeviceStruct(pDev, map, NBUTTONS, btn_labels, (PtrCtrlProcPtr) NoopDDA, GetMotionHistorySize(), NAXES, axes_labels); break; case DEVICE_ON: pDev->on = TRUE; break; case DEVICE_OFF: pDev->on = FALSE; break; case DEVICE_CLOSE: break; } return Success; #undef NBUTTONS #undef NAXES }
static int KdMouseProc(DeviceIntPtr pDevice, int onoff) { BYTE map[KD_MAX_BUTTON]; DevicePtr pDev = (DevicePtr)pDevice; int i; if (!pDev) return BadImplementation; switch (onoff) { case DEVICE_INIT: for (i = 1; i <= kdMouseButtonCount; i++) map[i] = i; InitPointerDeviceStruct(pDev, map, kdMouseButtonCount, miPointerGetMotionEvents, (PtrCtrlProcPtr)NoopDDA, miPointerGetMotionBufferSize()); break; case DEVICE_ON: pDev->on = TRUE; pKdPointer = pDevice; for (i = 0; i < kdNMouseFuncs; i++) (*kdMouseFuncs[i]->Init)(); break; case DEVICE_OFF: case DEVICE_CLOSE: if (pDev->on) { pDev->on = FALSE; pKdPointer = 0; for (i = 0; i < kdNMouseFuncs; i++) (*kdMouseFuncs[i]->Fini) (); } break; } return Success; }
static int device_init(DeviceIntPtr dev, InputInfoPtr local) { struct mtev_mtouch *mt = local->private; Atom atom; int i; int j; unsigned char map[MT_NUM_BUTTONS + 1]; Atom btn_labels[MT_NUM_BUTTONS] = { 0 }; Atom axes_labels[MT_NUM_VALUATORS] = { 0, }; int r; if (MT_NUM_VALUATORS > MAX_VALUATORS) { xf86Msg(X_ERROR, "MT_NUM_VALUATORS(%d) > MAX_VALUATORS(%d)\n", MT_NUM_VALUATORS, MAX_VALUATORS); return BadValue; } for (i = 0; i < MT_NUM_BUTTONS; i++) btn_labels[i] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_UNKNOWN); atom = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); btn_labels[0] = atom; init_axes_labels(axes_labels, MT_NUM_VALUATORS); r = init_properties(dev); if (r != Success) return r; local->fd = xf86OpenSerial(local->options); if (local->fd < 0) { xf86Msg(X_ERROR, "mtev: cannot open device\n"); return !Success; } if (mtouch_configure(mt, local->fd)) { xf86Msg(X_ERROR, "mtev: cannot configure device\n"); return !Success; } xf86CloseSerial(local->fd); for (i = 0; i < MT_NUM_BUTTONS+1; i++) map[i] = i; InitPointerDeviceStruct((DevicePtr)dev, map, MT_NUM_BUTTONS, btn_labels, pointer_control, GetMotionHistorySize(), MT_NUM_VALUATORS, axes_labels); for (i = 0; i < MT_NUM_FINGERS; i++) { for (j = 0; j < MT_AXIS_PER_FINGER; j++) { const int val = (i * MT_AXIS_PER_FINGER) + j; int min; int max; switch (j) { case 0: min = mt->caps.abs_position_x.minimum; max = mt->caps.abs_position_x.maximum; if (mt->swap_xy) { mt->min_y = min; mt->max_y = max; } else { mt->min_x = min; mt->max_x = max; } break; case 1: min = mt->caps.abs_position_y.minimum; max = mt->caps.abs_position_y.maximum; if (mt->swap_xy) { mt->min_x = min; mt->max_x = max; } else { mt->min_y = min; mt->max_y = max; } break; case 2: min = mt->caps.abs_touch_major.minimum; max = mt->caps.abs_touch_major.maximum; break; case 3: if (mt->caps.has_touch_minor) { min = mt->caps.abs_touch_minor.minimum; max = mt->caps.abs_touch_minor.maximum; } else { min = mt->caps.abs_touch_major.minimum; max = mt->caps.abs_touch_major.maximum; } break; case 4: // Tracking id min = mt->caps.abs_tracking_id.minimum; max = mt->caps.abs_tracking_id.maximum > (MT_NUM_FINGERS-1) ? (MT_NUM_FINGERS-1) : mt->caps.abs_tracking_id.maximum; break; default: return BadValue; } xf86InitValuatorAxisStruct(dev, val, axes_labels[val], min, max, 1, 0, 1, Absolute); xf86InitValuatorDefaults(dev, val); } } XIRegisterPropertyHandler(dev, pointer_property, NULL, NULL); return Success; }
static int device_init(DeviceIntPtr dev, LocalDevicePtr local) { struct MTouch *mt = local->private; unsigned char btmap[DIM_BUTTON + 1] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 Atom axes_labels[2], btn_labels[DIM_BUTTON]; initAxesLabels(axes_labels); initButtonLabels(btn_labels); #endif local->fd = xf86OpenSerial(local->options); if (local->fd < 0) { xf86Msg(X_ERROR, "mtrack: cannot open device\n"); return !Success; } if (mtouch_configure(mt, local->fd)) { xf86Msg(X_ERROR, "mtrack: cannot configure device\n"); return !Success; } xf86CloseSerial(local->fd); #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 3 InitPointerDeviceStruct((DevicePtr)dev, btmap, DIM_BUTTON, GetMotionHistory, pointer_control, GetMotionHistorySize(), 2); #elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 7 InitPointerDeviceStruct((DevicePtr)dev, btmap, DIM_BUTTON, pointer_control, GetMotionHistorySize(), 2); #elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 InitPointerDeviceStruct((DevicePtr)dev, btmap, DIM_BUTTON, btn_labels, pointer_control, GetMotionHistorySize(), 2, axes_labels); #else #error "Unsupported ABI_XINPUT_VERSION" #endif xf86InitValuatorAxisStruct(dev, 0, #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 axes_labels[0], #endif mt->caps.abs[MTDEV_POSITION_X].minimum, mt->caps.abs[MTDEV_POSITION_X].maximum, #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12 1, 0, 1, Absolute); #else 1, 0, 1); #endif xf86InitValuatorDefaults(dev, 0); xf86InitValuatorAxisStruct(dev, 1, #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 axes_labels[1], #endif mt->caps.abs[MTDEV_POSITION_Y].minimum, mt->caps.abs[MTDEV_POSITION_Y].maximum, #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12 1, 0, 1, Absolute); #else 1, 0, 1); #endif xf86InitValuatorDefaults(dev, 1); mprops_init(&mt->cfg, local); XIRegisterPropertyHandler(dev, mprops_set_property, NULL, NULL); return Success; }
int winMouseProc (DeviceIntPtr pDeviceInt, int iState) { int lngMouseButtons, i; int lngWheelEvents = 2; CARD8 *map; DevicePtr pDevice = (DevicePtr) pDeviceInt; switch (iState) { case DEVICE_INIT: /* Get number of mouse buttons */ lngMouseButtons = GetSystemMetrics(SM_CMOUSEBUTTONS); /* Mapping of windows events to X events: * LEFT:1 MIDDLE:2 RIGHT:3 * SCROLL_UP:4 SCROLL_DOWN:5 * XBUTTON 1:6 XBUTTON 2:7 ... * * To map scroll wheel correctly we need at least the 3 normal buttons */ if (lngMouseButtons < 3) lngMouseButtons = 3; winMsg(X_PROBED, "%d mouse buttons found\n", lngMouseButtons); /* allocate memory: * number of buttons + 2x mouse wheel event + 1 extra (offset for map) */ map = malloc(sizeof(CARD8) * (lngMouseButtons + lngWheelEvents + 1)); /* initalize button map */ map[0] = 0; for (i=1; i <= lngMouseButtons + lngWheelEvents; i++) map[i] = i; InitPointerDeviceStruct (pDevice, map, lngMouseButtons + lngWheelEvents, GetMotionHistory, winMouseCtrl, GetMotionHistorySize(), 2); free(map); #if defined(XFree86Server) g_winMouseButtonMap = pDeviceInt->button->map; #endif break; case DEVICE_ON: pDevice->on = TRUE; break; case DEVICE_CLOSE: #if defined(XFree86Server) g_winMouseButtonMap = NULL; #endif case DEVICE_OFF: pDevice->on = FALSE; break; } return Success; }
int winMouseProc(DeviceIntPtr pDeviceInt, int iState) { int lngMouseButtons, i; int lngWheelEvents = 4; CARD8 *map; DevicePtr pDevice = (DevicePtr) pDeviceInt; Atom *btn_labels; Atom axes_labels[2]; switch (iState) { case DEVICE_INIT: /* Get number of mouse buttons */ lngMouseButtons = GetSystemMetrics(SM_CMOUSEBUTTONS); winDebug("%d mouse buttons found\n", lngMouseButtons); /* Mapping of windows events to X events: * LEFT:1 MIDDLE:2 RIGHT:3 * SCROLL_UP:4 SCROLL_DOWN:5 * XBUTTON 1:6 XBUTTON 2:7 ... * * To map scroll wheel correctly we need at least the 3 normal buttons */ if (lngMouseButtons < 3) lngMouseButtons = 3; /* allocate memory: * number of buttons + 2x mouse wheel event + 1 extra (offset for map) */ map = malloc(sizeof(CARD8) * (lngMouseButtons + lngWheelEvents + 1)); /* initalize button map */ map[0] = 0; for (i = 1; i <= lngMouseButtons + lngWheelEvents; i++) map[i] = i; btn_labels = calloc((lngMouseButtons + lngWheelEvents), sizeof(Atom)); btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP); btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN); btn_labels[5] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_LEFT); btn_labels[6] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_HWHEEL_RIGHT); axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X); axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); InitPointerDeviceStruct(pDevice, map, lngMouseButtons + lngWheelEvents, btn_labels, (PtrCtrlProcPtr)NoopDDA, GetMotionHistorySize(), 2, axes_labels); free(map); free(btn_labels); g_winMouseButtonMap = pDeviceInt->button->map; break; case DEVICE_ON: pDevice->on = TRUE; break; case DEVICE_CLOSE: g_winMouseButtonMap = NULL; case DEVICE_OFF: pDevice->on = FALSE; break; } return Success; }