Development/Tutorials/Session Management: Difference between revisions

    From KDE TechBase
    No edit summary
    (The page was moved again)
     
    (57 intermediate revisions by 7 users not shown)
    Line 1: Line 1:
    {{Template:I18n/Language Navigation Bar|Development/Tutorials/Session Management}}
    This tutorial was updated and moved to https://develop.kde.org/docs/features/session-managment/


    {{Under Construction}}
    [[Category:MovedDevelop]]
     
    ==About KDE and X11 session management==
     
    KDE, since version 2.0, supports and uses the standard X11R6 session management
    protocol XSMP. The official documentation of the standard can be
    download from the X Consortium's FTP server [http://stuff.mit.edu/afs/sipb/contrib/doc/X11/hardcopy/SM/xsmp.PS.gz ftp.x.org].
     
    KDE also supports the legacy X11R4 and ICCCM session
    management protocols.  Legacy applications that define the <tt>WM_COMMAND</tt>
    property or support the <tt>WM_SAVE_YOURSELF</tt> protocol will be restarted
    with the specified command.  The window geometries will be restored on a best
    effort basis.
     
    Unlike these legacy protocols, the new X11R6 session management gives a
    chance to save application dependent settings when you log out.  A text
    editor, for instance, would save the names of the loaded files and would
    reload them when you log in again.  Another major advantage of the new
    protocol is the support for a clean and safe logout procedure even if the
    users decides not to restore the session next time. The protocol gives
    applications the possibility to interact with the user in case they are in
    danger to lose some data, and to cancel the shutdown process if necessary.
     
    ==Further Reading==
     
    An introductive overview of session management functionality and
    the Qt API for it is available from [http://doc.trolltech.com/4.4/session.html doc.trolltech.com].
     
    In KDE, the classes [http://api.kde.org/4.x-api/kdelibs-apidocs/kdeui/html/classKApplication.html KApplication]
    and [http://api.kde.org/4.x-api/kdelibs-apidocs/kdeui/html/classKMainWindow.html KMainWindow]
    hide all the ugly details from the programmer. Basically, a
    KApplication manages a KConfig configuration object sessionConfig()
    for you, that your application can utilize to store session specific data.
     
    Please read the respective class documentation, especially the one of
    KMainWindow, for a detailed interface description. With the advanced
    functionality in KMainWindow, it's really just a matter of a few lines
    to get even a multi-window application to retains its state between
    different user sessions.
     
    ==Implementing session management in your application==
     
    Here's just a brief overview how things are done. Again, see the
    respective class documentation for details. Imagine you have an
    application with a main window MyWindow inherited from KMainWindow. In
    your main() function, you would then create/restore the application
    windows with something like:
     
    <code cppqt3>
    if (kapp->isRestored()) {
      RESTORE(MyWindow)
    } else {
      // create default application as usual
    }
    </code>
     
    and reimplement the store/restore handlers in MyWindow to save and
    restore all additional settings. For a text editor, that would be the
    loaded files, for example:
     
    <code cppqt3>
    void MyWindow::saveProperties( KConfig* ) {
      // save properties here
    }
     
    void MyWindow::readProperties( KConfig* ) {
      // read properties here
    }
    </code>
     
    Note that standard settings like window sizes, toolbar settings
    etc. are automatically handled by the system.
     
    With KMainWindow::classNameOfToplevel(), it is also possible to
    restore different types of toplevel windows within one application. In
    that case, the RESTORE macro is too primitive, use something like this
    in your main() function instead:
     
    <code cppqt3>
    if (kapp->isRestored()){
      int n = 1;
      while (KMainWindow::canBeRestored(n)) {
        if ( KMainWindow::classNameOfToplevel(n) == "MyWindow1" )
          (new MyWindow1)->restore(n);
        else if ( KMainWindow::classNameOfToplevel(n) == "MyWindow2" )
          (new MyWindow2)->restore(n);
        // and so on....
        n++;
      }
    } else {
      // create default application as usual
    }
    </code>
     
    ==Internal architecture of the KDE session manager==
     
    The session management server in KDE is called '''ksmserver''' and it is
    part of the '''kdebase''' package.  The server interacts with the KDE window
    manager '''kwin''' to save and restore the window geometries and to perform
    legacy session management.  To make session management work, '''ksmserver'''
    has to be started as last process of the X login procedure. This happens
    automatically at the end of the '''startkde''' script.
     
     
    ''Initial Author:'' [mailto:[email protected] Matthias Ettrich]
     
    [[Category:Programming]]
    [[Category:Tutorial]]
    [[Category:FAQs]]

    Latest revision as of 14:11, 18 July 2023

    This tutorial was updated and moved to https://develop.kde.org/docs/features/session-managment/