Don't bind ShellClient::acceptsFocus to whether the window is shown

Summary:
A not shown window may accept focus (e.g. when minimized). Given that
the condition was wrong and broke when making minimized windows not
shown.

This change takes the idea of not passing focus to a closing or unmapped
window directly into acceptsFocus. Which also means that this condition
now works for xdg_shell windows.

BUG: 368673

Reviewers: #kwin, #plasma_on_wayland, bshah

Subscribers: plasma-devel, kwin

Tags: #plasma_on_wayland, #kwin

Differential Revision: https://phabricator.kde.org/D2745
icc-effect-5.14.5
Martin Gräßlin 2016-09-12 10:05:49 +02:00
parent 156bf258e9
commit 9b32615ab4
2 changed files with 9 additions and 4 deletions

View File

@ -276,9 +276,7 @@ void TestShellClient::testMinimizeActiveWindow()
workspace()->slotWindowMinimize();
QVERIFY(!c->isShown(true));
QEXPECT_FAIL("wlShell", "BUG 368673", Continue);
QVERIFY(c->wantsInput());
QEXPECT_FAIL("wlShell", "BUG 368673", Continue);
QVERIFY(c->wantsTabFocus());
QVERIFY(!c->isActive());
QVERIFY(!workspace()->activeClient());

View File

@ -807,12 +807,19 @@ bool ShellClient::acceptsFocus() const
return false;
}
}
if (m_closing) {
// a closing window does not accept focus
return false;
}
if (m_unmapped) {
// an unmapped window does not accept focus
return false;
}
if (m_shellSurface) {
if (m_shellSurface->isPopup()) {
return false;
}
// if the window is not visible it doesn't get input
return m_shellSurface->acceptsKeyboardFocus() && isShown(true);
return m_shellSurface->acceptsKeyboardFocus();
}
if (m_xdgShellSurface) {
// TODO: proper