From 0b76548a62a990851f92d6781ccdfc9931d3e4bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?La=C3=A9rcio=20de=20Sousa?= Date: Thu, 3 Sep 2015 15:00:51 -0300 Subject: [PATCH kdrive/ephyr 5/9] kdrive: add options to set default XKB properties MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch introduces convenient command-line options -xkbrules, -xkbmodel, -xkblayout, -xkbvariant, and -xkboptions, to set default values for these properties. These options can be handful in cases where corresponding values can't be taken from devices' udev properties, and compile-time default values don't match user locale. Signed-off-by: LaƩrcio de Sousa --- hw/kdrive/src/kdrive.c | 40 ++++++++++++++++++++++++++++++++++++++++ hw/kdrive/src/kinput.c | 16 +++++++++++----- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 8930ace..1578458 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -85,6 +85,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; @@ -451,6 +456,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("-xkbrules Set default XkbRules value (can be overriden by -keybd options)\n"); + ErrorF("-xkbmodel Set default XkbModel value (can be overriden by -keybd options)\n"); + ErrorF("-xkblayout Set default XkbLayout value (can be overriden by -keybd options)\n"); + ErrorF("-xkbvariant Set default XkbVariant value (can be overriden by -keybd options)\n"); + ErrorF("-xkboptions 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"); @@ -559,6 +569,36 @@ KdProcessArgument(int argc, char **argv, int i) sscanf(argv[i], "vt%2d", &kdVirtualTerminal) == 1) { return 1; } + if (!strcmp(argv[i], "-xkbrules")) { + if (i + 1 >= argc) + UseMsg(); + kdGlobalXkbRules = argv[i + 1]; + return 2; + } + if (!strcmp(argv[i], "-xkbmodel")) { + if (i + 1 >= argc) + UseMsg(); + kdGlobalXkbModel = argv[i + 1]; + return 2; + } + if (!strcmp(argv[i], "-xkblayout")) { + if (i + 1 >= argc) + UseMsg(); + kdGlobalXkbLayout = argv[i + 1]; + return 2; + } + if (!strcmp(argv[i], "-xkbvariant")) { + if (i + 1 >= argc) + UseMsg(); + kdGlobalXkbVariant = argv[i + 1]; + return 2; + } + if (!strcmp(argv[i], "-xkboptions")) { + if (i + 1 >= argc) + UseMsg(); + 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 e9a5f24..0acf82e 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) { @@ -931,11 +937,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.1.4