Workspace::findDesktop() doesn't take into account the current active
output, and instead returns the first top desktop window found in the
stack. This means that the active output may drift and the focus chain
logic can break.
BUG: 493735
BUG: 494332
`m_commits.front()` is a reference to the first item in the m_commits
list. If it's submitted sucessfully, everything will be alright.
If the candidate commit fails, it can be merged with other pending
commits in the m_commits list. It will also invalidate any previously
taken reference to the first item in the m_commits list, which is not
okay for commit->test().
SurfaceInterface implementation details have changed. On the other hand,
it would be great to avoid queued connections because they make code less
predictable.
With the recent Qt changes, the wl_surface is persistent, it's not
destroyed when the window is hidden. That also means that when a new
window is created, it can already have a shadow associated with it
so handle that case.
Apparently some HDR screens only show the minimum luminance if you send them a value of zero,
instead of the minimum luminance they report in the EDID. To work around that, assume the
minimum value of the transfer function instead of what the screen reports as the minimum.
BUG: 494128
Normally, pointer values are in logical units, which get implicitly scaled with the scale of
the screen, so scaling them when scaling Xwayland makes sense. If the pointer moves too fast
for the user with that scaling, they will simply use the libinput pointer acceleration setting
to reduce that speed in a manner that's uniform for all their screens.
However, unaccelerated values are not affected by that setting, and thus they should also not
be affected by the screen's scale. This commit removes that scaling for Xwayland, which matches
SDL's usage of the value in Wayland native mode and brings it in line with user expectations.
BUG: 483067
Amends 6738473f3d.
It's better to check whether Item::childItems() has the same items as
Item::sortedChildItems() first because it gives more context about the
integrity of the lists.
If Item::sortedChildItems() is corrupted but Item::childItems() is fine,
we may miss that important detail because
"aliveWindowItems != sortedWindowItems" comes first.
Otherwise, the following situation can happen
- effect tries to schedule a repaint, which gets ignored because the window has at least 30fps
- the window stops updating
- the effect's last frame is stuck on the screen, until something else triggers a repaint
BUG: 493940
It seems that QMenu expects to receive keyboard focus when it's mapped,
otherwise keyboard input breaks when using pointer input. In either case,
kwin should move keyboard focus immediately rather than do it on demand.
BUG: 465385
We need to use the requested modes, instead of the current ones, otherwise the data can be
outdated because it requires the client to react to what KWin requested first.
This fixes the placement tracker sometimes not restoring quick tiled windows when the quick
tiled state changed during the last placement tracker restore.
Fix "Toggle raise and lower" functionality for a case when there are
windows in higher layers present on the same desktop; a window that is
being acted upon could never be top-most in such a case, which prevented
it from being lowered by "Toggle raise and lower" action.
Checking if a window is top-most now uses unconstrained_stacking_order
list, which reflects user-requested stacking window order, but doesn't
know anything about layers, and that in turn allows any window that user
has raised most recently to be lowered by "Toggle raise and lower" (even
if this window is not actually top-most, because of windows in higher
layers).
BUG: 440540
QStringLiteral will need to allocate a new string and convert the
literal to utf-16. QLatin1StringView is the suggested alternative as it
doesn't need any of that.
Signed-off-by: Victoria Fischer <victoria.fischer@mbition.io>
It's not clear why the code checked for suspend *before* suspend, but handling clock changes
after suspend can be done much more simply, by just resetting after the system woke up
Adjusting the reference luminance depending on the display and its settings is error prone and
causes issue like needing to re-adjust when the display settings change.
This change may require some users to adjust application settings, in order to match the changed
reference luminance