xorg-server: Changes to 'ubuntu'
debian/changelog | 7 ++
debian/patches/xmir.patch | 117 ++++++++++++++++++++++++++++++++++------------
2 files changed, 95 insertions(+), 29 deletions(-)
New commits:
commit 06448c36b89b794b407bfcbb895d6ce981d6690f
Author: Robert Ancell <robert.ancell@canonical.com>
Date: Wed Jun 1 11:32:40 2016 +1200
* debian/patches/xmir.patch:
- Add focus/unfocus event passing (LP: #1582471)
diff --git a/debian/changelog b/debian/changelog
index a12f0ce..50209bc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+xorg-server (2:1.18.3-1ubuntu6) yakkety; urgency=medium
+
+ * debian/patches/xmir.patch:
+ - Add focus/unfocus event passing (LP: #1582471)
+
+ -- Robert Ancell <robert.ancell@canonical.com> Wed, 01 Jun 2016 11:07:46 +1200
+
xorg-server (2:1.18.3-1ubuntu5) yakkety; urgency=medium
* randr-adjust-masters-last-set-time.diff,
diff --git a/debian/patches/xmir.patch b/debian/patches/xmir.patch
index 2ce304b..e7ff8d7 100644
--- a/debian/patches/xmir.patch
+++ b/debian/patches/xmir.patch
@@ -1,4 +1,4 @@
-From b91d0ee0a8f92865dbf0ab6b402ff15a19aa6992 Mon Sep 17 00:00:00 2001
+From eb0fb72f618ea17a90d6c535d38e12b5f95fcec8 Mon Sep 17 00:00:00 2001
From: Robert Ancell <robert.ancell@canonical.com>
Date: Fri, 29 Apr 2016 14:57:53 +0200
Subject: [PATCH xserver 1/3] XMir DDX
@@ -9,26 +9,27 @@ Contributions from:
Robert Ancell <robert.ancell@canonical.com>
Andreas Pokorny <andreas.pokorny@canonical.com>
Daniel van Vugt <daniel.van.vugt@canonical.com>
+ Chris Townsend <christopher.townsend@canonical.com>
---
configure.ac | 25 +
hw/Makefile.am | 9 +-
hw/xmir/.gitignore | 1 +
hw/xmir/Makefile.am | 61 ++
hw/xmir/dri2/Makefile.am | 14 +
- hw/xmir/dri2/dri2.c | 1398 ++++++++++++++++++++++++++++++++++++++
+ hw/xmir/dri2/dri2.c | 1398 +++++++++++++++++++++++++++++++++++++
hw/xmir/dri2/dri2.h | 364 ++++++++++
- hw/xmir/dri2/dri2ext.c | 683 +++++++++++++++++++
+ hw/xmir/dri2/dri2ext.c | 683 ++++++++++++++++++
hw/xmir/dri2/dri2int.h | 26 +
hw/xmir/xmir-cursor.c | 210 ++++++
- hw/xmir/xmir-cvt.c | 304 +++++++++
- hw/xmir/xmir-dri2.c | 545 +++++++++++++++
- hw/xmir/xmir-glamor.c | 1160 ++++++++++++++++++++++++++++++++
+ hw/xmir/xmir-cvt.c | 304 ++++++++
+ hw/xmir/xmir-dri2.c | 551 +++++++++++++++
+ hw/xmir/xmir-glamor.c | 1160 +++++++++++++++++++++++++++++++
hw/xmir/xmir-input.c | 592 ++++++++++++++++
- hw/xmir/xmir-output.c | 449 +++++++++++++
+ hw/xmir/xmir-output.c | 449 ++++++++++++
hw/xmir/xmir-thread-proxy.c | 109 +++
- hw/xmir/xmir.c | 1571 +++++++++++++++++++++++++++++++++++++++++++
- hw/xmir/xmir.h | 226 +++++++
- 18 files changed, 7745 insertions(+), 2 deletions(-)
+ hw/xmir/xmir.c | 1622 +++++++++++++++++++++++++++++++++++++++++++
+ hw/xmir/xmir.h | 227 ++++++
+ 18 files changed, 7803 insertions(+), 2 deletions(-)
create mode 100644 hw/xmir/.gitignore
create mode 100644 hw/xmir/Makefile.am
create mode 100644 hw/xmir/dri2/Makefile.am
@@ -3248,10 +3249,10 @@ index 0000000..6070d77
+}
diff --git a/hw/xmir/xmir-dri2.c b/hw/xmir/xmir-dri2.c
new file mode 100644
-index 0000000..b24d4b9
+index 0000000..e1d02f0
--- /dev/null
+++ b/hw/xmir/xmir-dri2.c
-@@ -0,0 +1,545 @@
+@@ -0,0 +1,551 @@
+/*
+ * Copyright © 2015 Canonical Ltd
+ *
@@ -3743,10 +3744,16 @@ index 0000000..b24d4b9
+
+static int xmir_dri_get_msc(DrawablePtr draw, CARD64 *ust, CARD64 *msc)
+{
-+ /* TODO: Implement this?
-+ * At least doing nothing like this is enough to shut up Chromium
-+ * error messages.
-+ */
++ /* TODO: Implement this properly after Mir implements it. */
++ const uint64_t now_us = GetTimeInMicros();
++ const uint64_t fake_frame_rate_hz = 60;
++ const uint64_t fake_frame_time_us = 1000000 / fake_frame_rate_hz;
++ const uint64_t fake_msc = now_us / fake_frame_time_us;
++ const uint64_t fake_ust = fake_msc * fake_frame_time_us;
++ if (ust)
++ *(uint64_t*)ust = fake_ust;
++ if (msc)
++ *(uint64_t*)msc = fake_msc;
+ return Success;
+}
+
@@ -6133,10 +6140,10 @@ index 0000000..dbb187f
+}
diff --git a/hw/xmir/xmir.c b/hw/xmir/xmir.c
new file mode 100644
-index 0000000..34f78c9
+index 0000000..ee5fff5
--- /dev/null
+++ b/hw/xmir/xmir.c
-@@ -0,0 +1,1571 @@
+@@ -0,0 +1,1622 @@
+/*
+ * Copyright © 2015 Canonical Ltd
+ *
@@ -6767,17 +6774,20 @@ index 0000000..34f78c9
+ wm_type = xmir_get_window_prop_atom(window, GET_ATOM(_NET_WM_WINDOW_TYPE));
+ wm_transient_for = xmir_get_window_prop_window(window, XA_WM_TRANSIENT_FOR);
+
-+ XMIR_DEBUG(("Realize %swindow %p \"%s\": %dx%d %+d%+d parent=%p\n"
++ XMIR_DEBUG(("Realize %swindow %p id=0x%x \"%s\": %dx%d %+d%+d parent=%p\n"
+ "\tdepth=%d redir=%u type=%hu class=%u visibility=%u viewable=%u\n"
-+ "\toverride=%d _NET_WM_WINDOW_TYPE=%lu WM_TRANSIENT_FOR=%p\n",
++ "\toverride=%d _NET_WM_WINDOW_TYPE=%lu(%s)\n"
++ "\tWM_TRANSIENT_FOR=%p\n",
+ window == screen->root ? "ROOT " : "",
-+ window, wm_name, mir_width, mir_height,
++ window, (int)window->drawable.id, wm_name, mir_width, mir_height,
+ window->drawable.x, window->drawable.y,
+ window->parent,
+ window->drawable.depth,
+ window->redirectDraw, window->drawable.type,
+ window->drawable.class, window->visibility, window->viewable,
-+ window->overrideRedirect, (unsigned long)wm_type, wm_transient_for));
++ window->overrideRedirect,
++ (unsigned long)wm_type, NameForAtom(wm_type)?:"",
++ wm_transient_for));
+
+ if (!window->viewable) {
+ return ret;
@@ -6969,6 +6979,57 @@ index 0000000..34f78c9
+ }
+}
+
++static Window
++xmir_get_current_input_focus(DeviceIntPtr kbd)
++{
++ Window id = None;
++ FocusClassPtr focus = kbd->focus;
++ if (focus->win == NoneWin)
++ id = None;
++ else if (focus->win == PointerRootWin)
++ id = PointerRoot;
++ else
++ id = focus->win->drawable.id;
++ return id;
++}
++
++static void
++xmir_handle_focus_event(struct xmir_window *xmir_window,
++ MirSurfaceFocusState state)
++{
++ struct xmir_screen *xmir_screen = xmir_window->xmir_screen;
++ DeviceIntPtr keyboard = inputInfo.keyboard; /*PickKeyboard(serverClient);*/
++
++ if (xmir_window->surface) { /* It's a real Mir window */
++ xmir_screen->last_focus = (state == mir_surface_focused) ?
++ xmir_window->window : NULL;
++ }
++
++ if (xmir_screen->rootless) {
++ Window id = (state == mir_surface_focused) ?
++ xmir_window->window->drawable.id : None;
++ SetInputFocus(serverClient, keyboard, id, RevertToParent, CurrentTime,
++ False);
++ } else if (!strcmp(xmir_screen->title, get_title_from_top_window)) {
++ /*
++ * So as to not break default behaviour, we only hack focus within
++ * the root window when in Unity8 invasive mode (-title @).
++ */
++ Window id = None;
++ if (state == mir_surface_focused) {
++ id = xmir_screen->saved_focus;
++ if (id == None)
++ id = PointerRoot;
++ } else {
++ xmir_screen->saved_focus = xmir_get_current_input_focus(keyboard);
++ id = None;
++ }
++ SetInputFocus(serverClient, keyboard, id, RevertToNone, CurrentTime,
++ False);
++ }
++ /* else normal root window mode -- Xmir does not interfere in focus */
++}
++
+void
+xmir_handle_surface_event(struct xmir_window *xmir_window, MirSurfaceAttrib attr, int val)
+{
@@ -6984,10 +7045,7 @@ index 0000000..34f78c9
+ break;
+ case mir_surface_attrib_focus:
+ XMIR_DEBUG(("Focus: %s\n", xmir_surface_focus_str(val)));
-+ if (xmir_window->surface) { /* It's a real Mir window */
-+ xmir_window->xmir_screen->last_focus =
-+ (val == mir_surface_focused) ? xmir_window->window : NULL;
-+ }
++ xmir_handle_focus_event(xmir_window, (MirSurfaceFocusState)val);
+ break;
+ case mir_surface_attrib_dpi:
+ XMIR_DEBUG(("DPI: %i\n", val));
@@ -7710,10 +7768,10 @@ index 0000000..34f78c9
+}
diff --git a/hw/xmir/xmir.h b/hw/xmir/xmir.h
new file mode 100644
-index 0000000..0bb4b1d
+index 0000000..310e6b9
--- /dev/null
+++ b/hw/xmir/xmir.h
-@@ -0,0 +1,226 @@
+@@ -0,0 +1,227 @@
+/*
+ * Copyright © 2015 Canonical Ltd
+ *
@@ -7811,6 +7869,7 @@ index 0000000..0bb4b1d
+ struct xorg_list flattened_list;
+ struct xmir_window *flatten_top;
+ WindowPtr last_focus;
++ Window saved_focus;
+
+ int dpi;
+
@@ -7941,5 +8000,5 @@ index 0000000..0bb4b1d
+
+#endif
--
-2.7.4
+2.8.1
Reply to: