Commit graph

22678 commits

Author SHA1 Message Date
Vlad Zahorodnii
a6d72d3f60 wayland: Introduce IdleDetector
The IdleDetector is an idle detection helper. Its purpose is to reduce
code duplication in our private KIdleTime plugin and the idle wayland
protocol, and make user activity simulation less error prone.
2022-06-29 20:27:50 +03:00
Xaver Hugl
da7dad1586 surfaceitem, surfacetexture: manage pixmaps and textures with std::unique_ptr 2022-06-29 13:18:51 +00:00
Xaver Hugl
1ff623e95e renderbackends: make SurfaceTexture creation methods use std::unique_ptr 2022-06-29 13:18:51 +00:00
Aleix Pol
696abac400 screencast: Do not send events when moving the cursor outside the viewport
e.g. when we have two outputs
2022-06-29 11:29:27 +00:00
Aleix Pol
a2913d1e2b screencasting: Have cursor move frames also send damage information
Otherwise we keep the last use of the buffer's which is clearly wrong.
2022-06-29 11:29:27 +00:00
Aleix Pol
7f73264f66 screencast: Also send the header when we just send the cursor update
When sending a frame that just updates the cursor, also increment the
sequential value of the frame
2022-06-29 11:29:27 +00:00
Xaver Hugl
84acb768ee effects: modernize some code
Mostly port away from manual memory management and clean up some headers
2022-06-29 10:34:50 +00:00
Vlad Zahorodnii
24dfdd70c0 effects: Drop WindowPaintData::modelViewMatrix()
It's unused and it conflicts in a way with PaintData::translation(),
PaintData::rotationAngle() and PaintData::scale().
2022-06-29 09:50:43 +00:00
Xaver Hugl
ef97158f96 backends/drm: suppress logging for direct scanout
BUG: 456089
2022-06-29 09:59:10 +02:00
Xaver Hugl
29625218d3 backends/drm: fix flicker with rotation on mobile
When we use a shadow buffer, we always render to the whole surface - setting
the damage region is incorrect and invokes undefined behavior. On the Lima
driver this caused flickering on screen rotation.
To fix this, don't set a damage region when we use a shadow buffer, which is
effectively setting the damage region to the full surface
2022-06-28 08:38:43 +00:00
Aleix Pol
3d3fcd7ab4 tablet: Leave the surface we were previously on, not the one we are going to
This sometimes results in a crash and it's logically wrong as it was.
2022-06-28 03:39:31 +02:00
Xaver Hugl
47c08d6f66 backends/drm: ensure modeset properties are reset properly
Without this, all atomic modeset commits fail on setups with a VR headset
2022-06-27 19:14:08 +00:00
Vlad Zahorodnii
d6e9b8011a effects/slide: Save correct current position
effects->desktopCoords() returns the position of the desktop in pixels,
while we want the desktop grid coords, i.e. if the virtual desktop is in
the first row, second column, we want m_currentPosition to be (1, 0).
2022-06-27 12:13:12 +00:00
Jonathan Esk-Riddell
dfc6c87057 Update qt5 version requirement to 5.15.2
GIT_SILENT
2022-06-27 10:02:35 +01:00
l10n daemon script
d228a3d16e 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"
2022-06-27 01:43:00 +00:00
l10n daemon script
9eac2cc6eb 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"
2022-06-26 01:42:44 +00:00
Xaver Hugl
42c5e6bcf6 backends/drm: handle failing commits better
It can happen that the drm backend temporarily lacks permission to do atomic
commits, or that the cached drm property values become out of sync with
the real values held by the kernel. Instead of failing with both, attempt
to update property values and try the commits again at a later time.
2022-06-25 17:25:17 +02:00
l10n daemon script
6ff6dcac26 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"
2022-06-25 01:59:17 +00:00
Marco Martin
66a54d38d4 effects: Set timestamp for input events
Set the time for mouse and touch events. This is especially important
for the mouse is as the timestamp will be used to discriminate between
single and double click. Previously this was always sending the double
click event, making buttons work only every other click.

