[kdrive/ephyr,v3,3/3] ephyr: move SetNotifyFd()/RemoveNotifyFd() calls outside ephyr mouse driver

Submitted by Laércio de Sousa on May 25, 2016, 1:26 p.m.

Details

Message ID 1464182815-15480-3-git-send-email-laerciosousa@sme-mogidascruzes.sp.gov.br
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in X.org (DEPRECATED - USE GITLAB)

Not browsing as part of any series.

Commit Message

Laércio de Sousa May 25, 2016, 1:26 p.m.
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@sme-mogidascruzes.sp.gov.br>
---
 hw/kdrive/ephyr/ephyr.c |  4 ++--
 hw/kdrive/ephyr/hostx.c | 17 +++++++++--------
 2 files changed, 11 insertions(+), 10 deletions(-)

Patch hide | download patch | download mbox

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)