Commit graph

19642 commits

Author SHA1 Message Date
Xaver Hugl
a8055e4546 Refactor DRM presentation
Presentation doesn't have to go through DrmBackend and by moving
DrmGpu::deleteBufferAfterPageflip into DrmBuffer some code can be
simplified
2021-03-22 13:52:50 +00:00
Bharadwaj Raju
8c352f685e Make ghost windows in highlight effect be fully transparent
BUG: 298487
FIXED-IN: 5.22
2021-03-22 12:00:38 +00:00
Kevin Ottens
9a10af9569 Wire the activity protocol parts to AbstractClient 2021-03-22 11:29:41 +00:00
Weng Xuetian
d612d76e09
Replace xdg output done with explicit wl_output done
BUG: 433224
2021-03-19 09:53:22 -07:00
Usarin Heininga
e56acf7118 PlasmaWindowManagement: Adapt to changes to kwayland-server
Also call setStackingOrderUuids when the stacking order changes.
2021-03-19 13:39:14 +00:00
Usarin Heininga
af53647cf7 Set stackingOrderUuids as well. 2021-03-19 13:39:14 +00:00
Nate Graham
37445d9c29 [kcmkwin/kwinrules] Add explanatory text to placeholder messages 2021-03-19 13:13:31 +00:00
Xaver Hugl
ca23bca813 Port DrmSurfaceBuffer to drmModeAddFB2 2021-03-19 08:59:58 +00:00
Ismael Asensio
a82be242ea [kwinrules] Launch full KCM when editing from window menu
When rules configuration is invoked from window `Alt+F3` menu,
we call a custom binary `kwin_rules_dialog` which currently provides
only the rule edition dialog by embedding `RulesEditor.qml` within a
QQuickView.

This MR changes that behavior to call the full KCM from the menu.
The code to match previous rules, or compose a new one based on window
properties has been ported to the KCM from the dialog, so the overall
interaction is similar.

It has several advantages:
 - uses only one entry-point to the code
 - adds discoverability to the full KCM (I guess many users know how to
   create a rule, but not where to delete it later)

And a drawback:
 - only one instance of the KCM can be called at a time, so it will show an
   error when calling it from two different windows, or if the KCM is open
   in System Settings

This drawback can be solved after adding argument passing via dBus in KCM
infraestructure.

BUG: 433837
CCBUG: 417923
2021-03-19 10:16:01 +07:00
Xaver Hugl
38a15996f4 Consider the opaque region for direct scanout 2021-03-18 23:51:29 +01:00
Xaver Hugl
6569bf80c3 EglGbmBackend: use output reference
CCBUG: 432707
2021-03-18 15:22:31 +01:00
Alexander Lohnau
3cbbdbee99 GIT_SILENT Silence warning about unused parameter in windows runner 2021-03-16 08:45:29 +01:00
Xaver Hugl
20fca90855 Consider the tool type for distinguishing between tools 2021-03-14 23:58:17 +01:00
Alexander Lohnau
81b40966ed GIT_SILENT Add trailing comma to enums 2021-03-14 18:06:22 +01:00
Vlad Zahorodnii
75d39f6a8e Revert "wayland: Emulate tablet events only if there is pointer"
This reverts commit ee54fa7898.

Unfortunately, this is not a totally correct fix. If there's no pointer,
we need to announce the wl_pointer capability anyway so clients that do
not support tablet input devices can still receive emulated pointer
events.
2021-03-12 14:13:20 +02:00
Vlad Zahorodnii
ee54fa7898 wayland: Emulate tablet events only if there is pointer
If the seat has no pointer, there is no point for emulating tablet
events.
2021-03-12 10:20:22 +00:00
Vlad Zahorodnii
7b68644974 wayland: Adjust input code to SeatInterface with some renamed methods 2021-03-12 10:19:47 +00:00
Adrien Faveraux
37731af7d2 adapt Output management to kwaylandserver change 2021-03-12 10:14:52 +00:00
Vlad Zahorodnii
5b6c36f953 wayland: Check that seat has wl_pointer before canceling gestures
The seat must have the wl_pointer capability in order to gestures work.
2021-03-12 09:15:40 +02:00
Aleix Pol
9786ea3c58 input: prevent seat touch methods from being called when there's no touch
Otherwise we get a crash as we are asserting with Q_ASSERT(d->touch).
2021-03-11 14:08:40 +00:00
Aleix Pol
58debd72a3 Only scanout when the texture matches the display size
Otherwise drmModeAtomicCommit() in DrmOutput::doAtomicCommit() fails due
to unmatched buffer sizes.