BUG: 454275
BUG: 449907
2022-06-24 17:54:55 +00:00
Marco Martin
66d1278794 Internal tracking for quick effect item focus
focus used to be always forced to the root item of the view in the
"active screen" (which behavior is configurable between mouse poosition
and screen of active window)
now set focus to that particular view only if nothing is focused, also when
the user explicitly sets focus to an item in another view
remove focus to the old one so the item properly focused would be there

BUG:455807
BUG:455783
CCBUG:455633
2022-06-24 15:56:08 +00:00
l10n daemon script
aad0673961 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"
2022-06-24 01:42:09 +00:00
Vlad Zahorodnii
b62dd29210 backends/drm: Change the base class of DrmLeaseOutput
At the moment, the DrmLeaseOutput class inherits from the
KWaylandServer::DrmLeaseConnectionV1Interface class. While this works,
it's not a future-proof design. For example, kwin could also lease its
"desktop" outputs in order to let another wayland compositor run
alongside it.

Also, it's a good practice to prefer composition over inheritance.
2022-06-23 19:51:24 +00:00
Weng Xuetian
a521525c4d Delegate updateShadow to event loop.
If PlasmaCore.Dialog resizes while visible, the kwin shadow property
used by InternalWindow may update the shadow during rendering and cause
crash related to current context.
2022-06-23 17:18:08 +00:00
Niklas Stephanblom
6838b1132f Windowview: Fix broken keyboard navigation while filtering
After the 5.25 update, one could not see which window was highlighted until one
manually unfocused the SearchField and then pressed any key to refresh the WindowHeap.
Also, the searchbar would (most of the time) "absorb" the arrow keys so one had to
also unfocus it to really be able to select windows with they keyboard. 

With this change, there is always one window highlighted while filtering using the
search box. Also, one can select another window with the arrow keys without manually
unfocusing the searchbox. This heavily improves the keyboard functionality in this
effect that got lost with the 5.25 update of presentwindows to windowview and
resolves complaints about the keyboard navigation being buggy. 

BUG: 455633
BUG: 455764
BUG: 455099
BUG: 455586
BUG: 455753
FIXED-IN: 5.25.2
2022-06-23 17:13:57 +00:00
Weng Xuetian
18763d1483 Fix flaky testTextInputV3Interface
In a74c436156, we changed behavior that
every commit() will be followed by a done(), which makes this test might
catch a different done() from server. Change the spy to make sure it
exhaust all other done before checking the one expected.
2022-06-23 14:44:42 +00:00
Vlad Zahorodnii
2ade8111de effects: Fix a type mismatch warning in WindowHeap
file:///data/projects/usr/lib/qml/org/kde/kwin/private/effects/WindowHeap.qml:55:9: Unable to assign null to QUuid
2022-06-23 11:57:50 +00:00
Laurent Montel
c83568dfdd GIT_SILENT: remove extra ';' 2022-06-23 13:43:09 +02:00
Laurent Montel
d1837b8603 Remove extra ';' 2022-06-23 06:56:25 +02:00
l10n daemon script
08d140982d 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"
2022-06-23 01:43:29 +00:00
David Edmundson
be5b23628f [effects] Fix QML after recent refactor
fd25e96969 looks like it attempted to
rename an alias and got out of sync.
2022-06-22 19:59:22 +01:00
Marco Martin
0534110eed Fix the math of the down gesture 2022-06-22 17:54:54 +02:00
Aleix Pol
9208a8eb0e screencasting: Properly disable the cursor when it exits the viewport
Otherwise it would glitch
2022-06-22 15:42:50 +02:00
Aleix Pol
ed9e1e57b3 screencasting: No need to adjust the scale on the cursor
Otherwise we get some vertical padding when there's scaling
2022-06-22 15:42:50 +02:00
Marco Martin
fd25e96969 Move WindowHeap delegate to own file
This makes easier for individual effects to personalize it
without adding ad-hoc api in the main WindowHeap class.
WindowHeap and WindowHEapDelegate are still quite coupled and thing can probably still be improved, but the code should be more readable already
2022-06-22 11:24:17 +00:00
Xaver Hugl
6d9d4c190a backends/drm: fix enabled+inactive check
When dpms disabled outputs get set active, they require a modeset. If after
that they are set inactive again without resetting the pipelines first,
they no longer require a modeset but still have the pending properties that
would enable a crtc - but without a framebuffer set.

