Merge remote branch 'whot/for-keith'
This commit is contained in:
commit
b3ab978df8
|
@ -86,6 +86,7 @@
|
|||
#include "windowstr.h" /* screenIsSaved */
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h> /* for int64_t */
|
||||
|
||||
#include <X11/Xpoll.h>
|
||||
|
||||
|
@ -1177,12 +1178,11 @@ xf86ScaleAxis(int Cx,
|
|||
int Rxlow )
|
||||
{
|
||||
int X;
|
||||
int dSx = Sxhigh - Sxlow;
|
||||
int dRx = Rxhigh - Rxlow;
|
||||
int64_t dSx = Sxhigh - Sxlow;
|
||||
int64_t dRx = Rxhigh - Rxlow;
|
||||
|
||||
dSx = Sxhigh - Sxlow;
|
||||
if (dRx) {
|
||||
X = ((dSx * (Cx - Rxlow)) / dRx) + Sxlow;
|
||||
X = (int)(((dSx * (Cx - Rxlow)) / dRx) + Sxlow);
|
||||
}
|
||||
else {
|
||||
X = 0;
|
||||
|
|
|
@ -768,18 +768,6 @@ extern _X_EXPORT void XkbDDXUpdateDeviceIndicators(
|
|||
CARD32 /* newState */
|
||||
);
|
||||
|
||||
extern _X_EXPORT void XkbDDXFakePointerMotion(
|
||||
unsigned int /* flags */,
|
||||
int /* x */,
|
||||
int /* y */
|
||||
);
|
||||
|
||||
extern _X_EXPORT void XkbDDXFakeDeviceButton(
|
||||
DeviceIntPtr /* dev */,
|
||||
Bool /* press */,
|
||||
int /* button */
|
||||
);
|
||||
|
||||
extern _X_EXPORT int XkbDDXTerminateServer(
|
||||
DeviceIntPtr /* dev */,
|
||||
KeyCode /* key */,
|
||||
|
|
|
@ -5,11 +5,9 @@ AM_CFLAGS = $(DIX_CFLAGS)
|
|||
DDX_SRCS = \
|
||||
ddxBeep.c \
|
||||
ddxCtrls.c \
|
||||
ddxFakeMtn.c \
|
||||
ddxLEDs.c \
|
||||
ddxLoad.c \
|
||||
ddxList.c \
|
||||
ddxDevBtn.c
|
||||
ddxList.c
|
||||
|
||||
DIX_SRCS = \
|
||||
xkb.c \
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
/************************************************************
|
||||
Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc.
|
||||
|
||||
Permission to use, copy, modify, and distribute this
|
||||
software and its documentation for any purpose and without
|
||||
fee is hereby granted, provided that the above copyright
|
||||
notice appear in all copies and that both that copyright
|
||||
notice and this permission notice appear in supporting
|
||||
documentation, and that the name of Silicon Graphics not be
|
||||
used in advertising or publicity pertaining to distribution
|
||||
of the software without specific prior written permission.
|
||||
Silicon Graphics makes no representation about the suitability
|
||||
of this software for any purpose. It is provided "as is"
|
||||
without any express or implied warranty.
|
||||
|
||||
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
||||
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
|
||||
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
|
||||
THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
********************************************************/
|
||||
|
||||
#ifdef HAVE_DIX_CONFIG_H
|
||||
#include <dix-config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <X11/X.h>
|
||||
#include <X11/Xproto.h>
|
||||
#include <X11/keysym.h>
|
||||
#include "inputstr.h"
|
||||
#include "scrnintstr.h"
|
||||
#include "windowstr.h"
|
||||
#include "eventstr.h"
|
||||
#include <xkbsrv.h>
|
||||
#include "mi.h"
|
||||
#include <X11/extensions/XI.h>
|
||||
#include <X11/extensions/XIproto.h>
|
||||
|
||||
void
|
||||
XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
|
||||
{
|
||||
EventListPtr events;
|
||||
int nevents, i;
|
||||
DeviceIntPtr ptr;
|
||||
|
||||
/* If dev is a slave device, and the SD is attached, do nothing. If we'd
|
||||
* post through the attached master pointer we'd get duplicate events.
|
||||
*
|
||||
* if dev is a master keyboard, post through the master pointer.
|
||||
*
|
||||
* if dev is a floating slave, post through the device itself.
|
||||
*/
|
||||
|
||||
if (IsMaster(dev))
|
||||
ptr = GetMaster(dev, MASTER_POINTER);
|
||||
else if (!dev->u.master)
|
||||
ptr = dev;
|
||||
else
|
||||
return;
|
||||
|
||||
events = InitEventList(GetMaximumEventsNum());
|
||||
nevents = GetPointerEvents(events, ptr,
|
||||
press ? ButtonPress : ButtonRelease, button,
|
||||
0 /* flags */, 0 /* first */,
|
||||
0 /* num_val */, NULL);
|
||||
|
||||
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
|
||||
|
||||
FreeEventList(events, GetMaximumEventsNum());
|
||||
}
|
118
xkb/ddxFakeMtn.c
118
xkb/ddxFakeMtn.c
|
@ -1,118 +0,0 @@
|
|||
/************************************************************
|
||||
Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
|
||||
|
||||
Permission to use, copy, modify, and distribute this
|
||||
software and its documentation for any purpose and without
|
||||
fee is hereby granted, provided that the above copyright
|
||||
notice appear in all copies and that both that copyright
|
||||
notice and this permission notice appear in supporting
|
||||
documentation, and that the name of Silicon Graphics not be
|
||||
used in advertising or publicity pertaining to distribution
|
||||
of the software without specific prior written permission.
|
||||
Silicon Graphics makes no representation about the suitability
|
||||
of this software for any purpose. It is provided "as is"
|
||||
without any express or implied warranty.
|
||||
|
||||
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
||||
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
|
||||
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
|
||||
THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
********************************************************/
|
||||
|
||||
#ifdef HAVE_DIX_CONFIG_H
|
||||
#include <dix-config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <X11/X.h>
|
||||
#include <X11/Xproto.h>
|
||||
#include <X11/keysym.h>
|
||||
#include "inputstr.h"
|
||||
#include "scrnintstr.h"
|
||||
#include "windowstr.h"
|
||||
#include <xkbsrv.h>
|
||||
#include <X11/extensions/XI.h>
|
||||
|
||||
#ifdef PANORAMIX
|
||||
#include "panoramiX.h"
|
||||
#include "panoramiXsrv.h"
|
||||
#endif
|
||||
|
||||
#include "mipointer.h"
|
||||
#include "mipointrst.h"
|
||||
|
||||
void
|
||||
XkbDDXFakePointerMotion(unsigned flags,int x,int y)
|
||||
{
|
||||
int oldX,oldY;
|
||||
ScreenPtr pScreen, oldScreen;
|
||||
|
||||
GetSpritePosition(inputInfo.pointer, &oldX, &oldY);
|
||||
pScreen = oldScreen = GetSpriteWindow(inputInfo.pointer)->drawable.pScreen;
|
||||
|
||||
#ifdef PANORAMIX
|
||||
if (!noPanoramiXExtension) {
|
||||
BoxRec box;
|
||||
int i;
|
||||
|
||||
if(!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum],
|
||||
oldX, oldY, &box)) {
|
||||
FOR_NSCREENS(i) {
|
||||
if(i == pScreen->myNum)
|
||||
continue;
|
||||
if(POINT_IN_REGION(pScreen, &XineramaScreenRegions[i],
|
||||
oldX, oldY, &box)) {
|
||||
pScreen = screenInfo.screens[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
oldScreen = pScreen;
|
||||
|
||||
if (flags&XkbSA_MoveAbsoluteX)
|
||||
oldX= x;
|
||||
else oldX+= x;
|
||||
if (flags&XkbSA_MoveAbsoluteY)
|
||||
oldY= y;
|
||||
else oldY+= y;
|
||||
|
||||
if(!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum],
|
||||
oldX, oldY, &box)) {
|
||||
FOR_NSCREENS(i) {
|
||||
if(i == pScreen->myNum)
|
||||
continue;
|
||||
if(POINT_IN_REGION(pScreen, &XineramaScreenRegions[i],
|
||||
oldX, oldY, &box)) {
|
||||
pScreen = screenInfo.screens[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
oldX -= panoramiXdataPtr[pScreen->myNum].x;
|
||||
oldY -= panoramiXdataPtr[pScreen->myNum].y;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if (flags&XkbSA_MoveAbsoluteX)
|
||||
oldX= x;
|
||||
else oldX+= x;
|
||||
if (flags&XkbSA_MoveAbsoluteY)
|
||||
oldY= y;
|
||||
else oldY+= y;
|
||||
|
||||
#define GetScreenPrivate(s) ((miPointerScreenPtr)dixLookupPrivate(&(s)->devPrivates, miPointerScreenKey))
|
||||
(*(GetScreenPrivate(oldScreen))->screenFuncs->CursorOffScreen)
|
||||
(&pScreen, &oldX, &oldY);
|
||||
}
|
||||
|
||||
if (pScreen != oldScreen)
|
||||
NewCurrentScreen(inputInfo.pointer, pScreen, oldX, oldY);
|
||||
if (pScreen->SetCursorPosition)
|
||||
(*pScreen->SetCursorPosition)(inputInfo.pointer, pScreen, oldX, oldY, TRUE);
|
||||
}
|
|
@ -40,11 +40,15 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include <xkbsrv.h>
|
||||
#include "xkb.h"
|
||||
#include <ctype.h>
|
||||
#include "mi.h"
|
||||
#define EXTENSION_EVENT_BASE 64
|
||||
|
||||
static int xkbDevicePrivateKeyIndex;
|
||||
DevPrivateKey xkbDevicePrivateKey = &xkbDevicePrivateKeyIndex;
|
||||
|
||||
static void XkbFakeDeviceButton(DeviceIntPtr dev,Bool press,int button);
|
||||
static void XkbFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y);
|
||||
|
||||
void
|
||||
xkbUnwrapProc(DeviceIntPtr device, DeviceHandleProc proc,
|
||||
pointer data)
|
||||
|
@ -479,7 +483,7 @@ int dx,dy;
|
|||
dx= xkbi->mouseKeysDX;
|
||||
dy= xkbi->mouseKeysDY;
|
||||
}
|
||||
XkbDDXFakePointerMotion(xkbi->mouseKeysFlags,dx,dy);
|
||||
XkbFakePointerMotion(xkbi->device, xkbi->mouseKeysFlags,dx,dy);
|
||||
return xkbi->desc->ctrls->mk_interval;
|
||||
}
|
||||
|
||||
|
@ -507,7 +511,7 @@ Bool accel;
|
|||
accel= ((pAction->ptr.flags&XkbSA_NoAcceleration)==0);
|
||||
x= XkbPtrActionX(&pAction->ptr);
|
||||
y= XkbPtrActionY(&pAction->ptr);
|
||||
XkbDDXFakePointerMotion(pAction->ptr.flags,x,y);
|
||||
XkbFakePointerMotion(xkbi->device, pAction->ptr.flags,x,y);
|
||||
AccessXCancelRepeatKey(xkbi,keycode);
|
||||
xkbi->mouseKeysAccel= accel&&
|
||||
(xkbi->desc->ctrls->enabled_ctrls&XkbMouseKeysAccelMask);
|
||||
|
@ -554,7 +558,7 @@ _XkbFilterPointerBtn( XkbSrvInfoPtr xkbi,
|
|||
((pAction->btn.flags&XkbSA_LockNoLock)==0)) {
|
||||
xkbi->lockedPtrButtons|= (1<<button);
|
||||
AccessXCancelRepeatKey(xkbi,keycode);
|
||||
XkbDDXFakeDeviceButton(xkbi->device, 1, button);
|
||||
XkbFakeDeviceButton(xkbi->device, 1, button);
|
||||
filter->upAction.type= XkbSA_NoAction;
|
||||
}
|
||||
break;
|
||||
|
@ -565,12 +569,12 @@ _XkbFilterPointerBtn( XkbSrvInfoPtr xkbi,
|
|||
if (pAction->btn.count>0) {
|
||||
nClicks= pAction->btn.count;
|
||||
for (i=0;i<nClicks;i++) {
|
||||
XkbDDXFakeDeviceButton(xkbi->device, 1, button);
|
||||
XkbDDXFakeDeviceButton(xkbi->device, 0, button);
|
||||
XkbFakeDeviceButton(xkbi->device, 1, button);
|
||||
XkbFakeDeviceButton(xkbi->device, 0, button);
|
||||
}
|
||||
filter->upAction.type= XkbSA_NoAction;
|
||||
}
|
||||
else XkbDDXFakeDeviceButton(xkbi->device, 1, button);
|
||||
else XkbFakeDeviceButton(xkbi->device, 1, button);
|
||||
}
|
||||
break;
|
||||
case XkbSA_SetPtrDflt:
|
||||
|
@ -626,7 +630,7 @@ _XkbFilterPointerBtn( XkbSrvInfoPtr xkbi,
|
|||
}
|
||||
xkbi->lockedPtrButtons&= ~(1<<button);
|
||||
case XkbSA_PtrBtn:
|
||||
XkbDDXFakeDeviceButton(xkbi->device, 0, button);
|
||||
XkbFakeDeviceButton(xkbi->device, 0, button);
|
||||
break;
|
||||
}
|
||||
filter->active = 0;
|
||||
|
@ -964,7 +968,7 @@ int button;
|
|||
if ((pAction->devbtn.flags&XkbSA_LockNoLock)||
|
||||
BitIsOn(dev->button->down, button))
|
||||
return 0;
|
||||
XkbDDXFakeDeviceButton(dev,TRUE,button);
|
||||
XkbFakeDeviceButton(dev,TRUE,button);
|
||||
filter->upAction.type= XkbSA_NoAction;
|
||||
break;
|
||||
case XkbSA_DeviceBtn:
|
||||
|
@ -972,12 +976,12 @@ int button;
|
|||
int nClicks,i;
|
||||
nClicks= pAction->btn.count;
|
||||
for (i=0;i<nClicks;i++) {
|
||||
XkbDDXFakeDeviceButton(dev,TRUE,button);
|
||||
XkbDDXFakeDeviceButton(dev,FALSE,button);
|
||||
XkbFakeDeviceButton(dev,TRUE,button);
|
||||
XkbFakeDeviceButton(dev,FALSE,button);
|
||||
}
|
||||
filter->upAction.type= XkbSA_NoAction;
|
||||
}
|
||||
else XkbDDXFakeDeviceButton(dev,TRUE,button);
|
||||
else XkbFakeDeviceButton(dev,TRUE,button);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -996,10 +1000,10 @@ int button;
|
|||
if ((filter->upAction.devbtn.flags&XkbSA_LockNoUnlock)||
|
||||
!BitIsOn(dev->button->down, button))
|
||||
return 0;
|
||||
XkbDDXFakeDeviceButton(dev,FALSE,button);
|
||||
XkbFakeDeviceButton(dev,FALSE,button);
|
||||
break;
|
||||
case XkbSA_DeviceBtn:
|
||||
XkbDDXFakeDeviceButton(dev,FALSE,button);
|
||||
XkbFakeDeviceButton(dev,FALSE,button);
|
||||
break;
|
||||
}
|
||||
filter->active = 0;
|
||||
|
@ -1316,3 +1320,70 @@ xkbStateNotify sn;
|
|||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
XkbFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y)
|
||||
{
|
||||
EventListPtr events;
|
||||
int nevents, i;
|
||||
DeviceIntPtr ptr;
|
||||
int gpe_flags = 0;
|
||||
|
||||
if (!dev->u.master)
|
||||
ptr = dev;
|
||||
else
|
||||
ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
|
||||
|
||||
if (flags & XkbSA_MoveAbsoluteX || flags & XkbSA_MoveAbsoluteY)
|
||||
gpe_flags = POINTER_ABSOLUTE;
|
||||
else
|
||||
gpe_flags = POINTER_RELATIVE;
|
||||
|
||||
events = InitEventList(GetMaximumEventsNum());
|
||||
OsBlockSignals();
|
||||
nevents = GetPointerEvents(events, ptr,
|
||||
MotionNotify, 0,
|
||||
gpe_flags, 0, 2, (int[]){x, y});
|
||||
OsReleaseSignals();
|
||||
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
|
||||
|
||||
FreeEventList(events, GetMaximumEventsNum());
|
||||
}
|
||||
|
||||
static void
|
||||
XkbFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
|
||||
{
|
||||
EventListPtr events;
|
||||
int nevents, i;
|
||||
DeviceIntPtr ptr;
|
||||
|
||||
/* If dev is a slave device, and the SD is attached, do nothing. If we'd
|
||||
* post through the attached master pointer we'd get duplicate events.
|
||||
*
|
||||
* if dev is a master keyboard, post through the XTEST device
|
||||
*
|
||||
* if dev is a floating slave, post through the device itself.
|
||||
*/
|
||||
|
||||
if (IsMaster(dev))
|
||||
ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
|
||||
else if (!dev->u.master)
|
||||
ptr = dev;
|
||||
else
|
||||
return;
|
||||
|
||||
events = InitEventList(GetMaximumEventsNum());
|
||||
OsBlockSignals();
|
||||
nevents = GetPointerEvents(events, ptr,
|
||||
press ? ButtonPress : ButtonRelease, button,
|
||||
0 /* flags */, 0 /* first */,
|
||||
0 /* num_val */, NULL);
|
||||
OsReleaseSignals();
|
||||
|
||||
|
||||
for (i = 0; i < nevents; i++)
|
||||
mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
|
||||
|
||||
FreeEventList(events, GetMaximumEventsNum());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user