xorg-server: Changes to 'ubuntu'
debian/changelog | 9 +
debian/patches/series | 1
debian/patches/xmir-desktop-file-hint-flag.patch | 15 +-
debian/patches/xmir-fixes.diff | 149 -----------------------
debian/patches/xmir.patch | 111 +++++++++--------
5 files changed, 82 insertions(+), 203 deletions(-)
New commits:
commit 49995bc9b0af37782d06b55731eab54621008b97
Author: Robert Ancell <robert.ancell@canonical.com>
Date: Fri Apr 29 15:03:30 2016 +0200
Update xmir.patch
diff --git a/debian/changelog b/debian/changelog
index dc35c4f..a6337c6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+xorg-server (2:1.18.3-1ubuntu3) yakkety; urgency=medium
+
+ * debian/patches/xmir.patch:
+ - Pass keymap from Mir to Xkb (LP: #1566487)
+ * debian/patches/xmir-fixes.diff:
+ - Merged into xmir.patch
+
+ -- Robert Ancell <robert.ancell@canonical.com> Fri, 29 Apr 2016 14:36:49 +0200
+
xorg-server (2:1.18.3-1ubuntu2) xenial; urgency=medium
* Disable 190_cache-xkbcomp_output_for_fast_start_up.patch for now,
diff --git a/debian/patches/series b/debian/patches/series
index 80c0c56..891be0f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -50,4 +50,3 @@ xmir.patch
xmir-desktop-file-hint-flag.patch
drm_device_keep_trying.patch
xi2-resize-touch.patch
-xmir-fixes.diff
diff --git a/debian/patches/xmir-desktop-file-hint-flag.patch b/debian/patches/xmir-desktop-file-hint-flag.patch
index 16e3152..f015ca3 100644
--- a/debian/patches/xmir-desktop-file-hint-flag.patch
+++ b/debian/patches/xmir-desktop-file-hint-flag.patch
@@ -1,16 +1,18 @@
-From 938313b76b0e3279a94af931cbe5fd34b8cb580c Mon Sep 17 00:00:00 2001
+From de9e6e1d66680e717471df2c4032e590fd1b9ae0 Mon Sep 17 00:00:00 2001
From: Robert Ancell <robert.ancell@canonical.com>
-Date: Mon, 13 Jul 2015 15:54:32 +1200
-Subject: [PATCH 3/4] xmir: Ignore --desktop_file_hint flag required by Unity8
- to decide which application is starting
+Date: Fri, 29 Apr 2016 14:58:28 +0200
+Subject: [PATCH xserver 2/3] xmir: Ignore --desktop_file_hint flag required by
+ Unity8 to decide which application is starting
---
hw/xmir/xmir.c | 3 +++
1 file changed, 3 insertions(+)
+diff --git a/hw/xmir/xmir.c b/hw/xmir/xmir.c
+index 5526958..ea85f1a 100644
--- a/hw/xmir/xmir.c
+++ b/hw/xmir/xmir.c
-@@ -168,6 +168,9 @@ ddxProcessArgument(int argc, char *argv[
+@@ -172,6 +172,9 @@ ddxProcessArgument(int argc, char *argv[], int i)
} else if (!strcmp(argv[i], "-novtswitch") ||
!strncmp(argv[i], "vt", 2)) {
return 1;
@@ -20,3 +22,6 @@ Subject: [PATCH 3/4] xmir: Ignore --desktop_file_hint flag required by Unity8
} else if (!strcmp(argv[i], "-fd")) {
if (!seen_shared)
NoListenAll = 1;
+--
+2.7.4
+
diff --git a/debian/patches/xmir-fixes.diff b/debian/patches/xmir-fixes.diff
deleted file mode 100644
index 1f95270..0000000
--- a/debian/patches/xmir-fixes.diff
+++ /dev/null
@@ -1,149 +0,0 @@
-Description: port xmir to 1.18
-
---- a/hw/xmir/xmir-output.c
-+++ b/hw/xmir/xmir-output.c
-@@ -327,10 +327,10 @@ xmir_output_handle_resize(struct xmir_wi
-
- if (xmir_screen->glamor) {
- glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
-- glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->base.fbo->fb);
-+ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->fbo->fb);
- glClearColor(0., 0., 0., 1.);
- glClear(GL_COLOR_BUFFER_BIT);
-- glamor_copy_n_to_n_nf(&screen->root->drawable, &pixmap->drawable,
-+ glamor_copy(&screen->root->drawable, &pixmap->drawable,
- NULL, ©_box, 1, 0, 0, FALSE, FALSE, 0, NULL);
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- } else {
---- a/hw/xmir/xmir.c
-+++ b/hw/xmir/xmir.c
-@@ -1246,7 +1246,7 @@ xmir_create_screen_resources(ScreenPtr s
- if (xmir_screen->glamor && !xmir_screen->rootless) {
- glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(screen->devPrivate);
-
-- glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->base.fbo->fb);
-+ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->fbo->fb);
- glClear(GL_COLOR_BUFFER_BIT);
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
-
---- a/hw/xmir/xmir-glamor.c
-+++ b/hw/xmir/xmir-glamor.c
-@@ -220,7 +220,7 @@ xmir_glamor_copy_egl_tex(int fbo, Drawab
-
- pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale);
-
-- if (src_pixmap_priv->base.gl_fbo == GLAMOR_FBO_UNATTACHED)
-+ if (src_pixmap_priv->gl_fbo == GLAMOR_FBO_UNATTACHED)
- FatalError("aeiou\n");
-
- glViewport(dx, dy, width + dx, height + dy);
-@@ -231,7 +231,7 @@ xmir_glamor_copy_egl_tex(int fbo, Drawab
-
- if (!fbo) {
- glActiveTexture(GL_TEXTURE0);
-- glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->base.fbo->tex);
-+ glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->fbo->tex);
-
- if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
-@@ -272,13 +272,8 @@ xmir_glamor_copy_egl_tex(int fbo, Drawab
- _tx1 = v_from_x_coord_x(dst_xscale, dbox.x1);
- _tx2 = v_from_x_coord_x(dst_xscale, dbox.x2);
-
-- if (xmir_screen->gbm) {
-- _ty1 = v_from_x_coord_y_inverted(dst_yscale, dbox.y1);
-- _ty2 = v_from_x_coord_y_inverted(dst_yscale, dbox.y2);
-- } else {
-- _ty1 = v_from_x_coord_y(dst_yscale, dbox.y1);
-- _ty2 = v_from_x_coord_y(dst_yscale, dbox.y2);
-- }
-+ _ty1 = v_from_x_coord_y(dst_yscale, dbox.y1);
-+ _ty2 = v_from_x_coord_y(dst_yscale, dbox.y2);
-
- /* upper left */
- vertices[0] = _tx1;
-@@ -317,13 +312,8 @@ xmir_glamor_copy_egl_tex(int fbo, Drawab
- _tx1 = v_from_x_coord_x(dst_xscale, dbox.x1);
- _tx2 = v_from_x_coord_x(dst_xscale, dbox.x2);
-
-- if (xmir_screen->gbm) {
-- _ty1 = v_from_x_coord_y_inverted(dst_yscale, dbox.y1);
-- _ty2 = v_from_x_coord_y_inverted(dst_yscale, dbox.y2);
-- } else {
-- _ty1 = v_from_x_coord_y(dst_yscale, dbox.y1);
-- _ty2 = v_from_x_coord_y(dst_yscale, dbox.y2);
-- }
-+ _ty1 = v_from_x_coord_y(dst_yscale, dbox.y1);
-+ _ty2 = v_from_x_coord_y(dst_yscale, dbox.y2);
-
- /* upper right */
- vertices[0] = _tx2;
-@@ -368,7 +358,7 @@ xmir_glamor_copy_egl_common(DrawablePtr
- DebugF("Box: (%i,%i)->(%i,%i)\n", ext->x1, ext->y1, ext->x2, ext->y2);
-
- if (epoxy_has_gl_extension("GL_EXT_framebuffer_blit") && !xmir_screen->doubled && !orientation) {
-- glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, src_pixmap_priv->base.fbo->fb);
-+ glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, src_pixmap_priv->fbo->fb);
-
- glBlitFramebuffer(ext->x1, ext->y2, ext->x2, ext->y1,
- ext->x1 + dx, ext->y2 + dy, ext->x2 + dx, ext->y1 + dy,
-@@ -404,7 +394,7 @@ xmir_glamor_copy_gbm(struct xmir_screen
- PixmapPtr from = screen->GetWindowPixmap(window);
- glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(back);
-
-- glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->base.fbo->fb);
-+ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->fbo->fb);
- xmir_glamor_copy_egl_common(&window->drawable, from, glamor_get_pixmap_private(from),
- RegionExtents(dirty),
- back->drawable.width, back->drawable.height, 0, 0, xmir_win->orientation);
-@@ -607,9 +597,9 @@ xmir_glamor_copy_egl_queue(struct xmir_s
- * rotating back and forth.
- */
- glamor_set_pixmap_type(src_pixmap, GLAMOR_TEXTURE_DRM);
-- src_pixmap_priv->base.fbo->external = TRUE;
-+ src_pixmap_priv->fbo->external = TRUE;
-
-- xmir_win->image = eglCreateImageKHR(xmir_screen->egl_display, xmir_screen->egl_context, EGL_GL_TEXTURE_2D_KHR, (EGLClientBuffer)(intptr_t)src_pixmap_priv->base.fbo->tex, attribs);
-+ xmir_win->image = eglCreateImageKHR(xmir_screen->egl_display, xmir_screen->egl_context, EGL_GL_TEXTURE_2D_KHR, (EGLClientBuffer)(intptr_t)src_pixmap_priv->fbo->tex, attribs);
- if (!xmir_win->image) {
- GLint error;
- ErrorF("eglCreateImageKHR failed with %x\n", eglGetError());
-@@ -1016,7 +1006,7 @@ glamor_egl_dri3_fd_name_from_tex(ScreenP
- }
-
- unsigned int
--glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h)
-+glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h, Bool linear)
- {
- return 0;
- }
-@@ -1144,10 +1134,7 @@ xmir_glamor_init(struct xmir_screen *xmi
- }
-
- if (!glamor_init(screen,
-- GLAMOR_INVERTED_Y_AXIS |
- GLAMOR_USE_EGL_SCREEN |
-- GLAMOR_USE_SCREEN |
-- GLAMOR_USE_PICTURE_SCREEN |
- GLAMOR_NO_DRI3)) {
- ErrorF("Failed to initialize glamor\n");
- return FALSE;
---- a/hw/xmir/xmir-input.c
-+++ b/hw/xmir/xmir-input.c
-@@ -378,15 +378,13 @@ xmir_window_handle_input_event(struct xm
- case mir_input_event_type_key: {
- MirKeyboardEvent const *kev;
- MirKeyboardAction action;
-- ValuatorMask mask;
-
- kev = mir_input_event_get_keyboard_event(ev);
- action = mir_keyboard_event_action(kev);
-
-- valuator_mask_zero(&mask);
- QueueKeyboardEvents(xmir_input->keyboard,
- action == mir_keyboard_action_up ? KeyRelease : KeyPress,
-- mir_keyboard_event_scan_code(kev) + 8, &mask);
-+ mir_keyboard_event_scan_code(kev) + 8);
- break;
- }
- case mir_input_event_type_touch: {
diff --git a/debian/patches/xmir.patch b/debian/patches/xmir.patch
index af257ce..4e772a9 100644
--- a/debian/patches/xmir.patch
+++ b/debian/patches/xmir.patch
@@ -1,7 +1,7 @@
-From efc26decfbefc45cdb36110c019272fbaf41284f Mon Sep 17 00:00:00 2001
+From b97cd5fc8d76dcb45fac1965c8251e7d31e641b3 Mon Sep 17 00:00:00 2001
From: Robert Ancell <robert.ancell@canonical.com>
-Date: Fri, 15 May 2015 14:58:59 +1200
-Subject: [PATCH 1/3] XMir DDX
+Date: Fri, 29 Apr 2016 14:57:53 +0200
+Subject: [PATCH xserver 1/3] XMir DDX
Contributions from:
Maarten Lankhorst <maarten.lankhorst@ubuntu.com>
@@ -22,13 +22,13 @@ Contributions from:
hw/xmir/xmir-cursor.c | 210 ++++++
hw/xmir/xmir-cvt.c | 304 +++++++++
hw/xmir/xmir-dri2.c | 545 +++++++++++++++
- hw/xmir/xmir-glamor.c | 1173 ++++++++++++++++++++++++++++++++
- hw/xmir/xmir-input.c | 566 ++++++++++++++++
+ hw/xmir/xmir-glamor.c | 1160 ++++++++++++++++++++++++++++++++
+ hw/xmir/xmir-input.c | 594 ++++++++++++++++
hw/xmir/xmir-output.c | 449 +++++++++++++
hw/xmir/xmir-thread-proxy.c | 109 +++
hw/xmir/xmir.c | 1564 +++++++++++++++++++++++++++++++++++++++++++
hw/xmir/xmir.h | 226 +++++++
- 18 files changed, 7725 insertions(+), 2 deletions(-)
+ 18 files changed, 7740 insertions(+), 2 deletions(-)
create mode 100644 hw/xmir/.gitignore
create mode 100644 hw/xmir/Makefile.am
create mode 100644 hw/xmir/dri2/Makefile.am
@@ -47,10 +47,10 @@ Contributions from:
create mode 100644 hw/xmir/xmir.h
diff --git a/configure.ac b/configure.ac
-index d8f0e74..56355fd 100644
+index 77cf234..8bf62a0 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -624,6 +624,7 @@ AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server
+@@ -628,6 +628,7 @@ AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server
AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest server (default: auto)]), [XNEST=$enableval], [XNEST=auto])
AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto])
AC_ARG_ENABLE(xwayland, AS_HELP_STRING([--enable-xwayland], [Build Xwayland server (default: auto)]), [XWAYLAND=$enableval], [XWAYLAND=auto])
@@ -58,7 +58,7 @@ index d8f0e74..56355fd 100644
AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no])
AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto])
AC_ARG_ENABLE(glamor, AS_HELP_STRING([--enable-glamor], [Build glamor dix module (default: no)]), [GLAMOR=$enableval], [GLAMOR=no])
-@@ -745,6 +746,7 @@ case $host_os in
+@@ -746,6 +747,7 @@ case $host_os in
XVFB=no
XNEST=no
XWAYLAND=no
@@ -66,7 +66,7 @@ index d8f0e74..56355fd 100644
COMPOSITE=no
DGA=no
-@@ -2474,6 +2476,27 @@ if test "x$XWAYLAND" = xyes; then
+@@ -2482,6 +2484,27 @@ if test "x$XWAYLAND" = xyes; then
[${WAYLAND_PREFIX}/bin$PATH_SEPARATOR$PATH])
fi
@@ -3799,10 +3799,10 @@ index 0000000..b24d4b9
+}
diff --git a/hw/xmir/xmir-glamor.c b/hw/xmir/xmir-glamor.c
new file mode 100644
-index 0000000..2438013
+index 0000000..7ad0245
--- /dev/null
+++ b/hw/xmir/xmir-glamor.c
-@@ -0,0 +1,1173 @@
+@@ -0,0 +1,1160 @@
+/*
+ * Copyright © 2015 Canonical Ltd
+ *
@@ -4025,7 +4025,7 @@ index 0000000..2438013
+
+ pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale);
+
-+ if (src_pixmap_priv->base.gl_fbo == GLAMOR_FBO_UNATTACHED)
++ if (src_pixmap_priv->gl_fbo == GLAMOR_FBO_UNATTACHED)
+ FatalError("aeiou\n");
+
+ glViewport(dx, dy, width + dx, height + dy);
@@ -4036,7 +4036,7 @@ index 0000000..2438013
+
+ if (!fbo) {
+ glActiveTexture(GL_TEXTURE0);
-+ glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->base.fbo->tex);
++ glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->fbo->tex);
+
+ if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
@@ -4077,13 +4077,8 @@ index 0000000..2438013
+ _tx1 = v_from_x_coord_x(dst_xscale, dbox.x1);
+ _tx2 = v_from_x_coord_x(dst_xscale, dbox.x2);
+
-+ if (xmir_screen->gbm) {
-+ _ty1 = v_from_x_coord_y_inverted(dst_yscale, dbox.y1);
-+ _ty2 = v_from_x_coord_y_inverted(dst_yscale, dbox.y2);
-+ } else {
-+ _ty1 = v_from_x_coord_y(dst_yscale, dbox.y1);
-+ _ty2 = v_from_x_coord_y(dst_yscale, dbox.y2);
-+ }
++ _ty1 = v_from_x_coord_y(dst_yscale, dbox.y1);
++ _ty2 = v_from_x_coord_y(dst_yscale, dbox.y2);
+
+ /* upper left */
+ vertices[0] = _tx1;
@@ -4122,13 +4117,8 @@ index 0000000..2438013
+ _tx1 = v_from_x_coord_x(dst_xscale, dbox.x1);
+ _tx2 = v_from_x_coord_x(dst_xscale, dbox.x2);
+
-+ if (xmir_screen->gbm) {
-+ _ty1 = v_from_x_coord_y_inverted(dst_yscale, dbox.y1);
-+ _ty2 = v_from_x_coord_y_inverted(dst_yscale, dbox.y2);
-+ } else {
-+ _ty1 = v_from_x_coord_y(dst_yscale, dbox.y1);
-+ _ty2 = v_from_x_coord_y(dst_yscale, dbox.y2);
-+ }
++ _ty1 = v_from_x_coord_y(dst_yscale, dbox.y1);
++ _ty2 = v_from_x_coord_y(dst_yscale, dbox.y2);
+
+ /* upper right */
+ vertices[0] = _tx2;
@@ -4173,7 +4163,7 @@ index 0000000..2438013
+ DebugF("Box: (%i,%i)->(%i,%i)\n", ext->x1, ext->y1, ext->x2, ext->y2);
+
+ if (epoxy_has_gl_extension("GL_EXT_framebuffer_blit") && !xmir_screen->doubled && !orientation) {
-+ glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, src_pixmap_priv->base.fbo->fb);
++ glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, src_pixmap_priv->fbo->fb);
+
+ glBlitFramebuffer(ext->x1, ext->y2, ext->x2, ext->y1,
+ ext->x1 + dx, ext->y2 + dy, ext->x2 + dx, ext->y1 + dy,
@@ -4209,7 +4199,7 @@ index 0000000..2438013
+ PixmapPtr from = screen->GetWindowPixmap(window);
+ glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(back);
+
-+ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->base.fbo->fb);
++ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->fbo->fb);
+ xmir_glamor_copy_egl_common(&window->drawable, from, glamor_get_pixmap_private(from),
+ RegionExtents(dirty),
+ back->drawable.width, back->drawable.height, 0, 0, xmir_win->orientation);
@@ -4412,9 +4402,9 @@ index 0000000..2438013
+ * rotating back and forth.
+ */
+ glamor_set_pixmap_type(src_pixmap, GLAMOR_TEXTURE_DRM);
-+ src_pixmap_priv->base.fbo->external = TRUE;
++ src_pixmap_priv->fbo->external = TRUE;
+
-+ xmir_win->image = eglCreateImageKHR(xmir_screen->egl_display, xmir_screen->egl_context, EGL_GL_TEXTURE_2D_KHR, (EGLClientBuffer)(intptr_t)src_pixmap_priv->base.fbo->tex, attribs);
++ xmir_win->image = eglCreateImageKHR(xmir_screen->egl_display, xmir_screen->egl_context, EGL_GL_TEXTURE_2D_KHR, (EGLClientBuffer)(intptr_t)src_pixmap_priv->fbo->tex, attribs);
+ if (!xmir_win->image) {
+ GLint error;
+ ErrorF("eglCreateImageKHR failed with %x\n", eglGetError());
@@ -4821,7 +4811,7 @@ index 0000000..2438013
+}
+
+unsigned int
-+glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h)
++glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h, Bool linear)
+{
+ return 0;
+}
@@ -4949,10 +4939,7 @@ index 0000000..2438013
+ }
+
+ if (!glamor_init(screen,
-+ GLAMOR_INVERTED_Y_AXIS |
+ GLAMOR_USE_EGL_SCREEN |
-+ GLAMOR_USE_SCREEN |
-+ GLAMOR_USE_PICTURE_SCREEN |
+ GLAMOR_NO_DRI3)) {
+ ErrorF("Failed to initialize glamor\n");
+ return FALSE;
@@ -4978,10 +4965,10 @@ index 0000000..2438013
+}
diff --git a/hw/xmir/xmir-input.c b/hw/xmir/xmir-input.c
new file mode 100644
-index 0000000..727fc56
+index 0000000..e5fd2d5
--- /dev/null
+++ b/hw/xmir/xmir-input.c
-@@ -0,0 +1,566 @@
+@@ -0,0 +1,594 @@
+/*
+ * Copyright © 2015 Canonical Ltd
+ *
@@ -5362,15 +5349,13 @@ index 0000000..727fc56
+ case mir_input_event_type_key: {
+ MirKeyboardEvent const *kev;
+ MirKeyboardAction action;
-+ ValuatorMask mask;
+
+ kev = mir_input_event_get_keyboard_event(ev);
+ action = mir_keyboard_event_action(kev);
+
-+ valuator_mask_zero(&mask);
+ QueueKeyboardEvents(xmir_input->keyboard,
+ action == mir_keyboard_action_up ? KeyRelease : KeyPress,
-+ mir_keyboard_event_scan_code(kev) + 8, &mask);
++ mir_keyboard_event_scan_code(kev) + 8);
+ break;
+ }
+ case mir_input_event_type_touch: {
@@ -5451,6 +5436,33 @@ index 0000000..727fc56
+}
+
+static void
++xmir_handle_keymap_event(struct xmir_input *xmir_input,
++ MirKeymapEvent const* ev)
++{
++ char * buffer = NULL;
++ size_t length = 0;
++ DeviceIntPtr master;
++ XkbDescPtr xkb;
++ XkbChangesRec changes = { 0 };
++
++ mir_keymap_event_get_keymap_buffer(ev, (char const **)&buffer, &length);
++
++ buffer[length] = '\0';
++
++ xkb = XkbCompileKeymapFromString(xmir_input->keyboard, buffer, length);
++
++ XkbUpdateDescActions(xkb, xkb->min_key_code, XkbNumKeys(xkb), &changes);
++
++ XkbDeviceApplyKeymap(xmir_input->keyboard, xkb);
++
++ master = GetMaster(xmir_input->keyboard, MASTER_KEYBOARD);
++ if (master && master->lastSlave == xmir_input->keyboard)
++ XkbDeviceApplyKeymap(master, xkb);
++
++ XkbFreeKeyboard(xkb, XkbAllComponentsMask, TRUE);
++}
++
++static void
+xmir_handle_surface_event_in_main_thread(struct xmir_screen *xmir_screen,
+ struct xmir_window *xmir_window,
+ void *arg)
@@ -5490,6 +5502,9 @@ index 0000000..727fc56
+ break;
+ case mir_event_type_surface_output:
+ break;
++ case mir_event_type_keymap:
++ xmir_handle_keymap_event(xmir_input, mir_event_get_keymap_event(ev));
++ break;
+ default:
+ ErrorF("Received an unknown %u event\n", mir_event_get_type(ev));
+ break;
@@ -5550,7 +5565,7 @@ index 0000000..727fc56
+}
diff --git a/hw/xmir/xmir-output.c b/hw/xmir/xmir-output.c
new file mode 100644
-index 0000000..bde0940
+index 0000000..f538749
--- /dev/null
+++ b/hw/xmir/xmir-output.c
@@ -0,0 +1,449 @@
@@ -5883,10 +5898,10 @@ index 0000000..bde0940
+
+ if (xmir_screen->glamor) {
+ glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
-+ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->base.fbo->fb);
++ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->fbo->fb);
+ glClearColor(0., 0., 0., 1.);
+ glClear(GL_COLOR_BUFFER_BIT);
-+ glamor_copy_n_to_n_nf(&screen->root->drawable, &pixmap->drawable,
++ glamor_copy(&screen->root->drawable, &pixmap->drawable,
+ NULL, ©_box, 1, 0, 0, FALSE, FALSE, 0, NULL);
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+ } else {
@@ -6120,7 +6135,7 @@ index 0000000..dbb187f
+}
diff --git a/hw/xmir/xmir.c b/hw/xmir/xmir.c
new file mode 100644
-index 0000000..033ae92
+index 0000000..5526958
--- /dev/null
+++ b/hw/xmir/xmir.c
@@ -0,0 +1,1564 @@
@@ -6578,7 +6593,7 @@ index 0000000..033ae92
+ top_normal = top;
+ if (xmir_get_window_name(top, wm_name, sizeof wm_name))
+ top_named = top;
-+
++
+ top = top->firstChild;
+ }
+ if (!named)
@@ -7369,7 +7384,7 @@ index 0000000..033ae92
+ if (xmir_screen->glamor && !xmir_screen->rootless) {
+ glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(screen->devPrivate);
+
-+ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->base.fbo->fb);
++ glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->fbo->fb);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+
@@ -7921,5 +7936,5 @@ index 0000000..0bb4b1d
+
+#endif
--
-2.7.0
+2.7.4
Reply to: