Commit graph

27187 commits

Author SHA1 Message Date
Vlad Zahorodnii
8256f8e14c Reorder some function calls in X11Window::updateServerGeometry()
The main motivation is to improve code aesthetics. The relative
order in which various window properties are configured shouldn't
matter.
2024-06-14 12:37:56 +00:00
Vlad Zahorodnii
5d03d58dc1 Drop X11Window::resizeDecoration()
We can call updateInputWindow() directly.
2024-06-14 12:37:56 +00:00
Vlad Zahorodnii
a7c4175099 Don't call triggerDecorationRepaint() when resizing an X11Window
Wayland windows have no such code path and they have been good so far.
If the borders change, KDecoration will trigger a repaint.
2024-06-14 12:37:56 +00:00
Vlad Zahorodnii
fef2bfb93f plugins/nightlight: Make Night Light more robust to QTimer firing slightly earlier
Currently, resetSlowUpdateTimers() will start a timer that will pass
m_next.first as the current time to resetSlowUpdateTimers(). This kind
of works, but there are more code paths where updateTransitionTimings()
can be called.

This change hardens updateTransitionTimings() against the current time
being very close to the start of the next transition by introducing a
time fudge factor.

If we are currently 1 second away from the start of the next transition,
then it is assumed that that transition has been reached, and we need
to calculate the timings of a transition after that.
2024-06-14 12:06:34 +00:00
Vlad Zahorodnii
ad98069618 Make Window::closeWindow() noop if the window is already closed
The surface handle can be dropped by that time. Also, there is no point
to ask the client to close the window again if it's already closed.
2024-06-14 11:16:41 +00:00
Vlad Zahorodnii
ec86640f44 plugins/nightlight: Tidy temperature lerp code
This change simplifies the color temperature interpolation code by doing
the following:

- compute a progress value so 0 corresponds to target1, i.e. the beginning
  of the transition, and 1 corresponds to target2, the end of the
  transition, instead of vice versa
- and use std::lerp() function

Rounding to a multiple of ten is not needed, it is for nicer digits in
the applet, but if the applet really cares about it, it could perform
such rounding on its own. In the night light manager, it's better to avoid
rounding the interpolated values because that can result in the final
temperature getting outside of the [target1, target2] interval.
2024-06-14 07:22:03 +00:00
David Redondo
c2141dc4ef Also wake up screens on tablet interactions
BUG:451359
FIXED-IN:6.1.1
2024-06-14 06:54:42 +00:00
Vlad Zahorodnii
f46174453d plugins/nightlight: Ensure the target temperature remains within reasonable bounds
The interpolated temperature can get out of the bounds of [target1, target2]
if the current time is slightly earlier than m_prev.first, which can be
unexpected. This change addresses that by adding a relevant guard.
2024-06-13 15:58:01 +03:00
Vlad Zahorodnii
21a45c2700 Avoid sending X11 sync request if new logical geometry doesn't change the device geometry
There are two mechanisms to throttle ConfigureNotify events during
interactive resize:

- either using XSync
- or by a dummy QTimer

The QTimer approach is pretty straightforward: the wm configures the
window, blocks the interactive resize operation and arms a timer to
unblock it some time later in the future.

With the xsync approach, the wm sends an xsync request, makes a
call to XConfigureWindow(), and blocks interactive resize until
the xsync request is acked by the client. When the client sees the
ConfigureNotify event, it is going to repaint and ack the xsync request.
When the xsync request is acked, the wm will apply new geometry and
unblock interactive resize.

After the scaling changes, the logical geometry can have some fractional
part, which gets rounded when configuring the X windows. Due to that,
it's possible to encounter the case where the logical geometry changes,
but the native/device geometry does not due to std::round(). In that
case, the wm should not send an xsync request because the client won't
ack it because the device geometry has not changed.

BUG: 488223
2024-06-13 08:34:30 +00:00
Vlad Zahorodnii
4db2742e96 autotests: Add a missing mock definition of Xcb::toXNative(QRectF) 2024-06-13 08:34:30 +00:00
l10n daemon script
312f88872b GIT_SILENT Sync po/docbooks with svn 2024-06-13 01:25:35 +00:00
Xaver Hugl
ad6700dd88 workspace: initialize the output config store earlier
It needs to be created before the outputs are queried the first time,
as that uses the config store
2024-06-12 19:32:36 +02:00
Xaver Hugl
6543ab3caa workspace: only load output configs on Wayland
They don't need to be loaded, or on exit saved again on X11

BUG: 488229
2024-06-12 17:46:31 +02:00
Vlad Zahorodnii
c2ca1cc33d wayland: Remove unnecessary wl_surface resource check
The lifetime of SurfaceInterface matches the lifetime of the corresponding
wl_resource.
2024-06-12 13:43:00 +00:00
Vlad Zahorodnii
8fb3348600 wayland: Clean up action matching connections when the target dnd surface dies 2024-06-12 13:43:00 +00:00
Vlad Zahorodnii
877d220bfe wayland: Fix a crash in dnd action matching
In order to match dnd actions, we need both a data source and a data
offer. If the preferred actions of either change, then a new dnd
must be chosen.

