aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/X11/XKB.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/X11/XKB.c')
-rw-r--r--nx-X11/lib/X11/XKB.c771
1 files changed, 0 insertions, 771 deletions
diff --git a/nx-X11/lib/X11/XKB.c b/nx-X11/lib/X11/XKB.c
deleted file mode 100644
index 6df9c3ebc..000000000
--- a/nx-X11/lib/X11/XKB.c
+++ /dev/null
@@ -1,771 +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_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include "Xlibint.h"
-#include <nx-X11/extensions/XKBproto.h>
-#include "XKBlibint.h"
-
-XkbInternAtomFunc _XkbInternAtomFunc = XInternAtom;
-XkbGetAtomNameFunc _XkbGetAtomNameFunc = XGetAtomName;
-
-Bool
-XkbQueryExtension(Display *dpy,
- int *opcodeReturn,
- int *eventBaseReturn,
- int *errorBaseReturn,
- int *majorReturn,
- int *minorReturn)
-{
- if (!XkbUseExtension(dpy, majorReturn, minorReturn))
- return False;
- if (opcodeReturn)
- *opcodeReturn = dpy->xkb_info->codes->major_opcode;
- if (eventBaseReturn)
- *eventBaseReturn = dpy->xkb_info->codes->first_event;
- if (errorBaseReturn)
- *errorBaseReturn = dpy->xkb_info->codes->first_error;
- if (majorReturn)
- *majorReturn = dpy->xkb_info->srv_major;
- if (minorReturn)
- *minorReturn = dpy->xkb_info->srv_minor;
- return True;
-}
-
-Bool
-XkbLibraryVersion(int *libMajorRtrn, int *libMinorRtrn)
-{
- int supported;
-
- if (*libMajorRtrn != XkbMajorVersion) {
- /* version 0.65 is (almost) compatible with 1.00 */
- if ((XkbMajorVersion == 1) &&
- (((*libMajorRtrn) == 0) && ((*libMinorRtrn) == 65)))
- supported = True;
- else
- supported = False;
- }
- else {
- supported = True;
- }
-
- *libMajorRtrn = XkbMajorVersion;
- *libMinorRtrn = XkbMinorVersion;
- return supported;
-}
-
-Bool
-XkbSelectEvents(Display *dpy,
- unsigned int deviceSpec,
- unsigned int affect,
- unsigned int selectAll)
-{
- register xkbSelectEventsReq *req;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- xkbi->selected_events &= ~affect;
- xkbi->selected_events |= (affect & selectAll);
- GetReq(kbSelectEvents, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbSelectEvents;
- req->deviceSpec = deviceSpec;
- req->affectWhich = (CARD16) affect;
- req->clear = affect & (~selectAll);
- req->selectAll = affect & selectAll;
- if (affect & XkbMapNotifyMask) {
- req->affectMap = XkbAllMapComponentsMask;
- /* the implicit support needs the client info */
- /* even if the client itself doesn't want it */
- if (selectAll & XkbMapNotifyMask)
- req->map = XkbAllMapEventsMask;
- else
- req->map = XkbAllClientInfoMask;
- if (selectAll & XkbMapNotifyMask)
- xkbi->selected_map_details = XkbAllMapEventsMask;
- else
- xkbi->selected_map_details = 0;
- }
- if (affect & XkbNewKeyboardNotifyMask) {
- if (selectAll & XkbNewKeyboardNotifyMask)
- xkbi->selected_nkn_details = XkbAllNewKeyboardEventsMask;
- else
- xkbi->selected_nkn_details = 0;
- if (!(xkbi->xlib_ctrls & XkbLC_IgnoreNewKeyboards)) {
- /* we want it, even if the client doesn't. Don't mess */
- /* around with details -- ask for all of them and throw */
- /* away the ones we don't need */
- req->selectAll |= XkbNewKeyboardNotifyMask;
- }
- }
- UnlockDisplay(dpy);
- SyncHandle();
- return True;
-}
-
-Bool
-XkbSelectEventDetails(Display *dpy,
- unsigned deviceSpec,
- unsigned eventType,
- unsigned long int affect,
- unsigned long int details)
-{
- register xkbSelectEventsReq *req;
- XkbInfoPtr xkbi;
- int size = 0;
- char *out;
- union {
- CARD8 *c8;
- CARD16 *c16;
- CARD32 *c32;
- } u;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- if (affect & details)
- xkbi->selected_events |= (1 << eventType);
- else
- xkbi->selected_events &= ~(1 << eventType);
- GetReq(kbSelectEvents, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbSelectEvents;
- req->deviceSpec = deviceSpec;
- req->clear = req->selectAll = 0;
- if (eventType == XkbMapNotify) {
- /* we need all of the client info, even if the application */
- /* doesn't. Make sure that we always request the stuff */
- /* that the implicit support needs, and just filter out anything */
- /* the client doesn't want later */
- req->affectMap = (CARD16) affect;
- req->map = (CARD16) details | (XkbAllClientInfoMask & affect);
- req->affectWhich = XkbMapNotifyMask;
- xkbi->selected_map_details &= ~affect;
- xkbi->selected_map_details |= (details & affect);
- }
- else {
- req->affectMap = req->map = 0;
- req->affectWhich = (1 << eventType);
- switch (eventType) {
- case XkbNewKeyboardNotify:
- xkbi->selected_nkn_details &= ~affect;
- xkbi->selected_nkn_details |= (details & affect);
- if (!(xkbi->xlib_ctrls & XkbLC_IgnoreNewKeyboards))
- details = (affect & XkbAllNewKeyboardEventsMask);
- case XkbStateNotify:
- case XkbNamesNotify:
- case XkbAccessXNotify:
- case XkbExtensionDeviceNotify:
- size = 2;
- req->length += 1;
- break;
- case XkbControlsNotify:
- case XkbIndicatorStateNotify:
- case XkbIndicatorMapNotify:
- size = 4;
- req->length += 2;
- break;
- case XkbBellNotify:
- case XkbActionMessage:
- case XkbCompatMapNotify:
- size = 1;
- req->length += 1;
- break;
- }
- BufAlloc(char *, out, (((size * 2) + (unsigned) 3) / 4) * 4);
-
- u.c8 = (CARD8 *) out;
- if (size == 2) {
- u.c16[0] = (CARD16) affect;
- u.c16[1] = (CARD16) details;
- }
- else if (size == 4) {
- u.c32[0] = (CARD32) affect;
- u.c32[1] = (CARD32) details;
- }
- else {
- u.c8[0] = (CARD8) affect;
- u.c8[1] = (CARD8) details;
- }
- }
- UnlockDisplay(dpy);
- SyncHandle();
- return True;
-}
-
-Bool
-XkbLockModifiers(Display *dpy,
- unsigned int deviceSpec,
- unsigned int affect,
- unsigned int values)
-{
- register xkbLatchLockStateReq *req;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbLatchLockState, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbLatchLockState;
- req->deviceSpec = deviceSpec;
- req->affectModLocks = affect;
- req->modLocks = values;
- req->lockGroup = False;
- req->groupLock = 0;
-
- req->affectModLatches = req->modLatches = 0;
- req->latchGroup = False;
- req->groupLatch = 0;
- UnlockDisplay(dpy);
- SyncHandle();
- return True;
-}
-
-Bool
-XkbLatchModifiers(Display *dpy,
- unsigned int deviceSpec,
- unsigned int affect,
- unsigned int values)
-{
- register xkbLatchLockStateReq *req;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbLatchLockState, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbLatchLockState;
- req->deviceSpec = deviceSpec;
-
- req->affectModLatches = affect;
- req->modLatches = values;
- req->latchGroup = False;
- req->groupLatch = 0;
-
- req->affectModLocks = req->modLocks = 0;
- req->lockGroup = False;
- req->groupLock = 0;
-
- UnlockDisplay(dpy);
- SyncHandle();
- return True;
-}
-
-Bool
-XkbLockGroup(Display *dpy, unsigned int deviceSpec, unsigned int group)
-{
- register xkbLatchLockStateReq *req;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbLatchLockState, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbLatchLockState;
- req->deviceSpec = deviceSpec;
- req->affectModLocks = 0;
- req->modLocks = 0;
- req->lockGroup = True;
- req->groupLock = group;
-
- req->affectModLatches = req->modLatches = 0;
- req->latchGroup = False;
- req->groupLatch = 0;
- UnlockDisplay(dpy);
- SyncHandle();
- return True;
-}
-
-Bool
-XkbLatchGroup(Display *dpy, unsigned int deviceSpec, unsigned int group)
-{
- register xkbLatchLockStateReq *req;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbLatchLockState, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbLatchLockState;
- req->deviceSpec = deviceSpec;
-
- req->affectModLatches = 0;
- req->modLatches = 0;
- req->latchGroup = True;
- req->groupLatch = group;
-
- req->affectModLocks = req->modLocks = 0;
- req->lockGroup = False;
- req->groupLock = 0;
-
- UnlockDisplay(dpy);
- SyncHandle();
- return True;
-}
-
-unsigned
-XkbSetXlibControls(Display *dpy, unsigned affect, unsigned values)
-{
- if (!dpy->xkb_info)
- XkbUseExtension(dpy, NULL, NULL);
- if (!dpy->xkb_info)
- return 0;
- affect &= XkbLC_AllControls;
- dpy->xkb_info->xlib_ctrls &= ~affect;
- dpy->xkb_info->xlib_ctrls |= (affect & values);
- return dpy->xkb_info->xlib_ctrls;
-}
-
-unsigned
-XkbGetXlibControls(Display *dpy)
-{
- if (!dpy->xkb_info)
- XkbUseExtension(dpy, NULL, NULL);
- if (!dpy->xkb_info)
- return 0;
- return dpy->xkb_info->xlib_ctrls;
-}
-
-unsigned int
-XkbXlibControlsImplemented(void)
-{
- return XkbLC_AllControls & ~XkbLC_AllComposeControls;
-}
-
-Bool
-XkbSetDebuggingFlags(Display *dpy,
- unsigned int mask,
- unsigned int flags,
- char *msg,
- unsigned int ctrls_mask,
- unsigned int ctrls,
- unsigned int *rtrn_flags,
- unsigned int *rtrn_ctrls)
-{
- register xkbSetDebuggingFlagsReq *req;
- xkbSetDebuggingFlagsReply rep;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbSetDebuggingFlags, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbSetDebuggingFlags;
- req->affectFlags = mask;
- req->flags = flags;
- req->affectCtrls = ctrls_mask;
- req->ctrls = ctrls;
-
- if (msg) {
- char *out;
-
- req->msgLength = (unsigned short) strlen(msg) + 1;
- req->length += (req->msgLength + (unsigned) 3) >> 2;
- BufAlloc(char *, out, ((req->msgLength + (unsigned) 3) / 4) * 4);
- memcpy(out, msg, req->msgLength);
- }
- else
- req->msgLength = 0;
- if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
- if (rtrn_flags)
- *rtrn_flags = rep.currentFlags;
- if (rtrn_ctrls)
- *rtrn_ctrls = rep.currentCtrls;
- UnlockDisplay(dpy);
- SyncHandle();
- return True;
-}
-
-Bool
-XkbComputeEffectiveMap(XkbDescPtr xkb,
- XkbKeyTypePtr type,
- unsigned char *map_rtrn)
-{
- register int i;
- unsigned tmp;
- XkbKTMapEntryPtr entry = NULL;
-
- if ((!xkb) || (!type) || (!xkb->server))
- return False;
-
- if (type->mods.vmods != 0) {
- if (!XkbVirtualModsToReal(xkb, type->mods.vmods, &tmp))
- return False;
-
- type->mods.mask = tmp | type->mods.real_mods;
- entry = type->map;
- for (i = 0; i < type->map_count; i++, entry++) {
- tmp = 0;
- if (entry->mods.vmods != 0) {
- if (!XkbVirtualModsToReal(xkb, entry->mods.vmods, &tmp))
- return False;
- if (tmp == 0) {
- entry->active = False;
- continue;
- }
- }
- entry->active = True;
- entry->mods.mask = (entry->mods.real_mods | tmp) & type->mods.mask;
- }
- }
- else {
- type->mods.mask = type->mods.real_mods;
- }
- if (map_rtrn != NULL) {
- bzero(map_rtrn, type->mods.mask + 1);
- for (i = 0; i < type->map_count; i++) {
- if (entry && entry->active) {
- map_rtrn[type->map[i].mods.mask] = type->map[i].level;
- }
- }
- }
- return True;
-}
-
-Status
-XkbGetState(Display *dpy, unsigned deviceSpec, XkbStatePtr rtrn)
-{
- register xkbGetStateReq *req;
- xkbGetStateReply rep;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbGetState, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbGetState;
- req->deviceSpec = deviceSpec;
- if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return BadImplementation;
- }
- rtrn->mods = rep.mods;
- rtrn->base_mods = rep.baseMods;
- rtrn->latched_mods = rep.latchedMods;
- rtrn->locked_mods = rep.lockedMods;
- rtrn->group = rep.group;
- rtrn->base_group = rep.baseGroup;
- rtrn->latched_group = rep.latchedGroup;
- rtrn->locked_group = rep.lockedGroup;
- rtrn->compat_state = rep.compatState;
- rtrn->grab_mods = rep.grabMods;
- rtrn->compat_grab_mods = rep.compatGrabMods;
- rtrn->lookup_mods = rep.lookupMods;
- rtrn->compat_lookup_mods = rep.compatLookupMods;
- rtrn->ptr_buttons = rep.ptrBtnState;
- UnlockDisplay(dpy);
- SyncHandle();
- return Success;
-}
-
-Bool
-XkbSetDetectableAutoRepeat(Display *dpy, Bool detectable, Bool *supported)
-{
- register xkbPerClientFlagsReq *req;
- xkbPerClientFlagsReply rep;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbPerClientFlags, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbPerClientFlags;
- req->deviceSpec = XkbUseCoreKbd;
- req->change = XkbPCF_DetectableAutoRepeatMask;
- if (detectable)
- req->value = XkbPCF_DetectableAutoRepeatMask;
- else
- req->value = 0;
- req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0;
- if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
- UnlockDisplay(dpy);
- SyncHandle();
- if (supported != NULL)
- *supported = ((rep.supported & XkbPCF_DetectableAutoRepeatMask) != 0);
- return ((rep.value & XkbPCF_DetectableAutoRepeatMask) != 0);
-}
-
-Bool
-XkbGetDetectableAutoRepeat(Display *dpy, Bool *supported)
-{
- register xkbPerClientFlagsReq *req;
- xkbPerClientFlagsReply rep;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbPerClientFlags, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbPerClientFlags;
- req->deviceSpec = XkbUseCoreKbd;
- req->change = 0;
- req->value = 0;
- req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0;
- if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
- UnlockDisplay(dpy);
- SyncHandle();
- if (supported != NULL)
- *supported = ((rep.supported & XkbPCF_DetectableAutoRepeatMask) != 0);
- return ((rep.value & XkbPCF_DetectableAutoRepeatMask) != 0);
-}
-
-Bool
-XkbSetAutoResetControls(Display *dpy,
- unsigned changes,
- unsigned *auto_ctrls,
- unsigned *auto_values)
-{
- register xkbPerClientFlagsReq *req;
- xkbPerClientFlagsReply rep;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbPerClientFlags, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbPerClientFlags;
- req->change = XkbPCF_AutoResetControlsMask;
- req->deviceSpec = XkbUseCoreKbd;
- req->value = XkbPCF_AutoResetControlsMask;
- req->ctrlsToChange = changes;
- req->autoCtrls = *auto_ctrls;
- req->autoCtrlValues = *auto_values;
- if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
- UnlockDisplay(dpy);
- SyncHandle();
- *auto_ctrls = rep.autoCtrls;
- *auto_values = rep.autoCtrlValues;
- return ((rep.value & XkbPCF_AutoResetControlsMask) != 0);
-}
-
-Bool
-XkbGetAutoResetControls(Display *dpy,
- unsigned *auto_ctrls,
- unsigned *auto_ctrl_values)
-{
- register xkbPerClientFlagsReq *req;
- xkbPerClientFlagsReply rep;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbPerClientFlags, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbPerClientFlags;
- req->deviceSpec = XkbUseCoreKbd;
- req->change = 0;
- req->value = 0;
- req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0;
- if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
- UnlockDisplay(dpy);
- SyncHandle();
- if (auto_ctrls)
- *auto_ctrls = rep.autoCtrls;
- if (auto_ctrl_values)
- *auto_ctrl_values = rep.autoCtrlValues;
- return ((rep.value & XkbPCF_AutoResetControlsMask) != 0);
-}
-
-Bool
-XkbSetPerClientControls(Display *dpy, unsigned change, unsigned *values)
-{
- register xkbPerClientFlagsReq *req;
- xkbPerClientFlagsReply rep;
- XkbInfoPtr xkbi;
- unsigned value_hold = *values;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)) ||
- (change & ~(XkbPCF_GrabsUseXKBStateMask |
- XkbPCF_LookupStateWhenGrabbed |
- XkbPCF_SendEventUsesXKBState)))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbPerClientFlags, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbPerClientFlags;
- req->change = change;
- req->deviceSpec = XkbUseCoreKbd;
- req->value = *values;
- req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0;
- if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
- UnlockDisplay(dpy);
- SyncHandle();
- *values = rep.value;
- return ((rep.value & value_hold) != 0);
-}
-
-Bool
-XkbGetPerClientControls(Display *dpy, unsigned *ctrls)
-{
- register xkbPerClientFlagsReq *req;
- xkbPerClientFlagsReply rep;
- XkbInfoPtr xkbi;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)) ||
- (ctrls == NULL))
- return False;
- LockDisplay(dpy);
- xkbi = dpy->xkb_info;
- GetReq(kbPerClientFlags, req);
- req->reqType = xkbi->codes->major_opcode;
- req->xkbReqType = X_kbPerClientFlags;
- req->deviceSpec = XkbUseCoreKbd;
- req->change = 0;
- req->value = 0;
- req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0;
- if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) {
- UnlockDisplay(dpy);
- SyncHandle();
- return False;
- }
- UnlockDisplay(dpy);
- SyncHandle();
- *ctrls = (rep.value & (XkbPCF_GrabsUseXKBStateMask |
- XkbPCF_LookupStateWhenGrabbed |
- XkbPCF_SendEventUsesXKBState));
- return (True);
-}
-
-Display *
-XkbOpenDisplay(char *name,
- int *ev_rtrn,
- int *err_rtrn,
- int *major_rtrn,
- int *minor_rtrn,
- int *reason)
-{
- Display *dpy;
- int major_num, minor_num;
-
- if ((major_rtrn != NULL) && (minor_rtrn != NULL)) {
- if (!XkbLibraryVersion(major_rtrn, minor_rtrn)) {
- if (reason != NULL)
- *reason = XkbOD_BadLibraryVersion;
- return NULL;
- }
- }
- else {
- major_num = XkbMajorVersion;
- minor_num = XkbMinorVersion;
- major_rtrn = &major_num;
- minor_rtrn = &minor_num;
- }
- dpy = XOpenDisplay(name);
- if (dpy == NULL) {
- if (reason != NULL)
- *reason = XkbOD_ConnectionRefused;
- return NULL;
- }
- if (!XkbQueryExtension(dpy, NULL, ev_rtrn, err_rtrn,
- major_rtrn, minor_rtrn)) {
- if (reason != NULL) {
- if ((*major_rtrn != 0) || (*minor_rtrn != 0))
- *reason = XkbOD_BadServerVersion;
- else
- *reason = XkbOD_NonXkbServer;
- }
- XCloseDisplay(dpy);
- return NULL;
- }
- if (reason != NULL)
- *reason = XkbOD_Success;
- return dpy;
-}
-
-void
-XkbSetAtomFuncs(XkbInternAtomFunc getAtom, XkbGetAtomNameFunc getName)
-{
- _XkbInternAtomFunc = (getAtom ? getAtom : XInternAtom);
- _XkbGetAtomNameFunc = (getName ? getName : XGetAtomName);
- return;
-}