Add approach for handling darkmode changes dynamically
This seems to work for plain QCC2 parts but unfortunately doesn't help with Kirigami (see added not). Hence this is disabled for now.
This commit is contained in:
parent
ba9a6e26de
commit
21a16e0be0
|
@ -1,6 +1,8 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Templates 2.0 as T2
|
||||
import QtQuick.Controls 2.1 as Controls
|
||||
import QtQuick.Controls.Material
|
||||
import QtQuick.Controls.Universal
|
||||
import QtQuick.Layouts 1.2
|
||||
import org.kde.kirigami 2.4 as Kirigami
|
||||
|
||||
|
@ -9,6 +11,9 @@ Kirigami.ApplicationWindow {
|
|||
property var fieldsPage: undefined
|
||||
property var lastEntriesPage: undefined
|
||||
|
||||
Material.theme: nativeInterface.darkModeEnabled ? Material.Dark : Material.Light
|
||||
Universal.theme: nativeInterface.darkModeEnabled ? Universal.Dark : Universal.Light
|
||||
|
||||
globalDrawer: Kirigami.GlobalDrawer {
|
||||
id: leftMenu
|
||||
property bool showNoPasswordWarning: nativeInterface.fileOpen
|
||||
|
|
|
@ -50,7 +50,8 @@ Controller::Controller(QSettings &settings, const QString &filePath, QObject *pa
|
|||
#else
|
||||
false
|
||||
#endif
|
||||
)
|
||||
)
|
||||
, m_darkModeEnabled(false)
|
||||
{
|
||||
m_fieldModel.setPasswordVisibility(PasswordVisibility::Never);
|
||||
m_entryFilterModel.setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
|
|
|
@ -44,6 +44,7 @@ class Controller : public QObject {
|
|||
Q_PROPERTY(QUndoStack *undoStack READ undoStack NOTIFY undoStackChanged)
|
||||
Q_PROPERTY(QString undoText READ undoText NOTIFY undoTextChanged)
|
||||
Q_PROPERTY(QString redoText READ redoText NOTIFY redoTextChanged)
|
||||
Q_PROPERTY(bool darkModeEnabled READ isDarkModeEnabled WRITE setDarkModeEnabled NOTIFY darkModeEnabledChanged)
|
||||
|
||||
public:
|
||||
explicit Controller(QSettings &settings, const QString &filePath = QString(), QObject *parent = nullptr);
|
||||
|
@ -86,6 +87,8 @@ public:
|
|||
QString undoText() const;
|
||||
QString redoText() const;
|
||||
Io::PasswordFileSaveFlags prepareSaving();
|
||||
bool isDarkModeEnabled() const;
|
||||
void setDarkModeEnabled(bool darkModeEnabled);
|
||||
|
||||
public Q_SLOTS:
|
||||
void init();
|
||||
|
@ -129,6 +132,7 @@ Q_SIGNALS:
|
|||
void undoTextChanged(const QString &undoText);
|
||||
void redoTextChanged(const QString &redoText);
|
||||
void settingsError(const QString &errorMessage);
|
||||
void darkModeEnabledChanged(bool darkModeEnabled);
|
||||
|
||||
private Q_SLOTS:
|
||||
void handleEntriesRemoved(const QModelIndex &parentIndex, int first, int last);
|
||||
|
@ -160,6 +164,7 @@ private:
|
|||
bool m_fileModified;
|
||||
bool m_useNativeFileDialog;
|
||||
bool m_filterAsDialog;
|
||||
bool m_darkModeEnabled;
|
||||
};
|
||||
|
||||
inline QModelIndex Controller::ensureSourceEntryIndex(const QModelIndex &entryIndexMaybeFromFilterModel) const
|
||||
|
@ -345,6 +350,18 @@ inline QString Controller::redoText() const
|
|||
#endif
|
||||
}
|
||||
|
||||
inline bool Controller::isDarkModeEnabled() const
|
||||
{
|
||||
return m_darkModeEnabled;
|
||||
}
|
||||
|
||||
inline void Controller::setDarkModeEnabled(bool darkModeEnabled)
|
||||
{
|
||||
if (darkModeEnabled != m_darkModeEnabled) {
|
||||
emit darkModeEnabledChanged(m_darkModeEnabled = darkModeEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
inline void Controller::undo()
|
||||
{
|
||||
#ifdef PASSWORD_MANAGER_UNDO_SUPPORT
|
||||
|
|
|
@ -61,8 +61,24 @@ int runQuickGui(int argc, char *argv[], const QtConfigArguments &qtConfigArgs, c
|
|||
}
|
||||
qtSettings.restore(*settings);
|
||||
qtSettings.apply();
|
||||
#if defined(Q_OS_ANDROID)
|
||||
qtSettings.reapplyDefaultIconTheme(QtUtilities::isDarkModeEnabled().value_or(false));
|
||||
|
||||
// create controller and handle dark mode
|
||||
// note: Not handling changes of the dark mode setting dynamically yet because it does not work with Kirigami.
|
||||
// It looks like Kirigami does not follow the QCC2 theme (the Material.theme/Material.theme settings) but
|
||||
// instead uses colors based on the initial palette. Not sure how to toggle Kirigami's palette in accordance
|
||||
// with the QCC2 theme. Hence this code is disabled via APPLY_COLOR_SCHEME_DYNAMICALLY for now.
|
||||
auto controller = Controller(*settings, file);
|
||||
#ifdef APPLY_COLOR_SCHEME_DYNAMICALLY
|
||||
QtUtilities::onDarkModeChanged(
|
||||
[&qtSettings, &controller](bool isDarkModeEnabled) {
|
||||
qtSettings.reapplyDefaultIconTheme(isDarkModeEnabled);
|
||||
controller.setDarkModeEnabled(isDarkModeEnabled);
|
||||
},
|
||||
&controller);
|
||||
#else
|
||||
const auto isDarkModeEnabled = QtUtilities::isDarkModeEnabled().value_or(false);
|
||||
qtSettings.reapplyDefaultIconTheme(isDarkModeEnabled);
|
||||
controller.setDarkModeEnabled(isDarkModeEnabled);
|
||||
#endif
|
||||
|
||||
// apply settings specified via command line args
|
||||
|
@ -71,7 +87,6 @@ int runQuickGui(int argc, char *argv[], const QtConfigArguments &qtConfigArgs, c
|
|||
LOAD_QT_TRANSLATIONS;
|
||||
|
||||
// init QML engine
|
||||
auto controller = Controller(*settings, file);
|
||||
auto engine = QQmlApplicationEngine();
|
||||
#ifdef Q_OS_ANDROID
|
||||
registerControllerForAndroid(&controller);
|
||||
|
|
Loading…
Reference in New Issue