Commit graph

27102 commits

Author SHA1 Message Date
Xaver Hugl
d548ade3a6 placement: keep the titlebar in the screen with centered placement
...even if the window is larger than the screen.

BUG: 489500
2024-07-23 16:02:51 +02:00
Xaver Hugl
0e25405151 placement: don't overwrite scheduled position change in cascadeIfCovering
As it used the frame geometry, the check for covering windows was sometimes wrong,
and additionally overwrite changes to the window position Placement had made before,
which could end up with the window origin wrongly not being put inside of the screen
in some cases.

CCBUG: 489500
2024-07-23 16:02:51 +02:00
Vlad Zahorodnii
02fbeeae78 Make Workspace::desktopResized() reassign outputs of uninitialized windows
If an output is deleted, the Workspace::desktopResized() is going to
re-assign windows to the new outputs. It is done so so the workspace
re-arrangement procedure is deterministic and has concrete order.

However, with the current Window lifecycle management, it's possible
to encounter the follwing case:

- xdg_toplevel gets created on output A
- xdg_toplevel initial state is committed
- output A is removed
- a wl_buffer is attached to the xdg_toplevel, which results in a
  geometry change and an output change
- Window::setMoveResizeOutput() is called, but the previous output
  is a dangling pointer

CCBUG: 489632
2024-07-23 13:46:06 +00:00
Devin Lin
b87096cb27 screenedge: Increase touch border from 3px to 8px
We are currently using the touch border to activate the task switcher, but it's almost impossible to activate on a phone screen. We used to use 8px (invisible panel) when the task switcher was implemented in plasmashell, I think that can work here.
2024-07-23 13:16:45 +00:00
David Edmundson
6943fab2c1 wayland: Avoid klipper loop with existing but empty clipboards
In default settings if the clipboard or selection is empty klipper will try to
replace it with cached data.

To avoid an occurring race condition if a client deletes and then recreates a
selection kwin will deny klipper if another mimedata is present at the time
it tried to replace an empty clipboard.

Klipper also considers the presence of a valid mime data without any offers
to be an empty clipboard, whereas kwin did not.

If a super weird client set the clipboard to a valid entry with no offers,
klipper would get into an infinite loop of trying to set it's own selection
for it to be continually denied with no other valid offer from klipper's perspective
ever received.

BUG: 469644
2024-07-23 12:50:06 +00:00
Xaver Hugl
32b117dbd8 core/renderbackend: remove unused parent object
As the render backend is always stored in a unique pointer, using a Qt parent
might even cause crashes
2024-07-23 12:29:24 +00:00
Nicolas Fella
32c696b45e Expose input device group on DBus
This is useful to combine tablet pen and pad devices into one logical device
2024-07-23 13:33:41 +02:00
David Redondo
e0202c7531 Include span
This is needed on some compilers like g++ 11.
2024-07-23 07:34:57 +00:00
Vlad Zahorodnii
2ec45f33d1 backends/drm: Fix a crash in DrmGpu::releaseBuffers()
Currently, the code assumes that the primary and the cursor layers are
always present. However, it's not guaranteed if the render backend cannot
be recreated. Specifically:

- the Compositor destroys the EglGbmBackend. The egl gbm backend, in its
  turn, resets the primary and the cursor layers to null
- the Compositor tries to create the EglGbmBackend but that fails so it
  is destroyed. EglGbmBackend::~EglGbmBackend() calls DrmGpu::releaseBuffers(),
  but it hits an unexpected null primary layer.

Normally, the primary and the cursor layers would be created when the
Compositor successfully creates the WorkspaceScene. Since the RenderBackend
fails to initialize, the WorkspaceScene is not created and the DrmGpu
doesn't recreate the layers.
2024-07-23 06:22:20 +00:00
Joshua Goins
59699402ad ButtonRebindsFilter: Set cursor position when rebinding tablet events
Since the tablet cursor and the mouse cursor is tracked separately,
rebinding a tablet button to a mouse click is sort of wonky. For
example, if you assign it to Right Click and attempt to open a context
menu it will appear to open in the wrong place.

