Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-30011

session management never works.

    XMLWordPrintable

Details

    Description

      First of all, although the documentation of Qt 5 mentions QApplication::commitData() and QApplication::saveState() to manage a session and says they are virtual functions, the functions are not even declared in both of QApplication and QGuiApplication.

      I found that two signals in QGuiApplication, commitDataRequest() and saveStateRequest(), but I figured out that they're never called.
      commitDataRequest() is emitted only once in QGuiApplicationPrivate::commitData()

      [xylosper@mbp13 gui]$ pwd
      /home/xylosper/downloads/qt-everywhere-opensource-src-5.0.1/qtbase/src/gui
      [xylosper@mbp13 gui]$ grep -r commitDataRequest *
      kernel/qguiapplication.h:    void commitDataRequest(QSessionManager &sessionManager);
      kernel/qguiapplication.cpp:                See isSessionRestored(), sessionId() and commitDataRequest() and
      kernel/qguiapplication.cpp:            commitDataRequest(),
      kernel/qguiapplication.cpp:    \fn void QGuiApplication::commitDataRequest(QSessionManager &manager)
      kernel/qguiapplication.cpp:    \sa isSessionRestored(), sessionId(), commitDataRequest(), {Session Management}
      kernel/qguiapplication.cpp:    \sa sessionId(), commitDataRequest(), saveStateRequest()
      kernel/qguiapplication.cpp:    This is true when commitDataRequest() and saveStateRequest() are emitted,
      kernel/qguiapplication.cpp:    \sa sessionId(), commitDataRequest(), saveStateRequest()
      kernel/qguiapplication.cpp:    \sa isSessionRestored(), sessionKey(), commitDataRequest(), saveStateRequest()
      kernel/qguiapplication.cpp:    \sa isSessionRestored(), sessionId(), commitDataRequest(), saveStateRequest()
      kernel/qguiapplication.cpp:    emit q->commitDataRequest(manager);
      

      However, QGuiApplicationPrivate::commitData() is only declared and never called.

      [xylosper@mbp13 gui]$ grep -r commitData\( *
      doc/snippets/code/src_gui_kernel_qapplication.cpp:void MyApplication::commitData(QSessionManager& manager)
      kernel/qguiapplication_p.h:    void commitData(QSessionManager& sm);
      kernel/qsessionmanager.cpp:    virtual functions QApplication::commitData() and QApplication::saveState().
      kernel/qsessionmanager.cpp:    commitData() function does this if some top-level window rejected its
      kernel/qsessionmanager.cpp:    The session key changes with every call of commitData() or saveState().
      kernel/qsessionmanager.cpp:    Here's an example of how an application's QApplication::commitData() might
      kernel/qsessionmanager.cpp:    \sa QApplication::commitData(), release(), cancel()
      kernel/qsessionmanager.cpp:    application may then return immediately from the QApplication::commitData()
      kernel/qguiapplication.cpp:void QGuiApplicationPrivate::commitData(QSessionManager& manager)
      

      For QGuiApplication::saveStateRequest(), the results are same, and these things are true for in latest stable qtbase branch.
      Therefore, session managing never works in Qt 5 currently.

      Attachments

        For Gerrit Dashboard: QTBUG-30011
        # Subject Branch Project Status CR V

        Activity

          People

            dfaure_kdab David Faure
            xylosper Byoung-young Lee
            Votes:
            2 Vote for this issue
            Watchers:
            9 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes