Commit graph

1182 commits

Author SHA1 Message Date
Vlad Zahorodnii
9208fb9926 Remove unused include 2022-08-16 12:18:04 +03:00
Vlad Zahorodnii
da41985051 wayland: Use already_applied error in kde-output-management-v2 2022-08-16 12:18:04 +03:00
Vlad Zahorodnii
5f15f3b47c wayland: Move output-management-v2 implementation in wayland/
Since both output-management-v2 protocol implementation and the rest of
kwin live in the same place and the fact that kde-output-management-v2
is very plasma specific, we can move Platform::requestOutputsChange() to
the implementation of kde-output-management-v2 protocol, it simplifies
the code a bit and improve code encapsulation.

In order to further simplify kde-output-management-v2 protocol, this
change alters the behavior of the protocol so an output configuration
can be applied only once, which is a very reasonable behavior.
2022-08-16 12:18:04 +03:00
Xaver Hugl
1b1e0ab95f wayland/drmlease: use FileDescriptor class 2022-08-11 21:27:33 +02:00
Xaver Hugl
6cd4d69644 dmabuf: make use of FileDescriptor class 2022-08-11 21:27:33 +02:00
Nicolas Fella
7744a941ce Fix warning about lambda capture
C++20 doesn't like capturing 'this' via '='
2022-08-06 15:12:35 +00:00
Xaver Hugl
8955a2420e replace all uses of QScopedPointer with std::unique_ptr 2022-08-04 12:30:09 +00:00
Aleix Pol
94ee33e9be wayland: Fix touch event delivery to subsurfaces
Use SurfaceInterface::inputSurfaceAt when deciding which surface are we
entering when sending a pointer event from a touch, in case it falls
onto a subsurface.

