[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