XKB: Remove descriptions from maprules
We don't use them, as they're not up to the task. We'll get a better solution someday, promise. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
1ad80678d8
commit
699824a357
|
@ -44,17 +44,6 @@ typedef struct _XkbRF_VarDefs {
|
|||
char * options;
|
||||
} XkbRF_VarDefsRec,*XkbRF_VarDefsPtr;
|
||||
|
||||
typedef struct _XkbRF_VarDesc {
|
||||
char * name;
|
||||
char * desc;
|
||||
} XkbRF_VarDescRec, *XkbRF_VarDescPtr;
|
||||
|
||||
typedef struct _XkbRF_DescribeVars {
|
||||
int sz_desc;
|
||||
int num_desc;
|
||||
XkbRF_VarDescPtr desc;
|
||||
} XkbRF_DescribeVarsRec,*XkbRF_DescribeVarsPtr;
|
||||
|
||||
typedef struct _XkbRF_Rule {
|
||||
int number;
|
||||
int layout_num;
|
||||
|
@ -85,11 +74,6 @@ typedef struct _XkbRF_Group {
|
|||
#define XkbRF_Invalid (1L<<5)
|
||||
|
||||
typedef struct _XkbRF_Rules {
|
||||
XkbRF_DescribeVarsRec models;
|
||||
XkbRF_DescribeVarsRec layouts;
|
||||
XkbRF_DescribeVarsRec variants;
|
||||
XkbRF_DescribeVarsRec options;
|
||||
|
||||
unsigned short sz_rules;
|
||||
unsigned short num_rules;
|
||||
XkbRF_RulePtr rules;
|
||||
|
@ -111,12 +95,6 @@ extern _X_EXPORT Bool XkbRF_GetComponents(
|
|||
struct _XkbComponentNames * /* names */
|
||||
);
|
||||
|
||||
extern _X_EXPORT XkbRF_RulePtr XkbRF_AddRule(
|
||||
XkbRF_RulesPtr /* rules */
|
||||
);
|
||||
|
||||
extern _X_EXPORT XkbRF_GroupPtr XkbRF_AddGroup(XkbRF_RulesPtr rules);
|
||||
|
||||
extern _X_EXPORT Bool XkbRF_LoadRules(
|
||||
FILE * /* file */,
|
||||
XkbRF_RulesPtr /* rules */
|
||||
|
@ -130,43 +108,13 @@ extern _X_EXPORT Bool XkbRF_LoadRulesByName(
|
|||
|
||||
/***====================================================================***/
|
||||
|
||||
extern _X_EXPORT XkbRF_VarDescPtr XkbRF_AddVarDesc(
|
||||
XkbRF_DescribeVarsPtr /* vars */
|
||||
);
|
||||
|
||||
extern _X_EXPORT XkbRF_VarDescPtr XkbRF_AddVarDescCopy(
|
||||
XkbRF_DescribeVarsPtr /* vars */,
|
||||
XkbRF_VarDescPtr /* copy_from */
|
||||
);
|
||||
|
||||
extern _X_EXPORT Bool XkbRF_LoadDescriptions(
|
||||
FILE * /* file */,
|
||||
XkbRF_RulesPtr /* rules */
|
||||
);
|
||||
|
||||
extern _X_EXPORT Bool XkbRF_LoadDescriptionsByName(
|
||||
char * /* base */,
|
||||
char * /* locale */,
|
||||
XkbRF_RulesPtr /* rules */
|
||||
);
|
||||
|
||||
extern _X_EXPORT XkbRF_RulesPtr XkbRF_Load(
|
||||
char * /* base */,
|
||||
char * /* locale */,
|
||||
Bool /* wantDesc */,
|
||||
Bool /* wantRules */
|
||||
);
|
||||
|
||||
extern _X_EXPORT XkbRF_RulesPtr XkbRF_Create(void);
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
extern _X_EXPORT void XkbRF_Free(
|
||||
XkbRF_RulesPtr /* rules */,
|
||||
Bool /* freeRules */
|
||||
);
|
||||
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
#define _XKB_RF_NAMES_PROP_ATOM "_XKB_RULES_NAMES"
|
||||
|
|
207
xkb/maprules.c
207
xkb/maprules.c
|
@ -52,6 +52,8 @@
|
|||
|
||||
/***====================================================================***/
|
||||
|
||||
|
||||
|
||||
#define DFLT_LINE_SIZE 128
|
||||
|
||||
typedef struct {
|
||||
|
@ -856,7 +858,7 @@ XkbRF_GetComponents( XkbRF_RulesPtr rules,
|
|||
names->compat && names->geometry);
|
||||
}
|
||||
|
||||
XkbRF_RulePtr
|
||||
static XkbRF_RulePtr
|
||||
XkbRF_AddRule(XkbRF_RulesPtr rules)
|
||||
{
|
||||
if (rules->sz_rules<1) {
|
||||
|
@ -878,7 +880,7 @@ XkbRF_AddRule(XkbRF_RulesPtr rules)
|
|||
return &rules->rules[rules->num_rules++];
|
||||
}
|
||||
|
||||
XkbRF_GroupPtr
|
||||
static XkbRF_GroupPtr
|
||||
XkbRF_AddGroup(XkbRF_RulesPtr rules)
|
||||
{
|
||||
if (rules->sz_groups<1) {
|
||||
|
@ -967,185 +969,6 @@ Bool ok;
|
|||
|
||||
/***====================================================================***/
|
||||
|
||||
#define HEAD_NONE 0
|
||||
#define HEAD_MODEL 1
|
||||
#define HEAD_LAYOUT 2
|
||||
#define HEAD_VARIANT 3
|
||||
#define HEAD_OPTION 4
|
||||
#define HEAD_EXTRA 5
|
||||
|
||||
XkbRF_VarDescPtr
|
||||
XkbRF_AddVarDesc(XkbRF_DescribeVarsPtr vars)
|
||||
{
|
||||
if (vars->sz_desc<1) {
|
||||
vars->sz_desc= 16;
|
||||
vars->num_desc= 0;
|
||||
vars->desc= _XkbTypedCalloc(vars->sz_desc,XkbRF_VarDescRec);
|
||||
}
|
||||
else if (vars->num_desc>=vars->sz_desc) {
|
||||
vars->sz_desc*= 2;
|
||||
vars->desc= _XkbTypedRealloc(vars->desc,vars->sz_desc,XkbRF_VarDescRec);
|
||||
}
|
||||
if (!vars->desc) {
|
||||
vars->sz_desc= vars->num_desc= 0;
|
||||
DebugF("Allocation failure in XkbRF_AddVarDesc\n");
|
||||
return NULL;
|
||||
}
|
||||
vars->desc[vars->num_desc].name= NULL;
|
||||
vars->desc[vars->num_desc].desc= NULL;
|
||||
return &vars->desc[vars->num_desc++];
|
||||
}
|
||||
|
||||
XkbRF_VarDescPtr
|
||||
XkbRF_AddVarDescCopy(XkbRF_DescribeVarsPtr vars,XkbRF_VarDescPtr from)
|
||||
{
|
||||
XkbRF_VarDescPtr nd;
|
||||
|
||||
if ((nd=XkbRF_AddVarDesc(vars))!=NULL) {
|
||||
nd->name= _XkbDupString(from->name);
|
||||
nd->desc= _XkbDupString(from->desc);
|
||||
}
|
||||
return nd;
|
||||
}
|
||||
|
||||
Bool
|
||||
XkbRF_LoadDescriptions(FILE *file,XkbRF_RulesPtr rules)
|
||||
{
|
||||
InputLine line;
|
||||
XkbRF_VarDescRec tmp;
|
||||
char *tok;
|
||||
int len,headingtype;
|
||||
|
||||
bzero((char *)&tmp, sizeof(XkbRF_VarDescRec));
|
||||
headingtype = HEAD_NONE;
|
||||
InitInputLine(&line);
|
||||
for ( ; GetInputLine(file,&line,False); line.num_line= 0) {
|
||||
if (line.line[0]=='!') {
|
||||
tok = strtok(&(line.line[1]), " \t");
|
||||
if (strcasecmp(tok,"model") == 0)
|
||||
headingtype = HEAD_MODEL;
|
||||
else if (strcasecmp(tok,"layout") == 0)
|
||||
headingtype = HEAD_LAYOUT;
|
||||
else if (strcasecmp(tok,"variant") == 0)
|
||||
headingtype = HEAD_VARIANT;
|
||||
else if (strcasecmp(tok,"option") == 0)
|
||||
headingtype = HEAD_OPTION;
|
||||
else {
|
||||
ErrorF("Broken rules file: unknown type for line %s\n",
|
||||
line.line);
|
||||
ErrorF("Not parsing rules file further\n");
|
||||
XkbRF_Free(rules, False);
|
||||
FreeInputLine(&line);
|
||||
return False;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (headingtype == HEAD_NONE) {
|
||||
DebugF("Must have a heading before first line of data\n");
|
||||
DebugF("Illegal line of data ignored\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
len = strlen(line.line);
|
||||
if ((tmp.name= strtok(line.line, " \t")) == NULL) {
|
||||
DebugF("Huh? No token on line\n");
|
||||
DebugF("Illegal line of data ignored\n");
|
||||
continue;
|
||||
}
|
||||
if (strlen(tmp.name) == len) {
|
||||
DebugF("No description found\n");
|
||||
DebugF("Illegal line of data ignored\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
tok = line.line + strlen(tmp.name) + 1;
|
||||
while ((*tok!='\n')&&isspace(*tok))
|
||||
tok++;
|
||||
if (*tok == '\0') {
|
||||
DebugF("No description found\n");
|
||||
DebugF("Illegal line of data ignored\n");
|
||||
continue;
|
||||
}
|
||||
tmp.desc= tok;
|
||||
switch (headingtype) {
|
||||
case HEAD_MODEL:
|
||||
XkbRF_AddVarDescCopy(&rules->models,&tmp);
|
||||
break;
|
||||
case HEAD_LAYOUT:
|
||||
XkbRF_AddVarDescCopy(&rules->layouts,&tmp);
|
||||
break;
|
||||
case HEAD_VARIANT:
|
||||
XkbRF_AddVarDescCopy(&rules->variants,&tmp);
|
||||
break;
|
||||
case HEAD_OPTION:
|
||||
XkbRF_AddVarDescCopy(&rules->options,&tmp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
FreeInputLine(&line);
|
||||
if ((rules->models.num_desc==0) && (rules->layouts.num_desc==0) &&
|
||||
(rules->variants.num_desc==0) && (rules->options.num_desc==0))
|
||||
return False;
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
Bool
|
||||
XkbRF_LoadDescriptionsByName(char *base,char *locale,XkbRF_RulesPtr rules)
|
||||
{
|
||||
FILE * file;
|
||||
char buf[PATH_MAX];
|
||||
Bool ok;
|
||||
|
||||
if ((!base)||(!rules))
|
||||
return False;
|
||||
if (locale) {
|
||||
if (strlen(base)+strlen(locale)+6 > PATH_MAX)
|
||||
return False;
|
||||
sprintf(buf,"%s-%s.lst", base, locale);
|
||||
}
|
||||
else {
|
||||
if (strlen(base)+5 > PATH_MAX)
|
||||
return False;
|
||||
sprintf(buf,"%s.lst", base);
|
||||
}
|
||||
|
||||
file= fopen(buf, "r");
|
||||
if ((!file)&&(locale)) { /* fallback if locale was specified */
|
||||
sprintf(buf,"%s.lst", base);
|
||||
|
||||
file= fopen(buf, "r");
|
||||
}
|
||||
if (!file)
|
||||
return False;
|
||||
ok= XkbRF_LoadDescriptions(file,rules);
|
||||
fclose(file);
|
||||
return ok;
|
||||
}
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
XkbRF_RulesPtr
|
||||
XkbRF_Load(char *base,char *locale,Bool wantDesc,Bool wantRules)
|
||||
{
|
||||
XkbRF_RulesPtr rules;
|
||||
|
||||
if ((!base)||((!wantDesc)&&(!wantRules)))
|
||||
return NULL;
|
||||
if ((rules=_XkbTypedCalloc(1,XkbRF_RulesRec))==NULL)
|
||||
return NULL;
|
||||
if (wantDesc&&(!XkbRF_LoadDescriptionsByName(base,locale,rules))) {
|
||||
XkbRF_Free(rules,True);
|
||||
return NULL;
|
||||
}
|
||||
if (wantRules&&(!XkbRF_LoadRulesByName(base,locale,rules))) {
|
||||
XkbRF_Free(rules,True);
|
||||
return NULL;
|
||||
}
|
||||
return rules;
|
||||
}
|
||||
|
||||
XkbRF_RulesPtr
|
||||
XkbRF_Create(void)
|
||||
{
|
||||
|
@ -1154,24 +977,6 @@ XkbRF_Create(void)
|
|||
|
||||
/***====================================================================***/
|
||||
|
||||
static void
|
||||
XkbRF_ClearVarDescriptions(XkbRF_DescribeVarsPtr var)
|
||||
{
|
||||
register int i;
|
||||
|
||||
for (i=0;i<var->num_desc;i++) {
|
||||
if (var->desc[i].name)
|
||||
_XkbFree(var->desc[i].name);
|
||||
if (var->desc[i].desc)
|
||||
_XkbFree(var->desc[i].desc);
|
||||
var->desc[i].name= var->desc[i].desc= NULL;
|
||||
}
|
||||
if (var->desc)
|
||||
_XkbFree(var->desc);
|
||||
var->desc= NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
XkbRF_Free(XkbRF_RulesPtr rules,Bool freeRules)
|
||||
{
|
||||
|
@ -1181,10 +986,6 @@ XkbRF_GroupPtr group;
|
|||
|
||||
if (!rules)
|
||||
return;
|
||||
XkbRF_ClearVarDescriptions(&rules->models);
|
||||
XkbRF_ClearVarDescriptions(&rules->layouts);
|
||||
XkbRF_ClearVarDescriptions(&rules->variants);
|
||||
XkbRF_ClearVarDescriptions(&rules->options);
|
||||
if (rules->rules) {
|
||||
for (i=0,rule=rules->rules;i<rules->num_rules;i++,rule++) {
|
||||
if (rule->model) _XkbFree(rule->model);
|
||||
|
|
Loading…
Reference in New Issue