Commit graph

1350 commits

Author SHA1 Message Date
Vlad Zahorodnii
88db280f2a Fix -Wdeprecated-enum-enum-conversion
Even though zwp_text_input_v2_content_hint and
QtWaylandServer::zwp_text_input_v2::content_hint represent the same
values, they are not the same from the compiler perspective.
2023-03-14 16:29:36 +00:00
David Edmundson
46cad20ea8 wayland: Cancel selections if set without focus
Otherwise we confused clients in the following situation:
Client A sets selection, but due to timing has lost focus
User copies something in client B
Client later tries to paste in client A.
Client A still thinks it owns the selection so does nothing.

CCBUG: 459389
2023-03-03 11:25:42 +00:00
Vlad Zahorodnii
10df3b0eb0 Remove Qt 5 specific code 2023-02-28 18:30:26 +02:00
Vlad Zahorodnii
d9f5d432be Port to KF6 2023-02-28 18:30:26 +02:00
Vlad Zahorodnii
43cac75034 wayland: Fix xdg-toplevel and xdg-popup window initialization
Buggy clients can commit the wl_surface several times in a row. On the
other hand, XdgToplevelInterface and XdgPopupInterface consider a
surface to be initialized if it has been configured. If the second
wl_surface commit comes before the configure event is sent, kwin will
initialize a toplevel or popup twice, which can trigger asserts.

BUG: 466530
2023-02-27 15:43:56 +00:00
Xaver Hugl
4cd25cf571 cursor: make position, hotspot and size floating point
This allows all pixel positions to be used on high dpi screens,
and corrects damage tracking with Xwayland cursors

CCBUG: 466094
2023-02-20 21:01:39 +00:00
David Edmundson
ada8e40792 outputchangeset: Round passed scale
Converting to wl_fixed is lossy. Especially for non-round values like 1.15.

This causes various visual glitches and off sizes.

Given we're using units of 120ths for the fractional scale protocol it makes sense
to fix the passed values for anything else over the wayland protocol.

BUG: 465850

Testing done:
ran a 1920 screen at 1.15 scale, got a logical size of 1670 which matches what it should be
2023-02-20 10:02:06 +00:00
Vlad Zahorodnii
160cc98597 wayland: Fix a typo in DataControlDeviceV1Interface::sendPrimarySelection()
interfaceVersion() is not the same as the resource version.
2023-02-13 13:16:50 +02:00
David Edmundson
d084629f3c wayland: Version check before send_primary_selection calls
This is only in v2

BUG: 465657
2023-02-13 09:38:24 +00:00
Andreas Cord-Landwehr
4c2952a533 Add missing cmath include for std::ceil 2023-02-12 12:12:46 +01:00
Andreas Cord-Landwehr
80b5deb032 Include missing header for std::round 2023-02-12 12:00:37 +01:00
Andreas Cord-Landwehr
484d2da046 Set CXX standard for crossbuilding utility 2023-02-12 08:54:42 +01:00
Vlad Zahorodnii
e1e9e89f34 wayland: Remove SeatInterfacePrivate::accumulatedCapabilities
The seat no longer posts the relevant protocol error.
2023-02-09 20:15:55 +02:00
David Edmundson
e0c66d42cb Match pointer/keyboard/touch lifespan to Seat lifespan
PointerInterface is a "Server-managed multicasting resource". As in we
have one QObject, managed by the server, but internally it represents
multiple resources from various clients.

We cannot control the lifespan of those resources, they may persist long
after we stop having these capabilities on the seat.

If we delete our pointer object when we stop advertising a pointer
capability we have race conditions with clients calling release, or
potentially even having a seat_get_pointer in flight.

