KInit
autostart.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #define QT_NO_CAST_FROM_ASCII
00021 #include "autostart.h"
00022
00023 #include <kautostart.h>
00024 #include <kglobal.h>
00025 #include <kstandarddirs.h>
00026
00027 class AutoStartItem
00028 {
00029 public:
00030 QString name;
00031 QString service;
00032 QString startAfter;
00033 int phase;
00034 };
00035
00036 AutoStart::AutoStart()
00037 : m_phase(-1), m_phasedone(false)
00038 {
00039 m_startList = new AutoStartList;
00040 KGlobal::dirs()->addResourceType("xdgconf-autostart", NULL, "autostart/");
00041 KGlobal::dirs()->addResourceType("autostart", "xdgconf-autostart", "/");
00042 KGlobal::dirs()->addResourceType("autostart", 0, "share/autostart");
00043 }
00044
00045 AutoStart::~AutoStart()
00046 {
00047 qDeleteAll(*m_startList);
00048 m_startList->clear();
00049 delete m_startList;
00050 }
00051
00052 void
00053 AutoStart::setPhase(int phase)
00054 {
00055 if (phase > m_phase)
00056 {
00057 m_phase = phase;
00058 m_phasedone = false;
00059 }
00060 }
00061
00062 void AutoStart::setPhaseDone()
00063 {
00064 m_phasedone = true;
00065 }
00066
00067 static QString extractName(QString path)
00068 {
00069 int i = path.lastIndexOf(QLatin1Char('/'));
00070 if (i >= 0)
00071 path = path.mid(i+1);
00072 i = path.lastIndexOf(QLatin1Char('.'));
00073 if (i >= 0)
00074 path = path.left(i);
00075 return path;
00076 }
00077
00078 void
00079 AutoStart::loadAutoStartList()
00080 {
00081 const QStringList files = KGlobal::dirs()->findAllResources("autostart",
00082 QString::fromLatin1("*.desktop"),
00083 KStandardDirs::NoDuplicates);
00084
00085 for(QStringList::ConstIterator it = files.begin();
00086 it != files.end();
00087 ++it)
00088 {
00089 KAutostart config(*it);
00090 if( !config.autostarts(QString::fromLatin1("KDE"), KAutostart::CheckAll))
00091 continue;
00092
00093 AutoStartItem *item = new AutoStartItem;
00094 item->name = extractName(*it);
00095 item->service = *it;
00096 item->startAfter = config.startAfter();
00097 item->phase = config.startPhase();
00098 if (item->phase < 0)
00099 item->phase = 0;
00100 m_startList->append(item);
00101 }
00102 }
00103
00104 QString
00105 AutoStart::startService()
00106 {
00107 if (m_startList->isEmpty())
00108 return QString();
00109
00110 while(!m_started.isEmpty())
00111 {
00112
00113
00114 QString lastItem = m_started[0];
00115 QMutableListIterator<AutoStartItem *> it(*m_startList);
00116 while (it.hasNext())
00117 {
00118 AutoStartItem *item = it.next();
00119 if (item->phase == m_phase
00120 && item->startAfter == lastItem)
00121 {
00122 m_started.prepend(item->name);
00123 QString service = item->service;
00124 it.remove();
00125 delete item;
00126 return service;
00127 }
00128 }
00129 m_started.removeFirst();
00130 }
00131
00132
00133 AutoStartItem *item;
00134 QMutableListIterator<AutoStartItem *> it(*m_startList);
00135 while (it.hasNext())
00136 {
00137 item = it.next();
00138 if (item->phase == m_phase
00139 && item->startAfter.isEmpty())
00140 {
00141 m_started.prepend(item->name);
00142 QString service = item->service;
00143 it.remove();
00144 delete item;
00145 return service;
00146 }
00147 }
00148
00149
00150 it = *m_startList;
00151 while (it.hasNext())
00152 {
00153 item = it.next();
00154 if (item->phase == m_phase)
00155 {
00156 m_started.prepend(item->name);
00157 QString service = item->service;
00158 it.remove();
00159 delete item;
00160 return service;
00161 }
00162 }
00163
00164 return QString();
00165 }