So before we send the mouse button event, set the mouse position to
the tablet cursor position. A test is added to ensure this functionality
works as intended and doesn't regress.
2024-07-23 01:36:33 +00:00
Joshua Goins
fd670453e5 ButtonRebindsFilter: Modify testBindingTabletTool to use proximity
This is to not destroy the tablet state for the next test (which is
added in the next commit.) We could also explicitly do a tablet tool
up/down dance here, but all we need is the tablet tool to be in
proximity for the tablet button event to fire.
2024-07-23 01:36:33 +00:00
l10n daemon script
423a3e8b44 GIT_SILENT Sync po/docbooks with svn 2024-07-23 01:31:41 +00:00
l10n daemon script
0af007b462 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-07-23 01:20:56 +00:00
Joshua Goins
abc6dae6df ButtonsRebindFilter: Add tests for the tablet binding types
This adds autotests for binding to tablet pad and tool buttons, which
was previously untested. Of note is that we don't explicitly test mouse
buttons, which is already tested in the other functions.
2024-07-22 20:39:19 -04:00
Joshua Goins
b89f85f46d Add testing infrastructure for virtual tablet pad and tools
This is for the ButtonRebindFilter tests, but this could be useful
in other places too.
2024-07-23 00:38:36 +00:00
Joshua Goins
0ea1bcfe89 ButtonRebindsFilter: Add test for disabled bindings
This was missed when it was first implemented, but now there's tests for
checking if bindings can be disabled in the buttons rebind plugin.
2024-07-23 00:38:36 +00:00
Joshua Goins
47a538e61c ButtonRebindsFilter: Add test for mouse button binding
This was missed when it was first implemented, but now there's tests for
checking the mouse binding functionality in the buttons rebind plugin.
2024-07-23 00:38:36 +00:00
Ismael Asensio
ac5c175ade kcms/rules: Some QML clean-ups
- Remove unnecessary bindings to enabled: Properties that are not
  enabled are not shown in the list anyway, and it fixes QML warnings:

  RuleItemDelegate.qml:16:5: Unable to assign [undefined] to bool
  RuleItemDelegate.qml:93:17: Unable to assign [undefined] to bool

- Remove unnecessary colorSet
- Port away from javascript `var`
- Remove outdated comment
2024-07-22 12:46:29 +02:00
Ismael Asensio
0bd722e84b kcms/rules: Add a placeholder for properties filter
The list to add properties can be empty because no entry matches
the filter text or if all the properties have been already added.

Show a placeholder instead of leaving the view just empty
2024-07-22 12:46:29 +02:00
Ismael Asensio
9098fd4910 kcms/rules: Make the "Add Property" button non-toggleable
Changing the text and meaning of the button unexpectedly for a
regular operation is not consistent with any other place, and
disregarded by the HIG.

The sheet can be closed by tapping outside of it, or throught
the close button in its titlebar, as usual elsewhere.
2024-07-22 12:46:29 +02:00
Ismael Asensio
893bffd572 kcms/rules: Reuse items on the property selection ListView
This makes scrolling the list view much more responsive as there
is no need to create new delegates

BUG: 449275
FIXED-IN: 6.2
2024-07-22 12:46:29 +02:00
Ismael Asensio
90dbeef1d6 kcms/rules: Increase the default dialog size
This KCM is usually called via the application menu, which uses
kcmshell, so it doesn't benefit from the SystemSettings minimum size.

Slightly increse its height, so there is more space for properties
in the list views, either to configure them or to add them, so it
feels less cramped.
2024-07-22 12:46:29 +02:00
l10n daemon script
b9ace07d74 GIT_SILENT Sync po/docbooks with svn 2024-07-22 01:31:18 +00:00
l10n daemon script
1bf7018634 GIT_SILENT Sync po/docbooks with svn 2024-07-21 01:30:24 +00:00
l10n daemon script
0c6e458423 GIT_SILENT Sync po/docbooks with svn 2024-07-20 01:28:34 +00:00
Vlad Zahorodnii
ac80307eba wayland: Make XdgPopupWindow also destroy Window
Arguably, the compositor doesn't need to wait any longer after dismissing
the popup because it knows that the popup has been closed.

BUG: 490097
2024-07-19 20:49:01 +00:00
Xaver Hugl
eddced099d backends/drm: don't unset degamma in prepareAtomicModeset
We're now using and, if necessary, un-setting the property in prepareAtomicPresentation

BUG: 490517
2024-07-19 21:39:33 +02:00
Xaver Hugl
2340470a9a backends/drm: add support for drm plane size hints
On a lot of hardware, using bigger plane sizes than necessary means wasting power.
This is specifically problematic with the cursor plane, where we so far only had a
single fixed size hint through drm caps, even though the hardware often could use
a smaller cursor size.
This adds support for the per-plane SIZE_HINTS property, which allows us to pick a
smaller cursor size when the cursor image fits into it, and should save some power
that way.
2024-07-19 13:40:44 +02:00
Vlad Zahorodnii
2296f1ac3b utils: Load Xcursor cursors on demand
Usually, only a small subset of cursors would be used, for example the
default shape, the pointer shape, the text shape, etc.

Another reason why this change makes the KXcursorTheme load cursors on
demand is to prepare the cursor loading machinery to SVG cursors.
2024-07-19 06:02:11 +00:00
l10n daemon script
4f12792c2f GIT_SILENT Sync po/docbooks with svn 2024-07-19 01:28:35 +00:00
Vlad Zahorodnii
a10c322f7a wayland: Ignore plasma shell reposition requests during interactive move resize
Both kwin and plasma have different placement strategies during interactive
move resize. That can result in the window flipping between two positions.

