Commit graph

6107 commits

Author SHA1 Message Date
Alexander Lohnau
82780effc1 Avoid Qt module incldues
This causes a longer compile time, because lots of unneeded files are
included. With https://invent.kde.org/sdk/clazy/-/merge_requests/91/
lots of false positives in the clazy check were resolved, this commit
takes care of the remaining places
2023-12-19 15:23:22 +00:00
Alexander Lohnau
3e5ae3b247 windowsrunner: Deduplicate/optimize strings 2023-12-19 15:23:22 +00:00
Alexander Lohnau
11d813625a windowsrunner: Reuse QVariantMap object 2023-12-19 15:23:22 +00:00
Alexander Lohnau
e3ab09dbd3 windowsrunner: Make dummy implementation of Action method inline 2023-12-19 15:23:22 +00:00
Vlad Zahorodnii
624da13e21 core: Specify explicit OutputTransform::Kind enum values
Some OutputTransform code assumes that Kind enums have specific values.
In order to ensure that that code doesn't break if the enums are reordered
or something, this change sets output transform enums to those explicit
values.
2023-12-19 17:08:13 +02:00
Vlad Zahorodnii
3a4eebddc9 core: Rework OutputTransform::combine()
The naive way to combine output transforms is not great, especially
because of the for loop.

The output transform kind enums have the following bit pattern:

- rotate-0:   000
- rotate-90:  001
- rotate-180: 010
- rotate-270: 011
- flip-0:     100
- flip-90:    101
- flip-180:   110
- flip-270:   111

`(rotate-a + rotate-b) & 0x3` can be used to combine two rotation
transforms. The rotatation is clockwise.

If the first transform is a flip transform, then we should rotate
counter-clockwise, i.e. `(rotate-a - rotate-b) & 0x3`.
2023-12-19 17:08:13 +02:00
Xaver Hugl
50346b6e37 core: Introduce OutputTransform::combine()
Co-authored-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
2023-12-19 17:08:13 +02:00
Yifan Zhu
bc73e14e68 tabbox: match Shift+Backtab against Shift+Tab
When users simultaneously press Shift and Tab, the keys are sometimes
registered as Shift+Tab, and sometimes as Shift+Backtab.
So we need to match received Shift+Tab against shortcuts containing
Shift+Backtab, and vice versa. Previously the code only checks for
the first case. This commit adds checks for the second case.

BUG: 438991
FIXED-IN: 6.0
2023-12-19 10:00:08 +00:00
Aleix Pol
a02545e8f5 glshadermanager: Fix nv12 shader for older versions of opengles
It wasn't compiling for PowerVR drivers.
2023-12-19 09:37:17 +00:00
Vlad Zahorodnii
c45ee91ab2 plugins/showpaint: Snap repaint region to the pixel grid 2023-12-19 11:00:30 +02:00
Vlad Zahorodnii
2e78ae2b6d core: Fix pixel grid snapping in RenderViewport
Our painting code is assumed to work as following: scale the geometry,
snap it to the pixel grid, apply the render transform, e.g. flip the
geometry vertically.

However, with QMatrix4x4 in RenderViewport, we have a slightly different
order: scale the geometry, apply the render transform, snap to the pixel
grid. It results in mapToRenderTarget() not properly mapping logical
geometry to the device geometry, which later manifests as glitches.

BUG: 477455
2023-12-19 11:00:30 +02:00
Stefan Hoffmeister
44419d832d Decrease log level of reporting choosing backend
Automatic backend selection is a very normal by-design activity that warrants informing. Decrease from log level Warning to Info to avoid spoiling the log at too high of a log priority.
2023-12-19 08:43:36 +00:00
Vlad Zahorodnii
c5124a1daf core: Document what each OutputTransform does
Flipped transforms are very confusing because the order of mirroring and
rotatation transforms matters in some cases.
2023-12-19 08:13:58 +00:00
Vlad Zahorodnii
08d2ec835d Install more headers 2023-12-19 07:44:37 +00:00
Vlad Zahorodnii
b476d7f4c0 plugins/screentransform: Stop tracking disabled outputs
If an output is disabled, the Output object will be kept alive. That
means that the aboutToChange connection will be kept.

If the output is enabled again and its transform changes, its contents
will be captured more than once.

