[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bkcm-grub2=5D_src=3A_Change_GRUB_values_only_when_sa?=
From:       Konstantinos Smanis <konstantinos.smanis () gmail ! com>
Date:       2011-04-14 10:11:54
Message-ID: 20110414101154.25B68A60B4 () git ! kde ! org
[Download RAW message or body]

Git commit 5572bc0f5344f1e1476048a0b3c1e1b09fd93bb1 by Konstantinos Smanis.
Committed on 14/04/2011 at 10:07.
Pushed by ksmanis into branch 'master'.

Change GRUB values only when saving.

Use dirty bits to check if a GRUB value was modified and needs updating.

M  +226  -125  src/kcm_grub2.cpp     
M  +28   -0    src/kcm_grub2.h     

http://commits.kde.org/kcm-grub2/5572bc0f5344f1e1476048a0b3c1e1b09fd93bb1

diff --git a/src/kcm_grub2.cpp b/src/kcm_grub2.cpp
index 2f873e1..601b11a 100644
--- a/src/kcm_grub2.cpp
+++ b/src/kcm_grub2.cpp
@@ -179,9 +179,195 @@ void KCMGRUB2::load()
     ui.checkBox_uuid->setChecked(m_settings.value("GRUB_DISABLE_LINUX_UUID").compare("true") \
                != 0);
     ui.checkBox_recovery->setChecked(m_settings.value("GRUB_DISABLE_RECOVERY").compare("true") \
                != 0);
     ui.checkBox_osProber->setChecked(m_settings.value("GRUB_DISABLE_OS_PROBER").compare("true") \
!= 0); +
+    m_dirtyBits.fill(0);
+    emit changed(false);
 }
 void KCMGRUB2::save()
 {
+    kDebug() << m_dirtyBits;
+    if (m_dirtyBits.testBit(grubDefaultDirty)) {
+        if (ui.radioButton_default->isChecked()) {
+            //TODO: Use m_entries instead?
+            m_settings["GRUB_DEFAULT"] = ui.comboBox_default->currentText();
+        } else if (ui.radioButton_saved->isChecked()) {
+            m_settings["GRUB_DEFAULT"] = "saved";
+        }
+    }
+    if (m_dirtyBits.testBit(grubSavedefaultDirty)) {
+        if (ui.checkBox_savedefault->isChecked()) {
+            m_settings["GRUB_SAVEDEFAULT"] = "true";
+        } else {
+            m_settings.remove("GRUB_SAVEDEFAULT");
+        }
+    }
+    if (m_dirtyBits.testBit(grubHiddenTimeoutDirty)) {
+        if (ui.checkBox_hiddenTimeout->isChecked()) {
+            m_settings["GRUB_HIDDEN_TIMEOUT"] = \
QString::number(ui.spinBox_hiddenTimeout->value()); +        } else {
+            m_settings.remove("GRUB_HIDDEN_TIMEOUT");
+        }
+    }
+    if (m_dirtyBits.testBit(grubHiddenTimeoutQuietDirty)) {
+        if (ui.checkBox_hiddenTimeoutShowTimer->isChecked()) {
+            m_settings.remove("GRUB_HIDDEN_TIMEOUT_QUIET");
+        } else {
+            m_settings["GRUB_HIDDEN_TIMEOUT_QUIET"] = "true";
+        }
+    }
+    if (m_dirtyBits.testBit(grubTimeoutDirty)) {
+        if (ui.checkBox_timeout->isChecked()) {
+            if (ui.radioButton_timeout0->isChecked()) {
+                m_settings["GRUB_TIMEOUT"] = "0";
+            } else {
+                m_settings["GRUB_TIMEOUT"] = \
QString::number(ui.spinBox_timeout->value()); +            }
+        } else {
+            m_settings["GRUB_TIMEOUT"] = "-1";
+        }
+    }
+    if (m_dirtyBits.testBit(grubGfxmodeDirty)) {
+        QString gfxmode = ui.comboBox_gfxmode->currentText();
+        if (!gfxmode.isEmpty()) {
+            m_settings["GRUB_GFXMODE"] = gfxmode;
+        } else {
+            m_settings.remove("GRUB_GFXMODE");
+        }
+    }
+    if (m_dirtyBits.testBit(grubGfxpayloadLinuxDirty)) {
+        if (ui.radioButton_gfxpayloadText->isChecked()) {
+            m_settings["GRUB_GFXPAYLOAD_LINUX"] = "text";
+        } else if (ui.radioButton_gfxpayloadKeep->isChecked()) {
+            m_settings["GRUB_GFXPAYLOAD_LINUX"] = "keep";
+        } else {
+            QString gfxPayload = ui.comboBox_gfxpayload->currentText();
+            if (!gfxPayload.isEmpty()) {
+                m_settings["GRUB_GFXPAYLOAD_LINUX"] = gfxPayload;
+            } else {
+                m_settings.remove("GRUB_GFXPAYLOAD_LINUX");
+            }
+        }
+    }
+    if (m_dirtyBits.testBit(grubColorNormalDirty)) {
+        QString normalForeground = \
ui.comboBox_normalForeground->itemData(ui.comboBox_normalForeground->currentIndex()).toString();
 +        QString normalBackground = \
ui.comboBox_normalBackground->itemData(ui.comboBox_normalBackground->currentIndex()).toString();
 +        if (normalForeground.compare("light-gray") != 0 || \
normalBackground.compare("black") != 0) { +            \
m_settings["GRUB_COLOR_NORMAL"] = normalForeground + '/' + normalBackground; +        \
} else { +            m_settings.remove("GRUB_COLOR_NORMAL");
+        }
+    }
+    if (m_dirtyBits.testBit(grubColorHighlightDirty)) {
+        QString highlightForeground = \
ui.comboBox_highlightForeground->itemData(ui.comboBox_highlightForeground->currentIndex()).toString();
 +        QString highlightBackground = \
ui.comboBox_highlightBackground->itemData(ui.comboBox_highlightBackground->currentIndex()).toString();
 +        if (highlightForeground.compare("black") != 0 || \
highlightBackground.compare("light-gray") != 0) { +            \
m_settings["GRUB_COLOR_HIGHLIGHT"] = highlightForeground + '/' + highlightBackground; \
+        } else { +            m_settings.remove("GRUB_COLOR_HIGHLIGHT");
+        }
+    }
+    if (m_dirtyBits.testBit(grubBackgroundDirty)) {
+        QString background = ui.kurlrequester_background->url().toLocalFile();
+        if (!background.isEmpty()) {
+            m_settings["GRUB_BACKGROUND"] = background;
+        } else {
+            m_settings.remove("GRUB_BACKGROUND");
+        }
+    }
+    if (m_dirtyBits.testBit(grubThemeDirty)) {
+        QString theme = ui.kurlrequester_theme->url().toLocalFile();
+        if (!theme.isEmpty()) {
+            m_settings["GRUB_THEME"] = theme;
+        } else {
+            m_settings.remove("GRUB_THEME");
+        }
+    }
+    if (m_dirtyBits.testBit(grubCmdlineLinuxDefaultDirty)) {
+        QString cmdlineLinuxDefault = ui.lineEdit_cmdlineDefault->text();
+        if (!cmdlineLinuxDefault.isEmpty()) {
+            m_settings["GRUB_CMDLINE_LINUX_DEFAULT"] = cmdlineLinuxDefault;
+        } else {
+            m_settings.remove("GRUB_CMDLINE_LINUX_DEFAULT");
+        }
+    }
+    if (m_dirtyBits.testBit(grubCmdlineLinuxDirty)) {
+        QString cmdlineLinux = ui.lineEdit_cmdline->text();
+        if (!cmdlineLinux.isEmpty()) {
+            m_settings["GRUB_CMDLINE_LINUX"] = cmdlineLinux;
+        } else {
+            m_settings.remove("GRUB_CMDLINE_LINUX");
+        }
+    }
+    if (m_dirtyBits.testBit(grubTerminalDirty)) {
+        QString terminal = ui.lineEdit_terminal->text();
+        if (!terminal.isEmpty()) {
+            m_settings["GRUB_TERMINAL"] = terminal;
+        } else {
+            m_settings.remove("GRUB_TERMINAL");
+        }
+    }
+    if (m_dirtyBits.testBit(grubTerminalInputDirty)) {
+        QString terminalInput = ui.lineEdit_terminalInput->text();
+        if (!terminalInput.isEmpty()) {
+            m_settings["GRUB_TERMINAL_INPUT"] = terminalInput;
+        } else {
+            m_settings.remove("GRUB_TERMINAL_INPUT");
+        }
+    }
+    if (m_dirtyBits.testBit(grubTerminalOutputDirty)) {
+        QString terminalOutput = ui.lineEdit_terminalOutput->text();
+        if (!terminalOutput.isEmpty()) {
+            m_settings["GRUB_TERMINAL_OUTPUT"] = terminalOutput;
+        } else {
+            m_settings.remove("GRUB_TERMINAL_OUTPUT");
+        }
+    }
+    if (m_dirtyBits.testBit(grubDistributorDirty)) {
+        QString distributor = ui.lineEdit_distributor->text();
+        if (!distributor.isEmpty()) {
+            m_settings["GRUB_DISTRIBUTOR"] = distributor;
+        } else {
+            m_settings.remove("GRUB_DISTRIBUTOR");
+        }
+    }
+    if (m_dirtyBits.testBit(grubSerialCommandDirty)) {
+        QString serialCommand = ui.lineEdit_serial->text();
+        if (!serialCommand.isEmpty()) {
+            m_settings["GRUB_SERIAL_COMMAND"] = serialCommand;
+        } else {
+            m_settings.remove("GRUB_SERIAL_COMMAND");
+        }
+    }
+    if (m_dirtyBits.testBit(grubInitTuneDirty)) {
+        QString initTune = ui.lineEdit_initTune->text();
+        if (!initTune.isEmpty()) {
+            m_settings["GRUB_INIT_TUNE"] = initTune;
+        } else {
+            m_settings.remove("GRUB_INIT_TUNE");
+        }
+    }
+    if (m_dirtyBits.testBit(grubDisableLinuxUuidDirty)) {
+        if (ui.checkBox_uuid->isChecked()) {
+            m_settings.remove("GRUB_DISABLE_LINUX_UUID");
+        } else {
+            m_settings["GRUB_DISABLE_LINUX_UUID"] = "true";
+        }
+    }
+    if (m_dirtyBits.testBit(grubDisableRecoveryDirty)) {
+        if (ui.checkBox_recovery->isChecked()) {
+            m_settings.remove("GRUB_DISABLE_RECOVERY");
+        } else {
+            m_settings["GRUB_DISABLE_RECOVERY"] = "true";
+        }
+    }
+    if (m_dirtyBits.testBit(grubDisableOsProberDirty)) {
+        if (ui.checkBox_osProber->isChecked()) {
+            m_settings.remove("GRUB_DISABLE_OS_PROBER");
+        } else {
+            m_settings["GRUB_DISABLE_OS_PROBER"] = "true";
+        }
+    }
+
     QString config;
     QTextStream stream(&config, QIODevice::WriteOnly | QIODevice::Text);
     for (QHash<QString, QString>::const_iterator it = m_settings.constBegin(); it != \
m_settings.constEnd(); it++) { @@ -203,108 +389,57 @@ void KCMGRUB2::save()
 
 void KCMGRUB2::updateGrubDefault()
 {
-    if (ui.radioButton_default->isChecked()) {
-        m_settings["GRUB_DEFAULT"] = ui.comboBox_default->currentText();
-    } else if (ui.radioButton_saved->isChecked()) {
-        m_settings["GRUB_DEFAULT"] = "saved";
-    }
+    m_dirtyBits.setBit(grubDefaultDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubSavedefault(bool checked)
 {
-    if (checked) {
-        m_settings["GRUB_SAVEDEFAULT"] = "true";
-    } else {
-        m_settings.remove("GRUB_SAVEDEFAULT");
-    }
+    Q_UNUSED(checked)
+    m_dirtyBits.setBit(grubSavedefaultDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubHiddenTimeout()
 {
-    if (ui.checkBox_hiddenTimeout->isChecked()) {
-        m_settings["GRUB_HIDDEN_TIMEOUT"] = \
                QString::number(ui.spinBox_hiddenTimeout->value());
-    } else {
-        m_settings.remove("GRUB_HIDDEN_TIMEOUT");
-    }
+    m_dirtyBits.setBit(grubHiddenTimeoutDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubHiddenTimeoutQuiet(bool checked)
 {
-    if (checked) {
-        m_settings.remove("GRUB_HIDDEN_TIMEOUT_QUIET");
-    } else {
-        m_settings["GRUB_HIDDEN_TIMEOUT_QUIET"] = "true";
-    }
+    Q_UNUSED(checked)
+    m_dirtyBits.setBit(grubHiddenTimeoutQuietDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubTimeout()
 {
-    if (ui.checkBox_timeout->isChecked()) {
-        if (ui.radioButton_timeout0->isChecked()) {
-            m_settings["GRUB_TIMEOUT"] = "0";
-        } else {
-            m_settings["GRUB_TIMEOUT"] = \
                QString::number(ui.spinBox_timeout->value());
-        }
-    } else {
-        m_settings["GRUB_TIMEOUT"] = "-1";
-    }
+    m_dirtyBits.setBit(grubTimeoutDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubGfxmode(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_GFXMODE"] = text;
-    } else {
-        m_settings.remove("GRUB_GFXMODE");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubGfxmodeDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubGfxpayloadLinux()
 {
-    if (ui.radioButton_gfxpayloadText->isChecked()) {
-        m_settings["GRUB_GFXPAYLOAD_LINUX"] = "text";
-    } else if (ui.radioButton_gfxpayloadKeep->isChecked()) {
-        m_settings["GRUB_GFXPAYLOAD_LINUX"] = "keep";
-    } else {
-        QString gfxPayload = ui.comboBox_gfxpayload->currentText();
-        if (!gfxPayload.isEmpty()) {
-            m_settings["GRUB_GFXPAYLOAD_LINUX"] = gfxPayload;
-        } else {
-            m_settings.remove("GRUB_GFXPAYLOAD_LINUX");
-        }
-    }
+    m_dirtyBits.setBit(grubGfxpayloadLinuxDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubColorNormal()
 {
-    QString normalForeground = \
ui.comboBox_normalForeground->itemData(ui.comboBox_normalForeground->currentIndex()).toString();
                
-    QString normalBackground = \
ui.comboBox_normalBackground->itemData(ui.comboBox_normalBackground->currentIndex()).toString();
                
-    if (normalForeground.compare("light-gray") != 0 || \
                normalBackground.compare("black") != 0) {
-        m_settings["GRUB_COLOR_NORMAL"] = normalForeground + '/' + normalBackground;
-    } else {
-        m_settings.remove("GRUB_COLOR_NORMAL");
-    }
+    m_dirtyBits.setBit(grubColorNormalDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubColorHighlight()
 {
-    QString highlightForeground = \
ui.comboBox_highlightForeground->itemData(ui.comboBox_highlightForeground->currentIndex()).toString();
                
-    QString highlightBackground = \
ui.comboBox_highlightBackground->itemData(ui.comboBox_highlightBackground->currentIndex()).toString();
                
-    if (highlightForeground.compare("black") != 0 || \
                highlightBackground.compare("light-gray") != 0) {
-        m_settings["GRUB_COLOR_HIGHLIGHT"] = highlightForeground + '/' + \
                highlightBackground;
-    } else {
-        m_settings.remove("GRUB_COLOR_HIGHLIGHT");
-    }
+    m_dirtyBits.setBit(grubColorHighlightDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubBackground(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_BACKGROUND"] = text;
-    } else {
-        m_settings.remove("GRUB_BACKGROUND");
-    }
+    Q_UNUSED(text)
     ui.kpushbutton_preview->setEnabled(!text.isEmpty());
+    m_dirtyBits.setBit(grubBackgroundDirty);
     emit changed(true);
 }
 void KCMGRUB2::previewGrubBackground()
@@ -331,114 +466,78 @@ void KCMGRUB2::createGrubBackground()
 }
 void KCMGRUB2::updateGrubTheme(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_THEME"] = text;
-    } else {
-        m_settings.remove("GRUB_THEME");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubThemeDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubCmdlineLinuxDefault(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_CMDLINE_LINUX_DEFAULT"] = text;
-    } else {
-        m_settings.remove("GRUB_CMDLINE_LINUX_DEFAULT");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubCmdlineLinuxDefaultDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubCmdlineLinux(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_CMDLINE_LINUX"] = text;
-    } else {
-        m_settings.remove("GRUB_CMDLINE_LINUX");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubCmdlineLinuxDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubTerminal(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_TERMINAL"] = text;
-    } else {
-        m_settings.remove("GRUB_TERMINAL");
-    }
+    Q_UNUSED(text)
     ui.lineEdit_terminalInput->setReadOnly(!text.isEmpty());
     ui.lineEdit_terminalOutput->setReadOnly(!text.isEmpty());
     ui.lineEdit_terminalInput->setText(!text.isEmpty() ? text : \
                m_settings.value("GRUB_TERMINAL_INPUT"));
     ui.lineEdit_terminalOutput->setText(!text.isEmpty() ? text : \
m_settings.value("GRUB_TERMINAL_OUTPUT")); +    \
m_dirtyBits.setBit(grubTerminalDirty);  emit changed(true);
 }
 void KCMGRUB2::updateGrubTerminalInput(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_TERMINAL_INPUT"] = text;
-    } else {
-        m_settings.remove("GRUB_TERMINAL_INPUT");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubTerminalInputDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubTerminalOutput(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_TERMINAL_OUTPUT"] = text;
-    } else {
-        m_settings.remove("GRUB_TERMINAL_OUTPUT");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubTerminalOutputDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubDistributor(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_DISTRIBUTOR"] = text;
-    } else {
-        m_settings.remove("GRUB_DISTRIBUTOR");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubDistributorDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubSerialCommand(const QString &text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_SERIAL_COMMAND"] = text;
-    } else {
-        m_settings.remove("GRUB_SERIAL_COMMAND");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubSerialCommandDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubInitTune(const QString& text)
 {
-    if (!text.isEmpty()) {
-        m_settings["GRUB_INIT_TUNE"] = text;
-    } else {
-        m_settings.remove("GRUB_INIT_TUNE");
-    }
+    Q_UNUSED(text)
+    m_dirtyBits.setBit(grubInitTuneDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubDisableLinuxUUID(bool checked)
 {
-    if (checked) {
-        m_settings.remove("GRUB_DISABLE_LINUX_UUID");
-    } else {
-        m_settings["GRUB_DISABLE_LINUX_UUID"] = "true";
-    }
+    Q_UNUSED(checked)
+    m_dirtyBits.setBit(grubDisableLinuxUuidDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubDisableRecovery(bool checked)
 {
-    if (checked) {
-        m_settings.remove("GRUB_DISABLE_RECOVERY");
-    } else {
-        m_settings["GRUB_DISABLE_RECOVERY"] = "true";
-    }
+    Q_UNUSED(checked)
+    m_dirtyBits.setBit(grubDisableRecoveryDirty);
     emit changed(true);
 }
 void KCMGRUB2::updateGrubDisableOsProber(bool checked)
 {
-    if (checked) {
-        m_settings.remove("GRUB_DISABLE_OS_PROBER");
-    } else {
-        m_settings["GRUB_DISABLE_OS_PROBER"] = "true";
-    }
+    Q_UNUSED(checked)
+    m_dirtyBits.setBit(grubDisableOsProberDirty);
     emit changed(true);
 }
 
@@ -507,6 +606,8 @@ void KCMGRUB2::setupObjects()
     setButtons(Apply);
     setNeedsAuthorization(true);
 
+    m_dirtyBits.resize(grubDisableOsProberDirty + 1);
+
     QPixmap black(16, 16), transparent(16, 16);
     black.fill(Qt::black);
     transparent.fill(Qt::transparent);
diff --git a/src/kcm_grub2.h b/src/kcm_grub2.h
index 00755ae..05cc177 100644
--- a/src/kcm_grub2.h
+++ b/src/kcm_grub2.h
@@ -18,6 +18,9 @@
 #ifndef KCMGRUB2_H
 #define KCMGRUB2_H
 
+//Qt
+#include <QtCore/QBitArray>
+
 //KDE
 #include <KCModule>
 
@@ -82,6 +85,31 @@ private:
 
     Ui::KCMGRUB2 ui;
 
+    enum {
+        grubDefaultDirty,
+        grubSavedefaultDirty,
+        grubHiddenTimeoutDirty,
+        grubHiddenTimeoutQuietDirty,
+        grubTimeoutDirty,
+        grubGfxmodeDirty,
+        grubGfxpayloadLinuxDirty,
+        grubColorNormalDirty,
+        grubColorHighlightDirty,
+        grubBackgroundDirty,
+        grubThemeDirty,
+        grubCmdlineLinuxDefaultDirty,
+        grubCmdlineLinuxDirty,
+        grubTerminalDirty,
+        grubTerminalInputDirty,
+        grubTerminalOutputDirty,
+        grubDistributorDirty,
+        grubSerialCommandDirty,
+        grubInitTuneDirty,
+        grubDisableLinuxUuidDirty,
+        grubDisableRecoveryDirty,
+        grubDisableOsProberDirty
+    };
+    QBitArray m_dirtyBits;
     QStringList m_gfxmodes;
     QHash<QString, QString> m_devices;
     QStringList m_entries;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic