From 6419045f0e07a2c45c897e6e5613b71ced02e332 Mon Sep 17 00:00:00 2001 From: Mentalflow <312902918@qq.com> Date: Sat, 20 Apr 2024 21:09:40 +0800 Subject: [PATCH] RibbonWindow: Use an unified set to store sub windows pointers. --- lib_source/qml/RibbonWindow.qml | 13 +++++++++++-- lib_source/ribbonui.h | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib_source/qml/RibbonWindow.qml b/lib_source/qml/RibbonWindow.qml index 5a10de5..d8d9bff 100644 --- a/lib_source/qml/RibbonWindow.qml +++ b/lib_source/qml/RibbonWindow.qml @@ -10,7 +10,6 @@ Window { property alias title_bar: titleBar property alias popup: pop property bool comfirmed_quit: false - property var sub_windows: ({}) visible: false color: { if (FramelessHelper.blurBehindWindowEnabled) { @@ -114,6 +113,7 @@ Window { } function show_window(window_url, args){ + let sub_windows = RibbonUI.windowsSet if (sub_windows.hasOwnProperty(window_url)) { if (args && Object.keys(args).length) @@ -128,15 +128,24 @@ Window { } sub_windows[window_url].raise() sub_windows[window_url].requestActivate() + RibbonUI.windowsSet = sub_windows return } var component = Qt.createComponent(window_url, Component.PreferSynchronous, undefined); if (component.status === Component.Ready) { - var window = component.createObject(undefined, args); + var window = component.createObject(undefined, args) + if (!(window instanceof Window)) + { + console.error("RibbonWindow: Error loading Window: Instance is not Window.") + return + } sub_windows[window_url] = window + RibbonUI.windowsSet = sub_windows window.onClosing.connect(function() { window.destroy() + let sub_windows = RibbonUI.windowsSet delete sub_windows[window_url] + RibbonUI.windowsSet = sub_windows }); window.raise() window.requestActivate() diff --git a/lib_source/ribbonui.h b/lib_source/ribbonui.h index c3b4634..c786aa3 100644 --- a/lib_source/ribbonui.h +++ b/lib_source/ribbonui.h @@ -16,6 +16,7 @@ class RibbonUI : public QQuickItem Q_PROPERTY_R(QString, version) Q_PROPERTY_R(int, qt_version) Q_PROPERTY_R(int, is_win11) + Q_PROPERTY_RW(QVariantMap, windowsSet) public: static RibbonUI* instance(); static RibbonUI* create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return instance();}