Revert xkb changes that broke XkbGetKeyboard()
This commit is contained in:
parent
79016d4036
commit
654619d76c
|
@ -30,8 +30,10 @@ DIX_SRCS = \
|
|||
XKBFILE_SRCS = \
|
||||
maprules.c \
|
||||
xkmread.c \
|
||||
xkbtext.c \
|
||||
xkbfmisc.c \
|
||||
xkberrs.c
|
||||
xkberrs.c \
|
||||
xkbout.c
|
||||
|
||||
X11_SRCS = \
|
||||
XKBMisc.c \
|
||||
|
|
431
xkb/xkbfmisc.c
431
xkb/xkbfmisc.c
|
@ -48,16 +48,185 @@
|
|||
#include <X11/extensions/XKBgeom.h>
|
||||
#include "xkb.h"
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/***===================================================================***/
|
||||
|
||||
Bool
|
||||
XkbLookupGroupAndLevel( XkbDescPtr xkb,
|
||||
int key,
|
||||
int * mods_inout,
|
||||
int * grp_inout,
|
||||
int * lvl_rtrn)
|
||||
{
|
||||
int nG,eG;
|
||||
|
||||
if ((!xkb)||(!XkbKeycodeInRange(xkb,key))||(!grp_inout))
|
||||
return False;
|
||||
|
||||
nG= XkbKeyNumGroups(xkb,key);
|
||||
eG= *grp_inout;
|
||||
|
||||
if ( nG==0 ) {
|
||||
*grp_inout= 0;
|
||||
if (lvl_rtrn!=NULL)
|
||||
*lvl_rtrn= 0;
|
||||
return False;
|
||||
}
|
||||
else if ( nG==1 ) {
|
||||
eG= 0;
|
||||
}
|
||||
else if ( eG>=nG ) {
|
||||
unsigned gI= XkbKeyGroupInfo(xkb,key);
|
||||
switch (XkbOutOfRangeGroupAction(gI)) {
|
||||
default:
|
||||
eG %= nG;
|
||||
break;
|
||||
case XkbClampIntoRange:
|
||||
eG = nG-1;
|
||||
break;
|
||||
case XkbRedirectIntoRange:
|
||||
eG = XkbOutOfRangeGroupNumber(gI);
|
||||
if (eG>=nG)
|
||||
eG= 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
*grp_inout= eG;
|
||||
if (mods_inout!=NULL) {
|
||||
XkbKeyTypePtr type;
|
||||
int preserve;
|
||||
|
||||
type = XkbKeyKeyType(xkb,key,eG);
|
||||
if (lvl_rtrn!=NULL)
|
||||
*lvl_rtrn= 0;
|
||||
preserve= 0;
|
||||
if (type->map) { /* find the shift level */
|
||||
register int i;
|
||||
register XkbKTMapEntryPtr entry;
|
||||
for (i=0,entry=type->map;i<type->map_count;i++,entry++) {
|
||||
if ((entry->active)&&
|
||||
(((*mods_inout)&type->mods.mask)==entry->mods.mask)){
|
||||
if (lvl_rtrn!=NULL)
|
||||
*lvl_rtrn= entry->level;
|
||||
if (type->preserve)
|
||||
preserve= type->preserve[i].mask;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
(*mods_inout)&= ~(type->mods.mask&(~preserve));
|
||||
}
|
||||
return True;
|
||||
}
|
||||
|
||||
/***===================================================================***/
|
||||
|
||||
static Bool
|
||||
XkbWriteSectionFromName(FILE *file,char *sectionName,char *name)
|
||||
{
|
||||
fprintf(file," xkb_%-20s { include \"%s\" };\n",sectionName,name);
|
||||
ErrorF(" xkb_%-20s { include \"%s\" };\n",sectionName,name);
|
||||
return True;
|
||||
}
|
||||
|
||||
#define NEED_DESC(n) ((!n)||((n)[0]=='+')||((n)[0]=='|')||(strchr((n),'%')))
|
||||
#define COMPLETE(n) ((n)&&(!NEED_DESC(n)))
|
||||
|
||||
/* ARGSUSED */
|
||||
static void
|
||||
_AddIncl( FILE * file,
|
||||
XkbFileInfo * result,
|
||||
Bool topLevel,
|
||||
Bool showImplicit,
|
||||
int index,
|
||||
void * priv)
|
||||
{
|
||||
if ((priv)&&(strcmp((char *)priv,"%")!=0))
|
||||
fprintf(file," include \"%s\"\n",(char *)priv);
|
||||
return;
|
||||
}
|
||||
|
||||
Bool
|
||||
XkbWriteXKBKeymapForNames( FILE * file,
|
||||
XkbComponentNamesPtr names,
|
||||
|
@ -66,29 +235,229 @@ XkbWriteXKBKeymapForNames( FILE * file,
|
|||
unsigned want,
|
||||
unsigned need)
|
||||
{
|
||||
if (!names || (!names->keycodes && !names->types && !names->compat &&
|
||||
!names->symbols && !names->geometry))
|
||||
return False;
|
||||
char * name,*tmp;
|
||||
unsigned complete;
|
||||
XkbNamesPtr old_names;
|
||||
int multi_section;
|
||||
unsigned wantNames,wantConfig,wantDflts;
|
||||
XkbFileInfo finfo;
|
||||
|
||||
fprintf(file, "xkb_keymap \"%s\" {\n", names->keymap ? names->keymap :
|
||||
"default");
|
||||
bzero(&finfo,sizeof(XkbFileInfo));
|
||||
|
||||
if (names->keycodes)
|
||||
XkbWriteSectionFromName(file, "keycodes", names->keycodes);
|
||||
if (names->types)
|
||||
XkbWriteSectionFromName(file, "types", names->types);
|
||||
if (names->compat)
|
||||
XkbWriteSectionFromName(file, "compatibility", names->compat);
|
||||
if (names->symbols)
|
||||
XkbWriteSectionFromName(file, "symbols", names->symbols);
|
||||
if (names->geometry)
|
||||
XkbWriteSectionFromName(file, "geometry", names->geometry);
|
||||
complete= 0;
|
||||
if ((name=names->keymap)==NULL) name= "default";
|
||||
if (COMPLETE(names->keycodes)) complete|= XkmKeyNamesMask;
|
||||
if (COMPLETE(names->types)) complete|= XkmTypesMask;
|
||||
if (COMPLETE(names->compat)) complete|= XkmCompatMapMask;
|
||||
if (COMPLETE(names->symbols)) complete|= XkmSymbolsMask;
|
||||
if (COMPLETE(names->geometry)) complete|= XkmGeometryMask;
|
||||
want|= (complete|need);
|
||||
if (want&XkmSymbolsMask)
|
||||
want|= XkmKeyNamesMask|XkmTypesMask;
|
||||
|
||||
fprintf(file,"};\n");
|
||||
if (want==0)
|
||||
return False;
|
||||
|
||||
if (xkb!=NULL) {
|
||||
old_names= xkb->names;
|
||||
finfo.type= 0;
|
||||
finfo.defined= 0;
|
||||
finfo.xkb= xkb;
|
||||
if (!XkbDetermineFileType(&finfo,XkbXKBFile,NULL))
|
||||
return False;
|
||||
}
|
||||
else old_names= NULL;
|
||||
|
||||
wantConfig= want&(~complete);
|
||||
if (xkb!=NULL) {
|
||||
if (wantConfig&XkmTypesMask) {
|
||||
if ((!xkb->map) || (xkb->map->num_types<XkbNumRequiredTypes))
|
||||
wantConfig&= ~XkmTypesMask;
|
||||
}
|
||||
if (wantConfig&XkmCompatMapMask) {
|
||||
if ((!xkb->compat) || (xkb->compat->num_si<1))
|
||||
wantConfig&= ~XkmCompatMapMask;
|
||||
}
|
||||
if (wantConfig&XkmSymbolsMask) {
|
||||
if ((!xkb->map) || (!xkb->map->key_sym_map))
|
||||
wantConfig&= ~XkmSymbolsMask;
|
||||
}
|
||||
if (wantConfig&XkmIndicatorsMask) {
|
||||
if (!xkb->indicators)
|
||||
wantConfig&= ~XkmIndicatorsMask;
|
||||
}
|
||||
if (wantConfig&XkmKeyNamesMask) {
|
||||
if ((!xkb->names)||(!xkb->names->keys))
|
||||
wantConfig&= ~XkmKeyNamesMask;
|
||||
}
|
||||
if ((wantConfig&XkmGeometryMask)&&(!xkb->geom))
|
||||
wantConfig&= ~XkmGeometryMask;
|
||||
}
|
||||
else {
|
||||
wantConfig= 0;
|
||||
}
|
||||
complete|= wantConfig;
|
||||
|
||||
wantDflts= 0;
|
||||
wantNames= want&(~complete);
|
||||
if ((xkb!=NULL) && (old_names!=NULL)) {
|
||||
if (wantNames&XkmTypesMask) {
|
||||
if (old_names->types!=None) {
|
||||
tmp= XkbAtomGetString(dpy,old_names->types);
|
||||
names->types= _XkbDupString(tmp);
|
||||
}
|
||||
else {
|
||||
wantDflts|= XkmTypesMask;
|
||||
}
|
||||
complete|= XkmTypesMask;
|
||||
}
|
||||
if (wantNames&XkmCompatMapMask) {
|
||||
if (old_names->compat!=None) {
|
||||
tmp= XkbAtomGetString(dpy,old_names->compat);
|
||||
names->compat= _XkbDupString(tmp);
|
||||
}
|
||||
else wantDflts|= XkmCompatMapMask;
|
||||
complete|= XkmCompatMapMask;
|
||||
}
|
||||
if (wantNames&XkmSymbolsMask) {
|
||||
if (old_names->symbols==None)
|
||||
return False;
|
||||
tmp= XkbAtomGetString(dpy,old_names->symbols);
|
||||
names->symbols= _XkbDupString(tmp);
|
||||
complete|= XkmSymbolsMask;
|
||||
}
|
||||
if (wantNames&XkmKeyNamesMask) {
|
||||
if (old_names->keycodes!=None) {
|
||||
tmp= XkbAtomGetString(dpy,old_names->keycodes);
|
||||
names->keycodes= _XkbDupString(tmp);
|
||||
}
|
||||
else wantDflts|= XkmKeyNamesMask;
|
||||
complete|= XkmKeyNamesMask;
|
||||
}
|
||||
if (wantNames&XkmGeometryMask) {
|
||||
if (old_names->geometry==None)
|
||||
return False;
|
||||
tmp= XkbAtomGetString(dpy,old_names->geometry);
|
||||
names->geometry= _XkbDupString(tmp);
|
||||
complete|= XkmGeometryMask;
|
||||
wantNames&= ~XkmGeometryMask;
|
||||
}
|
||||
}
|
||||
if (complete&XkmCompatMapMask)
|
||||
complete|= XkmIndicatorsMask|XkmVirtualModsMask;
|
||||
else if (complete&(XkmSymbolsMask|XkmTypesMask))
|
||||
complete|= XkmVirtualModsMask;
|
||||
if (need & (~complete))
|
||||
return False;
|
||||
if ((complete&XkmSymbolsMask)&&((XkmKeyNamesMask|XkmTypesMask)&(~complete)))
|
||||
return False;
|
||||
|
||||
multi_section= 1;
|
||||
if (((complete&XkmKeymapRequired)==XkmKeymapRequired)&&
|
||||
((complete&(~XkmKeymapLegal))==0)) {
|
||||
fprintf(file,"xkb_keymap \"%s\" {\n",name);
|
||||
}
|
||||
else if (((complete&XkmSemanticsRequired)==XkmSemanticsRequired)&&
|
||||
((complete&(~XkmSemanticsLegal))==0)) {
|
||||
fprintf(file,"xkb_semantics \"%s\" {\n",name);
|
||||
}
|
||||
else if (((complete&XkmLayoutRequired)==XkmLayoutRequired)&&
|
||||
((complete&(~XkmLayoutLegal))==0)) {
|
||||
fprintf(file,"xkb_layout \"%s\" {\n",name);
|
||||
}
|
||||
else if (XkmSingleSection(complete&(~XkmVirtualModsMask))) {
|
||||
multi_section= 0;
|
||||
}
|
||||
else {
|
||||
return False;
|
||||
}
|
||||
|
||||
wantNames= complete&(~(wantConfig|wantDflts));
|
||||
name= names->keycodes;
|
||||
if (wantConfig&XkmKeyNamesMask)
|
||||
XkbWriteXKBKeycodes(file,&finfo,False,False,_AddIncl,name);
|
||||
else if (wantDflts&XkmKeyNamesMask)
|
||||
fprintf(stderr,"Default symbols not implemented yet!\n");
|
||||
else if (wantNames&XkmKeyNamesMask)
|
||||
XkbWriteSectionFromName(file,"keycodes",name);
|
||||
|
||||
name= names->types;
|
||||
if (wantConfig&XkmTypesMask)
|
||||
XkbWriteXKBKeyTypes(file,&finfo,False,False,_AddIncl,name);
|
||||
else if (wantDflts&XkmTypesMask)
|
||||
fprintf(stderr,"Default types not implemented yet!\n");
|
||||
else if (wantNames&XkmTypesMask)
|
||||
XkbWriteSectionFromName(file,"types",name);
|
||||
|
||||
name= names->compat;
|
||||
if (wantConfig&XkmCompatMapMask)
|
||||
XkbWriteXKBCompatMap(file,&finfo,False,False,_AddIncl,name);
|
||||
else if (wantDflts&XkmCompatMapMask)
|
||||
fprintf(stderr,"Default interps not implemented yet!\n");
|
||||
else if (wantNames&XkmCompatMapMask)
|
||||
XkbWriteSectionFromName(file,"compatibility",name);
|
||||
|
||||
name= names->symbols;
|
||||
if (wantConfig&XkmSymbolsMask)
|
||||
XkbWriteXKBSymbols(file,&finfo,False,False,_AddIncl,name);
|
||||
else if (wantNames&XkmSymbolsMask)
|
||||
XkbWriteSectionFromName(file,"symbols",name);
|
||||
|
||||
name= names->geometry;
|
||||
if (wantConfig&XkmGeometryMask)
|
||||
XkbWriteXKBGeometry(file,&finfo,False,False,_AddIncl,name);
|
||||
else if (wantNames&XkmGeometryMask)
|
||||
XkbWriteSectionFromName(file,"geometry",name);
|
||||
|
||||
if (multi_section)
|
||||
fprintf(file,"};\n");
|
||||
return True;
|
||||
}
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
/*ARGSUSED*/
|
||||
Status
|
||||
XkbMergeFile(XkbDescPtr xkb,XkbFileInfo finfo)
|
||||
{
|
||||
return BadImplementation;
|
||||
}
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
int
|
||||
XkbFindKeycodeByName(XkbDescPtr xkb,char *name,Bool use_aliases)
|
||||
{
|
||||
register int i;
|
||||
|
||||
if ((!xkb)||(!xkb->names)||(!xkb->names->keys))
|
||||
return 0;
|
||||
for (i=xkb->min_key_code;i<=xkb->max_key_code;i++) {
|
||||
if (strncmp(xkb->names->keys[i].name,name,XkbKeyNameLength)==0)
|
||||
return i;
|
||||
}
|
||||
if (!use_aliases)
|
||||
return 0;
|
||||
if (xkb->geom && xkb->geom->key_aliases) {
|
||||
XkbKeyAliasPtr a;
|
||||
a= xkb->geom->key_aliases;
|
||||
for (i=0;i<xkb->geom->num_key_aliases;i++,a++) {
|
||||
if (strncmp(name,a->alias,XkbKeyNameLength)==0)
|
||||
return XkbFindKeycodeByName(xkb,a->real,False);
|
||||
}
|
||||
}
|
||||
if (xkb->names && xkb->names->key_aliases) {
|
||||
XkbKeyAliasPtr a;
|
||||
a= xkb->names->key_aliases;
|
||||
for (i=0;i<xkb->names->num_key_aliases;i++,a++) {
|
||||
if (strncmp(name,a->alias,XkbKeyNameLength)==0)
|
||||
return XkbFindKeycodeByName(xkb,a->real,False);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
unsigned
|
||||
XkbConvertGetByNameComponents(Bool toXkm,unsigned orig)
|
||||
{
|
||||
|
@ -115,6 +484,34 @@ unsigned rtrn;
|
|||
return rtrn;
|
||||
}
|
||||
|
||||
unsigned
|
||||
XkbConvertXkbComponents(Bool toXkm,unsigned orig)
|
||||
{
|
||||
unsigned rtrn;
|
||||
|
||||
rtrn= 0;
|
||||
if (toXkm) {
|
||||
if (orig&XkbClientMapMask) rtrn|= XkmTypesMask|XkmSymbolsMask;
|
||||
if (orig&XkbServerMapMask) rtrn|= XkmTypesMask|XkmSymbolsMask;
|
||||
if (orig&XkbCompatMapMask) rtrn|= XkmCompatMapMask;
|
||||
if (orig&XkbIndicatorMapMask) rtrn|= XkmIndicatorsMask;
|
||||
if (orig&XkbNamesMask) rtrn|= XkmKeyNamesMask;
|
||||
if (orig&XkbGeometryMask) rtrn|= XkmGeometryMask;
|
||||
}
|
||||
else {
|
||||
if (orig!=0) rtrn|= XkbNamesMask;
|
||||
if (orig&XkmTypesMask) rtrn|= XkbClientMapMask;
|
||||
if (orig&XkmCompatMapMask)
|
||||
rtrn|= XkbCompatMapMask|XkbIndicatorMapMask;
|
||||
if (orig&XkmSymbolsMask) rtrn|=XkbClientMapMask|XkbServerMapMask;
|
||||
if (orig&XkmIndicatorsMask) rtrn|= XkbIndicatorMapMask;
|
||||
if (orig&XkmKeyNamesMask)
|
||||
rtrn|= XkbNamesMask|XkbIndicatorMapMask;
|
||||
if (orig&XkmGeometryMask) rtrn|= XkbGeometryMask;
|
||||
}
|
||||
return rtrn;
|
||||
}
|
||||
|
||||
Bool
|
||||
XkbDetermineFileType(XkbFileInfoPtr finfo,int format,int *opts_missing)
|
||||
{
|
||||
|
|
1051
xkb/xkbout.c
Normal file
1051
xkb/xkbout.c
Normal file
File diff suppressed because it is too large
Load Diff
1325
xkb/xkbtext.c
Normal file
1325
xkb/xkbtext.c
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -167,89 +167,6 @@ 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
|
||||
|
@ -1251,10 +1168,14 @@ 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);
|
||||
|
@ -1288,6 +1209,8 @@ char name[100];
|
|||
return _XkbDupString(name);
|
||||
break;
|
||||
default:
|
||||
_XkbLibError(_XkbErrBadImplementation,
|
||||
XkbConfigText(tmpTOC.type,XkbMessage),0);
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
|
@ -1353,6 +1276,8 @@ unsigned which= need|want;
|
|||
tmp= ReadXkmGeometry(file,result);
|
||||
break;
|
||||
default:
|
||||
_XkbLibError(_XkbErrBadImplementation,
|
||||
XkbConfigText(tmpTOC.type,XkbMessage),0);
|
||||
tmp= 0;
|
||||
break;
|
||||
}
|
||||
|
@ -1362,7 +1287,8 @@ unsigned which= need|want;
|
|||
result->defined|= (1<<toc[i].type);
|
||||
}
|
||||
if (nRead!=tmpTOC.size) {
|
||||
return 0;
|
||||
_XkbLibError(_XkbErrBadLength,XkbConfigText(tmpTOC.type,XkbMessage),
|
||||
nRead-tmpTOC.size);
|
||||
}
|
||||
}
|
||||
return which;
|
||||
|
|
Loading…
Reference in New Issue
Block a user