Example #1
0
void AppearanceSettings::applyCurrentSettings()
{
    Theme *theme = currentTheme();
    if (!theme)
        return;

    bool needsRestart = themeNeedsRestart(theme);
    if (needsRestart) {
        if (QMessageBox::warning(this, tr("Restart?"),
                    tr("Device will be restarted for theme to be fully applied.<br>Apply Now?"),
                    QMessageBox::Yes, QMessageBox::No)
                != QMessageBox::Yes) {
            return;
        }
    }

    bool themeChanged = (theme->uniqueName() + ".conf" != m_savedTheme);
    bool colorSchemeChanged = (theme->colorSchemeNames()[theme->currentColorIndex()] + ".scheme"
            != m_savedColorScheme);
    bool backgroundChanged = (theme->backgrounds()[theme->currentBackgroundIndex()]
            != m_savedBackground);
    bool softKeyLabelTypeChanged = (m_softKeyIconCheck->isChecked() ?
            QSoftMenuBar::IconLabel : QSoftMenuBar::TextLabel) != m_savedLabelType;

    qLog(UI) << "Theme settings changed?" << themeChanged << colorSchemeChanged
            << backgroundChanged <<softKeyLabelTypeChanged;

    // write config settings
    if (themeChanged)
        theme->writeThemeSettings(theme->uniqueName() + ".conf" != m_themeCombo->currentText());
    if (colorSchemeChanged)
        theme->writeColorSchemeSettings();

    // apply changes
    if (themeChanged || colorSchemeChanged) {
        QtopiaChannel::send("QPE/System", "applyStyle()");
        if (themeChanged)
            QtopiaChannel::send("QPE/System", "applyStyleSplash()");
        else
            QtopiaChannel::send("QPE/System", "applyStyleNoSplash()");
    }
    if (backgroundChanged)
        applyBackgroundImage();
    if (softKeyLabelTypeChanged)
        applySoftKeyLabels();


    if (!theme->stringValue(Theme::ServerWidgets).isEmpty()) {
        QSettings serverWidgetsConfig("Trolltech", "ServerWidgets");
        serverWidgetsConfig.beginGroup("Mapping");
        serverWidgetsConfig.remove(""); //delete all entries in current grp
        serverWidgetsConfig.setValue("Default", theme->stringValue(Theme::ServerWidgets));

        if (needsRestart) {
            QtopiaIpcEnvelope env("QPE/System", "restart()");
            QtopiaApplication::quit();
        }
    }
}