While rendering continues working properly, this makes drm freak out and
try to go back to a previous state (see the test commit in
presentAtomically()) that in turn starts issuing screen events to every
process even though it's just to say the same thing. The fact that this
happens per frame makes the system unusable as soon as fullscreen starts
happening on a scaled display.

Another thing we could do is get EglGbmBackend::scanout() to take care
of the resizing.
2021-03-11 15:01:09 +01:00
David Edmundson
82551e143d Adapt to window management changes
Our wayland interface lifespan only needs to live as long as the window
is mapped.

Given this corresponds directly to the lifespan of AbstractClient we can
just set a parent and everything is handled implicitly.
2021-03-11 12:02:35 +00:00
Méven Car
ef19948c00 Reflect changes in kwayland-server changes
https://invent.kde.org/plasma/kwayland-server/-/merge_requests/180
2021-03-11 08:24:33 +00:00
Vlad Zahorodnii
00fcc3a423 wayland: Adjust kwin to SeatInterface changes 2021-03-11 07:36:31 +00:00
Kevin Ottens
0ab41802f4 Avoid KWin starting kactivitymanagerd synchronously
Prevent KWin from synchronously autostarting kactivitymanagerd. Indeed,
kactivitymanagerd being a QApplication it will depend on KWin
startup... this is unsatisfactory dependency wise, and it turns out
that it leads to a deadlock in the Wayland case
2021-03-10 23:40:59 +00:00
Nicolas Fella
a406eef9a0 Update link to kwin-scripting-api-generator 2021-03-10 17:40:24 +01:00
Aleix Pol
3953c0c650 inputmethod: Use the object to connect to slots
Otherwise I see the Qt::UniqueConnection not working sometimes making
(at least) commitString happen twice consecutively.
2021-03-10 15:32:51 +01:00
Aleix Pol
178e7e22e4 wayland: Do not force qtvirtualkeyboard
Remnant from the past, it made it work weird on some systems, should
have been removed when we removed elsewhere in KWin.
2021-03-10 14:29:12 +00:00
Vlad Zahorodnii
83388295c8 wayland: Adjust kwin to PointerInterface changes 2021-03-10 14:10:16 +00:00
Kevin Ottens
c812ffbe1d Move basic activities support from X11Client to AbstractClient
We're now sharing most of the X11Client activity behavior accross all
clients. This allows to cleanup some of the existing virtuals and remove
quite a bit of code overalls.

Has to introduce an extra platform specific hook since X11Client
serializes the activity information in an atom and we will probably need
to do something similar on the Wayland platform at some point.

This allows us to start interacting with the activities with kwin
wayland. They are not restored properly accross sessions though since
nothing is really persisted and the session management still seems to
be amiss.
2021-03-09 15:22:55 +00:00
Kevin Ottens
da0aed5446 Enable KActivities integration by default in kwin_wayland 2021-03-09 15:22:55 +00:00
Kevin Ottens
41766d3594 Activities now accept AbstractClient, no need to downcast
Which means now it doesn't need to be limited to X11Clients only.
2021-03-09 15:22:55 +00:00
Kevin Ottens
228a6e444a Get Activities to depend only on AbstractClient
Since all the services are available on the abstract class, there is no
need to depend on X11Client anymore.
2021-03-09 15:22:55 +00:00
Kevin Ottens
c795e8a3d8 Move setOnActivity to AbstractClient
Since we want to support activities for wayland clients too this needs
to move up in the hierarchy.
2021-03-09 15:22:55 +00:00
Kevin Ottens
391b7e023e Receive the activity list as a const reference
This is mainly to make that coherent with common coding style in other
places.
2021-03-09 15:22:55 +00:00
David Edmundson
0eb37563e9 Restore script DBus API
The Script class has a DBus API we want to export. At some point this
has got broken and the run method is not exported.

It's a bit messy with script subclasses also having other invokables
that we want to export to scripts, so an adaptor is used to keep things
separated.

