Commit graph

26622 commits

Author SHA1 Message Date
Nicolas Fella
7078f4e3af Fix sending window to all desktops
NET::OnAllDesktops is a special desktop number (-1), desktopForX11Id will not return a desktop for it

When all desktops are requested pass an empty desktop list, the following code will handle it appropriately

BUG: 482670
2024-03-08 08:21:29 +00:00
l10n daemon script
2103eb8d16 GIT_SILENT Sync po/docbooks with svn 2024-03-08 01:20:07 +00:00
Nate Graham
7992d01fbd kcms/effects: add keywords for newly-introduced cursor effects
BUG: 482607
FIXED-IN: 6.1
2024-03-07 10:35:25 -07:00
Vlad Zahorodnii
b674b458df Rename Workspace::updateClientArea as Workspace::rearrange
We need to re-arrange layer shell surfaces, compute new struts and adjust
the windows in a single step.

Workspace::updateClientArea() is the best candidate for that, so this change
repurposes that function from computing work areas to a generic relayouting
function.

CCBUG: 482361
2024-03-07 13:41:02 +02:00
Vlad Zahorodnii
a489bfa12c wayland: Fix windows shrinking when output layout changes
When the output layout changes, the Workspace is going to update the
struts and then go through every window and see whether it should be
moved or resized.

On the other hand, the layer shell windows react to output changes on
a timer. Furthermore, it's not synchronized with the workspace rearranging
the managed windows. It means that when Workspace::desktopResized() runs,
the panel struts can be slightly outdated, i.e.

- An output layout change occurs
- Workspace::desktopResized() is called but the struts can be wrong
- some time later, LayerShellV1Integration::rearrange is called, it
  fixes layer shell window geometries and struts
- after the layer shell integration has finished rearranging the
  layer shell windows, it calls Workspace::desktopResized(), but the
  damage had already been caused

With the proposed change, the Workspace and the LayerShellV1Integration
will rearrange the windows in sync.

CCBUG: 482361
2024-03-07 13:41:01 +02:00
Mouse Zhang
9ca738ffec Add .directory to .gitignore 2024-03-07 17:20:53 +08:00
Mouse Zhang
769c63c834 plugins/backgroundcontrast: remove dolphin directory file 2024-03-07 17:17:36 +08:00
l10n daemon script
5401d6c213 GIT_SILENT Sync po/docbooks with svn 2024-03-07 01:19:27 +00:00
l10n daemon script
34545553b2 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"
2024-03-07 01:13:03 +00:00
Xaver Hugl
e4349536a3 backends/drm: also set legacy gamma after VT switches
Just like with modes, the gamma state is unknown after VT switches, and has
to be explicitly set again to ensure it's correct
2024-03-07 01:50:43 +01:00
Xaver Hugl
d1bc39a6ea backends/drm: don't set gamma with legacy unless really necessary
It seems to have a pretty large performance impact
2024-03-07 01:50:43 +01:00
Xaver Hugl
568f9fb666 backends/drm: ignore ctm support on legacy
BUG: 482143
2024-03-07 01:50:20 +01:00
Xaver Hugl
4a42829841 backends/drm: move tracking of legacy direct scanout presentation to DrmPipeline
The behavior between direct scanout and normal presentation being different is an
implementation detail of DrmPipeline, the output layers shouldn't need to care
2024-03-06 21:42:26 +01:00
Aleix Pol
1d57c9a5af effects: Use chrono to specify the animation times
Makes both the API and its uses explicit in terms of what unit the times
are on.
2024-03-06 10:19:55 +00:00
Vlad Zahorodnii
f82542790c plugins/shakecursor: Enable by default
Multi monitor setups with 4K screens are not uncommon and one of the
annoyances associated with such setups is that you lose the track
of the cursor sometimes. It's natural to shake the cursor in such
occasions.

This change enables the shake cursor effect to improve the desktop
experience. One potential risk associated with doing so is that the cursor
can be magnified in some undesired situations. It is true. But we took a
great precaution of that and added some heuristics to avoid triggering the
effect in such cases given all the data we have available.
2024-03-05 21:32:35 +00:00
Vlad Zahorodnii
dcd20922d9 plugins/shakedetector: Optimize ShakeDetector
Only store one history item for movement in the same direction.
With this optimization I measure m_history.size() <= 15 for all kinds of
movements, including back and forth, and circular.
2024-03-05 18:30:51 +00:00
Vlad Zahorodnii
0bc60023f5 plugins/shakecursor: Prefer operator[] over at()
Bounds checks are redundant. Plus kwin is built with exceptions disabled.
2024-03-05 17:38:14 +00:00
Vlad Zahorodnii
2ad896c71d plugins/shakecursor: Make the cursor big enough upon the first shake
The current behavior is that the cursor size follows how hard or fast
the cursor is shaken. While this looks fancy, given the purpose of this
plugin, it should be possible to magnify the cursor as easy as possible
without interfering or false triggering.

