diff --git a/lib_source/ribbontheme.cpp b/lib_source/ribbontheme.cpp index d39cc42..4cc841a 100644 --- a/lib_source/ribbontheme.cpp +++ b/lib_source/ribbontheme.cpp @@ -23,8 +23,14 @@ RibbonTheme::RibbonTheme() } RibbonTheme* RibbonTheme::instance(){ - static RibbonTheme instance; - return &instance; + static QMutex mutex; + QMutexLocker locker(&mutex); + + static RibbonTheme *singleton = nullptr; + if (!singleton) { + singleton = new RibbonTheme(); + } + return singleton; } bool RibbonTheme::eventFilter(QObject *obj, QEvent *event) diff --git a/lib_source/ribbontheme.h b/lib_source/ribbontheme.h index eef3b48..e1f32dd 100644 --- a/lib_source/ribbontheme.h +++ b/lib_source/ribbontheme.h @@ -10,16 +10,18 @@ class RibbonTheme : public QQuickItem QML_ELEMENT QML_SINGLETON QML_NAMED_ELEMENT(RibbonTheme) + Q_DISABLE_COPY(RibbonTheme) Q_PROPERTY(bool dark_mode READ dark_mode() NOTIFY dark_modeChanged FINAL) Q_PROPERTY_RW(RibbonThemeType::ThemeMode,theme_mode) Q_PROPERTY_RW(bool,modern_style) public: - RibbonTheme(); + static RibbonTheme* create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return instance();} static RibbonTheme* instance(); Q_SIGNAL void dark_modeChanged(); bool dark_mode(); private: + RibbonTheme(); bool eventFilter(QObject *obj, QEvent *event); RibbonThemeType::ThemeMode current_theme(); RibbonThemeType::ThemeMode _system_theme_mode; diff --git a/lib_source/ribbonui.cpp b/lib_source/ribbonui.cpp index edd5617..7f28dfd 100644 --- a/lib_source/ribbonui.cpp +++ b/lib_source/ribbonui.cpp @@ -1,5 +1,5 @@ #include "ribbonui.h" - +#include #define STR(x) #x #define JOIN(a,b,c,d) STR(a.b.c.d) #define VER_JOIN(x) JOIN x @@ -11,6 +11,12 @@ RibbonUI::RibbonUI(QQuickItem *parent) } RibbonUI* RibbonUI::instance(){ - static RibbonUI instance; - return &instance; + static QMutex mutex; + QMutexLocker locker(&mutex); + + static RibbonUI *singleton = nullptr; + if (!singleton) { + singleton = new RibbonUI(); + } + return singleton; } diff --git a/lib_source/ribbonui.h b/lib_source/ribbonui.h index dbc0d5b..c0a9dd6 100644 --- a/lib_source/ribbonui.h +++ b/lib_source/ribbonui.h @@ -10,10 +10,13 @@ class RibbonUI : public QQuickItem QML_ELEMENT QML_SINGLETON QML_NAMED_ELEMENT(RibbonUI) + Q_DISABLE_COPY(RibbonUI) Q_PROPERTY_RW(QString, version) public: - explicit RibbonUI(QQuickItem *parent = nullptr); static RibbonUI* instance(); + static RibbonUI* create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return instance();} +private: + explicit RibbonUI(QQuickItem *parent = nullptr); }; #endif // RIBBONUI_H