diff --git a/docs/scripting-api.rst b/docs/scripting-api.rst index 3657c336946ee580c029d9b5a19e818b31ba82c2..07185a42525653cf2703ae64d0766b9b3e7f236d 100644 --- a/docs/scripting-api.rst +++ b/docs/scripting-api.rst @@ -1198,6 +1198,16 @@ omitted. Sets clipboard data for menu commands. +.. js:function:: styles() + + List available styles for ``style`` option. + + To change or update style use:: + + .. code-block:: js + + config("style", styleName) + Types ----- diff --git a/src/app/clipboardserver.cpp b/src/app/clipboardserver.cpp index 6c0820f8685f7088a48d2db7af9c60116c3b5803..e6fde889193568768ec89197ce5a5045b994a289 100644 --- a/src/app/clipboardserver.cpp +++ b/src/app/clipboardserver.cpp @@ -50,6 +50,7 @@ #include <QMessageBox> #include <QMimeData> #include <QSessionManager> +#include <QStyleFactory> #include <QTextEdit> #ifdef NO_GLOBAL_SHORTCUTS @@ -655,11 +656,24 @@ void ClipboardServer::loadSettings() m_sharedData->itemFactory->loadItemFactorySettings(&settings); + AppConfig appConfig; + + const QString styleName = appConfig.option<Config::style>(); + if ( !styleName.isEmpty() ) { + log( QString("Style: %1").arg(styleName) ); + QStyle *style = QStyleFactory::create(styleName); + if (style) { + QApplication::setStyle(style); + } else { + const QString styles = QStyleFactory::keys().join(", "); + log( QString("Failed to set style, valid are: %1").arg(styles), LogWarning ); + } + } + settings.beginGroup("Theme"); m_sharedData->theme.loadTheme(settings); settings.endGroup(); - AppConfig appConfig; m_sharedData->editor = appConfig.option<Config::editor>(); m_sharedData->maxItems = appConfig.option<Config::maxitems>(); m_sharedData->textWrap = appConfig.option<Config::text_wrap>(); @@ -685,6 +699,8 @@ void ClipboardServer::loadSettings() startMonitoring(); } + m_updateThemeTimer.stop(); + COPYQ_LOG("Configuration loaded"); } diff --git a/src/common/appconfig.h b/src/common/appconfig.h index 17e99b73708697da056a3619b067f3b620cfdbf9..94c0ec4b0f5de8befa5478ebc06be93378ced7f8 100644 --- a/src/common/appconfig.h +++ b/src/common/appconfig.h @@ -403,6 +403,10 @@ struct window_wait_for_modifiers_released_ms : Config<int> { static Value defaultValue() { return 50; } }; +struct style : Config<QString> { + static QString name() { return "style"; } +}; + } // namespace Config class AppConfig final diff --git a/src/gui/commandcompleterdocumentation.h b/src/gui/commandcompleterdocumentation.h index 54b6572d79f905915957df552061eae2e1623e7f..2e2934fcf36c6f8ce9b4989d8c810f001e4f0caa 100644 --- a/src/gui/commandcompleterdocumentation.h +++ b/src/gui/commandcompleterdocumentation.h @@ -169,6 +169,7 @@ void addDocumentation(AddDocumentationCallback addDocumentation) addDocumentation("showDataNotification", "showDataNotification()", "Show notification for current data."); addDocumentation("hideDataNotification", "hideDataNotification()", "Hide notification for current data."); addDocumentation("setClipboardData", "setClipboardData()", "Sets clipboard data for menu commands."); + addDocumentation("styles", "styles()", "List available styles for `style` option."); addDocumentation("ByteArray", "ByteArray", "Wrapper for QByteArray Qt class."); addDocumentation("File", "File", "Wrapper for QFile Qt class."); addDocumentation("Dir", "Dir", "Wrapper for QDir Qt class."); diff --git a/src/gui/configurationmanager.cpp b/src/gui/configurationmanager.cpp index 32e3907c4c29913616da30ce07d0747f74017590..ca9a90244059f14f1d371f213218ab4c3a305a6b 100644 --- a/src/gui/configurationmanager.cpp +++ b/src/gui/configurationmanager.cpp @@ -344,6 +344,8 @@ void ConfigurationManager::initOptions() bind<Config::window_wait_after_raised_ms>(); bind<Config::window_key_press_time_ms>(); bind<Config::window_wait_for_modifiers_released_ms>(); + + bind<Config::style>(); } template <typename Config, typename Widget> diff --git a/src/scriptable/scriptable.cpp b/src/scriptable/scriptable.cpp index 85cf18be5aaaf37f94a24e37fd2b61f772dd016c..97d0385dac8d5688e9f58c655245c9e1d0f97e59 100644 --- a/src/scriptable/scriptable.cpp +++ b/src/scriptable/scriptable.cpp @@ -2704,6 +2704,11 @@ QJSValue Scriptable::clipboardFormatsToSave() return toScriptValue(formats, this); } +QJSValue Scriptable::styles() +{ + return toScriptValue( m_proxy->styles(), this ); +} + void Scriptable::onExecuteOutput(const QByteArray &output) { m_executeStdoutData.append(output); diff --git a/src/scriptable/scriptable.h b/src/scriptable/scriptable.h index 7516aa7c6d572e841b48c7a2faf4c40f6dfa9da9..f4afe84824c07b70d4a4e5d3d9604db8d3d940a8 100644 --- a/src/scriptable/scriptable.h +++ b/src/scriptable/scriptable.h @@ -388,6 +388,8 @@ public slots: QJSValue clipboardFormatsToSave(); + QJSValue styles(); + signals: void finished(); void dataReceived(const QByteArray &data); diff --git a/src/scriptable/scriptableproxy.cpp b/src/scriptable/scriptableproxy.cpp index d51284160953614a14184e87d8b8590e98e8ff68..c80632734e4f703a10e1259176f59d59d7e7e87f 100644 --- a/src/scriptable/scriptableproxy.cpp +++ b/src/scriptable/scriptableproxy.cpp @@ -79,6 +79,7 @@ #include <QScreen> #include <QShortcut> #include <QSpinBox> +#include <QStyleFactory> #include <QTextEdit> #include <QUrl> @@ -2250,6 +2251,12 @@ bool ScriptableProxy::hasClipboardFormat(const QString &mime, ClipboardMode mode return data && data->hasFormat(mime); } +QStringList ScriptableProxy::styles() +{ + INVOKE(styles, ()); + return QStyleFactory::keys(); +} + ClipboardBrowser *ScriptableProxy::fetchBrowser(const QString &tabName) { if (tabName.isEmpty()) { diff --git a/src/scriptable/scriptableproxy.h b/src/scriptable/scriptableproxy.h index 305ec800de9740d9b1b5e34a8e22c8f189486dbc..c400f9d088e8bb9d7a4ed3e2db17959233b86178 100644 --- a/src/scriptable/scriptableproxy.h +++ b/src/scriptable/scriptableproxy.h @@ -253,6 +253,8 @@ public slots: QByteArray getClipboardData(const QString &mime, ClipboardMode mode); bool hasClipboardFormat(const QString &mime, ClipboardMode mode); + QStringList styles(); + signals: void functionCallFinished(int functionCallId, const QVariant &returnValue); void inputDialogFinished(int dialogId, const NamedValueList &result);