Merge branch 'master' into xi2
Conflicts: Xi/chdevhier.c include/input.h
This commit is contained in:
commit
057fc9a4f8
15
Xext/xtest.c
15
Xext/xtest.c
|
@ -54,6 +54,7 @@
|
|||
|
||||
extern int DeviceValuator;
|
||||
extern int DeviceMotionNotify;
|
||||
extern DevPrivateKey XTstDevicePrivateKey;
|
||||
|
||||
#ifdef PANORAMIX
|
||||
#include "panoramiX.h"
|
||||
|
@ -160,6 +161,7 @@ ProcXTestFakeInput(ClientPtr client)
|
|||
int i;
|
||||
int base = 0;
|
||||
int flags = 0;
|
||||
DeviceIntPtr xtstdevice;
|
||||
|
||||
nev = (stuff->length << 2) - sizeof(xReq);
|
||||
if ((nev % sizeof(xEvent)) || !nev)
|
||||
|
@ -268,6 +270,8 @@ ProcXTestFakeInput(ClientPtr client)
|
|||
|
||||
} else
|
||||
{
|
||||
DeviceIntPtr it;
|
||||
|
||||
if (nev != 1)
|
||||
return BadLength;
|
||||
switch (type)
|
||||
|
@ -294,8 +298,14 @@ ProcXTestFakeInput(ClientPtr client)
|
|||
return BadValue;
|
||||
}
|
||||
|
||||
if (dev->u.lastSlave)
|
||||
dev = dev->u.lastSlave;
|
||||
/* When faking core events through XTest, we always fake through the
|
||||
* virtual test device.
|
||||
*/
|
||||
for(it = inputInfo.devices; it ; it = it->next )
|
||||
if( !it->isMaster && it->u.master == dev &&
|
||||
dixLookupPrivate(&it->devPrivates, XTstDevicePrivateKey ))
|
||||
break;
|
||||
dev= it;
|
||||
}
|
||||
|
||||
/* If the event has a time set, wait for it to pass */
|
||||
|
@ -403,6 +413,7 @@ ProcXTestFakeInput(ClientPtr client)
|
|||
for (i = 0; i < nevents; i++)
|
||||
mieqProcessDeviceEvent(dev, (events+i)->event, NULL);
|
||||
|
||||
miPointerUpdateSprite(dev);
|
||||
return client->noClientException;
|
||||
}
|
||||
|
||||
|
|
111
Xi/chdevhier.c
111
Xi/chdevhier.c
|
@ -54,6 +54,8 @@
|
|||
|
||||
#include "chdevhier.h"
|
||||
|
||||
extern DevPrivateKey XTstDevicePrivateKey;
|
||||
|
||||
/**
|
||||
* Send the current state of the device hierarchy to all clients.
|
||||
*/
|
||||
|
@ -119,7 +121,7 @@ int SProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
int
|
||||
ProcXIChangeDeviceHierarchy(ClientPtr client)
|
||||
{
|
||||
DeviceIntPtr ptr, keybd;
|
||||
DeviceIntPtr ptr, keybd, xtstptr, xtstkeybd;
|
||||
xXIAnyHierarchyChangeInfo *any;
|
||||
int required_len = sizeof(xXIChangeDeviceHierarchyReq);
|
||||
char n;
|
||||
|
@ -154,7 +156,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
strncpy(name, (char*)&c[1], c->name_len);
|
||||
|
||||
|
||||
rc = AllocMasterDevice(client, name, &ptr, &keybd);
|
||||
rc = AllocDevicePair(client, name, &ptr, &keybd, TRUE);
|
||||
if (rc != Success)
|
||||
{
|
||||
xfree(name);
|
||||
|
@ -164,14 +166,33 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
if (!c->send_core)
|
||||
ptr->coreEvents = keybd->coreEvents = FALSE;
|
||||
|
||||
/* Allocate virtual slave devices for xtest events */
|
||||
rc = AllocXtstDevice(client, name, &xtstptr, &xtstkeybd);
|
||||
if (rc != Success)
|
||||
{
|
||||
|
||||
xfree(name);
|
||||
goto unwind;
|
||||
}
|
||||
|
||||
ActivateDevice(ptr);
|
||||
ActivateDevice(keybd);
|
||||
ActivateDevice(xtstptr);
|
||||
ActivateDevice(xtstkeybd);
|
||||
|
||||
if (c->enable)
|
||||
{
|
||||
EnableDevice(ptr);
|
||||
EnableDevice(keybd);
|
||||
EnableDevice(xtstptr);
|
||||
EnableDevice(xtstkeybd);
|
||||
}
|
||||
|
||||
/* Attach the XTest virtual devices to the newly
|
||||
created master device */
|
||||
AttachDevice(NULL, xtstptr, ptr);
|
||||
AttachDevice(NULL, xtstkeybd, keybd);
|
||||
|
||||
xfree(name);
|
||||
flags |= HF_MasterAdded;
|
||||
}
|
||||
|
@ -179,6 +200,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
case CH_RemoveMasterDevice:
|
||||
{
|
||||
xXIRemoveMasterInfo* r = (xXIRemoveMasterInfo*)any;
|
||||
DeviceIntPtr xtstdevice;
|
||||
|
||||
if (r->return_mode != AttachToMaster &&
|
||||
r->return_mode != Floating)
|
||||
|
@ -204,7 +226,17 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
goto unwind;
|
||||
}
|
||||
|
||||
/* disable keyboards first */
|
||||
for(xtstdevice = inputInfo.devices; xtstdevice ; xtstdevice = xtstdevice->next )
|
||||
if( !xtstdevice->isMaster && xtstdevice->u.master == ptr &&
|
||||
dixLookupPrivate(&xtstdevice->devPrivates, XTstDevicePrivateKey ))
|
||||
break;
|
||||
|
||||
rc = dixLookupDevice(&xtstptr, xtstdevice->id, client,
|
||||
DixDestroyAccess);
|
||||
if (rc != Success)
|
||||
goto unwind;
|
||||
|
||||
/* find keyboards to destroy */
|
||||
if (IsPointerDevice(ptr))
|
||||
{
|
||||
rc = dixLookupDevice(&keybd,
|
||||
|
@ -213,6 +245,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
DixDestroyAccess);
|
||||
if (rc != Success)
|
||||
goto unwind;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -223,8 +256,47 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
DixDestroyAccess);
|
||||
if (rc != Success)
|
||||
goto unwind;
|
||||
|
||||
}
|
||||
|
||||
/* handle xtst pointer / keyboard slave devices */
|
||||
if ( IsPointerDevice(xtstptr))
|
||||
{
|
||||
/* Search the matching keyboard */
|
||||
for(xtstdevice = inputInfo.devices; xtstdevice ; xtstdevice = xtstdevice->next )
|
||||
if( !xtstdevice->isMaster &&
|
||||
xtstdevice->u.master == keybd &&
|
||||
IsKeyboardDevice(xtstdevice) &&
|
||||
dixLookupPrivate(&xtstdevice->devPrivates, XTstDevicePrivateKey ))
|
||||
break;
|
||||
|
||||
rc = dixLookupDevice(&xtstkeybd,
|
||||
xtstdevice->id,
|
||||
client,
|
||||
DixDestroyAccess);
|
||||
|
||||
if (rc != Success)
|
||||
goto unwind;
|
||||
}
|
||||
else
|
||||
{
|
||||
xtstkeybd = xtstptr;
|
||||
/* Search the matching pointer */
|
||||
for(xtstdevice = inputInfo.devices; xtstdevice ; xtstdevice = xtstdevice->next )
|
||||
if( !xtstdevice->isMaster &&
|
||||
xtstdevice->u.master == ptr &&
|
||||
IsPointerDevice(xtstdevice) &&
|
||||
dixLookupPrivate(&xtstdevice->devPrivates, XTstDevicePrivateKey )
|
||||
)
|
||||
break;
|
||||
rc = dixLookupDevice(&xtstptr,
|
||||
xtstdevice->id,
|
||||
client,
|
||||
DixDestroyAccess);
|
||||
|
||||
if (rc != Success)
|
||||
goto unwind;
|
||||
}
|
||||
|
||||
/* Disabling sends the devices floating, reattach them if
|
||||
* desired. */
|
||||
|
@ -274,9 +346,18 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
/* can't disable until we removed pairing */
|
||||
keybd->spriteInfo->paired = NULL;
|
||||
ptr->spriteInfo->paired = NULL;
|
||||
xtstptr->spriteInfo->paired = NULL;
|
||||
xtstkeybd->spriteInfo->paired = NULL;
|
||||
|
||||
/* disable the remove the devices, xtst devices must be done first
|
||||
else the sprites they rely on will be destroyed */
|
||||
DisableDevice(xtstptr);
|
||||
DisableDevice(xtstkeybd);
|
||||
DisableDevice(keybd);
|
||||
DisableDevice(ptr);
|
||||
|
||||
RemoveDevice(xtstptr);
|
||||
RemoveDevice(xtstkeybd);
|
||||
RemoveDevice(keybd);
|
||||
RemoveDevice(ptr);
|
||||
flags |= HF_MasterRemoved;
|
||||
|
@ -285,6 +366,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
case CH_DetachSlave:
|
||||
{
|
||||
xXIDetachSlaveInfo* c = (xXIDetachSlaveInfo*)any;
|
||||
DeviceIntPtr *xtstdevice;
|
||||
|
||||
rc = dixLookupDevice(&ptr, c->deviceid, client,
|
||||
DixWriteAccess);
|
||||
|
@ -298,6 +380,17 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
goto unwind;
|
||||
}
|
||||
|
||||
xtstdevice = dixLookupPrivate( &ptr->devPrivates,
|
||||
XTstDevicePrivateKey );
|
||||
|
||||
/* Don't allow changes to Xtst Devices, these are fixed */
|
||||
if( xtstdevice )
|
||||
{
|
||||
client->errorValue = c->deviceid;
|
||||
rc = BadDevice;
|
||||
goto unwind;
|
||||
}
|
||||
|
||||
AttachDevice(client, ptr, NULL);
|
||||
flags |= HF_SlaveDetached;
|
||||
}
|
||||
|
@ -306,6 +399,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
{
|
||||
xXIAttachSlaveInfo* c = (xXIAttachSlaveInfo*)any;
|
||||
DeviceIntPtr newmaster;
|
||||
DeviceIntPtr *xtstdevice;
|
||||
|
||||
rc = dixLookupDevice(&ptr, c->deviceid, client,
|
||||
DixWriteAccess);
|
||||
|
@ -319,6 +413,17 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
|
|||
goto unwind;
|
||||
}
|
||||
|
||||
xtstdevice = dixLookupPrivate( &ptr->devPrivates,
|
||||
XTstDevicePrivateKey );
|
||||
|
||||
/* Don't allow changes to Xtst Devices, these are fixed */
|
||||
if( xtstdevice )
|
||||
{
|
||||
client->errorValue = c->deviceid;
|
||||
rc = BadDevice;
|
||||
goto unwind;
|
||||
}
|
||||
|
||||
rc = dixLookupDevice(&newmaster, c->new_master,
|
||||
client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
|
|
|
@ -90,9 +90,24 @@ SOFTWARE.
|
|||
|
||||
static int CoreDevicePrivateKeyIndex;
|
||||
DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKeyIndex;
|
||||
/* Used to sture classes currently not in use by an MD */
|
||||
/* Used to store classes currently not in use by an MD */
|
||||
static int UnusedClassesPrivateKeyIndex;
|
||||
DevPrivateKey UnusedClassesPrivateKey = &UnusedClassesPrivateKeyIndex;
|
||||
/* Used to store if a device is an XTest Virtual device */
|
||||
static int XTstDevicePrivateKeyIndex;
|
||||
DevPrivateKey XTstDevicePrivateKey = &XTstDevicePrivateKeyIndex;
|
||||
|
||||
/**
|
||||
* vxtstpointer
|
||||
* is the virtual pointer for XTest. It is the first slave
|
||||
* device of the VCP.
|
||||
* vxtstkeyboard
|
||||
* is the virtual keyboard for XTest. It is the first slave
|
||||
* device of the VCK
|
||||
*
|
||||
* Neither of these devices can be deleted.
|
||||
*/
|
||||
DeviceIntPtr vxtstpointer, vxtstkeyboard;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -549,9 +564,9 @@ CorePointerProc(DeviceIntPtr pDev, int what)
|
|||
void
|
||||
InitCoreDevices(void)
|
||||
{
|
||||
if (AllocMasterDevice(serverClient, "Virtual core",
|
||||
&inputInfo.pointer,
|
||||
&inputInfo.keyboard) != Success)
|
||||
if (AllocDevicePair(serverClient, "Virtual core",
|
||||
&inputInfo.pointer, &inputInfo.keyboard,
|
||||
TRUE) != Success)
|
||||
FatalError("Failed to allocate core devices");
|
||||
|
||||
if (ActivateDevice(inputInfo.pointer) != Success ||
|
||||
|
@ -560,6 +575,25 @@ InitCoreDevices(void)
|
|||
if (!EnableDevice(inputInfo.pointer) ||
|
||||
!EnableDevice(inputInfo.keyboard))
|
||||
FatalError("Failed to enable core devices.");
|
||||
|
||||
/*
|
||||
Allocate an virtual slave device for xtest events, this
|
||||
is a slave device to inputInfo master devices
|
||||
*/
|
||||
if(AllocXtstDevice(serverClient, "Virtual core",
|
||||
&vxtstpointer,
|
||||
&vxtstkeyboard) != Success)
|
||||
FatalError("Failed to allocate XTst devices");
|
||||
|
||||
if (ActivateDevice(vxtstpointer) != Success ||
|
||||
ActivateDevice(vxtstkeyboard) != Success)
|
||||
FatalError("Failed to activate xtst core devices.");
|
||||
if (!EnableDevice(vxtstpointer) ||
|
||||
!EnableDevice(vxtstkeyboard))
|
||||
FatalError("Failed to enable xtst core devices.");
|
||||
|
||||
AttachDevice(NULL, vxtstpointer, inputInfo.pointer);
|
||||
AttachDevice(NULL, vxtstkeyboard, inputInfo.keyboard);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2273,12 +2307,16 @@ GetPairedDevice(DeviceIntPtr dev)
|
|||
|
||||
|
||||
/**
|
||||
* Create a new master device (== one pointer, one keyboard device).
|
||||
* Create a new device pair (== one pointer, one keyboard device).
|
||||
* Only allocates the devices, you will need to call ActivateDevice() and
|
||||
* EnableDevice() manually.
|
||||
* Either a master or a slave device can be created depending on
|
||||
* the value for master.
|
||||
*/
|
||||
int
|
||||
AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr* keybd)
|
||||
AllocDevicePair (ClientPtr client, char* name,
|
||||
DeviceIntPtr* ptr, DeviceIntPtr* keybd,
|
||||
Bool master)
|
||||
{
|
||||
DeviceIntPtr pointer;
|
||||
DeviceIntPtr keyboard;
|
||||
|
@ -2302,7 +2340,7 @@ AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr*
|
|||
pointer->spriteInfo->spriteOwner = TRUE;
|
||||
|
||||
pointer->u.lastSlave = NULL;
|
||||
pointer->isMaster = TRUE;
|
||||
pointer->isMaster = master;
|
||||
|
||||
keyboard = AddInputDevice(client, CoreKeyboardProc, TRUE);
|
||||
if (!keyboard)
|
||||
|
@ -2324,7 +2362,7 @@ AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr*
|
|||
keyboard->spriteInfo->spriteOwner = FALSE;
|
||||
|
||||
keyboard->u.lastSlave = NULL;
|
||||
keyboard->isMaster = TRUE;
|
||||
keyboard->isMaster = master;
|
||||
|
||||
|
||||
/* The ClassesRec stores the device classes currently not used. */
|
||||
|
@ -2338,3 +2376,31 @@ AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr*
|
|||
|
||||
return Success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate a device pair that is initialised as a slave
|
||||
* device with properties that identify the devices as belonging
|
||||
* to XTest subsystem.
|
||||
* This only creates the pair, Activate/Enable Device
|
||||
* still need to be called.
|
||||
*/
|
||||
int AllocXtstDevice (ClientPtr client, char* name,
|
||||
DeviceIntPtr* ptr, DeviceIntPtr* keybd)
|
||||
{
|
||||
int retval;
|
||||
int len = strlen(name);
|
||||
char *xtstname = xcalloc(len + 6, 1 );
|
||||
|
||||
strncpy( xtstname, name, len);
|
||||
strncat( xtstname, " Xtst", 5 );
|
||||
|
||||
retval = AllocDevicePair( client, xtstname, ptr, keybd, FALSE);
|
||||
if ( retval == Success ){
|
||||
dixSetPrivate(&((*ptr)->devPrivates), XTstDevicePrivateKey, (void *)True );
|
||||
dixSetPrivate(&((*keybd)->devPrivates), XTstDevicePrivateKey,(void *)True);
|
||||
}
|
||||
|
||||
xfree( xtstname );
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -296,6 +296,13 @@ R021 RANDR:SetCrtcConfig
|
|||
R022 RANDR:GetCrtcGammaSize
|
||||
R023 RANDR:GetCrtcGamma
|
||||
R024 RANDR:SetCrtcGamma
|
||||
R025 RANDR:GetScreenResourcesCurrent
|
||||
R026 RANDR:SetCrtcTransform
|
||||
R027 RANDR:GetCrtcTransform
|
||||
R028 RANDR:GetPanning
|
||||
R029 RANDR:SetPanning
|
||||
R030 RANDR:SetOutputPrimary
|
||||
R031 RANDR:GetOutputPrimary
|
||||
V000 RANDR:ScreenChangeNotify
|
||||
V001 RANDR:Notify
|
||||
E000 RANDR:BadRROutput
|
||||
|
@ -937,6 +944,10 @@ R032 XInputExtension:DeviceBell
|
|||
R033 XInputExtension:SetDeviceValuators
|
||||
R034 XInputExtension:GetDeviceControl
|
||||
R035 XInputExtension:ChangeDeviceControl
|
||||
R036 XInputExtension:ListDeviceProperties
|
||||
R037 XInputExtension:ChangeDeviceProperty
|
||||
R038 XInputExtension:DeleteDeviceProperty
|
||||
R039 XInputExtension:GetDeviceProperty
|
||||
V000 XInputExtension:DeviceValuator
|
||||
V001 XInputExtension:DeviceKeyPress
|
||||
V002 XInputExtension:DeviceKeyRelease
|
||||
|
@ -953,6 +964,7 @@ V012 XInputExtension:ChangeDeviceNotify
|
|||
V013 XInputExtension:DeviceKeystateNotify
|
||||
V014 XInputExtension:DeviceButtonstateNotify
|
||||
V015 XInputExtension:DevicePresenceNotify
|
||||
V016 XInputExtension:DevicePropertyNotify
|
||||
E000 XInputExtension:BadDevice
|
||||
E001 XInputExtension:BadEvent
|
||||
E002 XInputExtension:BadMode
|
||||
|
|
11
exa/exa.c
11
exa/exa.c
|
@ -289,7 +289,7 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
|
|||
return NullPixmap;
|
||||
|
||||
swap(pExaScr, pScreen, CreatePixmap);
|
||||
if (!pExaScr->info->CreatePixmap) {
|
||||
if (!pExaScr->info->CreatePixmap && !pExaScr->info->CreatePixmap2) {
|
||||
pPixmap = pScreen->CreatePixmap (pScreen, w, h, depth, usage_hint);
|
||||
} else {
|
||||
driver_alloc = 1;
|
||||
|
@ -324,7 +324,10 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
|
|||
*/
|
||||
pPixmap->devPrivate.ptr = NULL;
|
||||
|
||||
pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, datasize, 0);
|
||||
if (pExaScr->info->CreatePixmap2)
|
||||
pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp);
|
||||
else
|
||||
pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, datasize, 0);
|
||||
if (!pExaPixmap->driverPriv) {
|
||||
swap(pExaScr, pScreen, DestroyPixmap);
|
||||
pScreen->DestroyPixmap (pPixmap);
|
||||
|
@ -1261,7 +1264,7 @@ exaDriverInit (ScreenPtr pScreen,
|
|||
wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap);
|
||||
|
||||
wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader);
|
||||
if (!pExaScr->info->CreatePixmap) {
|
||||
if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
|
||||
LogMessage(X_INFO, "EXA(%d): Offscreen pixmap area of %lu bytes\n",
|
||||
pScreen->myNum,
|
||||
pExaScr->info->memorySize - pExaScr->info->offScreenBase);
|
||||
|
@ -1274,7 +1277,7 @@ exaDriverInit (ScreenPtr pScreen,
|
|||
else
|
||||
LogMessage(X_INFO, "EXA(%d): No offscreen pixmaps\n", pScreen->myNum);
|
||||
|
||||
if (!pExaScr->info->CreatePixmap) {
|
||||
if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
|
||||
DBG_PIXMAP(("============== %ld < %ld\n", pExaScr->info->offScreenBase,
|
||||
pExaScr->info->memorySize));
|
||||
if (pExaScr->info->offScreenBase < pExaScr->info->memorySize) {
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include "fb.h"
|
||||
|
||||
#define EXA_VERSION_MAJOR 2
|
||||
#define EXA_VERSION_MINOR 4
|
||||
#define EXA_VERSION_MINOR 5
|
||||
#define EXA_VERSION_RELEASE 0
|
||||
|
||||
typedef struct _ExaOffscreenArea ExaOffscreenArea;
|
||||
|
@ -704,6 +704,8 @@ typedef struct _ExaDriver {
|
|||
int depth, int bitsPerPixel, int devKind,
|
||||
pointer pPixData);
|
||||
|
||||
void *(*CreatePixmap2)(ScreenPtr pScreen, int width, int height,
|
||||
int depth, int usage_hint, int bitsPerPixel);
|
||||
/** @} */
|
||||
} ExaDriverRec, *ExaDriverPtr;
|
||||
|
||||
|
|
|
@ -371,6 +371,9 @@ exaEnableDisableFBAccess (int index, Bool enable)
|
|||
ScreenPtr pScreen = screenInfo.screens[index];
|
||||
ExaScreenPriv (pScreen);
|
||||
|
||||
if (pExaScr->info->flags & EXA_HANDLES_PIXMAPS)
|
||||
return;
|
||||
|
||||
if (!enable && pExaScr->disableFbCount++ == 0) {
|
||||
if (pExaScr->info->exa_minor < 1)
|
||||
ExaOffscreenSwapOut (pScreen);
|
||||
|
|
|
@ -1086,7 +1086,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
|||
if (!DRIGetDeviceInfo(pScreen, &hFB, &junk,
|
||||
&framebuffer.size, &framebuffer.stride,
|
||||
&framebuffer.dev_priv_size, &framebuffer.dev_priv)) {
|
||||
LogMessage(X_ERROR, "AIGLX error: XF86DRIGetDeviceInfo failed");
|
||||
LogMessage(X_ERROR, "AIGLX error: XF86DRIGetDeviceInfo failed\n");
|
||||
goto handle_error;
|
||||
}
|
||||
|
||||
|
@ -1097,7 +1097,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
|||
status = drmMap(fd, hFB, framebuffer.size,
|
||||
(drmAddressPtr)&framebuffer.base);
|
||||
if (status != 0) {
|
||||
LogMessage(X_ERROR, "AIGLX error: drmMap of framebuffer failed (%s)",
|
||||
LogMessage(X_ERROR, "AIGLX error: drmMap of framebuffer failed (%s)\n",
|
||||
strerror(-status));
|
||||
goto handle_error;
|
||||
}
|
||||
|
@ -1107,7 +1107,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
|||
*/
|
||||
status = drmMap(fd, hSAREA, SAREA_MAX, &pSAREA);
|
||||
if (status != 0) {
|
||||
LogMessage(X_ERROR, "AIGLX error: drmMap of SAREA failed (%s)",
|
||||
LogMessage(X_ERROR, "AIGLX error: drmMap of SAREA failed (%s)\n",
|
||||
strerror(-status));
|
||||
goto handle_error;
|
||||
}
|
||||
|
@ -1125,7 +1125,8 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
|||
screen);
|
||||
|
||||
if (screen->driScreen == NULL) {
|
||||
LogMessage(X_ERROR, "AIGLX error: Calling driver entry point failed");
|
||||
LogMessage(X_ERROR,
|
||||
"AIGLX error: Calling driver entry point failed\n");
|
||||
goto handle_error;
|
||||
}
|
||||
|
||||
|
|
|
@ -443,9 +443,17 @@ dri2GetBuffers(__DRIdrawable *driDrawable,
|
|||
return private->buffers;
|
||||
}
|
||||
|
||||
static void
|
||||
dri2FlushFrontBuffer(__DRIdrawable *driDrawable, void *loaderPrivate)
|
||||
{
|
||||
(void) driDrawable;
|
||||
__glXDRIdrawableWaitGL((__GLXdrawable *) loaderPrivate);
|
||||
}
|
||||
|
||||
static const __DRIdri2LoaderExtension loaderExtension = {
|
||||
{ __DRI_DRI2_LOADER, __DRI_DRI2_LOADER_VERSION },
|
||||
dri2GetBuffers,
|
||||
dri2FlushFrontBuffer,
|
||||
};
|
||||
|
||||
static const __DRIextension *loader_extensions[] = {
|
||||
|
|
|
@ -499,7 +499,8 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
|
|||
screen);
|
||||
|
||||
if (screen->driScreen == NULL) {
|
||||
LogMessage(X_ERROR, "AIGLX error: Calling driver entry point failed");
|
||||
LogMessage(X_ERROR,
|
||||
"AIGLX error: Calling driver entry point failed\n");
|
||||
goto handle_error;
|
||||
}
|
||||
|
||||
|
|
|
@ -79,8 +79,8 @@ ProcDRI2QueryVersion(ClientPtr client)
|
|||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
rep.majorVersion = DRI2_MAJOR;
|
||||
rep.minorVersion = DRI2_MINOR;
|
||||
rep.majorVersion = 1;
|
||||
rep.minorVersion = 0;
|
||||
|
||||
if (client->swapped) {
|
||||
swaps(&rep.sequenceNumber, n);
|
||||
|
|
|
@ -170,6 +170,11 @@ static Bool quirk_detailed_use_maximum_size (int scrnIndex, xf86MonPtr DDC)
|
|||
(DDC->vendor.prod_id == 0 || DDC->vendor.prod_id == 0x2a00))
|
||||
return TRUE;
|
||||
|
||||
/* Bug #21324: Iiyama Vision Master 450 */
|
||||
if (memcmp (DDC->vendor.name, "IVM", 4) == 0 &&
|
||||
DDC->vendor.prod_id == 6400)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -191,8 +191,10 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
|
|||
size_t i;
|
||||
DEBUG_LOG("state=%d, _x_active=%d, \n", state, _x_active)
|
||||
if (state) {
|
||||
if(bgMouseLocationUpdated)
|
||||
if(bgMouseLocationUpdated) {
|
||||
DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, bgMouseLocation.x, bgMouseLocation.y, 0.0, 0.0, 0.0);
|
||||
bgMouseLocationUpdated = FALSE;
|
||||
}
|
||||
DarwinSendDDXEvent(kXquartzActivate, 0);
|
||||
|
||||
if (!_x_active) {
|
||||
|
@ -1064,32 +1066,34 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
|
|||
}
|
||||
|
||||
if(!quartzServerVisible && noTestExtensions) {
|
||||
if(ev_button == 0) {
|
||||
#if defined(XPLUGIN_VERSION) && XPLUGIN_VERSION > 0
|
||||
/* Older libXplugin (Tiger/"Stock" Leopard) aren't thread safe, so we can't call xp_find_window from the Appkit thread */
|
||||
xp_window_id wid = 0;
|
||||
xp_error e;
|
||||
xp_window_id wid = 0;
|
||||
xp_error e;
|
||||
|
||||
/* Sigh. Need to check that we're really over one of
|
||||
* our windows. (We need to receive pointer events while
|
||||
* not in the foreground, but we don't want to receive them
|
||||
* when another window is over us or we might show a tooltip)
|
||||
*/
|
||||
/* Sigh. Need to check that we're really over one of
|
||||
* our windows. (We need to receive pointer events while
|
||||
* not in the foreground, but we don't want to receive them
|
||||
* when another window is over us or we might show a tooltip)
|
||||
*/
|
||||
|
||||
e = xp_find_window(location.x, location.y, 0, &wid);
|
||||
e = xp_find_window(location.x, location.y, 0, &wid);
|
||||
|
||||
if (e == XP_Success && wid == 0)
|
||||
if (e != XP_Success || (e == XP_Success && wid == 0))
|
||||
#endif
|
||||
{
|
||||
bgMouseLocation = location;
|
||||
bgMouseLocationUpdated = TRUE;
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
bgMouseLocationUpdated = FALSE;
|
||||
{
|
||||
bgMouseLocation = location;
|
||||
bgMouseLocationUpdated = TRUE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(bgMouseLocationUpdated) {
|
||||
if(!(ev_type == MotionNotify && ev_button == 0)) {
|
||||
DarwinSendPointerEvents(pDev, MotionNotify, 0, location.x,
|
||||
location.y, pressure, tilt.x, tilt.y);
|
||||
}
|
||||
bgMouseLocationUpdated = FALSE;
|
||||
}
|
||||
|
||||
DarwinSendPointerEvents(pDev, ev_type, ev_button, location.x, location.y,
|
||||
|
@ -1122,6 +1126,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
|
|||
* first, since we aren't getting them on background mouse motion
|
||||
*/
|
||||
if(!quartzServerVisible && noTestExtensions) {
|
||||
bgMouseLocationUpdated = FALSE;
|
||||
DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, location.x,
|
||||
location.y, pressure, tilt.x, tilt.y);
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>nl</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>fr</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>de</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>it</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>ja</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>76</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>es</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>da</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>fi</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>ko</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>no</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>pl</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>pt</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>pt_PT</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>ru</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>sv</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>zh_CN</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>75.1</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LprojCompatibleVersion</key>
|
||||
<string>66.2</string>
|
||||
<key>LprojLocale</key>
|
||||
<string>zh_TW</string>
|
||||
<key>LprojRevisionLevel</key>
|
||||
<string>1</string>
|
||||
<key>LprojVersion</key>
|
||||
<string>73</string>
|
||||
</dict>
|
||||
</plist>
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -469,10 +469,11 @@ extern int AttachDevice(ClientPtr client,
|
|||
|
||||
extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd);
|
||||
|
||||
extern int AllocMasterDevice(ClientPtr client,
|
||||
extern int AllocDevicePair(ClientPtr client,
|
||||
char* name,
|
||||
DeviceIntPtr* ptr,
|
||||
DeviceIntPtr* keybd);
|
||||
DeviceIntPtr* keybd,
|
||||
Bool master);
|
||||
extern void DeepCopyDeviceClasses(DeviceIntPtr from,
|
||||
DeviceIntPtr to);
|
||||
|
||||
|
@ -481,6 +482,10 @@ extern int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
|
|||
KeyCode **modkeymap, int *max_keys_per_mod);
|
||||
extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map,
|
||||
int max_keys_per_mod);
|
||||
extern int AllocXtstDevice(ClientPtr client,
|
||||
char* name,
|
||||
DeviceIntPtr* ptr,
|
||||
DeviceIntPtr* keybd);
|
||||
|
||||
/* misc event helpers */
|
||||
extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event);
|
||||
|
|
|
@ -438,7 +438,7 @@ mieqProcessInputEvents(void)
|
|||
mieqProcessDeviceEvent(dev, event, screen);
|
||||
|
||||
/* Update the sprite now. Next event may be from different device. */
|
||||
if (event->u.any.type == ET_Motion && (master || dev->isMaster))
|
||||
if (event->u.any.type == ET_Motion && master)
|
||||
miPointerUpdateSprite(dev);
|
||||
|
||||
#ifdef XQUARTZ
|
||||
|
|
|
@ -594,6 +594,7 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet *rmlvo,
|
|||
InitFocusClassDeviceStruct(dev);
|
||||
|
||||
xkbi->kbdProc = ctrl_func;
|
||||
dev->kbdfeed->BellProc = bell_func;
|
||||
dev->kbdfeed->CtrlProc = XkbDDXKeybdCtrlProc;
|
||||
|
||||
dev->kbdfeed->ctrl = defaultKeyboardControl;
|
||||
|
|
Loading…
Reference in New Issue