Date: Tue, 11 Mar 2008 07:11:48 +0900 (JST) From: Tsurutani Naoki <turutani@scphys.kyoto-u.ac.jp> To: FreeBSD-gnats-submit@FreeBSD.org Cc: turutani@scphys.kyoto-u.ac.jp Subject: ports/121580: xmodmap does not work in startup file Message-ID: <200803102211.m2AMBmdZ064641@polymer3.scphys.kyoto-u.ac.jp> Resent-Message-ID: <200803102220.m2AMK19s053123@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 121580 >Category: ports >Synopsis: xmodmap does not work in startup file >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Mar 10 22:20:00 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Tsurutani Naoki >Release: FreeBSD 6.3-PRERELEASE i386 >Organization: >Environment: System: FreeBSD polymer3.scphys.kyoto-u.ac.jp 6.3-PRERELEASE FreeBSD 6.3-PRERELEASE #11: Wed Jan 16 16:30:07 JST 2008 turutani@polymer3.scphys.kyoto-u.ac.jp:/usr/local/work/usr/obj/usr/src/sys/POLYMER i386 >Description: xmodmap does not work in .xinitrc. Once X server started, xmodmap works fine if xmodmap has not been done in .xinitrc etc. >How-To-Repeat: always start X server with "startx". this does not happen using xdm. >Fix: add the following patch to ports/x11-servers/xorg-server/files/. this fix is already incorporated into xorg-server source tree. --- Xi/exevents.c.orig 2007-08-24 04:04:52.000000000 +0900 +++ Xi/exevents.c 2008-03-10 10:32:31.000000000 +0900 @@ -73,6 +73,10 @@ #include "dixgrabs.h" /* CreateGrab() */ #include "scrnintstr.h" +#ifdef XKB +#include "xkbsrv.h" +#endif + #define WID(w) ((w) ? ((w)->drawable.id) : 0) #define AllModifiersMask ( \ ShiftMask | LockMask | ControlMask | Mod1Mask | Mod2Mask | \ @@ -942,7 +946,7 @@ } void -SendDeviceMappingNotify(CARD8 request, +SendDeviceMappingNotify(ClientPtr client, CARD8 request, KeyCode firstKeyCode, CARD8 count, DeviceIntPtr dev) { xEvent event; @@ -957,6 +961,11 @@ ev->count = count; } +#ifdef XKB + if (request == MappingKeyboard || request == MappingModifier) + XkbApplyMappingChange(dev, request, firstKeyCode, count, client); +#endif + SendEventToAllWindows(dev, DeviceMappingNotifyMask, (xEvent *) ev, 1); } @@ -992,7 +1001,7 @@ keysyms.map = map; if (!SetKeySymsMap(&k->curKeySyms, &keysyms)) return BadAlloc; - SendDeviceMappingNotify(MappingKeyboard, firstKeyCode, keyCodes, dev); + SendDeviceMappingNotify(client, MappingKeyboard, firstKeyCode, keyCodes, dev); return client->noClientException; } --- Xi/setbmap.c.orig 2007-08-24 04:04:52.000000000 +0900 +++ Xi/setbmap.c 2008-03-10 10:33:08.000000000 +0900 @@ -134,7 +134,7 @@ } if (ret != MappingBusy) - SendDeviceMappingNotify(MappingPointer, 0, 0, dev); + SendDeviceMappingNotify(client, MappingPointer, 0, 0, dev); return Success; } --- Xi/setmmap.c.orig 2007-08-24 04:04:52.000000000 +0900 +++ Xi/setmmap.c 2008-03-10 10:33:38.000000000 +0900 @@ -122,7 +122,7 @@ if (ret == MappingSuccess || ret == MappingBusy || ret == MappingFailed) { rep.success = ret; if (ret == MappingSuccess) - SendDeviceMappingNotify(MappingModifier, 0, 0, dev); + SendDeviceMappingNotify(client, MappingModifier, 0, 0, dev); WriteReplyToClient(client, sizeof(xSetDeviceModifierMappingReply), &rep); } else { --- dix/devices.c.orig 2008-03-10 10:25:54.000000000 +0900 +++ dix/devices.c 2008-03-10 10:37:36.000000000 +0900 @@ -1369,6 +1369,7 @@ ProcSetModifierMapping(ClientPtr client) { xSetModifierMappingReply rep; + DeviceIntPtr dev; REQUEST(xSetModifierMappingReq); REQUEST_AT_LEAST_SIZE(xSetModifierMappingReq); @@ -1386,6 +1387,9 @@ /* FIXME: Send mapping notifies for all the extended devices as well. */ SendMappingNotify(MappingModifier, 0, 0, client); + for (dev = inputInfo.devices; dev; dev = dev->next) + if (dev->key && dev->coreEvents) + SendDeviceMappingNotify(client, MappingModifier, 0, 0, dev); WriteReplyToClient(client, sizeof(xSetModifierMappingReply), &rep); return client->noClientException; } @@ -1458,6 +1462,12 @@ /* FIXME: Send mapping notifies for all the extended devices as well. */ SendMappingNotify(MappingKeyboard, stuff->firstKeyCode, stuff->keyCodes, client); + for (pDev = inputInfo.devices; pDev; pDev = pDev->next) + if (pDev->key && pDev->coreEvents) + SendDeviceMappingNotify(client, MappingKeyboard, + stuff->firstKeyCode, stuff->keyCodes, + pDev); + return client->noClientException; } --- include/exevents.h.orig 2007-08-24 04:04:54.000000000 +0900 +++ include/exevents.h 2008-03-10 10:38:19.000000000 +0900 @@ -129,6 +129,7 @@ KeyClassPtr * /* k */); extern void SendDeviceMappingNotify( + ClientPtr /* client, */, CARD8 /* request, */, KeyCode /* firstKeyCode */, CARD8 /* count */, >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803102211.m2AMBmdZ064641>