In order to prevent that, this change makes kwin placement take precedence
over the window position specified using the plasmashell protocol. This can
be considered as a workaround.

BUG: 481829
2024-07-18 17:02:52 +00:00
Xaver Hugl
49f656a3d9 xdgshellwindow: guard against sending negative configure bounds
It's unlikely to happen, but if it were to happen, it would cause crashes
2024-07-18 15:48:17 +00:00
Xaver Hugl
099a1cc31f backends/drm: limit max_bpc to 8 by default with docks
There's generally a lot of problems with higher than 8bpc in docking stations,
especially when multiple monitors are involved. Until these problems are hopefully
eventually fixed on the driver side, limit the bpc to 8 with docks by default
2024-07-18 15:28:32 +00:00
Harald Sitter
63bf2db551 cmake: bump plasma-wayland-protocols requirement
we need it to implement window protocol v18
2024-07-18 15:07:57 +00:00
Harald Sitter
ae336e464e wayland: implement plasmawindowmanagement v18 2024-07-18 15:07:57 +00:00
Xaver Hugl
a6e429f348 wayland/xxcolormanagement: set the correct mastering display info in the color description 2024-07-18 16:11:14 +02:00
Xaver Hugl
1d3e3faf7b wayland: update xx color management to version 4 2024-07-18 16:11:13 +02:00
Xaver Hugl
01d9393e80 xdgshellwindow: never request clients to resize to a negative size
Doing that can cause clients to crash

BUG: 489983
2024-07-18 15:41:02 +02:00
Xaver Hugl
c3d202b0d2 compositor_wayland: count rendering time for all steps of compositing
Otherwise, prePaintPass, postPaintPass and possible future overhead like overlay
plane matching aren't accounted for, which can cause frames to be dropped.

CCBUG: 488782
2024-07-18 13:25:16 +00:00
Vlad Zahorodnii
7b486e215d Avoid sending excessive synthetic ConfigureNotify events
While they are harmless, they can result in the client repainting more
than needed and resulting in the opposite edge "bouncing" when resizing
the window.
2024-07-18 12:17:18 +00:00
Vlad Zahorodnii
8f144460d7 Initialize X11Window::m_client geometry
Initialize X11Window::m_client geometry with a proper value so, later, the
X11Window::configure() function can properly determine whether the client
window is resized.
2024-07-18 12:17:18 +00:00
Vlad Zahorodnii
53b61ce5d7 autotests: Fix a race condition in X11WindowTest
NETWinInfo queries the window state and setState() will do nothing if the
proposed new state matches the cached server side state.

On the other hand, given how the test is structured, there can be pending
fullscreen changes on the kwin side that are yet to be sent to the X server
when the NETWinInfo object is created.

This change fixes that race condition by adding an explicit Xcb::sync().
2024-07-18 12:17:18 +00:00
Xaver Hugl
75075fdb89 backends/drm: combine matrix operations in the right order
Matrix multiplication is right to left, so the operations have to be added
in the reverse order from the list
2024-07-18 12:02:35 +00:00
Xaver Hugl
cd1b70ef05 backends/x11/standalone: fix night light 2024-07-18 13:38:58 +02:00
Vlad Zahorodnii
ddfb26fc8e utils: Provide size hints in native pixels
This is mainly to make the Xcb utils api consistent.
2024-07-18 13:39:11 +03:00
Vlad Zahorodnii
95f56399b8 utils: Make Xcb::WindowGeometry return native geometry 2024-07-18 13:38:09 +03:00
David Redondo
ccde653ac2 plugins/eis: Ignore duplicate key and buttons events
Some clients (like xdotool) can send multiple events for the same
key. In some instances the number of presses and releases can even
be mismatched leading to stuck keys. While we clean up pressed keys
when the client vanishes, this doesnt help when it doesnt immediately
disconnect (for example Xwayland keeps client connections live
longer than the actual x client to reuse them).
Also fixes a copy paste mistake where key presses where also written
to buttons.
2024-07-18 10:17:31 +00:00
Jakob Petsovits
6ca6308ccd wayland: Use brightness range 1..max for internal displays
This avoids regressing compared to PowerDevil in 6.1 which also
protected against setting internal display brightness to 0.

CCBUG: 430439
CCBUG: 483490
2024-07-18 07:13:27 +00:00
Bruno Filipe
998be47ac1 backends/libinput: Ignore redundant events for pointer buttons and keyboard keys when pressed/released on multiple devices
BUG: 486034
2024-07-18 06:56:18 +00:00
l10n daemon script
ea4b2c2b20 GIT_SILENT Sync po/docbooks with svn 2024-07-18 01:25:49 +00:00