The code that sets up the monitoring of the preferred actions of the
data offer sets the correct receiver context object (data source).

But the code that sets up the monitoring of the preferred actions of
the data source uses the data source as the receiver context object,
however we would like to break the matchOffers connection when either
the data source or the data offer is destroyed.
2024-06-12 13:43:00 +00:00
Vlad Zahorodnii
f37c15b0a2 Enable drkonqi
Enable dr konqi for kwin so sentry crash reports are more useful.
2024-06-12 12:45:47 +00:00
Vlad Zahorodnii
6be238e622 Fix registering touch screen edge actions after the screen edge has been reserved
After the screen edge is reserved, the touch screen gestures will be
registered or unregistered when the Edge::activatesForTouchGesture()
signal is emitted.

On the other hand, Edge::reserveTouch() lacks code to emit that signal,
which results in touch screen gesture not working if the same screen
edge is reserved both for pointer and touch input.

BUG: 451349
2024-06-12 12:33:52 +00:00
Xaver Hugl
35a7e30952 backends/drm: set scaling mode to full aspect with generated modes on internal displays
While the scaling mode has caused some issues with external displays, we've had several
reports that using "unify outputs" has caused the internal display to no longer show
anything, as it changes to an unsupported mode. This sets the scaling mode so that the
driver handles the scaling internally, instead of leaving it up to the panel, and it only
does so on internal displays with generated modes, to minimize the risk of further breakage.

BUG: 488111
2024-06-12 11:50:57 +00:00
Jie Liu
131c5399b3 x11window: enable startSystemMove/Resize which is triggered from touch events
Signed-off-by: Jie Liu <liujie01@kylinos.cn>
2024-06-12 02:19:02 +00:00
l10n daemon script
d65bc400e9 GIT_SILENT Sync po/docbooks with svn 2024-06-12 01:31:01 +00:00
l10n daemon script
1c3b4cc548 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-06-12 01:19:49 +00:00
David Edmundson
d6360cc4ce effects: Drop morphing popups effect
The effect does not work very well for two main reasons:
Some clients will make a new popup rather than move an existing one, so
whether it does anything is highly unpredictable as a user.

Popups can be of massively different sizes with different amounts of
text. This means the text in the smaller popup gets resized which
doesn't look like a natural in-between state of the two popups. This
defeats the objective of looking smoother.

On top of that, it's rather glitchy.
This effect was purely visual, no functionality changes.

BUG: 473411
BUG: 466638
BUG: 416048
BUG: 461501
BUG: 466637
2024-06-11 19:58:50 +00:00
Vlad Zahorodnii
64b02cf464 plugins/screencast: Preserve modifier order
The SPA_FORMAT_VIDEO_modifier property has the following format:

    preferred_value,alternative1,alternative2,...

The preferred value is usually the same as the first alternative value.
It can also happen that the modifier list the compositor has supplied is
not good either and it contains duplicate entries, specifically
`DRM_FORMAT_MOD_INVALID` to indicate that modifier-less buffers are
supported.

In order to deal with that, the screencast plugin removes the
duplicates by sorting the modifier list and then using std::unique().

That is not good, there is no written rule that the order of the
modifiers passed to the graphics buffer allocator matters but it
typically does, some drivers in mesa assume that the modifiers are
sorted in the preference order. The graphics buffer allocator might be
also very lazy and just look at the first supplied modifier instead of
wisely choosing the best modifier.

This change makes the ScreenCastStream remove the duplicate modifiers
in a more conservative fashion preserving the relative order of the
modifiers. It also removes an extra `{DRM_FORMAT_MOD_INVALID}` because
this kind of thing should be dictated by the render backend.
2024-06-11 10:39:19 +03:00
l10n daemon script
6c69f0a4d1 GIT_SILENT Sync po/docbooks with svn 2024-06-11 01:32:20 +00:00
Aleix Pol Gonzalez
f9b9149ba4 plugins/showfps: Allow showfps to work without kirigami and quickcharts
showfps is a handy plugin when deploying to a new platform because it
will render something that says "I am here".
Since both kirigami and quickcharts are quite high level, we add a
variant that just depends on QtQuick and shows the fps which is what we
promise anyway.

Signed-off-by: Victoria Fischer <victoria.fischer@mbition.io>
2024-06-10 17:32:28 +02:00
Aleix Pol Gonzalez
b202ecf711 aaaa 2024-06-10 17:32:28 +02:00
Aleix Pol Gonzalez
3c857a3375 scripting: Do not crash when calling workspace.clientArea() without an output
Just set a default one, one way less a script can crash kwin.

Signed-off-by: Victoria Fischer <victoria.fischer@mbition.io>
2024-06-10 17:23:43 +02:00
Aleix Pol Gonzalez
68d1e2f42a wayland: Log an entry when an unsupported buffer was submitted
It's fine to be conservative about what kind of buffers we support, but
failing silently only makes it hard on such cases.

