[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