Commit graph

4886 commits

Author SHA1 Message Date
Aleix Pol
150b098ba7 screencasting: Minimise pixel format conversions while streaming
Instead of best-guessing, at BGR (which in retrospect was a bad guess),
offer whatever resembles most the internal representation. This way the
frame gets to be least treated as it goes into the client.
2023-02-23 14:11:41 +00:00
Harald Sitter
4fcc545628 backends/x11: explicitly free the outputs
...before releasing the connection!

this was randomly causing crashes because of use-after-disconnect
problems. since we would tear down the connection in ~X11WindowedBackend
but outputs wouldn't get cleaned up until QObject children cleanup of
the X11WindowedBackend object (or more precisely the OutputBase). this
would then result in ~X11WindowedOutput accessing a backend connection
that had already been closed

to help debug this type of problem moving forward let's also reset the
connection to nullptr during destruction. it's kinda pointless but it
makes it easier to spot use-after-disconnect

BUG: 466183
2023-02-23 13:50:00 +00:00
Vlad Zahorodnii
08e392f368 Revert "wayland: Update shadow immediately"
This reverts commit 4b1ef33c1e.

It introduced a crash. The large icons task switcher can create and
destroy the shadow in the middle of painting. When a shadow is
destroyed, kwin can make opengl context current. It will reset current
QOpenGLContext, and QtQuick can crash.

BUG: 466279
2023-02-23 12:48:11 +00:00
Vlad Zahorodnii
a2062090eb Rename interactive move resize lifecycle signals
Add the "interactive" word to be consistent and put "started",
"stepped", and "finished" at the end of signal names where they are more
expected.
2023-02-23 11:38:34 +00:00
Vlad Zahorodnii
8bb2d52972 Rename Window::clientMaximizeStateChanged signal
Make it shorter to be more readable.
2023-02-23 09:17:47 +00:00
Vlad Zahorodnii
88c974835c Drop duplicate clientMaximizedStateChanged signal 2023-02-23 09:17:47 +00:00
Vlad Zahorodnii
7f4071c7d4 Drop Window::addWorkspaceRepaint
It's used only by window elevation logic, but it can be moved inside
libkwineffects. It should also fix missing repainting in scripted effects.
2023-02-23 07:40:26 +00:00
l10n daemon script
5d60f218d4 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-02-23 02:01:06 +00:00
Vlad Zahorodnii
da26deaa5c backends/libinput: Fix crash upon receiving motion absolute events
The input events can be processed when the workspace is not available,
e.g. during startup or shutdown, so add a corresponding guard.

As a long term plan, we need to decouple Workspace from low-level input
backend parts, but it will be a too invasive change for now.

BUG: 449317
BUG: 465456
2023-02-22 21:39:14 +02:00
Xaver Hugl
520fa3042a pointer input: always confine pointer to screens
Checking if the pointer needs to be confined before doing `std::clamp` on
the position is useless and causes problems. With this change, the pointer
will always be confined to exactly the screen, without any fractional offsets.

BUG: 461911
2023-02-22 19:01:22 +00:00
Vlad Zahorodnii
4b1ef33c1e wayland: Update shadow immediately
Updating OpenGL textures no longer takes place immediately.
2023-02-22 14:53:26 +00:00
Vlad Zahorodnii
bc0502b3ca effects: Fix selecting hidden windows using keyboard
WindowHeapDelegate used to have hidden property. It was renamed to
activeHidden, but WindowHeap has not been adjusted to the new name.

BUG: 466120
2023-02-22 11:53:47 +00:00
Vlad Zahorodnii
0e906ec182 scene: Decouple scene bits from Shadow class
Currently the Shadow class is scene specific, which adds coupling
between Window and scene bits.

This change introduces ShadowTextureProvider that contains scene
specific stuff so the Shadow acts like a data source and is not coupled
to concrete scene.
2023-02-22 10:07:41 +00:00
Vlad Zahorodnii
21d410710c Fix coding style issue 2023-02-22 09:29:06 +02:00
Adam Williamson
779005f1d2
feat: allow VT switching even with global shortcuts disabled 2023-02-21 23:10:28 +01:00
Vlad Zahorodnii
e0062f675d Port away from QRectF::contains()
QRectF::contains() considers right and bottom edges inside the
rectangle, but the relevant code has the opposite expectations.
2023-02-21 19:45:51 +00:00
Nicolas Fella
bae75abf6d Remove unneeded X-KDE-ParentApp from KCM metadata 2023-02-21 17:36:54 +00:00
Aleix Pol
8c86648172 inputmethod: Give text input managers a parent
Otherwise they linger forever
2023-02-21 15:26:48 +00:00
Nicolas Fella
a1639da6e5 [kcm/common] Port EffectsModel away from KPluginMetaData::metaDataFileName
It's gone in KF6

