[PATCH kdrive/ephyr v8 2/4] kdrive: add options to set default XKB properties
Laércio de Sousa
laerciosousa at sme-mogidascruzes.sp.gov.br
Fri Feb 12 16:18:00 UTC 2016
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).
Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
---
hw/kdrive/src/kdrive.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
hw/kdrive/src/kinput.c | 16 +++++++++++-----
2 files changed, 61 insertions(+), 5 deletions(-)
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
index 1817303..49064ef 100644
--- a/hw/kdrive/src/kdrive.c
+++ b/hw/kdrive/src/kdrive.c
@@ -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();
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index e2c081e..e4966b7 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -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;
}
--
2.7.1
More information about the xorg-devel
mailing list