The interface name has technically changed, but KWin was doing something
weird and using the same interface names for the manager. Fortunately
calling Plasma code doesn't specify an interface so this still works.
2021-03-09 09:14:13 +00:00
Vlad Zahorodnii
9a786cd8bf effects/screenshot: Minor style fixes
We prefer pragma once and put braces on the same line as the if
statement.
2021-03-09 08:58:22 +00:00
Vlad Zahorodnii
1fb44b5bd5 effects/screenshot: Prepare for versioned dbus interface
On Wayland, when the compositor sends a screenshot to the requesting
app, it encodes the screenshot as a PNG image and sends the encoded data
over the pipe. The requesting app (Spectacle) then needs to decode the
data.

The issue is that encoding PNG images is not cheap. This is the main
reason why Spectacle is shown with a huge delay after you press the
PrtScr key.

In order to fix the latency issue, we need to transfer raw image data.
Unfortunately, the current dbus api of the screenshot is too cluttered
and the best option at the moment is to start with a clean slate.

This change prepares the screenshot effect for versioned dbus interface.
Most of existing dbus logic was moved out in a separate class. In order
to schedule screen shots, the screenshot effect got some new API.

    QFuture<QImage> scheduleScreenShot(window, flags)
    QFuture<QImage> scheduleScreenShot(area, flags)
    QFuture<QImage> scheduleScreenShot(screen, flags)

If a dbus interface needs to take a screenshot, it needs to call one of
the overloaded scheduleScreenShot() functions. Every overload returns a
QFuture object that can be used for querying the result.

This change also introduces "sink" and "source" objects in the dbus api
implementation to simplify handling of QFuture objects.

Note that the QFutureInterface is undocumented, so if you use it, you do
it on your own risk. However, since Qt 5.15 is frozen for non-commercial
use and some other Plasma projects already use QFutureInterface, this
is not a big concern. For what it's worth, in Qt 6, there's the QPromise
class, which is equivalent to the QFutureInterface class.

CCBUG: 433776
CCBUG: 430869
2021-03-09 08:58:22 +00:00
Vlad Zahorodnii
38996d9725 libkwineffects: Introduce EffectScreen
This provides the compositor a way to indicate what output is being
rendered. The effects such as the screenshot can check the provided
screen object in order to function as expected.
2021-03-09 08:58:22 +00:00
Vlad Zahorodnii
b3e7031893 platforms/drm: Fix potential stack corruption
If the file descriptor of the DRM device is greater than FD_SETSIZE, the
stack will be corrupted. However, it is highly unlikely that we ever hit
this case because DRM devices are opened at startup of kwin, so the file
descriptors should small.

In order to prevent the potential stack corruption, this change replaces
the usage of select() with poll().

Unlike select(), the api of poll() is much more sensible. Back 20 or so
years ago the main argument against poll() was that it's not implemented
by all platforms. But, nowadays, it's supported on all major platforms.
2021-03-09 10:27:17 +02:00
l10n daemon script
fd68cf3ff4 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2021-03-08 07:03:02 +01:00
Aleix Pol Gonzalez
05811535d4 Apply 1 suggestion(s) to 1 file(s) 2021-03-06 03:37:51 +00:00
Aleix Pol
92d3cb2f22 inputmethod: If the client hides itself, act accordingly 2021-03-06 03:25:48 +00:00
Xaver Hugl
7a937fc7af Ignore fully translucent Toplevels for direct scanout 2021-03-05 19:59:48 +01:00
Nicolas Fella
ecd9e1c98d Use imported target for Threads 2021-03-04 15:11:30 +00:00
Nicolas Fella
d7ab631e98 Find ECM with KF5 min version
Instead of some randon older version
2021-03-04 15:11:30 +00:00
Nicolas Fella
b7e13da70f Merge two CMAKE_MODULE_PATH set calls 2021-03-04 15:11:30 +00:00
Bhushan Shah
debea631f3 platforms/drm: inhibit the renderloop when screen is turned off
Otherwise we will continue using gpu resources even when we can not show
any content on screen.
2021-03-04 15:01:15 +00:00
Vlad Zahorodnii
e7a5726c8b cmake: Use versionless Qt::Qml imported target
While resolving merge conflicts in a patch that ported kwin away from
QtScriptEngine to QJSEngine, I forgot to switch to versionless imported
targets.
2021-03-04 15:22:47 +02:00
Vlad Zahorodnii
691df1ae00 qpa: Use imported targets for QtCore and QtGui private headers 2021-03-04 13:11:27 +00:00