It's only used to obtain the install location of the package and resolve files relative to that

Use QStandardPaths to locate those files directly
2023-02-21 14:55:28 +00:00
Vlad Zahorodnii
2de5236e3f scene: Ensure there's current opengl context when DecorationItem is repainted for last time
BUG: 466186
2023-02-21 13:22:15 +00:00
Aleix Pol
93815aede4 screencasting: only invert the texture manually when it's not marked as inverted
In the cases where isYInverted(), the texture will be properly placed.
It's only when not that we need to mirror it vertically.
2023-02-21 12:22:20 +00:00
Aleix Pol
1be2b8868c wayland_egl: Reuse the texture we already have for textureForOutput 2023-02-21 12:22:20 +00:00
Vlad Zahorodnii
c24a5f0395 effects/glide: Fix transform
Translation should be in logical pixels.

BUG: 465849
2023-02-21 11:54:34 +00:00
David Edmundson
01fd54d753 Aurorae: Add dummy window for working device pixel ratio
Aurorae uses a QQuickWindow that receives an implicit scale through the
QPA. Unfortunately there's a known quirk with device pixel ratio not
being followed when offscreen surfaces are never shown and an
independent render control is used.

Without this QQuickRenderControl::grab ends up using a buffer the size
of the window * dpr, but with the contents rendered at 1x in the corner
along with incorrect device pixel ratio information.

This patch copies a used solution from EffectQuickView. This can be
resolved more neatly with newer Qt.

BUG: 452730
BUG: 465790
2023-02-21 11:07:33 +00:00
David Redondo
38cd1fc491 scripting: Mark QObjects returned from invokables as having C++ ownership
Otherwise the script engine may delete them if they have no parent and
there are no more references to them.
2023-02-21 11:12:08 +01:00
Vlad Zahorodnii
18d6159be1 tiling: Make child tiles inherit padding from parent tile
If a new tile is added, make it inherit parent tile's padding to ensure
consistent padding.

BUG: 465842
2023-02-21 09:22:19 +00:00
Arjen Hiemstra
edbbe996d3 effects/contrast: Round device coordinates when creating geometry
Since normal geometry is now rounded, we need to make sure to round
anything that should match that geometry, otherwise we risk things
peeking out of the normal geometry.

BUG: 464526
2023-02-21 07:50:53 +00:00
l10n daemon script
6a5d809f81 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-02-21 02:04:35 +00:00
Xaver Hugl
4cd25cf571 cursor: make position, hotspot and size floating point
This allows all pixel positions to be used on high dpi screens,
and corrects damage tracking with Xwayland cursors

CCBUG: 466094
2023-02-20 21:01:39 +00:00
David Redondo
7366545d0f Move Layer and QuickTile enum to kwinglobals.h
Q_NAMESPACE can ever only be used once for a namespace otherwise
there will be multiple defintions of the staticMetaObject.
2023-02-20 20:22:26 +00:00
Xaver Hugl
81571203f1 cursorsource: fix scaling with Xwayland
Before this commit, the device pixel ratio of the cursor was set to ignore
the Xwayland scale override, while the size of the cursor surface was scaled.
This change removes the scaling of the cursor surface size, to make the cursor
be no longer cut off in rendering.

BUG: 466094
2023-02-20 19:50:30 +01:00
Xaver Hugl
3334fb8752 cursordelgate: round cursor position when rendering
Otherwise there can be weird artifacts when screen scaling is involved
2023-02-20 16:22:24 +01:00
David Redondo
264a19247b Mark Window as damaged when decoration or shadow changes
Enforms thumbnails, screencasts and effects of these changes and
that the window needs repainting.
BUG:464417
FIXED-IN:5.27.1
2023-02-20 11:55:22 +01:00
David Edmundson
ada8e40792 outputchangeset: Round passed scale
Converting to wl_fixed is lossy. Especially for non-round values like 1.15.

This causes various visual glitches and off sizes.

Given we're using units of 120ths for the fractional scale protocol it makes sense
to fix the passed values for anything else over the wayland protocol.

BUG: 465850