To prevent this, first test the current setup as it is, and only then see
if the pipelines would work if enabled again.
2022-06-22 10:22:30 +02:00
Aleix Pol
9dbd0c4b36 backends/wayland: Offer the connector name as the model
It's more useful than ""
2022-06-22 01:54:19 +02:00
Xaver Hugl
3ea14d6e36 backends: use std::unique_ptr for RenderLoop 2022-06-21 17:50:49 +00:00
Xaver Hugl
a38a44cb2a libinput: use std::unique_ptr for events 2022-06-21 17:50:49 +00:00
Xaver Hugl
d2f7f75d39 manage Session with std::unique_ptr 2022-06-21 17:50:49 +00:00
Xaver Hugl
13d079cdd7 backends/x11: do less manual memory management 2022-06-21 17:50:49 +00:00
Xaver Hugl
e745577b4c backends: port vsync helpers to std::unique_ptr 2022-06-21 17:50:49 +00:00
Xaver Hugl
4cab9c4fc7 backends: port from QScopedPointer to std::unique_ptr 2022-06-21 17:50:49 +00:00
Aleix Pol
1112c29eb4 drm: Drop wrong assert
It blows out on nvidia proving my assumption was wrong back then
2022-06-21 14:16:46 +00:00
Aleix Pol
7b933abc0f backends/wayland: Don't rearrange outputs every time the window is resized
It makes it very hard to debug any use-case that isn't a strip of
outputs and even then, we should have other mechanisms to arrange
outputs properly (i.e. through kscreen).
2022-06-21 10:33:12 +00:00
Aleix Pol
5490b00117 backends/wayland: Allow outputs to have a name
As expected in many parts of our codebase
2022-06-21 10:33:12 +00:00
Vlad Zahorodnii
d40aec0853 effects/desktopgrid: Allow switching between desktops using digit and function keys
C++ version allowed switching between virtual desktops by pressing
function keys (Fn) or digit keys.

BUG: 455292
2022-06-21 10:43:13 +03:00
Vlad Zahorodnii
48f69146d3 Unvirtualize Scene::paintWindow() 2022-06-20 17:59:02 +03:00
Vlad Zahorodnii
a85960833b effects/screentransform: Do proper cross-fading
At the moment, the effect that animates the screen works as follows:

* render the screen before it's rotated in an offscreen texture
* after screen rotated, paint the offscreen texture in the first half of
  the animation but not the screen contents after rotation and in the
  second half of the animation, paint the live screen contents

This works but it doesn't take into account things such as blur (I can
see that the region around where the panel should be doesn't look as
expected).

This change makes the screen transform effect do proper cross-fading,
i.e. save the screen before it's rotated in an offscreen texture, render
the current screen in an offscreen texture, and produce the final result
by cross-fading between two offscreen textures in a shader.

Besides fixing the visuals of the effect, another motivation behind this
change is to reduce the number of ScreenPaintData transforms, which can
be very handy in simplifying item painting code.
2022-06-20 13:56:04 +00:00
Vlad Zahorodnii
35a3184ea3 Fix computation of effective opaque region of SurfaceItemX11
The value of _NET_WM_OPAQUE_REGION can be out of sync with the geometry
of the window. The NETWM spec suggests to compute the effective opaque
region by taking intersection of _NET_WM_OPAQUE_REGION and the bounding
region set by the shape extension.

SurfaceItemX11::opaque() got broken after refactoring opaque region
handling in wayland surfaces so SurfaceInterface::opaque() always
returns a sane value, the computation of effective opaque region is done
in SurfaceInterface at commit time.

BUG: 455617
2022-06-20 10:18:18 +00:00
Marco Martin
c1a536a527 Fix dragging especially by touch
The drag manager of a window now can take over from anything, so that
the events to initiate a drag are not stolen by the tap handlers
(fixes the drag starts only the second time is tried issue)

On wayland drag by touch was completely broken by the supportsclosewindows check,
now the touch drag handler is always active and the check of the property is done only
when the drag is over

BUG:455268
2022-06-20 10:11:04 +00:00