summary refs log tree commit diff
path: root/src/ui
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2021-12-29 08:05:29 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2021-12-29 08:05:29 +0100
commit497c3df50ec2eb0f2c5d1e7cf324c85a7fb90da1 (patch)
tree41e6671b352a9609aedbfd75dd9d16c76332e935 /src/ui
parentCache supported animated image formats (diff)
downloadnheko-497c3df50ec2eb0f2c5d1e7cf324c85a7fb90da1.tar.xz
Prevent copies when querying theme
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/NhekoGlobalObject.cpp38
-rw-r--r--src/ui/Theme.cpp12
-rw-r--r--src/ui/Theme.h4
3 files changed, 37 insertions, 17 deletions
diff --git a/src/ui/NhekoGlobalObject.cpp b/src/ui/NhekoGlobalObject.cpp
index 56c0d9f0..bc578476 100644
--- a/src/ui/NhekoGlobalObject.cpp
+++ b/src/ui/NhekoGlobalObject.cpp
@@ -38,21 +38,41 @@ Nheko::updateUserProfile()
 QPalette
 Nheko::colors() const
 {
-    return Theme::paletteFromTheme(UserSettings::instance()->theme().toStdString());
+    return Theme::paletteFromTheme(UserSettings::instance()->theme());
 }
 
 QPalette
 Nheko::inactiveColors() const
 {
-    auto p = colors();
-    p.setCurrentColorGroup(QPalette::ColorGroup::Inactive);
-    return p;
+    auto theme = UserSettings::instance()->theme();
+    if (theme == QLatin1String("light")) {
+        static QPalette lightInactive = [] {
+            auto lightInactive = Theme::paletteFromTheme(u"light");
+            lightInactive.setCurrentColorGroup(QPalette::ColorGroup::Inactive);
+            return lightInactive;
+        }();
+        return lightInactive;
+    } else if (theme == QLatin1String("dark")) {
+        static QPalette darkInactive = [] {
+            auto darkInactive = Theme::paletteFromTheme(u"dark");
+            darkInactive.setCurrentColorGroup(QPalette::ColorGroup::Inactive);
+            return darkInactive;
+        }();
+        return darkInactive;
+    } else {
+        static QPalette originalInactive = [] {
+            auto originalInactive = Theme::paletteFromTheme(u"system");
+            originalInactive.setCurrentColorGroup(QPalette::ColorGroup::Inactive);
+            return originalInactive;
+        }();
+        return originalInactive;
+    }
 }
 
 Theme
 Nheko::theme() const
 {
-    return Theme(UserSettings::instance()->theme().toStdString());
+    return Theme(UserSettings::instance()->theme());
 }
 
 void
@@ -61,10 +81,10 @@ Nheko::openLink(QString link) const
     QUrl url(link);
     // Open externally if we couldn't handle it internally
     if (!ChatPage::instance()->handleMatrixUri(url)) {
-        const QStringList allowedUrlSchemes = {
-          "http",
-          "https",
-          "mailto",
+        static const QStringList allowedUrlSchemes = {
+          QStringLiteral("http"),
+          QStringLiteral("https"),
+          QStringLiteral("mailto"),
         };
 
         if (allowedUrlSchemes.contains(url.scheme()))
diff --git a/src/ui/Theme.cpp b/src/ui/Theme.cpp
index 6301735e..aa2c59b1 100644
--- a/src/ui/Theme.cpp
+++ b/src/ui/Theme.cpp
@@ -7,11 +7,11 @@
 Q_DECLARE_METATYPE(Theme)
 
 QPalette
-Theme::paletteFromTheme(std::string_view theme)
+Theme::paletteFromTheme(QStringView theme)
 {
     [[maybe_unused]] static auto meta = qRegisterMetaType<Theme>("Theme");
     static QPalette original;
-    if (theme == "light") {
+    if (theme == u"light") {
         static QPalette lightActive = [] {
             QPalette lightActive(
               /*windowText*/ QColor(0x33, 0x33, 0x33),
@@ -33,7 +33,7 @@ Theme::paletteFromTheme(std::string_view theme)
             return lightActive;
         }();
         return lightActive;
-    } else if (theme == "dark") {
+    } else if (theme == u"dark") {
         static QPalette darkActive = [] {
             QPalette darkActive(
               /*windowText*/ QColor(0xca, 0xcc, 0xd1),
@@ -60,16 +60,16 @@ Theme::paletteFromTheme(std::string_view theme)
     }
 }
 
-Theme::Theme(std::string_view theme)
+Theme::Theme(QStringView theme)
 {
     auto p     = paletteFromTheme(theme);
     separator_ = p.mid().color();
-    if (theme == "light") {
+    if (theme == u"light") {
         sidebarBackground_ = QColor(0x23, 0x36, 0x49);
         alternateButton_   = QColor(0xcc, 0xcc, 0xcc);
         red_               = QColor(0xa8, 0x23, 0x53);
         orange_            = QColor(0xfc, 0xbe, 0x05);
-    } else if (theme == "dark") {
+    } else if (theme == u"dark") {
         sidebarBackground_ = QColor(0x2d, 0x31, 0x39);
         alternateButton_   = QColor(0x41, 0x4A, 0x59);
         red_               = QColor(0xa8, 0x23, 0x53);
diff --git a/src/ui/Theme.h b/src/ui/Theme.h
index 4dbe03f9..457faf7b 100644
--- a/src/ui/Theme.h
+++ b/src/ui/Theme.h
@@ -66,8 +66,8 @@ class Theme : public QPalette
     Q_PROPERTY(QColor orange READ orange CONSTANT)
 public:
     Theme() {}
-    explicit Theme(std::string_view theme);
-    static QPalette paletteFromTheme(std::string_view theme);
+    explicit Theme(QStringView theme);
+    static QPalette paletteFromTheme(QStringView theme);
 
     QColor sidebarBackground() const { return sidebarBackground_; }
     QColor alternateButton() const { return alternateButton_; }