[neon/qt6/qt6-wayland/Neon/release] debian/patches: add patches recommended by d_ed
Jonathan Riddell
null at kde.org
Fri Jul 26 14:41:39 BST 2024
Git commit 3c1485059df849e858087992508e02a8dca920af by Jonathan Riddell.
Committed on 26/07/2024 at 13:41.
Pushed by jriddell into branch 'Neon/release'.
add patches recommended by d_ed
A +38 -0 debian/patches/406995207eae8d644b6e5262aa716a48c7e471a8.diff
A +80 -0 debian/patches/632127d7f1d86cba4dd17361f24f9fd70a0ae44c.diff
A +32 -0 debian/patches/92bcb8f6b7a852c7a5d662fc34de561692a7a454.diff
A +486 -0 debian/patches/c2f61bc47baacf2e6a44c6c3c4e4cbf0abfa4095.diff
A +4 -0 debian/patches/series
https://invent.kde.org/neon/qt6/qt6-wayland/-/commit/3c1485059df849e858087992508e02a8dca920af
diff --git a/debian/patches/406995207eae8d644b6e5262aa716a48c7e471a8.diff b/debian/patches/406995207eae8d644b6e5262aa716a48c7e471a8.diff
new file mode 100644
index 0000000..f21b40d
--- /dev/null
+++ b/debian/patches/406995207eae8d644b6e5262aa716a48c7e471a8.diff
@@ -0,0 +1,38 @@
+commit 406995207eae8d644b6e5262aa716a48c7e471a8
+Author: David Edmundson <davidedmundson at kde.org>
+Date: Wed Jul 10 09:00:33 2024 +0100
+
+ client: Guard against windows being on a null screen
+
+ calculateScreenFromSurfaceEvents uses the screen information from our
+ surface enter events. If this is not set yet, or refers to outputs not
+ yet complete we fall back to the QWindow::screen. This was introduced in
+ e03613524fc9f6be5c4cd7e9bdb00bc09c7f1e0b.
+
+ It was assumed that this would always be a valid value as QtBase keeps
+ it updated, but there are apparently paths for it to still be null.
+
+ It will be evaluated again when the surface receives a wl_enter event or
+ the output that we have entered is finally initialised and we will then
+ be marked as on the correct screen.
+
+ Change-Id: I33b4a5112c3426a8ea523d39a0658ba7ffee5298
+ Reviewed-by: Aleix Pol Gonzalez <aleixpol at kde.org>
+ Reviewed-by: Vlad Zahorodnii <vlad.zahorodnii at kde.org>
+ (cherry picked from commit c4f91b479303dda2e49499de249018d7c66c5f99)
+ Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot at qt-project.org>
+ (cherry picked from commit ec07c90cd647fd7a647f3f10dcae4d18699263df)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index c3725ffc..19237318 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -1407,7 +1407,7 @@ void QWaylandWindow::handleScreensChanged()
+ {
+ QPlatformScreen *newScreen = calculateScreenFromSurfaceEvents();
+
+- if (newScreen->screen() == window()->screen())
++ if (!newScreen || newScreen->screen() == window()->screen())
+ return;
+
+ QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen());
diff --git a/debian/patches/632127d7f1d86cba4dd17361f24f9fd70a0ae44c.diff b/debian/patches/632127d7f1d86cba4dd17361f24f9fd70a0ae44c.diff
new file mode 100644
index 0000000..a9dff06
--- /dev/null
+++ b/debian/patches/632127d7f1d86cba4dd17361f24f9fd70a0ae44c.diff
@@ -0,0 +1,80 @@
+commit 632127d7f1d86cba4dd17361f24f9fd70a0ae44c
+Author: David Edmundson <davidedmundson at kde.org>
+Date: Fri Jul 5 16:13:40 2024 +0100
+
+ Client: Improve thread safety determining window size on the render thread
+
+ updateSurface is called from both the render and GUI thread. We
+ therefore need every property referenced to be thread safe.
+
+ Rather than guarding each property we cache the buffer size whenever the
+ window geometry or scale changes and put a mutex round this one
+ variable.
+
+ Change-Id: I4168ced27556e0e4558bbdbd1daa275d7523c33d
+ Reviewed-by: Vlad Zahorodnii <vlad.zahorodnii at kde.org>
+ (cherry picked from commit 83da29c62f8fb918df8d91826d16b5d5ceb2c704)
+ Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot at qt-project.org>
+ (cherry picked from commit f817608c7152487f489d0f3a227c1d0ceb7b0c2c)
+ Reviewed-by: David Edmundson <davidedmundson at kde.org>
+
+diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+index 652a6563..44f1038c 100644
+--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
++++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+@@ -50,6 +50,15 @@ QWaylandWindow::WindowType QWaylandEglWindow::windowType() const
+
+ void QWaylandEglWindow::ensureSize()
+ {
++ // this is always called on the main thread
++ QMargins margins = mWindowDecoration ? frameMargins() : QMargins{};
++ QRect rect = geometry();
++ QSize sizeWithMargins = (rect.size() + QSize(margins.left() + margins.right(), margins.top() + margins.bottom())) * scale();
++ {
++ QWriteLocker lock(&m_bufferSizeLock);
++ m_bufferSize = sizeWithMargins;
++ }
++
+ updateSurface(false);
+ }
+
+@@ -60,14 +69,17 @@ void QWaylandEglWindow::setGeometry(const QRect &rect)
+ // we're now getting a resize we don't want to create it again.
+ // Just resize the wl_egl_window, the EGLSurface will be created
+ // the next time makeCurrent is called.
+- updateSurface(false);
++ ensureSize();
+ }
+
+ void QWaylandEglWindow::updateSurface(bool create)
+ {
+- QMargins margins = mWindowDecoration ? frameMargins() : QMargins{};
+- QRect rect = geometry();
+- QSize sizeWithMargins = (rect.size() + QSize(margins.left() + margins.right(), margins.top() + margins.bottom())) * scale();
++
++ QSize sizeWithMargins;
++ {
++ QReadLocker lock(&m_bufferSizeLock);
++ sizeWithMargins = m_bufferSize;
++ }
+
+ // wl_egl_windows must have both width and height > 0
+ // mesa's egl returns NULL if we try to create a, invalid wl_egl_window, however not all EGL
+diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow_p.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow_p.h
+index 5b9aa987..048f0b61 100644
+--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow_p.h
++++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow_p.h
+@@ -60,7 +60,13 @@ private:
+ mutable QOpenGLFramebufferObject *m_contentFBO = nullptr;
+
+ QSurfaceFormat m_format;
++ // Size used in the last call to wl_egl_window_resize
+ QSize m_requestedSize;
++
++ // Size of the buffer used by QWaylandWindow
++ // This is always written to from the main thread, potentially read from the rendering thread
++ QReadWriteLock m_bufferSizeLock;
++ QSize m_bufferSize;
+ };
+
+ }
diff --git a/debian/patches/92bcb8f6b7a852c7a5d662fc34de561692a7a454.diff b/debian/patches/92bcb8f6b7a852c7a5d662fc34de561692a7a454.diff
new file mode 100644
index 0000000..f7da1fb
--- /dev/null
+++ b/debian/patches/92bcb8f6b7a852c7a5d662fc34de561692a7a454.diff
@@ -0,0 +1,32 @@
+commit 92bcb8f6b7a852c7a5d662fc34de561692a7a454
+Author: Vlad Zahorodnii <vlad.zahorodnii at kde.org>
+Date: Thu Jun 20 11:25:06 2024 +0300
+
+ Client: Ensure that guessed popup parent has a shell surface
+
+ The last input window may not have a shell surface if it is a subsurface
+ or that window has been just made invisible.
+
+ Change-Id: Iad11c68659579429ddc5d9ba0038975b25da8e0d
+ Reviewed-by: David Edmundson <davidedmundson at kde.org>
+ (cherry picked from commit 52c406cec149634680489faeeaf06bb1258cd12f)
+ Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot at qt-project.org>
+ (cherry picked from commit 7d04c18531276c94bfdf2f9a955d6f02554b28b2)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 22aeba10..c3725ffc 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -1157,8 +1157,10 @@ QWaylandWindow *QWaylandWindow::guessTransientParent() const
+ return mTopPopup;
+ }
+
+- if (window()->type() == Qt::ToolTip || window()->type() == Qt::Popup)
+- return display()->lastInputWindow();
++ if (window()->type() == Qt::ToolTip || window()->type() == Qt::Popup) {
++ if (auto lastInputWindow = display()->lastInputWindow())
++ return closestShellSurfaceWindow(lastInputWindow->window());
++ }
+
+ return nullptr;
+ }
diff --git a/debian/patches/c2f61bc47baacf2e6a44c6c3c4e4cbf0abfa4095.diff b/debian/patches/c2f61bc47baacf2e6a44c6c3c4e4cbf0abfa4095.diff
new file mode 100644
index 0000000..d6798d7
--- /dev/null
+++ b/debian/patches/c2f61bc47baacf2e6a44c6c3c4e4cbf0abfa4095.diff
@@ -0,0 +1,486 @@
+commit c2f61bc47baacf2e6a44c6c3c4e4cbf0abfa4095
+Author: Liang Qi <liang.qi at qt.io>
+Date: Wed Jul 3 15:06:09 2024 +0200
+
+ Update wayland.xml to version 1.23.0
+
+ This updates only the protocol definition, implementations
+ will need additional commits to opt into using them.
+
+ Change-Id: I5999e6dd75dfff7d904981fb1545d58c8b38ceb0
+ Reviewed-by: David Edmundson <davidedmundson at kde.org>
+
+diff --git a/src/3rdparty/protocol/wayland.xml b/src/3rdparty/protocol/wayland.xml
+index 10e039d6..9418c62f 100644
+--- a/src/3rdparty/protocol/wayland.xml
++++ b/src/3rdparty/protocol/wayland.xml
+@@ -46,7 +46,7 @@
+ compositor after the callback is fired and as such the client must not
+ attempt to use it after that point.
+
+- The callback_data passed in the callback is the event serial.
++ The callback_data passed in the callback is undefined and should be ignored.
+ </description>
+ <arg name="callback" type="new_id" interface="wl_callback"
+ summary="callback object for the sync request"/>
+@@ -212,7 +212,7 @@
+ </request>
+ </interface>
+
+- <interface name="wl_shm_pool" version="1">
++ <interface name="wl_shm_pool" version="2">
+ <description summary="a shared memory pool">
+ The wl_shm_pool object encapsulates a piece of memory shared
+ between the compositor and client. Through the wl_shm_pool
+@@ -262,17 +262,17 @@
+ created, but using the new size. This request can only be
+ used to make the pool bigger.
+
+- This request only changes the amount of bytes that are mmapped
+- by the server and does not touch the file corresponding to the
+- file descriptor passed at creation time. It is the client's
+- responsibility to ensure that the file is at least as big as
+- the new pool size.
++ This request only changes the amount of bytes that are mmapped
++ by the server and does not touch the file corresponding to the
++ file descriptor passed at creation time. It is the client's
++ responsibility to ensure that the file is at least as big as
++ the new pool size.
+ </description>
+ <arg name="size" type="int" summary="new size of the pool, in bytes"/>
+ </request>
+ </interface>
+
+- <interface name="wl_shm" version="1">
++ <interface name="wl_shm" version="2">
+ <description summary="shared memory support">
+ A singleton global object that provides support for shared
+ memory.
+@@ -419,6 +419,21 @@
+ <entry name="xbgr16161616" value="0x38344258" summary="[63:0] x:B:G:R 16:16:16:16 little endian"/>
+ <entry name="argb16161616" value="0x38345241" summary="[63:0] A:R:G:B 16:16:16:16 little endian"/>
+ <entry name="abgr16161616" value="0x38344241" summary="[63:0] A:B:G:R 16:16:16:16 little endian"/>
++ <entry name="c1" value="0x20203143" summary="[7:0] C0:C1:C2:C3:C4:C5:C6:C7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
++ <entry name="c2" value="0x20203243" summary="[7:0] C0:C1:C2:C3 2:2:2:2 four pixels/byte"/>
++ <entry name="c4" value="0x20203443" summary="[7:0] C0:C1 4:4 two pixels/byte"/>
++ <entry name="d1" value="0x20203144" summary="[7:0] D0:D1:D2:D3:D4:D5:D6:D7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
++ <entry name="d2" value="0x20203244" summary="[7:0] D0:D1:D2:D3 2:2:2:2 four pixels/byte"/>
++ <entry name="d4" value="0x20203444" summary="[7:0] D0:D1 4:4 two pixels/byte"/>
++ <entry name="d8" value="0x20203844" summary="[7:0] D"/>
++ <entry name="r1" value="0x20203152" summary="[7:0] R0:R1:R2:R3:R4:R5:R6:R7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
++ <entry name="r2" value="0x20203252" summary="[7:0] R0:R1:R2:R3 2:2:2:2 four pixels/byte"/>
++ <entry name="r4" value="0x20203452" summary="[7:0] R0:R1 4:4 two pixels/byte"/>
++ <entry name="r10" value="0x20303152" summary="[15:0] x:R 6:10 little endian"/>
++ <entry name="r12" value="0x20323152" summary="[15:0] x:R 4:12 little endian"/>
++ <entry name="avuy8888" value="0x59555641" summary="[31:0] A:Cr:Cb:Y 8:8:8:8 little endian"/>
++ <entry name="xvuy8888" value="0x59555658" summary="[31:0] X:Cr:Cb:Y 8:8:8:8 little endian"/>
++ <entry name="p030" value="0x30333050" summary="2x2 subsampled Cr:Cb plane 10 bits per channel packed"/>
+ </enum>
+
+ <request name="create_pool">
+@@ -442,6 +457,17 @@
+ </description>
+ <arg name="format" type="uint" enum="format" summary="buffer pixel format"/>
+ </event>
++
++ <!-- Version 2 additions -->
++
++ <request name="release" type="destructor" since="2">
++ <description summary="release the shm object">
++ Using this request a client can tell the server that it is not going to
++ use the shm object anymore.
++
++ Objects created via this interface remain unaffected.
++ </description>
++ </request>
+ </interface>
+
+ <interface name="wl_buffer" version="1">
+@@ -453,9 +479,11 @@
+ client provides and updates the contents is defined by the buffer factory
+ interface.
+
+- If the buffer uses a format that has an alpha channel, the alpha channel
+- is assumed to be premultiplied in the color channels unless otherwise
+- specified.
++ Color channels are assumed to be electrical rather than optical (in other
++ words, encoded with a transfer function) unless otherwise specified. If
++ the buffer uses a format that has an alpha channel, the alpha channel is
++ assumed to be premultiplied into the electrical color channel values
++ (after transfer function encoding) unless otherwise specified.
+
+ Note, because wl_buffer objects are created from multiple independent
+ factory interfaces, the wl_buffer interface is frozen at version 1.
+@@ -847,6 +875,7 @@
+
+ <enum name="error">
+ <entry name="role" value="0" summary="given wl_surface has another role"/>
++ <entry name="used_source" value="1" summary="source has already been used"/>
+ </enum>
+
+ <request name="start_drag">
+@@ -868,7 +897,7 @@
+ The icon surface is an optional (can be NULL) surface that
+ provides an icon to be moved around with the cursor. Initially,
+ the top-left corner of the icon surface is placed at the cursor
+- hotspot, but subsequent wl_surface.attach request can move the
++ hotspot, but subsequent wl_surface.offset requests can move the
+ relative position. Attach requests must be confirmed with
+ wl_surface.commit as usual. The icon surface is given the role of
+ a drag-and-drop icon. If the icon surface already has another role,
+@@ -876,6 +905,10 @@
+
+ The input region is ignored for wl_surfaces with the role of a
+ drag-and-drop icon.
++
++ The given source may not be used in any further set_selection or
++ start_drag requests. Attempting to reuse a previously-used source
++ may send a used_source error.
+ </description>
+ <arg name="source" type="object" interface="wl_data_source" allow-null="true" summary="data source for the eventual transfer"/>
+ <arg name="origin" type="object" interface="wl_surface" summary="surface where the drag originates"/>
+@@ -889,6 +922,10 @@
+ to the data from the source on behalf of the client.
+
+ To unset the selection, set the source to NULL.
++
++ The given source may not be used in any further set_selection or
++ start_drag requests. Attempting to reuse a previously-used source
++ may send a used_source error.
+ </description>
+ <arg name="source" type="object" interface="wl_data_source" allow-null="true" summary="data source for the selection"/>
+ <arg name="serial" type="uint" summary="serial number of the event that triggered this request"/>
+@@ -1411,7 +1448,7 @@
+ <entry name="invalid_size" value="2" summary="buffer size is invalid"/>
+ <entry name="invalid_offset" value="3" summary="buffer offset is invalid"/>
+ <entry name="defunct_role_object" value="4"
+- summary="surface was destroyed before its role object"/>
++ summary="surface was destroyed before its role object"/>
+ </enum>
+
+ <request name="destroy" type="destructor">
+@@ -1440,9 +1477,9 @@
+
+ When the bound wl_surface version is 5 or higher, passing any
+ non-zero x or y is a protocol violation, and will result in an
+- 'invalid_offset' error being raised. The x and y arguments are ignored
+- and do not change the pending state. To achieve equivalent semantics,
+- use wl_surface.offset.
++ 'invalid_offset' error being raised. The x and y arguments are ignored
++ and do not change the pending state. To achieve equivalent semantics,
++ use wl_surface.offset.
+
+ Surface contents are double-buffered state, see wl_surface.commit.
+
+@@ -1479,6 +1516,13 @@
+
+ If wl_surface.attach is sent with a NULL wl_buffer, the
+ following wl_surface.commit will remove the surface content.
++
++ If a pending wl_buffer has been destroyed, the result is not specified.
++ Many compositors are known to remove the surface content on the following
++ wl_surface.commit, but this behaviour is not universal. Clients seeking to
++ maximise compatibility should not destroy pending buffers and should
++ ensure that they explicitly remove content from surfaces, even after
++ destroying buffers.
+ </description>
+ <arg name="buffer" type="object" interface="wl_buffer" allow-null="true"
+ summary="buffer of surface contents"/>
+@@ -1618,16 +1662,18 @@
+ <description summary="commit pending surface state">
+ Surface state (input, opaque, and damage regions, attached buffers,
+ etc.) is double-buffered. Protocol requests modify the pending state,
+- as opposed to the current state in use by the compositor. A commit
+- request atomically applies all pending state, replacing the current
+- state. After commit, the new pending state is as documented for each
+- related request.
++ as opposed to the active state in use by the compositor.
+
+- On commit, a pending wl_buffer is applied first, and all other state
+- second. This means that all coordinates in double-buffered state are
+- relative to the new wl_buffer coming into use, except for
+- wl_surface.attach itself. If there is no pending wl_buffer, the
+- coordinates are relative to the current surface contents.
++ A commit request atomically creates a content update from the pending
++ state, even if the pending state has not been touched. The content
++ update is placed in a queue until it becomes active. After commit, the
++ new pending state is as documented for each related request.
++
++ When the content update is applied, the wl_buffer is applied before all
++ other state. This means that all coordinates in double-buffered state
++ are relative to the newly attached wl_buffers, except for
++ wl_surface.attach itself. If there is no newly attached wl_buffer, the
++ coordinates are relative to the previous content update.
+
+ All requests that need a commit to become effective are documented
+ to affect double-buffered state.
+@@ -1666,10 +1712,12 @@
+
+ <request name="set_buffer_transform" since="2">
+ <description summary="sets the buffer transformation">
+- This request sets an optional transformation on how the compositor
+- interprets the contents of the buffer attached to the surface. The
+- accepted values for the transform parameter are the values for
+- wl_output.transform.
++ This request sets the transformation that the client has already applied
++ to the content of the buffer. The accepted values for the transform
++ parameter are the values for wl_output.transform.
++
++ The compositor applies the inverse of this transformation whenever it
++ uses the buffer contents.
+
+ Buffer transform is double-buffered state, see wl_surface.commit.
+
+@@ -1725,11 +1773,11 @@
+ a buffer that is larger (by a factor of scale in each dimension)
+ than the desired surface size.
+
+- If scale is not positive the invalid_scale protocol error is
++ If scale is not greater than 0 the invalid_scale protocol error is
+ raised.
+ </description>
+ <arg name="scale" type="int"
+- summary="positive scale for interpreting buffer contents"/>
++ summary="scale for interpreting buffer contents"/>
+ </request>
+
+ <!-- Version 4 additions -->
+@@ -1802,10 +1850,15 @@
+ This event indicates the preferred buffer scale for this surface. It is
+ sent whenever the compositor's preference changes.
+
++ Before receiving this event the preferred buffer scale for this surface
++ is 1.
++
+ It is intended that scaling aware clients use this event to scale their
+ content and use wl_surface.set_buffer_scale to indicate the scale they
+ have rendered with. This allows clients to supply a higher detail
+ buffer.
++
++ The compositor shall emit a scale value greater than 0.
+ </description>
+ <arg name="factor" type="int" summary="preferred scaling factor"/>
+ </event>
+@@ -1815,9 +1868,12 @@
+ This event indicates the preferred buffer transform for this surface.
+ It is sent whenever the compositor's preference changes.
+
+- It is intended that transform aware clients use this event to apply the
+- transform to their content and use wl_surface.set_buffer_transform to
+- indicate the transform they have rendered with.
++ Before receiving this event the preferred buffer transform for this
++ surface is normal.
++
++ Applying this transformation to the surface buffer contents and using
++ wl_surface.set_buffer_transform might allow the compositor to use the
++ surface buffer more efficiently.
+ </description>
+ <arg name="transform" type="uint" enum="wl_output.transform"
+ summary="preferred transform"/>
+@@ -1992,9 +2048,9 @@
+ where (x, y) are the coordinates of the pointer location, in
+ surface-local coordinates.
+
+- On surface.attach requests to the pointer surface, hotspot_x
++ On wl_surface.offset requests to the pointer surface, hotspot_x
+ and hotspot_y are decremented by the x and y parameters
+- passed to the request. Attach must be confirmed by
++ passed to the request. The offset must be applied by
+ wl_surface.commit as usual.
+
+ The hotspot can also be updated by passing the currently set
+@@ -2248,7 +2304,7 @@
+ <arg name="axis" type="uint" enum="axis" summary="the axis stopped with this event"/>
+ </event>
+
+- <event name="axis_discrete" since="5">
++ <event name="axis_discrete" since="5" deprecated-since="8">
+ <description summary="axis click event">
+ Discrete step information for scroll and other axes.
+
+@@ -2374,6 +2430,16 @@
+ <description summary="keyboard input device">
+ The wl_keyboard interface represents one or more keyboards
+ associated with a seat.
++
++ Each wl_keyboard has the following logical state:
++
++ - an active surface (possibly null),
++ - the keys currently logically down,
++ - the active modifiers,
++ - the active group.
++
++ By default, the active surface is null, the keys currently logically down
++ are empty, the active modifiers and the active group are 0.
+ </description>
+
+ <enum name="keymap_format">
+@@ -2408,10 +2474,15 @@
+
+ The compositor must send the wl_keyboard.modifiers event after this
+ event.
++
++ In the wl_keyboard logical state, this event sets the active surface to
++ the surface argument and the keys currently logically down to the keys
++ in the keys argument. The compositor must not send this event if the
++ wl_keyboard already had an active surface immediately before this event.
+ </description>
+ <arg name="serial" type="uint" summary="serial number of the enter event"/>
+ <arg name="surface" type="object" interface="wl_surface" summary="surface gaining keyboard focus"/>
+- <arg name="keys" type="array" summary="the currently pressed keys"/>
++ <arg name="keys" type="array" summary="the keys currently logically down"/>
+ </event>
+
+ <event name="leave">
+@@ -2422,8 +2493,10 @@
+ The leave notification is sent before the enter notification
+ for the new focus.
+
+- After this event client must assume that all keys, including modifiers,
+- are lifted and also it must stop key repeating if there's some going on.
++ In the wl_keyboard logical state, this event resets all values to their
++ defaults. The compositor must not send this event if the active surface
++ of the wl_keyboard was not equal to the surface argument immediately
++ before this event.
+ </description>
+ <arg name="serial" type="uint" summary="serial number of the leave event"/>
+ <arg name="surface" type="object" interface="wl_surface" summary="surface that lost keyboard focus"/>
+@@ -2448,6 +2521,15 @@
+
+ If this event produces a change in modifiers, then the resulting
+ wl_keyboard.modifiers event must be sent after this event.
++
++ In the wl_keyboard logical state, this event adds the key to the keys
++ currently logically down (if the state argument is pressed) or removes
++ the key from the keys currently logically down (if the state argument is
++ released). The compositor must not send this event if the wl_keyboard
++ did not have an active surface immediately before this event. The
++ compositor must not send this event if state is pressed (resp. released)
++ and the key was already logically down (resp. was not logically down)
++ immediately before this event.
+ </description>
+ <arg name="serial" type="uint" summary="serial number of the key event"/>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+@@ -2459,6 +2541,17 @@
+ <description summary="modifier and group state">
+ Notifies clients that the modifier and/or group state has
+ changed, and it should update its local state.
++
++ The compositor may send this event without a surface of the client
++ having keyboard focus, for example to tie modifier information to
++ pointer focus instead. If a modifier event with pressed modifiers is sent
++ without a prior enter event, the client can assume the modifier state is
++ valid until it receives the next wl_keyboard.modifiers event. In order to
++ reset the modifier state again, the compositor can send a
++ wl_keyboard.modifiers event with no pressed modifiers.
++
++ In the wl_keyboard logical state, this event updates the modifiers and
++ group.
+ </description>
+ <arg name="serial" type="uint" summary="serial number of the modifiers event"/>
+ <arg name="mods_depressed" type="uint" summary="depressed modifiers"/>
+@@ -2566,6 +2659,8 @@
+ currently active on this client's surface. The client is
+ responsible for finalizing the touch points, future touch points on
+ this surface may reuse the touch point ID.
++
++ No frame event is required after the cancel event.
+ </description>
+ </event>
+
+@@ -2665,10 +2760,9 @@
+ </enum>
+
+ <enum name="transform">
+- <description summary="transform from framebuffer to output">
+- This describes the transform that a compositor will apply to a
+- surface to compensate for the rotation or mirroring of an
+- output device.
++ <description summary="transformation applied to buffer contents">
++ This describes transformations that clients and compositors apply to
++ buffer contents.
+
+ The flipped values correspond to an initial flip around a
+ vertical axis followed by rotation.
+@@ -2700,6 +2794,10 @@
+ The geometry event will be followed by a done event (starting from
+ version 2).
+
++ Clients should use wl_surface.preferred_buffer_transform instead of the
++ transform advertised by this event to find the preferred buffer
++ transform to use for a surface.
++
+ Note: wl_output only advertises partial information about the output
+ position and identification. Some compositors, for instance those not
+ implementing a desktop-style output layout or those exposing virtual
+@@ -2722,7 +2820,7 @@
+ <arg name="model" type="string"
+ summary="textual description of the model"/>
+ <arg name="transform" type="int" enum="transform"
+- summary="transform that maps framebuffer to output"/>
++ summary="additional transformation applied to buffer contents during presentation"/>
+ </event>
+
+ <enum name="mode" bitfield="true">
+@@ -2795,8 +2893,9 @@
+ This event contains scaling geometry information
+ that is not in the geometry event. It may be sent after
+ binding the output object or if the output scale changes
+- later. If it is not sent, the client should assume a
+- scale of 1.
++ later. The compositor will emit a non-zero, positive
++ value for scale. If it is not sent, the client should
++ assume a scale of 1.
+
+ A scale larger than 1 means that the compositor will
+ automatically scale surface buffers by this amount
+@@ -2804,12 +2903,9 @@
+ displays where applications rendering at the native
+ resolution would be too small to be legible.
+
+- It is intended that scaling aware clients track the
+- current output of a surface, and if it is on a scaled
+- output it should use wl_surface.set_buffer_scale with
+- the scale of the output. That way the compositor can
+- avoid scaling the surface, and the client can supply
+- a higher detail image.
++ Clients should use wl_surface.preferred_buffer_scale
++ instead of this event to find the preferred buffer
++ scale to use for a surface.
+
+ The scale event will be followed by a done event.
+ </description>
+@@ -3035,6 +3131,11 @@
+
+ If the parent wl_surface object is destroyed, the sub-surface is
+ unmapped.
++
++ A sub-surface never has the keyboard focus of any seat.
++
++ The wl_surface.offset request is ignored: clients must use set_position
++ instead to move the sub-surface.
+ </description>
+
+ <request name="destroy" type="destructor">
+@@ -3060,9 +3161,7 @@
+ surface area. Negative values are allowed.
+
+ The scheduled coordinates will take effect whenever the state of the
+- parent surface is applied. When this happens depends on whether the
+- parent surface is in synchronized mode or not. See
+- wl_subsurface.set_sync and wl_subsurface.set_desync for details.
++ parent surface is applied.
+
+ If more than one set_position request is invoked by the client before
+ the commit of the parent surface, the position of a new request always
+@@ -3085,9 +3184,7 @@
+ The z-order is double-buffered. Requests are handled in order and
+ applied immediately to a pending state. The final pending state is
+ copied to the active state the next time the state of the parent
+- surface is applied. When this happens depends on whether the parent
+- surface is in synchronized mode or not. See wl_subsurface.set_sync and
+- wl_subsurface.set_desync for details.
++ surface is applied.
+
+ A new sub-surface is initially added as the top-most in the stack
+ of its siblings and parent.
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..644dd74
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,4 @@
+406995207eae8d644b6e5262aa716a48c7e471a8.diff
+632127d7f1d86cba4dd17361f24f9fd70a0ae44c.diff
+92bcb8f6b7a852c7a5d662fc34de561692a7a454.diff
+c2f61bc47baacf2e6a44c6c3c4e4cbf0abfa4095.diff
More information about the Neon-commits
mailing list