QSessionManager - Access to the session manager
#include <qsessionmanager.h>
Inherits QObject.
Public Members
QString sessionId () const
bool allowsInteraction ()
bool allowsErrorInteraction ()
void release ()
void cancel ()
enum RestartHint { RestartIfRunning, RestartAnyway,
RestartImmediately, RestartNever }
void setRestartHint ( RestartHint )
RestartHint restartHint () const
void setRestartCommand ( const QStringList & )
QStringList restartCommand () const
void setDiscardCommand ( const QStringList & )
QStringList discardCommand () const
void setProperty ( const QString & name, const QString &
value )
void setProperty ( const QString & name, const QStringList
& value )
bool isPhase2 () const
void requestPhase2 ()
DESCRIPTION
The QSessionManager class provides access to the session
manager.
The session manager is responsible for session management,
most importantly interruption and resumption.
QSessionManager provides an interface between the
application and the session manager, so that the program
can work well with the session manager. In Qt, the session
management requests for action are handled by the two
virtual functions QApplication::commitData() and
QApplication::saveState(). Both functions provide a
reference to a session manager object as argument, thus
allowing the application to communicate with the session
manager.
During a session management action, i.e. within one of the
two mentioned functions, no user interaction is possible,
unless the application got explicit permission from the
session manager. You can ask for permission by calling
allowsInteraction() or, if it's really urgent,
allowsErrorInteraction(). Qt does not enforce this, but
the session manager may. Perhaps.
cancel. The default commitData() function does that if
some top-level window rejected its closeEvent().
For sophisticated session managers as provided on
Unix/X11, QSessionManager offers further possibilities to
fine-tune an application's session management behaviour:
setRestartCommand(), setDiscardCommand(),
setRestartHint(), setProperty(), requestPhase2(). Please
see the respective function descriptions for further
details.
Member Type Documentation
QSessionManager::RestartHint
This enum type defines the circumstances under which this
application wants to be restarted by the session manager.
The current values are:
RestartIfRunning - if the application still runs by the
time the session is shut down, it wants to be
restarted at the start of the next session.
RestartAnyway - the application wants to be started at the
start of the next session, no matter what. (This is
useful for utilities that run just after startup,
then quit.)
RestartImmediately - the application wants to be started
immediately whenever it is not running.
RestartNever - the application does not want to be
restarted automatically.
The default hint is RestartIfRunning.
MEMBER FUNCTION DOCUMENTATION
bool QSessionManager::allowsErrorInteraction ()
Like allowsInteraction() but tells the session manager in
addition that an error occurred. Session managers may give
error interaction request higher priority. That means it
is more likely that an error interaction is granted.
However, you are still not guaranteed that the session
manager will grant your request.
See also allowsInteraction(), release() and cancel().
bool QSessionManager::allowsInteraction ()
Asks the session manager for permission to interact with
the user. Returns TRUE if the interaction was granted,
FALSE otherwise.
The rationale behind this mechanism is to make it possible
to synchronize user interaction during a shutdown.
simultaneously to commit their data, resulting in a much
faster shutdown.
When the interaction is done we strongly recommend
releasing the user interaction semaphore with a call to
release(). This way, other applications may get the chance
to interact with the user while your application is still
busy saving data. (The semaphore is implicitly released
when the application exits.)
If the user decides to cancel the shutdown process during
the interaction phase, you must tell the session manager
so by calling cancel().
Here's an example usage of the mentioned functions that
may occur in the QApplication::commitData() function of an
application:
void MyApplication::commitData( QSessionManager& sm ) {
if ( sm.allowsInteraction() ) {
switch ( QMessageBox::warning( yourMainWindow, "Application Name",
"Save changes to Document Foo?",
tr("&Yes"),
tr("&No"),
tr("Cancel"),
0, 2) ) {
case 0: // yes
sm.release();
// save document here. If saving fails, call sm.cancel()
break;
case 1: // no
break;
default: // cancel
sm.cancel();
break;
}
} else {
// we did not get permission to interact, then
// do something reasonable instead.
}
}
If an error occurred within the application while saving
its data, you may want to try allowsErrorInteraction()
instead.
See also QApplication::commitData(), release() and
cancel().
void QSessionManager::cancel ()
Tells the session manager to cancel the shutdown process.
Applications should not call this function without asking
the user first.
QStringList QSessionManager::discardCommand () const
Returns the currently set discard command.
See also setDiscardCommand(), restartCommand() and
setRestartCommand().
bool QSessionManager::isPhase2 () const
Returns whether the session manager is currently
performing a second session management phase.
See also requestPhase2().
void QSessionManager::release ()
Releases the session manager's interaction semaphore after
an interaction phase.
See also allowsInteraction() and allowsErrorInteraction().
void QSessionManager::requestPhase2 ()
Requests a second session management phase for the
application. The application may then return immediately
from the QApplication::commitData() or
QApplication::saveState() function, and they will be
called again once most/all other applications have
finished their session management.
The two phases are useful for applications like X11 window
manager, that need to store informations about other
application's windows and therefore have to wait until
these applications finished their respective session
management tasks.
Note that if another application has requested a second
phase, it may get called before, simultaneously with, or
after your application's second phase.
See also isPhase2().
QStringList QSessionManager::restartCommand () const
Returns the currently set restart command.
See also setRestartCommand() and restartHint().
QSessionManager::RestartHint QSessionManager::restartHint() const
Returns the application's current restart hint. The
default is RestartIfRunning.
See also setRestartHint().
QString QSessionManager::sessionId () const
Returns the identifier of the current session.
session, this identifier is the same as it was in that
previous session.
See also QApplication::sessionId().
void QSessionManager::setDiscardCommand ( const QStringList & )
See also discardCommand() and setRestartCommand().
void QSessionManager::setProperty ( const QString & name, const
QString & value )
Low-level write access to the application's identification
and state record kept in the session manager.
void QSessionManager::setProperty ( const QString & name, const
QStringList & value )
Low-level write access to the application's identification
and state record kept in the session manager.
void QSessionManager::setRestartCommand ( const QStringList &
command )
If the session manager is capable of restoring sessions,
it will execute command in order to restore the
application. The command defaults to
appname -session id
The -session option is mandatory, otherwise QApplication
can not tell whether it has been restored or what the
current session identifier is. See
QApplication::isSessionRestored() and
QApplication::sessionId() for details. If your application
is very simple, it may be possible to store the entire
application state in additional command line options. In
general, this is a very bad idea, since command lines are
often limited to a few hundred bytes. Instead, use
temporary files or a database for this purpose. By marking
the data with the unique sessionId(), you will be able to
restore the application in a future session.
See also restartCommand(), setDiscardCommand() and
setRestartHint().
void QSessionManager::setRestartHint ( RestartHint hint )
Sets the application's restart hint to hint. On
application start-up the hint is set to RestartIfRunning.
Note that these flags are only hints, a session manager
may or may not obey them.
We recommend setting the restart hint in
QApplication::saveState() since most session managers
perform a checkpoint shortly after an application's
startup.
SEE ALSO
http://doc.trolltech.com/qsessionmanager.html
http://www.trolltech.com/faq/tech.html
COPYRIGHT
Copyright 1992-2001 Trolltech AS,
http://www.trolltech.com. See the license file included
in the distribution for a complete license statement.
AUTHOR
Generated automatically from the source code.
BUGS
If you find a bug in Qt, please report it as described in
http://doc.trolltech.com/bughowto.html. Good bug reports
make our job much simpler. Thank you.
In case of content or formattting problems with this
manual page, please report them to qt-bugs@trolltech.com.
Please include the name of the manual page
(qsessionmanager.3qt) and the Qt version (2.3.1).
Man(1) output converted with
man2html