It's easier and safer just to have PointerInterface last as long as the
Seat. If we don't have a mouse no-one should try to bind, and even if
they did or remained bound long after we stop having a mouse it won't do
any harm as there are no mouse events to broadcast.
2023-02-09 16:36:24 +00:00
David Redondo
d6b75907cc Data control: Resend selection when not following through with request
Normal event flow is from a client view is
-> wlr_data_control_device.set_selection
wlr_data_control_device.selection
or
wlr_data_control_source.cancelled
wlr_data_control_device.selection
However when the race mentioned in the comment happens the client
sees
-> wlr_data_control_device.set_selection
wlr_data_control_device.selection
wlr_data_control_source_cancelled
Which can confuse client state thinking the clipboard didn't change
as it associates the selection event with its own request. Resend
the selection event in this case to tell the client the correct
selection.
BUG:464509
FIXED-IN:5.27
2023-01-24 09:35:20 +00:00
John Brooks
a276e6dc10 wayland: Fix high-res scroll events with low-res clients
Sending an axis event for every high-res scroll wheel movement was
causing excessive scrolling on clients that expect low-res (discrete)
scroll events.

Signed-off-by: John Brooks <john@fastquake.com>
2023-01-19 13:06:51 +00:00
Weng Xuetian
ff092b12b0
Add text-input-v1 support
Main reason to support this old interface is because this is the only
protocol chromium (and effectively all electron app) that supports.

The protocol itself very similar to text-input-v2 with some minor difference.
So not hard to support by just duplicate some existing code. There might be
some unclear protocol design issue if kwin need to support multiple SeatInterface,
but for now it should be ok to assume there is only one seat.

Tested using fcitx5 against weston-editor and chromium with flag
--enable-features=UseOzonePlatform --ozone-platform=wayland
--enable-wayland-ime
2023-01-16 10:34:37 -08:00
Vlad Zahorodnii
fe1054a52a autotests: Fix a typo in testKeyboardShortcutsInhibitorInterface
We need to monitor whether the inhibitorActive signal gets emitted. It
reduces the test's execution time from about 5 seconds to a couple
milliseconds.
2023-01-11 20:34:27 +00:00
Xaver Hugl
b4e8d44967 remove some macros with questionable usefulness 2023-01-11 19:22:23 +00:00
Han Young
d57495c8df Remove tablet tool when the tablet device is removed
Explicitly remove the tablet tool device when the corresponding sys event interface is removed.
2023-01-05 14:40:46 +00:00
Andreas Cord-Landwehr
ee87e8699d Include missing cmath header for std::round
Fixes compilation on Yocto Kirkstone.
2022-12-31 12:18:27 +00:00
Joshua Goins
37adc06603 wayland: Send tilt and rotation events, if supported
While tilt is sent on X11, we're currently only sending pressure events and not tilt/rotation events on Wayland. Since Krita is still running in X11, and it's running through XWayland - it's technically a Wayland client and gets no tilt/rotation. This fixes that issue :-)

I saw !3231 which was working on complete Wayland tablet support, but it's been stagnating. I just wanted tilt & rotation support now, so I added a way to query capabilities from the `m_capabilities` variable on the private interface we already fetched.

Tested on Krita using the Tablet Debug Log.
2022-12-30 01:57:25 +00:00
Xaver Hugl
f6b6d3051b use std::chrono::microseconds for time in input events 2022-12-21 21:07:15 +01:00
Xaver Hugl
0777d076e6 wayland/seatinterface: remove properties
They're not used for anything
2022-12-21 21:07:15 +01:00
Vlad Zahorodnii
877406ba50 wayland: Emit Cursor::changed signal when cursor surface is committed
The damaged signal is wired to the KWaylandServer::Cursor::changed
signal to indicate when the cursor image changes, makes sense.

But it can create issues if you repaint cursor SurfaceItem when the
SurfaceInterface::damaged signal is emitted. There might be other
signals that we need to wait for to invalidate SurfaceItem's state.

