summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--application/MultiMC.cpp19
-rw-r--r--application/MultiMC.h2
-rw-r--r--application/pages/global/MultiMCPage.cpp2
-rw-r--r--application/themes/ITheme.cpp21
-rw-r--r--application/themes/ITheme.h1
-rw-r--r--application/themes/SystemTheme.cpp27
-rw-r--r--application/themes/SystemTheme.h1
7 files changed, 44 insertions, 29 deletions
diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp
index 6c0c4e5e..2f752904 100644
--- a/application/MultiMC.cpp
+++ b/application/MultiMC.cpp
@@ -355,7 +355,7 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv)
connect(this, SIGNAL(aboutToQuit()), SLOT(onExit()));
setIconTheme(settings()->get("IconTheme").toString());
- setApplicationTheme(settings()->get("ApplicationTheme").toString());
+ setApplicationTheme(settings()->get("ApplicationTheme").toString(), true);
initAnalytics();
@@ -868,27 +868,14 @@ void MultiMC::initThemes()
insertTheme(new CustomTheme(darkTheme, "custom"));
}
-void MultiMC::setApplicationTheme(const QString& name)
+void MultiMC::setApplicationTheme(const QString& name, bool initial)
{
auto systemPalette = qApp->palette();
auto themeIter = m_themes.find(name);
if(themeIter != m_themes.end())
{
auto & theme = (*themeIter).second;
- setStyle(QStyleFactory::create(theme->qtTheme()));
- if(theme->hasColorScheme())
- {
- setPalette(theme->colorScheme());
- }
- if(theme->hasStyleSheet())
- {
- setStyleSheet(theme->appStyleSheet());
- }
- else
- {
- setStyleSheet(QString());
- }
- QDir::setSearchPaths("theme", theme->searchPaths());
+ theme->apply(initial);
}
else
{
diff --git a/application/MultiMC.h b/application/MultiMC.h
index 7600a120..98a6d780 100644
--- a/application/MultiMC.h
+++ b/application/MultiMC.h
@@ -87,7 +87,7 @@ public:
std::vector<ITheme *> getValidApplicationThemes();
- void setApplicationTheme(const QString& name);
+ void setApplicationTheme(const QString& name, bool initial);
// DownloadUpdateTask
std::shared_ptr<UpdateChecker> updateChecker()
diff --git a/application/pages/global/MultiMCPage.cpp b/application/pages/global/MultiMCPage.cpp
index 728f2dde..47d79d98 100644
--- a/application/pages/global/MultiMCPage.cpp
+++ b/application/pages/global/MultiMCPage.cpp
@@ -330,7 +330,7 @@ void MultiMCPage::applySettings()
if(originalAppTheme != newAppTheme)
{
s->set("ApplicationTheme", newAppTheme);
- MMC->setApplicationTheme(newAppTheme);
+ MMC->setApplicationTheme(newAppTheme, false);
}
// Console settings
diff --git a/application/themes/ITheme.cpp b/application/themes/ITheme.cpp
index aefcc381..b1cecf57 100644
--- a/application/themes/ITheme.cpp
+++ b/application/themes/ITheme.cpp
@@ -1,5 +1,26 @@
#include "ITheme.h"
#include "rainbow.h"
+#include <QStyleFactory>
+#include <QDir>
+#include "MultiMC.h"
+
+void ITheme::apply(bool)
+{
+ QApplication::setStyle(QStyleFactory::create(qtTheme()));
+ if(hasColorScheme())
+ {
+ QApplication::setPalette(colorScheme());
+ }
+ if(hasStyleSheet())
+ {
+ MMC->setStyleSheet(appStyleSheet());
+ }
+ else
+ {
+ MMC->setStyleSheet(QString());
+ }
+ QDir::setSearchPaths("theme", searchPaths());
+}
QPalette ITheme::fadeInactive(QPalette in, qreal bias, QColor color)
{
diff --git a/application/themes/ITheme.h b/application/themes/ITheme.h
index 0360c445..b75001c2 100644
--- a/application/themes/ITheme.h
+++ b/application/themes/ITheme.h
@@ -8,6 +8,7 @@ class ITheme
{
public:
virtual ~ITheme() {}
+ virtual void apply(bool initial);
virtual QString id() = 0;
virtual QString name() = 0;
virtual bool hasStyleSheet() = 0;
diff --git a/application/themes/SystemTheme.cpp b/application/themes/SystemTheme.cpp
index 1e0146f7..069b0b1b 100644
--- a/application/themes/SystemTheme.cpp
+++ b/application/themes/SystemTheme.cpp
@@ -24,6 +24,16 @@ SystemTheme::SystemTheme()
qWarning() << "System theme not found, defaulted to Fusion";
}
+void SystemTheme::apply(bool initial)
+{
+ // if we are applying the system theme as the first theme, just don't touch anything. it's for the better...
+ if(initial)
+ {
+ return;
+ }
+ ITheme::apply(initial);
+}
+
QString SystemTheme::id()
{
return "system";
@@ -50,14 +60,14 @@ QString SystemTheme::appStyleSheet()
}
double SystemTheme::fadeAmount()
- {
- return 0.5;
- }
+{
+ return 0.5;
+}
QColor SystemTheme::fadeColor()
- {
- return QColor(128,128,128);
- }
+{
+ return QColor(128,128,128);
+}
bool SystemTheme::hasStyleSheet()
{
@@ -66,10 +76,5 @@ bool SystemTheme::hasStyleSheet()
bool SystemTheme::hasColorScheme()
{
- // FIXME: horrible hack to work around Qt's sketchy theming APIs
-#if defined(Q_OS_LINUX)
return true;
-#else
- return false;
-#endif
}
diff --git a/application/themes/SystemTheme.h b/application/themes/SystemTheme.h
index e8034efc..18291b68 100644
--- a/application/themes/SystemTheme.h
+++ b/application/themes/SystemTheme.h
@@ -7,6 +7,7 @@ class SystemTheme: public ITheme
public:
SystemTheme();
virtual ~SystemTheme() {}
+ void apply(bool initial) override;
QString id() override;
QString name() override;