Unverified Commit 1918bcb9 authored by Mihai Moldovan's avatar Mihai Moldovan

Merge branch 'uli42-pr/update_xkb' into 3.6.x

parents a6cb8583 00e3e95e
......@@ -724,20 +724,14 @@ base directory for keyboard layout files. This option is not available
for setuid X servers (i.e., when the X server's real and effective uids
are different).
.TP 8
.B \-ar1 \fImilliseconds\fP
.B \-ardelay \fImilliseconds\fP
sets the autorepeat delay (length of time in milliseconds that a key must
be depressed before autorepeat starts).
.TP 8
.B \-ar2 \fImilliseconds\fP
.B \-arinterval \fImilliseconds\fP
sets the autorepeat interval (length of time in milliseconds that should
elapse between autorepeat-generated keystrokes).
.TP 8
.B \-noloadxkb
disables loading of an XKB keymap description on server startup.
.TP 8
.B \-xkbdb \fIfilename\fP
uses \fIfilename\fP for default keyboard keymaps.
.TP 8
.B \-xkbmap \fIfilename\fP
loads keyboard description in \fIfilename\fP on server startup.
......
......@@ -18,25 +18,20 @@ XKB_DDXDEFS = XkbServerDefines
NX_DEFINES = -DNXAGENT_SERVER
#endif
#if (defined(XorgServer) && XorgServer)
XF86INCLUDES = -I$(XF86COMSRC) -I$(XF86OSSRC)
XF86_OBJS = xf86KillSrv.o xf86VT.o xf86Private.o
#endif
DDX_SRCS = ddxBeep.c ddxCtrls.c ddxFakeBtn.c ddxFakeMtn.c ddxInit.c \
ddxKeyClick.c ddxKillSrv.c ddxLEDs.c ddxVT.c ddxLoad.c \
ddxList.c ddxConfig.c ddxDevBtn.c ddxPrivate.c xkbconfig.c
ddxList.c ddxDevBtn.c ddxPrivate.c xkbconfig.c
DDX_OBJS = ddxBeep.o ddxCtrls.o ddxFakeBtn.o ddxFakeMtn.o ddxInit.o \
ddxKeyClick.o ddxKillSrv.o ddxLEDs.o ddxVT.o ddxLoad.o \
ddxList.o ddxConfig.o ddxDevBtn.o ddxPrivate.o xkbconfig.o
ddxList.o ddxDevBtn.o ddxPrivate.o xkbconfig.o
SRCS = xkb.c xkbUtils.c xkbEvents.c xkbAccessX.c xkbSwap.c \
xkbLEDs.c xkbInit.c xkbActions.c xkbPrKeyEv.c \
xkmread.c xkbtext.c xkbfmisc.c xkberrs.c xkbout.c maprules.c \
xkmread.c xkbfmisc.c xkberrs.c maprules.c \
XKBMisc.c XKBMAlloc.c XKBAlloc.c XKBGAlloc.c \
$(XKBXI_SRCS) $(DDX_SRCS)
OBJS = xkb.o xkbUtils.o xkbEvents.o xkbAccessX.o xkbSwap.o \
xkbLEDs.o xkbInit.o xkbActions.o xkbPrKeyEv.o \
xkmread.o xkbtext.o xkbfmisc.o xkberrs.o xkbout.o maprules.o \
xkmread.o xkbfmisc.o xkberrs.o maprules.o \
XKBMisc.o XKBMAlloc.o XKBAlloc.o XKBGAlloc.o \
$(XKBXI_OBJS) $(DDX_OBJS)
INCLUDES = -I../include -I$(XINCLUDESRC) -I$(EXTINCSRC) -I$(SERVERSRC)/Xext \
......@@ -52,13 +47,6 @@ NormalLibraryTarget(xkb,$(OBJS))
LintLibraryTarget(xkb,$(SRCS))
NormalLintTarget($(SRCS))
#if (defined(XorgServer) && XorgServer)
ObjectFromSpecialSource(xf86KillSrv,ddxKillSrv,-DXF86DDXACTIONS)
ObjectFromSpecialSource(xf86VT,ddxVT,-DXF86DDXACTIONS)
ObjectFromSpecialSource(xf86Private,ddxPrivate,-DXF86DDXACTIONS)
AllTarget($(XF86_OBJS))
#endif
SpecialCObjectRule(xkbInit,$(ICONFIGFILES),$(XKB_DEFINES))
#if BuildLibraries
......
......@@ -26,11 +26,8 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#elif defined(HAVE_CONFIG_H)
#include <config.h>
#endif
#include <stdio.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
......@@ -39,7 +36,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <xkbsrv.h>
#include "xkbgeom.h"
/***===================================================================***/
/*ARGSUSED*/
......
......@@ -26,8 +26,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#elif defined(HAVE_CONFIG_H)
#include <config.h>
#endif
......@@ -39,7 +37,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <xkbsrv.h>
#include "xkbgeom.h"
#ifdef X_NOT_POSIX
#define Size_t unsigned int
#else
......
......@@ -30,7 +30,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <config.h>
#endif
#include <stdio.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
......@@ -39,7 +38,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <nx-X11/keysym.h>
#include <xkbsrv.h>
/***====================================================================***/
Status
......@@ -298,7 +296,7 @@ XkbClientMapPtr map;
}
}
}
if ((!map)||(!map->types)||(!map->num_types<XkbNumRequiredTypes)) {
if ((!map)||(!map->types)||(!(map->num_types<XkbNumRequiredTypes))) {
tmp= XkbNumRequiredTypes+1;
if (XkbAllocClientMap(xkb,XkbKeyTypesMask,tmp)!=Success)
return NULL;
......
......@@ -30,7 +30,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <config.h>
#endif
#include <stdio.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
......@@ -39,7 +38,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <nx-X11/keysym.h>
#include <xkbsrv.h>
/***====================================================================***/
#define mapSize(m) (sizeof(m)/sizeof(XkbKTMapEntryRec))
......
/************************************************************
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 <nx-X11/X.h>
#include <nx-X11/Xproto.h>
#include <nx-X11/keysym.h>
#include "inputstr.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include "os.h"
#include <xkbsrv.h>
#include <nx-X11/extensions/XKBconfig.h>
Bool
XkbDDXApplyConfig(XPointer cfg_in,XkbSrvInfoPtr info)
{
XkbConfigRtrnPtr rtrn;
XkbDescPtr xkb;
Bool ok;
XkbEventCauseRec cause;
xkb= info->desc;
rtrn= (XkbConfigRtrnPtr)cfg_in;
if (rtrn==NULL)
return True;
ok= XkbCFApplyRtrnValues(rtrn,XkbCFDflts,xkb);
if (rtrn->initial_mods.replace) {
info->state.locked_mods= rtrn->initial_mods.mods;
}
else {
info->state.locked_mods|= rtrn->initial_mods.mods;
if (rtrn->initial_mods.mods_clear)
info->state.locked_mods&= ~rtrn->initial_mods.mods_clear;
}
XkbComputeDerivedState(info);
XkbSetCauseUnknown(&cause);
XkbUpdateIndicators(info->device,XkbAllIndicatorsMask,False,NULL,&cause);
if (info->device && info->device->kbdfeed) {
DeviceIntPtr dev;
KeybdCtrl newCtrl;
dev= info->device;
newCtrl= dev->kbdfeed->ctrl;
if (rtrn->click_volume>=0)
newCtrl.click= rtrn->click_volume;
if (rtrn->bell_volume>=0)
newCtrl.bell= rtrn->bell_volume;
if (rtrn->bell_pitch>0)
newCtrl.bell_pitch= rtrn->bell_pitch;
if (rtrn->bell_duration>0)
newCtrl.bell_duration= rtrn->bell_duration;
if (dev->kbdfeed->CtrlProc)
(*dev->kbdfeed->CtrlProc)(dev,&newCtrl);
}
XkbCFFreeRtrn(rtrn,XkbCFDflts,xkb);
return ok;
}
XPointer
XkbDDXPreloadConfig( char ** rulesRtrn,
XkbRF_VarDefsPtr defs,
XkbComponentNamesPtr names,
DeviceIntPtr dev)
{
char buf[PATH_MAX];
char * dName;
FILE * file;
XkbConfigRtrnPtr rtrn;
#if defined(MetroLink)
if (dev && dev->name)
dName= dev->name;
else dName= "";
/* It doesn't appear that XkbBaseDirectory could ever get set to NULL */
sprintf(buf,"%s/X%s-config%s%s",XkbBaseDirectory,display,
(dName[0]?".":""),dName);
#else
if (dev && dev->name)
dName= dev->name;
else dName= "";
if (XkbBaseDirectory!=NULL) {
if (strlen(XkbBaseDirectory)+strlen(display)
+strlen(dName)+10+(dName[0]?1:0) > PATH_MAX)
{
#ifdef DEBUG
ErrorF("path exceeds max length\n");
#endif
return NULL;
}
sprintf(buf,"%s/X%s-config%s%s",XkbBaseDirectory,display,
(dName[0]?".":""),dName);
}
else {
if (strlen(display)+strlen(dName)+10+(dName[0]?1:0) > PATH_MAX)
{
#ifdef DEBUG
ErrorF("path exceeds max length\n");
#endif
return NULL;
}
sprintf(buf,"X%s-config%s%s",display,(dName[0]?".":""),dName);
}
#endif
#ifdef DEBUG
ErrorF("Looking for keyboard configuration in %s...",buf);
#endif
file= fopen(buf,"r");
if (file==NULL) {
#ifdef DEBUG
ErrorF("file not found\n");
#endif
return NULL;
}
rtrn= _XkbTypedCalloc(1,XkbConfigRtrnRec);
if (rtrn!=NULL) {
if (!XkbCFParse(file,XkbCFDflts,NULL,rtrn)) {
#ifdef DEBUG
ErrorF("error\n");
#endif
ErrorF("Error parsing config file: ");
XkbCFReportError(stderr,buf,rtrn->error,rtrn->line);
_XkbFree(rtrn);
fclose(file);
return NULL;
}
#ifdef DEBUG
ErrorF("found it\n");
#endif
if (rtrn->rules_file) {
*rulesRtrn= rtrn->rules_file;
rtrn->rules_file= NULL;
}
if (rtrn->model) {
defs->model= rtrn->model;
rtrn->model= NULL;
}
if (rtrn->layout) {
defs->layout= rtrn->layout;
rtrn->layout= NULL;
}
if (rtrn->variant) {
defs->variant= rtrn->variant;
rtrn->variant= NULL;
}
if (rtrn->options) {
defs->options= rtrn->options;
rtrn->options= NULL;
}
XkbSetRulesUsed(defs);
if (rtrn->keycodes!=NULL) {
if (names->keycodes) _XkbFree(names->keycodes);
names->keycodes= rtrn->keycodes;
rtrn->keycodes= NULL;
}
if (rtrn->geometry!=NULL) {
if (names->geometry) _XkbFree(names->geometry);
names->geometry= rtrn->geometry;
rtrn->geometry= NULL;
}
if (rtrn->symbols!=NULL) {
if (rtrn->phys_symbols==NULL)
rtrn->phys_symbols= Xstrdup(names->symbols);
if (names->symbols) _XkbFree(names->symbols);
names->symbols= rtrn->symbols;
rtrn->symbols= NULL;
}
if (rtrn->types!=NULL) {
if (names->types) _XkbFree(names->types);
names->types= rtrn->types;
rtrn->types= NULL;
}
if (rtrn->compat!=NULL) {
if (names->compat) _XkbFree(names->compat);
names->compat= rtrn->compat;
rtrn->compat= NULL;
}
}
fclose(file);
return (XPointer)rtrn;
}
......@@ -42,25 +42,11 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <xkbsrv.h>
#include <nx-X11/extensions/XI.h>
#ifdef XF86DDXACTIONS
#include "xf86.h"
#endif
int
XkbDDXTerminateServer(DeviceIntPtr dev,KeyCode key,XkbAction *act)
{
#ifdef NXAGENT_SERVER
return 0;
#else
#ifdef XF86DDXACTIONS
xf86ProcessActionEvent(ACTION_TERMINATE, NULL);
#else
#ifndef NXAGENT_SERVER
GiveUp(1);
#endif
return 0;
#endif /* NXAGENT_SERVER */
return 0;
}
......@@ -12,32 +12,8 @@
#include "windowstr.h"
#include <xkbsrv.h>
#ifdef XF86DDXACTIONS
#include "xf86.h"
#endif
int
XkbDDXPrivate(DeviceIntPtr dev,KeyCode key,XkbAction *act)
{
#ifdef XF86DDXACTIONS
XkbAnyAction *xf86act = &(act->any);
char msgbuf[XkbAnyActionDataSize+1];
if (xf86act->type == XkbSA_XFree86Private) {
memcpy(msgbuf, xf86act->data, XkbAnyActionDataSize);
msgbuf[XkbAnyActionDataSize]= '\0';
if (_XkbStrCaseCmp(msgbuf, "-vmode")==0)
xf86ProcessActionEvent(ACTION_PREV_MODE, NULL);
else if (_XkbStrCaseCmp(msgbuf, "+vmode")==0)
xf86ProcessActionEvent(ACTION_NEXT_MODE, NULL);
else if (_XkbStrCaseCmp(msgbuf, "ungrab")==0)
xf86ProcessActionEvent(ACTION_DISABLEGRAB, NULL);
else if (_XkbStrCaseCmp(msgbuf, "clsgrb")==0)
xf86ProcessActionEvent(ACTION_CLOSECLIENT, NULL);
else
xf86ProcessActionEvent(ACTION_MESSAGE, (void *) msgbuf);
}
#endif
return 0;
}
......@@ -42,28 +42,8 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <xkbsrv.h>
#include <nx-X11/extensions/XI.h>
#ifdef XF86DDXACTIONS
#include "xf86.h"
#endif
int
XkbDDXSwitchScreen(DeviceIntPtr dev,KeyCode key,XkbAction *act)
{
#ifdef XF86DDXACTIONS
{
int scrnnum = XkbSAScreen(&act->screen);
if (act->screen.flags & XkbSA_SwitchApplication) {
if (act->screen.flags & XkbSA_SwitchAbsolute)
xf86ProcessActionEvent(ACTION_SWITCHSCREEN,(void *) &scrnnum);
else {
if (scrnnum < 0)
xf86ProcessActionEvent(ACTION_SWITCHSCREEN_PREV,NULL);
else
xf86ProcessActionEvent(ACTION_SWITCHSCREEN_NEXT,NULL);
}
}
}
#endif
return 1;
}
......@@ -26,8 +26,6 @@
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#elif defined(HAVE_CONFIG_H)
#include <config.h>
#endif
#include <stdio.h>
......@@ -38,7 +36,6 @@
#define XOS_USE_NO_LOCKING
#include <nx-X11/Xos_r.h>
#include <nx-X11/Xproto.h>
#include <nx-X11/X.h>
#include <nx-X11/Xos.h>
......@@ -51,7 +48,6 @@
#include "xkbstr.h"
#include <xkbsrv.h>
#ifdef DEBUG
#define PR_DEBUG(s) fprintf(stderr,s)
#define PR_DEBUG1(s,a) fprintf(stderr,s,a)
......@@ -62,6 +58,12 @@
#define PR_DEBUG2(s,a,b)
#endif
#ifdef NEED_STRCASECMP
extern int _XkbStrCaseCmp(char *s1, char *s2);
#else
#define _XkbStrCaseCmp strcasecmp
#endif
/***====================================================================***/
#define DFLT_LINE_SIZE 128
......@@ -1086,13 +1088,13 @@ int len,headingtype,extra_ndx = 0;
for ( ; GetInputLine(file,&line,False); line.num_line= 0) {
if (line.line[0]=='!') {
tok = strtok(&(line.line[1]), " \t");
if (!_XkbStrCaseCmp(tok,"model"))
if (_XkbStrCaseCmp(tok,"model") == 0)
headingtype = HEAD_MODEL;
else if (!_XkbStrCaseCmp(tok,"layout"))
else if (_XkbStrCaseCmp(tok,"layout") == 0)
headingtype = HEAD_LAYOUT;
else if (!_XkbStrCaseCmp(tok,"variant"))
else if (_XkbStrCaseCmp(tok,"variant") == 0)
headingtype = HEAD_VARIANT;
else if (!_XkbStrCaseCmp(tok,"option"))
else if (_XkbStrCaseCmp(tok,"option") == 0)
headingtype = HEAD_OPTION;
else {
int i;
......@@ -1324,4 +1326,3 @@ XkbRF_GroupPtr group;
_XkbFree(rules);
return;
}
......@@ -1246,7 +1246,7 @@ XkbSizeVirtualModMap(XkbDescPtr xkb,xkbGetMapReply *rep)
rep->totalVModMapKeys= 0;
return 0;
}
for (nRtrn=i=0;i<rep->nVModMapKeys;i++) {
for (nRtrn=i=0;i<rep->nVModMapKeys-1;i++) {
if (xkb->server->vmodmap[i+rep->firstVModMapKey]!=0)
nRtrn++;
}
......
......@@ -118,8 +118,6 @@ char * XkbBinDirectory= XKB_BIN_DIRECTORY;
char * XkbInitialMap= NULL;
int XkbWantAccessX= 0;
static XkbFileInfo * _XkbInitFileInfo= NULL;
char * XkbDB= NULL;
int XkbAutoLoad= 1;
static Bool rulesDefined= False;
static char * XkbRulesFile= NULL;
......@@ -136,7 +134,7 @@ char * XkbOptionsUsed= NULL;
int _XkbClientMajor= XkbMajorVersion;
int _XkbClientMinor= XkbMinorVersion;
Bool noXkbExtension= XKB_DFLT_DISABLED;
Bool noXkbExtension= XKB_DFLT_DISABLED;
Bool XkbWantRulesProp= XKB_DFLT_RULES_PROP;
/***====================================================================***/
......@@ -505,7 +503,7 @@ XkbEventCauseRec cause;
file.file=NULL;
bzero(&file.xkbinfo,sizeof(XkbFileInfo));
bzero(&changes,sizeof(XkbChangesRec));
if (XkbAutoLoad && (XkbInitialMap!=NULL)) {
if (XkbInitialMap!=NULL) {
if ((file.file=XkbDDXOpenConfigFile(XkbInitialMap,NULL,0))!=NULL) {
XkmReadFile(file.file,0,XkmKeymapLegal,&file.xkbinfo);
if (file.xkbinfo.xkb==NULL) {
......@@ -638,8 +636,6 @@ KeySymsRec tmpSyms,*pSyms;
CARD8 tmpMods[XkbMaxLegalKeyCode+1],*pMods;
char name[PATH_MAX],*rules;
Bool ok=False;
XPointer config;
XkbComponentNamesRec cfgNames;
XkbRF_VarDefsRec defs;
if ((dev->key!=NULL)||(dev->kbdfeed!=NULL))
......@@ -647,9 +643,7 @@ XkbRF_VarDefsRec defs;
pSyms= pSymsIn;
pMods= pModsIn;
bzero(&defs,sizeof(XkbRF_VarDefsRec));
bzero(&cfgNames,sizeof(XkbComponentNamesRec));
rules= XkbGetRulesDflts(&defs);
config= XkbDDXPreloadConfig(&rules,&defs,&cfgNames,dev);
/*
* The strings are duplicated because it is not guaranteed that
......@@ -702,30 +696,6 @@ XkbRF_VarDefsRec defs;
XkbSetRulesUsed(&defs);
}
}
if (cfgNames.keymap){
if (names->keymap) _XkbFree(names->keymap);
names->keymap= cfgNames.keymap;
}
if (cfgNames.keycodes){
if (names->keycodes) _XkbFree(names->keycodes);
names->keycodes= cfgNames.keycodes;
}
if (cfgNames.types) {
if (names->types) _XkbFree(names->types);
names->types= cfgNames.types;
}
if (cfgNames.compat) {
if (names->compat) _XkbFree(names->compat);
names->compat= cfgNames.compat;
}
if (cfgNames.symbols){
if (names->symbols) _XkbFree(names->symbols);
names->symbols= cfgNames.symbols;
}
if (cfgNames.geometry) {
if (names->geometry) _XkbFree(names->geometry);
names->geometry= cfgNames.geometry;
}
if (names->keymap) {
XkbComponentNamesRec tmpNames;
......@@ -778,8 +748,6 @@ XkbRF_VarDefsRec defs;
LogMessage(X_WARNING, "Couldn't load XKB keymap, falling back to pre-XKB keymap\n");
}
ok= InitKeyboardDeviceStruct((DevicePtr)dev,pSyms,pMods,bellProc,ctrlProc);
if ((config!=NULL)&&(dev && dev->key && dev->key->xkbInfo))
XkbDDXApplyConfig(config,dev->key->xkbInfo);
_XkbInitFileInfo= NULL;
if ((pSyms==&tmpSyms)&&(pSyms->map!=NULL)) {
_XkbFree(pSyms->map);
......@@ -960,24 +928,6 @@ XkbProcessArguments(int argc,char *argv[],int i)
return -1;
}
}
else if (strncmp(argv[i], "-xkbdb", 7) == 0) {
if(++i < argc) {
if (strlen(argv[i]) < PATH_MAX) {
XkbDB= argv[i];
return 2;
} else {
LogMessage(X_ERROR, "-xkbdb pathname too long\n");
return -1;
}
}
else {
return -1;
}
}
else if (strncmp(argv[i], "-noloadxkb", 7) == 0) {
XkbAutoLoad= 0;
return 1;
}
else if ((strncmp(argv[i],"-accessx",8)==0)||
(strncmp(argv[i],"+accessx",8)==0)) {
int j=1;
......@@ -1016,12 +966,14 @@ XkbProcessArguments(int argc,char *argv[],int i)
}
return j;
}
if (strcmp (argv[i], "-ar1") == 0) { /* -ar1 int */
if ((strcmp(argv[i], "-ardelay") == 0) ||
(strcmp (argv[i], "-ar1") == 0)) { /* -ardelay int */
if (++i >= argc) UseMsg ();
XkbDfltRepeatDelay = (long)atoi(argv[i]);
return 2;
}
if (strcmp (argv[i], "-ar2") == 0) { /* -ar2 int */
if ((strcmp(argv[i], "-arinterval") == 0) ||
(strcmp (argv[i], "-ar2") == 0)) { /* -arinterval int */
if (++i >= argc) UseMsg ();
XkbDfltRepeatInterval = (long)atoi(argv[i]);
return 2;
......@@ -1032,14 +984,11 @@ XkbProcessArguments(int argc,char *argv[],int i)
void
XkbUseMsg(void)
{
ErrorF("The X Keyboard Extension adds the following arguments:\n");
ErrorF("-kb disable the X Keyboard Extension\n");
ErrorF("+kb enable the X Keyboard Extension\n");
ErrorF("[+-]accessx [ timeout [ timeout_mask [ feedback [ options_mask] ] ] ]\n");
ErrorF(" enable/disable accessx key sequences\n");
ErrorF("-ar1 set XKB autorepeat delay\n");
ErrorF("-ar2 set XKB autorepeat interval\n");
ErrorF("-noloadxkb don't load XKB keymap description\n");
ErrorF("-xkbdb file that contains default XKB keymaps\n");
ErrorF("-ardelay set XKB autorepeat delay\n");
ErrorF("-arinterval set XKB autorepeat interval\n");
ErrorF("-xkbmap XKB keyboard description to load on startup\n");
}
......@@ -674,6 +674,9 @@ CARD16 grp_mask;
XkbStatePtr state= &xkbi->state;
XkbCompatMapPtr map;
if (!state || !xkbi->desc || !xkbi->desc->ctrls || !xkbi->desc->compat)
return;
map= xkbi->desc->compat;
grp_mask= map->groups[state->group].mask;
state->compat_state = state->mods|grp_mask;
......@@ -733,6 +736,9 @@ XkbStatePtr state= &xkbi->state;
XkbControlsPtr ctrls= xkbi->desc->ctrls;
unsigned char grp;
if (!state || !ctrls)
return;
state->mods= (state->base_mods|state->latched_mods);
state->mods|= state->locked_mods;
state->lookup_mods= state->mods&(~ctrls->internal.mask);
......
......@@ -49,6 +49,12 @@
#include <nx-X11/extensions/XKBconfig.h>
#ifdef NEED_STRCASECMP
extern int _XkbStrCaseCmp(char *s1, char *s2);
#else
#define _XkbStrCaseCmp strcasecmp
#endif
/***====================================================================***/
#define XKBCF_MAX_STR_LEN 100
......
......@@ -26,8 +26,6 @@
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#elif defined(HAVE_CONFIG_H)
#include <config.h>
#endif
#include <stdio.h>
......
......@@ -26,8 +26,6 @@
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#elif defined(HAVE_CONFIG_H)
#include <config.h>
#endif
#include <stdio.h>
......@@ -35,7 +33,6 @@
#include <nx-X11/Xos.h>
#include <nx-X11/Xfuncs.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
#include <nx-X11/keysym.h>
......@@ -53,7 +50,6 @@ XkbInternAtom(Display *dpy,char *str,Bool only_if_exists)
return MakeAtom(str,strlen(str),!only_if_exists);
}
#ifndef SEEK_SET
#define SEEK_SET 0
#endif
......@@ -156,6 +152,89 @@ int count,nRead=0;
return nRead;
}
unsigned
_XkbKSCheckCase(KeySym ks)
{
unsigned set,rtrn;
set= (ks & (~0xff)) >> 8;
rtrn= 0;
switch (set) {
case 0: /* latin 1 */
if (((ks>=XK_A)&&(ks<=XK_Z))||
((ks>=XK_Agrave)&&(ks<=XK_THORN)&&(ks!=XK_multiply))) {
rtrn|= _XkbKSUpper;
}
if (((ks>=XK_a)&&(ks<=XK_z))||
((ks>=XK_agrave)&&(ks<=XK_ydiaeresis))) {
rtrn|= _XkbKSLower;
}
break;
case 1: /* latin 2 */
if (((ks>=XK_Aogonek)&&(ks<=XK_Zabovedot)&&(ks!=XK_breve))||
((ks>=XK_Racute)&&(ks<=XK_Tcedilla))) {
rtrn|= _XkbKSUpper;
}
if (((ks>=XK_aogonek)&&(ks<=XK_zabovedot)&&(ks!=XK_caron))||
((ks>=XK_racute)&&(ks<=XK_tcedilla))) {
rtrn|= _XkbKSLower;
}
break;
case 2: /* latin 3 */
if (((ks>=XK_Hstroke)&&(ks<=XK_Jcircumflex))||
((ks>=XK_Cabovedot)&&(ks<=XK_Scircumflex))) {
rtrn|= _XkbKSUpper;
}
if (((ks>=XK_hstroke)&&(ks<=XK_jcircumflex))||
((ks>=XK_cabovedot)&&(ks<=XK_scircumflex))) {
rtrn|= _XkbKSLower;
}
break;
case 3: /* latin 4 */
if (((ks>=XK_Rcedilla)&&(ks<=XK_Tslash))||
(ks==XK_ENG)||
((ks>=XK_Amacron)&&(ks<=XK_Umacron))) {
rtrn|= _XkbKSUpper;
}
if (((ks>=XK_rcedilla)&&(ks<=XK_tslash))||
(ks==XK_eng)||
((ks>=XK_amacron)&&(ks<=XK_umacron))) {
rtrn|= _XkbKSLower;
}
break;
case 18: /* latin 8 */
if ((ks==XK_Babovedot)||
((ks>=XK_Dabovedot)&&(ks<=XK_Wacute))||
((ks>=XK_Ygrave)&&(ks<=XK_Fabovedot))||
(ks==XK_Mabovedot)||
(ks==XK_Pabovedot)||
(ks==XK_Sabovedot)||
(ks==XK_Wdiaeresis)||
((ks>=XK_Wcircumflex)&&(ks<=XK_Ycircumflex))) {
rtrn|= _XkbKSUpper;
}
if ((ks==XK_babovedot)||
(ks==XK_dabovedot)||
(ks==XK_fabovedot)||
(ks==XK_mabovedot)||
((ks>=XK_wgrave)&&(ks<=XK_wacute))||
(ks==XK_ygrave)||
((ks>=XK_wdiaeresis)&&(ks<=XK_ycircumflex))) {
rtrn|= _XkbKSLower;
}
break;
case 19: /* latin 9 */
if ((ks==XK_OE)||(ks==XK_Ydiaeresis)) {
rtrn|= _XkbKSUpper;
}
if (ks==XK_oe) {
rtrn|= _XkbKSLower;
}
break;
}
return rtrn;
}
/***====================================================================***/
static int
......@@ -1159,14 +1238,10 @@ int nRead;
*loaded_rtrn|= XkmGeometryMask;
break;
default:
_XkbLibError(_XkbErrBadImplementation,
XkbConfigText(tmpTOC.type,XkbMessage),0);
nRead= 0;
break;
}
if (nRead!=tmpTOC.size) {
_XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
nRead-tmpTOC.size);
return 0;
}
return (nRead>=0);
......@@ -1201,8 +1276,6 @@ char name[100];
return Xstrdup(name);
break;
default:
_XkbLibError(_XkbErrBadImplementation,
XkbConfigText(tmpTOC.type,XkbMessage),0);
break;
}
return NULL;
......@@ -1268,8 +1341,6 @@ unsigned which= need|want;
tmp= ReadXkmGeometry(file,result);
break;
default:
_XkbLibError(_XkbErrBadImplementation,
XkbConfigText(tmpTOC.type,XkbMessage),0);
tmp= 0;
break;
}
......@@ -1279,8 +1350,7 @@ unsigned which= need|want;
result->defined|= (1<<toc[i].type);
}
if (nRead!=tmpTOC.size) {
_XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
nRead-tmpTOC.size);
return 0;
}
}
return which;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment