A recent patch made it possible to restart KWin when it crashes, this
opens the possibility to do it for development purposes. So far it could
be done using `killall -9 kwin_wayland`. This patch embraces this
functionality under --replace so it's a bit more documented and under
its own semantics.
It is done by returning the process with 133 exit code and picking that
code specifically as a wish to restart.
Some users reported performances issues after recent compositing
scheduling changes, in particular animations being laggy.
The issue is that sometimes it may take more than a vblank interval for
a buffer swap to complete. Previously, compositing was driven by a
timer and it wasn't synchronized to vblanks. If some frame is running
late, the compositor will just start painting a new frame, i.e. the
screen will be rendered triple buffered.
This change disables the swap events code path on Intel to restore the
previous behavior. Unfortunately, that may add an extra frame of latency.
The swap events code path can be enabled explicitly on Intel by setting
the KWIN_USE_INTEL_SWAP_EVENT environment variable to 1.
On Wayland, the highlight window effect is not guaranteed to work all
the time because it uses the opacity to determine if the animation has
completed.
This change rewrites the highlight window effect using AnimationEffect
API to make it work both on X11 and Wayland. The implementation is based
on how the translucency effect works.
It is reported that the self test produces false positives with some
drivers. At quick glance, there is nothing in particular extremely wrong
with the test. Since not a lot can be done about the test except making
changes in drivers, the severity of the log messages should be lowered
to avoid polluting logs.
Don't neglect the scale of the buffer for windows that we are rendering
on the spot.
Otherwise we will be offering a smaller size to what we are generally
using. More importantly, the ScreencastManager expects the buffers
scaled. This causes glitches when the stream starts otherwise as the
first frame triggers a resize.
CCBUG: 428594
Otherwise we'll be triggering a resize request first thing and never
hear back from the stream until a new frame is requested (which is often
rare when looking at a thumbnail).
BUG: 428594
ColorDevice gets recreated when outputs get removed and added back. This
means the output can be in an unknown state that does not match the
values in ColorDevice. So ensure we update after creating the device to
set it to a known proper state.
As it was pointed out in 6acf35e4cc, it is
better to return raw pointers than qpointers because returning a qpointer
is equivalent to constructing a new one.
Key repeat is the default we had in 5.20, albeit under a different key.
This changes for the key repeat was reverted elsewhere, but we need to
adjust the wayland default.
If user has switched between virtual desktops, only X11 windows will be
taken into account when kwin decides what window has to be activated on
the new desktop.
With this change, Wayland clients will be considered too.
Plasma-workspace currently starts kwin_wayland before afterwards
continuing to spawn the full session, through whatever mechanism.
We ultimately want to just have systemd manage everything all at once,
but this was not realised in time for 5.21 due to a problem of
propogating environment variables.
By removing this file we go to a working state with the option enabled,
and can build on it for the next release.
BUG: 432189
After lowering the message severity for the KWIN_CORE logging category,
it has been found that the Workspace calls the updateDecoration() method
for every mapped popup surface.
Since the XdgPopupClient doesn't implement that method, a warning message
is printed every time a popup is mapped.
Given that XdgToplevelClient updates the decoration when needed, we can
remove the call to the updateDecoration() method.
Warning messages are not the kind of messages that should be ignored,
they indicate that something is off or wrong.
Also, this makes triaging bugs easier as we no longer have to ask people
to run kwin with the QT_LOGGING_RULES environment variable set.
With xdg-toplevel windows, the value of the "no border" property can be
sometimes out of sync with the fact whether the window is decorated. This
may result in Deleted windows being frameless.
In order to address that issue, we need to store the current value of
AbstractClient::isDecorated() during the construction of Deleted.
If all outputs have been disconnected, the screensQueried() signal won't
be emitted and Screens::count() and Screens::size() won't be updated.
The signal is not emitted to ensure that kwin is initialized properly when
there are no outputs.
Unfortunately, this breaks repaint scheduling code as it doesn't take
into account that the Screens class may lie in rare cases.
The drm backend should probably create a placeholder screen in case all
physical outputs have been disconnected, but in meanwhile, let's work
around this issue by porting the scene to the output api in the Platform.
Some applications set their own geometry after start,
which overrides the initial rule settings for placement:
position, size and initial placement.
This happens now more often, after introducing the
"Remember app last position" feature for KXMLgui apps.
There is a mechanism to avoid that, by Forcing the rule property
"Ignore geometry", but it is unknown to many users.
This MR adds a hint when some rule properties might not be
respected by the application, so users can set this property
and hopefully avoid bug reports.
BUG: 428781