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. Signed-off-by: Laércio de Sousa <laercioso...@sme-mogidascruzes.sp.gov.br> --- hw/kdrive/ephyr/ephyr.c | 4 ++-- hw/kdrive/ephyr/hostx.c | 33 ++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 17 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 cdb12b0..1ef8cec 100644 --- a/hw/kdrive/ephyr/hostx.c +++ b/hw/kdrive/ephyr/hostx.c @@ -430,16 +430,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) @@ -1348,19 +1349,21 @@ hostx_create_window(int a_screen_number, depth = xcb_aux_get_depth_of_visual(screen, a_visual_id); winmask = XCB_CW_EVENT_MASK | XCB_CW_COLORMAP; - 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; + attrs[0] = XCB_EVENT_MASK_EXPOSURE; attrs[1] = xcb_generate_id(HostX.conn); + + 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; + xcb_create_colormap(HostX.conn, XCB_COLORMAP_ALLOC_NONE, attrs[1], hostx_get_window(a_screen_number), a_visual_id); - win = xcb_generate_id(HostX.conn); xcb_create_window(HostX.conn, depth, -- 2.7.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel