All pastes #1696823 Raw Edit

Unnamed

public text v1 · immutable
#1696823 ·published 2009-12-01 17:52 UTC
rendered paste body
Index: kautostart.cpp
===================================================================
--- kautostart.cpp	(revision 1057191)
+++ kautostart.cpp	(working copy)
@@ -33,7 +33,9 @@
 class KAutostart::Private
 {
     public:
-        Private() : df(0)
+        Private()
+            : df(0),
+              copyIfNeededChecked(false)
         {
         }
 
@@ -42,10 +44,33 @@
             delete df;
         }
 
+        void copyIfNeeded();
+
         QString name;
         KDesktopFile *df;
+        bool copyIfNeededChecked;
 };
 
+void KAutostart::Private::copyIfNeeded()
+{
+    if (copyIfNeededChecked) {
+        return;
+    }
+
+    const QString local = KGlobal::dirs()->locateLocal("autostart", name);
+
+    if (!QFile::exists(local)) {
+        const QString global = KGlobal::dirs()->locate("autostart", name);
+        if (!global.isEmpty()) {
+            KDesktopFile *newDf = df->copyTo(local);
+            delete df;
+            df = new KDesktopFile("autostart", name);
+        }
+    }
+
+    copyIfNeededChecked = true;
+}
+
 KAutostart::KAutostart(const QString& entryName, QObject* parent)
     : QObject(parent),
       d(new Private)
@@ -60,7 +85,14 @@
         d->name.append(".desktop");
     }
 
-    d->df = new KDesktopFile("autostart", d->name);
+    const QString path = KGlobal::dirs()->locate("autostart", d->name);
+    if (path.isEmpty()) {
+        // just a new KDesktopFile, since we have nothing to use
+        d->df = new KDesktopFile("autostart", d->name);
+        d->copyIfNeededChecked = true;
+    } else {
+        d->df = new KDesktopFile("autostart", path);
+    }
 }
 
 KAutostart::~KAutostart()
@@ -70,6 +102,11 @@
 
 void KAutostart::setAutostarts(bool autostart)
 {
+    if (d->df->desktopGroup().readEntry("Hidden", false) == autostart) {
+        return;
+    }
+
+    d->copyIfNeeded();
     d->df->desktopGroup().writeEntry("Hidden", !autostart);
 }
 
@@ -118,7 +155,7 @@
     return cg.readEntry(list[2], defaultValue);
 }
 
-bool KAutostart::checkAllowedEnvironment( const QString& environment ) const
+bool KAutostart::checkAllowedEnvironment(const QString& environment) const
 {
     QStringList allowed = allowedEnvironments();
     if (!allowed.isEmpty()) {
@@ -140,6 +177,11 @@
 
 void KAutostart::setCommand(const QString &command)
 {
+    if (d->df->desktopGroup().readEntry("Exec", QString()) == command) {
+        return;
+    }
+
+    d->copyIfNeeded();
     d->df->desktopGroup().writeEntry("Exec", command);
 }
 
@@ -150,6 +192,11 @@
 
 void KAutostart::setVisibleName(const QString &name)
 {
+    if (d->df->desktopGroup().readEntry("Name", QString()) == name) {
+        return;
+    }
+
+    d->copyIfNeeded();
     d->df->desktopGroup().writeEntry("Name", name);
 }
 
@@ -165,6 +212,11 @@
 
 void KAutostart::setCommandToCheck(const QString &exec)
 {
+    if (d->df->desktopGroup().readEntry("TryExec", QString()) == exec) {
+        return;
+    }
+
+    d->copyIfNeeded();
     d->df->desktopGroup().writePathEntry("TryExec", exec);
 }
 
@@ -209,6 +261,11 @@
             break;
     }
 
+    if (d->df->desktopGroup().readEntry("X-KDE-autostart-phase", QString()) == data) {
+        return;
+    }
+
+    d->copyIfNeeded();
     d->df->desktopGroup().writeEntry("X-KDE-autostart-phase", data);
 }
 
@@ -219,6 +276,11 @@
 
 void KAutostart::setAllowedEnvironments(const QStringList& environments)
 {
+    if (d->df->desktopGroup().readEntry("OnlyShowIn", QStringList()) == environments) {
+        return;
+    }
+
+    d->copyIfNeeded();
     d->df->desktopGroup().writeXdgListEntry("OnlyShowIn", environments);
 }
 
@@ -254,6 +316,11 @@
 
 void KAutostart::setExcludedEnvironments(const QStringList& environments)
 {
+    if (d->df->desktopGroup().readEntry("NotShowIn", QStringList()) == environments) {
+        return;
+    }
+
+    d->copyIfNeeded();
     d->df->desktopGroup().writeXdgListEntry("NotShowIn", environments);
 }