This change implements a sort of a compromise. When the cursor is shaken
for the first time, the cursor is magnified by some certain scale factor.
Then every next shake magnifies the cursor further by a smaller amount.
2024-03-05 18:34:30 +02:00
Vlad Zahorodnii
8736e44e1a effect: Fix EffectWindow::contentsRect()
It should specify the client rect inside the frame.

2556378dfa incorrectly assumed that the
buffer geometry includes the decoration.

BUG: 482294
2024-03-05 13:34:35 +00:00
Vlad Zahorodnii
bfd755aee9 Fix confined pointer being able to escape the surface
When using fractional scaling, an xwayland window's client geometry can
have some fractional part. When that's the case, .toRect() can shrink the
client geometry or extruding the decoration borders inside the surface.

On the other hand, the pointer is going to be confined as long as the
wl_surface is focused. If the focus jumps to the decoration, the pointer
constraint is going to be broken. Unfortunately, the focus can shift to
the decoration even though the wl_surface is still focused because of the
pesky .toRect().

BUG: 482448
CCBUG: 477124
2024-03-05 13:23:59 +00:00
Vlad Zahorodnii
0c8b3251e5 examples: Fix License metadata 2024-03-05 11:02:37 +00:00
l10n daemon script
2b8b53a105 GIT_SILENT Sync po/docbooks with svn 2024-03-05 01:20:02 +00:00
l10n daemon script
a33fe84f57 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"
2024-03-05 01:14:33 +00:00
Dominique Hummel
d0a6bd3404 effects/windowview: use correct enum value for PointerDevice
BUG: 482191
2024-03-04 23:14:55 +00:00
Ser Freeman
43e5f17547 Window: Rearrange handleInteractiveMoveResize
Calculate the next geometry without actually moving a window.
This prevents one of the visual issues when restoring a maximized
window by dragging.
2024-03-04 14:57:59 +00:00
Xaver Hugl
599020d8da backends/drm: don't work around pageflips timing out
It doesn't seem to (always) work, and it has caused at least one crash. If the workaround
is needed, it'll have to be implemented in a different way
2024-03-04 13:44:35 +00:00
Xaver Hugl
1b10dde569 opengl: assume a minimum of 2ms of render time
When GPUs are barely loaded, render times can spike randomly, likely because it goes
to a lower power state and has to ramp up again when KWin renders. To ensure this
doesn't make KWin drop frames, assume rendering always takes at least 2 milliseconds
2024-03-04 13:07:15 +00:00
Xaver Hugl
da80dd4c84 backends/drm: fix vblank calculation
Due to some misinterpretation of mode timings, the old method calculated vsync, not vblank,
so the resulting duration was much shorter, which caused frame drops on some systems.

BUG: 482064
2024-03-04 13:34:16 +01:00
Vlad Zahorodnii
9e77e5038f wayland: Fix a crash in DrmLeaseDeviceV1Interface::setDrmMaster()
The case when a resource is destroyed before kwin becomes the drm master
again is not handled. It can leave dangling pointers in m_pendingFds.
2024-03-04 10:59:40 +00:00
Xaver Hugl
3b28788592 wayland/surface: don't update preferred color description unless it changed
This avoids clients doing unnecessary work
2024-03-03 18:10:26 +00:00
David Edmundson
918ac8b27e xwayland: Use correct key for key release events
When a key is pressed the string that should be used in the key event
changes depending on the xkb updated state for composed keys.

The key itself should be not be affected.
2024-03-03 12:41:15 +00:00
David Edmundson
b650f55d60 xwayland: Add unit test for XWayland key tracking 2024-03-03 12:41:15 +00:00
David Edmundson
2025bf4c6b xwayland: Send to xwayland even when no window is focussed
In the codepath to keep xwayland notified of key presses we have to
check the focussed window is not already an xwayland client. To avoid a
null dereference a guard is added that the focussed window is not null,
however the current code incorrectly returns early intead of skipping
just the relevant check.

