Commit graph

20747 commits

Author SHA1 Message Date
Aleix Pol
d054b12123 screencast: Skip frames with no damage
Instead of issuing a full redraw. We'll be calling outputChanged when
uploading to drm, there's no need to stream that as well.
2021-11-03 13:23:42 +00:00
Andy Gebauer
f7bd6ef6c1 Update layers.cpp to compile with clang + libcxx 2021-11-03 06:29:57 +00:00
Vlad Zahorodnii
3eb5fa18fb backends/x11: Remove unused KWaylandServer includes 2021-11-02 11:40:30 +02:00
Vlad Zahorodnii
2870e4295b backends/wayland: Remove unused KWaylandServer includes 2021-11-02 11:39:37 +02:00
Vlad Zahorodnii
d89501a079 Move platform backends to backends directory
This improves file organization in kwin by putting backends in a single
directory.

It also makes easier to discover kwin's low level components for new
contributors because the plugins directory may come as the last place to
look for. When one hears "plugin", the first thing that comes to mind is
regular plugins, not low level backends.
2021-11-02 09:02:41 +00:00
Kristen McWilliam
ab09fdf0b2 dbusinterface: add doc comment for queryWindowInfo()
Adds a simple doc comment to explain what the method does.
2021-11-01 12:24:32 -04:00
Vlad Zahorodnii
94de28bfbe Move input backends in their own directory 2021-11-01 16:27:16 +02:00
Vlad Zahorodnii
9fc2f04c75 platforms/virtual: Port to InputDevice 2021-11-01 16:27:16 +02:00
Vlad Zahorodnii
69bca8cf71 platforms/wayland: Port to InputDevice
This ports the nested wayland platform plugin to the InputDevice
abstractions.

Some global handling logic has been simplified to make porting more
straightforward.
2021-11-01 16:27:16 +02:00
Vlad Zahorodnii
6c0b5be99d platforms/x11: Port to InputDevice and InputBackend 2021-11-01 16:27:16 +02:00
Vlad Zahorodnii
7f72e5627e wayland: Port fake input integration to InputDevice
This ensures that the cursor will be properly shown/hidden when a fake
pointer is added on a system with no physical pointer connected.
2021-11-01 16:27:16 +02:00
Vlad Zahorodnii
ef72bae42f Introduce base InputDevice class
The main motivation behind this change is to prepare input abstractions
for virtual input devices so the wl_seat can properly advertise caps or
the cursor getting properly mapped/unmapped when a fake pointer is
added/removed on a system without a hardware mouse connected.

With this, there are three abstractions - InputDevice, InputBackend, and
InputRedirection.

An InputDevice represents an input device such as a mouse, a keyboard, a
tablet, etc. The InputBackend class notifies the InputRedirection about
(dis-)connected devices. The InputRedirection manages the input devices.

Such design allows to unify the event flow for real and virtual input
devices.

There can be several input backends active. For example, the libinput
backend and an input backend that provides virtual input devices, e.g.
libeis or org_kde_kwin_fake_input.
2021-11-01 16:27:16 +02:00
Xaver Hugl
4206046f12 Re-enable proper gamma ramps with AMS
Instead of downgrading everyone else to legacy gamma, only exclude
the huge and buggy gamma ramp of Intel TIgerLake hardware.
2021-11-01 14:38:27 +01:00
Vlad Zahorodnii
eb62728f1f effects/slidingpopups: Reload slide data after restarting compositing
Otherwise some plasma popups may stop sliding after restarting
compositing.

CCBUG: 443711
2021-11-01 10:58:35 +02:00
Vlad Zahorodnii
4a62716bbb autotests: Fix TestXdgShellClientRules 2021-10-31 22:22:29 +02:00
Vlad Zahorodnii
73949dba91 autotests: Fix MoveResizeWindowTest 2021-10-31 22:22:17 +02:00
Vlad Zahorodnii
26e185a6e3 autotests: Fix QuickTilingTest 2021-10-31 22:22:01 +02:00
Vlad Zahorodnii
f70c745ac0 Fix placement of windows on disconnected outputs
If an output is disconnected, the Workspace will update the
Toplevel.output property for all windows that are on that output, then
it will call AbstractClient::checkWorkspacePosition() to fix window
position.

