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

List:       kde-commits
Subject:    [kde-workspace] kwin: KConf Update script for KWin 4.9
From:       Martin_Gräßlin <mgraesslin () kde ! org>
Date:       2012-05-24 17:03:45
Message-ID: 20120524170345.C6790A60A9 () git ! kde ! org
[Download RAW message or body]

Git commit 3f84d2f02945f7bc27a95c193c714e206cf3ad55 by Martin Gräßlin.
Committed on 18/05/2012 at 14:03.
Pushed by graesslin into branch 'master'.

KConf Update script for KWin 4.9

BUG: 296775
FIXED-IN: 4.9.0
REVIEW: 104984

M  +2    -0    kwin/CMakeLists.txt
M  +10   -1    kwin/data/CMakeLists.txt
A  +2    -0    kwin/data/kwin_update_49.upd
A  +97   -0    kwin/data/update_kwin_49.cpp     [License: GPL (v2)]
A  +30   -0    kwin/data/update_kwin_49.h     [License: GPL (v2)]
A  +45   -0    kwin/data/update_kwin_49_main.cpp     [License: GPL (v2)]
A  +4    -0    kwin/tests/CMakeLists.txt
A  +543  -0    kwin/tests/test_update_kwin_49.cpp     [License: GPL (v2)]

http://commits.kde.org/kde-workspace/3f84d2f02945f7bc27a95c193c714e206cf3ad55

diff --git a/kwin/CMakeLists.txt b/kwin/CMakeLists.txt
index 2c02e04..2fc4fc2 100644
--- a/kwin/CMakeLists.txt
+++ b/kwin/CMakeLists.txt
@@ -253,3 +253,5 @@ if( KWIN_BUILD_SCRIPTING )
 endif( KWIN_BUILD_SCRIPTING )
 
 kde4_install_icons( ${ICON_INSTALL_DIR} )
+
+add_subdirectory(tests)
diff --git a/kwin/data/CMakeLists.txt b/kwin/data/CMakeLists.txt
index 33e4790..2ce682d 100644
--- a/kwin/data/CMakeLists.txt
+++ b/kwin/data/CMakeLists.txt
@@ -28,10 +28,19 @@ target_link_libraries( kwin_update_tabbox_qml_settings \
${KDE4_KDECORE_LIBS} )  
 install( TARGETS kwin_update_tabbox_qml_settings DESTINATION \
${LIB_INSTALL_DIR}/kconf_update_bin/ )  
+########### next target ###############
+set( kwin_update_settings_49_SRCS update_kwin_49.cpp update_kwin_49_main.cpp )
+
+kde4_add_executable( kwin_update_settings_49 ${kwin_update_settings_49_SRCS} )
+
+target_link_libraries( kwin_update_settings_49 ${KDE4_KDECORE_LIBS} )
+
+install( TARGETS kwin_update_settings_49 DESTINATION \
${LIB_INSTALL_DIR}/kconf_update_bin/ ) +
 ########### install files ###############
 
 install( FILES fsp_workarounds_1.kwinrules  DESTINATION  \
${DATA_INSTALL_DIR}/kwin/default_rules )  install( FILES pop.wav  DESTINATION  \
                ${SOUND_INSTALL_DIR} )
-install( FILES kwin_fsp_workarounds_1.upd kwin_update_tabbox_settings.upd \
kwin_remove_effects.upd kwin_update_tabbox_qml_settings.upd \
kwin_remove_delay_focus.upd DESTINATION  ${KCONF_UPDATE_INSTALL_DIR} ) +install( \
FILES kwin_fsp_workarounds_1.upd kwin_update_tabbox_settings.upd \
kwin_remove_effects.upd kwin_update_tabbox_qml_settings.upd \
kwin_remove_delay_focus.upd kwin_update_49.upd DESTINATION  \
${KCONF_UPDATE_INSTALL_DIR} )  install( PROGRAMS kwin_remove_delay_focus.sh \
DESTINATION  ${KCONF_UPDATE_INSTALL_DIR} )  
diff --git a/kwin/data/kwin_update_49.upd b/kwin/data/kwin_update_49.upd
new file mode 100644
index 0000000..1c45598
--- /dev/null
+++ b/kwin/data/kwin_update_49.upd
@@ -0,0 +1,2 @@
+Id=Kwin-4.9
+Script=kwin_update_settings_49
diff --git a/kwin/data/update_kwin_49.cpp b/kwin/data/update_kwin_49.cpp
new file mode 100644
index 0000000..a815f60
--- /dev/null
+++ b/kwin/data/update_kwin_49.cpp
@@ -0,0 +1,97 @@
+/********************************************************************
+KWin - the KDE window manager
+This file is part of the KDE project.
+
+Copyright (C) 2012 Martin Gräßlin <mgraesslin@kde.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+#include "update_kwin_49.h"
+#include <KDE/KConfig>
+
+void migratePresentWindowsTabBox(KConfig &config)
+{
+    KConfigGroup plugins = config.group("Plugins");
+    const bool presentWindowsEnabled = \
plugins.readEntry("kwin4_effect_presentwindowsEnabled", true); +    if \
(!presentWindowsEnabled) { +        // nothing to migrate
+        return;
+    }
+    KConfigGroup presentWindows = config.group("Effect-PresentWindows");
+    const bool presentWindowsPrimary = presentWindows.readEntry("TabBox", false);
+    const bool presentWindowsAlternative = \
presentWindows.readEntry("TabBoxAlternative", false); +    if (presentWindowsPrimary) \
{ +        KConfigGroup tabbox = config.group("TabBox");
+        tabbox.writeEntry("LayoutName", "present_windows");
+        tabbox.sync();
+    }
+    if (presentWindowsAlternative) {
+        KConfigGroup tabbox = config.group("TabBoxAlternative");
+        tabbox.writeEntry("LayoutName", "present_windows");
+        tabbox.sync();
+    }
+    presentWindows.deleteEntry("TabBox");
+    presentWindows.deleteEntry("TabBoxAlternative");
+    presentWindows.sync();
+}
+
+void migrateDesktopChangeOSD(KConfig &config)
+{
+    if (!config.hasGroup("PopupInfo")) {
+        return;
+    }
+    KConfigGroup popupInfo = config.group("PopupInfo");
+    const bool shown = popupInfo.readEntry("ShowPopup", false);
+    const bool textOnly = popupInfo.readEntry("TextOnly", false);
+    const int delayTime = popupInfo.readEntry("PopupHideDelay", 1000);
+
+    KConfigGroup plugins = config.group("Plugins");
+    if (shown && !plugins.hasKey("desktopchangeosdEnabled")) {
+        plugins.writeEntry("desktopchangeosdEnabled", true);
+        plugins.sync();
+    }
+    KConfigGroup osd = config.group("Script-desktopchangeosd");
+    if (popupInfo.hasKey("TextOnly") && !osd.hasKey("TextOnly")) {
+        osd.writeEntry("TextOnly", textOnly);
+    }
+    if (popupInfo.hasKey("PopupHideDelay") && !osd.hasKey("PopupHideDelay")) {
+        osd.writeEntry("PopupHideDelay", delayTime);
+    }
+    osd.sync();
+    config.deleteGroup("PopupInfo");
+}
+
+void migrateTabBoxConfig(KConfigGroup tabbox)
+{
+    if (tabbox.hasKey("ListMode") && !tabbox.hasKey("DesktopMode")) {
+        const int oldValue = tabbox.readEntry("ListMode", 0);
+        switch (oldValue) {
+        case 0: // Current Desktop Client List
+        case 2: // Current Desktop Application List
+            tabbox.writeEntry("DesktopMode", 1);
+            break;
+        case 1: // All Desktops Client List
+        case 3: // All Desktops Application List
+            tabbox.writeEntry("DesktopMode", 0);
+            break;
+        }
+    }
+    tabbox.deleteEntry("ListMode");
+    if (tabbox.hasKey("ShowDesktop") && !tabbox.hasKey("ShowDesktopMode")) {
+        const bool showDesktop = tabbox.readEntry("ShowDesktop", false);
+        tabbox.writeEntry("ShowDesktopMode", showDesktop ? 1 : 0);
+    }
+    tabbox.deleteEntry("ShowDesktop");
+    tabbox.sync();
+}
diff --git a/kwin/data/update_kwin_49.h b/kwin/data/update_kwin_49.h
new file mode 100644
index 0000000..f70da29
--- /dev/null
+++ b/kwin/data/update_kwin_49.h
@@ -0,0 +1,30 @@
+/********************************************************************
+KWin - the KDE window manager
+This file is part of the KDE project.
+
+Copyright (C) 2012 Martin Gräßlin <mgraesslin@kde.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+#ifndef UPDATE_KWIN_49_H
+#define UPDATE_KWIN_49_H
+#include <KDE/KConfigGroup>
+
+class KConfig;
+
+void migratePresentWindowsTabBox(KConfig &config);
+void migrateDesktopChangeOSD(KConfig &config);
+void migrateTabBoxConfig(KConfigGroup tabbox);
+
+#endif
diff --git a/kwin/data/update_kwin_49_main.cpp b/kwin/data/update_kwin_49_main.cpp
new file mode 100644
index 0000000..33204af
--- /dev/null
+++ b/kwin/data/update_kwin_49_main.cpp
@@ -0,0 +1,45 @@
+/********************************************************************
+KWin - the KDE window manager
+This file is part of the KDE project.
+
+Copyright (C) 2012 Martin Gräßlin <mgraesslin@kde.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+#include "update_kwin_49.h"
+
+#include <kconfig.h>
+#include <kcomponentdata.h>
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <kglobal.h>
+#include <QtDBus/QtDBus>
+
+int main( int argc, char* argv[] )
+{
+    KAboutData about( "kwin_update_tabbox_qml_settings", "kwin", KLocalizedString(), \
0 ); +    KCmdLineArgs::init( argc, argv, &about );
+    KComponentData inst( &about );
+    Q_UNUSED( KGlobal::locale() ); // jump-start locales to get to translated \
descriptions +    KConfig config("kwinrc");
+    migratePresentWindowsTabBox(config);
+    migrateDesktopChangeOSD(config);
+    migrateTabBoxConfig(config.group("TabBox"));
+    migrateTabBoxConfig(config.group("TabBoxAlternative"));
+    config.sync();
+    // Send signal to all kwin instances
+    QDBusMessage message =
+    QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig");
+    QDBusConnection::sessionBus().send(message);
+}
diff --git a/kwin/tests/CMakeLists.txt b/kwin/tests/CMakeLists.txt
new file mode 100644
index 0000000..7755506
--- /dev/null
+++ b/kwin/tests/CMakeLists.txt
@@ -0,0 +1,4 @@
+set( testUpdateKWin49_SRCS test_update_kwin_49.cpp ../data/update_kwin_49.cpp \
../tabbox/tabboxconfig.cpp ) +kde4_add_unit_test( testUpdateKWin49 TESTNAME \
TestUpdateKWin49 ${testUpdateKWin49_SRCS} ) +
+target_link_libraries( testUpdateKWin49 ${KDE4_KDECORE_LIBS} ${QT_QTTEST_LIBRARY} )
diff --git a/kwin/tests/test_update_kwin_49.cpp b/kwin/tests/test_update_kwin_49.cpp
new file mode 100644
index 0000000..79a0522
--- /dev/null
+++ b/kwin/tests/test_update_kwin_49.cpp
@@ -0,0 +1,543 @@
+/********************************************************************
+KWin - the KDE window manager
+This file is part of the KDE project.
+
+Copyright (C) 2012 Martin Gräßlin <mgraesslin@kde.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+#include "../data/update_kwin_49.h"
+#include "../tabbox/tabboxconfig.h"
+
+#include <KDE/KConfig>
+
+#include <QtTest/QtTest>
+
+class TestUpdateKWin49 : public QObject
+{
+    Q_OBJECT
+private slots:
+    /**
+     * Tests that migrating the Present Windows TabBox settings
+     * does not affect an empty configuration.
+     **/
+    void testEmptyKConfigPW();
+    /**
+     * Tests that the migration of Present Windows TabBox settings for a
+     * disabled Present Windows effect does not affect the configuration.
+     **/
+    void testPWDisabled();
+    /**
+     * Tests that the migration of Present Window TabBox settings for an
+     * enabled Present Windows effect with disabled TabBox does not affect the \
configuration. +     **/
+    void testPWEnabledTabBoxDisabled();
+    /**
+     * Tests that the migration of Present Windows TabBox settings
+     * properly sets the layout in TabBox.
+     **/
+    void testPWTabBoxEnabled();
+    /**
+     * Tests that the migration of Present Windows TabBox settings
+     * properly sets the layout in TabBoxAlternative.
+     **/
+    void testPWTabBoxAlternativeEnabled();
+    /**
+     * Tests that the migration of Present Windows TabBox settings
+     * properly sets the layout in both TabBox and TabBoxAlternative.
+     **/
+    void testPWBothEnabled();
+    /**
+     * Test that migrating the Desktop Change OSD settings
+     * does not affect an empty configuration
+     **/
+    void testEmptyKConfigOSD();
+    /**
+     * Tests that migrating the Desktop Change OSD settings
+     * with a disabled PopupInfo does not affect KConfig.
+     **/
+    void testPopupInfoDisabled();
+    /**
+     * Tests that migrating the Desktop Change OSD settings
+     * with a disabled PopupInfo migrates only the config parameters.
+     **/
+    void testPopupInfoDisabledAdditionalKeys();
+    /**
+     * Tests that migrating the Desktop Change OSD settings
+     * with a disabled PopupInfo migrates only the config parameters which have \
default values. +     **/
+    void testPopupInfoDisabledAdditionalKeysDefault();
+    /**
+     * Tests that migrating the Desktop Change OSD settings
+     * enables the script.
+     **/
+    void testPopupInfoEnabled();
+    /**
+     * Tests that migrating the Desktop Change OSD settings
+     * enables the script and migrates the settings.
+     **/
+    void testPopupInfoEnabledAdditionalKeys();
+    /**
+     * Tests that attempting to migrate Desktop Change OSD settings
+     * again will not overwrite existing settings.
+     **/
+    void testPopupInfoAlreadyMigrated();
+    /**
+     * Tests that migrating TabBox does not change an empty KConfig.
+     **/
+    void testEmptyKConfigTabBox();
+    /**
+     * Tests the migration of TabBox setting show desktop.
+     **/
+    void testTabBoxShowDesktopEnabled();
+    /**
+     * Tests the migration of TabBox setting show desktop.
+     **/
+    void testTabBoxShowDesktopDisabled();
+    /**
+     * Tests the migration of the various TabBox ListMode settings.
+     **/
+    void testTabBoxCurrentDesktopClientList();
+    void testTabBoxCurrentDesktopApplicationList();
+    void testTabBoxAllDesktopsClientList();
+    void testTabBoxAllDesktopsApplicationList();
+    /**
+     * Tests that attempting to migrate TabBox settings again will not
+     * overwrite existing settings.
+     **/
+    void testTabBoxAlreadyMigrated();
+};
+
+void TestUpdateKWin49::testEmptyKConfigPW()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    migratePresentWindowsTabBox(config);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+}
+
+void TestUpdateKWin49::testPWDisabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup plugins = config.group("Plugins");
+    plugins.writeEntry("kwin4_effect_presentwindowsEnabled", false);
+    QVERIFY(config.hasGroup("Plugins"));
+    QVERIFY(!plugins.readEntry("kwin4_effect_presentwindowsEnabled", true));
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    migratePresentWindowsTabBox(config);
+    QVERIFY(config.hasGroup("Plugins"));
+    QVERIFY(!plugins.readEntry("kwin4_effect_presentwindowsEnabled", true));
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+}
+
+void TestUpdateKWin49::testPWEnabledTabBoxDisabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup plugins = config.group("Plugins");
+    plugins.writeEntry("kwin4_effect_presentwindowsEnabled", true);
+    QVERIFY(config.hasGroup("Plugins"));
+    QVERIFY(plugins.readEntry("kwin4_effect_presentwindowsEnabled", true));
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    migratePresentWindowsTabBox(config);
+    QVERIFY(config.hasGroup("Plugins"));
+    QVERIFY(plugins.readEntry("kwin4_effect_presentwindowsEnabled", true));
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    // same with TabBox explicitly disabled
+    KConfigGroup pw = config.group("Effect-PresentWindows");
+    pw.writeEntry("TabBox", false);
+    pw.writeEntry("TabBoxAlternative", false);
+    QVERIFY(pw.hasKey("TabBox"));
+    QVERIFY(pw.hasKey("TabBoxAlternative"));
+    migratePresentWindowsTabBox(config);
+    QVERIFY(config.hasGroup("Plugins"));
+    QVERIFY(plugins.readEntry("kwin4_effect_presentwindowsEnabled", true));
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!pw.hasKey("TabBox"));
+    QVERIFY(!pw.hasKey("TabBoxAlternative"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+}
+
+void TestUpdateKWin49::testPWTabBoxEnabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup pw = config.group("Effect-PresentWindows");
+    pw.writeEntry("TabBox", true);
+    QVERIFY(pw.hasKey("TabBox"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    migratePresentWindowsTabBox(config);
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!pw.hasKey("TabBox"));
+    QVERIFY(!pw.hasKey("TabBoxAlternative"));
+    QVERIFY(config.hasGroup("TabBox"));
+    KConfigGroup tabBox = config.group("TabBox");
+    QVERIFY(tabBox.hasKey("LayoutName"));
+    QVERIFY(tabBox.readEntry("LayoutName", "thumbnails") == "present_windows");
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    // test same with an explicit layout set
+    tabBox.writeEntry("LayoutName", "informative");
+    pw.writeEntry("TabBox", true);
+    migratePresentWindowsTabBox(config);
+    QVERIFY(!pw.hasKey("TabBox"));
+    QVERIFY(!pw.hasKey("TabBoxAlternative"));
+    QVERIFY(tabBox.readEntry("LayoutName", "thumbnails") == "present_windows");
+}
+
+void TestUpdateKWin49::testPWTabBoxAlternativeEnabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup pw = config.group("Effect-PresentWindows");
+    pw.writeEntry("TabBoxAlternative", true);
+    QVERIFY(pw.hasKey("TabBoxAlternative"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    migratePresentWindowsTabBox(config);
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!pw.hasKey("TabBox"));
+    QVERIFY(!pw.hasKey("TabBoxAlternative"));
+    QVERIFY(config.hasGroup("TabBoxAlternative"));
+    KConfigGroup tabBox = config.group("TabBoxAlternative");
+    QVERIFY(tabBox.hasKey("LayoutName"));
+    QVERIFY(tabBox.readEntry("LayoutName", "thumbnails") == "present_windows");
+    QVERIFY(!config.hasGroup("TabBox"));
+    // test same with an explicit layout set
+    tabBox.writeEntry("LayoutName", "informative");
+    pw.writeEntry("TabBoxAlternative", true);
+    migratePresentWindowsTabBox(config);
+    QVERIFY(!pw.hasKey("TabBox"));
+    QVERIFY(!pw.hasKey("TabBoxAlternative"));
+    QVERIFY(tabBox.readEntry("LayoutName", "thumbnails") == "present_windows");
+}
+
+void TestUpdateKWin49::testPWBothEnabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup pw = config.group("Effect-PresentWindows");
+    pw.writeEntry("TabBox", true);
+    pw.writeEntry("TabBoxAlternative", true);
+    QVERIFY(pw.hasKey("TabBoxAlternative"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    QVERIFY(pw.hasKey("TabBox"));
+    migratePresentWindowsTabBox(config);
+    QVERIFY(!config.hasGroup("Effect-PresentWindows"));
+    QVERIFY(!pw.hasKey("TabBox"));
+    QVERIFY(!pw.hasKey("TabBoxAlternative"));
+    QVERIFY(config.hasGroup("TabBox"));
+    QVERIFY(config.hasGroup("TabBoxAlternative"));
+    KConfigGroup tabBox = config.group("TabBox");
+    QVERIFY(tabBox.hasKey("LayoutName"));
+    QVERIFY(tabBox.readEntry("LayoutName", "thumbnails") == "present_windows");
+    KConfigGroup tabBoxAlternative = config.group("TabBoxAlternative");
+    QVERIFY(tabBoxAlternative.hasKey("LayoutName"));
+    QVERIFY(tabBoxAlternative.readEntry("LayoutName", "thumbnails") == \
"present_windows"); +    // test same with an explicit layout set
+    tabBox.writeEntry("LayoutName", "informative");
+    tabBoxAlternative.writeEntry("LayoutName", "informative");
+    pw.writeEntry("TabBox", true);
+    pw.writeEntry("TabBoxAlternative", true);
+    migratePresentWindowsTabBox(config);
+    QVERIFY(!pw.hasKey("TabBox"));
+    QVERIFY(!pw.hasKey("TabBoxAlternative"));
+    QVERIFY(tabBox.readEntry("LayoutName", "thumbnails") == "present_windows");
+    QVERIFY(tabBoxAlternative.readEntry("LayoutName", "thumbnails") == \
"present_windows"); +}
+
+void TestUpdateKWin49::testEmptyKConfigOSD()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("PopupInfo"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+    migrateDesktopChangeOSD(config);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("PopupInfo"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+}
+
+void TestUpdateKWin49::testPopupInfoDisabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup popupInfo = config.group("PopupInfo");
+    popupInfo.writeEntry("ShowPopup", false);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(popupInfo.hasKey("ShowPopup"));
+    migrateDesktopChangeOSD(config);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("PopupInfo"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(!popupInfo.hasKey("ShowPopup"));
+}
+
+void TestUpdateKWin49::testPopupInfoDisabledAdditionalKeys()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup popupInfo = config.group("PopupInfo");
+    popupInfo.writeEntry("TextOnly", false);
+    popupInfo.writeEntry("PopupHideDelay", 1000);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(!popupInfo.hasKey("ShowPopup"));
+    QVERIFY(popupInfo.hasKey("TextOnly"));
+    QVERIFY(popupInfo.hasKey("PopupHideDelay"));
+    migrateDesktopChangeOSD(config);
+    QVERIFY(!config.hasGroup("PopupInfo"));
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(!popupInfo.hasKey("ShowPopup"));
+    QVERIFY(!popupInfo.hasKey("TextOnly"));
+    QVERIFY(!popupInfo.hasKey("PopupHideDelay"));
+    KConfigGroup osd = config.group("Script-desktopchangeosd");
+    QVERIFY(osd.hasKey("TextOnly"));
+    QVERIFY(osd.hasKey("PopupHideDelay"));
+    QVERIFY(!osd.readEntry("TextOnly", false));
+    QVERIFY(osd.readEntry("PopupHideDelay", 1000) == 1000);
+}
+
+void TestUpdateKWin49::testPopupInfoDisabledAdditionalKeysDefault()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup popupInfo = config.group("PopupInfo");
+    popupInfo.writeEntry("TextOnly", true);
+    popupInfo.writeEntry("PopupHideDelay", 200);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(!popupInfo.hasKey("ShowPopup"));
+    QVERIFY(popupInfo.hasKey("TextOnly"));
+    QVERIFY(popupInfo.hasKey("PopupHideDelay"));
+    migrateDesktopChangeOSD(config);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(!popupInfo.hasKey("ShowPopup"));
+    QVERIFY(!popupInfo.hasKey("TextOnly"));
+    QVERIFY(!popupInfo.hasKey("PopupHideDelay"));
+    KConfigGroup osd = config.group("Script-desktopchangeosd");
+    QVERIFY(osd.hasKey("TextOnly"));
+    QVERIFY(osd.hasKey("PopupHideDelay"));
+    QVERIFY(osd.readEntry("TextOnly", false));
+    QVERIFY(osd.readEntry("PopupHideDelay", 1000) == 200);
+}
+
+void TestUpdateKWin49::testPopupInfoEnabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup popupInfo = config.group("PopupInfo");
+    popupInfo.writeEntry("ShowPopup", true);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(popupInfo.hasKey("ShowPopup"));
+    migrateDesktopChangeOSD(config);
+    QVERIFY(config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("PopupInfo"));
+    QVERIFY(!popupInfo.hasKey("ShowPopup"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+    KConfigGroup plugins = config.group("Plugins");
+    QVERIFY(plugins.hasKey("desktopchangeosdEnabled"));
+    QVERIFY(plugins.readEntry("desktopchangeosdEnabled", false));
+}
+
+void TestUpdateKWin49::testPopupInfoEnabledAdditionalKeys()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup popupInfo = config.group("PopupInfo");
+    popupInfo.writeEntry("ShowPopup", true);
+    popupInfo.writeEntry("TextOnly", true);
+    popupInfo.writeEntry("PopupHideDelay", 2000);
+    QVERIFY(!config.hasGroup("Plugins"));
+    QVERIFY(!config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(popupInfo.hasKey("ShowPopup"));
+    QVERIFY(popupInfo.hasKey("TextOnly"));
+    QVERIFY(popupInfo.hasKey("PopupHideDelay"));
+    migrateDesktopChangeOSD(config);
+    QVERIFY(!config.hasGroup("PopupInfo"));
+    QVERIFY(config.hasGroup("Plugins"));
+    QVERIFY(config.hasGroup("Script-desktopchangeosd"));
+    QVERIFY(!popupInfo.hasKey("ShowPopup"));
+    QVERIFY(!popupInfo.hasKey("TextOnly"));
+    QVERIFY(!popupInfo.hasKey("PopupHideDelay"));
+    KConfigGroup osd = config.group("Script-desktopchangeosd");
+    QVERIFY(osd.hasKey("TextOnly"));
+    QVERIFY(osd.hasKey("PopupHideDelay"));
+    QVERIFY(osd.readEntry("TextOnly", false));
+    QVERIFY(osd.readEntry("PopupHideDelay", 1000) == 2000);
+    KConfigGroup plugins = config.group("Plugins");
+    QVERIFY(plugins.hasKey("desktopchangeosdEnabled"));
+    QVERIFY(plugins.readEntry("desktopchangeosdEnabled", false));
+}
+
+void TestUpdateKWin49::testPopupInfoAlreadyMigrated()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup popupInfo = config.group("PopupInfo");
+    popupInfo.writeEntry("ShowPopup", true);
+    popupInfo.writeEntry("TextOnly", false);
+    popupInfo.writeEntry("PopupHideDelay", 2000);
+    KConfigGroup plugins = config.group("Plugins");
+    plugins.writeEntry("desktopchangeosdEnabled", false);
+    KConfigGroup osd = config.group("Script-desktopchangeosd");
+    osd.writeEntry("TextOnly", true);
+    osd.writeEntry("PopupHideDelay", 200);
+    migrateDesktopChangeOSD(config);
+    QVERIFY(!config.hasGroup("PopupInfo"));
+    QVERIFY(!plugins.readEntry("desktopchangeosdEnabled", false));
+    QVERIFY(osd.readEntry("TextOnly", false));
+    QVERIFY(osd.readEntry("PopupHideDelay", 1000) == 200);
+}
+
+void TestUpdateKWin49::testEmptyKConfigTabBox()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    QVERIFY(!config.hasGroup("TabBox"));
+    migrateTabBoxConfig(config.group("TabBox"));
+    QVERIFY(!config.hasGroup("TabBox"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+    migrateTabBoxConfig(config.group("TabBoxAlternative"));
+    QVERIFY(!config.hasGroup("TabBoxAlternative"));
+}
+
+void TestUpdateKWin49::testTabBoxShowDesktopDisabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup tabBox = config.group("TabBox");
+    KConfigGroup tabBoxAlternative = config.group("TabBoxAlternative");
+    tabBox.writeEntry("ShowDesktop", false);
+    tabBoxAlternative.writeEntry("ShowDesktop", false);
+    QVERIFY(!tabBox.hasKey("ShowDesktopMode"));
+    QVERIFY(!tabBoxAlternative.hasKey("ShowDesktopMode"));
+    migrateTabBoxConfig(tabBox);
+    QVERIFY(!tabBox.hasKey("ShowDesktop"));
+    QVERIFY(tabBox.hasKey("ShowDesktopMode"));
+    QVERIFY(tabBox.readEntry("ShowDesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::defaultShowDesktopMode())) == \
KWin::TabBox::TabBoxConfig::DoNotShowDesktopClient); +    \
QVERIFY(tabBoxAlternative.hasKey("ShowDesktop")); +    \
QVERIFY(!tabBoxAlternative.hasKey("ShowDesktopMode")); +}
+
+void TestUpdateKWin49::testTabBoxShowDesktopEnabled()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup tabBox = config.group("TabBox");
+    KConfigGroup tabBoxAlternative = config.group("TabBoxAlternative");
+    tabBox.writeEntry("ShowDesktop", true);
+    tabBoxAlternative.writeEntry("ShowDesktop", true);
+    QVERIFY(!tabBox.hasKey("ShowDesktopMode"));
+    QVERIFY(!tabBoxAlternative.hasKey("ShowDesktopMode"));
+    migrateTabBoxConfig(tabBox);
+    QVERIFY(!tabBox.hasKey("ShowDesktop"));
+    QVERIFY(tabBox.hasKey("ShowDesktopMode"));
+    QVERIFY(tabBox.readEntry("ShowDesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::defaultShowDesktopMode())) == \
KWin::TabBox::TabBoxConfig::ShowDesktopClient); +    \
QVERIFY(tabBoxAlternative.hasKey("ShowDesktop")); +    \
QVERIFY(!tabBoxAlternative.hasKey("ShowDesktopMode")); +}
+
+void TestUpdateKWin49::testTabBoxAllDesktopsApplicationList()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup tabBox = config.group("TabBox");
+    KConfigGroup tabBoxAlternative = config.group("TabBoxAlternative");
+    tabBox.writeEntry("ListMode", 3);
+    tabBoxAlternative.writeEntry("ListMode", 3);
+    QVERIFY(!tabBox.hasKey("DesktopMode"));
+    QVERIFY(!tabBoxAlternative.hasKey("DesktopMode"));
+    migrateTabBoxConfig(tabBox);
+    QVERIFY(!tabBox.hasKey("ListMode"));
+    QVERIFY(tabBox.hasKey("DesktopMode"));
+    QVERIFY(tabBox.readEntry("DesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::defaultDesktopMode())) == \
KWin::TabBox::TabBoxConfig::AllDesktopsClients); +    \
QVERIFY(tabBoxAlternative.hasKey("ListMode")); +    \
QVERIFY(!tabBoxAlternative.hasKey("DesktopMode")); +}
+
+void TestUpdateKWin49::testTabBoxAllDesktopsClientList()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup tabBox = config.group("TabBox");
+    KConfigGroup tabBoxAlternative = config.group("TabBoxAlternative");
+    tabBox.writeEntry("ListMode", 1);
+    tabBoxAlternative.writeEntry("ListMode", 1);
+    QVERIFY(!tabBox.hasKey("DesktopMode"));
+    QVERIFY(!tabBoxAlternative.hasKey("DesktopMode"));
+    migrateTabBoxConfig(tabBox);
+    QVERIFY(!tabBox.hasKey("ListMode"));
+    QVERIFY(tabBox.hasKey("DesktopMode"));
+    QVERIFY(tabBox.readEntry("DesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::defaultDesktopMode())) == \
KWin::TabBox::TabBoxConfig::AllDesktopsClients); +    \
QVERIFY(tabBoxAlternative.hasKey("ListMode")); +    \
QVERIFY(!tabBoxAlternative.hasKey("DesktopMode")); +}
+
+void TestUpdateKWin49::testTabBoxCurrentDesktopApplicationList()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup tabBox = config.group("TabBox");
+    KConfigGroup tabBoxAlternative = config.group("TabBoxAlternative");
+    tabBox.writeEntry("ListMode", 2);
+    tabBoxAlternative.writeEntry("ListMode", 2);
+    QVERIFY(!tabBox.hasKey("DesktopMode"));
+    QVERIFY(!tabBoxAlternative.hasKey("DesktopMode"));
+    migrateTabBoxConfig(tabBox);
+    QVERIFY(!tabBox.hasKey("ListMode"));
+    QVERIFY(tabBox.hasKey("DesktopMode"));
+    QVERIFY(tabBox.readEntry("DesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::defaultDesktopMode())) == \
KWin::TabBox::TabBoxConfig::OnlyCurrentDesktopClients); +    \
QVERIFY(tabBoxAlternative.hasKey("ListMode")); +    \
QVERIFY(!tabBoxAlternative.hasKey("DesktopMode")); +}
+
+void TestUpdateKWin49::testTabBoxCurrentDesktopClientList()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup tabBox = config.group("TabBox");
+    KConfigGroup tabBoxAlternative = config.group("TabBoxAlternative");
+    tabBox.writeEntry("ListMode", 0);
+    tabBoxAlternative.writeEntry("ListMode", 0);
+    QVERIFY(!tabBox.hasKey("DesktopMode"));
+    QVERIFY(!tabBoxAlternative.hasKey("DesktopMode"));
+    migrateTabBoxConfig(tabBox);
+    QVERIFY(!tabBox.hasKey("ListMode"));
+    QVERIFY(tabBox.hasKey("DesktopMode"));
+    QVERIFY(tabBox.readEntry("DesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::defaultDesktopMode())) == \
KWin::TabBox::TabBoxConfig::OnlyCurrentDesktopClients); +    \
QVERIFY(tabBoxAlternative.hasKey("ListMode")); +    \
QVERIFY(!tabBoxAlternative.hasKey("DesktopMode")); +}
+
+void TestUpdateKWin49::testTabBoxAlreadyMigrated()
+{
+    KConfig config(QString(), KConfig::SimpleConfig);
+    KConfigGroup tabBox = config.group("TabBox");
+    tabBox.writeEntry("ListMode", 0);
+    tabBox.writeEntry("DesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::AllDesktopsClients)); +    \
tabBox.writeEntry("ShowDesktop", true); +    tabBox.writeEntry("ShowDesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::DoNotShowDesktopClient)); +    \
migrateTabBoxConfig(tabBox); +    QVERIFY(!tabBox.hasKey("ListMode"));
+    QVERIFY(!tabBox.hasKey("ShowDesktop"));
+    QVERIFY(tabBox.readEntry("DesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::defaultDesktopMode())) == \
KWin::TabBox::TabBoxConfig::AllDesktopsClients); +    \
QVERIFY(tabBox.readEntry("ShowDesktopMode", \
static_cast<int>(KWin::TabBox::TabBoxConfig::defaultShowDesktopMode())) == \
KWin::TabBox::TabBoxConfig::DoNotShowDesktopClient); +}
+
+QTEST_MAIN(TestUpdateKWin49)
+#include "test_update_kwin_49.moc"


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

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