In order to fix, the screentransform plugin has to break the
aboutToChange connection.
2023-12-18 22:40:12 +00:00
Vlad Zahorodnii
1f5fb58d23 plugins/screentransform: Don't preemptively cancel screen animation
If two output configurations are applied consecutively, the screen
rotation animation may be cancelled too early.
2023-12-18 22:40:12 +00:00
Vlad Zahorodnii
bd5c566399 plugins/screentransform: Avoid mangling with opengl context when a screen is removed
For the most part, the screen transform effect is inactive. So if a
screen is removed, it's likely that m_states contains no entry for it.
2023-12-18 22:40:12 +00:00
Vlad Zahorodnii
e894f694ce plugins/screentransform: Avoid needlessly capturing screen contents
If the output configuration doesn't touch the output transform,
capturing the previous screen contents is pointless.

I believe the main reason why the screen transform operates this way is
because it couldn't access OutputConfiguration before.
2023-12-18 22:40:12 +00:00
Kai Uwe Broulik
699bdda60a plugins/windowsystem: Implement new virtuals
For XDG foreign support. No-ops.
2023-12-18 18:46:42 +00:00
Vlad Zahorodnii
4283ba00c6 scene: Snap DecorationItem texture coords to the pixel grid
Do the same what the SurfaceItem does.
2023-12-18 15:05:43 +00:00
Stefan Hoffmeister
3887542240 backends/drm: Detect mode content change instead of comparing mode pointers
This fixes Plasma Desktop / kwin resizing problems at least for virtual
machines running off the vmwgfx Linux kernel driver

BUG: 477985
2023-12-18 14:23:27 +00:00
Xaver Hugl
51ff2e4c32 backends/drm: do glFinish after rendering on NVidia
Polling the dmabuf for readability doesn't appear to work on NVidia and
we're no longer using an egl surface where the driver does this for us,
so we need to explicitly wait for rendering to complete or there are glitches
on the output
2023-12-14 22:41:57 +00:00
Arjen Hiemstra
0ff4f84ace plugins/overview: Replace OpacityMask with ShadowedTexture
The OpacityMask is used purely for rounding the corners. We can get rid
of it by using ShadowedTexture which does the same thing while also
drawing the shadow, meaning we can also eliminate the ShadowedRectangle.
2023-12-14 13:44:28 +00:00
l10n daemon script
510e776e80 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"
2023-12-14 02:06:54 +00:00
Vlad Zahorodnii
3663453c7d scene: Freeze SurfaceItem tree when the Window is closed
If the wl_surface is unmapped, the compositor should unmap the window.
Most clients don't do it, and instead destroy the wl_surface or the
surface role object or both. A very tiny fraction of clients actually
close the window by unmapping the wl_surface. Either way, it's worth
handling that case because xdg-shell protocol says that the clients are
allowed to do it.

BUG: 478297
2023-12-13 15:06:45 +02:00
David Edmundson
5dc16fc614 x11: Avoid calls to workspace in OverlayWindow and sync GLX and EGL paths
OverlayWindow had different paths for GLX and EGL when it came to
managing size. On EGL the initial size comes from the overlay resizing
to workspace, but future updates were explicitly handled by the backend.
On GLX the backend tracked changes, but then it was the overlay's job to
resize but using a different method.

This patch also prevents use of workspace after destruction fixing
kwin_x11 --replace.
2023-12-13 09:33:31 +00:00
Vlad Zahorodnii
76fbea704a plugins/slidingpopups: Cancel animations when screen is locked/unlocked
BUG: 412104
2023-12-13 08:19:40 +00:00
Vlad Zahorodnii
ef2c4e201e plugins/overview: Load milou on demand
Milou.ResultsView loads runners regardless whether the query string is
empty. It's not clear what milou should do. There are valid arguments
both in favor and against preloading runners.

This change puts Milou.ResultsView behind a Loader so milou is loaded
when it's actually needed and not when starting overview.

CCBUG: 455780
2023-12-12 15:21:23 +00:00
Niccolò Venerandi
667b95e240 Make window captions in Overview 2 lines at most
Captions are set to elide with ElideRight, which does allow for multi-line captions.
However, this means that the height of the captions depends on their width (since a shorter
width results in more lines), and the width of the captions depends on the size of the
window thumbnail, which depends on the height of the caption to be positioned. If the
caption is really long, this can cause visual glitches. Having a maximum line value avoids that.

BUG: 477103
2023-12-12 13:55:41 +00:00
l10n daemon script
47e7f6e06a 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"
2023-12-12 02:09:54 +00:00
Xaver Hugl
6f06bf1989 plugins/invert: support color management
To do this, this commit adds infrastructure to include glsl files,
extracts all the color management functions and uniforms into such a
file, and makes use of it in the invert effect