Testing done:
ran a 1920 screen at 1.15 scale, got a logical size of 1670 which matches what it should be
2023-02-20 10:02:06 +00:00
l10n daemon script
d5207b95c8 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-02-20 02:04:26 +00:00
Xaver Hugl
9d353864a4 kwinglutils: use QSizeF instead of QRect
The method is ignoring the position of the rectangle, which is very unintuitive
when using it
2023-02-19 10:39:34 +00:00
Vlad Zahorodnii
96fdc9d55a scripting: Make KWin.registerWindow() noop on wayland
On Wayland, windows properly update if they are remapped.
2023-02-18 10:17:28 +00:00
Nicolas Fella
27b90db641 Remove unneeded KAboutData includes 2023-02-17 16:16:26 +00:00
Nicolas Fella
61718d9017 Port QML KCMs away from setAboutData
Let them use the JSON metadata instead
2023-02-17 16:16:26 +00:00
Aleix Pol
d203d3b370 AbstractEglBackend: Share initBufferConfigs among its children
The only one that does it differently is the DRM backend and it's just
an extension that takes GBM into account, otherwise it's effectively
copy-pasted code.
2023-02-17 13:39:27 +00:00
Aleix Pol
c0d87e0139 backends/wayland: Remove unused attribute
Makes clang complain
2023-02-17 13:39:27 +00:00
Vlad Zahorodnii
70a063a34c scripting: Rename ScreenEdgeItem to ScreenEdgeHandler
ScreenEdgeItem is not an item, so rename it to something else. "Handler"
is inspired by QtQuick, e.g. TapHandler.
2023-02-17 13:19:29 +02:00
Vlad Zahorodnii
5942c13eba scripting: Fix registration of some types
We need to register data types such as QVector<KWin::VirtualDesktop *>
both for QML and JavaScript scripts.

If you have no JavaScript scripts enabled, those container types won't
be registered and QML will fail to read properties such as
Window.desktops, which can result in already visible windows animating
opacity from 0 to 1 when opening overview effect.

To fix that, register all accessible data types in scripting apis in
Scripting::init().
2023-02-17 10:14:43 +00:00
Tobias Berner
99b2e6072c Add missing cerrno include. 2023-02-17 09:36:26 +00:00
Vlad Zahorodnii
4bf06466f1 effects/{desktopgrid,overview,windowview}: Port to SceneView 2023-02-17 11:01:23 +02:00
Vlad Zahorodnii
0c0fb99919 kwineffects: Add SceneView attached property
SceneView attached property is a more script friendly way to pass the
information about a screen view from C++ to QML code.
2023-02-17 11:01:23 +02:00
Vlad Zahorodnii
72b7bda18e scripting: Drop Window.geometry property 2023-02-16 07:42:54 +00:00
David Edmundson
7b46f101e3 Simplify tile dismissal
We want floating tiles to be activatable, but also dismiss the effect by
clicking on the whitespace.

The current solution doesn't work as a floating tile that is in turn
split will pull focus from the children meaning those tiles can't be deleted.

Rather than special casing and z-manipulation we can simplify everything
by moving tile dismissal to the root of the effect and appropariately
propagating the event.