BUG: 452967
2022-07-29 11:39:12 +00:00
Aleix Pol
c73444dd12 wayland: Do not allocate a full list just to check if there's values 2022-07-29 11:39:12 +00:00
Aleix Pol
dcb1836c6e wayland/autotests: Make sure TestWaylandSurface deletes the surfaces it uses 2022-07-28 07:23:56 +00:00
Aleix Pol
a94f5c0d7f wayland/autotests: Make sure SeatInterface gets deleted 2022-07-28 07:23:56 +00:00
Aleix Pol
4af69643e1 wayland/autotests: Make sure we delete the seat
The parent is the second argument, it therefore was nullptr and it broke
the assumption from few lines below that it's owned by the display.
2022-07-28 07:23:56 +00:00
David Edmundson
62cf7e8830 Only calculate surfaceInputTransformation when we have a surface 2022-07-20 22:00:36 +00:00
Aleix Pol
4220e7ac25 wayland/tablet_v2: Keep also the pad surface in a QPointer
This way we make sure that we don't explode if for some reason the
surface is destroyed (e.g. it's closed).
This will make it work exactly like the other references to
SurfaceInterface.

BUG: 456817
2022-07-20 15:23:33 +02:00
David Edmundson
7292af3d04 Use floating geometry throughout
With fractional scaling integer based logical geometry may not match
device pixels. Once we have a floating point base we can fix that. This
also is
important for our X11 scale override, with a scale of 2 we could
get logical sizes with halves.

We already have all input being floating point, this doubles down on it
for all remaining geometry.

- Outputs remain integer to ensure that any screen on the right remains
aligned.
 - Placement also remains integer based for now.
- Repainting is untouched as we always expand outwards
 			   (QRectF::toAdjustedRect().
 - Decoration is untouched for now
 - Rules are integer in the config, but floating in the adjusting/API
This should also be fine.

At some point we'll add a method to snap to the device pixel
grid. Effectively `round(value * dpr)  / dpr` though right now things
mostly work.

This also gets rid of a lot of hacks for QRect right and bottom which
are very
confusing.

Parts to watch out in the port are:
 QRectF::contains now includes edges
QRectF::right and bottom are now sane so previous hacks have to be
removed
 QRectF(QPoint, QPoint) behaves differently for the same reason
 QRectF::center too

In test results some adjusted values which are the result of
QRect.center because using QRectF's center should behave the same to the
user.
2022-07-14 10:04:46 +01:00
Xaver Hugl
c050716a3b wayland/drmlease: correct DrmLeaseDeviceV1Interface::setDrmMaster 2022-07-13 12:27:54 +00:00
Xaver Hugl
9ac3c64d4c wayland/drmlease: split up DrmLeaseV1Interface::deny 2022-07-13 12:27:54 +00:00
Xaver Hugl
919b56e9a2 drmlease: send device done event correctly 2022-07-13 12:27:54 +00:00
David Edmundson
06db7fc7ff Map XdgSurface to XdgWMBase instances properly
xdg_wm_base is a global that with a single instance in our high level
wrapper. Our surface wrapper needs to get the xdg_wm_base::Resource
instance on occastion.

Currently we go via wl_client for the mapping, but this breaks down
should a client bind wm_base twice.

BUG: 456349
2022-07-08 11:57:57 +00:00
Aleix Pol
298424d089 XdgOutput: Ensure we update the output size when the overrideScale changes
scaleOverride is set by KScreen through KConfig, so it's asynchronous to
the rest of update calls that may happen.
2022-07-06 12:57:30 +00:00
Vlad Zahorodnii
b5ea9381d1 wayland: Send drm-lease-device::done event to the correct resource
When sending the drm_lease_device_v1.done event, we pass a connector
resource, but we need to pass a device resource.
2022-07-06 11:36:55 +03:00
David Edmundson
4ced407828 Emit scaleOverride changed signal 2022-07-05 17:00:38 +00:00
Vlad Zahorodnii
a6d72d3f60 wayland: Introduce IdleDetector
The IdleDetector is an idle detection helper. Its purpose is to reduce
code duplication in our private KIdleTime plugin and the idle wayland
protocol, and make user activity simulation less error prone.
2022-06-29 20:27:50 +03:00
Aleix Pol
3d3fcd7ab4 tablet: Leave the surface we were previously on, not the one we are going to
This sometimes results in a crash and it's logically wrong as it was.
2022-06-28 03:39:31 +02:00
Vlad Zahorodnii
b62dd29210 backends/drm: Change the base class of DrmLeaseOutput
At the moment, the DrmLeaseOutput class inherits from the
KWaylandServer::DrmLeaseConnectionV1Interface class. While this works,
it's not a future-proof design. For example, kwin could also lease its
"desktop" outputs in order to let another wayland compositor run
alongside it.

Also, it's a good practice to prefer composition over inheritance.
2022-06-23 19:51:24 +00:00
Weng Xuetian
18763d1483 Fix flaky testTextInputV3Interface
In a74c436156, we changed behavior that
every commit() will be followed by a done(), which makes this test might
catch a different done() from server. Change the spy to make sure it
exhaust all other done before checking the one expected.
2022-06-23 14:44:42 +00:00
Laurent Montel
d1837b8603 Remove extra ';' 2022-06-23 06:56:25 +02:00
Vlad Zahorodnii
9d916fa60d wayland: Use shared DmaBufAttributes type 2022-06-13 10:22:29 +00:00
Vlad Zahorodnii
2761df727d wayland: Refactor dmabuf attributes in linux-dmabuf-v1
At the moment, dmabuf importing is scattered all over the place in kwin.
It would be great if we had one function that takes dma-buf attributes
and returns an EGLImage if successful.

As the first step, make linux-dmabuf-v1 implementation provide dmabuf
attrs compatible with KWin::DmaBufAttributes.
2022-06-13 10:22:29 +00:00
Vlad Zahorodnii
00df0a7019 wayland: Explicitly initialize surface size to 0
QSize() will construct an invalid size. An invalid size has width and
height set to -1. In other words, QSize() != QSize(0, 0). This can create
issues when computing the bounding rect of a surface that has invisible
subsurfaces.

For example, if the subsurface rect is QRect(0,0 -1x-1), the top-left
corner of the bounding rect will be affected.

In order to make computation of the bounding rect robust, initialize the
surface size to 0 explicitly.

BUG: 454535
2022-06-13 12:25:28 +03:00
Weng Xuetian
a74c436156 Always send a done after commit for text input v3.
In Gtk's text-input-v3 implementation it expect done to update the
client serial after every commit. Though it is unclear whether this is a
protocol requirements, do the same thing like mutter for more
compatiblity, especially Gtk3 is in EOL not likely to be patched any
time soon.

To do so, we will need to keep track of the last active preedit,
otherwise only send_done() will clear the preedit.
2022-06-11 20:24:35 +00:00
David Edmundson
52900dc2d6 [wayland] Fix surface unit test
Behaviour was fixed in c3f5f8ce01. If an
item starts at 0,0 and is 100 pixels wide in normal geometry the 100th
pixel is not inside the rectangle.

SubSurface::testSurfaceAt was adjusted correctly but this was missed as
we test the same thing twice!
2022-06-10 14:00:58 +00:00
David Edmundson
c3f5f8ce01 [wayland] Fix SurfaceInterface::surfaceItemAt
QRectF::contains includes all edges. If two subsurfaces are next to each
other ::contains will treat it as having a singularity where a value is
on 2 subsurfaces rather than either one of the other, which isn't what
we want for our purposes.

The unit test is extended but also featured some wrong values, the
biggest clue that it was wrong was that we used different test
co-ordiantes for surfaceContains and inputContains.
2022-06-09 09:43:13 +00:00
David Edmundson
419c0b81fd Support an alternative harcoded scale for X
Anything in xcb_ structs are always in X local, all member variables
aside from buffers are in kwin local space.

This patch ignores a few paths that are not relevant on wayland.
2022-06-07 11:58:26 +01:00
David Edmundson
d70bd2435b Introduce client level scale overrides
This allows for compositor managed different co-ordinate space between kwin's
logical co-ordinate space and a client's logical co-ordinate space.

When combined with a modified kwin!1959 this allows us to set a DPI in xrdb and
mark all xwayland windows as being 2x (or other) and avoid upscales for xwayland
clients in a way that doesn't impact other wayland clients or require
third-party changes. Any use of fractional values is in layers we control
instead of over the wire. kwayland-server is the right place for this
abstraction as we need Outputs to differ on a per resource basis. Something we
can't control from within kwin.

Right now only protocols used by Xwayland are covered. If we covered
remaining protocols we can offer user-control on all remaining clients which
could open up other possibilities such as a user controlled dynamic resizing,
or adapt to possible future protocol changes with wayland scaling.
2022-06-07 08:33:55 +01:00
Xaver Hugl
4874066423 port many Qt shared pointers to standard smart pointers
There are a few benefits to using smart pointers from the standard library:
- std::unique_ptr has move semantics. With move semantics, transfer of ownership
can be properly expressed
- std::shared_ptr is more efficient than QSharedPointer
- more developers are used to them, making contributions for newcomers easier

We're also already using a mix of both; because Qt shared pointers provide
no benefits, porting to standard smart pointers improves consistency in
the code base. Because of that, this commit ports most of the uses of QSharedPointer
to std::shared_ptr, and some uses of QScopedPointer to std::unique_ptr
2022-06-04 16:57:29 +00:00
Luca Carlon
da0dd1e367 Support new AppletPopup window type
See the discussion in https://invent.kde.org/frameworks/plasma-framework/-/merge_requests/500.

BUG: 411462
BUG: 332512
FIXED-IN: 5.25
2022-05-27 21:49:37 +00:00
Vlad Zahorodnii
e6a2cbc345 wayland: Simplify keystate protocol implementation
Access input machinery directly to monitor modifiers.

Tested-by: Merge Service <https://invent.kde.org/plasma/kwin/-/merge_requests/2447>
Part-of: <https://invent.kde.org/plasma/kwin/-/merge_requests/2447>
2022-05-23 07:06:29 +00:00
Vlad Zahorodnii
1ee00bc6f9 wayland: Fix drag-and-drop issues in Firefox
At the moment, the data offer initializes supported and preferred action
to "none". But if the target doesn't accept anything the source
provides, the compositor may still need to send action events with "none"

This change makes data offer and data source provide dnd actions wrapped
in std::optional in order to indicate if they have been set explicitly.
2022-05-19 07:00:43 +00:00
Xaver Hugl
a262f2b28a Revert "wayland/outputdevice: use OutputMode directly"
This reverts commits 67181d5db7 and
d03e352dbf.

BUG: 454014
2022-05-19 00:59:54 +02:00
Xaver Hugl
d03e352dbf wayland/outputinterface: fix crash
The current mode may be nullptr
2022-05-18 10:03:13 +00:00
Xaver Hugl
67181d5db7 wayland/outputdevice: use OutputMode directly 2022-05-18 07:04:32 +00:00
Xaver Hugl
441266c427 wayland/outputinterface: use the same enums as core KWin 2022-05-17 19:05:15 +00:00
Vlad Zahorodnii
a47f18d8a2 wayland: Fix supported action initialization in data offer interface
Currently we guess the supported and preferred dnd actions in data offer
for version >= 3. This can create problems because kwin may not send the
right action events when the supported dnd actions actually change.
2022-05-16 12:38:07 +00:00
Alex Richardson
a264938ff3 Simplify cross-compilation of qtwaylandscanner_kde
I am trying to cross-compile and since qtwaylandscanner_kde is used
during the build, I need to build a native version of the
qtwaylandscanner_kde tool first. This change allows building
qtwaylandscanner_kde as a standalone CMake project which the cross-build
can then be pointed at to find the host tool. If an explicit path to
qwaylandscanner_kde is not passed, we will try to use ExternalProject_Add
to build it. This approach was taken from ksyntaxhighlighting:
https://invent.kde.org/frameworks/syntax-highlighting/-/blob/master/src/indexer/CMakeLists.txt

This patch makes it significantly easier to cross-compile KWin, as we now
only need a native QtCore library instead of all the dependencies.
2022-05-10 16:34:49 +00:00
David Redondo
f6bb95f18e Bump plasmashell version to 7 2022-05-09 15:59:19 +00:00
Volker Krause
f32df68f3d Use the properly named screencast Wayland protocol file
This is needed to build with Qt6.
2022-05-06 19:12:06 +00:00
David Edmundson
ab06dd2e31 Add destructor for primary output global 2022-05-06 11:37:54 +00:00
David Redondo
d548f4bce4 Implement plasma-surface open-under-cursor
The surface is positioned at the current cursor location but kept in
bounds to keep it fully visible when the cursor is near the screen border.
2022-05-06 07:19:25 +00:00
Xaver Hugl
aa432e5947 outputconfigurationinterface: don't crash if mode is invalid
When the client makes the request, the compositor may have already
destroyed the mode object.

BUG: 453042
FIXED-IN: 5.24.5
2022-04-29 17:38:08 +00:00