7
#include <kapplication.h>
8
#include <kcmdlineargs.h>
12
#include <kstandarddirs.h>
13
#include <ktemporaryfile.h>
21
typedef QMap<QString, AppletInfo> AppletInfoMap;
23
int main(int argc, char** argv)
25
// We must disguise as Kicker in order to obtain the correct reverseLayout setting.
26
KCmdLineArgs::init(argc, argv, "kicker", 0, KLocalizedString(), "", KLocalizedString(), false);
27
KApplication app(false);
29
QStringList stretchableApplets;
30
stretchableApplets << "taskbarapplet.desktop";
32
QTextStream in (stdin, QIODevice::ReadOnly);
33
QTextStream out(stdout, QIODevice::WriteOnly);
35
QStringList appletIds;
36
AppletInfoMap applets;
38
QRegExp rxGroup("^\\[(.+)\\]$");
39
QRegExp rxKeyValue("([^=]+)=[ \t]*([^\n]+)");
43
while (!(line = in.readLine()).isNull())
45
if (rxGroup.indexIn(line) != -1)
47
currentGroup = rxGroup.cap(1);
51
if (rxKeyValue.indexIn(line) != -1)
53
QString key = rxKeyValue.cap(1);
54
QString value = rxKeyValue.cap(2);
58
appletIds = value.split(",", QString::SkipEmptyParts);
60
else if (key == "FreeSpace")
62
applets[currentGroup].freeSpace = value.toDouble();
64
else if (key == "ConfigFile")
66
applets[currentGroup].configFile = value;
68
else if (key == "DesktopFile")
70
applets[currentGroup].desktopFile = value;
75
if (QApplication::isRightToLeft())
78
QStringList appletIdsRev;
79
QStringList::ConstIterator it;
80
for (it = appletIds.begin(); it != appletIds.end(); ++it)
82
appletIdsRev.prepend(*it);
84
appletIds = appletIdsRev;
86
// Adjust the FreeSpace values
87
for (it = appletIds.begin(); it != appletIds.end(); ++it)
89
applets[*it].freeSpace = 1 - applets[*it].freeSpace;
91
// Take care of stretchable applets.
92
if (stretchableApplets.contains(applets[*it].desktopFile))
94
if (it != appletIds.begin())
96
applets[*it].freeSpace = applets[*(--it)].freeSpace;
101
applets[*it].freeSpace = 0;
107
// Write the changed entries to stdout.
108
if (!appletIds.empty())
110
out << "[General]" << endl;
111
out << "Applets2=" << appletIds.join(",") << endl;
112
QStringList::ConstIterator it;
113
for (it = appletIds.begin(); it != appletIds.end(); ++it)
115
out << "[" << *it << "]" << endl;
116
out << "FreeSpace2=" << applets[*it].freeSpace << endl;
120
// Build a list of childpanel config files.
121
QStringList childPanelConfigFiles;
122
AppletInfoMap::ConstIterator it2;
123
QStringList::ConstIterator it;
124
for (it2 = applets.begin(); it2 != applets.end(); ++it2)
126
if (it2.value().desktopFile == "childpanelextension.desktop")
128
childPanelConfigFiles << it2.value().configFile;
132
if (!childPanelConfigFiles.isEmpty())
134
// Create a temporary kconf_update .upd file for updating the childpanels
135
KTemporaryFile tempFile;
136
tempFile.setSuffix(".upd");
138
QTextStream upd ( &tempFile );
139
for (it = childPanelConfigFiles.begin(); it != childPanelConfigFiles.end(); ++it)
141
upd << "Id=kde_3.4_reverseLayout" << endl;
142
upd << "File=" << *it << endl;
143
upd << "Script=kicker-3.4-reverseLayout" << endl;
148
// Run kconf_update on the childpanel config files.
149
KProcess kconf_update;
150
kconf_update << KStandardDirs::findExe("kconf_update") << tempFile.fileName();
151
kconf_update.execute();