forked from quickshell/quickshell
core/proxywindow: improve QsWindowAttached robustness
Can now track window parent window changes. Added tests.
This commit is contained in:
parent
539692bc11
commit
b6a79fe99c
7 changed files with 145 additions and 36 deletions
|
@ -5,3 +5,4 @@ function (qs_test name)
|
|||
endfunction()
|
||||
|
||||
qs_test(popupwindow popupwindow.cpp)
|
||||
qs_test(windowattached windowattached.cpp)
|
||||
|
|
73
src/window/test/windowattached.cpp
Normal file
73
src/window/test/windowattached.cpp
Normal file
|
@ -0,0 +1,73 @@
|
|||
#include "windowattached.hpp"
|
||||
|
||||
#include <qobject.h>
|
||||
#include <qquickitem.h>
|
||||
#include <qsignalspy.h>
|
||||
#include <qtest.h>
|
||||
#include <qtestcase.h>
|
||||
|
||||
#include "../proxywindow.hpp"
|
||||
#include "../windowinterface.hpp"
|
||||
|
||||
void TestWindowAttachment::attachedAfterReload() {
|
||||
auto window = ProxyWindowBase();
|
||||
auto item = QQuickItem();
|
||||
item.setParentItem(window.contentItem());
|
||||
window.reload(nullptr);
|
||||
|
||||
auto* attached = WindowInterface::qmlAttachedProperties(&item);
|
||||
QCOMPARE_NE(attached, nullptr);
|
||||
QCOMPARE(attached->window(), &window);
|
||||
}
|
||||
|
||||
void TestWindowAttachment::attachedBeforeReload() {
|
||||
auto window = ProxyWindowBase();
|
||||
auto item = QQuickItem();
|
||||
item.setParentItem(window.contentItem());
|
||||
|
||||
auto* attached = WindowInterface::qmlAttachedProperties(&item);
|
||||
QCOMPARE_NE(attached, nullptr);
|
||||
QCOMPARE(attached->window(), nullptr);
|
||||
|
||||
auto spy = QSignalSpy(attached, &QsWindowAttached::windowChanged);
|
||||
window.reload(nullptr);
|
||||
|
||||
QCOMPARE(attached->window(), &window);
|
||||
QCOMPARE(spy.length(), 1);
|
||||
}
|
||||
|
||||
void TestWindowAttachment::owningWindowChanged() {
|
||||
auto window1 = ProxyWindowBase();
|
||||
auto window2 = ProxyWindowBase();
|
||||
window1.reload(nullptr);
|
||||
window2.reload(nullptr);
|
||||
|
||||
auto item = QQuickItem();
|
||||
item.setParentItem(window1.contentItem());
|
||||
|
||||
auto* attached = WindowInterface::qmlAttachedProperties(&item);
|
||||
QCOMPARE_NE(attached, nullptr);
|
||||
QCOMPARE(attached->window(), &window1);
|
||||
|
||||
auto spy = QSignalSpy(attached, &QsWindowAttached::windowChanged);
|
||||
item.setParentItem(window2.contentItem());
|
||||
QCOMPARE(attached->window(), &window2);
|
||||
// setParentItem changes the parent to nullptr before the new window.
|
||||
QCOMPARE(spy.length(), 2);
|
||||
}
|
||||
|
||||
void TestWindowAttachment::nonItemParents() {
|
||||
auto window = ProxyWindowBase();
|
||||
|
||||
auto item = QQuickItem();
|
||||
item.setParentItem(window.contentItem());
|
||||
auto object = QObject(&item);
|
||||
|
||||
window.reload(nullptr);
|
||||
|
||||
auto* attached = WindowInterface::qmlAttachedProperties(&object);
|
||||
QCOMPARE_NE(attached, nullptr);
|
||||
QCOMPARE(attached->window(), &window);
|
||||
}
|
||||
|
||||
QTEST_MAIN(TestWindowAttachment);
|
14
src/window/test/windowattached.hpp
Normal file
14
src/window/test/windowattached.hpp
Normal file
|
@ -0,0 +1,14 @@
|
|||
#pragma once
|
||||
|
||||
#include <qobject.h>
|
||||
#include <qtmetamacros.h>
|
||||
|
||||
class TestWindowAttachment: public QObject {
|
||||
Q_OBJECT;
|
||||
|
||||
private slots:
|
||||
static void attachedAfterReload();
|
||||
static void attachedBeforeReload();
|
||||
static void owningWindowChanged();
|
||||
static void nonItemParents();
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue