Restore old behavior of Workspace::clientArea(clientOpt, Toplevel)

When geometry updates are blocked, the output doesn't get updated. This
breaks Workspace::clientArea() overload that takes only the window.

Previously, clientArea() would look up the output where the window is
every time it's called, so the fact that the screen id or AbstractOutput
is unsynchronized with the frame geometry was irrelevant.

This change restores the old behavior as 5.23 is affected by the
output() being out of sync with the frameGeometry(). Specifically, when
kwin starts managing an X11 window, it will block geometry updates,
setup the window, e.g. make it fullscreen, and unblock geometry updates.

Since Workspace::clientArea(clientArea, Toplevel) uses the output(),
X11Client::setFullScreen() will most likely put the X11 window at a
wrong output if it's called inside X11Client::manage().

BUG: 443787
This commit is contained in:
Vlad Zahorodnii 2021-10-15 17:18:43 +03:00
parent 23e5039918
commit 6d5fc9fd30

View file

@ -2361,7 +2361,7 @@ QRect Workspace::clientArea(clientAreaOption opt, const QPoint& p, int desktop)
QRect Workspace::clientArea(clientAreaOption opt, const Toplevel *window) const
{
return clientArea(opt, window, window->output());
return clientArea(opt, window, window->frameGeometry().center());
}
QRect Workspace::clientArea(clientAreaOption opt, const Toplevel *window, const AbstractOutput *output) const