BUG: 465740
2023-02-15 23:05:13 +00:00
Vlad Zahorodnii
9b6c9242f6 scripting: Drop "Item" word in WindowThumbnailItem and DesktopBackgroundItem
Drop the "Item" word to be more consistent with QtQuick coding
conventions, where C++ usually include the Item word, but QML types
don't.
2023-02-15 21:06:44 +02:00
Vlad Zahorodnii
37bcdbc03e scripting: ClientModel -> WindowModel 2023-02-15 16:54:42 +00:00
Tomasz Paweł Gajc
88cf83554f add support for Lima, V3D, VC4 (based on https://github.com/OpenMandrivaAssociation/kwin/blob/master/kwin-5.21.4-add-support-for-panfrost-driver.patch made by Bernhard Rosenkraenzer) and update list of supported devices for Panfrost 2023-02-15 11:23:02 +00:00
Vlad Zahorodnii
c2fb99d126 x11: Drop xv-related workaround
It creates bouncing glitches in client side decorated windows. Besides
that, it's preferred to avoid adding client workarounds in the wm.
2023-02-15 09:39:12 +00:00
Vlad Zahorodnii
683761ea2d scripts/desktopchangedosd: Port to VirtualDesktop objects 2023-02-15 08:32:07 +00:00
Nicolas Fella
659f4eb555 Remove unneeded KService usages 2023-02-15 07:27:55 +00:00
Aleix Pol
577c031599 screencast: Simplify the region path
No need to render the intermediate texture into a second intermediate
texture.
2023-02-14 14:41:42 +00:00
Aleix Pol
6394bccdcb x11/windowed: Fix screencasting
Properly notify when the output changes.
Make sure we are reading from the correct framebuffer when forwarding
the texture.
2023-02-14 14:41:42 +00:00
Aleix Pol
309c9100fa virtual: fix screencasting by output
Properly notify when the output changes.
Forward the texture that holds the output when requested.
2023-02-14 14:41:42 +00:00
Harald Sitter
1ede84f4fe forward all channels of started subprocesses
there is no practical reason I can see for why this should be limited to
stderr only. we are not reading or otherwise consuming stdout, we should
just pass it on.
2023-02-14 13:11:32 +01:00
Dominique Hummel
0ca7b40da0 tiling: Evacuate tiled windows from custom & quick tiling on output removal
Context: If a display is removed, the corresponding TileManager is removed with it. This in turn removes every one of its Tiles with it, and when a Tile's destructor is called, it attempts to find a new replacement tile for any windows it was previously managing.

However, if the Tile is removed because its corresponding TileManager has been removed, this has the potential to cause a segfault in KWin, causing it to crash (I suspect a possible race condition? but not sure).

This MR correctly evacuates custom tiled windows & migrates quick tiled windows upon output removal.

BUG: 465522
2023-02-14 12:03:40 +00:00
Natalie Clarius
127ae4b556 useractions: rename shortcuts 'window to screen' -> 'move window to screen' 2023-02-13 15:52:38 +00:00
Vlad Zahorodnii
160cc98597 wayland: Fix a typo in DataControlDeviceV1Interface::sendPrimarySelection()
interfaceVersion() is not the same as the resource version.
2023-02-13 13:16:50 +02:00
David Edmundson
d084629f3c wayland: Version check before send_primary_selection calls
This is only in v2

BUG: 465657
2023-02-13 09:38:24 +00:00
Andreas Cord-Landwehr
4c2952a533 Add missing cmath include for std::ceil 2023-02-12 12:12:46 +01:00
Andreas Cord-Landwehr
80b5deb032 Include missing header for std::round 2023-02-12 12:00:37 +01:00
Andreas Cord-Landwehr
484d2da046 Set CXX standard for crossbuilding utility 2023-02-12 08:54:42 +01:00
Vlad Zahorodnii
a1a09e91ab plugins/screencast: Simplify projection matrix code in window source
Split orthographic matrix construction and y inversion in two steps to
improve code readability.
2023-02-11 12:48:24 +00:00
Vlad Zahorodnii
83c38b0907 Drop Window.screen property
Use Window.output instead.
2023-02-11 12:16:46 +02:00
Vlad Zahorodnii
37f4199b19 scripting: Drop clientArea(area, QPoint, VirtualDesktop) overload
Use Workspace.screenAt() to look up the output instead.
2023-02-11 09:49:28 +00:00
Vlad Zahorodnii
fa2b854ee4 scripting: Switch to Output 2023-02-11 09:49:28 +00:00
l10n daemon script
3b391c9f67 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-02-11 01:59:50 +00:00
Vlad Zahorodnii
60db5637b4 plugins/screencast: Simplify y inverted handling
dmabuf buffers have the origin in the top left corner, so a texture with
attached dmabuf must have y inverted.

By correctly specifying the y inverted flag, we could leverage existing
infrastructure in kwin to handle vertically mirrored textures and make
simpler some projection matrix code in screencasting.
2023-02-10 15:16:40 +00:00
David Redondo
cc4d99aea4 Fix button to Qt::MouseButton mapping
Even though the names seem to match, QtWayland maps button values
to enum values in ascendung order (as it does on X11). The wrong
mapping is usually not a problem because we send the native button
events to clients. However when the Qt names or values are used
for communication between KWin and a client this leads to
misunderstandings.
BUG:465463
FIXED-IN:5.27.1
2023-02-10 09:27:37 +00:00
l10n daemon script
9aad886729 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-02-10 02:01:56 +00:00
Xaver Hugl
815269a26f backends/drm: set cursor again after it was hidden
This isn't necessary with atomic modesetting, as moving and setting are
the same thing. With legacy though, if the cursor was hidden, moving it
with the layer visible does not automatically show it again, so that needs
to be done explicitly

BUG: 461181
2023-02-09 22:35:44 +00:00
Ismael Asensio
1b75d4b71a kcms/rules: Change opacity defaults to 100%
This has the benefit of providing a saner default for the values
of `opacityActive` and `opacityInactive` rule properties, both
in the UI and when reading the config.

The side effect is the same we have when changing default values:
if someone would have set a rule with some opacity to 0%, it will
be read as 100% next time kwin starts.

In this case it is a small price, as it is always easier to change
it back when the windows are visible that restoring it when they're
not, specially if it wasn't voluntary.
2023-02-09 22:41:39 +01:00
Natalie Clarius
0b2c442196 kcms/rules: add warning for low opacity
Once upon a time, in a moment of acute stupidity, I accidentally created a window rule making all windows completely transparent. I meant to go for 0% transparency when really the slider said 0% opacity. And once you've made the very window to change this setting invisible, the only way to fix that mistake is to log into a TTY or different DE and find the config file to edit manually. Since I've since seen several KRedditors fall into the same trap:  

Show a warning when active or inactive opacity is set to ~~<= 15%~~ < 25%.

![warning](/uploads/0b1178bf5782bff3b4293a0031bb4fca/warning.png)
2023-02-09 21:36:24 +00:00
Vlad Zahorodnii
e1e9e89f34 wayland: Remove SeatInterfacePrivate::accumulatedCapabilities
The seat no longer posts the relevant protocol error.
2023-02-09 20:15:55 +02:00
David Edmundson
e0c66d42cb Match pointer/keyboard/touch lifespan to Seat lifespan
PointerInterface is a "Server-managed multicasting resource". As in we
have one QObject, managed by the server, but internally it represents
multiple resources from various clients.

We cannot control the lifespan of those resources, they may persist long
after we stop having these capabilities on the seat.

If we delete our pointer object when we stop advertising a pointer
capability we have race conditions with clients calling release, or
potentially even having a seat_get_pointer in flight.

It's easier and safer just to have PointerInterface last as long as the
Seat. If we don't have a mouse no-one should try to bind, and even if
they did or remained bound long after we stop having a mouse it won't do
any harm as there are no mouse events to broadcast.
2023-02-09 16:36:24 +00:00
Aleix Pol
1a9ab2d46e screencast: Fix region screencasts top coordinate
We don't need to invert the top as the ortho already is on the correct coordinate
space.

Thanks to Dominique Hummel for helping debug the issue!
2023-02-09 15:09:19 +01:00
Aleix Pol
4078fcab2b screencast: Error out if we request a region without outputs
It makes for a bad development experience and I don't see a good use case
for it right now. If it existed, we can always make sure it works.
2023-02-09 15:09:19 +01:00
l10n daemon script
88d9a772fc 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-02-09 02:07:11 +00:00
Vlad Zahorodnii
3e9804215f Port Outline to org.kde.kwin 3.0
The outline has been overlooked.
2023-02-08 20:12:20 +02:00
Vlad Zahorodnii
f731a8e9cf x11: Remove unused signals 2023-02-08 14:47:26 +02:00
David Edmundson
fbb71f9c0b XWayland: Don't dispatch xwayland events in QAbstractEventDispatcher sleeps
QAbstractEventDispatcher blocks and waits constantly on every external event
processed; every timer or update from an X or wayland client, mouse
move or DRM event.

Right now every time this happens we go and check Xwayland for new
events, this is a system call (poll) that based on strace will
unsurprisingly immediately return with EAGAIN as there's nothing to read
from X. If there is something to read our socket notifier will fire. On block we do still need to read any events read in the meantime that weren't dispatched.

This cuts down our system calls significantly, which hopefully should have a
noticeable impact on performance especially when the kernel is under
load.

---

Found whilst analysing strace (by accident whilst looking for something else!)

In a simple case of xwayland nested running glxgears we go from 28 calls per frame to 21. With many many clients and more input events it'll be an even higher percentage.
2023-02-08 10:34:20 +00:00
l10n daemon script
608fbbfa32 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-02-08 02:07:04 +00:00
Vlad Zahorodnii
7c1d188747 scripting: Remove unnecessary x11window.h include 2023-02-07 21:54:39 +00:00
Vlad Zahorodnii
6de388c79c scripting: Make workspace.getClient() return Window 2023-02-07 21:54:39 +00:00
Vlad Zahorodnii
09fd29dccc scripting: Remove unrelated signals
The current state is inconsistent. Some window-specific signals are
exposed in the workspace, some not.

This change drops those signals. One should monitor the signals it's
interested in instead.
2023-02-07 21:54:39 +00:00
Vlad Zahorodnii
7fd7c07b30 scripting: Remove noop signals 2023-02-07 21:54:39 +00:00
Vlad Zahorodnii
93c1a610bc scripting: Remove X11 specific signals 2023-02-07 21:54:39 +00:00
Vlad Zahorodnii
452bb20741 Drop Workspace::{oldDisplayWidth,oldDisplayHeight}
They're unused.
2023-02-07 21:34:07 +00:00
Vlad Zahorodnii
77bf51c3b5 effects/overview: Drop "blur background" option
The blur effect is used to improve the contrast. The option was added
thinking "why not? it might be useful." This was perhaps a mistake and
it should have been added with a clear valid usecase in mind.

CCBUG: 457495
2023-02-07 19:36:20 +00:00
Vlad Zahorodnii
a3748b8e48 effects: Drop EffectWindow::(un)referencePreviousWindowPixmap 2023-02-07 18:10:52 +02:00
Vlad Zahorodnii
89283c4cc6 effects: Drop support for effect proxy'ing
It's not used by any effect. We use other means to share functionality
between effects now.
2023-02-07 18:10:52 +02:00
Vlad Zahorodnii
66837f7cce effects: Remove deprecated feature enums 2023-02-07 18:10:52 +02:00
Vlad Zahorodnii
909e10dace effects: Drop PAINT_DISABLED_BY_TAB_GROUP 2023-02-07 18:10:52 +02:00
Vlad Zahorodnii
65f4313e04 effects: Drop EffectWindow::geometry 2023-02-07 18:10:52 +02:00
Vlad Zahorodnii
4f44c28032 effects: Drop EffectWindow::isCurrentTab 2023-02-07 18:10:52 +02:00
Vlad Zahorodnii
20487c7cda effects: Drop legacy EffectsHandler::desktopChanged overloads 2023-02-07 18:10:52 +02:00
Vlad Zahorodnii
522e2ee7c4 effects: Drop EffectWindow::desktop() 2023-02-07 18:10:52 +02:00
Vlad Zahorodnii
9371fc8ae9 scripting: Prefer VirtualDesktop objects 2023-02-07 15:41:43 +02:00
Vlad Zahorodnii
0218a8f3ba scripting: Drop deprecated apis 2023-02-07 14:07:03 +02:00
Ismael Asensio
e504c58286 kcms/tabbox: Manage shortcuts via ShortcutSettings
Leverage the standardized ShortcutSettings config object to handle
the shortcuts config for the tabox (setting default values, reading
and saving to KGlobalAccel, etc).

This way, we can remove the extra methods in TabBoxConfigForm and
improve separation between UI and logic.

It also fixes the actions getting stored untranslated when saving
from the KCM (until next restart of KWin)
2023-02-07 07:59:25 +00:00
Vlad Zahorodnii
d6315bebd0 scripting: Flatten source tree
It makes source tree tidier.
2023-02-07 07:08:04 +00:00
Ismael Asensio
9c2224acb3 kcms/tabbox: Expose shortcuts as a KConfigSkeleton
Provide a new KConfigSkeleton (ShortcutSettings) so that the
KCModuleData knows if any of the shortcuts is non-default.

This improves the UX by showing an "orange dot" in system
settings when just a shorcut has been changed.

We also need to implement a new specific KConfigSkeletonItem
(`ShortcutItem`) that uses KGlobalAccel to retrieve and store
the shortcuts, instead of storing them in a config file.
2023-02-06 21:01:35 +01:00
Vlad Zahorodnii
600de787d8 scripting: Drop org.kde.kwin 2.x
It's superseded by 3.x.
2023-02-06 18:59:10 +00:00
David Edmundson
466f2fe8ba Launch xwayland on demand
This installs a socket notifier onto our xwayland socket, when a user
connects we launch xwayland. The client then connections once kwin has
established itself as the compositor.

For a full desktop plasma session this patch effectively does nothing
too useful as we still start kcminit and make xrdb calls on startup
which in turn will launch X, but for the same reason this patch should
be harmless now as we're still processing the xrdb calls before any
clients will connect.
2023-02-06 16:24:01 +00:00
Ismael Asensio
8507e602f3 kcms/tabbox: Handle config directly within the configuration form
By passing the config object to the TabBoxConfigurationForm, we
can handle it directly instead of bouncing information from and
back between the forms and the KCM main class.

Now the user changes in the UI translate to the config objects,
which can directly provide `isSaveNeeded()` and `isDefaults()` info.

This allows to simplify the logic on both classes, reducing the
coupling between them and minimizing the number of exposed public
methods and some boilerplate.
2023-02-06 14:01:14 +01:00
Vlad Zahorodnii
9807c83929 {x11,wayland}: Fix restoring fullscreen windows
If the window has been originally on another output, make sure that the
window will be properly put back on it.

This logic seem to originate from 7d67380205,
but it's not necessary anymore because geometry restore will be updated
if the window is moved to another output by the user.

BUG: 465358
2023-02-06 11:33:35 +00:00
Ismael Asensio
a648553be0 kcms/tabbox: Improve model initialization
- Add the switchers to the model directly, instead of using
  temporal lists and a second loop over them
- Use the same model for main and alternative forms

This makes this code a little more clear and efficient
2023-02-06 09:11:34 +00:00
Joshua Goins
21dbf0f413 kcm/decoration: Change it to the new frameless style
This now matches other modern KCMs and removes the weird titlebar tab view,
moving it to a separate page.
2023-02-05 02:22:14 +00:00
l10n daemon script
71c9b7db87 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-02-04 02:09:27 +00:00
Vlad Zahorodnii
271de0ccc6 scripts: Port some scripts to org.kde.kwin v3 qml api 2023-02-03 17:22:16 +00:00
Vlad Zahorodnii
d619e0b4d5 tiling: Ensure padding is writen to config
Root tile's padding is not monitored so new padding values are never written to the config.

BUG: 464863
2023-02-03 16:40:41 +00:00
Marco Martin
1332d7de2c Also cancel translucencyMoveResizeAnimations
When a window goes away it was stoppping translucencyWindowTypeAnimation
and translucencyInactiveAnimation but any translucencyMoveResizeAnimations

was hanging there forever, causing ghost windows

BUG:439332
2023-02-03 16:23:05 +01:00
Vlad Zahorodnii
37c4a4536e scene: Sync Window::readyForPainting() to window item visibility
If a window is made ready for painting with some delay, the item won't
schedule an update. To fix that, sync the item visibility state with
Window::readyForPainting(). When the item visibility changes, a repaint
will be scheduled.

BUG: 464955
2023-02-03 14:09:27 +00:00
Vlad Zahorodnii
2babccda04 x11: Fix maximize animation
Window::maximize() used to be split in two halves:

- generic Window::setMaximized() and Window::maximize()
- protocol-specific Window::changeMaximize()

Window::changeMaximize() used to block all geometry updates and
Window::maximize() emit "maximize mode changed" signals. With that,
frameGeometryChanged came always before clientMaximizedStateChanged.

After merging Window::changeMaximize() and Window::maximize(), the order
of the signals has been reversed because of RAII. Unblock geometry
updates explicitly to preserve the old behavior.

BUG: 465157
2023-02-03 10:33:42 +02:00
Xaver Hugl
1746af4b02 gesture: use the global direction enums 2023-02-02 16:21:36 +00:00
Xaver Hugl
a9334cb9c6 unify touchpad gesture APIs
There don't need to be separate functions for real time and not real time
2023-02-02 16:21:36 +00:00
Vlad Zahorodnii
e5901070cc Drop support for _KDE_NET_WM_TEMPORARY_RULES
It's an obscure feature, which perhaps not worth putting an effort to
make it work on wayland and x11.
2023-02-02 15:34:24 +00:00
Vlad Zahorodnii
d18f7efac2 scripting: Remove deprecated properties in WindowThumbnailItem 2023-02-02 15:13:38 +00:00
Vlad Zahorodnii
5de308792f effects/fade: Remove hidden FadeWindows option
Enable/disable the fade effect in system settings instead.
2023-02-02 14:48:12 +00:00
Vlad Zahorodnii
c1fb295cd6 plugins/nightcolor: Drop legacy shortcut with localized key 2023-02-02 13:51:28 +00:00
Vlad Zahorodnii
78e0ff6b97 Avoid resizing the tile until interactive resize is actually active
It's confusing, but handleInteractiveMoveResize() can be called while
interactive move resize is inactive.
2023-02-02 12:07:13 +00:00
Xaver Hugl
6f1b36d3b4 plugins/screencast: make context current later, don't make it current twice 2023-02-02 10:18:38 +00:00
Xaver Hugl
abd59be232 x11window: round framegeometry on moveresize
If this isn't done, the size check in SurfacePixmapX11::create will stop
the window from being updated

BUG: 460934
BUG: 458778
2023-02-02 09:14:50 +00:00
Xaver Hugl
3c059d3a24 scene/surfaceitem_x11: improve size mismatch warning 2023-02-02 09:14:50 +00:00
David Edmundson
c0fa51c784 effects/tileseditor: Drop unused imports
Imports come at a big cost when they're unused.
Also we shouldn't be importing WindowView from a different plugin. If
that effect is disabled it meant tileseditor would fail to load.

BUG: 464970
2023-02-02 09:13:23 +00:00
Natalie Clarius
1b29c5668c point aurorae documentation to develop.kde.org 2023-01-31 00:33:18 +00:00
Xaver Hugl
0ef7d20fde plugins/screencast: fix window recording while no scene rendering happens
This affects direct scanout and when the window isn't triggering desktop
repaints otherwise, like being minimized or on a different virtual desktop
or activity
2023-01-30 14:25:00 +01:00
David Edmundson
99f433641a Add missing includes for KF6
This fixes includes that were implicitly brought in with KF5
2023-01-28 09:16:14 +00:00
David Edmundson
4474f4098a Xwayland: Disable input spy on xwayland teardown
Otherwise we have a potential crash when we send keys to the
non-existent xwayland wayland connection
2023-01-27 16:46:45 +00:00
ivan tkachenko
53591cdfb2
kcms/decoration: Deduplicate event proxying code 2023-01-26 23:04:40 +03:00
ivan tkachenko
5bd748c674
kcms/decoration: Use correct mask to specify that item accepts all buttons 2023-01-26 23:04:40 +03:00
ivan tkachenko
70a2aa644f
kcms/decoration: Don't setFiltersChildMouseEvents when filter method is not overridden 2023-01-26 23:04:40 +03:00
ivan tkachenko
01a7bd14ec
kcms/decoration: Remove suspicious C-style const cast 2023-01-26 23:04:38 +03:00
Vlad Zahorodnii
020b633591 backends/x11: Check whether X server supports shared pixmaps 2023-01-26 15:02:05 +02:00
Vlad Zahorodnii
81b05bd87e Avoid mistriggering quick tiling when using custom tiling
If user has chosen custom tiling, ensure that quick tiling state is
reset.

BUG: 464810
2023-01-26 12:01:46 +02:00
ivan tkachenko
63ff64b094 kcms/decoration: Fix double click behavior over the thumbnail
KDecoration.Decoration eats all the events for the sake of keeping
an illusion of buttons being like the real ones. I didn't find any sane
way to completely turn off event filtering on that level, so instead
let's fix this MouseArea, which is a workaround, but a decent one.

AFAIK this is the last KCM in Plasma to properly support "double-click
to save" behavior. There might be others though: watch out for event
filters inside thumbnail.
2023-01-25 18:05:15 +00:00
Fushan Wen
476509b0fd
effects/windowview: set translation domain for the placeholder text 2023-01-25 21:44:52 +08:00
Vlad Zahorodnii
716f386226 tabbox: Remove unused ShowDelay option
BUG: 420291
2023-01-25 13:48:27 +02:00
Vlad Zahorodnii
671cbcda6b Refactor some custom tiling code
Use already specified global position rather than look it up from the
cursor, which is quite input device specific.
2023-01-25 11:04:44 +02:00
Vlad Zahorodnii
76a039332d Make interactive custom tiling more robust to suboptimal tile configs
If the root tile node contains only one child node, but the child node
has its own children, kwin will fail to show an outline when the user
interactively tiles the window.

On the other hand, there is no reason to have this child count check.
For what it's worth, it also prevents tiling the window if the output
only has one tile, which is odd, but a valid usecase.

BUG: 464379
2023-01-25 07:32:11 +00:00
l10n daemon script
7bd4bd0bf7 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-01-25 02:03:19 +00:00
Aleix Pol
43586d673a tiles: Don't generate the client area until we know it's necessary 2023-01-24 17:58:26 +01:00
Aleix Pol
96962941e3 QuickTile: register enum to metaobject/QDebug 2023-01-24 17:58:26 +01:00
Xaver Hugl
11327da292 xdgshellwindow: ignore window position rules placing windows outside of all screens
BUG: 464047
2023-01-24 14:40:53 +00:00
Xaver Hugl
9f2ed2083c window: restore special window states on moveresize cancel
BUG: 464507
2023-01-24 11:39:02 +00:00
David Redondo
d6b75907cc Data control: Resend selection when not following through with request
Normal event flow is from a client view is
-> wlr_data_control_device.set_selection
wlr_data_control_device.selection
or
wlr_data_control_source.cancelled
wlr_data_control_device.selection
However when the race mentioned in the comment happens the client
sees
-> wlr_data_control_device.set_selection
wlr_data_control_device.selection
wlr_data_control_source_cancelled
Which can confuse client state thinking the clipboard didn't change
as it associates the selection event with its own request. Resend
the selection event in this case to tell the client the correct
selection.
BUG:464509
FIXED-IN:5.27
2023-01-24 09:35:20 +00:00
Vlad Zahorodnii
e6d2a19857 backends/drm: Fix custom mode generation
maxSizeRefreshRate is uninitialized.

BUG: 463619
2023-01-24 07:15:10 +00:00