[kde-de] KDE3 Session Management
Torsten Foertsch
torsten.foertsch at gmx.net
So Feb 15 14:22:28 CET 2009
Hallo,
ich habe mich gerade in der Liste eingetragen. Daher bin ich mir nicht
so sicher, ob sie der richtige Platz für meine Frage ist. Falls nicht,
verweist mich bitte an die richtige Liste.
Auch muß ich vorweg sagen, daß das hier mein erster Kontakt mit KDE
Programmierung ist, und ich in C++ auch nicht viel Erfahrung habe.
Also, ich habe eine KDE3 Anwendung, die ein Systray-Icon erzeugt und
dann so einiges macht. Sie hat kein KMainWindow. Das Hauptobjekt der
Anwendung ist von KApplication abgeleitet.
Ich möchte erreichen, daß die Applikation einen gewissen Status über
einen KDE-Shutdown / -Startup erhalten kann.
In der Doku zu KApplication habe ich die Funktion saveYourself gefunden.
Allerdings steht dort der Hinweis, daß man sie nicht mehr benutzen
soll. Statt dessen steht dort der folgende Satz:
> For purposes without KMainWindow, create an instance of
> KSessionManaged and reimplement the functions
> KSessionManaged::commitData() and/or KSessionManaged::saveState()
Mit meinem begrenzten C++ Verstand interpretiere ich das so, daß ich
eine Klasse erzeugen soll, die von KSessionManaged abgeleitet ist. In
dieser Klasse soll ich commitData und saveState implementieren. Ist
diese Interpretation richtig?
Ich habe also folgendes gemacht (MyApp ist von KApplication abgeleitet):
MySession::MySession(MyApp* app)
: KSessionManaged()
{
fprintf(stderr, "Session Constructor\n");
appInstance=app;
...
}
bool MySession::saveState(QSessionManager& sm)
{
KConfig* conf=appInstance->sessionConfig();
fprintf(stderr, "saveState\n");
conf->setGroup(QString::fromLatin1("Restore"));
conf->writeEntry(QString::fromLatin1("ExecMode"), execMode);
...
return true;
}
bool MySession::commitData(QSessionManager& sm) {
return true;
}
MySession::~MySession() {}
Leider entsteht auf diese Weise keine Datei namens
~/.kde/share/config/session/myapp_... Auch scheint die saveState
Funktion nicht aufgerufen zu werden; das Printout erscheint nicht.
Wie macht man es richtig?
Ich habe auch schon probiert, in MyApp die Funktion saveState zu
implementieren. Dann entsteht zwar eine Datei, die der gewünschten sehr
ähnlich sieht, aber der Name stimmt nicht ganz. Die Dateiennamen in
~/.kde/share/config/session/ haben alle das Format NAME_ID_ZAHL1_ZAHL2.
Die erzeugte Datei stimmt in NAME und ID mit dem -session Parameter
überein, den mein Programm beim Neustart übergeben kriegt. Die beiden
ZAHLEN stimmen nicht. Wie gesagt, wie macht man es richtig?
Danke,
Torsten