That may result in some windows partially sticking outside visible area
because AbstractClient::checkWorkspacePosition() has no idea what output
the window was.

This change addresses that problem by delaying updating the
Toplevel.output property so AbstractClient::checkWorkspacePosition()
could pick better window placement.
2021-10-31 18:20:12 +00:00
l10n daemon script
954151ca97 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-10-31 01:14:25 +00:00
Vlad Zahorodnii
cd018b6ba3 effects/screenshot: Add org.kde.KWin.ScreenShot2.CaptureActiveScreen
The new method can be used to implement the "Current Screen" capture
mode in Spectacle.
2021-10-30 20:50:33 +00:00
Vlad Zahorodnii
d1b2a0e4d4 effects: Fix blur and background contrast metadata
The role of enabledByDefaultMethod was misinterpreted. It exists only
for kcms so they can display undetermined state. EnabledByDefault should
still be set to a valid value.
2021-10-30 23:41:13 +03:00
Vlad Zahorodnii
218db74000 Remove a GeometryUpdatesBlocker in AbstractClient::checkWorkspacePosition()
It was added to work around an async geometry issue on Wayland, which is
no longer actual.
2021-10-30 14:02:32 +00:00
Vlad Zahorodnii
4928f4db5b Try to preserve window position relative to their outputs during hotplug
Currently, if an output is hotplugged, all windows will be scrambled,
which is highly annoying.

With this change, windows will stick to their outputs if an output has
been connected or disconnected.

BUG: 296673
BUG: 378896
BUG: 412703
BUG: 443698
2021-10-30 14:02:32 +00:00
Vlad Zahorodnii
ee41e9b6e7 Fix Workspace::inUpdateClientArea() with auto-hide panels
If there's an auto-hide panel, m_oldRestrictedAreas will be empty, which
will break AbstractClient::checkWorkspacePosition().
2021-10-30 14:02:32 +00:00
Vlad Zahorodnii
6faf4ec3a2 Make mapping between outputs and cached screen geometries in Workspace robust
Integer screen ids are not robust. On the other hand, AbstractOutput
does not change if an output has been connected or disconnected.
2021-10-30 14:02:32 +00:00
Vlad Zahorodnii
bb687ff6f1 Stop abusing AbstractClient::geometryRestore()
Currently, AbstractClient::geometryRestore() is abused to put windows
back on their original screen. It makes window placement more complex
and it breaks restoring initially maximized windows.
2021-10-30 14:02:32 +00:00
l10n daemon script
d4b030b920 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-10-30 01:19:35 +00:00
ivan tkachenko
4a07bab27d
Don't put a trailing dot in set_package_properties
It looks weird given the kind of visualization where this text is
displayed.

Bad:

 * XKB (required version >= 0.5.0), XKB API common to servers and clients., <http://xkbcommon.org>

Good:

 * XKB (required version >= 0.5.0), XKB API common to servers and clients, <http://xkbcommon.org>
2021-10-30 01:51:40 +03:00
Vlad Zahorodnii
09952e1dc7 wayland: Fix wayland windows growing after toggling decorations
After the decoration is destroyed, we need to resize XdgToplevelClient
to ensure that the scheduled configure event will have correct size.

As is, xdg-toplevel configure events are delayed. When it's actually the
time to send a configure event, XdgToplevelClient will compute the
requested client size from the moveResizeGeometry().

If the moveResizeGeometry() still includes window decorations, the
window will get bigger.

BUG: 444119
2021-10-29 14:40:17 +00:00
Vlad Zahorodnii
637d914f9f Use QScopedPointer to store decoration object
This simplifies memory management.
2021-10-29 14:40:17 +00:00
Vlad Zahorodnii
1e634be2f5 effects/slidingpopups: Schedule workspace repaints
For optimization purposes, kwin will ignore repaint regions scheduled by
invisible windows, e.g. hidden docks, minimized windows, etc.