The SurfaceInterface::committed is a better signal. When it's emitted,
the surface commit has been completed. Technically, it's different from
the damaged signal, but in practice they are equivalent. GTK and Qt
always damage the cursor surface.
2022-12-20 09:06:19 +00:00
Xaver Hugl
3204d6ac3c port all headers to pragma once 2022-12-16 20:58:17 +00:00
Xaver Hugl
efbc86ef6d wayland/drmlease: invalidate lease requests with invalid connectors 2022-12-16 13:47:48 +00:00
Xaver Hugl
c2150988f2 wayland/drmlease: don't connect with nullptr parameter 2022-12-16 13:47:48 +00:00
Xaver Hugl
2c0091aacf wayland/drmlease: don't leak lease connectors 2022-12-16 13:47:48 +00:00
Vlad Zahorodnii
da229ebe85 Revert "Disable PrimarySelection in seat setPrimarySelection"
This reverts commit e60f26e0ab.

Cancelling the primary selection breaks text selection in applications
such as gedit. In those apps, you can't select text neither with your
mouse nor keyboard.

BUG: 461498
2022-12-16 12:47:11 +00:00
Vlad Zahorodnii
bf48c3b80d scene: Remove dnd icon hack
Currently, kwin blits the dnd icon onto the cursor image. This doesn't
work on mobile because the cursor is usually hidden there.

As a short term solution, put the dnd icon in the Scene. In the future,
it needs to be put in its own render layer.
2022-12-15 19:19:37 +00:00
Aleix Pol
fc2447071e Xwayland: Allow users to optionally let Xwayland eavesdrop on certain modes
It's somewhat popular for voice communication applications to support
Push-to-Talk. This means that the process itself expects to get all of
the system input. This behaviour albeit sound does not work on Wayland
systems.

This commit adds an option to let legacy X11 applications that assume
they will be getting all information to do so until these apps are
properly ported to the XDP GlobalShortcuts.
2022-12-15 16:35:37 +00:00
Aleix Pol
245859637f kwaylandserver: avoid creating unnecessary containers just to iterate 2022-12-15 16:35:37 +00:00
Xaver Hugl
096351cff7 wayland/outputmanagement: ignore non-desktop outputs
Otherwise, applying all output configurations fails when you have a VR
headset connected
2022-12-15 13:58:58 +00:00
Xaver Hugl
0efb8d01db wayland: implement output order interface
Only thing missing is the kscreen integration bit, but that can't be done before kscreen actually stores the output order somewhere.

Depends on https://invent.kde.org/libraries/plasma-wayland-protocols/-/merge_requests/52
2022-12-15 10:08:36 +00:00
David Edmundson
c4b134da8d Implement wp-fractional-scale-v1
This allows clients to provide buffers at native resolutions when
fractional scaling is used.

Virtual backend is adjusted to support scales as floats
2022-12-12 12:16:18 +00:00
Xaver Hugl
20b94c9025 wayland/outputmanagement: reject configurations if outputs change
The meaning of the request is questionable after an output gets added
or removed, and it's an easy way to prevent dangling pointers.

BUG: 460953
2022-12-10 00:39:19 +01:00
David Redondo
cb9ffbcd01 Remove selectionCleared and sendClearSelection from datadevice and friends
Having both selectionChanged and selectionCleared as well as
sendSelection and sendClearSelection complicates things. API users
have to connect to both signals, internally the methods have logic
to call themselves but in the end do the same as the protocols only
know send_selection.
2022-12-09 10:34:08 +01:00
Xaver Hugl
7c3489b1a5 wayland/tearingcontrol: actually create the d pointer object 2022-12-06 11:49:59 +00:00
Vlad Zahorodnii
fdea693da5 wayland: Implement xwayland-shell-v1
As explained in [1], WL_SURFACE_ID is racy because wayland aggressively
reuses object ids. The xwayland-shell-v1 protocol intends to fix that by
two things:

* associating a serial number with each X11 window. This is to avoid
  potential XID reuse
* referring to the wayland surface by the wl_surface rather than
  specifying an object id

Unfortunately, we will have to maintain both legacy WL_SURFACE_ID and
WL_SURFACE_SERIAL for quiet some time until most instances of Xwayland
support the xwayland-shell-v1 protocol [2].

[1] https://gitlab.freedesktop.org/xorg/xserver/-/issues/1157
[2] https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/163
2022-12-05 17:09:01 +02:00
Xaver Hugl
b261050be1 wayland: implement tearing_control_v1 2022-12-05 12:52:18 +00:00
Vlad Zahorodnii
bb53b21c4c wayland: Add more inert Output checks 2022-11-22 08:17:20 +00:00
Vlad Zahorodnii
98b65bb447 Port a usage of QScopedPointer to std::unique_ptr 2022-11-16 00:38:05 +02:00
Xaver Hugl
704d1d639a qBound -> std::clamp 2022-11-13 14:32:16 +00:00
Xaver Hugl
d265535f9b qMin -> std::min 2022-11-13 14:32:16 +00:00
Xaver Hugl
b0b7c8b1d3 qMax -> std::max 2022-11-13 14:32:16 +00:00
Vlad Zahorodnii
b830d408af core: Rename Platform to OutputBackend 2022-11-10 10:10:28 +02:00
Vlad Zahorodnii
9f345d4dd3 autotests: Fix remaining "using namespace KWayland::Client" 2022-11-08 23:15:17 +02:00
Vlad Zahorodnii
89607dfebd qAsConst -> std::as_const
We started using std::as_const() in some parts of kwin, so let's use it
everywhere for the code consistency sake.
2022-11-01 16:52:01 +02:00
Vlad Zahorodnii
7fffe99328 build: Add -Wno-unused-parameter compiler option
Due to being a compositor, kwin has to conform to some certain
interfaces. It means a lot of virtual functions and function tables to
integrate with C APIs. Naturally, we not always want to use every
argument in such functions.

Since we get -Wunused-parameter from -Wall, we have to plumb those
unused arguments in order to suppress compiler warnings at the moment.

However, I don't think that extra work is worth it. We cannot change or
alter prototypes in any way to fix the warning the desired way. Q_UNUSED
and similar macros are not good indicators of whether an argument is
used too, we tend to overlook putting or removing those macros. I've
also noticed that Q_UNUSED are not used to guide us with the removal no
longer needed parameters.

Therefore, I think it's worth adding -Wno-unused-parameter compiler
option to stop the compiler producing warnings about unused parameters.
It changes nothing except that we don't need to put Q_UNUSED anymore,
which can be really cumbersome sometimes. Note that it doesn't affect
unused variables, you'll still get a -Wunused-variable compiler warning
if a variable is unused.
2022-10-31 15:50:37 +00:00
Aleix Pol
f649363a4e Address warnings
|-operator on bool
Comparison on technically different enums.
2022-10-31 12:23:06 +00:00
Vlad Zahorodnii
61644305f0 wayland: Drop unused field in XdgOutputManagerV1Interface 2022-10-27 11:57:52 +00:00
Vlad Zahorodnii
0c34957625 wayland: Hide XdgOutputV1Interface class
With the pull approach, the XdgOutputV1Interface class doesn't have to
be exposed in the public api and can be made private to simplify the
implementation of the xdg-output-v1 protocol.
2022-10-27 11:57:52 +00:00
Vlad Zahorodnii
b40d76d35c wayland: Prevent matching dnd actions after drop
Currently, kwin will continue matching dnd actions after a drop. This is
mainly needed in order to make "ask" action work.

However, it appears like there are clients in the wild that update offer
actions after receiving wl_data_source.dnd_drop_performed and wl_data_device.drop
events.

One could argue that's a client bug, and perhaps it is, but the spec is
vague about that. In meanwhile, let's make sure that dnd action matching
is active after drop only when the selected data source action is "ask."
2022-10-27 11:03:06 +00:00
Nicolas Fella
56c2afc749 Bump PlasmaWindowManagement version to 16
Needed for resource name
2022-10-25 15:52:19 +02:00
Vlad Zahorodnii
3de852cd4f wayland: Drop DataDeviceInterface::updateProxy()
It's unused.
2022-10-25 11:13:14 +00:00
John Brooks
a1191bea18 wayland: Fix missing relative motion events
Use isNull on QSizeF to check for a zero delta instead of comparing it
with a default-constructed QSizeF, which in practice initializes to
(-1.0,-1.0). This caused relative motion events to be omitted if the
delta happened to be equal to (-1.0,-1.0), causing mouse jumping in some
applications.

BUG: 444510

Signed-off-by: John Brooks <john@fastquake.com>
2022-10-25 08:18:45 +00:00
Weng Xuetian
84f54e9ffa Implement a enableRequested signal for text-input-v3
The signal will be emitted if text-input-v3 applies a new enable state
if it's already enabled.

In Gtk's implementation, sending text_input_v3.enable for the second
time has the similar semantics of text-input-v2.showInputPanel. Try to
connect them together and add corresponding test.

See also: a95cfb1c45/gtk/gtkimcontextwayland.c (L555)
2022-10-25 04:34:26 +00:00
Xaver Hugl
ceae717500 output: don't round geometry as often
CCBUG: 459373
2022-10-23 20:06:38 +00:00
Vlad Zahorodnii
f19957bdb2 autotests: Fix testWaylandSeat in Qt 6 build 2022-10-22 15:01:17 +03:00
Vlad Zahorodnii
e665c1c80a autotests: Fix testPointerConstraintsInterface with Qt 6 build
QTEST panics because of type difference (qsizetype vs int).
2022-10-22 11:12:52 +00:00
Weng Xuetian
90df07157b Fix potential race condition when text input state change and focus change happened at the same time
In some cases, stateCommitted may fire after a new surface being focused
and in correctly set input method to be inactive. This can be reproduced
by switch client between an active text input v3 client and text input
v2 client.
2022-10-21 19:14:41 +00:00
Xaver Hugl
49ad013295 backends/drm: remove Wayland bits for drm leasing 2022-10-21 13:33:42 +02:00
Vlad Zahorodnii
624886f0de wayland: Drop ScopedGlobalPointer 2022-10-20 12:27:51 +00:00
Vlad Zahorodnii
c3f970b3c3 wayland: Make XdgOutputV1Interface pull information from Output 2022-10-20 12:27:51 +00:00
Xaver Hugl
b99ae81b08 wayland: implement the content-type protocol 2022-10-20 13:46:58 +02:00
Vlad Zahorodnii
f0376367b1 Add explicit POSITION_INDEPENDENT_CODE 2022-10-20 09:37:00 +00:00
Vlad Zahorodnii
de3aa69c1e Fix some tests not building with Qt 6
Client-side wrappers for input-method-unstable-v1 fail to build because
wl_keyboard_interface is referenced in the header file generated by
wayland-scanner.

Unfortunately, qt6_generate_wayland_protocol_client_sources() forces
--include-core-only argument, this is addressed in Qt 6.4.1, but in
meanwhile let's ship a copy of Qt6WaylandClientMacros.cmake file until
the required Qt version is out.
2022-10-20 09:37:00 +00:00
Vlad Zahorodnii
0c28de5b42 wayland: Add support for ext-idle-notify-v1
Wayland protocols MR: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/29
2022-10-20 06:36:58 +00:00
Vlad Zahorodnii
28c19c8215 wayland: Make output subpixel info static
subpixel info cannot change.
2022-10-20 06:18:30 +00:00
Vlad Zahorodnii
146bed14bc wayland: Make OutputInterface pull information from Output
It's a necessary step towards killing src/waylandoutput.{h,cpp}. Besides
that, it makes OutputInterface more reusable and less error prone.
2022-10-20 06:18:30 +00:00
David Edmundson
1df10c3518 Handle scale override in locked and confined pointers
BUG: 460532
2022-10-17 13:40:03 +01:00
David Edmundson
dae7d738a3 Move installPointerConstraint calls into the constraint handlers 2022-10-17 13:36:56 +01:00
Albert Astals Cid
19694fb046 Future proof the code for C++20
warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20
2022-10-14 13:30:24 +00:00
Vlad Zahorodnii
186ef5e588 wayland: Fix handling of removed outputs in DpmsInterface
If an output is removed, its handle is invalid, which can lead to a
crash.
2022-10-14 14:53:42 +03:00
Vlad Zahorodnii
71bcbf852e wayland: Sync output device's enabled property
The output can be already disabled when the output device is created.

BUG: 460247
2022-10-14 09:28:52 +00:00
Vlad Zahorodnii
c147340878 wayland: Add support for high resolution scrolling
In libinput 1.19, three new pointer axis events were added in order to
provide support for high-resolution scrolling.

LIBINPUT_EVENT_POINTER_AXIS is de-facto deprecated and new users of
libinput should use instead SCROLL_WHEEL, SCROLL_FINGER, and
SCROLL_CONTINUOUS.

Discrete deltas were replaced with v120 delta values. 120 corresponds to
a single discrete delta. Smaller values correspond to "partial" wheel
ticks.

https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/72
2022-10-11 14:04:13 +03:00
Méven Car
e60f26e0ab Disable PrimarySelection in seat setPrimarySelection
BUG: 456167
2022-09-29 10:32:03 +00:00
Vlad Zahorodnii
f343f3fb80 wayland: Use true logical geometry in Display::outputsIntersecting()
Display::outputsIntersecting() computes the logical geometry using the
oriented mode size and the scale factor, but OutputInterface's scale
factor is ceil()ed up, so the resulting logical geometry can be incorrect.

BUG: 459733
2022-09-27 12:07:03 +00:00
Andreas Cord-Landwehr
0a22d390d6 Explicitly include cmath 2022-09-25 17:20:33 +02:00
David Redondo
16a5831fee Implement xwayland-keyboard-grab protocol
Only XWayland can see and bind to this global.
When a XWayland surface is focused that has a grab, shortcuts
are inhibited.
BUG:455159
FIXED-IN:5.26
2022-09-23 15:49:01 +02:00
Vlad Zahorodnii
3546cc0541 wayland: Send wl_data_offer.source_actions before wl_data_device.enter
This makes kwin's behavior consistent with other wayland compositors
(sway, GNOME Shell, etc) and it's reasonable to provide all the
information about the data source before wl_data_device.enter. It also
makes Firefox happier.

Relevant discussion upstream: https://gitlab.freedesktop.org/wayland/wayland/-/issues/322

CCBUG: 445661
2022-09-23 11:43:41 +03:00
Vlad Zahorodnii
169c784c51 wayland: Bump plasmashell protocol version
See https://invent.kde.org/libraries/plasma-wayland-protocols/-/merge_requests/48
2022-09-21 13:46:55 +00:00
Vlad Zahorodnii
6d3f00e82c autotests: Remove QVERIFY(signalSpy.isValid())
We use the PMF syntax so the isValid() check is unnecessary as the
compiler will notify about wrong signal at compile time. It makes
writing autotests feel less boilerplaty.
2022-09-14 09:21:29 +00:00
Vlad Zahorodnii
98b8a5d4ba autotests: Use PMF syntax in QSignalSpy 2022-09-14 09:21:29 +00:00
Aleix Pol
d268ac449e tablet: destroy resources when they are asked to
CCBUG: 458793
2022-09-13 06:41:04 +00:00
Xaver Hugl
5f886d72cf backends/fakeinput: port away from QObject memory management 2022-09-12 20:55:32 +00:00
Vlad Zahorodnii
d1de19e212 Make Workspace process batched output updates
Currently the Workspace processes output updates as they occur, e.g.
when the drm backend scans connectors, the Workspace will handle
hotplugged outputs one by one or if an output configuration changes the
mode of several outputs, the workspace will process output layout
updates one by one instead of handling it in one pass. The main reason
for the current behavior is simplicity.

However, that can create issues because it's possible that the output
layout will be temporarily in degenerate state and features such as
sticking windows to their outputs will be broken.

In order to fix that, this change makes the Workspace process batched
output updates. There are several challenges - disconnected outputs have
to be alive when the outputsQueried signal is emitted, the workspace
needs to determine what outputs have been added or removed on its own.
2022-09-12 08:03:48 +00:00
Aleix Pol
006ee8b87a inputmethod: Allow forcing the display of the input method
This makes it possible to show the input method when using a client that
doesn't support Wayland input methods (e.g. Xwayland).

