| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
The old implementation used QQuickItem::width and height, which changes with
the devicePixelRatio. We now use the new property, QWaylandSurface::bufferSize,
instead, which is the actual pixel size of the buffer.
Change-Id: I430f46746ed2b8f0330e0d220718f58004b3bd2e
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|
|
|
|
|
|
|
| |
Task-number: QTBUG-73739
Task-number: QTBUG-74042
Change-Id: I2074321978f0c32aabeb0d3d4873c5d12d09946d
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
|
|
|
|
|
|
|
| |
...and also add revision info for the bufferSizeChanged signal.
Change-Id: I2b8e9bea7cafc70c078e74b191c3c87b322ff216
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Revisioning API in QML serves two purposes:
- Making sure QML code developed against an older version of Qt doesn't
change its behavior when run with newer versions. This can otherwise
happen due to QML being interpreted, and QML's liberal scoping rules.
- Allowing developers to target an older version of Qt, but developing
a newer version by explicitly asking for an older import.
Change-Id: I837cd449028c4b84c33afa97bcf6c1149801facd
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-73524
Change-Id: Ie9a13aeae52a7576699147e5515e2ed32a3a4d1c
Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
|
|
|
|
|
|
|
|
|
| |
When the cursor focus' wl_surface is destroyed, or the pointer leaves a
surface, we have to reset the enter serial to avoid sending illegal set_cursor
requests.
Change-Id: I0c886e4123acb4aebd325b07bf15b9d3fa8589da
Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
|
|
|
|
|
| |
Change-Id: Ieec4a97d901f236d2cec003d8b35e2f95b1b2aea
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
| |
Let's simplify all those pointer()->surfaceCursor() calls.
Change-Id: I83c51f460fa2313a0b84c8c64509d48027156443
Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Not all setups or themes have cursors with a matching DPI. In such cases,
wl_cursor_load_theme will then return a theme that is the closest resolution it
can get.
With the previous implementation, cursors themes without a high dpi version
would become become really tiny on high DPI displays.
This patch prevents it by setting a lower wl_surface.scale for those themes.
This also implements proper tracking of the cursor surface's entered outputs
(i.e. if the entered surface is destroyed, the scale is reset, and similarly
the following sequence of events should also be handled:
wl_surface.enter(wl_output@1)
wl_surface.enter(wl_output@2)
wl_surface.leave(wl_output@2)
In the old implementation, we would be stuck with the scale from wl_output@2,
but now we now should correctly get the scale of wl_output@1.
[ChangeLog][QPA plugin] Cursors on high DPI screens are now scaled up if the
cursor theme does not have an appropriate high resolution version.
Change-Id: Ic87d00e35612b5afdf8c2e3a4463fcfef1f1f09d
Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
|
|\
| |
| |
| | |
Change-Id: I4c99725971d7c15448ca3f01306ae869af9ef057
|
| |
| |
| |
| |
| |
| | |
Change-Id: I9ff6ac4e33e89691e06965515a54e91a831b7a0a
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Also refactors the mocking code for data device manager and implements its
isClean method to verify there are no leaks after each test.
MockCompositor::DataDevice now persists across get_data_device requests.
Task-number: QTBUG-73825
Change-Id: Ib5866e0c54d021e12557f9a96f27950010f2611b
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
[ChangeLog][QPA plugin] Fixed a leak of wl_data_offers.
Data offers would previously leak when a surface with keyboard focus was
destroyed... or if it was hidden... or if it changed type, and so on.
Make keyboard focus follow a wl_surface instead of a QWaylandWindow.
This also fixes a couple of other minor issues, such as the mRepeatTimer not
stopping when a wl_surface was destroyed.
Ideally, we would have a QWaylandSurface class separate from the
QWaylandWindow, but that's out of scope for this fix.
Fixes: QTBUG-73825
Change-Id: I56e502512c3959e3fcdb63744adc4a7698e3d53d
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|\ \
| |/
| |
| | |
Change-Id: Ifb1c6c64abbb5c453092eeb1aff91572b57de410
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The call to flushWindowSystemEvents() sometimes caused new popups to be shown
in the middle of hiding another. I.e. if multiple events show and hide
surfaces, they would be shown/hidden in opposite order of their corresponding
events. QMenus sometimes suffered from this (can be seen with the qopenglwidget
example from qtbase).
When the flush was added 5 years ago in 50f43a0c5, it was to "reduce the
chances of seeing a bad frame". I don't see any rendering artifacts, though,
and I can't find any bug report on it. So let's hope it's safe to remove the
hack.
[ChangeLog][QPA plugin] Fixed a crash that sometimes happened when switching
popups.
Also adds more info to the workaround warning message that appears when a popup
grab is attempted and there already is another grabbing popup that is not the
parent.
Fixes: QTBUG-73524
Change-Id: Ibfcbb48c4bbe295c2be1a30add2d7e05cad398c5
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This patch is mostly a cleanup to prepare for implementations of
xcursor-configuration, but also fixes a couple of issues.
Most of the logic has now been moved out of QWaylandDisplay and QWaylandCursor
and into QWaylandInputDevice and QWaylandInputDevice::Pointer. QWaylandDisplay
now only contains mechanisms for avoiding loading the same theme multiple
times.
There is now only one setCursor method on QWaylandInputDevice, accepting a
QCursor and storing its values so changing scale factor doesn't require calling
setCursor again. QWaylandInputDevice::Pointer::updateCursor() is called
instead.
Cursor buffer scale is now set according to enter/leave events of the cursor
surface itself instead of the current window, this fixes incorrect buffer
scales for cursors on windows that span multiple outputs. The window buffer
scale can still be passed into the seat as a fallback until the first enter
event is received.
This also fixes a bug where the QWaylandBuffer of a bitmap cursor could be
deleted while it was being used as a cursor.
[ChangeLog][QPA plugin] Fixed a bug where the DPI of bitmap cursors were not
sent to the compositor, leading to the compositor incorrectly scaling the
cursor up or down.
[ChangeLog][QPA plugin] Fixed a bug where bitmap cursor hotspots were off when
the screen scale factor was different from the bitmap cursor device pixel
ratio.
Task-number: QTBUG-68571
Change-Id: I747a47ffff01b7b5f6a0ede3552ab37884c4fa60
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| |
| |
| | |
The QVector m_surface is modified in both threads.
Change-Id: I1818a5e1307d191f1613513b86703eaa7bda3c6e
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
|
|\ \
| |/
| |
| | |
Change-Id: I1b00775ff2d9ede97dbcd9f9deb9f2a947cf1ae5
|
| |
| |
| |
| |
| |
| | |
Change-Id: I5024e50af6e403e9373181948b36548bc0862f9b
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This used to cause protocol errors.
Task-number: QTBUG-71734
Change-Id: Ic937210fc42c93f1d411fb0fb4f269de01f07b5b
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
[ChangeLog][QPA plugin] Fixed a bug where pasting from the clipboard would
prefer ASCII over UTF-8, causing loss of special characters.
The bug was fixed in QtBase, this is just the test.
Task-number: QTBUG-54786
Change-Id: Ibe08bf455ad0be8fdd7a3e082dec6131f19c25d6
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: Id89ec40a3f484808385401829a09a43781a1bed7
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: Ib28be5277af9145834c7808f993c747e21845616
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
[ChangeLog][QPA plugin] Fixed a bug where window decorations were to small for
for the content when QT_SCALE_FACTOR was set.
Fixes: QTBUG-72993
Change-Id: I1ed26e038c27f7c4454a6bcc04f0849e4af789e7
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
[ChangeLog][Compositor] Add deprecated support for the deprecated wl_scaler.
Some clients are stuck on the unofficial Weston protocol wl_scaler instead of
the standardized and stable wp_viewporter. This implements optional support for
wl_scaler.
This patch has been written to be easily removable in Qt 6, and touches a
minimal amount of other code.
The implementation can be tested using the new manual test compositor:
tests/manual/wlscaler.
Weston 1.11.1 has a demo client named weston-resizor, which can be used to
test. Note that although newer versions of Weston also have weston-resizor,
those versions use wp_viewporter instead of wl_scaler, so you really need
1.11.1 or earlier to test.
Fixes: QTBUG-69635
Change-Id: Id572e28044cd764eaf63b1259a92bc589711c39d
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The plugins subdir which includes the platform plugins was not built without
the feature wayland-server. Moves the checks inside the plugins folder to make
it build.
Also disables some tests that won't pass without the compositor API.
Fixes: QTBUG-73169
Change-Id: Ie68badd2ff62ee544c31edaff7c732082e0a4115
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: Ib9dbad2e7312dab94cecbc1a14315dcb47c8c46a
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
.qmake.conf
src/3rdparty/protocol/qt_attribution.json
src/client/qwaylandintegration.cpp
Change-Id: I475889f2817c7094b68a2948fdd34ddf8b0c486f
|
| |\
| | |
| | |
| | | |
Change-Id: I6ca92b605c55b0c8941d42e40fad624f00a65cd3
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
+ dccec9b282ae15fa65fd61698dd1cb47325e5c8e Bump version
+ 2b79a41096a0d626659f5647743005a963c3fe7d Client: Don't require an input device for non-grabbing popups
+ 685591a4e9f295e6bcc1859704a0b6109af255ce Client: Rename m_topmostPopup to clarify its goal
+ 49ea0fc16a499514ebc0c254a983e86bcda88dd6 Compositor: Fix crash after surface destruction
+ fa57079a227b92218c5b23dafdcb7f547acb635d Don't crash if view is deleted from surfaceDestroyed signal
+ 9ce3088d226fddc18bcac170fa5cc5be3c29e371 Add changes file for Qt 5.11.3
+ f563e0e196d74d0884b4e599729e36f9f172f0e2 Client: Fix incorrect enter serial in set_cursor
+ b81cf22561600e96113270114a8d5fab750ad64f Fix build due to missing QDebug include
+ 4fa1ed2dfe7ae42b940d6d28e4c1066853e7768a Fix unused variables, in preparation for adding warning_clean
+ 4aeb655d161250c317bdb5a6a86e6a6b01ef5685 Fix compilation with gcc 4.8
+ fb0109c6acb8269d1fcdc20b7494c455ff2c74ad Scanner: Add include for QList
+ a8fed20181729cae70de43079c4a34ad1780cfd7 use new feature name xkbcommon_evdev -> xkbcommon
+ d25b3b7f1059d5561bce3efe7ea903ea76d4e888 Fix invalid QWaylandOutputMode comparison operator
+ 7f7502865f980a7d72dc04ffc5f25eecf0d414a8 tests: minor fixup in tst_WaylandCompositor::comparingModes()
+ 88041986f448c14871fac76ee01280736af3f382 Fix scaling if wrong attached window size is returned
+ 99526a2227e8a0bccffb504b10f72aeee47e290d Specify X11 dependency explicitly
+ 1dc85b95ab0adc1e805d059e2c35c671ef790011 Client: Full implementation for frame callbacks
+ f2dc41b5babf0a7b51a1735f290540d7be695042 Compositor: Fix crash in QWaylandSurface::waylandClient
+ 09b6fcf3ec501cb94d89833745264a16c2a74209 Client xdg-shell: Fix protocol error for tooltips on popups
+ 00c0bad3184e32ff0b1dd799b7ef121eaa737c0d Client: Fix various input related crashes for events without focus
+ 34e03bf56cb080f3fae7dd31f0eb1d72e3bb518c Client: Fix incorrect damage for decoration edges
+ 143a6ad82ea0ded69da482eff1750082fd5b2a6a Client: Don't assume windows have surfaces in QWaylandInputContext::update
+ 024be9dcae26a0d88ffb76f9fca252f2135ad7c9 Bump version
+ c584db87cf924f3a3d883288de8c2f4210186af6 wl_eglstream_controller implementation for NVIDIA
+ 6258c4994200348220be6f35667a2c0f4b705539 Revert "Client: Full implementation for frame callbacks"
+ 280cc2befba99ffde25fe7c287174143a9539d32 Fix flickering (black frames) of wayland clients on NVIDIA
+ 657b6ce0677e05984a2f11900c66dbca775ff313 Fix black client windows when not using window decorations on NVIDIA
Change-Id: I902f66c4b1d61e967264f20ed0884b3908d612cc
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
QWaylandGlContext::makeCurrent() tries to be smart and only call
eglMakeCurrent() if really needed. This causes problems on NVIDIA where
the call is always needed.
Change-Id: I08d881d69f79a0fd4ea83a65780052e269a566be
Task-number: QTBUG-71697
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When using the threaded render loop rendering the texture we acquired
from the eglstream is done in a different thread. This rendering needs
to be finished before the next acquire call for the eglstream is done
otherwise we might end up rendering a broken (black) frame and see
the client flicker.
To fix this, make sure to send the frame callbacks after the rendering
was completed and not before the rendering starts.
Change-Id: I5a75914d14d2df7fa8b6bbd526f87e3ef6208cd6
Task-number: QTBUG-71697
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This caused regressions because QtQuick depends on swapBuffers for throttling
animations. We probably need to emulate a blocking swapBuffers and continue
after a timeout, but until we have a patch for this, revert this to avoid
releasing a regression.
This brings back the bug with a frozen event loop when a surface is waiting for
a frame callback, but this is preferable to a regression.
This reverts commit 1dc85b95ab0adc1e805d059e2c35c671ef790011.
Fixes: QTBUG-72578
Change-Id: If6435a947aae5e9fd775404649a392bfafe9130a
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This adds a new client buffer integration: wayland-eglstream-controller,
which contains the EGLStream logic from wayland-egl, and additionally
uses NVIDIA's wayland-eglstream-controller protocol to avoid the issue
where the stream is not ready at the time of first buffer attach.
This is not enabled by default. Can be used like this:
QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-eglstream-controller ./pure-qml
Fixes: QTBUG-71697
Change-Id: I73bb2a8fe9852afe1b5807cbb8c35dc4c7624dad
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: I1a23d6ab5a455603990db269446c15a012c0f879
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Seems like it was just a left behind by mistake in fffa0f76 back in 2011.
Fixes: QTBUG-73070
Change-Id: I3055d2c72cd6752de9917d765684ff049c0dbc6c
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This is an example similar to minimal-cpp, but for xdg-shell instead of
ivi-application. Eventually it should replace qwindow-compositor as the
main c++-only example compositor.
Task-number: QTBUG-69937
Change-Id: Icac70e4af8f97c5f628d7e30279249210772a1c1
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| | |
| | |
| | |
| | | |
Change-Id: Ie131c3bd37c3a3e7c0c2ca186bd90500d6254577
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Test custom surface destruction as well.
Change-Id: Iad980858c3473e784cd0611136042bfacd09bddf
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Now that we've stopped including the system libwayland protocol headers, i.e.
wayland-client.h and wayland-server.h, it should be safe to update the protocol
definitions to the latest version.
Note that this just updates the protocol definition, the implementations for
the various interfaces are still using the old versions.
Change-Id: I961e762553756e11e4c5b33c74101f0c16661232
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
These signals were never tested, in fact there was a bug where
outputAdded was not emitted if a new output was added with
QWaylandCompositor::setDefaultOutput() that was fixed
in 9875a14daaec12ca65d3cb4a2aaf2c4582e6191d.
Also while we are here, set the default output for TestCompositor.
Change-Id: I21c2ff2f51f52b38f2dc992bcc9c03fd3071e82d
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
From the protocol: "When the xdg_positioner object is used to position a child
surface, the rectangle may not extend outside the window geometry of the
child's parent surface."
Adds a warning for both v6 and stable when clients do this.
Change-Id: I575a89785f45c080d488be748ec099569b38ea9b
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
| | |
| | |
| | |
| | |
| | |
| | | |
Change-Id: I9ae028cda8f8a874eb8379f16a9ef7facf0ed85d
Reviewed-by: David Edmundson <davidedmundson@kde.org>
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
It seems clients are sometimes sending more geometry events than needed,
causing the tests to fail. Skip the tests for now to make builds pass again.
Fixes: QTBUG-73130
Change-Id: Ia9f82ddd3561d84119dc4d9f8ef15ebc48964148
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Adds handler for the new name event and updates tests accordingly.
This means QScreen::name() will now typically return strings like: "VGA-1",
"WL-1", "DP-2", "HDMI-A-1" instead of "Screen25", "Screen26", "Screen27" etc.
Change-Id: I3d5748a2fd0d772e2344ac53f0ed808790a84ba5
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: I4b460bd1e5ac8541dcbf9afb2782187218d257e1
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Ignore more files resulting from the build process.
Glob all scanner generated files, and add exceptions for pregenerated files.
Change-Id: Ica60951356bdc145ebd66f5e6fc6bf4e23f2aa72
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Also removes overlapping old tests and adds a (currently failing) test for
QTBUG-72828.
Task-number: QTBUG-72828
Change-Id: Id93d5872ed1c4f181935c1e493e9d8d0ae9cfaf3
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Fixes warnings like:
QQmlExpression: Expression qrc:/Chrome.qml:13:5 depends on non-NOTIFYable properties:
Chrome_QMLTYPE_28::compositor
[ChangeLog][Compositor] Added a missing change signal for
WaylandQuickItem.compositor.
Change-Id: I9f372c46778d0851a82a8dcbb0751a0e12f825b1
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Where it makes sense, default init variables to sensible values
Change-Id: Ie2aa6ab79a6a3c8322bb0ff804f340f7ffd1c1d1
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|