The problem is that it sort of breaks w->addRepaintFull(). If a lot of
animation frames are dropped, for example due to heavy cpu load, the
sliding popups animation can jump from the middle of animation right up
to the end. It will schedule a repaint but it will be ignored.

In order to work around that issue, this change makes the sliding popups
effect schedule workspace repaints in postPaintScreen() to ensure that
the Scene will always repaint dirty regions.

Hopefully, this should fix bugs where auto-hide panels sometimes flicker
on Wayland.

BUG: 444502
2021-10-29 12:08:51 +00:00
Vlad Zahorodnii
b135a1c7b0 effects/screenshot: Add org.kde.KWin.ScreenShot2.CaptureActiveWindow
BUG: 386271
2021-10-29 12:06:43 +00:00
Vlad Zahorodnii
5379b010b4 effects/screenshot: Add API version property to org.kde.ScreenShot2 interface 2021-10-29 12:06:43 +00:00
l10n daemon script
24ad81e91b 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-10-29 01:21:24 +00:00
Kristen McWilliam
f5e598039b dbusinterface: add whitespace to declarations with doc comments
Without spacing it is not immediately evident where a doc comment
ends and a new declaration begins. Adding a line of whitespace
makes everything more readable and easier to scan quickly.
2021-10-28 11:12:54 -04:00
Vlad Zahorodnii
c09a03a927 Drop Platform::touchPointCount()
It can be accessed directly in the touch input device handler.
2021-10-28 10:55:48 +00:00
Vlad Zahorodnii
e83da51844 Simplify input event flow
Currently, input events can flow directly to input device handlers and
sometimes they go through the InputRedirection, which simply forwards
them to the corresponding input device handler.
2021-10-28 10:55:48 +00:00
Vlad Zahorodnii
bbe879988d Remove redundant Workspace checks in ForwardInputFilter
They don't use Workspace, so the workspace check can be removed.
2021-10-28 11:52:08 +03:00
Kristen McWilliam
9660f83e30 dbusinterface: add doc comment for getWindowInfo()
This method was lacking a doc comment, this adds basic context.
2021-10-28 05:56:36 +00:00
Vlad Zahorodnii
da6fbec424 Notify IdleInterface about user activity explicitly
In some cases, kwin may not forward input events to SeatInterface, which
can false trigger idle detection in IdleInterface.
2021-10-28 05:55:59 +00:00
Xaver Hugl
1626d7a51a platforms/drm: only use glDrawBuffer with desktop GL
That function is not available with GLES, and calling it is only necessary
for NVidia.
2021-10-27 11:49:00 +02:00
Kristen McWilliam
a7b833f319 Add class comment for Toplevel
A simple class comment to give the reader an idea what this is for.
2021-10-27 06:05:54 +00:00
Vlad Zahorodnii
9adb5eed02 Use a generic mechanism to watch input device properties
This reduces code duplication and provides a generic way to monitor all
relevant input device properties.
2021-10-27 05:59:49 +00:00
l10n daemon script
f15e6806f3 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-10-27 01:22:49 +00:00
Andrey Butirsky
be35ef6a9a [keyboard kcm] fix lost Locks state on keymap reconfigure
Fixes Num/Caps Locks (do we need Scroll also?)

BUG: 443739
2021-10-26 15:48:43 +00:00
Xaver Hugl
206689874f effects/overview: center drag hotspot 2021-10-26 14:33:35 +02:00
Vlad Zahorodnii
22eb154fa0 platforms/wayland: Allow resizing outputs 2021-10-26 13:31:36 +03:00
David Redondo
60c3b3ddfa Add support for hold gestures 2021-10-26 08:16:52 +00:00
Aleix Pol
1330376220 screencast: Support the creation of virtual displays to cast
In case the user has just the one display but they don't want to show it
in their main workspace when sharing video, allow creating a virtual
display.
This also will allow using remote devices as support displays.
2021-10-25 19:43:41 +02:00
Andrey Butirsky
4395caa256 [wayland] fix ignored keyboard RepeatRate
X11 can take float RepeatRate, Wayland - int only so the setting is to be
rounded.
Should be indistinguishable on usual rates.

BUG: 443721
2021-10-25 14:04:33 +00:00