aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin')
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro35
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine.json3
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp366
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h122
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/main.cpp52
5 files changed, 578 insertions, 0 deletions
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro
new file mode 100644
index 00000000..064c7642
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro
@@ -0,0 +1,35 @@
+include(../../lthemeengine.pri)
+
+TEMPLATE = lib
+TARGET = lthemeengine
+CONFIG += plugin
+
+greaterThan(QT_MINOR_VERSION, 7) {
+ QT += gui-private theme_support-private
+} else {
+ QT += gui-private platformsupport-private
+}
+
+!contains(DEFINES, QT_NO_DBUS):greaterThan(QT_MINOR_VERSION, 5) {
+ QT += dbus
+}
+
+SOURCES += \
+ main.cpp \
+ lthemeengineplatformtheme.cpp \
+ ../lthemeengine/lthemeengine.cpp
+
+!equals (DISABLE_WIDGETS,1) {
+ QT += widgets
+}
+
+OTHER_FILES += lthemeengine.json
+
+INCLUDEPATH += ../
+
+HEADERS += \
+ lthemeengineplatformtheme.h \
+ ../lthemeengine/lthemeengine.h
+
+target.path = $$PLUGINDIR/platformthemes
+INSTALLS += target
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine.json b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine.json
new file mode 100644
index 00000000..433d4a88
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "lthemeengine" ]
+}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp
new file mode 100644
index 00000000..02f6a10f
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp
@@ -0,0 +1,366 @@
+/*
+ * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <QVariant>
+#include <QSettings>
+#include <QGuiApplication>
+#include <QScreen>
+#include <QFont>
+#include <QPalette>
+#include <QTimer>
+#include <QIcon>
+#include <QRegExp>
+#ifdef QT_WIDGETS_LIB
+#include <QStyle>
+#include <QStyleFactory>
+#include <QApplication>
+#include <QWidget>
+#endif
+#include <QFile>
+#include <QFileSystemWatcher>
+
+#include <lthemeengine/lthemeengine.h>
+#include "lthemeengineplatformtheme.h"
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS)
+#include <private/qdbusmenubar_p.h>
+#endif
+#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
+#include <QDBusArgument>
+#include <private/qdbustrayicon_p.h>
+#endif
+
+
+
+Q_LOGGING_CATEGORY(llthemeengine, "lthemeengine")
+
+//QT_QPA_PLATFORMTHEME=lthemeengine
+
+lthemeenginePlatformTheme::lthemeenginePlatformTheme()
+{
+ if(QGuiApplication::desktopSettingsAware())
+ {
+ readSettings();
+ QMetaObject::invokeMethod(this, "applySettings", Qt::QueuedConnection);
+#ifdef QT_WIDGETS_LIB
+ QMetaObject::invokeMethod(this, "createFSWatcher", Qt::QueuedConnection);
+#endif
+ QGuiApplication::setFont(m_generalFont);
+ }
+ qCDebug(llthemeengine) << "using lthemeengine plugin";
+#ifdef QT_WIDGETS_LIB
+ if(!QStyleFactory::keys().contains("lthemeengine-style"))
+ qCCritical(llthemeengine) << "unable to find lthemeengine proxy style";
+#endif
+}
+
+lthemeenginePlatformTheme::~lthemeenginePlatformTheme()
+{
+ if(m_customPalette)
+ delete m_customPalette;
+}
+
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS)
+QPlatformMenuBar *lthemeenginePlatformTheme::createPlatformMenuBar() const
+{
+ if(m_checkDBusGlobalMenu)
+ {
+ QDBusConnection conn = QDBusConnection::sessionBus();
+ m_dbusGlobalMenuAvailable = conn.interface()->isServiceRegistered("com.canonical.AppMenu.Registrar");
+ qCDebug(llthemeengine) << "D-Bus global menu:" << (m_dbusGlobalMenuAvailable ? "yes" : "no");
+ }
+ return (m_dbusGlobalMenuAvailable ? new QDBusMenuBar() : nullptr);
+}
+#endif
+
+#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
+QPlatformSystemTrayIcon *lthemeenginePlatformTheme::createPlatformSystemTrayIcon() const
+{
+ if(m_checkDBusTray)
+ {
+ QDBusMenuConnection conn;
+ m_dbusTrayAvailable = conn.isStatusNotifierHostRegistered();
+ m_checkDBusTray = false;
+ qCDebug(llthemeengine) << "D-Bus system tray:" << (m_dbusTrayAvailable ? "yes" : "no");
+ }
+ return (m_dbusTrayAvailable ? new QDBusTrayIcon() : nullptr);
+}
+#endif
+
+const QPalette *lthemeenginePlatformTheme::palette(QPlatformTheme::Palette type) const
+{
+ Q_UNUSED(type);
+ return (m_usePalette ? m_customPalette : nullptr);
+}
+
+const QFont *lthemeenginePlatformTheme::font(QPlatformTheme::Font type) const
+{
+ if(type == QPlatformTheme::FixedFont)
+ return &m_fixedFont;
+ return &m_generalFont;
+}
+
+QVariant lthemeenginePlatformTheme::themeHint(QPlatformTheme::ThemeHint hint) const
+{
+ switch (hint)
+ {
+ case QPlatformTheme::CursorFlashTime:
+ return m_cursorFlashTime;
+ case MouseDoubleClickInterval:
+ return m_doubleClickInterval;
+ case QPlatformTheme::ToolButtonStyle:
+ return m_toolButtonStyle;
+ case QPlatformTheme::SystemIconThemeName:
+ return m_iconTheme;
+ case QPlatformTheme::StyleNames:
+ return QStringList() << "lthemeengine-style";
+ case QPlatformTheme::IconThemeSearchPaths:
+ return lthemeengine::iconPaths();
+ case DialogButtonBoxLayout:
+ return m_buttonBoxLayout;
+ case QPlatformTheme::UiEffects:
+ return m_uiEffects;
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
+ case QPlatformTheme::WheelScrollLines:
+ return m_wheelScrollLines;
+#endif
+ default:
+ return QPlatformTheme::themeHint(hint);
+ }
+}
+
+void lthemeenginePlatformTheme::applySettings()
+{
+ if(!QGuiApplication::desktopSettingsAware())
+ return;
+
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0))
+ if(!m_update)
+ {
+ //do not override application palette
+ if(QCoreApplication::testAttribute(Qt::AA_SetPalette))
+ {
+ m_usePalette = false;
+ qCDebug(llthemeengine) << "palette support is disabled";
+ }
+ }
+#endif
+
+#ifdef QT_WIDGETS_LIB
+ if(hasWidgets())
+ {
+ qApp->setFont(m_generalFont);
+
+ //Qt 5.6 or higher should be use themeHint function on application startup.
+ //So, there is no need to call this function first time.
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
+ if(m_update)
+ qApp->setWheelScrollLines(m_wheelScrollLines);
+#else
+ qApp->setWheelScrollLines(m_wheelScrollLines);
+#endif
+
+ if(m_update && qApp->style()->objectName() == "lthemeengine-style") //ignore application style
+ qApp->setStyle("lthemeengine-style"); //recreate style object
+
+ if(m_update && m_usePalette)
+ {
+ if(m_customPalette)
+ qApp->setPalette(*m_customPalette);
+ else
+ qApp->setPalette(qApp->style()->standardPalette());
+ }
+
+ //do not override application style
+ if(m_prevStyleSheet == qApp->styleSheet())
+ qApp->setStyleSheet(m_userStyleSheet);
+ else
+ qCDebug(llthemeengine) << "custom style sheet is disabled";
+ m_prevStyleSheet = m_userStyleSheet;
+ }
+#endif
+ QGuiApplication::setFont(m_generalFont); //apply font
+ QIcon::setThemeName(m_iconTheme); //apply icons
+ if(m_customPalette && m_usePalette)
+ QGuiApplication::setPalette(*m_customPalette); //apply palette
+
+#ifdef QT_WIDGETS_LIB
+ if(hasWidgets())
+ {
+ foreach (QWidget *w, qApp->allWidgets())
+ {
+ QEvent e(QEvent::ThemeChange);
+ QApplication::sendEvent(w, &e);
+ }
+ }
+#endif
+
+ if(!m_update)
+ m_update = true;
+}
+
+#ifdef QT_WIDGETS_LIB
+void lthemeenginePlatformTheme::createFSWatcher()
+{
+ QFileSystemWatcher *watcher = new QFileSystemWatcher(this);
+ watcher->addPath(lthemeengine::configPath());
+
+ QTimer *timer = new QTimer(this);
+ timer->setSingleShot(true);
+ timer->setInterval(3000);
+ connect(watcher, SIGNAL(directoryChanged(QString)), timer, SLOT(start()));
+ connect(timer, SIGNAL(timeout()), SLOT(updateSettings()));
+}
+
+void lthemeenginePlatformTheme::updateSettings()
+{
+ qCDebug(llthemeengine) << "updating settings..";
+ readSettings();
+ applySettings();
+}
+#endif
+
+void lthemeenginePlatformTheme::readSettings()
+{
+ if(m_customPalette)
+ {
+ delete m_customPalette;
+ m_customPalette = 0;
+ }
+
+ QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
+
+ settings.beginGroup("Appearance");
+ m_style = settings.value("style", "Fusion").toString();
+ if(settings.value("custom_palette", false).toBool())
+ {
+ QString schemePath = settings.value("color_scheme_path").toString();
+ m_customPalette = new QPalette(loadColorScheme(schemePath));
+ }
+ m_iconTheme = settings.value("icon_theme").toString();
+ settings.endGroup();
+
+ settings.beginGroup("Fonts");
+ m_generalFont = settings.value("general", QPlatformTheme::font(QPlatformTheme::SystemFont)).value<QFont>();
+ m_fixedFont = settings.value("fixed", QPlatformTheme::font(QPlatformTheme::FixedFont)).value<QFont>();
+ settings.endGroup();
+
+ settings.beginGroup("Interface");
+ m_doubleClickInterval = QPlatformTheme::themeHint(QPlatformTheme::MouseDoubleClickInterval).toInt();
+ m_doubleClickInterval = settings.value("double_click_interval", m_doubleClickInterval).toInt();
+ m_cursorFlashTime = QPlatformTheme::themeHint(QPlatformTheme::CursorFlashTime).toInt();
+ m_cursorFlashTime = settings.value("cursor_flash_time", m_cursorFlashTime).toInt();
+ m_buttonBoxLayout = QPlatformTheme::themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt();
+ m_buttonBoxLayout = settings.value("buttonbox_layout", m_buttonBoxLayout).toInt();
+ QCoreApplication::setAttribute(Qt::AA_DontShowIconsInMenus, !settings.value("menus_have_icons", true).toBool());
+ m_toolButtonStyle = settings.value("toolbutton_style", Qt::ToolButtonFollowStyle).toInt();
+ m_wheelScrollLines = settings.value("wheel_scroll_lines", 3).toInt();
+
+ //load effects
+ m_uiEffects = QPlatformTheme::themeHint(QPlatformTheme::UiEffects).toInt();
+ if(settings.childKeys().contains("gui_effects"))
+ {
+ QStringList effectList = settings.value("gui_effects").toStringList();
+ m_uiEffects = 0;
+ if(effectList.contains("General"))
+ m_uiEffects |= QPlatformTheme::GeneralUiEffect;
+ if(effectList.contains("AnimateMenu"))
+ m_uiEffects |= QPlatformTheme::AnimateMenuUiEffect;
+ if(effectList.contains("FadeMenu"))
+ m_uiEffects |= QPlatformTheme::FadeMenuUiEffect;
+ if(effectList.contains("AnimateCombo"))
+ m_uiEffects |= QPlatformTheme::AnimateComboUiEffect;
+ if(effectList.contains("AnimateTooltip"))
+ m_uiEffects |= QPlatformTheme::AnimateTooltipUiEffect;
+ if(effectList.contains("FadeTooltip"))
+ m_uiEffects |= QPlatformTheme::FadeTooltipUiEffect;
+ if(effectList.contains("AnimateToolBox"))
+ m_uiEffects |= QPlatformTheme::AnimateToolBoxUiEffect;
+ }
+
+ //load style sheets
+#ifdef QT_WIDGETS_LIB
+ QStringList qssPaths = settings.value("stylesheets").toStringList();
+ m_userStyleSheet = loadStyleSheets(qssPaths);
+#endif
+ settings.endGroup();
+}
+
+#ifdef QT_WIDGETS_LIB
+bool lthemeenginePlatformTheme::hasWidgets()
+{
+ return qobject_cast<QApplication *> (qApp) != nullptr;
+}
+#endif
+
+QString lthemeenginePlatformTheme::loadStyleSheets(const QStringList &paths)
+{
+ QString content;
+ foreach (QString path, paths)
+ {
+ if(!QFile::exists(path))
+ continue;
+
+ QFile file(path);
+ file.open(QIODevice::ReadOnly);
+ content.append(file.readAll());
+ }
+ QRegExp regExp("//.*(\\n|$)");
+ regExp.setMinimal(true);
+ content.remove(regExp);
+ return content;
+}
+
+QPalette lthemeenginePlatformTheme::loadColorScheme(const QString &filePath)
+{
+ QPalette customPalette;
+ QSettings settings(filePath, QSettings::IniFormat);
+ settings.beginGroup("ColorScheme");
+ QStringList activeColors = settings.value("active_colors").toStringList();
+ QStringList inactiveColors = settings.value("inactive_colors").toStringList();
+ QStringList disabledColors = settings.value("disabled_colors").toStringList();
+ settings.endGroup();
+
+ if(activeColors.count() == QPalette::NColorRoles &&
+ inactiveColors.count() == QPalette::NColorRoles &&
+ disabledColors.count() == QPalette::NColorRoles)
+ {
+ for (int i = 0; i < QPalette::NColorRoles; i++)
+ {
+ QPalette::ColorRole role = QPalette::ColorRole(i);
+ customPalette.setColor(QPalette::Active, role, QColor(activeColors.at(i)));
+ customPalette.setColor(QPalette::Inactive, role, QColor(inactiveColors.at(i)));
+ customPalette.setColor(QPalette::Disabled, role, QColor(disabledColors.at(i)));
+ }
+ }
+ else
+ {
+ customPalette = *QPlatformTheme::palette(SystemPalette); //load fallback palette
+ }
+
+ return customPalette;
+}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h
new file mode 100644
index 00000000..3996b451
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LTHEMEENGINEPLATFORMTHEME_H
+#define LTHEMEENGINEPLATFORMTHEME_H
+
+#include <qpa/qplatformtheme.h>
+#include <QObject>
+#include <QFont>
+#include <QPalette>
+#include <QLoggingCategory>
+
+#if (QT_VERSION < QT_VERSION_CHECK(5, 5, 0))
+#ifndef QT_NO_SYSTEMTRAYICON
+#define QT_NO_SYSTEMTRAYICON
+#endif
+#endif
+
+class QPalette;
+#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
+class QPlatformSystemTrayIcon;
+#endif
+
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS)
+class QPlatformMenuBar;
+#endif
+
+class lthemeenginePlatformTheme : public QObject, public QPlatformTheme
+{
+ Q_OBJECT
+public:
+ lthemeenginePlatformTheme();
+
+ virtual ~lthemeenginePlatformTheme();
+
+
+ //virtual QPlatformMenuItem* createPlatformMenuItem() const;
+ //virtual QPlatformMenu* createPlatformMenu() const;
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS)
+ virtual QPlatformMenuBar* createPlatformMenuBar() const;
+#endif
+ //virtual void showPlatformMenuBar() {}
+ //virtual bool usePlatformNativeDialog(DialogType type) const;
+ //virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;
+#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
+ virtual QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const;
+#endif
+ virtual const QPalette *palette(Palette type = SystemPalette) const;
+ virtual const QFont *font(Font type = SystemFont) const;
+ virtual QVariant themeHint(ThemeHint hint) const;
+ //virtual QPixmap standardPixmap(StandardPixmap sp, const QSizeF &size) const;
+ //virtual QPixmap fileIconPixmap(const QFileInfo &fileInfo, const QSizeF &size,
+ // QPlatformTheme::IconOptions iconOptions = 0) const;
+
+ //virtual QIconEngine *createIconEngine(const QString &iconName) const;
+ //virtual QList<QKeySequence> keyBindings(QKeySequence::StandardKey key) const;
+ //virtual QString standardButtonText(int button) const;
+
+private slots:
+ void applySettings();
+#ifdef QT_WIDGETS_LIB
+ void createFSWatcher();
+ void updateSettings();
+#endif
+
+private:
+ void readSettings();
+#ifdef QT_WIDGETS_LIB
+ bool hasWidgets();
+#endif
+ QString loadStyleSheets(const QStringList &paths);
+ QPalette loadColorScheme(const QString &filePath);
+ QString m_style, m_iconTheme, m_userStyleSheet, m_prevStyleSheet;
+ QPalette *m_customPalette = nullptr;
+ QFont m_generalFont, m_fixedFont;
+ int m_doubleClickInterval;
+ int m_cursorFlashTime;
+ int m_uiEffects;
+ int m_buttonBoxLayout;
+ bool m_update = false;
+ bool m_usePalette = true;
+ int m_toolButtonStyle = Qt::ToolButtonFollowStyle;
+ int m_wheelScrollLines = 3;
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) && !defined(QT_NO_DBUS)
+ mutable bool m_dbusGlobalMenuAvailable = false;
+ mutable bool m_checkDBusGlobalMenu = true;
+#endif
+#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
+ mutable bool m_dbusTrayAvailable = false;
+ mutable bool m_checkDBusTray = true;
+#endif
+
+};
+
+Q_DECLARE_LOGGING_CATEGORY(llthemeengine)
+
+#endif // LTHEMEENGINEPLATFORMTHEME_H
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/main.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/main.cpp
new file mode 100644
index 00000000..37798f70
--- /dev/null
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/main.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <qpa/qplatformthemeplugin.h>
+#include "lthemeengineplatformtheme.h"
+
+QT_BEGIN_NAMESPACE
+
+class lthemeenginePlatformThemePlugin: public QPlatformThemePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformThemeFactoryInterface.5.1" FILE "lthemeengine.json")
+public:
+ QPlatformTheme *create(const QString &key, const QStringList &params);
+};
+
+QPlatformTheme *lthemeenginePlatformThemePlugin::create(const QString &key, const QStringList &params)
+{
+ Q_UNUSED(params);
+ if (key.toLower() == "lthemeengine")
+ return new lthemeenginePlatformTheme();
+ return NULL;
+}
+
+QT_END_NAMESPACE
+
+#include "main.moc"
bgstack15