summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-08-10 12:14:37 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-08-10 12:14:37 -0500
commitb24c4d5955f355356f52bc4b48c5427a7b487031 (patch)
tree5c9f65ea5f89ebf0c1591527ad3baf257c010065
parent76192ffc96b326f57cf932ed68600a3017a76fab (diff)
downloadqt3-b24c4d5955f355356f52bc4b48c5427a7b487031.tar.gz
qt3-b24c4d5955f355356f52bc4b48c5427a7b487031.zip
Add new delayed initialization constructor to QApplication
-rw-r--r--src/kernel/qapplication.cpp97
-rw-r--r--src/kernel/qapplication.h6
2 files changed, 103 insertions, 0 deletions
diff --git a/src/kernel/qapplication.cpp b/src/kernel/qapplication.cpp
index 7296f4c..849c41c 100644
--- a/src/kernel/qapplication.cpp
+++ b/src/kernel/qapplication.cpp
@@ -923,6 +923,103 @@ QApplication::QApplication(Display *dpy, int argc, char **argv,
#endif // Q_WS_X11
+QApplication::QApplication( bool delayed_init ) {
+ if (!delayed_init) {
+ qWarning( "QApplication: incorrect constructor likely specified." );
+ }
+}
+
+#if defined(Q_WS_X11)
+/*!
+ Create an application, given an already open display \a dpy. If \a
+ visual and \a colormap are non-zero, the application will use those as
+ the default Visual and Colormap contexts.
+
+ \warning Qt only supports TrueColor visuals at depths higher than 8
+ bits-per-pixel.
+
+ This is available only on X11.
+*/
+
+void QApplication::doLateInitialization( Display* dpy, HANDLE visual, HANDLE colormap )
+{
+ static int aargc = 1;
+ // ### a string literal is a cont char*
+ // ### using it as a char* is wrong and could lead to segfaults
+ // ### if aargv is modified someday
+ static char *aargv[] = { (char*)"unknown", 0 };
+
+ app_argc = aargc;
+ app_argv = aargv;
+
+ qt_appType = GuiClient;
+ qt_is_gui_used = TRUE;
+ qt_appType = GuiClient;
+ init_precmdline();
+ // ... no command line.
+
+ if ( ! dpy ) {
+#ifdef QT_CHECK_STATE
+ qWarning( "QApplication: invalid Display* argument." );
+#endif // QT_CHECK_STATE
+
+ qt_init( &aargc, aargv, GuiClient );
+ } else {
+ qt_init( dpy, visual, colormap );
+ }
+
+ initialize( aargc, aargv );
+
+ if ( qt_is_gui_used )
+ qt_maxWindowRect = desktop()->rect();
+ if ( eventloop )
+ eventloop->appStartingUp();
+}
+
+/*!
+ Create an application, given an already open display \a dpy and using
+ \a argc command line arguments in \a argv. If \a
+ visual and \a colormap are non-zero, the application will use those as
+ the default Visual and Colormap contexts.
+
+ \warning Qt only supports TrueColor visuals at depths higher than 8
+ bits-per-pixel.
+
+ This is available only on X11.
+
+*/
+void QApplication::doLateInitialization(Display *dpy, int argc, char **argv,
+ HANDLE visual, HANDLE colormap)
+{
+ qt_appType = GuiClient;
+ qt_is_gui_used = TRUE;
+ qt_appType = GuiClient;
+ init_precmdline();
+
+ app_argc = argc;
+ app_argv = argv;
+
+ if ( ! dpy ) {
+#ifdef QT_CHECK_STATE
+ qWarning( "QApplication: invalid Display* argument." );
+#endif // QT_CHECK_STATE
+
+ qt_init( &argc, argv, GuiClient );
+ } else {
+ qt_init(dpy, visual, colormap);
+ }
+
+ process_cmdline( &argc, argv );
+ initialize(argc, argv);
+
+ if ( qt_is_gui_used )
+ qt_maxWindowRect = desktop()->rect();
+ if ( eventloop )
+ eventloop->appStartingUp();
+}
+
+
+#endif // Q_WS_X11
void QApplication::init_precmdline()
{
diff --git a/src/kernel/qapplication.h b/src/kernel/qapplication.h
index 39f7858..8378135 100644
--- a/src/kernel/qapplication.h
+++ b/src/kernel/qapplication.h
@@ -74,6 +74,7 @@ class Q_EXPORT QApplication : public QObject
{
Q_OBJECT
public:
+ QApplication( bool delayed_init );
QApplication( int &argc, char **argv );
QApplication( int &argc, char **argv, bool GUIenabled );
enum Type { Tty, GuiClient, GuiServer };
@@ -85,6 +86,11 @@ public:
#endif
virtual ~QApplication();
+#if defined(Q_WS_X11)
+ void doLateInitialization( Display* dpy, HANDLE visual = 0, HANDLE cmap = 0 );
+ void doLateInitialization( Display *dpy, int argc, char **argv, HANDLE visual = 0, HANDLE cmap= 0 );
+#endif
+
int argc() const;
char **argv() const;