[PATCH kdrive/ephyr v3 3/3] ephyr: move SetNotifyFd()/RemoveNotifyFd() calls outside ephyr mouse driver
Laércio de Sousa
laerciosousa at sme-mogidascruzes.sp.gov.br
Wed May 25 13:26:55 UTC 2016
When Xephyr is launched in multi-seat mode (i.e. with command-line option
"-seat seatXXXX"), ephyr virtual keyboard/mouse driver is not loaded.
Without this patch, Xephyr won't listen to any events in multi-seat mode,
including XCB_EXPOSE and XCB_CONFIGURE_NOTIFY, which may be needed even
for this mode.
v2: Don't register XCB input events when creating a new Xephyr window,
if -seat option is passed.
v3: Assume function hostx_create_window() was removed by previous patch.
Signed-off-by: Laércio de Sousa <laerciosousa at sme-mogidascruzes.sp.gov.br>
---
hw/kdrive/ephyr/ephyr.c | 4 ++--
hw/kdrive/ephyr/hostx.c | 17 +++++++++--------
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index f6897cc..9eae0c7 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -709,6 +709,7 @@ ephyrPreserve(KdCardInfo * card)
Bool
ephyrEnable(ScreenPtr pScreen)
{
+ SetNotifyFd(hostx_get_fd(), ephyrXcbNotify, X_NOTIFY_READ, NULL);
return TRUE;
}
@@ -721,6 +722,7 @@ ephyrDPMS(ScreenPtr pScreen, int mode)
void
ephyrDisable(ScreenPtr pScreen)
{
+ RemoveNotifyFd(hostx_get_fd());
}
void
@@ -1257,7 +1259,6 @@ static Status
MouseEnable(KdPointerInfo * pi)
{
((EphyrPointerPrivate *) pi->driverPrivate)->enabled = TRUE;
- SetNotifyFd(hostx_get_fd(), ephyrXcbNotify, X_NOTIFY_READ, NULL);
return Success;
}
@@ -1265,7 +1266,6 @@ static void
MouseDisable(KdPointerInfo * pi)
{
((EphyrPointerPrivate *) pi->driverPrivate)->enabled = FALSE;
- RemoveNotifyFd(hostx_get_fd());
return;
}
diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
index 8eb02b1..7e45828 100644
--- a/hw/kdrive/ephyr/hostx.c
+++ b/hw/kdrive/ephyr/hostx.c
@@ -431,16 +431,17 @@ hostx_init(void)
xcb_screen_t *xscreen;
xcb_rectangle_t rect = { 0, 0, 1, 1 };
- attrs[0] =
- XCB_EVENT_MASK_BUTTON_PRESS
- | XCB_EVENT_MASK_BUTTON_RELEASE
- | XCB_EVENT_MASK_POINTER_MOTION
- | XCB_EVENT_MASK_KEY_PRESS
- | XCB_EVENT_MASK_KEY_RELEASE
- | XCB_EVENT_MASK_EXPOSURE
- | XCB_EVENT_MASK_STRUCTURE_NOTIFY;
+ attrs[0] = XCB_EVENT_MASK_EXPOSURE
+ | XCB_EVENT_MASK_STRUCTURE_NOTIFY;
attr_mask |= XCB_CW_EVENT_MASK;
+ if (!SeatId)
+ attrs[0] |= XCB_EVENT_MASK_BUTTON_PRESS
+ | XCB_EVENT_MASK_BUTTON_RELEASE
+ | XCB_EVENT_MASK_POINTER_MOTION
+ | XCB_EVENT_MASK_KEY_PRESS
+ | XCB_EVENT_MASK_KEY_RELEASE;
+
EPHYR_DBG("mark");
#ifdef GLAMOR
if (ephyr_glamor)
--
2.7.4
More information about the xorg-devel
mailing list