kdrive: add options to set default XKB properties
This patch introduces convenient command-line options -xkb-rules, -xkb-model, -xkb-layout, -xkb-variant, and -xkb-options, to set default values for these properties. These options can be handful for cases in which compile-time default values don't match user locale, since kdrive doesn't support InputClass matching rules yet and not all Linux distros provide default rules to store these values in udev properties (which by the way is a discouraged practice). Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Laércio de Sousa <laerciosousa@sme-mogidascruzes.sp.gov.br>
This commit is contained in:
parent
0cf3d72be6
commit
40e32e9fc9
|
@ -89,6 +89,11 @@ char *kdSwitchCmd;
|
|||
DDXPointRec kdOrigin;
|
||||
Bool kdHasPointer = FALSE;
|
||||
Bool kdHasKbd = FALSE;
|
||||
const char *kdGlobalXkbRules = NULL;
|
||||
const char *kdGlobalXkbModel = NULL;
|
||||
const char *kdGlobalXkbLayout = NULL;
|
||||
const char *kdGlobalXkbVariant = NULL;
|
||||
const char *kdGlobalXkbOptions = NULL;
|
||||
|
||||
static Bool kdCaughtSignal = FALSE;
|
||||
|
||||
|
@ -455,6 +460,11 @@ KdUseMsg(void)
|
|||
("-mouse driver [,n,,options] Specify the pointer driver and its options (n is the number of buttons)\n");
|
||||
ErrorF
|
||||
("-keybd driver [,,options] Specify the keyboard driver and its options\n");
|
||||
ErrorF("-xkb-rules Set default XkbRules value (can be overriden by -keybd options)\n");
|
||||
ErrorF("-xkb-model Set default XkbModel value (can be overriden by -keybd options)\n");
|
||||
ErrorF("-xkb-layout Set default XkbLayout value (can be overriden by -keybd options)\n");
|
||||
ErrorF("-xkb-variant Set default XkbVariant value (can be overriden by -keybd options)\n");
|
||||
ErrorF("-xkb-options Set default XkbOptions value (can be overriden by -keybd options)\n");
|
||||
ErrorF("-zaphod Disable cursor screen switching\n");
|
||||
ErrorF("-2button Emulate 3 button mouse\n");
|
||||
ErrorF("-3button Disable 3 button mouse emulation\n");
|
||||
|
@ -563,6 +573,46 @@ KdProcessArgument(int argc, char **argv, int i)
|
|||
sscanf(argv[i], "vt%2d", &kdVirtualTerminal) == 1) {
|
||||
return 1;
|
||||
}
|
||||
if (!strcmp(argv[i], "-xkb-rules")) {
|
||||
if (i + 1 >= argc) {
|
||||
UseMsg();
|
||||
FatalError("Missing argument for option -xkb-rules.\n");
|
||||
}
|
||||
kdGlobalXkbRules = argv[i + 1];
|
||||
return 2;
|
||||
}
|
||||
if (!strcmp(argv[i], "-xkb-model")) {
|
||||
if (i + 1 >= argc) {
|
||||
UseMsg();
|
||||
FatalError("Missing argument for option -xkb-model.\n");
|
||||
}
|
||||
kdGlobalXkbModel = argv[i + 1];
|
||||
return 2;
|
||||
}
|
||||
if (!strcmp(argv[i], "-xkb-layout")) {
|
||||
if (i + 1 >= argc) {
|
||||
UseMsg();
|
||||
FatalError("Missing argument for option -xkb-layout.\n");
|
||||
}
|
||||
kdGlobalXkbLayout = argv[i + 1];
|
||||
return 2;
|
||||
}
|
||||
if (!strcmp(argv[i], "-xkb-variant")) {
|
||||
if (i + 1 >= argc) {
|
||||
UseMsg();
|
||||
FatalError("Missing argument for option -xkb-variant.\n");
|
||||
}
|
||||
kdGlobalXkbVariant = argv[i + 1];
|
||||
return 2;
|
||||
}
|
||||
if (!strcmp(argv[i], "-xkb-options")) {
|
||||
if (i + 1 >= argc) {
|
||||
UseMsg();
|
||||
FatalError("Missing argument for option -xkb-options.\n");
|
||||
}
|
||||
kdGlobalXkbOptions = argv[i + 1];
|
||||
return 2;
|
||||
}
|
||||
if (!strcmp(argv[i], "-mouse") || !strcmp(argv[i], "-pointer")) {
|
||||
if (i + 1 >= argc)
|
||||
UseMsg();
|
||||
|
|
|
@ -102,6 +102,12 @@ static int kdNumInputFds;
|
|||
|
||||
extern Bool kdRawPointerCoordinates;
|
||||
|
||||
extern const char *kdGlobalXkbRules;
|
||||
extern const char *kdGlobalXkbModel;
|
||||
extern const char *kdGlobalXkbLayout;
|
||||
extern const char *kdGlobalXkbVariant;
|
||||
extern const char *kdGlobalXkbOptions;
|
||||
|
||||
static void
|
||||
KdSigio(int sig)
|
||||
{
|
||||
|
@ -909,11 +915,11 @@ KdNewKeyboard(void)
|
|||
ki->options = NULL;
|
||||
ki->name = strdup("Generic Keyboard");
|
||||
ki->path = NULL;
|
||||
ki->xkbRules = strdup(XKB_DFLT_RULES);
|
||||
ki->xkbModel = strdup(XKB_DFLT_MODEL);
|
||||
ki->xkbLayout = strdup(XKB_DFLT_LAYOUT);
|
||||
ki->xkbVariant = strdup(XKB_DFLT_VARIANT);
|
||||
ki->xkbOptions = strdup(XKB_DFLT_OPTIONS);
|
||||
ki->xkbRules = strdup(kdGlobalXkbRules ? kdGlobalXkbRules : XKB_DFLT_RULES);
|
||||
ki->xkbModel = strdup(kdGlobalXkbModel ? kdGlobalXkbModel : XKB_DFLT_MODEL);
|
||||
ki->xkbLayout = strdup(kdGlobalXkbLayout ? kdGlobalXkbLayout : XKB_DFLT_LAYOUT);
|
||||
ki->xkbVariant = strdup(kdGlobalXkbVariant ? kdGlobalXkbVariant :XKB_DFLT_VARIANT);
|
||||
ki->xkbOptions = strdup(kdGlobalXkbOptions ? kdGlobalXkbOptions : XKB_DFLT_OPTIONS);
|
||||
|
||||
return ki;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue