コード例 #1
0
bool KConfigBackEnd::checkConfigFilesWritable(bool warnUser)
{
    // WARNING: Do NOT use the event loop as it may not exist at this time.
    bool allWritable = true;
    QString errorMsg;
    if(!mLocalFileName.isEmpty() && !bFileImmutable && !checkAccess(mLocalFileName, W_OK))
    {
        errorMsg = i18n("Will not save configuration.\n");
        allWritable = false;
        errorMsg += i18n("Configuration file \"%1\" not writable.\n").arg(mLocalFileName);
    }
    // We do not have an immutability flag for kdeglobals. However, making kdeglobals mutable while making
    // the local config file immutable is senseless.
    if(!mGlobalFileName.isEmpty() && useKDEGlobals && !bFileImmutable && !checkAccess(mGlobalFileName, W_OK))
    {
        if(errorMsg.isEmpty())
            errorMsg = i18n("Will not save configuration.\n");
        errorMsg += i18n("Configuration file \"%1\" not writable.\n").arg(mGlobalFileName);
        allWritable = false;
    }

    if(warnUser && !allWritable)
    {
        // Note: We don't ask the user if we should not ask this question again because we can't save the answer.
        errorMsg += i18n("Please contact your system administrator.");
        QString cmdToExec = KStandardDirs::findExe(QString("kdialog"));
        KApplication *app = kapp;
        if(!cmdToExec.isEmpty() && app)
        {
            KProcess lprocess;
            lprocess << cmdToExec << "--title" << app->instanceName() << "--msgbox" << errorMsg.local8Bit();
            lprocess.start(KProcess::Block);
        }
    }
    return allWritable;
}