intel-virtual-output: Do not hide the cursor on the local/source display
authorChris Wilson <chris@chris-wilson.co.uk>
Sun, 10 Nov 2013 10:34:06 +0000 (10:34 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Sun, 10 Nov 2013 10:35:27 +0000 (10:35 +0000)
Whilst we want to take over and hide the cursor on the remote displays,
on the source we need to not interfere with the host.

Reported-by: Jethro Beekman <freedesktop-bugs@jbeekman.nl>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71439
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
tools/virtual.c

index 5452f45..48fe347 100644 (file)
@@ -1136,6 +1136,8 @@ static void display_flush_cursor(struct display *display)
                y = display->cursor_y++ & 31;
        }
 
+       DBG(("%s setting cursor position (%d, %d), visible? %d\n",
+            DisplayString(c->dst.dpy), x, y, display->cursor_visible));
        XWarpPointer(display->dpy, None, display->root, 0, 0, 0, 0, x, y);
 
        cursor = None;
@@ -1680,6 +1682,7 @@ static int clone_init_depth(struct clone *clone)
 static int add_display(struct context *ctx, Display *dpy)
 {
        struct display *display;
+       int first_display = ctx->ndisplay == 0;
 
        if (is_power_of_2(ctx->ndisplay)) {
                struct display *new_display;
@@ -1719,10 +1722,11 @@ static int add_display(struct context *ctx, Display *dpy)
        if (XineramaQueryExtension(dpy, &display->xinerama_event, &display->xinerama_error))
                display->xinerama_active = XineramaIsActive(dpy);
 
-       display->invisible_cursor = display_load_invisible_cursor(display);
-       display->cursor = None;
-
-       display_cursor_move(display, 0, 0, 0);
+       /* first display (source) is slightly special */
+       if (!first_display) {
+               display->invisible_cursor = display_load_invisible_cursor(display);
+               display_cursor_move(display, 0, 0, 0);
+       }
 
        return ConnectionNumber(dpy);
 }