Commit graph

20565 commits

Author SHA1 Message Date
Vlad Zahorodnii
35c6a3c0a1 effects/overview: Set Qt.ClosedHandCursor cursor shape during dnd
Many apps change the cursor shape during active dnd, do the same here
for the consistency sake.
2021-11-19 15:12:03 +00:00
David Edmundson
38348a006b [backends/x11] Fix typo causing crash 2021-11-19 13:20:48 +00:00
Vlad Zahorodnii
35b9950eb9 effects/overview: Implement internal implicit grab logic
This is needed to ensure that mouse release events go to the view that
received mouse press events; otherwise some views can get stuck in a
state thinking that button xyz is pressed.
2021-11-19 10:57:59 +00:00
Vlad Zahorodnii
caa62fa736 effects/overview: Sync cursor set by QtQuick
Currently, cursor shape set by QtQuick is not sync'ed, which can be seen
as the pointer not changing its shape to i-beam when hovering the search
field.
2021-11-19 10:53:26 +00:00
Vlad Zahorodnii
379ae2d5c2 effects/overview: Reuse qml loading results between effect activations
Currently, every time you launch the overview effect, QtQuick will go
out and parse QML files. With the overview effect gaining more features
and the code size getting bigger, it takes more time for the overview to
present the first frame after it got triggered.

With this change, the overview effect will keep the ScreenView
QQmlComponent object around that can be used to avoid reparsing qml code
every time the overview effect is launched.

It also ports the Overview effect from de-facto deprecated qml context
to initial properties, which yield slightly better startup times.

BUG: 445666
2021-11-19 10:52:45 +00:00
Vlad Zahorodnii
20aeff20ea Fix build
idOffset is a static const variable, it doesn't need to be captured.
2021-11-19 11:09:29 +02:00
Arjen Hiemstra
310ef5e1c2 Add support for touch events to Overview effect
Implement touchUp/touchMotion/touchDown and forward them to the
EffectQuickView.
2021-11-19 09:04:23 +00:00
Arjen Hiemstra
626e4bc7e6 Add support for forwarding touch events to EffectQuickView
This allows effects to support touch input.

Unfortunately, Qt's TouchEvents require the full touch point state,
whereas KWin's internal touch handling only deals with one point at a
time. So we need to keep track of the touch state in EffectQuickView and
pass that on to Qt. Additionally, we need a QTouchDevice as lots of Qt
code depends on it.
2021-11-19 09:04:23 +00:00
David Edmundson
044767e296 Speed up EffectQuickView teardown
On my Nvidia machine there was a massive lag exitingthe overview effect.
Hotspot showed it as being in QOpenGLVertexArrayObjectPrivate::destroy.
In this method we clean up some shared objects used in the context when
the context closes.

In order to do this we need the context to be current. If it is not
current Qt currently internally creates a temporary offscreen surface.

To fix this we need to have our context current during destruction,
which includes changing order so it is destroyed before the surface.
2021-11-19 08:09:39 +00:00
Vlad Zahorodnii
030cc2d844 effects/overview: Add basic keyboard navigation support in DesktopBar
With this change, user will be able to press Tab and use Enter, Delete,
and F2 keys to activate, remove, and rename virtual desktops, respectively.

Co-authored: Fushan Wen <qydwhotmail@gmail.com>
2021-11-19 07:00:08 +00:00
Aleix Pol
afd525ced0 Improve our reaction when primary changes
Ensure we sanitise the input so a client can't randomly crash KWin that
way.
2021-11-18 17:48:39 +00:00
Vlad Zahorodnii
039b1d031e wayland: Enable window rules for all xdg-toplevel
If a window wants to be initially shown in fullscreen mode, it will
issue an xdg_toplevel.set_fullscreen request before the first surface
commit.

If a window wants to be shown in fullscreen mode and there hasn't been
any first surface commit, kwin will cache the request and apply
fullscreen mode when checking window rules in the initialize() function.

On the other hand, window rules are disabled for plasma surfaces. The
motivation behind that was to forbid user from messing with plasma's
surfaces (this change was suggested during redesign of xdg-shell
implementation).

