diff options
Diffstat (limited to 'xorg-server')
-rw-r--r-- | xorg-server/Xi/xipassivegrab.c | 8 | ||||
-rwxr-xr-x[-rw-r--r--] | xorg-server/Xi/xiquerypointer.c | 17 | ||||
-rw-r--r-- | xorg-server/dix/enterleave.c | 5 | ||||
-rw-r--r-- | xorg-server/dix/eventconvert.c | 4 | ||||
-rw-r--r-- | xorg-server/dix/events.c | 8 | ||||
-rw-r--r-- | xorg-server/dix/getevents.c | 13 | ||||
-rw-r--r-- | xorg-server/hw/xfree86/os-support/linux/lnx_init.c | 33 | ||||
-rw-r--r-- | xorg-server/hw/xquartz/bundle/Info.plist.cpp | 2 | ||||
-rw-r--r-- | xorg-server/include/eventconvert.h | 2 | ||||
-rw-r--r-- | xorg-server/include/xkbsrv.h | 17 | ||||
-rw-r--r-- | xorg-server/test/xi2/protocol-eventconvert.c | 4 | ||||
-rw-r--r-- | xorg-server/xfixes/cursor.c | 4 | ||||
-rw-r--r-- | xorg-server/xkb/Makefile.am | 3 | ||||
-rw-r--r-- | xorg-server/xkb/ddxList.c | 302 | ||||
-rwxr-xr-x[-rw-r--r--] | xorg-server/xkb/xkb.c | 55 | ||||
-rw-r--r-- | xorg-server/xkeyboard-config/rules/base.xml.in | 6 | ||||
-rw-r--r-- | xorg-server/xkeyboard-config/symbols/us | 69 |
17 files changed, 151 insertions, 401 deletions
diff --git a/xorg-server/Xi/xipassivegrab.c b/xorg-server/Xi/xipassivegrab.c index 59cde7f17..b5b9e86c4 100644 --- a/xorg-server/Xi/xipassivegrab.c +++ b/xorg-server/Xi/xipassivegrab.c @@ -50,7 +50,7 @@ int SProcXIPassiveGrabDevice(ClientPtr client) { int i; - xXIModifierInfo *mods; + uint32_t *mods; REQUEST(xXIPassiveGrabDeviceReq); @@ -63,12 +63,10 @@ SProcXIPassiveGrabDevice(ClientPtr client) swaps(&stuff->mask_len); swaps(&stuff->num_modifiers); - mods = (xXIModifierInfo *) &stuff[1]; + mods = (uint32_t *) &stuff[1]; for (i = 0; i < stuff->num_modifiers; i++, mods++) { - swapl(&mods->base_mods); - swapl(&mods->latched_mods); - swapl(&mods->locked_mods); + swapl(mods); } return ProcXIPassiveGrabDevice(client); diff --git a/xorg-server/Xi/xiquerypointer.c b/xorg-server/Xi/xiquerypointer.c index 8c1876aa4..a87326181 100644..100755 --- a/xorg-server/Xi/xiquerypointer.c +++ b/xorg-server/Xi/xiquerypointer.c @@ -50,6 +50,7 @@ #include "panoramiXsrv.h" #endif +#include "inpututils.h" #include "xiquerypointer.h" /*********************************************************************** @@ -127,8 +128,8 @@ ProcXIQueryPointer(ClientPtr client) rep.sequenceNumber = client->sequence; rep.length = 6; rep.root = (GetCurrentRootWindow(pDev))->drawable.id; - rep.root_x = FP1616(pSprite->hot.x, 0); - rep.root_y = FP1616(pSprite->hot.y, 0); + rep.root_x = double_to_fp1616(pSprite->hot.x); + rep.root_y = double_to_fp1616(pSprite->hot.y); rep.child = None; if (kbd) { @@ -165,8 +166,8 @@ ProcXIQueryPointer(ClientPtr client) if (pSprite->hot.pScreen == pWin->drawable.pScreen) { rep.same_screen = xTrue; - rep.win_x = FP1616(pSprite->hot.x - pWin->drawable.x, 0); - rep.win_y = FP1616(pSprite->hot.y - pWin->drawable.y, 0); + rep.win_x = double_to_fp1616(pSprite->hot.x - pWin->drawable.x); + rep.win_y = double_to_fp1616(pSprite->hot.y - pWin->drawable.y); for (t = pSprite->win; t; t = t->parent) if (t->parent == pWin) { rep.child = t->drawable.id; @@ -181,11 +182,11 @@ ProcXIQueryPointer(ClientPtr client) #ifdef PANORAMIX if (!noPanoramiXExtension) { - rep.root_x += FP1616(screenInfo.screens[0]->x, 0); - rep.root_y += FP1616(screenInfo.screens[0]->y, 0); + rep.root_x += double_to_fp1616(screenInfo.screens[0]->x); + rep.root_y += double_to_fp1616(screenInfo.screens[0]->y); if (stuff->win == rep.root) { - rep.win_x += FP1616(screenInfo.screens[0]->x, 0); - rep.win_y += FP1616(screenInfo.screens[0]->y, 0); + rep.win_x += double_to_fp1616(screenInfo.screens[0]->x); + rep.win_y += double_to_fp1616(screenInfo.screens[0]->y); } } #endif diff --git a/xorg-server/dix/enterleave.c b/xorg-server/dix/enterleave.c index 765cfb0ea..a651c68b3 100644 --- a/xorg-server/dix/enterleave.c +++ b/xorg-server/dix/enterleave.c @@ -39,6 +39,7 @@ #include "enterleave.h" #include "eventconvert.h" #include "xkbsrv.h" +#include "inpututils.h" /** * @file @@ -799,8 +800,8 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail, xi2event->deviceid = dev->id; xi2event->sourceid = dev->id; /* a device doesn't change focus by itself */ xi2event->mode = mode; - xi2event->root_x = FP1616(mouse->spriteInfo->sprite->hot.x, 0); - xi2event->root_y = FP1616(mouse->spriteInfo->sprite->hot.y, 0); + xi2event->root_x = double_to_fp1616(mouse->spriteInfo->sprite->hot.x); + xi2event->root_y = double_to_fp1616(mouse->spriteInfo->sprite->hot.y); for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++) if (BitIsOn(mouse->button->down, i)) diff --git a/xorg-server/dix/eventconvert.c b/xorg-server/dix/eventconvert.c index b84e34eec..422092971 100644 --- a/xorg-server/dix/eventconvert.c +++ b/xorg-server/dix/eventconvert.c @@ -673,8 +673,8 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi) xde->valuators_len = vallen; xde->deviceid = ev->deviceid; xde->sourceid = ev->sourceid; - xde->root_x = FP1616(ev->root_x, ev->root_x_frac); - xde->root_y = FP1616(ev->root_y, ev->root_y_frac); + xde->root_x = double_to_fp1616(ev->root_x + ev->root_x_frac); + xde->root_y = double_to_fp1616(ev->root_y + ev->root_y_frac); if (ev->type == ET_TouchUpdate) xde->flags |= (ev->flags & TOUCH_PENDING_END) ? XITouchPendingEnd : 0; diff --git a/xorg-server/dix/events.c b/xorg-server/dix/events.c index 1475fe6a2..970c420d5 100644 --- a/xorg-server/dix/events.c +++ b/xorg-server/dix/events.c @@ -2447,8 +2447,8 @@ FixUpEventFromWindow(SpritePtr pSprite, } if (pSprite->hot.pScreen == pWin->drawable.pScreen) { - event->event_x = event->root_x - FP1616(pWin->drawable.x, 0); - event->event_y = event->root_y - FP1616(pWin->drawable.y, 0); + event->event_x = event->root_x - double_to_fp1616(pWin->drawable.x); + event->event_y = event->root_y - double_to_fp1616(pWin->drawable.y); event->child = child; } else { @@ -4579,8 +4579,8 @@ DeviceEnterLeaveEvent(DeviceIntPtr mouse, event->deviceid = mouse->id; event->sourceid = sourceid; event->mode = mode; - event->root_x = FP1616(mouse->spriteInfo->sprite->hot.x, 0); - event->root_y = FP1616(mouse->spriteInfo->sprite->hot.y, 0); + event->root_x = double_to_fp1616(mouse->spriteInfo->sprite->hot.x); + event->root_y = double_to_fp1616(mouse->spriteInfo->sprite->hot.y); for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++) if (BitIsOn(mouse->button->down, i)) diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c index d4badc03d..e7699cd40 100644 --- a/xorg-server/dix/getevents.c +++ b/xorg-server/dix/getevents.c @@ -179,17 +179,6 @@ key_autorepeats(DeviceIntPtr pDev, int key_code) } static void -init_event(DeviceIntPtr dev, DeviceEvent *event, Time ms) -{ - memset(event, 0, sizeof(DeviceEvent)); - event->header = ET_Internal; - event->length = sizeof(DeviceEvent); - event->time = ms; - event->deviceid = dev->id; - event->sourceid = dev->id; -} - -static void init_touch_ownership(DeviceIntPtr dev, TouchOwnershipEvent *event, Time ms) { memset(event, 0, sizeof(TouchOwnershipEvent)); @@ -1935,7 +1924,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid, event = &events->device_event; num_events++; - init_event(dev, event, ms); + init_device_event(event, dev, ms); /* if submitted for master device, get the sourceid from there */ if (flags & TOUCH_CLIENT_ID) { event->sourceid = touchpoint.dix_ti->sourceid; diff --git a/xorg-server/hw/xfree86/os-support/linux/lnx_init.c b/xorg-server/hw/xfree86/os-support/linux/lnx_init.c index 68c296b0f..bcb039f3f 100644 --- a/xorg-server/hw/xfree86/os-support/linux/lnx_init.c +++ b/xorg-server/hw/xfree86/os-support/linux/lnx_init.c @@ -38,6 +38,14 @@ #include <sys/stat.h> +#ifndef K_OFF +#define K_OFF 0x4 +#endif + +#ifndef KDSKBMUTE +#define KDSKBMUTE 0x4B51 +#endif + static Bool KeepTty = FALSE; static int activeVT = -1; @@ -213,19 +221,23 @@ xf86OpenConsole(void) tcgetattr(xf86Info.consoleFd, &tty_attr); SYSCALL(ioctl(xf86Info.consoleFd, KDGKBMODE, &tty_mode)); -#ifdef K_OFF - /* disable kernel special keys and buffering */ - SYSCALL(ret = ioctl(xf86Info.consoleFd, KDSKBMODE, K_OFF)); + /* disable kernel special keys and buffering, new style */ + SYSCALL(ret = ioctl(xf86Info.consoleFd, KDSKBMUTE, 1)); if (ret < 0) -#endif { - SYSCALL(ret = ioctl(xf86Info.consoleFd, KDSKBMODE, K_RAW)); + /* disable kernel special keys and buffering, old style */ + SYSCALL(ret = ioctl(xf86Info.consoleFd, KDSKBMODE, K_OFF)); if (ret < 0) - FatalError("xf86OpenConsole: KDSKBMODE K_RAW failed %s\n", - strerror(errno)); - - /* need to keep the buffer clean, else the kernel gets angry */ - xf86SetConsoleHandler(drain_console, NULL); + { + /* fine, just disable special keys */ + SYSCALL(ret = ioctl(xf86Info.consoleFd, KDSKBMODE, K_RAW)); + if (ret < 0) + FatalError("xf86OpenConsole: KDSKBMODE K_RAW failed %s\n", + strerror(errno)); + + /* ... and drain events, else the kernel gets angry */ + xf86SetConsoleHandler(drain_console, NULL); + } } nTty = tty_attr; @@ -271,6 +283,7 @@ xf86CloseConsole(void) xf86Msg(X_WARNING, "xf86CloseConsole: KDSETMODE failed: %s\n", strerror(errno)); + SYSCALL(ioctl(xf86Info.consoleFd, KDSKBMUTE, 0)); SYSCALL(ioctl(xf86Info.consoleFd, KDSKBMODE, tty_mode)); tcsetattr(xf86Info.consoleFd, TCSANOW, &tty_attr); diff --git a/xorg-server/hw/xquartz/bundle/Info.plist.cpp b/xorg-server/hw/xquartz/bundle/Info.plist.cpp index f76c5fcef..b0106c6da 100644 --- a/xorg-server/hw/xquartz/bundle/Info.plist.cpp +++ b/xorg-server/hw/xquartz/bundle/Info.plist.cpp @@ -26,6 +26,8 @@ <string>x11a</string> <key>CSResourcesFileMapped</key> <true/> + <key>NSSupportsAutomaticGraphicsSwitching</key> + <true/> #ifdef XQUARTZ_SPARKLE <key>SUEnableAutomaticChecks</key> <true/> diff --git a/xorg-server/include/eventconvert.h b/xorg-server/include/eventconvert.h index 4c56d534a..01172f0ee 100644 --- a/xorg-server/include/eventconvert.h +++ b/xorg-server/include/eventconvert.h @@ -29,8 +29,6 @@ #include "events.h" #include "eventstr.h" -#define FP1616(integral, frac) ((integral) * (1 << 16) + (frac) * (1 << 16)) - _X_EXPORT int EventToCore(InternalEvent *event, xEvent **core, int *count); _X_EXPORT int EventToXI(InternalEvent *ev, xEvent **xi, int *count); _X_EXPORT int EventToXI2(InternalEvent *ev, xEvent **xi); diff --git a/xorg-server/include/xkbsrv.h b/xorg-server/include/xkbsrv.h index d58478543..2b926a980 100644 --- a/xorg-server/include/xkbsrv.h +++ b/xorg-server/include/xkbsrv.h @@ -835,23 +835,6 @@ extern void XkbFakeDeviceButton(DeviceIntPtr /* dev */ , #define _XkbListGeometry 4 #define _XkbListNumComponents 5 -typedef struct _XkbSrvListInfo { - int szPool; - int nPool; - char *pool; - - int maxRtrn; - int nTotal; - - char *pattern[_XkbListNumComponents]; - int nFound[_XkbListNumComponents]; -} XkbSrvListInfoRec, *XkbSrvListInfoPtr; - -extern _X_EXPORT Status XkbDDXList(DeviceIntPtr /* dev */ , - XkbSrvListInfoPtr /* listing */ , - ClientPtr /* client */ - ); - extern _X_EXPORT unsigned int XkbDDXLoadKeymapByNames(DeviceIntPtr /* keybd */ , XkbComponentNamesPtr /* names */ , diff --git a/xorg-server/test/xi2/protocol-eventconvert.c b/xorg-server/test/xi2/protocol-eventconvert.c index 1188e8b25..bb3177cc1 100644 --- a/xorg-server/test/xi2/protocol-eventconvert.c +++ b/xorg-server/test/xi2/protocol-eventconvert.c @@ -338,8 +338,8 @@ test_values_XIDeviceEvent(DeviceEvent *in, xXIDeviceEvent * out, BOOL swap) assert(out->event_x == 0); /* set in FixUpEventFromWindow */ assert(out->event_y == 0); /* set in FixUpEventFromWindow */ - assert(out->root_x == FP1616(in->root_x, in->root_x_frac)); - assert(out->root_y == FP1616(in->root_y, in->root_y_frac)); + assert(out->root_x == double_to_fp1616(in->root_x + in->root_x_frac)); + assert(out->root_y == double_to_fp1616(in->root_y + in->root_y_frac)); buttons = 0; for (i = 0; i < bits_to_bytes(sizeof(in->buttons)); i++) { diff --git a/xorg-server/xfixes/cursor.c b/xorg-server/xfixes/cursor.c index 206505d34..360d7ed7f 100644 --- a/xorg-server/xfixes/cursor.c +++ b/xorg-server/xfixes/cursor.c @@ -1301,6 +1301,10 @@ CreatePointerBarrierClient(ScreenPtr screen, ClientPtr client, ret->screen = screen; ret->num_devices = stuff->num_devices; + if (ret->num_devices > 0) + ret->device_ids = (int*)&ret[1]; + else + ret->device_ids = NULL; in_devices = (CARD16 *) &stuff[1]; for (i = 0; i < stuff->num_devices; i++) { diff --git a/xorg-server/xkb/Makefile.am b/xorg-server/xkb/Makefile.am index fb3ccbf6f..e386ce5a2 100644 --- a/xorg-server/xkb/Makefile.am +++ b/xorg-server/xkb/Makefile.am @@ -6,8 +6,7 @@ DDX_SRCS = \ ddxBeep.c \ ddxCtrls.c \ ddxLEDs.c \ - ddxLoad.c \ - ddxList.c + ddxLoad.c DIX_SRCS = \ xkb.c \ diff --git a/xorg-server/xkb/ddxList.c b/xorg-server/xkb/ddxList.c deleted file mode 100644 index 729c5aecf..000000000 --- a/xorg-server/xkb/ddxList.c +++ /dev/null @@ -1,302 +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 <ctype.h> -#include <X11/X.h> -#include <X11/Xos.h> -#include <X11/Xproto.h> -#include <X11/keysym.h> -#include <X11/extensions/XKM.h> -#include "inputstr.h" -#include "scrnintstr.h" -#include "windowstr.h" -#define XKBSRV_NEED_FILE_FUNCS -#include <xkbsrv.h> -#include <X11/extensions/XI.h> - -#ifdef WIN32 -/* from ddxLoad.c */ -#define W32_tmparg " '%s'" -#define W32_tmpfile ,tmpname -#define W32_tmplen strlen(tmpname)+3 -#else -#define W32_tmparg -#define W32_tmpfile -#define W32_tmplen 0 -#endif - -/***====================================================================***/ - -static const char *componentDirs[_XkbListNumComponents] = { - "keycodes", "types", "compat", "symbols", "geometry" -}; - -/***====================================================================***/ - -static Status -_AddListComponent(XkbSrvListInfoPtr list, - int what, unsigned flags, char *str, ClientPtr client) -{ - int slen, wlen; - unsigned char *wire8; - unsigned short *wire16; - char *tmp; - - if (list->nTotal >= list->maxRtrn) { - list->nTotal++; - return Success; - } - tmp = strchr(str, ')'); - if ((tmp == NULL) && ((tmp = strchr(str, '(')) == NULL)) { - slen = strlen(str); - while ((slen > 0) && isspace(str[slen - 1])) { - slen--; - } - } - else { - slen = (tmp - str + 1); - } - wlen = (((slen + 1) / 2) * 2) + 4; /* four bytes for flags and length, pad to */ - /* 2-byte boundary */ - if ((list->szPool - list->nPool) < wlen) { - if (wlen > 1024) - list->szPool += XkbPaddedSize(wlen * 2); - else - list->szPool += 1024; - list->pool = realloc(list->pool, list->szPool * sizeof(char)); - if (!list->pool) - return BadAlloc; - } - wire16 = (unsigned short *) &list->pool[list->nPool]; - wire8 = (unsigned char *) &wire16[2]; - wire16[0] = flags; - wire16[1] = slen; - memcpy(wire8, str, slen); - if (client->swapped) { - swaps(&wire16[0]); - swaps(&wire16[1]); - } - list->nPool += wlen; - list->nFound[what]++; - list->nTotal++; - return Success; -} - -/***====================================================================***/ -static Status -XkbDDXListComponent(DeviceIntPtr dev, - int what, XkbSrvListInfoPtr list, ClientPtr client) -{ - char *file, *map, *tmp, *buf = NULL; - FILE *in; - Status status; - Bool haveDir; - -#ifdef WIN32 - char tmpname[PATH_MAX]; -#else - int rval; -#endif - - if ((list->pattern[what] == NULL) || (list->pattern[what][0] == '\0')) - return Success; - file = list->pattern[what]; - map = strrchr(file, '('); - if (map != NULL) { - map++; - tmp = strrchr(map, ')'); - if ((tmp == NULL) || (tmp[1] != '\0')) { - /* illegal pattern. No error, but no match */ - return Success; - } - } - - in = NULL; - haveDir = TRUE; -#ifdef WIN32 - strcpy(tmpname, Win32TempDir()); - strcat(tmpname, "\\xkb_XXXXXX"); - (void) mktemp(tmpname); -#endif - if (XkbBaseDirectory != NULL) { - if ((list->pattern[what][0] == '*') && (list->pattern[what][1] == '\0')) { - if (asprintf(&buf, "%s/%s.dir", XkbBaseDirectory, - componentDirs[what]) == -1) - buf = NULL; - else - in = fopen(buf, "r"); - } - if (!in) { - haveDir = FALSE; - free(buf); - if (asprintf - (&buf, - "'%s/xkbcomp' '-R%s/%s' -w %ld -l -vlfhpR '%s'" W32_tmparg, - XkbBinDirectory, XkbBaseDirectory, componentDirs[what], - (long) ((xkbDebugFlags < 2) ? 1 : - ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)), - file W32_tmpfile) == -1) - buf = NULL; - } - } - else { - if ((list->pattern[what][0] == '*') && (list->pattern[what][1] == '\0')) { - if (asprintf(&buf, "%s.dir", componentDirs[what]) == -1) - buf = NULL; - else - in = fopen(buf, "r"); - } - if (!in) { - haveDir = FALSE; - free(buf); - if (asprintf - (&buf, - "xkbcomp -R%s -w %ld -l -vlfhpR '%s'" W32_tmparg, - componentDirs[what], - (long) ((xkbDebugFlags < 2) ? 1 : - ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)), - file W32_tmpfile) == -1) - buf = NULL; - } - } - status = Success; - if (!haveDir) { -#ifndef WIN32 - in = Popen(buf, "r"); -#else - if (xkbDebugFlags) - DebugF("[xkb] xkbList executes: %s\n", buf); - if (System(buf) < 0) - ErrorF("[xkb] Could not invoke keymap compiler\n"); - else - in = fopen(tmpname, "r"); -#endif - } - if (!in) { - free(buf); -#ifdef WIN32 - unlink(tmpname); -#endif - return BadImplementation; - } - list->nFound[what] = 0; - free(buf); - buf = malloc(PATH_MAX * sizeof(char)); - if (!buf) { - fclose(in); -#ifdef WIN32 - unlink(tmpname); -#endif - return BadAlloc; - } - while ((status == Success) && ((tmp = fgets(buf, PATH_MAX, in)) != NULL)) { - unsigned flags; - register unsigned int i; - - if (*tmp == '#') /* comment, skip it */ - continue; - if (!strncmp(tmp, "Warning:", 8) || !strncmp(tmp, " ", 8)) - /* skip warnings too */ - continue; - flags = 0; - /* each line in the listing is supposed to start with two */ - /* groups of eight characters, which specify the general */ - /* flags and the flags that are specific to the component */ - /* if they're missing, fail with BadImplementation */ - for (i = 0; (i < 8) && (status == Success); i++) { /* read the general flags */ - if (isalpha(*tmp)) - flags |= (1L << i); - else if (*tmp != '-') - status = BadImplementation; - tmp++; - } - if (status != Success) - break; - if (!isspace(*tmp)) { - status = BadImplementation; - break; - } - else - tmp++; - for (i = 0; (i < 8) && (status == Success); i++) { /* read the component flags */ - if (isalpha(*tmp)) - flags |= (1L << (i + 8)); - else if (*tmp != '-') - status = BadImplementation; - tmp++; - } - if (status != Success) - break; - if (isspace(*tmp)) { - while (isspace(*tmp)) { - tmp++; - } - } - else { - status = BadImplementation; - break; - } - status = _AddListComponent(list, what, flags, tmp, client); - } -#ifndef WIN32 - if (haveDir) - fclose(in); - else if ((rval = Pclose(in)) != 0) { - if (xkbDebugFlags) - ErrorF("[xkb] xkbcomp returned exit code %d\n", rval); - } -#else - fclose(in); - unlink(tmpname); -#endif - free(buf); - return status; -} - -/***====================================================================***/ - -/* ARGSUSED */ -Status -XkbDDXList(DeviceIntPtr dev, XkbSrvListInfoPtr list, ClientPtr client) -{ - Status status; - - status = XkbDDXListComponent(dev, _XkbListKeycodes, list, client); - if (status == Success) - status = XkbDDXListComponent(dev, _XkbListTypes, list, client); - if (status == Success) - status = XkbDDXListComponent(dev, _XkbListCompat, list, client); - if (status == Success) - status = XkbDDXListComponent(dev, _XkbListSymbols, list, client); - if (status == Success) - status = XkbDDXListComponent(dev, _XkbListGeometry, list, client); - return status; -} diff --git a/xorg-server/xkb/xkb.c b/xorg-server/xkb/xkb.c index 11660bf47..17dab8ec9 100644..100755 --- a/xorg-server/xkb/xkb.c +++ b/xorg-server/xkb/xkb.c @@ -5615,9 +5615,9 @@ ProcXkbListComponents(ClientPtr client) DeviceIntPtr dev; xkbListComponentsReply rep; unsigned len; - int status; unsigned char *str; - XkbSrvListInfoRec list; + uint8_t size; + int i; REQUEST(xkbListComponentsReq); REQUEST_AT_LEAST_SIZE(xkbListComponentsReq); @@ -5627,39 +5627,33 @@ ProcXkbListComponents(ClientPtr client) CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixGetAttrAccess); - status = Success; + /* The request is followed by six Pascal strings (i.e. size in characters + * followed by a string pattern) describing what the client wants us to + * list. We don't care, but might as well check they haven't got the + * length wrong. */ str = (unsigned char *) &stuff[1]; - memset(&list, 0, sizeof(XkbSrvListInfoRec)); - list.maxRtrn = stuff->maxNames; - list.pattern[_XkbListKeycodes] = GetComponentSpec(&str, FALSE, &status); - list.pattern[_XkbListTypes] = GetComponentSpec(&str, FALSE, &status); - list.pattern[_XkbListCompat] = GetComponentSpec(&str, FALSE, &status); - list.pattern[_XkbListSymbols] = GetComponentSpec(&str, FALSE, &status); - list.pattern[_XkbListGeometry] = GetComponentSpec(&str, FALSE, &status); - if (status != Success) - return status; - len = str - ((unsigned char *) stuff); + for (i = 0; i < 6; i++) { + size = *((uint8_t *)str); + len = (str + size + 1) - ((unsigned char *) stuff); + if ((XkbPaddedSize(len) / 4) > stuff->length) + return BadLength; + str += (size + 1); + } if ((XkbPaddedSize(len) / 4) != stuff->length) return BadLength; - if ((status = XkbDDXList(dev, &list, client)) != Success) { - free(list.pool); - list.pool = NULL; - return status; - } memset(&rep, 0, sizeof(xkbListComponentsReply)); rep.type = X_Reply; rep.deviceID = dev->id; rep.sequenceNumber = client->sequence; - rep.length = XkbPaddedSize(list.nPool) / 4; - rep.nKeymaps = 0; - rep.nKeycodes = list.nFound[_XkbListKeycodes]; - rep.nTypes = list.nFound[_XkbListTypes]; - rep.nCompatMaps = list.nFound[_XkbListCompat]; - rep.nSymbols = list.nFound[_XkbListSymbols]; - rep.nGeometries = list.nFound[_XkbListGeometry]; - rep.extra = 0; - if (list.nTotal > list.maxRtrn) - rep.extra = (list.nTotal - list.maxRtrn); + rep.length = 0, + rep.nKeymaps = 0, + rep.nKeycodes = 0, + rep.nTypes = 0, + rep.nCompatMaps = 0, + rep.nSymbols = 0, + rep.nGeometries = 0, + rep.extra = 0 + if (client->swapped) { swaps(&rep.sequenceNumber); swapl(&rep.length); @@ -5672,11 +5666,6 @@ ProcXkbListComponents(ClientPtr client) swaps(&rep.extra); } WriteToClient(client, SIZEOF(xkbListComponentsReply), &rep); - if (list.nPool && list.pool) { - WriteToClient(client, XkbPaddedSize(list.nPool), list.pool); - free(list.pool); - list.pool = NULL; - } return Success; } diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in index 712ddabf6..313f4884d 100644 --- a/xorg-server/xkeyboard-config/rules/base.xml.in +++ b/xorg-server/xkeyboard-config/rules/base.xml.in @@ -1372,6 +1372,12 @@ <iso639Id>srp</iso639Id> </languageList> </configItem> </variant> + <variant> + <configItem> + <name>workman</name> + <_description>English (US, Workman)</_description> + </configItem> + </variant> </variantList> </layout> <layout> diff --git a/xorg-server/xkeyboard-config/symbols/us b/xorg-server/xkeyboard-config/symbols/us index 2d54e28cc..06cd3ce33 100644 --- a/xorg-server/xkeyboard-config/symbols/us +++ b/xorg-server/xkeyboard-config/symbols/us @@ -1189,6 +1189,74 @@ xkb_symbols "htcdream" { include "level3(alt_switch)" }; +// Workman Keyboard Layout symbols for xkb on X.Org Server 7.x +// 09-06-2010 OJ Bucao. +partial default alphanumeric_keys +xkb_symbols "workman" { + + include "us(basic)" + + name[Group1]= "English (US, Workman)"; + + // Alphanumeric section + key <TLDE> { [ grave, asciitilde, dead_tilde, asciitilde ] }; + key <AE01> { [ 1, exclam, exclamdown, onesuperior ] }; + key <AE02> { [ 2, at, masculine, twosuperior ] }; + key <AE03> { [ 3, numbersign, ordfeminine, threesuperior ] }; + key <AE04> { [ 4, dollar, cent, sterling ] }; + key <AE05> { [ 5, percent, EuroSign, yen ] }; + key <AE06> { [ 6, asciicircum, hstroke, Hstroke ] }; + key <AE07> { [ 7, ampersand, eth, ETH ] }; + key <AE08> { [ 8, asterisk, thorn, THORN ] }; + key <AE09> { [ 9, parenleft, leftsinglequotemark, leftdoublequotemark ] }; + key <AE10> { [ 0, parenright, rightsinglequotemark, rightdoublequotemark ] }; + key <AE11> { [ minus, underscore, endash, emdash ] }; + key <AE12> { [ equal, plus, multiply, division ] }; + + key <AD01> { [ q, Q, adiaeresis, Adiaeresis ] }; + key <AD02> { [ d, D, aring, Aring ] }; + key <AD03> { [ r, R, atilde, Atilde ] }; + key <AD04> { [ w, W, oslash, Ooblique ] }; + key <AD05> { [ b, B, dead_ogonek, asciitilde ] }; + key <AD06> { [ j, J, dstroke, Dstroke ] }; + key <AD07> { [ f, F, lstroke, Lstroke ] }; + key <AD08> { [ u, U, uacute, Uacute ] }; + key <AD09> { [ p, P, udiaeresis, Udiaeresis ] }; + key <AD10> { [ semicolon, colon, odiaeresis, Odiaeresis ] }; + key <AD11> { [ bracketleft, braceleft, guillemotleft, 0x1002039 ] }; + key <AD12> { [ bracketright, braceright, guillemotright, 0x100203a ] }; + key <BKSL> { [ backslash, bar, asciitilde, asciitilde ] }; + + key <AC01> { [ a, A, aacute, Aacute ] }; + key <AC02> { [ s, S, dead_grave, asciitilde ] }; + key <AC03> { [ h, H, ssharp, asciitilde ] }; + key <AC04> { [ t, T, dead_acute, dead_doubleacute ] }; + key <AC05> { [ g, G, dead_diaeresis, asciitilde ] }; + key <AC06> { [ y, Y, dead_caron, asciitilde ] }; + key <AC07> { [ n, N, ntilde, Ntilde ] }; + key <AC08> { [ e, E, eacute, Eacute ] }; + key <AC09> { [ o, O, iacute, Iacute ] }; + key <AC10> { [ i, I, oacute, Oacute ] }; + key <AC11> { [ apostrophe, quotedbl, otilde, Otilde ] }; + + key <AB01> { [ z, Z, ae, AE ] }; + key <AB02> { [ x, X, dead_circumflex, asciitilde ] }; + key <AB03> { [ m, M, ccedilla, Ccedilla ] }; + key <AB04> { [ c, C, oe, OE ] }; + key <AB05> { [ v, V, dead_breve, asciitilde ] }; + key <AB06> { [ k, K, dead_abovering, asciitilde ] }; + key <AB07> { [ l, L, dead_macron, asciitilde ] }; + key <AB08> { [ comma, less, dead_cedilla, asciitilde ] }; + key <AB09> { [ period, greater, dead_abovedot, asciitilde ] }; + key <AB10> { [ slash, question, questiondown, asciitilde ] }; + + key <CAPS> { [ BackSpace, Escape, BackSpace, BackSpace ] }; + key <LSGT> { [ minus, underscore, endash, emdash ] }; + key <SPCE> { [ space, space, space, nobreakspace ] }; + + include "level3(ralt_switch)" +}; + // EXTRAS: // Czech, Slovak and German charecters added as third level symbols to US keyboard layout. @@ -1383,3 +1451,4 @@ xkb_symbols "crd" { // End alphanumeric section }; + |