aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/hw')
-rw-r--r--xorg-server/hw/xfree86/common/xf86Module.h2
-rw-r--r--xorg-server/hw/xfree86/common/xf86Xinput.c4
-rw-r--r--xorg-server/hw/xfree86/os-support/linux/lnx_init.c12
-rw-r--r--xorg-server/hw/xwayland/xwayland-cursor.c26
-rw-r--r--xorg-server/hw/xwayland/xwayland-input.c2
-rw-r--r--xorg-server/hw/xwayland/xwayland.c4
-rw-r--r--xorg-server/hw/xwayland/xwayland.h4
7 files changed, 39 insertions, 15 deletions
diff --git a/xorg-server/hw/xfree86/common/xf86Module.h b/xorg-server/hw/xfree86/common/xf86Module.h
index 25a8869b0..66c2bb5a9 100644
--- a/xorg-server/hw/xfree86/common/xf86Module.h
+++ b/xorg-server/hw/xfree86/common/xf86Module.h
@@ -81,7 +81,7 @@ typedef enum {
*/
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4)
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(19, 0)
-#define ABI_XINPUT_VERSION SET_ABI_VERSION(22, 0)
+#define ABI_XINPUT_VERSION SET_ABI_VERSION(22, 1)
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(9, 0)
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 6)
diff --git a/xorg-server/hw/xfree86/common/xf86Xinput.c b/xorg-server/hw/xfree86/common/xf86Xinput.c
index 55bf2bbe4..a5b056881 100644
--- a/xorg-server/hw/xfree86/common/xf86Xinput.c
+++ b/xorg-server/hw/xfree86/common/xf86Xinput.c
@@ -1138,12 +1138,16 @@ xf86CheckMotionEvent4DGA(DeviceIntPtr device, int is_absolute,
dx = valuator_mask_get(mask, 0);
if (is_absolute)
dx -= device->last.valuators[0];
+ else if (valuator_mask_has_unaccelerated(mask))
+ dx = valuator_mask_get_unaccelerated(mask, 0);
}
if (valuator_mask_isset(mask, 1)) {
dy = valuator_mask_get(mask, 1);
if (is_absolute)
dy -= device->last.valuators[1];
+ else if (valuator_mask_has_unaccelerated(mask))
+ dy = valuator_mask_get_unaccelerated(mask, 1);
}
if (DGAStealMotionEvent(device, idx, dx, dy))
diff --git a/xorg-server/hw/xfree86/os-support/linux/lnx_init.c b/xorg-server/hw/xfree86/os-support/linux/lnx_init.c
index 94853070d..a0e6782b0 100644
--- a/xorg-server/hw/xfree86/os-support/linux/lnx_init.c
+++ b/xorg-server/hw/xfree86/os-support/linux/lnx_init.c
@@ -190,18 +190,6 @@ xf86OpenConsole(void)
else
activeVT = vts.v_active;
-#if 0
- if (!KeepTty) {
- /*
- * Detach from the controlling tty to avoid char loss
- */
- if ((i = open("/dev/tty", O_RDWR)) >= 0) {
- SYSCALL(ioctl(i, TIOCNOTTY, 0));
- close(i);
- }
- }
-#endif
-
if (!xf86Info.ShareVTs) {
struct termios nTty;
diff --git a/xorg-server/hw/xwayland/xwayland-cursor.c b/xorg-server/hw/xwayland/xwayland-cursor.c
index 5a9d1fe70..c137e1ec0 100644
--- a/xorg-server/hw/xwayland/xwayland-cursor.c
+++ b/xorg-server/hw/xwayland/xwayland-cursor.c
@@ -82,6 +82,23 @@ xwl_unrealize_cursor(DeviceIntPtr device, ScreenPtr screen, CursorPtr cursor)
return xwl_shm_destroy_pixmap(pixmap);
}
+static void
+frame_callback(void *data,
+ struct wl_callback *callback,
+ uint32_t time)
+{
+ struct xwl_seat *xwl_seat = data;
+ xwl_seat->cursor_frame_cb = NULL;
+ if (xwl_seat->cursor_needs_update) {
+ xwl_seat->cursor_needs_update = FALSE;
+ xwl_seat_set_cursor(xwl_seat);
+ }
+}
+
+static const struct wl_callback_listener frame_listener = {
+ frame_callback
+};
+
void
xwl_seat_set_cursor(struct xwl_seat *xwl_seat)
{
@@ -98,6 +115,11 @@ xwl_seat_set_cursor(struct xwl_seat *xwl_seat)
return;
}
+ if (xwl_seat->cursor_frame_cb) {
+ xwl_seat->cursor_needs_update = TRUE;
+ return;
+ }
+
cursor = xwl_seat->x_cursor;
pixmap = dixGetPrivate(&cursor->devPrivates, &xwl_cursor_private_key);
stride = cursor->bits->width * 4;
@@ -117,6 +139,10 @@ xwl_seat_set_cursor(struct xwl_seat *xwl_seat)
wl_surface_damage(xwl_seat->cursor, 0, 0,
xwl_seat->x_cursor->bits->width,
xwl_seat->x_cursor->bits->height);
+
+ xwl_seat->cursor_frame_cb = wl_surface_frame(xwl_seat->cursor);
+ wl_callback_add_listener(xwl_seat->cursor_frame_cb, &frame_listener, xwl_seat);
+
wl_surface_commit(xwl_seat->cursor);
}
diff --git a/xorg-server/hw/xwayland/xwayland-input.c b/xorg-server/hw/xwayland/xwayland-input.c
index 78d9702ac..a6fbab5bb 100644
--- a/xorg-server/hw/xwayland/xwayland-input.c
+++ b/xorg-server/hw/xwayland/xwayland-input.c
@@ -563,6 +563,8 @@ xwl_seat_destroy(struct xwl_seat *xwl_seat)
RemoveDevice(xwl_seat->keyboard, FALSE);
wl_seat_destroy(xwl_seat->seat);
wl_surface_destroy(xwl_seat->cursor);
+ if (xwl_seat->cursor_frame_cb)
+ wl_callback_destroy(xwl_seat->cursor_frame_cb);
wl_array_release(&xwl_seat->keys);
free(xwl_seat);
}
diff --git a/xorg-server/hw/xwayland/xwayland.c b/xorg-server/hw/xwayland/xwayland.c
index 7e8d667d6..bc92beb38 100644
--- a/xorg-server/hw/xwayland/xwayland.c
+++ b/xorg-server/hw/xwayland/xwayland.c
@@ -483,7 +483,7 @@ listen_on_fds(struct xwl_screen *xwl_screen)
int i;
for (i = 0; i < xwl_screen->listen_fd_count; i++)
- ListenOnOpenFD(xwl_screen->listen_fds[i], TRUE);
+ ListenOnOpenFD(xwl_screen->listen_fds[i], FALSE);
}
static void
@@ -702,4 +702,6 @@ InitOutput(ScreenInfo * screen_info, int argc, char **argv)
if (AddScreen(xwl_screen_init, argc, argv) == -1) {
FatalError("Couldn't add screen\n");
}
+
+ LocalAccessScopeUser();
}
diff --git a/xorg-server/hw/xwayland/xwayland.h b/xorg-server/hw/xwayland/xwayland.h
index cfb343d36..28b0c995e 100644
--- a/xorg-server/hw/xwayland/xwayland.h
+++ b/xorg-server/hw/xwayland/xwayland.h
@@ -115,12 +115,14 @@ struct xwl_seat {
struct wl_pointer *wl_pointer;
struct wl_keyboard *wl_keyboard;
struct wl_array keys;
- struct wl_surface *cursor;
struct xwl_window *focus_window;
uint32_t id;
uint32_t pointer_enter_serial;
struct xorg_list link;
CursorPtr x_cursor;
+ struct wl_surface *cursor;
+ struct wl_callback *cursor_frame_cb;
+ Bool cursor_needs_update;
size_t keymap_size;
char *keymap;