As it turns out, there are cases where plasma may ask to show a window
in fullscreen mode, which also has a plasma surface installed, e.g.
fullscreen application dashboard.

In order to fix the dashboard, this change allows window rules to be
applied to xdg-toplevel windows that also have plasma surfaces installed.

As is, xdg-toplevel surfaces and plasma surfaces are very different in
nature. Adding more quirks to handle plasma surfaces in
XdgToplevelClient is not worth the effort and there are better
alternatives, e.g. layer-shell.
2021-11-18 10:16:25 +00:00
Vlad Zahorodnii
262cb23dd9 effects/overview: Use PlasmaCore.ColorScope.backgroundColor in DesktopBar with light desktop themes 2021-11-18 07:26:33 +00:00
Vlad Zahorodnii
c167ef5208 effects/overview: Remove window caption drop shadow effect 2021-11-18 07:26:33 +00:00
Vlad Zahorodnii
555a8018fc effects/overview: Make text in desktop bar have the same color as in search results 2021-11-18 07:26:33 +00:00
Vlad Zahorodnii
4f04da4e7a effects/overview: Bump underlay opacity to 0.75
This improves contrast when searching using Milou.
2021-11-18 07:26:33 +00:00
Vlad Zahorodnii
195de46c91 effects/overview: Use Milou for search results
Based on user feedback, it will be great to have krunner functionality
integrated in the overview/present windows effect.

This change ports the overview effect to Milou for search results. With
it, one can search for existing windows or launch new applications.

BUG: 445207
2021-11-18 07:26:33 +00:00
Aleix Pol
a5899c2cbb screencast: Do not report a cursor geometry before we have a cursor texture
Otherwise we just crash as we don't know the size yet.
2021-11-18 03:02:19 +00:00
Aleix Pol
19df0996f5 scene: Do not clamp 1x1 windows
Without the margins, they become 0x0 and we crash.
2021-11-17 16:01:16 +00:00
Vlad Zahorodnii
e21a3c7955 effects: Add support for cross-compiling support
kwin-strip-effect-metadata needs to run on the host. First, one needs to
build it, e.g.

    cmake --build build-native --target kwin-strip-effect-metadata

then when cross-compiling, point cmake to the native build directory, e.g.

    cmake -DKWIN_HOST_TOOLING=${path}/build-native
2021-11-17 14:40:41 +00:00
Vlad Zahorodnii
a6090e7f83 effects: Strip unused builtin effect metadata
This improves plugin loading times. As is, the main issue is the number
of builtin effects and the fact that each has a lot of translated
strings, which combined adds up to noticeable loading times. KWin itself
will never read those translated strings, it only needs two pieces - the
plugin id and whether the plugin is enabled by default.

This change adds a little helper to strip unnecessary info from metadata
files.
2021-11-17 14:40:41 +00:00
Vlad Zahorodnii
068d60e36a Revert "wayland: Check workspace position when preferred deco mode changes"
This reverts commit 2560288e4b.

It broke alacricitty. The fix is not obvious, so revert the commit for
the time being.