BUG: 478705
2024-03-03 12:41:15 +00:00
Sam James
53a61dfac0 Fix ODR violation with MouseClick plugin
```
/var/tmp/portage/kde-plasma/kwin-6.0.49.9999/work/kwin-6.0.49.9999/src/input_event.h:21:7: error: type ‘struct MouseEvent’ violates the C++ One Definition Rule [-Werror=odr]
   21 | class MouseEvent : public QMouseEvent
      |       ^
/var/tmp/portage/kde-plasma/kwin-6.0.49.9999/work/kwin-6.0.49.9999/src/plugins/mouseclick/mouseclick.h:27:7: note: a type with different bases is defined in another translation unit
   27 | class MouseEvent
      |       ^
lto1: some warnings being treated as errors
```

Bug: https://bugs.gentoo.org/921558
Signed-off-by: Sam James <sam@gentoo.org>
2024-03-03 10:46:03 +00:00
l10n daemon script
956390005b GIT_SILENT Sync po/docbooks with svn 2024-03-03 01:26:45 +00:00
l10n daemon script
282d221ee1 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"
2024-03-03 01:16:28 +00:00
l10n daemon script
96139b8af5 GIT_SILENT Sync po/docbooks with svn 2024-03-02 01:21:33 +00:00
l10n daemon script
fdb8d49946 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"
2024-03-02 01:13:21 +00:00
Vlad Zahorodnii
2491fb1b2b Ignore size hints when maximizing X11 windows
This is to help to fix maximized xwayland windows not covering the whole
work area. Size hints are obeyed only when restoring the window.

According to the net wm spec, the window manager should not obey size
hints when maximizing a window and some other window managers already ignore
them when maximizing windows.

CCBUG: 459373
2024-03-01 14:50:38 +00:00
Vlad Zahorodnii
47317a9fc7 examples/quick-effect: Revamp CMakeLists.txt 2024-03-01 14:31:42 +00:00
Vlad Zahorodnii
f0b3964c1a examples: Add quick script example 2024-03-01 14:31:42 +00:00
Akseli Lahtinen
181ce590a9 plugins/overview: Adds a border around hovered and selected desktop in desktopGrid
Currently desktop grid view is missing the selection rectangle when hovered over a desktop.
This adds the selection rectangle on hover, since it used to be there before three-state design.

Currently selected desktop has thinner and different colored border.


![image](/uploads/ad1f2f7acbe602fb7b9479ce859026b7/image.png)

![image](/uploads/9fa50bac4b81958da0b8926f8d2518ba/image.png)

![image](/uploads/3e46c1f5a740c40bbf18a5d887f31d39/image.png)

BUG:481812
2024-03-01 12:05:14 +00:00
l10n daemon script
f6813258ce GIT_SILENT Sync po/docbooks with svn 2024-03-01 01:39:10 +00:00
l10n daemon script
49852cc096 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"
2024-03-01 01:15:05 +00:00
Vlad Zahorodnii
0dc3f4906f opengl: Harden GLRenderTimeQuery against opengl providing bad timestamps
The end render timestamp can be slightly in the past before the start
render timestamp. This results in negative render times, which can make
kwin wait way more than just one vblank interval before starting the
next frame.

It appears that there is no way to detect if the gpu has performed a
disjoint operation in OpenGL. It's available only in GLES. As a way
around, this change makes the GLRenderTimeQuery insert two probes: one
queries gl timestamps when starting rendering and ending rendering;
another one just queries std::steady_clock before and after painting.
This hardens the GLRenderTimeQuery against OpenGL providing nonsensical
results sometimes.

BUG: 481721
2024-02-29 17:58:17 +00:00
Vlad Zahorodnii
79b7545840 backends/x11: Make SwapEventFilter report presentation feedback to OutputFrame 2024-02-29 16:46:05 +02:00
Vlad Zahorodnii
64dc01c640 effect: Drop WindowPaintData::screen
It's unused.
2024-02-29 13:33:52 +00:00
Marco Martin
86ede0ecf2 Remove invalid tabbox configs from defaults
We know that org.kde.breeze.desktop is invalid as LayoutName for the
tabbox, it will break the default button in the tabbox kcm.
Also the DesktopListLayout and DesktopLayout aren't valid anymore

BUG:481640
2024-02-29 11:14:31 +00:00
Fushan Wen
d377b5cdab plugins/outputlocator: show physical size in output locator
Make sure the effect shows the same sizes as the KScreen KCM.
2024-02-29 09:29:51 +00:00
l10n daemon script
bd88801de4 GIT_SILENT Sync po/docbooks with svn 2024-02-29 01:22:07 +00:00