BUG: 443148
2023-12-11 22:46:27 +01:00
Xaver Hugl
8f7772da2e backends/drm: don't wait for pending pageflips on gpu hotunplug
The pageflip event may never arrive, as the GPU to trigger it is gone. It
also doesn't make a difference, as the GPU is unaccessible anyways, so
KWin can't affect the relevant output(s) anymore
2023-12-11 19:44:42 +00:00
Xaver Hugl
ef0c07d03a backends/drm: unify legacy and atomic modesetting code paths a bit 2023-12-11 19:44:42 +00:00
Xaver Hugl
d228dc173a xdgshellwindow: make maxSize always >= minSize by enforcing the same minimum
BUG: 478269
2023-12-11 18:07:13 +01:00
Xaver Hugl
63c71d9e56 wayland/xdgshell: enforce invalid_size errors
If the client sets invalid min or max size, that can cause some code in KWin
to assert. To ensure that doesn't happen, enforce that the minimum size is
always at most as big as the maximum.

CCBUG: 478269
2023-12-11 14:44:27 +01:00
l10n daemon script
d8c1022049 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"
2023-12-11 02:06:41 +00:00
Xaver Hugl
19672bc82f opengl/glshadermanager: fix version check for desktop gl
Apparently mix with bvec is only supported with glsl 1.30 on desktop gl
too
2023-12-10 04:29:51 +01:00
l10n daemon script
682d578093 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"
2023-12-10 02:30:44 +00:00
David Edmundson
5d922742fa Avoid additional FBO rendering the blurred background
WindowThumbnails are image providers meaning it can provide textures
directly to ShaderEffects

layer.enabled is effectively a ShaderEffectSource meaning we render our
single desktop background item into an offscreen texture to ultimately
contain our desktop background.

We can cut out the middle-man and use the DesktopBackground as a source
directly saving a massive texture being generated.
2023-12-09 12:43:55 +00:00
l10n daemon script
5805c047a8 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"
2023-12-09 02:07:58 +00:00
Xaver Hugl
4be57d78e9 opengl/glshadermanager: check opengl instead of glsl version
Whether or not mix with bvec is supported depends on the OpenGL version and
not on the glsl version
2023-12-08 20:06:30 +00:00
Xaver Hugl
5734342f9f plugins/zoom: disable acessibility integration on Wayland
It causes hangs, and thus doesn't actually help with accessibility but makes
it worse. Until that's fixed, it needs to stay disabled

BUG: 450940
2023-12-08 19:27:08 +00:00
Xaver Hugl
50899f3f34 backends/drm: work around atomic commits failing with NVidia
For some reason, when IN_FENCE_FD is set, the NVidia driver rejects the
commit. Until that's fixed in the driver, don't set the property

BUG: 478246
2023-12-08 16:27:24 +01:00
Vlad Zahorodnii
eb13085de2 plugins/overview: Load screen delegate asynchronously
The compilation step still takes a significant amount of time on the
first launch. On my machine, it's around 1s. Even if it happens just
once, freezing the session for 1 second is not great.

This change makes the overview effect load main.qml asynchronously
when plasma session starts. By the time the session is loaded, it should
be ready.

CCBUG: 455780
2023-12-08 13:40:53 +00:00
Vlad Zahorodnii
f1ff706b3b scripting: Cache WindowThumbnail textures
Effects like overview can create more than one thumbnail for the same
window. For example, if you have 4 virtual desktops, the overview is
going to create 9 window thumbnails for the desktop background, which in
its turn means that each thumbnail is going to have its own texture.
That's not great.

WindowThumbnailItem.sourceSize has been dropped because it's unused and
will complicate texture caching.

CCBUG: 455780
2023-12-08 10:21:20 +00:00
Vlad Zahorodnii
acd743f672 plugins/shakecursor: Avoid abrupt transition to 1x magnification
When the pointer moves, the shake cursor effect will either update the
cursor magnification or reset the magnification.

At the moment magnification is reset immediately, which doesn't look
if the pointer moves before the reset scale animation finishes.
2023-12-08 07:12:52 +00:00
Ismael Asensio
8b54372160 kcms/rules: Fix section header width
It is now necessary to explicitly set the ListSectionHeader width
as it inherits from ItemDelegate
2023-12-07 19:39:04 +01:00
Nate Graham
d3ece17dde kcms/rules: clip rules popup's list view
Otherwise it escapes!

BUG: 478170
2023-12-07 10:30:19 -07:00
Vlad Zahorodnii
8e2d0a3d7e Load close button in WindowHeapDelegate on demand
Most windows are typically not hovered, so we don't need to create
a Button for every one of them.
2023-12-07 15:45:09 +00:00
Vlad Zahorodnii
71dd6bac78 tabbox/switchers/thumbnail_grid: Fix sync'ing currentIndex
The task switcher doesn't initialize thumbnailGridView.currentIndex
properly after the Plasma.Dialog has been just created.
2023-12-07 15:26:09 +00:00