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; }