This adds 2 dbus API entry points:
- activeClientSupported property: That tells us if the current client
doesn't support text-input-v*
- forceActivate method: forces the activation of the input method. This
configures the input method in a state that we can use to forward the
input method's keystrokes to the client, emulating a hardware keyboard.

BUG: 4399911
2022-09-08 23:30:16 +02:00
David Edmundson
7927b17d40 Avoid rounding issues in Surface damage tracking
When a buffer is damaged via damage_buffer we have to map things to
logical space. This mapping can involve floating numbers, most notably
with the X11 override, right now that's via a QRegion which is always
integer. For damage we always want to round outwards to the larger
space, not to the nearest space.
2022-09-08 16:18:12 +01:00
Vlad Zahorodnii
1b5814c0f2 Remove unused core/platform.h includes 2022-09-06 11:21:40 +03:00
Vlad Zahorodnii
d2fb4147fc Move multi-purpose code in its own directory
Things such as Output, InputDevice and so on are made to be
multi-purpose. In order to make this separation more clear, this change
moves that code in the core directory. Some things still link to the
abstraction level above (kwin), they can be tackled in future refactors.
Ideally code in core/ should depend either on other code in core/ or
system libs.
2022-09-06 11:21:40 +03:00
Vlad Zahorodnii
71c9f16673 Fix a typo
Forgot to specify the resource where to send name & description.
2022-09-05 15:17:52 +03:00
Vlad Zahorodnii
330a02d862 wayland: Implement wl_output version 4
wl_output version 4 adds name and description properties. Those
properties were added in wayland 1.20, which we already require.
2022-09-05 14:37:10 +03:00
Aleix Pol
4f20e9216f Make it possible to raise windows on top of the lockscreen
Requires clients to have the
X-KDE-Wayland-Interfaces=kde_lockscreenallowed_v1 set in their desktop
file, then they will be able to use the kde_lockscreenallowed_v1
protocol to raise any surface above the lockscreen.
The protocol has only 1 method, raise_surface to do exactly that.

Makes it possible to implement
https://invent.kde.org/teams/plasma-mobile/issues/-/issues/98
2022-09-02 10:48:49 +00:00
Vlad Zahorodnii
d6706c5ce4 wayland: Prevent sending xdg_output properties if wl_output is removed
If the wl_output has been removed, kwin can crash all Qt clients by
sending a wl_output.done event. Also, it makes no sense to send output
events after the corresponding output has been removed.

CCBUG: 451028
2022-08-30 12:56:47 +00:00
Vlad Zahorodnii
ed49d7c59b Refactor output state setting
If multiple properties that affect the geometry change, then the
Output::geometryChanged() signal will be emitted multiple times, which
in its turn may force the Workspace to re-arrange windows, etc.

With this, the geometryChanged signal will be emitted in more expected
fashion only once as long as relevant property changes are batched.
2022-08-28 14:30:24 +00:00
Vlad Zahorodnii
1baa267127 Remove dpms_interface_p.h
Its contents can be put in the corresponding cpp file as DpmsInterface
is not needed elsewhere but the cpp file.
2022-08-27 10:35:31 +00:00
Vlad Zahorodnii
018a41a123 wayland: Fix lease termination in wp_lease_v1_destroy()
If a drm lease is destroyed, e.g. the app has unexpectedly terminated,
only the finished event will be sent. The leaseRevoked signal won't be
emitted so the drm backend can't clean up DrmOutput::m_lease. Since
m_lease can be a dangling pointer, the drm backend can crash in
DrmGpu::updateOutputs() when it tries to determine if m_lease is still
alive and was not terminated by closing the lease fd on the client side.
2022-08-26 16:07:49 +03:00
Vlad Zahorodnii
b9bc1479f8 wayland: Make the dpms protocol use Output directly
It simplifies the dpms protocol implementation by making it use the
Output directly. It also removes unrelated code in WaylandOutput and
OutputInterface that can be used for future cleanups, e.g. removing
WaylandOutput.
2022-08-25 16:01:38 +03:00