BUG: 445444
2021-11-17 06:58:30 +00:00
Xaver Hugl
8528bbf800 backends/drm: ignore placholder outputs for the output config
They can only introduce intermediary state when a real output gets enabled
and are not relevant to the actual output config
2021-11-16 17:08:08 +01:00
Xaver Hugl
b6b0af727d backends/drm: don't take crtcs from dpms disabled outputs
Fixes a crash I have with dpms + suspend, which was caused by the udev
event for updating outputs being called before the output got enabled
again. When DrmGpu::updateOutputs got called it removed the crtc from
the inactive output and then disabled the output afterwards. Instead,
only remove crtcs if an output is really disabled.
This also allows to generalize the logic for lease outputs, and could
in the future allow for faster dpms on/off switching.
2021-11-16 17:05:31 +01:00
Xaver Hugl
47d5d50bdf backends/drm: don't assume we have a cursor plane
CCBUG: 445507
2021-11-16 16:16:30 +01:00
Vlad Zahorodnii
e605ea0c46 effects/blur: Fix tracking of blur region after compositing restart
updateBlurRegion() doesn't setup a
SurfaceInterface::blurChanged() signal connection. slotWindowAdded()
does that.
2021-11-16 13:57:31 +02:00
Vlad Zahorodnii
6234357675 effects/contrast: Fix tracking of contrast region after compositing restart
updateContrastRegion() doesn't setup a
SurfaceInterface::contrastChanged() signal connection. slotWindowAdded()
does that.
2021-11-16 13:56:27 +02:00
Vlad Zahorodnii
7228e9aefd Unify beginFrame() and endFrame() hooks for OpenGL and QPainter backends
This unifies frame hooks for OpenGL and QPainter render backends. There
are a couple of reasons why it's a good idea - it provides one mental
framework to start painting a frame, the Compositor will be able to
start and submit frames. The last one is very cool because it gives the
Compositor more power over compositing.

Besides unifying frame hooks, this cleans up a bit the arg naming mess
in endFrame(). As is, "damage" and "damagedRegion" are very confusing
names. "damage" arg has been renamed to "renderedRegion," because that's
what it is. The renderedRegion arg specifies the region that has been
repainted by the Scene. It's different from the damagedRegion as that
one specifies the surface damage, i.e. the difference between the
current and the next frame, while the renderedRegion may include a
region that had to be repainted to repair the back buffer. The main
reason why we need renderedRegion is the X11 platform. On Wayland, it's
unused.

In the future, we will need to extend this api with output layers.
2021-11-16 10:43:56 +00:00
Vlad Zahorodnii
aaf88cd906 scenes/opengl: Keep lanczos filter after changing outputs
The lanczos filter checks the screen size before rendering in
LanczosFilter::updateOffscreenSurfaces(), so this is not needed.

This simplifies lifetime handling of the lanczos filter, e.g. we
don't need to bother with opengl context anymore, and makes the
scene use less Screens' features.
2021-11-16 10:42:58 +00:00
Vlad Zahorodnii
af4c37c095 plugins/screencast: Rename PipeWireStream to ScreenCastStream
This change renames the PipeWireStream class to ScreenCastStream to make
naming consistent.
2021-11-16 09:04:10 +00:00
David Redondo
5d5780c770 Remove manual lnf default handling
This is now correctly set up when inside a plasma session.
2021-11-16 08:27:42 +00:00
Vlad Zahorodnii
0ebc563e6c Drop Toplevel::bufferScale()
On Wayland, a window can have subsurfaces. The spec doesn't require the
main surface and its sub-surfaces to have the same scale factor.

Given that Toplevel::bufferScale() makes no sense with Wayland windows,
this change drops it to make code more reasonable and to prevent people
from using Toplevel::bufferScale().
2021-11-16 09:38:51 +02:00
Vlad Zahorodnii
d755e74c29 Remove some manual repaints in X11Client
Let the scene schedule a repaint instead.
2021-11-16 07:26:44 +00:00
Vlad Zahorodnii
29235e122d kcmkwin/compositing: Hide Compositing label on Wayland
All compositing checkboxes are invisible on Wayland, so hide the
compositing label.
2021-11-16 07:26:09 +00:00
Vlad Zahorodnii
7013c1473c kwinglutils: Clean up persistent vbo fences at the start of the frame
With a persistent vbo, kwin will allocate one big enough buffer and
allocate memory out of it.

In order to prevent overwriting vertex buffer data that is currently
being accessed by the GPU, fences are inserted at the end of frame.

The signaled fences are destroyed after the buffer swap operation, which
seems a bit odd because the just inserted fence most likely won't be
signaled. Perhaps it's a historical artifact?

This change rearranges fence cleanup so it's performed right before
starting a new frame. With it, kwin will most likely re-use the
previously used memory chunk because there will be plenty of time for
the fence to become signaled.

Another motivation behind this change is to make refactoring SceneOpenGL
code easier. As is, m_backend->endFrame() is wrapped in
GLVertexBuffer::endOfFrame() and GLVertexBuffer::framePosted(). With
that, the Compositor can't call m_backend->endFrame(), which can be
desired for cleaning up render backend abstractions.
2021-11-16 07:25:20 +00:00
Vlad Zahorodnii
eecf14394e plugins/screencast: Introduce ScreenCastSource.closed signal
With the closed signal, we can unify how screen cast streams are closed.
2021-11-16 07:24:03 +00:00
Vlad Zahorodnii
e7cd2c4396 plugins/screencast: Optimize output screencasting with memfd
When screencasting an output, read the output texture directly.
2021-11-16 07:24:03 +00:00
Vlad Zahorodnii
92a461c687 plugins/screencast: Exclude client-side drop shadows
The buffer geometry may include client-side drop shadows, which looks
odd when screencasting.
2021-11-16 07:24:03 +00:00
Vlad Zahorodnii
8518a7ea8c Drop Scene::Window::windowTexture() 2021-11-16 07:24:03 +00:00
Vlad Zahorodnii
10032e99e3 plugins/screencast: Make embedded cursor position handling simpler
If the position of the cursor changes, let the screen cast source to
repaint memfd or dmabuf buffer.
2021-11-16 07:24:03 +00:00
Vlad Zahorodnii
c3c87ed8fa plugins/screencast: Introduce base ScreenCastSource type
Currently, when screencasting a window, kwin may render a window into a
temporary offscreen texture, copy that offscreen texture to the dma-buf
render target, and discard the offscreen texture.

Allocating and deallocating offscreen textures is inefficient. Another
issue is that the screencast plugin uses Scene::Window::windowTexture().
It's a blocker for killing scene windows.

This change introduces a base ScreenCastSource type. It allows us to
move away from Scene::Window::windowTexture() and make the dma-buf code
path efficient with applications such as Firefox that utilize
sub-surfaces.

With the ScreenCastSource, kwin can also provide screen cast frames with
arbitrary device pixel ratio.
2021-11-16 07:24:03 +00:00
Marco Martin
9eb5b92023 Apply roles to xdg popups if present
Like top level clients, apply plasmashell roles to popups as well (limiting them, don't allow dock or desktop roles in poups as they don't make sense)

This makes possible to recognize plasma tooltips as tooltips, treating them in a way closer to X, and makes morphingpopups work on wayland
2021-11-15 14:03:53 +00:00
Felipe Kinoshita
57b53e8d4e
Group compositing options in compositor KCM 2021-11-13 12:49:19 -03:00
Vlad Zahorodnii
cc50c64e8d effects/overview: Forward unhandled keys to search field
After user edits the name of a desktop, the search field is no longer
focused. If the user starts typing text, one could expect that it will
be forwarded to the search field without requiring a click.

This change forwards unhandled key events to the search field to ensure
that searching is intuitive.
2021-11-13 14:49:34 +00:00
Vlad Zahorodnii
0b56711bf4 Make ServiceType irrelevant when searching for binary effects
Since binary effects are installed in their own directory, checking
service type is redundant. Also, KPluginMetaData::serviceTypes() has
been deprecated.

Task: https://phabricator.kde.org/T14483
2021-11-13 09:27:58 +00:00
l10n daemon script
07e0205ca5 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-11-13 01:27:20 +00:00
Vlad Zahorodnii
b2f879eb33 effects/overview: Use strict equality operator in DesktopBar
It yields better performance.
2021-11-12 16:27:59 +00:00
Vlad Zahorodnii
b7d0f292f3 effects/overview: Load desktop name editor on demand
It's most likely going to be unused, so don't bother loading it.
2021-11-12 16:27:59 +00:00
David Redondo
3bebd3dce4 Start pointer gestures with fingerCount fingers not time fingers 2021-11-12 13:16:03 +01:00
Vlad Zahorodnii
ca4e643d67 effects/overview: Move Escape key handling to ScreenView
With this, no individual component has to handle the Escape key to
deactivate the effect.
2021-11-12 11:44:02 +00:00