summaryrefslogtreecommitdiff
path: root/xkb
diff options
context:
space:
mode:
Diffstat (limited to 'xkb')
-rw-r--r--xkb/ddxBeep.c2
-rw-r--r--xkb/ddxDevBtn.c2
-rw-r--r--xkb/ddxFakeBtn.c2
-rw-r--r--xkb/ddxFakeMtn.c8
-rw-r--r--xkb/ddxList.c6
-rw-r--r--xkb/ddxLoad.c20
-rw-r--r--xkb/xkb.c36
-rw-r--r--xkb/xkbAccessX.c11
-rw-r--r--xkb/xkbActions.c21
-rw-r--r--xkb/xkbEvents.c31
-rw-r--r--xkb/xkbInit.c15
-rw-r--r--xkb/xkbLEDs.c43
-rw-r--r--xkb/xkbPrKeyEv.c10
-rw-r--r--xkb/xkbSwap.c2
-rw-r--r--xkb/xkbUtils.c7
15 files changed, 131 insertions, 85 deletions
diff --git a/xkb/ddxBeep.c b/xkb/ddxBeep.c
index 2faed5818..74d868c0e 100644
--- a/xkb/ddxBeep.c
+++ b/xkb/ddxBeep.c
@@ -142,7 +142,7 @@ Atom name;
name= None;
switch (xkbInfo->beepType) {
default:
- ErrorF("Unknown beep type %d\n",xkbInfo->beepType);
+ ErrorF("[xkb] Unknown beep type %d\n",xkbInfo->beepType);
case _BEEP_NONE:
duration= 0;
break;
diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index 5313a1ec5..e812e0be6 100644
--- a/xkb/ddxDevBtn.c
+++ b/xkb/ddxDevBtn.c
@@ -60,7 +60,7 @@ int nAxes, i, count;
if (nAxes > 6)
nAxes = 6;
- GetSpritePosition(&x,&y);
+ GetSpritePosition(dev, &x,&y);
btn= (deviceKeyButtonPointer *) &events[0];
val= (deviceValuator *) &events[1];
if (press) btn->type= DeviceButtonPress;
diff --git a/xkb/ddxFakeBtn.c b/xkb/ddxFakeBtn.c
index 2dad54fea..f9dcbf79d 100644
--- a/xkb/ddxFakeBtn.c
+++ b/xkb/ddxFakeBtn.c
@@ -48,7 +48,7 @@ DevicePtr ptr;
if ((ptr = (DevicePtr)inputInfo.pointer)==NULL)
return;
- GetSpritePosition(&x,&y);
+ GetSpritePosition(inputInfo.pointer, &x,&y);
ev.u.u.type = event;
ev.u.u.detail = button;
ev.u.keyButtonPointer.time = GetTimeInMillis();
diff --git a/xkb/ddxFakeMtn.c b/xkb/ddxFakeMtn.c
index 320e0ca33..3f010f9ce 100644
--- a/xkb/ddxFakeMtn.c
+++ b/xkb/ddxFakeMtn.c
@@ -53,8 +53,8 @@ XkbDDXFakePointerMotion(unsigned flags,int x,int y)
int oldX,oldY;
ScreenPtr pScreen, oldScreen;
- GetSpritePosition(&oldX, &oldY);
- pScreen = oldScreen = GetSpriteWindow()->drawable.pScreen;
+ GetSpritePosition(inputInfo.pointer, &oldX, &oldY);
+ pScreen = oldScreen = GetSpriteWindow(inputInfo.pointer)->drawable.pScreen;
#ifdef PANORAMIX
if (!noPanoramiXExtension) {
@@ -113,7 +113,7 @@ ScreenPtr pScreen, oldScreen;
}
if (pScreen != oldScreen)
- NewCurrentScreen(pScreen, oldX, oldY);
+ NewCurrentScreen(inputInfo.pointer, pScreen, oldX, oldY);
if (pScreen->SetCursorPosition)
- (*pScreen->SetCursorPosition)(pScreen, oldX, oldY, TRUE);
+ (*pScreen->SetCursorPosition)(inputInfo.pointer, pScreen, oldX, oldY, TRUE);
}
diff --git a/xkb/ddxList.c b/xkb/ddxList.c
index 80e050524..ae3a7f7e0 100644
--- a/xkb/ddxList.c
+++ b/xkb/ddxList.c
@@ -192,9 +192,9 @@ char tmpname[PATH_MAX];
in= Popen(buf,"r");
#else
if (xkbDebugFlags)
- DebugF("xkbList executes: %s\n",buf);
+ DebugF("[xkb] xkbList executes: %s\n",buf);
if (System(buf) < 0)
- ErrorF("Could not invoke keymap compiler\n");
+ ErrorF("[xkb] Could not invoke keymap compiler\n");
else
in= fopen(tmpname, "r");
#endif
@@ -262,7 +262,7 @@ char tmpname[PATH_MAX];
fclose(in);
else if ((rval=Pclose(in))!=0) {
if (xkbDebugFlags)
- ErrorF("xkbcomp returned exit code %d\n",rval);
+ ErrorF("[xkb] xkbcomp returned exit code %d\n",rval);
}
#else
fclose(in);
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index d80ce62b8..ee64c3be7 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -126,11 +126,11 @@ Win32System(const char *cmdline)
0,
NULL ))
{
- ErrorF("Starting '%s' failed!\n", cmdline);
+ ErrorF("[xkb] Starting '%s' failed!\n", cmdline);
}
else
{
- ErrorF("Starting '%s' failed: %s", cmdline, (char *)buffer);
+ ErrorF("[xkb] Starting '%s' failed: %s", cmdline, (char *)buffer);
LocalFree(buffer);
}
@@ -197,7 +197,7 @@ char tmpname[PATH_MAX];
}
else {
if (strlen(names->keymap) > PATH_MAX - 1) {
- ErrorF("name of keymap (%s) exceeds max length\n", names->keymap);
+ ErrorF("[xkb] name of keymap (%s) exceeds max length\n", names->keymap);
return False;
}
strcpy(keymap,names->keymap);
@@ -252,7 +252,7 @@ char tmpname[PATH_MAX];
if (out!=NULL) {
#ifdef DEBUG
if (xkbDebugFlags) {
- ErrorF("XkbDDXCompileKeymapByNames compiling keymap:\n");
+ ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n");
XkbWriteXKBKeymapForNames(stderr,names,xkb,want,need);
}
#endif
@@ -264,7 +264,7 @@ char tmpname[PATH_MAX];
#endif
{
if (xkbDebugFlags)
- DebugF("xkb executes: %s\n",buf);
+ DebugF("[xkb] xkb executes: %s\n",buf);
if (nameRtrn) {
strncpy(nameRtrn,keymap,nameRtrnLen);
nameRtrn[nameRtrnLen-1]= '\0';
@@ -274,7 +274,7 @@ char tmpname[PATH_MAX];
return True;
}
else
- DebugF("Error compiling keymap (%s)\n",keymap);
+ DebugF("[xkb] Error compiling keymap (%s)\n",keymap);
#ifdef WIN32
/* remove the temporary file */
unlink(tmpname);
@@ -282,9 +282,9 @@ char tmpname[PATH_MAX];
}
else {
#ifndef WIN32
- DebugF("Could not invoke keymap compiler\n");
+ DebugF("[xkb] Could not invoke keymap compiler\n");
#else
- DebugF("Could not open file %s\n", tmpname);
+ DebugF("[xkb] Could not open file %s\n", tmpname);
#endif
}
if (nameRtrn)
@@ -354,7 +354,7 @@ unsigned missing;
}
else if (!XkbDDXCompileKeymapByNames(xkb,names,want,need,
nameRtrn,nameRtrnLen)){
- DebugF("Couldn't compile keymap file\n");
+ DebugF("[xkb] Couldn't compile keymap file\n");
return 0;
}
file= XkbDDXOpenConfigFile(nameRtrn,fileName,PATH_MAX);
@@ -370,7 +370,7 @@ unsigned missing;
return 0;
}
else if (xkbDebugFlags) {
- DebugF("Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined);
+ DebugF("[xkb] Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined);
}
fclose(file);
(void) unlink (fileName);
diff --git a/xkb/xkb.c b/xkb/xkb.c
index 07f57a73b..9b3d78e0d 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -175,7 +175,7 @@ ProcXkbUseExtension(ClientPtr client)
client->vMinor= stuff->wantedMinor;
}
else if (xkbDebugFlags&0x1) {
- ErrorF("Rejecting client %d (0x%lx) (wants %d.%02d, have %d.%02d)\n",
+ ErrorF("[xkb] Rejecting client %d (0x%lx) (wants %d.%02d, have %d.%02d)\n",
client->index,
(long)client->clientAsMask,
stuff->wantedMajor,stuff->wantedMinor,
@@ -339,7 +339,7 @@ ProcXkbSelectEvents(ClientPtr client)
}
}
if (dataLeft>2) {
- ErrorF("Extra data (%d bytes) after SelectEvents\n",dataLeft);
+ ErrorF("[xkb] Extra data (%d bytes) after SelectEvents\n",dataLeft);
return BadLength;
}
return client->noClientException;
@@ -1344,7 +1344,7 @@ char *desc,*start;
if ( rep->totalVModMapKeys>0 )
desc= XkbWriteVirtualModMap(xkb,rep,desc,client);
if ((desc-start)!=(len)) {
- ErrorF("BOGUS LENGTH in write keyboard desc, expected %d, got %ld\n",
+ ErrorF("[xkb] BOGUS LENGTH in write keyboard desc, expected %d, got %ld\n",
len, (unsigned long)(desc-start));
}
if (client->swapped) {
@@ -2379,7 +2379,7 @@ ProcXkbSetMap(ClientPtr client)
return BadValue;
}
if (((tmp-((char *)stuff))/4)!=stuff->length) {
- ErrorF("Internal error! Bad length in XkbSetMap (after check)\n");
+ ErrorF("[xkb] Internal error! Bad length in XkbSetMap (after check)\n");
client->errorValue = tmp-((char *)&stuff[1]);
return BadLength;
}
@@ -2430,7 +2430,7 @@ ProcXkbSetMap(ClientPtr client)
if (stuff->present&XkbVirtualModMapMask)
tmp= SetVirtualModMap(xkbi,stuff,(xkbVModMapWireDesc *)tmp,&change);
if (((tmp-((char *)stuff))/4)!=stuff->length) {
- ErrorF("Internal error! Bad length in XkbSetMap (after set)\n");
+ ErrorF("[xkb] Internal error! Bad length in XkbSetMap (after set)\n");
client->errorValue = tmp-((char *)&stuff[1]);
return BadLength;
}
@@ -2706,7 +2706,7 @@ ProcXkbSetCompatMap(ClientPtr client)
}
i= XkbPaddedSize((data-((char *)stuff)));
if ((i/4)!=stuff->length) {
- ErrorF("Internal length error on read in ProcXkbSetCompatMap\n");
+ ErrorF("[xkb] Internal length error on read in ProcXkbSetCompatMap\n");
return BadLength;
}
@@ -3413,7 +3413,7 @@ register int n;
}
if ((desc-start)!=(length)) {
- ErrorF("BOGUS LENGTH in write names, expected %d, got %ld\n",
+ ErrorF("[xkb] BOGUS LENGTH in write names, expected %d, got %ld\n",
length, (unsigned long)(desc-start));
}
WriteToClient(client, SIZEOF(xkbGetNamesReply), (char *)rep);
@@ -4104,9 +4104,9 @@ xkbDoodadWireDesc * doodadWire;
wire= XkbWriteCountedString(wire,doodad->logo.logo_name,swap);
break;
default:
- ErrorF("Unknown doodad type %d in XkbWriteGeomDoodads\n",
+ ErrorF("[xkb] Unknown doodad type %d in XkbWriteGeomDoodads\n",
doodad->any.type);
- ErrorF("Ignored\n");
+ ErrorF("[xkb] Ignored\n");
break;
}
}
@@ -4334,7 +4334,7 @@ XkbSendGeometry( ClientPtr client,
if ( rep->nKeyAliases>0 )
desc = XkbWriteGeomKeyAliases(desc,geom,client->swapped);
if ((desc-start)!=(len)) {
- ErrorF("BOGUS LENGTH in XkbSendGeometry, expected %d, got %ld\n",
+ ErrorF("[xkb] BOGUS LENGTH in XkbSendGeometry, expected %d, got %ld\n",
len, (unsigned long)(desc-start));
}
}
@@ -5778,8 +5778,8 @@ char * str;
return status;
}
else if (length!=0) {
- ErrorF("Internal Error! BadLength in ProcXkbGetDeviceInfo\n");
- ErrorF(" Wrote %d fewer bytes than expected\n",length);
+ ErrorF("[xkb] Internal Error! BadLength in ProcXkbGetDeviceInfo\n");
+ ErrorF("[xkb] Wrote %d fewer bytes than expected\n",length);
return BadLength;
}
if (stuff->wanted&(~supported)) {
@@ -6079,25 +6079,25 @@ int rc;
newCtrls= xkbDebugCtrls&(~stuff->affectCtrls);
newCtrls|= (stuff->ctrls&stuff->affectCtrls);
if (xkbDebugFlags || newFlags || stuff->msgLength) {
- ErrorF("XkbDebug: Setting debug flags to 0x%lx\n",(long)newFlags);
+ ErrorF("[xkb] XkbDebug: Setting debug flags to 0x%lx\n",(long)newFlags);
if (newCtrls!=xkbDebugCtrls)
- ErrorF("XkbDebug: Setting debug controls to 0x%lx\n",(long)newCtrls);
+ ErrorF("[xkb] XkbDebug: Setting debug controls to 0x%lx\n",(long)newCtrls);
}
extraLength= (stuff->length<<2)-sz_xkbSetDebuggingFlagsReq;
if (stuff->msgLength>0) {
char *msg;
if (extraLength<XkbPaddedSize(stuff->msgLength)) {
- ErrorF("XkbDebug: msgLength= %d, length= %ld (should be %d)\n",
+ ErrorF("[xkb] XkbDebug: msgLength= %d, length= %ld (should be %d)\n",
stuff->msgLength,(long)extraLength,
XkbPaddedSize(stuff->msgLength));
return BadLength;
}
msg= (char *)&stuff[1];
if (msg[stuff->msgLength-1]!='\0') {
- ErrorF("XkbDebug: message not null-terminated\n");
+ ErrorF("[xkb] XkbDebug: message not null-terminated\n");
return BadValue;
}
- ErrorF("XkbDebug: %s\n",msg);
+ ErrorF("[xkb] XkbDebug: %s\n",msg);
}
xkbDebugFlags = newFlags;
xkbDebugCtrls = newCtrls;
@@ -6194,7 +6194,7 @@ XkbClientGone(pointer data,XID id)
DevicePtr pXDev = (DevicePtr)data;
if (!XkbRemoveResourceClient(pXDev,id)) {
- ErrorF("Internal Error! bad RemoveResourceClient in XkbClientGone\n");
+ ErrorF("[xkb] Internal Error! bad RemoveResourceClient in XkbClientGone\n");
}
return 1;
}
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index 75b8c5a27..28107d05d 100644
--- a/xkb/xkbAccessX.c
+++ b/xkb/xkbAccessX.c
@@ -131,7 +131,7 @@ xEvent xE;
xE.u.u.detail = keyCode;
xE.u.keyButtonPointer.time = GetTimeInMillis();
if (xkbDebugFlags&0x8) {
- DebugF("AXKE: Key %d %s\n",keyCode,(xE.u.u.type==KeyPress?"down":"up"));
+ DebugF("[xkb] AXKE: Key %d %s\n",keyCode,(xE.u.u.type==KeyPress?"down":"up"));
}
if (_XkbIsPressEvent(type))
@@ -316,9 +316,8 @@ BOOL is_core;
is_core = (dev == inputInfo.keyboard);
key = xkbi->repeatKey;
- AccessXKeyboardEvent(dev, is_core ? KeyRelease : DeviceKeyRelease, key,
- True);
- AccessXKeyboardEvent(dev, is_core ? KeyPress : DeviceKeyPress, key, True);
+ AccessXKeyboardEvent(dev, DeviceKeyRelease, key, True);
+ AccessXKeyboardEvent(dev, DeviceKeyPress, key, True);
return xkbi->desc->ctrls->repeat_interval;
}
@@ -685,12 +684,14 @@ Bool ignoreKeyEvent = FALSE;
/* don't accidentally turn on StickyKeys or the Keyboard Response Group.*/
/* */
/************************************************************************/
+extern int xkbDevicePrivateIndex;
+extern void xkbUnwrapProc(DeviceIntPtr, DeviceHandleProc, pointer);
void
ProcessPointerEvent( register xEvent * xE,
register DeviceIntPtr mouse,
int count)
{
-DeviceIntPtr dev = inputInfo.keyboard;
+DeviceIntPtr dev = GetPairedDevice(mouse);
XkbSrvInfoPtr xkbi = dev->key->xkbInfo;
unsigned changed = 0;
ProcessInputProc backupproc;
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index f226b6bda..41b4e4c8e 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -857,7 +857,7 @@ ProcessInputProc backupproc;
if ((filter->keycode!=0)&&(filter->keycode!=keycode))
return 1;
- GetSpritePosition(&x,&y);
+ GetSpritePosition(inputInfo.pointer, &x,&y);
ev.u.keyButtonPointer.time = GetTimeInMillis();
ev.u.keyButtonPointer.rootX = x;
ev.u.keyButtonPointer.rootY = y;
@@ -902,10 +902,6 @@ ProcessInputProc backupproc;
realMods = xkbi->device->key->modifierMap[ev.u.u.detail];
xkbi->device->key->modifierMap[ev.u.u.detail] = 0;
- /* XXX: Bad! Since the switch to XI devices xkbi->device will be the
- * XI device. Sending a core event through ProcessOtherEvent will
- * cause trouble. Somebody should fix this.
- */
UNWRAP_PROCESS_INPUT_PROC(xkbi->device,xkbPrivPtr, backupproc);
xkbi->device->public.processInputProc(&ev,xkbi->device,1);
COND_WRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr,
@@ -948,10 +944,6 @@ ProcessInputProc backupproc;
realMods = xkbi->device->key->modifierMap[ev.u.u.detail];
xkbi->device->key->modifierMap[ev.u.u.detail] = 0;
- /* XXX: Bad! Since the switch to XI devices xkbi->device will be the
- * XI device. Sending a core event through ProcessOtherEvent will
- * cause trouble. Somebody should fix this.
- */
UNWRAP_PROCESS_INPUT_PROC(xkbi->device,xkbPrivPtr, backupproc);
xkbi->device->public.processInputProc(&ev,xkbi->device,1);
COND_WRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr,
@@ -1281,14 +1273,17 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(dev);
}
if (sendEvent) {
+ DeviceIntPtr tmpdev;
if (keyEvent) {
realMods = keyc->modifierMap[key];
keyc->modifierMap[key] = 0;
- }
+ tmpdev = dev;
+ } else
+ tmpdev = GetPairedDevice(dev);
- UNWRAP_PROCESS_INPUT_PROC(dev,xkbPrivPtr, backupproc);
- dev->public.processInputProc(xE,dev,count);
- COND_WRAP_PROCESS_INPUT_PROC(dev, xkbPrivPtr,
+ UNWRAP_PROCESS_INPUT_PROC(tmpdev,xkbPrivPtr, backupproc);
+ dev->public.processInputProc(xE,tmpdev,count);
+ COND_WRAP_PROCESS_INPUT_PROC(tmpdev, xkbPrivPtr,
backupproc,xkbUnwrapProc);
if (keyEvent)
keyc->modifierMap[key] = realMods;
diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c
index 49725d065..6389b906f 100644
--- a/xkb/xkbEvents.c
+++ b/xkb/xkbEvents.c
@@ -817,15 +817,15 @@ XkbSrvInfoPtr xkbi;
((xE[0].u.u.type==KeyPress)||(xE[0].u.u.type==KeyRelease)||
(xE[0].u.u.type==DeviceKeyPress)||
(xE[0].u.u.type == DeviceKeyRelease))) {
- DebugF("XKbFilterWriteEvents:\n");
- DebugF(" Event state= 0x%04x\n",xE[0].u.keyButtonPointer.state);
- DebugF(" XkbLastRepeatEvent!=xE (0x%p!=0x%p) %s\n",
+ DebugF("[xkb] XKbFilterWriteEvents:\n");
+ DebugF("[xkb] Event state= 0x%04x\n",xE[0].u.keyButtonPointer.state);
+ DebugF("[xkb] XkbLastRepeatEvent!=xE (0x%p!=0x%p) %s\n",
XkbLastRepeatEvent,xE,
((XkbLastRepeatEvent!=(pointer)xE)?"True":"False"));
- DebugF(" (xkbClientEventsFlags&XWDA)==0 (0x%x) %s\n",
+ DebugF("[xkb] (xkbClientEventsFlags&XWDA)==0 (0x%x) %s\n",
pClient->xkbClientFlags,
(_XkbWantsDetectableAutoRepeat(pClient)?"True":"False"));
- DebugF(" !IsRelease(%d) %s\n",xE[0].u.u.type,
+ DebugF("[xkb] !IsRelease(%d) %s\n",xE[0].u.u.type,
(!_XkbIsReleaseEvent(xE[0].u.u.type))?"True":"False");
}
if ( (XkbLastRepeatEvent==(pointer)xE) &&
@@ -833,7 +833,8 @@ XkbSrvInfoPtr xkbi;
(_XkbIsReleaseEvent(xE[0].u.u.type)) ) {
return False;
}
- if ((pXDev->grab != NullGrab) && pXDev->fromPassiveGrab &&
+ if ((pXDev->deviceGrab.grab != NullGrab)
+ && pXDev->deviceGrab.fromPassiveGrab &&
((xE[0].u.u.type==KeyPress)||(xE[0].u.u.type==KeyRelease)||
(xE[0].u.u.type==DeviceKeyPress)||
(xE[0].u.u.type == DeviceKeyRelease))) {
@@ -868,7 +869,7 @@ XkbSrvInfoPtr xkbi;
* when the mouse is released, the server does not behave properly.
* Faking a release of the button here solves the problem.
*/
- DebugF("Faking release of button %d\n", xE[0].u.u.detail);
+ DebugF("[xkb] Faking release of button %d\n", xE[0].u.u.detail);
XkbDDXFakePointerButton(ButtonRelease, xE[0].u.u.detail);
}
}
@@ -882,11 +883,11 @@ XkbSrvInfoPtr xkbi;
(xE[i].u.u.type==DeviceKeyPress)||
(xE[i].u.u.type == DeviceKeyRelease))) {
XkbStatePtr s= &xkbi->state;
- DebugF("XKbFilterWriteEvents (non-XKB):\n");
- DebugF("event= 0x%04x\n",xE[i].u.keyButtonPointer.state);
- DebugF("lookup= 0x%02x, grab= 0x%02x\n",s->lookup_mods,
+ DebugF("[xkb] XKbFilterWriteEvents (non-XKB):\n");
+ DebugF("[xkb] event= 0x%04x\n",xE[i].u.keyButtonPointer.state);
+ DebugF("[xkb] lookup= 0x%02x, grab= 0x%02x\n",s->lookup_mods,
s->grab_mods);
- DebugF("compat lookup= 0x%02x, grab= 0x%02x\n",
+ DebugF("[xkb] compat lookup= 0x%02x, grab= 0x%02x\n",
s->compat_lookup_mods,
s->compat_grab_mods);
}
@@ -913,17 +914,21 @@ XkbSrvInfoPtr xkbi;
new|= xkbi->state.compat_lookup_mods;
else new|= xkbi->state.compat_grab_mods;
kbp->state= new;
+ } else if ((type==DeviceEnterNotify)||(type==DeviceLeaveNotify)) {
+ deviceEnterNotify *del = (deviceEnterNotify*)&xE[i];
+ del->state&=0x1F00;
+ del->state|= xkbi->state.compat_grab_mods;
}
button_mask = 1 << xE[i].u.u.detail;
if (type == ButtonPress &&
((xE[i].u.keyButtonPointer.state >> 7) & button_mask) == button_mask &&
(xkbi->lockedPtrButtons & button_mask) == button_mask) {
- DebugF("Faking release of button %d\n", xE[i].u.u.detail);
+ DebugF("[xkb] Faking release of button %d\n", xE[i].u.u.detail);
XkbDDXFakePointerButton(ButtonRelease, xE[i].u.u.detail);
} else if (type == DeviceButtonPress &&
((((deviceKeyButtonPointer*)&xE[i])->state >> 7) & button_mask) == button_mask &&
(xkbi->lockedPtrButtons & button_mask) == button_mask) {
- DebugF("Faking release of button %d\n", ((deviceKeyButtonPointer*)&xE[i])->state);
+ DebugF("[xkb] Faking release of button %d\n", ((deviceKeyButtonPointer*)&xE[i])->state);
XkbDDXFakePointerButton(DeviceButtonRelease, ((deviceKeyButtonPointer*)&xE[i])->state);
}
}
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index 3b47396e5..0d5d15ef3 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -180,12 +180,12 @@ char * pval;
name= MakeAtom(_XKB_RF_NAMES_PROP_ATOM,strlen(_XKB_RF_NAMES_PROP_ATOM),1);
if (name==None) {
- ErrorF("Atom error: %s not created\n",_XKB_RF_NAMES_PROP_ATOM);
+ ErrorF("[xkb] Atom error: %s not created\n",_XKB_RF_NAMES_PROP_ATOM);
return True;
}
pval= (char*) xalloc(len);
if (!pval) {
- ErrorF("Allocation error: %s proprerty not created\n",
+ ErrorF("[xkb] Allocation error: %s proprerty not created\n",
_XKB_RF_NAMES_PROP_ATOM);
return True;
}
@@ -219,7 +219,7 @@ char * pval;
}
pval[out++]= '\0';
if (out!=len) {
- ErrorF("Internal Error! bad size (%d!=%d) for _XKB_RULES_NAMES\n",
+ ErrorF("[xkb] Internal Error! bad size (%d!=%d) for _XKB_RULES_NAMES\n",
out,len);
}
dixChangeWindowProperty(serverClient, WindowTable[0], name, XA_STRING, 8,
@@ -500,7 +500,7 @@ XkbEventCauseRec cause;
/* the other here, but for now just complain */
/* can't just update the core range without */
/* reallocating the KeySymsRec (pain) */
- ErrorF("Internal Error!! XKB and core keymap have different range\n");
+ ErrorF("[xkb] Internal Error!! XKB and core keymap have different range\n");
}
if (XkbAllocClientMap(xkb,XkbAllClientInfoMask,0)!=Success)
FatalError("Couldn't allocate client map in XkbInitDevice\n");
@@ -726,7 +726,10 @@ XkbSrvLedInfoPtr sli;
if (pXDev && pXDev->key && pXDev->key->xkbInfo && pXDev->kbdfeed) {
xkbi= pXDev->key->xkbInfo;
xkb= xkbi->desc;
- if (pXDev->kbdfeed) {
+ /* If we come from DeepCopyDeviceClasses, the CtrlProc was already set
+ * to XkbDDXKeybdCtrlProc, overwriting it leads to happy recursion.
+ */
+ if (pXDev->kbdfeed && pXDev->kbdfeed->CtrlProc != XkbDDXKeybdCtrlProc) {
xkbi->kbdProc= pXDev->kbdfeed->CtrlProc;
pXDev->kbdfeed->CtrlProc= XkbDDXKeybdCtrlProc;
}
@@ -743,7 +746,7 @@ XkbSrvLedInfoPtr sli;
sli= XkbFindSrvLedInfo(pXDev,XkbDfltXIClass,XkbDfltXIId,0);
if (sli && xkbi)
XkbCheckIndicatorMaps(xkbi->device,sli,XkbAllIndicatorsMask);
- else DebugF("No indicator feedback in XkbFinishInit (shouldn't happen)!\n");
+ else DebugF("[xkb] No indicator feedback in XkbFinishInit (shouldn't happen)!\n");
return softRepeat;
}
diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c
index 55ce12aad..2b8efcef2 100644
--- a/xkb/xkbLEDs.c
+++ b/xkb/xkbLEDs.c
@@ -447,7 +447,7 @@ XkbIndicatorMapPtr map;
XkbDescPtr xkb;
if ((sli->flags&XkbSLI_HasOwnState)==0)
- dev= inputInfo.keyboard;
+ return;
sli->usesBase&= ~which;
sli->usesLatched&= ~which;
@@ -462,7 +462,7 @@ XkbDescPtr xkb;
if (which&bit) {
CARD8 what;
- if (!XkbIM_InUse(map))
+ if (!map || !XkbIM_InUse(map))
continue;
sli->mapsPresent|= bit;
@@ -615,6 +615,45 @@ XkbFreeSrvLedInfo(XkbSrvLedInfoPtr sli)
return;
}
+/*
+ * XkbSrvLedInfoPtr
+ * XkbCopySrvLedInfo(dev,src,kf,lf)
+ *
+ * Takes the given XkbSrvLedInfoPtr and duplicates it. A deep copy is made,
+ * thus the new copy behaves like the original one and can be freed with
+ * XkbFreeSrvLedInfo.
+ */
+XkbSrvLedInfoPtr
+XkbCopySrvLedInfo( DeviceIntPtr from,
+ XkbSrvLedInfoPtr src,
+ KbdFeedbackPtr kf,
+ LedFeedbackPtr lf)
+{
+ XkbSrvLedInfoPtr sli_new;
+
+ if (!src)
+ goto finish;
+
+ sli_new = _XkbTypedCalloc(1, XkbSrvLedInfoRec);
+ if (!sli_new)
+ goto finish;
+
+ memcpy(sli_new, src, sizeof(XkbSrvLedInfoRec));
+ if (sli_new->class == KbdFeedbackClass)
+ sli_new->fb.kf = kf;
+ else
+ sli_new->fb.lf = lf;
+
+ if (sli_new->flags & XkbSLI_IsDefault) {
+ sli_new->names= _XkbTypedCalloc(XkbNumIndicators,Atom);
+ sli_new->maps= _XkbTypedCalloc(XkbNumIndicators,XkbIndicatorMapRec);
+ } /* else sli_new->names/maps is pointing to
+ dev->key->xkbInfo->desc->names->indicators;
+ dev->key->xkbInfo->desc->names->indicators; */
+
+finish:
+ return sli_new;
+}
/***====================================================================***/
diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c
index 69c218c8c..74d02c608 100644
--- a/xkb/xkbPrKeyEv.c
+++ b/xkb/xkbPrKeyEv.c
@@ -57,7 +57,7 @@ int xiEvent;
key= xE->u.u.detail;
xiEvent= (xE->u.u.type & EXTENSION_EVENT_BASE);
if (xkbDebugFlags&0x8) {
- DebugF("XkbPKE: Key %d %s\n",key,(xE->u.u.type==KeyPress?"down":"up"));
+ DebugF("[xkb] XkbPKE: Key %d %s\n",key,(xE->u.u.type==KeyPress?"down":"up"));
}
if ( (xkbi->repeatKey==key) && (xE->u.u.type==KeyRelease) &&
@@ -160,7 +160,7 @@ int xiEvent;
}
rg->currentDown= key;
}
- else ErrorF("InternalError! Illegal radio group %d\n",ndx);
+ else ErrorF("[xkb] InternalError! Illegal radio group %d\n",ndx);
break;
case XkbKB_Overlay1: case XkbKB_Overlay2:
{
@@ -180,7 +180,7 @@ int xiEvent;
}
break;
default:
- ErrorF("unknown key behavior 0x%04x\n",behavior.type);
+ ErrorF("[xkb] unknown key behavior 0x%04x\n",behavior.type);
break;
}
}
@@ -223,8 +223,8 @@ ProcessKeyboardEvent(xEvent *xE,DeviceIntPtr keybd,int count)
AccessXFilterPressEvent(xE, keybd, count);
else if (is_release)
AccessXFilterReleaseEvent(xE, keybd, count);
- }
- else {
+
+ } else {
XkbProcessKeyboardEvent(xE, keybd, count);
}
diff --git a/xkb/xkbSwap.c b/xkb/xkbSwap.c
index 50b08f46c..1a513b35c 100644
--- a/xkb/xkbSwap.c
+++ b/xkb/xkbSwap.c
@@ -129,7 +129,7 @@ register int n;
dataLeft-= (size*2);
}
if (dataLeft>2) {
- ErrorF("Extra data (%d bytes) after SelectEvents\n",dataLeft);
+ ErrorF("[xkb] Extra data (%d bytes) after SelectEvents\n",dataLeft);
return BadLength;
}
}
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index 8339cef00..19a171a86 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -948,7 +948,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
xkbMapNotify mn;
xkbNewKeyboardNotify nkn;
- if (!src || !dst || src == dst)
+ if (src == dst)
+ return TRUE;
+
+ if (!src || !dst)
return FALSE;
/* client map */
@@ -2042,7 +2045,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
if (sendNotifies) {
if (!pDev) {
- ErrorF("XkbCopyKeymap: asked for notifies, but can't find device!\n");
+ ErrorF("[xkb] XkbCopyKeymap: asked for notifies, but can't find device!\n");
}
else {
/* send NewKeyboardNotify if the keycode range changed, else