Merge branch 'master' of ssh://herrb@git.freedesktop.org/git/xorg/xserver
This commit is contained in:
commit
1cc8db7281
|
@ -242,11 +242,7 @@ static int dmxBackendOffscreen(int screen, int x, int y)
|
|||
void dmxBackendUpdatePosition(pointer private, int x, int y)
|
||||
{
|
||||
GETPRIVFROMPRIVATE;
|
||||
#if 00 /*BP*/
|
||||
int screen = miPointerCurrentScreen()->myNum;
|
||||
#else
|
||||
int screen = miPointerGetScreen(inputInfo.pointer)->myNum;
|
||||
#endif
|
||||
DMXScreenInfo *dmxScreen = &dmxScreens[priv->myScreen];
|
||||
int oldRelative = priv->relative;
|
||||
int topscreen = dmxBackendFindOverlapping(priv, screen, x, y);
|
||||
|
@ -358,7 +354,8 @@ void dmxBackendCollectEvents(DevicePtr pDev,
|
|||
switch (X.type) {
|
||||
case EnterNotify:
|
||||
dmxCommonSaveState(priv);
|
||||
if (entered++) continue;
|
||||
if (entered++)
|
||||
continue;
|
||||
priv->entered = 1;
|
||||
ignoreLeave = 1;
|
||||
DMXDBG5("dmxBackendCollectEvents: Enter %lu %d,%d; GRAB %s %p\n",
|
||||
|
@ -382,7 +379,8 @@ void dmxBackendCollectEvents(DevicePtr pDev,
|
|||
continue;
|
||||
}
|
||||
dmxCommonRestoreState(priv);
|
||||
if (left++) continue;
|
||||
if (left++)
|
||||
continue;
|
||||
DMXDBG7("dmxBackendCollectEvents: Leave %lu %d,%d %d %d %s %s\n",
|
||||
X.xcrossing.root, X.xcrossing.x, X.xcrossing.y,
|
||||
X.xcrossing.detail, X.xcrossing.focus,
|
||||
|
@ -395,7 +393,6 @@ void dmxBackendCollectEvents(DevicePtr pDev,
|
|||
}
|
||||
break;
|
||||
case MotionNotify:
|
||||
#if 001 /*BP*/
|
||||
DMXDBG9("dmxBackendCollectEvents: MotionNotify %d/%d (mi %d)"
|
||||
" newscreen=%d: %d %d (e=%d; last=%d,%d)\n",
|
||||
dmxScreen->index, priv->myScreen,
|
||||
|
@ -403,7 +400,8 @@ void dmxBackendCollectEvents(DevicePtr pDev,
|
|||
priv->newscreen,
|
||||
X.xmotion.x, X.xmotion.y,
|
||||
entered, priv->lastX, priv->lastY);
|
||||
if (dmxBackendPendingMotionEvent(priv, TRUE)) continue;
|
||||
if (dmxBackendPendingMotionEvent(priv, TRUE))
|
||||
continue;
|
||||
if (!(dmxScreen = dmxBackendFindWindow(priv, X.xmotion.window)))
|
||||
dmxLog(dmxFatal,
|
||||
" Event on non-existant window %lu\n",
|
||||
|
@ -448,25 +446,15 @@ void dmxBackendCollectEvents(DevicePtr pDev,
|
|||
(dmxScreen->rootYOrigin + X.xmotion.y
|
||||
- dmxScreen->rootY));
|
||||
}
|
||||
#else
|
||||
/*
|
||||
ErrorF("motion %d, %d, %d\n",
|
||||
X.xmotion.x, X.xmotion.y, X.xmotion.state);
|
||||
*/
|
||||
enqueue(priv->mou, X.type, 0/*X.xbutton.button*/, 0, &X, block);
|
||||
#endif
|
||||
break;
|
||||
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
enqueue(priv->kbd, X.type, X.xkey.keycode, 0, NULL, block);
|
||||
break;
|
||||
#if 11/*BP*/
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
ErrorF("press/release at %d, %d\n", X.xbutton.x, X.xbutton.y);
|
||||
/* fall-through */
|
||||
#endif
|
||||
/* fall-through */
|
||||
default:
|
||||
/* Pass the whole event here, because
|
||||
* this may be an extension event. */
|
||||
|
@ -589,12 +577,16 @@ void dmxBackendInit(DevicePtr pDev)
|
|||
/** Get information about the backend pointer (for initialization). */
|
||||
void dmxBackendMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
|
||||
{
|
||||
const DMXScreenInfo *dmxScreen = dmxBackendInitPrivate(pDev);
|
||||
|
||||
info->buttonClass = 1;
|
||||
dmxCommonMouGetMap(pDev, info->map, &info->numButtons);
|
||||
info->valuatorClass = 1;
|
||||
info->numRelAxes = 2;
|
||||
info->minval[0] = 0;
|
||||
info->maxval[0] = 0;
|
||||
info->minval[1] = 0;
|
||||
info->maxval[0] = dmxScreen->beWidth;
|
||||
info->maxval[1] = dmxScreen->beHeight;
|
||||
info->res[0] = 1;
|
||||
info->minres[0] = 0;
|
||||
info->maxres[0] = 1;
|
||||
|
|
|
@ -241,13 +241,15 @@ void dmxCommonKbdGetMap(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)
|
|||
|
||||
/* Compute pModMap */
|
||||
modifier_mapping = XGetModifierMapping(priv->display);
|
||||
for (i = 0; i < MAP_LENGTH; i++) pModMap[i] = 0;
|
||||
for (i = 0; i < MAP_LENGTH; i++)
|
||||
pModMap[i] = 0;
|
||||
for (j = 0; j < 8; j++) {
|
||||
int max_keypermod = modifier_mapping->max_keypermod;
|
||||
|
||||
for (i = 0; i < max_keypermod; i++) {
|
||||
CARD8 keycode = modifier_mapping->modifiermap[j*max_keypermod + i];
|
||||
if (keycode) pModMap[keycode] |= 1 << j;
|
||||
if (keycode)
|
||||
pModMap[keycode] |= 1 << j;
|
||||
}
|
||||
}
|
||||
XFreeModifiermap(modifier_mapping);
|
||||
|
@ -611,6 +613,7 @@ void dmxCommonSaveState(pointer private)
|
|||
&priv->dmxLocal->kctrl);
|
||||
|
||||
priv->savedModMap = XGetModifierMapping(priv->display);
|
||||
|
||||
modmap = XNewModifiermap(0);
|
||||
XSetModifierMapping(priv->display, modmap);
|
||||
if (dmxInput->scrnIdx != -1)
|
||||
|
@ -627,8 +630,10 @@ void dmxCommonRestoreState(pointer private)
|
|||
int retcode = -1;
|
||||
CARD32 start;
|
||||
|
||||
if (dmxInput->console) priv = dmxInput->devs[0]->private;
|
||||
if (!priv->stateSaved) return;
|
||||
if (dmxInput->console)
|
||||
priv = dmxInput->devs[0]->private;
|
||||
if (!priv->stateSaved)
|
||||
return;
|
||||
priv->stateSaved = 0;
|
||||
|
||||
DMXDBG0("dmxCommonRestoreState\n");
|
||||
|
@ -645,7 +650,8 @@ void dmxCommonRestoreState(pointer private)
|
|||
CARD32 tmp;
|
||||
|
||||
retcode = XSetModifierMapping(priv->display, priv->savedModMap);
|
||||
if (retcode == MappingSuccess) break;
|
||||
if (retcode == MappingSuccess)
|
||||
break;
|
||||
if (retcode == MappingBusy)
|
||||
dmxLogInput(dmxInput, "Keyboard busy, waiting\n");
|
||||
else
|
||||
|
|
|
@ -860,12 +860,17 @@ void dmxConsoleInit(DevicePtr pDev)
|
|||
* for pointers. */
|
||||
void dmxConsoleMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
|
||||
{
|
||||
GETPRIVFROMPDEV;
|
||||
|
||||
info->buttonClass = 1;
|
||||
dmxCommonMouGetMap(pDev, info->map, &info->numButtons);
|
||||
info->valuatorClass = 1;
|
||||
info->numRelAxes = 2;
|
||||
info->minval[0] = 0;
|
||||
info->maxval[0] = 0;
|
||||
info->minval[0] = 0;
|
||||
info->minval[1] = 0;
|
||||
/* max possible console window size: */
|
||||
info->maxval[0] = DisplayWidth(priv->display, DefaultScreen(priv->display));
|
||||
info->maxval[1] = DisplayHeight(priv->display, DefaultScreen(priv->display));
|
||||
info->res[0] = 1;
|
||||
info->minres[0] = 0;
|
||||
info->maxres[0] = 1;
|
||||
|
|
|
@ -79,7 +79,9 @@ void dmxDummyMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
|
|||
info->valuatorClass = 1;
|
||||
info->numRelAxes = 2;
|
||||
info->minval[0] = 0;
|
||||
info->minval[1] = 0;
|
||||
info->maxval[0] = 0;
|
||||
info->maxval[1] = 0;
|
||||
info->res[0] = 1;
|
||||
info->minres[0] = 0;
|
||||
info->maxres[0] = 1;
|
||||
|
|
|
@ -109,10 +109,11 @@ static int dmxCheckFunctionKeys(DMXLocalInputInfoPtr dmxLocal,
|
|||
else if (dmxLocal->pDevice->key)
|
||||
state = dmxLocal->pDevice->key->state;
|
||||
|
||||
DMXDBG3("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
|
||||
ErrorF/*DMXDBG3*/("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
|
||||
keySym, type == KeyPress ? "press" : "release", state);
|
||||
|
||||
if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask)) return 0;
|
||||
if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask))
|
||||
return 0;
|
||||
|
||||
switch (keySym) {
|
||||
case XK_g:
|
||||
|
@ -147,16 +148,25 @@ static void dmxEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal, xEvent *e,
|
|||
int type = e->u.u.type;
|
||||
|
||||
switch (e->u.u.type) {
|
||||
case KeyPress: type = DeviceKeyPress; break;
|
||||
case KeyRelease: type = DeviceKeyRelease; break;
|
||||
case ButtonPress: type = DeviceButtonPress; break;
|
||||
case ButtonRelease: type = DeviceButtonRelease; break;
|
||||
case KeyPress:
|
||||
type = DeviceKeyPress;
|
||||
break;
|
||||
case KeyRelease:
|
||||
type = DeviceKeyRelease;
|
||||
break;
|
||||
case ButtonPress:
|
||||
type = DeviceButtonPress;
|
||||
break;
|
||||
case ButtonRelease:
|
||||
type = DeviceButtonRelease;
|
||||
break;
|
||||
case MotionNotify:
|
||||
dmxLog(dmxError,
|
||||
"dmxEnqueueExtEvent: MotionNotify not allowed here\n");
|
||||
return;
|
||||
default:
|
||||
if (e->u.u.type == ProximityIn || e->u.u.type == ProximityOut) break;
|
||||
if (e->u.u.type == ProximityIn || e->u.u.type == ProximityOut)
|
||||
break;
|
||||
dmxLogInput(dmxInput,
|
||||
"dmxEnqueueExtEvent: Unhandled %s event (%d)\n",
|
||||
e->u.u.type >= LASTEvent ? "extension" : "non-extension",
|
||||
|
@ -174,9 +184,11 @@ static void dmxEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal, xEvent *e,
|
|||
xv->num_valuators = 0;
|
||||
xv->first_valuator = 0;
|
||||
|
||||
if (block) dmxSigioBlock();
|
||||
if (block)
|
||||
dmxSigioBlock();
|
||||
dmxeqEnqueue(xE);
|
||||
if (block) dmxSigioUnblock();
|
||||
if (block)
|
||||
dmxSigioUnblock();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -186,38 +198,27 @@ DMXScreenInfo *dmxFindFirstScreen(int x, int y)
|
|||
|
||||
for (i = 0; i < dmxNumScreens; i++) {
|
||||
DMXScreenInfo *dmxScreen = &dmxScreens[i];
|
||||
if (dmxOnScreen(x, y, dmxScreen)) return dmxScreen;
|
||||
if (dmxOnScreen(x, y, dmxScreen))
|
||||
return dmxScreen;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
#if 11/*BP*/
|
||||
|
||||
/**
|
||||
* Enqueue a motion event.
|
||||
*/
|
||||
static void enqueueMotion(DevicePtr pDev, int x, int y)
|
||||
{
|
||||
GETDMXINPUTFROMPDEV;
|
||||
GETDMXLOCALFROMPDEV;
|
||||
DeviceIntPtr p = dmxLocal->pDevice;
|
||||
int i, nevents, valuators[3];
|
||||
xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
|
||||
int detail = 0;
|
||||
|
||||
int detail = 0; /* XXX should this be mask of pressed buttons? */
|
||||
valuators[0] = x;
|
||||
valuators[1] = y;
|
||||
valuators[2] = detail;
|
||||
nevents = GetPointerEvents(events,
|
||||
/*pDev*/p,
|
||||
MotionNotify,
|
||||
detail,
|
||||
POINTER_ABSOLUTE,
|
||||
0, 2, valuators);
|
||||
ErrorF("MOTION2 %d, %d n = %d\n", valuators[0], valuators[1], nevents);
|
||||
/*
|
||||
ErrorF("NEW MOTION %d st %d (%d,%d,%d) n=%d\n",
|
||||
detail, e->xmotion.state,
|
||||
valuators[0], valuators[1], valuators[2],
|
||||
nevents);
|
||||
*/
|
||||
nevents = GetPointerEvents(events, p, MotionNotify, detail,
|
||||
POINTER_ABSOLUTE, 0, 2, valuators);
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqEnqueue(p, events + i);
|
||||
xfree(events);
|
||||
|
@ -225,8 +226,8 @@ static void enqueueMotion(DevicePtr pDev, int x, int y)
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
||||
void
|
||||
dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
||||
{
|
||||
DMXScreenInfo *dmxScreen;
|
||||
DMXInputInfo *dmxInput;
|
||||
|
@ -235,7 +236,8 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
|||
int localY;
|
||||
int i;
|
||||
|
||||
if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y) return;
|
||||
if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y)
|
||||
return;
|
||||
|
||||
DMXDBG5("dmxCoreMotion(%d,%d,%d) dmxGlobalX=%d dmxGlobalY=%d\n",
|
||||
x, y, delta, dmxGlobalX, dmxGlobalY);
|
||||
|
@ -244,13 +246,15 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
|||
dmxGlobalX = x;
|
||||
dmxGlobalY = y;
|
||||
|
||||
if (dmxGlobalX < 0) dmxGlobalX = 0;
|
||||
if (dmxGlobalY < 0) dmxGlobalY = 0;
|
||||
if (dmxGlobalX >= dmxGlobalWidth) dmxGlobalX = dmxGlobalWidth + delta -1;
|
||||
if (dmxGlobalY >= dmxGlobalHeight) dmxGlobalY = dmxGlobalHeight + delta -1;
|
||||
if (dmxGlobalX < 0)
|
||||
dmxGlobalX = 0;
|
||||
if (dmxGlobalY < 0)
|
||||
dmxGlobalY = 0;
|
||||
if (dmxGlobalX >= dmxGlobalWidth)
|
||||
dmxGlobalX = dmxGlobalWidth + delta -1;
|
||||
if (dmxGlobalY >= dmxGlobalHeight)
|
||||
dmxGlobalY = dmxGlobalHeight + delta -1;
|
||||
|
||||
ErrorF("Global Pos: %d, %d\n", dmxGlobalX, dmxGlobalY);
|
||||
|
||||
if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
|
||||
localX = dmxGlobalX - dmxScreen->rootXOrigin;
|
||||
localY = dmxGlobalY - dmxScreen->rootYOrigin;
|
||||
|
@ -259,13 +263,8 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
|||
/* Screen is old screen */
|
||||
if (block)
|
||||
dmxSigioBlock();
|
||||
#if 000
|
||||
miPointerSetPosition(inputInfo.pointer, &localX, &localY,
|
||||
GetTimeInMillis());
|
||||
#else
|
||||
if (pDev)
|
||||
enqueueMotion(pDev, localX, localY);
|
||||
#endif
|
||||
if (block)
|
||||
dmxSigioUnblock();
|
||||
} else {
|
||||
|
@ -277,13 +276,8 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
|||
dmxeqProcessInputEvents();
|
||||
miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
|
||||
localX, localY);
|
||||
#if 000
|
||||
miPointerSetPosition(inputInfo.pointer, &localX, &localY,
|
||||
GetTimeInMillis());
|
||||
#else
|
||||
if (pDev)
|
||||
enqueueMotion(pDev, localX, localY);
|
||||
#endif
|
||||
if (block)
|
||||
dmxSigioUnblock();
|
||||
}
|
||||
|
@ -307,109 +301,6 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
|||
* drivers */
|
||||
for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
|
||||
int j;
|
||||
|
||||
for (j = 0; j < dmxInput->numDevs; j += dmxInput->devs[j]->binding)
|
||||
if (!dmxInput->detached
|
||||
&& dmxInput->devs[j]->sendsCore
|
||||
&& dmxInput->devs[j]->update_position)
|
||||
dmxInput->devs[j]->update_position(dmxInput->devs[j]->private,
|
||||
dmxGlobalX, dmxGlobalY);
|
||||
}
|
||||
if (!dmxScreen) ProcessInputEvents();
|
||||
}
|
||||
#endif
|
||||
|
||||
void dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
|
||||
{
|
||||
DMXScreenInfo *dmxScreen;
|
||||
DMXInputInfo *dmxInput;
|
||||
ScreenPtr pScreen;
|
||||
int localX;
|
||||
int localY;
|
||||
int i;
|
||||
|
||||
#if 11/*BP*/
|
||||
dmxCoreMotion2(pDev, x, y, delta, block);
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y) return;
|
||||
|
||||
DMXDBG5("dmxCoreMotion(%d,%d,%d) dmxGlobalX=%d dmxGlobalY=%d\n",
|
||||
x, y, delta, dmxGlobalX, dmxGlobalY);
|
||||
|
||||
dmxGlobalInvalid = 0;
|
||||
dmxGlobalX = x;
|
||||
dmxGlobalY = y;
|
||||
|
||||
if (dmxGlobalX < 0) dmxGlobalX = 0;
|
||||
if (dmxGlobalY < 0) dmxGlobalY = 0;
|
||||
if (dmxGlobalX >= dmxGlobalWidth) dmxGlobalX = dmxGlobalWidth + delta -1;
|
||||
if (dmxGlobalY >= dmxGlobalHeight) dmxGlobalY = dmxGlobalHeight + delta -1;
|
||||
|
||||
ErrorF("Global Pos: %d, %d\n", dmxGlobalX, dmxGlobalY);
|
||||
|
||||
if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
|
||||
localX = dmxGlobalX - dmxScreen->rootXOrigin;
|
||||
localY = dmxGlobalY - dmxScreen->rootYOrigin;
|
||||
#if 00 /*BP*/
|
||||
if ((pScreen = miPointerCurrentScreen())
|
||||
#else
|
||||
if ((pScreen = miPointerGetScreen(inputInfo.pointer))
|
||||
#endif
|
||||
&& pScreen->myNum == dmxScreen->index) {
|
||||
/* Screen is old screen */
|
||||
if (block) dmxSigioBlock();
|
||||
#if 00 /*BP*/
|
||||
miPointerAbsoluteCursor(localX, localY, GetTimeInMillis());
|
||||
#else
|
||||
miPointerSetPosition(inputInfo.pointer, &localX, &localY,
|
||||
GetTimeInMillis());
|
||||
#endif
|
||||
if (block) dmxSigioUnblock();
|
||||
} else {
|
||||
/* Screen is new */
|
||||
DMXDBG4(" New screen: old=%d new=%d localX=%d localY=%d\n",
|
||||
pScreen->myNum, dmxScreen->index, localX, localY);
|
||||
if (block) dmxSigioBlock();
|
||||
dmxeqProcessInputEvents();
|
||||
#if 00 /*BP*/
|
||||
miPointerSetNewScreen(dmxScreen->index, localX, localY);
|
||||
miPointerAbsoluteCursor(localX, localY, GetTimeInMillis());
|
||||
#else
|
||||
miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
|
||||
localX, localY);
|
||||
miPointerSetPosition(inputInfo.pointer, &localX, &localY,
|
||||
GetTimeInMillis());
|
||||
#endif
|
||||
if (block) dmxSigioUnblock();
|
||||
}
|
||||
#if 00 /*BP*/
|
||||
miPointerPosition(&localX, &localY);
|
||||
#else
|
||||
miPointerGetPosition(inputInfo.pointer, &localX, &localY);
|
||||
#endif
|
||||
|
||||
#if 00 /*BP*/
|
||||
if ((pScreen = miPointerCurrentScreen())) {
|
||||
#else
|
||||
if ((pScreen = miPointerGetScreen(inputInfo.pointer))) {
|
||||
#endif
|
||||
dmxGlobalX = localX + dmxScreens[pScreen->myNum].rootXOrigin;
|
||||
dmxGlobalY = localY + dmxScreens[pScreen->myNum].rootYOrigin;
|
||||
ErrorF("Global is now %d, %d\n", dmxGlobalX, dmxGlobalY);
|
||||
DMXDBG6(" Moved to dmxGlobalX=%d dmxGlobalY=%d"
|
||||
" on screen index=%d/%d localX=%d localY=%d\n",
|
||||
dmxGlobalX, dmxGlobalY,
|
||||
dmxScreen ? dmxScreen->index : -1, pScreen->myNum,
|
||||
localX, localY);
|
||||
}
|
||||
}
|
||||
/* Send updates down to all core input
|
||||
* drivers */
|
||||
for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
|
||||
int j;
|
||||
|
||||
for (j = 0; j < dmxInput->numDevs; j += dmxInput->devs[j]->binding)
|
||||
if (!dmxInput->detached
|
||||
&& dmxInput->devs[j]->sendsCore
|
||||
|
@ -512,10 +403,12 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
|
|||
}
|
||||
}
|
||||
|
||||
if (block) dmxSigioBlock();
|
||||
if (block)
|
||||
dmxSigioBlock();
|
||||
dmxPointerPutMotionEvent(pDevice, firstAxis, axesCount, v, xev->time);
|
||||
dmxeqEnqueue(xE);
|
||||
if (block) dmxSigioUnblock();
|
||||
if (block)
|
||||
dmxSigioUnblock();
|
||||
}
|
||||
|
||||
static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
|
||||
|
@ -529,7 +422,8 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
|
|||
XDeviceKeyEvent *ke = (XDeviceKeyEvent *)e;
|
||||
XDeviceMotionEvent *me = (XDeviceMotionEvent *)e;
|
||||
|
||||
if (!e) return -1; /* No extended event passed, cannot handle */
|
||||
if (!e)
|
||||
return -1; /* No extended event passed, cannot handle */
|
||||
|
||||
if ((XID)dmxLocal->deviceId != ke->deviceid) {
|
||||
/* Search for the correct dmxLocal,
|
||||
|
@ -540,7 +434,8 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
|
|||
DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
|
||||
for (i = 0; i < dmxInput->numDevs; i++) {
|
||||
dmxLocal = dmxInput->devs[i];
|
||||
if ((XID)dmxLocal->deviceId == ke->deviceid) break;
|
||||
if ((XID)dmxLocal->deviceId == ke->deviceid)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -589,9 +484,11 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
|
|||
xv->valuator4 = ke->axis_data[4];
|
||||
xv->valuator5 = ke->axis_data[5];
|
||||
|
||||
if (block) dmxSigioBlock();
|
||||
if (block)
|
||||
dmxSigioBlock();
|
||||
dmxeqEnqueue(xE);
|
||||
if (block) dmxSigioUnblock();
|
||||
if (block)
|
||||
dmxSigioUnblock();
|
||||
break;
|
||||
|
||||
case XI_DeviceMotionNotify:
|
||||
|
@ -694,7 +591,8 @@ static KeySym dmxKeyCodeToKeySym(DMXLocalInputInfoPtr dmxLocal,
|
|||
if (!dmxLocal || !dmxLocal->pDevice || !dmxLocal->pDevice->key)
|
||||
return NoSymbol;
|
||||
pKeySyms = &dmxLocal->pDevice->key->curKeySyms;
|
||||
if (!pKeySyms) return NoSymbol;
|
||||
if (!pKeySyms)
|
||||
return NoSymbol;
|
||||
|
||||
if (keyCode > pKeySyms->minKeyCode && keyCode <= pKeySyms->maxKeyCode) {
|
||||
DMXDBG2("dmxKeyCodeToKeySym: Translated keyCode=%d to keySym=0x%04x\n",
|
||||
|
@ -743,14 +641,16 @@ static int dmxFixup(DevicePtr pDev, int detail, KeySym keySym)
|
|||
dmxLocal->pDevice->name);
|
||||
return NoSymbol;
|
||||
}
|
||||
if (!keySym) keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
|
||||
if (keySym == NoSymbol) return detail;
|
||||
if (!keySym)
|
||||
keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
|
||||
if (keySym == NoSymbol)
|
||||
return detail;
|
||||
keyCode = dmxKeySymToKeyCode(dmxLocalCoreKeyboard, keySym, detail);
|
||||
|
||||
return keyCode ? keyCode : detail;
|
||||
}
|
||||
|
||||
/** Enqueue a non-motion event from the \a pDev device with the
|
||||
/** Enqueue an event from the \a pDev device with the
|
||||
* specified \a type and \a detail. If the event is a KeyPress or
|
||||
* KeyRelease event, then the \a keySym is also specified.
|
||||
*
|
||||
|
@ -762,103 +662,56 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
|
|||
{
|
||||
GETDMXINPUTFROMPDEV;
|
||||
xEvent xE;
|
||||
DeviceIntPtr p = dmxLocal->pDevice;
|
||||
int i, nevents, valuators[3];
|
||||
xEvent *events;
|
||||
|
||||
DMXDBG2("dmxEnqueue: Enqueuing type=%d detail=0x%0x\n", type, detail);
|
||||
|
||||
switch (type) {
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
if (!keySym) keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
|
||||
if (!keySym)
|
||||
keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
|
||||
if (dmxCheckFunctionKeys(dmxLocal, type, keySym))
|
||||
return;
|
||||
if (dmxLocal->sendsCore && dmxLocal != dmxLocalCoreKeyboard)
|
||||
xE.u.u.detail = dmxFixup(pDev, detail, keySym);
|
||||
#if 11/*BP*/
|
||||
{
|
||||
DeviceIntPtr p = dmxLocal->pDevice;
|
||||
int i, nevents;
|
||||
xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
|
||||
nevents = GetKeyboardEvents(events,
|
||||
/*pDev*/p,
|
||||
/*KeyPress*/type,
|
||||
/*n*/detail);
|
||||
ErrorF("KEY %d n=%d\n", detail, nevents);
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqEnqueue(p, events + i);
|
||||
xfree(events);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
|
||||
ErrorF("KEY %d sym %d\n", detail, (int) keySym);
|
||||
nevents = GetKeyboardEvents(events, p, type, detail);
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqEnqueue(p, events + i);
|
||||
xfree(events);
|
||||
return;
|
||||
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
#if 00 /*BP*/
|
||||
detail = dmxGetButtonMapping(dmxLocal, detail);
|
||||
#else
|
||||
{
|
||||
DeviceIntPtr p = dmxLocal->pDevice;
|
||||
int i, nevents, valuators[3];
|
||||
xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
|
||||
events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
|
||||
nevents = GetPointerEvents(events, p, type, detail,
|
||||
POINTER_ABSOLUTE,
|
||||
0, /* first_valuator = 0 */
|
||||
0, /* num_valuators = 0 */
|
||||
valuators);
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqEnqueue(p, events + i);
|
||||
xfree(events);
|
||||
return;
|
||||
|
||||
valuators[0] = e->xbutton.x;
|
||||
valuators[1] = e->xbutton.y;
|
||||
/*
|
||||
valuators[0] = dmxGlobalX;
|
||||
valuators[1] = dmxGlobalY;
|
||||
*/
|
||||
valuators[2] = e->xbutton.button;
|
||||
nevents = GetPointerEvents(events,
|
||||
/*pDev*/p,
|
||||
/*KeyPress*/type,
|
||||
detail,
|
||||
POINTER_ABSOLUTE,
|
||||
0, 2/*3*/, valuators);
|
||||
|
||||
ErrorF("BUTTON %d, %d %d n=%d\n",
|
||||
valuators[0], valuators[1], valuators[2], nevents);
|
||||
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqEnqueue(p, events + i);
|
||||
xfree(events);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case MotionNotify:
|
||||
/* All MotionNotify events should be sent via dmxCoreMotion and
|
||||
* dmxExtMotion -- no input driver should build motion events by
|
||||
* hand. */
|
||||
#if 00 /*BP*/
|
||||
dmxLog(dmxError, "dmxEnqueueXEvent: MotionNotify not allowed here\n");
|
||||
#else
|
||||
{
|
||||
DeviceIntPtr p = dmxLocal->pDevice;
|
||||
int i, nevents, valuators[3];
|
||||
xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
|
||||
valuators[0] = e->xmotion.x;
|
||||
valuators[1] = e->xmotion.y;
|
||||
valuators[2] = e->xmotion.state;
|
||||
nevents = GetPointerEvents(events,
|
||||
/*pDev*/p,
|
||||
/*KeyPress*/type,
|
||||
detail,
|
||||
POINTER_ABSOLUTE,
|
||||
0, 3, valuators);
|
||||
ErrorF("MOTION %d, %d n = %d\n", valuators[0], valuators[1], nevents);
|
||||
/*
|
||||
ErrorF("NEW MOTION %d st %d (%d,%d,%d) n=%d\n",
|
||||
detail, e->xmotion.state,
|
||||
valuators[0], valuators[1], valuators[2],
|
||||
nevents);
|
||||
*/
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqEnqueue(p, events + i);
|
||||
xfree(events);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
/* Always ignore these events */
|
||||
events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
|
||||
valuators[0] = e->xmotion.x;
|
||||
valuators[1] = e->xmotion.y;
|
||||
valuators[2] = e->xmotion.state;
|
||||
nevents = GetPointerEvents(events, p, type, detail,
|
||||
POINTER_ABSOLUTE, 0, 3, valuators);
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqEnqueue(p, events + i);
|
||||
xfree(events);
|
||||
return;
|
||||
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
case KeymapNotify:
|
||||
|
@ -866,12 +719,12 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
|
|||
* modifier map on the backend/console
|
||||
* input device so that we have complete
|
||||
* control of the input device LEDs. */
|
||||
ErrorF("Enter/Leave/Keymap/Mapping\n");
|
||||
return;
|
||||
default:
|
||||
#ifdef XINPUT
|
||||
if (type == ProximityIn || type == ProximityOut) {
|
||||
if (dmxLocal->sendsCore) return; /* Not a core event */
|
||||
if (dmxLocal->sendsCore)
|
||||
return; /* Not a core event */
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
@ -887,25 +740,19 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
|
|||
return;
|
||||
}
|
||||
|
||||
#if 00 /* dead code? */
|
||||
memset(&xE, 0, sizeof(xE));
|
||||
xE.u.u.type = type;
|
||||
xE.u.u.detail = detail;
|
||||
xE.u.keyButtonPointer.time = GetTimeInMillis();
|
||||
|
||||
#ifdef XINPUT
|
||||
if (!dmxLocal->sendsCore) dmxEnqueueExtEvent(dmxLocal, &xE, block);
|
||||
if (!dmxLocal->sendsCore)
|
||||
dmxEnqueueExtEvent(dmxLocal, &xE, block);
|
||||
else
|
||||
#endif
|
||||
#if 00 /*BP*/
|
||||
dmxeqEnqueue(&xE);
|
||||
#else
|
||||
/* never get here! */
|
||||
if (0) {
|
||||
DeviceIntPtr p = dmxLocal->pDevice;
|
||||
ErrorF("enque %d\n", type);
|
||||
mieqEnqueue(p, &xE);
|
||||
}
|
||||
#endif
|
||||
#endif /*00*/
|
||||
}
|
||||
|
||||
/** A pointer to this routine is passed to low-level input drivers so
|
||||
|
|
|
@ -505,11 +505,10 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
|
|||
GetMaximumEventsNum(),
|
||||
#endif
|
||||
Relative);
|
||||
ErrorF("MOTION BUFFER SIZE %d\n", GetMaximumEventsNum());
|
||||
#ifdef XINPUT
|
||||
for (i = 0; i < info.numRelAxes; i++)
|
||||
InitValuatorAxisStruct(pDevice, i, info.minval[0],
|
||||
1280/*info.maxval[0]*/, info.res[0],
|
||||
info.maxval[0], info.res[0],
|
||||
info.minres[0], info.maxres[0]);
|
||||
#endif
|
||||
} else if (info.numRelAxes) {
|
||||
|
@ -520,7 +519,7 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
|
|||
#ifdef XINPUT
|
||||
for (i = 0; i < info.numRelAxes; i++)
|
||||
InitValuatorAxisStruct(pDevice, i, info.minval[0],
|
||||
1280/*info.maxval[0]*/, info.res[0],
|
||||
info.maxval[0], info.res[0],
|
||||
info.minres[0], info.maxres[0]);
|
||||
#endif
|
||||
} else if (info.numAbsAxes) {
|
||||
|
@ -531,7 +530,7 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
|
|||
#ifdef XINPUT
|
||||
for (i = 0; i < info.numAbsAxes; i++)
|
||||
InitValuatorAxisStruct(pDevice, i+info.numRelAxes,
|
||||
info.minval[i+1], 1280/*info.maxval[i+1]*/,
|
||||
info.minval[i+1], info.maxval[i+1],
|
||||
info.res[i+1], info.minres[i+1],
|
||||
info.maxres[i+1]);
|
||||
#endif
|
||||
|
@ -588,10 +587,6 @@ static void dmxProcessInputEvents(DMXInputInfo *dmxInput)
|
|||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
ErrorF("%s\n", __FUNCTION__);
|
||||
*/
|
||||
|
||||
dmxeqProcessInputEvents();
|
||||
#if 00 /*BP*/
|
||||
miPointerUpdate();
|
||||
|
|
|
@ -958,6 +958,10 @@ the driver-specific documentation recommends it.
|
|||
This optional entry specifies the pixel clock frequency that is used
|
||||
for the regular text mode. The frequency is specified in MHz. This is
|
||||
rarely used.
|
||||
.TP 7
|
||||
.BI "Option \*qModeDebug\*q \*q" boolean \*q
|
||||
Enable printing of additional debugging information about modesetting to
|
||||
the server log.
|
||||
.ig
|
||||
.TP 7
|
||||
This optional entry allows an IRQ number to be specified.
|
||||
|
|
|
@ -377,6 +377,15 @@ static OptionInfoRec xf86OutputOptions[] = {
|
|||
{-1, NULL, OPTV_NONE, {0}, FALSE },
|
||||
};
|
||||
|
||||
enum {
|
||||
OPTION_MODEDEBUG,
|
||||
};
|
||||
|
||||
static OptionInfoRec xf86DeviceOptions[] = {
|
||||
{OPTION_MODEDEBUG, "ModeDebug", OPTV_STRING, {0}, FALSE },
|
||||
{-1, NULL, OPTV_NONE, {0}, FALSE },
|
||||
};
|
||||
|
||||
static void
|
||||
xf86OutputSetMonitor (xf86OutputPtr output)
|
||||
{
|
||||
|
@ -589,7 +598,6 @@ xf86CrtcCloseScreen (int index, ScreenPtr screen)
|
|||
{
|
||||
xf86OutputPtr output = config->output[o];
|
||||
|
||||
output->crtc = NULL;
|
||||
output->randr_output = NULL;
|
||||
}
|
||||
for (c = 0; c < config->num_crtc; c++)
|
||||
|
@ -1160,8 +1168,6 @@ xf86SortModes (DisplayModePtr input)
|
|||
return output;
|
||||
}
|
||||
|
||||
#define DEBUG_REPROBE 1
|
||||
|
||||
void
|
||||
xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
||||
{
|
||||
|
@ -1330,7 +1336,8 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
|||
if (mode->status == MODE_OK)
|
||||
mode->status = (*output->funcs->mode_valid)(output, mode);
|
||||
|
||||
xf86PruneInvalidModes(scrn, &output->probed_modes, TRUE);
|
||||
xf86PruneInvalidModes(scrn, &output->probed_modes,
|
||||
config->debug_modes);
|
||||
|
||||
output->probed_modes = xf86SortModes (output->probed_modes);
|
||||
|
||||
|
@ -1363,17 +1370,17 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
|||
|
||||
output->initial_rotation = xf86OutputInitialRotation (output);
|
||||
|
||||
#ifdef DEBUG_REPROBE
|
||||
if (output->probed_modes != NULL) {
|
||||
xf86DrvMsg(scrn->scrnIndex, X_INFO,
|
||||
"Printing probed modes for output %s\n",
|
||||
output->name);
|
||||
} else {
|
||||
xf86DrvMsg(scrn->scrnIndex, X_INFO,
|
||||
"No remaining probed modes for output %s\n",
|
||||
output->name);
|
||||
if (config->debug_modes) {
|
||||
if (output->probed_modes != NULL) {
|
||||
xf86DrvMsg(scrn->scrnIndex, X_INFO,
|
||||
"Printing probed modes for output %s\n",
|
||||
output->name);
|
||||
} else {
|
||||
xf86DrvMsg(scrn->scrnIndex, X_INFO,
|
||||
"No remaining probed modes for output %s\n",
|
||||
output->name);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
for (mode = output->probed_modes; mode != NULL; mode = mode->next)
|
||||
{
|
||||
/* The code to choose the best mode per pipe later on will require
|
||||
|
@ -1382,9 +1389,8 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
|
|||
mode->VRefresh = xf86ModeVRefresh(mode);
|
||||
xf86SetModeCrtc(mode, INTERLACE_HALVE_V);
|
||||
|
||||
#ifdef DEBUG_REPROBE
|
||||
xf86PrintModeline(scrn->scrnIndex, mode);
|
||||
#endif
|
||||
if (config->debug_modes)
|
||||
xf86PrintModeline(scrn->scrnIndex, mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1479,6 +1485,15 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
|
|||
int width;
|
||||
int height;
|
||||
|
||||
/* Set up the device options */
|
||||
config->options = xnfalloc (sizeof (xf86DeviceOptions));
|
||||
memcpy (config->options, xf86DeviceOptions, sizeof (xf86DeviceOptions));
|
||||
xf86ProcessOptions (scrn->scrnIndex,
|
||||
scrn->options,
|
||||
config->options);
|
||||
config->debug_modes = xf86ReturnOptValBool (config->options,
|
||||
OPTION_MODEDEBUG, FALSE);
|
||||
|
||||
if (scrn->display->virtualX)
|
||||
width = scrn->display->virtualX;
|
||||
else
|
||||
|
@ -1962,10 +1977,12 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
|
|||
|
||||
output->MonInfo = edid_mon;
|
||||
|
||||
/* Debug info for now, at least */
|
||||
xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n", output->name);
|
||||
xf86PrintEDID(edid_mon);
|
||||
|
||||
if (config->debug_modes) {
|
||||
xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n",
|
||||
output->name);
|
||||
xf86PrintEDID(edid_mon);
|
||||
}
|
||||
|
||||
/* Set the DDC properties for the 'compat' output */
|
||||
if (output == config->output[config->compat_output])
|
||||
xf86SetDDCproperties(scrn, edid_mon);
|
||||
|
|
|
@ -552,6 +552,13 @@ typedef struct _xf86CrtcConfig {
|
|||
CARD8 *cursor_image;
|
||||
Bool cursor_on;
|
||||
CARD32 cursor_fg, cursor_bg;
|
||||
|
||||
/**
|
||||
* Options parsed from the related device section
|
||||
*/
|
||||
OptionInfoPtr options;
|
||||
|
||||
Bool debug_modes;
|
||||
} xf86CrtcConfigRec, *xf86CrtcConfigPtr;
|
||||
|
||||
extern int xf86CrtcConfigPrivateIndex;
|
||||
|
|
Loading…
Reference in New Issue
Block a user