core/proxywindow: improve QsWindowAttached robustness

Can now track window parent window changes.
Added tests.
This commit is contained in:
outfoxxed 2024-11-27 23:30:38 -08:00
parent 539692bc11
commit b6a79fe99c
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
7 changed files with 145 additions and 36 deletions

View file

@ -145,26 +145,36 @@ class ProxyWindowAttached: public QsWindowAttached {
Q_OBJECT;
public:
explicit ProxyWindowAttached(ProxyWindowBase* window)
: QsWindowAttached(window)
, mWindow(window) {}
explicit ProxyWindowAttached(QQuickItem* parent);
[[nodiscard]] QObject* window() const override;
[[nodiscard]] QQuickItem* contentItem() const override;
protected:
void updateWindow() override;
private:
ProxyWindowBase* mWindow;
ProxyWindowBase* mWindow = nullptr;
void setWindow(ProxyWindowBase* window);
};
class ProxiedWindow: public QQuickWindow {
Q_OBJECT;
public:
explicit ProxiedWindow(QWindow* parent = nullptr): QQuickWindow(parent) {}
explicit ProxiedWindow(ProxyWindowBase* proxy, QWindow* parent = nullptr)
: QQuickWindow(parent)
, mProxy(proxy) {}
[[nodiscard]] ProxyWindowBase* proxy() const { return this->mProxy; }
signals:
void exposed();
protected:
void exposeEvent(QExposeEvent* event) override;
private:
ProxyWindowBase* mProxy;
};