core/window: add closed() signal to all window types

This commit is contained in:
outfoxxed 2025-07-15 15:35:48 -07:00
parent 5706c09e6f
commit a2146f6394
Signed by untrusted user: outfoxxed
GPG key ID: 4C88A185FB89301E
4 changed files with 17 additions and 1 deletions

View file

@ -188,7 +188,7 @@ void ProxyWindowBase::connectWindow() {
this->window->setProxy(this);
// clang-format off
QObject::connect(this->window, &QWindow::visibilityChanged, this, &ProxyWindowBase::visibleChanged);
QObject::connect(this->window, &QWindow::visibilityChanged, this, &ProxyWindowBase::onVisibleChanged);
QObject::connect(this->window, &QWindow::xChanged, this, &ProxyWindowBase::xChanged);
QObject::connect(this->window, &QWindow::yChanged, this, &ProxyWindowBase::yChanged);
QObject::connect(this->window, &QWindow::widthChanged, this, &ProxyWindowBase::widthChanged);
@ -226,6 +226,16 @@ void ProxyWindowBase::completeWindow() {
emit this->screenChanged();
}
void ProxyWindowBase::onVisibleChanged() {
if (this->mVisible && !this->window->isVisible()) {
this->mVisible = false;
this->setVisibleDirect(false);
emit this->closed();
}
emit this->visibleChanged();
}
bool ProxyWindowBase::deleteOnInvisible() const { return false; }
QQuickWindow* ProxyWindowBase::backingWindow() const { return this->window; }

View file

@ -141,6 +141,7 @@ public:
[[nodiscard]] QQmlListProperty<QObject> data();
signals:
void closed();
void windowConnected();
void windowDestroyed();
void visibleChanged();
@ -160,6 +161,7 @@ signals:
void polished();
protected slots:
void onVisibleChanged();
virtual void onWidthChanged();
virtual void onHeightChanged();
void onMaskChanged();

View file

@ -133,6 +133,7 @@ QQmlListProperty<QObject> WindowInterface::data() const { return this->proxyWind
void WindowInterface::connectSignals() const {
auto* window = this->proxyWindow();
// clang-format off
QObject::connect(window, &ProxyWindowBase::closed, this, &WindowInterface::closed);
QObject::connect(window, &ProxyWindowBase::windowConnected, this, &WindowInterface::windowConnected);
QObject::connect(window, &ProxyWindowBase::visibleChanged, this, &WindowInterface::visibleChanged);
QObject::connect(window, &ProxyWindowBase::backerVisibilityChanged, this, &WindowInterface::backingWindowVisibleChanged);

View file

@ -236,6 +236,9 @@ public:
static QsWindowAttached* qmlAttachedProperties(QObject* object);
signals:
/// This signal is emitted when the window is closed by the user, the display server,
/// or an error. It is not emitted when @@visible is set to false.
void closed();
void windowConnected();
void visibleChanged();
void backingWindowVisibleChanged();