Details
-
Bug
-
Resolution: Duplicate
-
P1: Critical
-
5.0.1, 5.1.0
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 |
64767,7 | Bring back Qt4 X11 session management functionality. | dev | qt/qtbase | Status: MERGED | +2 | 0 |