Signed-off-by: Victoria Fischer <victoria.fischer@mbition.io>
2024-06-10 17:23:43 +02:00
Aleix Pol Gonzalez
70231f2431 backends/drm: Complain when we are issuing an invalid drm property
The alternative is silent failures and KWin rendering nothing. The
kernel will only be telling us that something went wrong which makes it
hard to debug.

Signed-off-by: Victoria Fischer <victoria.fischer@mbition.io>
2024-06-10 17:23:42 +02:00
Vlad Zahorodnii
cd2d5b07d5 Prevent potentially adding closed windows to the attention chain
CCBUG: 486693
2024-06-10 16:21:16 +03:00
Vlad Zahorodnii
cfbee55c2a wayland: Initialize xdg-toplevel size hints to 0,0
QSize() initializes the width and the height to -1x-1 by default.
2024-06-10 15:29:49 +03:00
Vlad Zahorodnii
61332caa20 wayland: Fix one dimensional size constraints
QSize::isEmpty() will return true if either dimension is 0. On the other
hand, given the current language in the spec, it seems like the client
is allowed to set size constraints per dimension.

BUG: 488260
2024-06-10 15:29:49 +03:00
Xaver Hugl
0c5ee47892 core/renderbackend: check for the renderloop being deleted
Output frames can outlive the output they were created for, so the render loop
might also be deleted by the time the output frame is destroyed or presented

BUG: 487701
2024-06-10 13:46:33 +02:00
David Edmundson
4b58f6c207 wayland: Drop unused global from interface blacklist
This was deleted when we added pipewire support
2024-06-10 07:46:33 +00:00
l10n daemon script
57d8bd6856 GIT_SILENT Sync po/docbooks with svn 2024-06-10 01:43:24 +00:00
l10n daemon script
57f862eb4d GIT_SILENT Sync po/docbooks with svn 2024-06-09 01:27:11 +00:00
l10n daemon script
fa5b3e920b GIT_SILENT Sync po/docbooks with svn 2024-06-08 01:31:30 +00:00
l10n daemon script
cfca23f9b3 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-06-08 01:20:05 +00:00
Xaver Hugl
65b4968c80 remove the HideUtilityWindowsForInactive option
It caused bugs and doesn't seem to work anymore, with no complaints about it
not working or an obvious reason for it to exist, so it almost certainly
isn't needed at all.
2024-06-07 21:14:41 +02:00
Xaver Hugl
a6a85466cd workspace: restrict showing windows because HideUtilityWindowsForInactive=false to actual utility windows
BUG: 413549
2024-06-07 21:05:52 +02:00
Xaver Hugl
f6540283d5 placement: if a window can't be placed maximized, place it centered
It's closer to what maximized does than minimal overlapping

BUG: 438572
2024-06-07 19:59:49 +02:00
Vlad Zahorodnii
83502e29a9 plugins/nightlight: Fix current time changing after updating transitions
When the slow update timer fires, it's going to pass m_next.first as the
current time in order to calculate the next transition timings. After
the timings have been calculated, the slow update timer will be started
with an interval of "todayNow.msecsTo(m_next.first)". Since todayNow
is a reference to m_next.first, the time diff will be 0, which will
throw off the night light manager. To fix that, make a copy of m_next.first
and then pass the copy as the current date time to resetSlowUpdateTimers().

BUG: 487901
2024-06-07 15:16:48 +00:00
Xaver Hugl
b2ff465490 workspace,window: don't elevate windows during electric border tiling / maximizing
Instead, move the outline below the window, so that the visual order of things stays the
same. This also fixes a visual glitch, where the outline is visible for a moment after
maximization, and is above the no-longer-elevated window

BUG: 436466
BUG: 354741
2024-06-07 14:46:10 +02:00
Xaver Hugl
bffae41983 remove Workspace::sendWindowToOutput
It just calls Window::sendToOutput...

BUG: 329980
2024-06-07 00:44:24 +00:00
Xaver Hugl
3bf97e87e5 backends/x11/standalone: add a nullptr check in the vblank handler
It can be called without a previous presentation in some cases

BUG: 488112
2024-06-06 16:54:16 +00:00
Xaver Hugl
0cd6f5cd06 window: use the correct output when electric border quick tiling
BUG: 487844
2024-06-06 16:54:16 +02:00
l10n daemon script
6166060f9b GIT_SILENT Sync po/docbooks with svn 2024-06-06 01:30:28 +00:00
Xaver Hugl
76739f1f2f core/renderloop: don't do triple buffering with vrr or tearing
While in theory it could be useful with both, I'm not sure that it makes sense
in practice, and the current triple buffering logic doesn't support it.

BUG: 487605
2024-06-05 19:24:09 +00:00
Vlad Zahorodnii
54473f03ba Re-enable hardware cursor on intel devices
My recent testing has shown that screen freezes when moving the cursor
cannot be observed anymore. Maybe the issue has been fixed upstream by
some unrelated change. Either way, let's re-enable the hardware cursor
to gather some feedback.
2024-06-05 18:08:51 +00:00