- Main.qml: ignore close requests (Alt+F4, task manager), so the window can't be hidden without VisibilityController knowing. - main.cpp: don't quit when the last window closes; KWin only restarts the input method after a crash. - VisibilityController::setEnabled(): when false, the keyboard is hidden regardless of other state; changing it clears show()/hide() overrides. Not wired to KWin's tray toggle yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
96 lines
2.3 KiB
C++
96 lines
2.3 KiB
C++
#include "window/VisibilityController.h"
|
|
|
|
#include <QTest>
|
|
|
|
class TestVisibility : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private Q_SLOTS:
|
|
void followsFieldFocus()
|
|
{
|
|
VisibilityController v;
|
|
v.setFieldActive(true);
|
|
QVERIFY(v.isVisible());
|
|
v.setFieldActive(false);
|
|
QVERIFY(!v.isVisible());
|
|
}
|
|
|
|
void fieldShowsOnlyWhenTheSystemWantsIt()
|
|
{
|
|
VisibilityController v;
|
|
v.setShowOnField(false);
|
|
v.setFieldActive(true);
|
|
QVERIFY(!v.isVisible());
|
|
v.show(); // explicit requests still work
|
|
QVERIFY(v.isVisible());
|
|
v.setShowOnField(true);
|
|
v.setFieldActive(true);
|
|
QVERIFY(v.isVisible());
|
|
}
|
|
|
|
void dismissLastsUntilFocusChanges()
|
|
{
|
|
VisibilityController v;
|
|
v.setFieldActive(true);
|
|
v.hide();
|
|
QVERIFY(!v.isVisible());
|
|
v.setFieldActive(false);
|
|
v.setFieldActive(true);
|
|
QVERIFY(v.isVisible());
|
|
}
|
|
|
|
void dismissEndsWhenAnotherFieldIsFocused()
|
|
{
|
|
VisibilityController v;
|
|
v.setFieldActive(true);
|
|
v.hide();
|
|
v.setFieldActive(true); // activated straight from one field to the next
|
|
QVERIFY(v.isVisible());
|
|
}
|
|
|
|
void alwaysVisibleShowsWithoutField()
|
|
{
|
|
VisibilityController v;
|
|
v.setAlwaysVisible(true);
|
|
QVERIFY(v.isVisible());
|
|
v.hide(); // dismiss key still works...
|
|
QVERIFY(!v.isVisible());
|
|
v.setFieldActive(true); // ...until the focus changes
|
|
v.setFieldActive(false);
|
|
QVERIFY(v.isVisible());
|
|
}
|
|
|
|
void toggleShowsWithoutField()
|
|
{
|
|
VisibilityController v;
|
|
v.toggle();
|
|
QVERIFY(v.isVisible());
|
|
v.toggle();
|
|
QVERIFY(!v.isVisible());
|
|
}
|
|
|
|
void systemToggleGatesEverything()
|
|
{
|
|
VisibilityController v;
|
|
v.setAlwaysVisible(true);
|
|
v.setEnabled(false);
|
|
QVERIFY(!v.isVisible());
|
|
v.show();
|
|
QVERIFY(!v.isVisible());
|
|
v.hide();
|
|
v.setEnabled(true); // turning it back on forgets the dismiss
|
|
QVERIFY(v.isVisible());
|
|
}
|
|
|
|
void standaloneAlwaysVisible()
|
|
{
|
|
VisibilityController v;
|
|
v.setStandalone(true);
|
|
QVERIFY(v.isVisible());
|
|
}
|
|
};
|
|
|
|
QTEST_GUILESS_MAIN(TestVisibility)
|
|
#include "tst_visibility.moc"
|