xserver: Branch 'master' - 5 commits
Adam Jackson
ajax at kemper.freedesktop.org
Mon Feb 8 21:13:10 CET 2016
hw/kdrive/ephyr/ephyrinit.c | 42 ++++++++++--------
hw/kdrive/linux/evdev.c | 6 +-
hw/kdrive/src/kinput.c | 101 +++++++++++++++++++++++---------------------
3 files changed, 84 insertions(+), 65 deletions(-)
New commits:
commit da69f2f15a9917c3ed04e305061683c41338126e
Author: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
Date: Fri Dec 11 11:43:14 2015 -0200
ephyr: don't load ephyr input driver if -seat option is passed
When used for single-GPU multi-seat purposes, there's no need to enable
ephyr virtual input devices, since Xephyr is supposed to handle its own
hardware devices.
Reviewed-by: Adam Jackson <ajax at redhat.com>
Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index 9ddf86e..849a4e1 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -91,29 +91,30 @@ InitInput(int argc, char **argv)
KdKeyboardInfo *ki;
KdPointerInfo *pi;
- KdAddKeyboardDriver(&EphyrKeyboardDriver);
#ifdef KDRIVE_EVDEV
KdAddKeyboardDriver(&LinuxEvdevKeyboardDriver);
-#endif
- KdAddPointerDriver(&EphyrMouseDriver);
-#ifdef KDRIVE_EVDEV
KdAddPointerDriver(&LinuxEvdevMouseDriver);
#endif
- if (!kdHasKbd) {
- ki = KdNewKeyboard();
- if (!ki)
- FatalError("Couldn't create Xephyr keyboard\n");
- ki->driver = &EphyrKeyboardDriver;
- KdAddKeyboard(ki);
- }
+ if (!SeatId) {
+ KdAddKeyboardDriver(&EphyrKeyboardDriver);
+ KdAddPointerDriver(&EphyrMouseDriver);
- if (!kdHasPointer) {
- pi = KdNewPointer();
- if (!pi)
- FatalError("Couldn't create Xephyr pointer\n");
- pi->driver = &EphyrMouseDriver;
- KdAddPointer(pi);
+ if (!kdHasKbd) {
+ ki = KdNewKeyboard();
+ if (!ki)
+ FatalError("Couldn't create Xephyr keyboard\n");
+ ki->driver = &EphyrKeyboardDriver;
+ KdAddKeyboard(ki);
+ }
+
+ if (!kdHasPointer) {
+ pi = KdNewPointer();
+ if (!pi)
+ FatalError("Couldn't create Xephyr pointer\n");
+ pi->driver = &EphyrMouseDriver;
+ KdAddPointer(pi);
+ }
}
KdInitInput();
commit 7213e99cbc38a60f0076bc2115b144798ea4c3ba
Author: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
Date: Fri Dec 11 11:43:13 2015 -0200
ephyr: ignore Xorg multiseat command line options
Multi-seat-capable display managers commonly pass command-line options
like "-novtswitch", "-sharevts", or "-layout seatXXXX" to Xorg server,
but Xephyr currently refuses to start if these options are passed to it,
which may break Xephyr-based single-GPU multiseat setups.
[ajax: shortened summary]
Reviewed-by: Adam Jackson <ajax at redhat.com>
Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index 6b6c4b1..9ddf86e 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -356,6 +356,13 @@ ddxProcessArgument(int argc, char **argv, int i)
EphyrWantNoHostGrab = 1;
return 1;
}
+ else if (!strcmp(argv[i], "-sharevts") ||
+ !strcmp(argv[i], "-novtswitch")) {
+ return 1;
+ }
+ else if (!strcmp(argv[i], "-layout")) {
+ return 2;
+ }
return KdProcessArgument(argc, argv, i);
}
commit edd443f69ea385a957b8eae0b066ad8e77fb947b
Author: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
Date: Fri Dec 11 11:43:11 2015 -0200
kdrive: don't let evdev driver overwrite existing device names
KDrive evdev driver deliberately name grabbed devices as "Evdev mouse"
or "Evdev keyboard". This patch will make it skip this step if grabbed
devices are already named (i.e. from udev).
Reviewed-by: Adam Jackson <ajax at redhat.com>
Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
diff --git a/hw/kdrive/linux/evdev.c b/hw/kdrive/linux/evdev.c
index 63e8409..cdd45e7 100644
--- a/hw/kdrive/linux/evdev.c
+++ b/hw/kdrive/linux/evdev.c
@@ -220,7 +220,8 @@ EvdevPtrInit(KdPointerInfo * pi)
close(fd);
- pi->name = strdup("Evdev mouse");
+ if (!pi->name)
+ pi->name = strdup("Evdev mouse");
return Success;
}
@@ -390,7 +391,8 @@ EvdevKbdInit(KdKeyboardInfo * ki)
close(fd);
- ki->name = strdup("Evdev keyboard");
+ if (!ki->name)
+ ki->name = strdup("Evdev keyboard");
readMapping(ki);
commit 0b80da0d18713df4712c05973388b6226bb0227f
Author: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
Date: Fri Dec 11 11:43:07 2015 -0200
kdrive: set "evdev" driver for input devices automatically, if available.
If kdrive input driver "evdev" is available, no other driver was
explicitly set for a given input device, and its kernel device node is
/dev/input/event*, this patch will make kdrive set "evdev" driver
automatically for such device.
Reviewed-by: Adam Jackson <ajax at redhat.com>
Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 980fd3e..3a1c6a0 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -51,6 +51,11 @@
#include "inpututils.h"
#include "optionstr.h"
+#ifdef KDRIVE_EVDEV
+#define DEV_INPUT_EVENT_PREFIX "/dev/input/event"
+#define DEV_INPUT_EVENT_PREFIX_LEN (sizeof(DEV_INPUT_EVENT_PREFIX) - 1)
+#endif
+
#define AtomFromName(x) MakeAtom(x, strlen(x), 1)
struct KdConfigDevice {
@@ -1097,6 +1102,16 @@ KdParseKbdOptions(KdKeyboardInfo * ki)
ErrorF("Kbd option key (%s) of value (%s) not assigned!\n",
key, value);
}
+
+#ifdef KDRIVE_EVDEV
+ if (!ki->driver && ki->path != NULL &&
+ strncasecmp(ki->path,
+ DEV_INPUT_EVENT_PREFIX,
+ DEV_INPUT_EVENT_PREFIX_LEN) == 0) {
+ ki->driver = KdFindKeyboardDriver("evdev");
+ ki->options = input_option_new(ki->options, "driver", "evdev");
+ }
+#endif
}
KdKeyboardInfo *
@@ -1191,6 +1206,16 @@ KdParsePointerOptions(KdPointerInfo * pi)
ErrorF("Pointer option key (%s) of value (%s) not assigned!\n",
key, value);
}
+
+#ifdef KDRIVE_EVDEV
+ if (!pi->driver && pi->path != NULL &&
+ strncasecmp(pi->path,
+ DEV_INPUT_EVENT_PREFIX,
+ DEV_INPUT_EVENT_PREFIX_LEN) == 0) {
+ pi->driver = KdFindPointerDriver("evdev");
+ pi->options = input_option_new(pi->options, "driver", "evdev");
+ }
+#endif
}
KdPointerInfo *
commit 6d6fd688ecf95f2e84f2af276d681ff42f9d5610
Author: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
Date: Fri Dec 11 11:43:06 2015 -0200
kdrive: fix up NewInputDeviceRequest() implementation
This patch simplifies NewInputDeviceRequest() implementation in
kinput.c, making use of improved KdParseKbdOptions() /
KdParsePointerOptions() and merging several "if (ki)"/"if (pi)" clauses.
Reviewed-by: Adam Jackson <ajax at redhat.com>
Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 1fdaa52..980fd3e 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -1091,6 +1091,8 @@ KdParseKbdOptions(KdKeyboardInfo * ki)
ki->xkbOptions = strdup(value);
else if (!strcasecmp(key, "device"))
ki->path = strdup(value);
+ else if (!strcasecmp(key, "driver"))
+ ki->driver = KdFindKeyboardDriver(value);
else
ErrorF("Kbd option key (%s) of value (%s) not assigned!\n",
key, value);
@@ -1171,18 +1173,20 @@ KdParsePointerOptions(KdPointerInfo * pi)
const char *key = input_option_get_key(option);
const char *value = input_option_get_value(option);
- if (!strcmp(key, "emulatemiddle"))
+ if (!strcasecmp(key, "emulatemiddle"))
pi->emulateMiddleButton = TRUE;
- else if (!strcmp(key, "noemulatemiddle"))
+ else if (!strcasecmp(key, "noemulatemiddle"))
pi->emulateMiddleButton = FALSE;
- else if (!strcmp(key, "transformcoord"))
+ else if (!strcasecmp(key, "transformcoord"))
pi->transformCoordinates = TRUE;
- else if (!strcmp(key, "rawcoord"))
+ else if (!strcasecmp(key, "rawcoord"))
pi->transformCoordinates = FALSE;
else if (!strcasecmp(key, "device"))
pi->path = strdup(value);
else if (!strcasecmp(key, "protocol"))
pi->protocol = strdup(value);
+ else if (!strcasecmp(key, "driver"))
+ pi->driver = KdFindPointerDriver(value);
else
ErrorF("Pointer option key (%s) of value (%s) not assigned!\n",
key, value);
@@ -2152,68 +2156,48 @@ NewInputDeviceRequest(InputOption *options, InputAttributes * attrs,
#endif
}
- if (!ki && !pi) {
- ErrorF("unrecognised device identifier!\n");
- return BadValue;
- }
-
- /* FIXME: change this code below to use KdParseKbdOptions and
- * KdParsePointerOptions */
- nt_list_for_each_entry(option, options, list.next) {
- const char *key = input_option_get_key(option);
- const char *value = input_option_get_value(option);
+ if (pi) {
+ pi->options = options;
+ KdParsePointerOptions(pi);
- if (strcmp(key, "device") == 0) {
- if (pi && value)
- pi->path = strdup(value);
- else if (ki && value)
- ki->path = strdup(value);
- }
- else if (strcmp(key, "driver") == 0) {
- if (pi) {
- pi->driver = KdFindPointerDriver(value);
- if (!pi->driver) {
- ErrorF("couldn't find driver!\n");
- KdFreePointer(pi);
- return BadValue;
- }
- pi->options = options;
- }
- else if (ki) {
- ki->driver = KdFindKeyboardDriver(value);
- if (!ki->driver) {
- ErrorF("couldn't find driver!\n");
- KdFreeKeyboard(ki);
- return BadValue;
- }
- ki->options = options;
- }
+ if (!pi->driver) {
+ ErrorF("couldn't find driver!\n");
+ KdFreePointer(pi);
+ return BadValue;
}
- }
- if (pi) {
if (KdAddPointer(pi) != Success ||
ActivateDevice(pi->dixdev, TRUE) != Success ||
EnableDevice(pi->dixdev, TRUE) != TRUE) {
ErrorF("couldn't add or enable pointer\n");
return BadImplementation;
}
+
+ *pdev = pi->dixdev;
}
else if (ki) {
+ ki->options = options;
+ KdParseKbdOptions(ki);
+
+ if (!ki->driver) {
+ ErrorF("couldn't find driver!\n");
+ KdFreeKeyboard(ki);
+ return BadValue;
+ }
+
if (KdAddKeyboard(ki) != Success ||
ActivateDevice(ki->dixdev, TRUE) != Success ||
EnableDevice(ki->dixdev, TRUE) != TRUE) {
ErrorF("couldn't add or enable keyboard\n");
return BadImplementation;
}
- }
- if (pi) {
- *pdev = pi->dixdev;
- }
- else if (ki) {
*pdev = ki->dixdev;
}
+ else {
+ ErrorF("unrecognised device identifier!\n");
+ return BadValue;
+ }
return Success;
}
More information about the xorg-commit
mailing list