summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-08-06 09:20:52 -0500
committerSlávek Banko <slavek.banko@axis.cz>2015-12-15 19:49:40 +0100
commit1f7ae30324b12f04e6addea0338c85d738d3561f (patch)
treec14a25c300e909bca98714a8aa368ad5eb579531
parent3dccb6a206768044f9f5852de5f74d4a86b2a0e0 (diff)
downloadqt3-1f7ae30324b12f04e6addea0338c85d738d3561f.tar.gz
qt3-1f7ae30324b12f04e6addea0338c85d738d3561f.zip
Allow TQApplication objects to be constructed without a session manager
This relates to Bug 760 (cherry picked from commit 49075fd69d70b7850febe2fbc11f81d2d4e62cf1)
-rw-r--r--src/kernel/qapplication.cpp73
-rw-r--r--src/kernel/qapplication.h5
2 files changed, 64 insertions, 14 deletions
diff --git a/src/kernel/qapplication.cpp b/src/kernel/qapplication.cpp
index 960db1e..d11e6bd 100644
--- a/src/kernel/qapplication.cpp
+++ b/src/kernel/qapplication.cpp
@@ -730,10 +730,9 @@ void QApplication::process_cmdline( int* argcptr, char ** argv )
//######### BINARY COMPATIBILITY constructor
QApplication::QApplication( int &argc, char **argv )
{
- construct( argc, argv, GuiClient );
+ construct( argc, argv, GuiClient, true );
}
-
/*!
Constructs an application object with \a argc command line arguments
in \a argv. If \a GUIenabled is TRUE, a GUI application is
@@ -775,7 +774,55 @@ QApplication::QApplication( int &argc, char **argv )
QApplication::QApplication( int &argc, char **argv, bool GUIenabled )
{
- construct( argc, argv, GUIenabled ? GuiClient : Tty );
+ construct( argc, argv, GUIenabled ? GuiClient : Tty, true );
+}
+
+/*!
+ Constructs an application object with \a argc command line arguments
+ in \a argv. If \a GUIenabled is TRUE, a GUI application is
+ constructed, otherwise a non-GUI (console) application is created.
+ If \a SMEnabled is TRUE, session management support is enabled (default).
+
+ Set \a GUIenabled to FALSE for programs without a graphical user
+ interface that should be able to run without a window system.
+
+ Set \a SMEnabled to FALSE to disable session management.
+ Session management cannot be enabled at a later time if disabled here.
+
+ On X11, the window system is initialized if \a GUIenabled is TRUE.
+ If \a GUIenabled is FALSE, the application does not connect to the
+ X-server.
+ On Windows and Macintosh, currently the window system is always
+ initialized, regardless of the value of GUIenabled. This may change in
+ future versions of Qt.
+
+ The following example shows how to create an application that
+ uses a graphical interface when available.
+ \code
+ int main( int argc, char **argv )
+ {
+#ifdef Q_WS_X11
+ bool useGUI = getenv( "DISPLAY" ) != 0;
+#else
+ bool useGUI = TRUE;
+#endif
+ QApplication app(argc, argv, useGUI);
+
+ if ( useGUI ) {
+ //start GUI version
+ ...
+ } else {
+ //start non-GUI version
+ ...
+ }
+ return app.exec();
+ }
+\endcode
+*/
+
+QApplication::QApplication( int &argc, char **argv, bool GUIenabled, bool SMenabled )
+{
+ construct( argc, argv, GUIenabled ? GuiClient : Tty, SMenabled );
}
/*!
@@ -788,7 +835,7 @@ QApplication::QApplication( int &argc, char **argv, bool GUIenabled )
*/
QApplication::QApplication( int &argc, char **argv, Type type )
{
- construct( argc, argv, type );
+ construct( argc, argv, type, true );
}
Q_EXPORT void qt_ucm_initialize( QApplication *theApp )
@@ -797,12 +844,12 @@ Q_EXPORT void qt_ucm_initialize( QApplication *theApp )
return;
int argc = theApp->argc();
char **argv = theApp->argv();
- theApp->construct( argc, argv, qApp->type() );
+ theApp->construct( argc, argv, qApp->type(), true );
Q_ASSERT( qApp == theApp );
}
-void QApplication::construct( int &argc, char **argv, Type type )
+void QApplication::construct( int &argc, char **argv, Type type, bool enable_sm )
{
qt_appType = type;
qt_is_gui_used = (type != Tty);
@@ -817,7 +864,7 @@ void QApplication::construct( int &argc, char **argv, Type type )
qt_init( &argc, argv, type ); // Must be called before initialize()
process_cmdline( &argc, argv );
- initialize( argc, argv );
+ initialize( argc, argv, enable_sm );
if ( qt_is_gui_used )
qt_maxWindowRect = desktop()->rect();
if ( eventloop )
@@ -944,7 +991,7 @@ void QApplication::init_precmdline()
Initializes the QApplication object, called from the constructors.
*/
-void QApplication::initialize( int argc, char **argv )
+void QApplication::initialize( int argc, char **argv, bool enable_sm )
{
#ifdef QT_THREAD_SUPPORT
qt_mutex = new QMutex( TRUE );
@@ -963,10 +1010,12 @@ void QApplication::initialize( int argc, char **argv )
is_app_running = TRUE; // no longer starting up
#ifndef QT_NO_SESSIONMANAGER
- // connect to the session manager
- if ( !session_key )
- session_key = new QString;
- session_manager = new QSessionManager( qApp, session_id, *session_key );
+ if (enable_sm) {
+ // connect to the session manager
+ if ( !session_key )
+ session_key = new QString;
+ session_manager = new QSessionManager( qApp, session_id, *session_key );
+ }
#endif
}
diff --git a/src/kernel/qapplication.h b/src/kernel/qapplication.h
index 39f7858..dd594fd 100644
--- a/src/kernel/qapplication.h
+++ b/src/kernel/qapplication.h
@@ -76,6 +76,7 @@ class Q_EXPORT QApplication : public QObject
public:
QApplication( int &argc, char **argv );
QApplication( int &argc, char **argv, bool GUIenabled );
+ QApplication( int &argc, char **argv, bool GUIenabled, bool SMenabled );
enum Type { Tty, GuiClient, GuiServer };
QApplication( int &argc, char **argv, Type );
#if defined(Q_WS_X11)
@@ -320,8 +321,8 @@ protected:
bool event(QEvent *);
private:
- void construct( int &argc, char **argv, Type );
- void initialize( int, char ** );
+ void construct( int &argc, char **argv, Type, bool enable_sm );
+ void initialize( int, char **, bool enable_sm = true );
void init_precmdline();
void process_cmdline( int* argcptr, char ** argv );
bool internalNotify( QObject *, QEvent * );