diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index f0431ebd9d..1e27b5b7c9 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -471,6 +471,8 @@ static QWindowGeometrySpecification windowGeometrySpecification; and will make the application wait until a debugger connects to it. \li -session \e session, restores the application from an earlier \l{Session Management}{session}. + \li -qwindowgeometry, sets the geometry of the first window + \li -qwindowtitle, sets the title of the first window \endlist \sa arguments() @@ -1033,6 +1035,9 @@ void QGuiApplicationPrivate::createPlatformIntegration() } else if (arg == "-qwindowgeometry" || (platformName == "xcb" && arg == "-geometry")) { if (++i < argc) windowGeometrySpecification = QWindowGeometrySpecification::fromArgument(argv[i]); + } else if (arg == "-qwindowtitle" || (platformName == "xcb" && arg == "-title")) { + if (++i < argc) + firstWindowTitle = QString::fromLocal8Bit(argv[i]); } else { argv[j++] = argv[i]; } diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index 57c55e1e0f..22f1cb9aa8 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -231,6 +231,8 @@ public: static bool noGrab; QInputMethod *inputMethod; + QString firstWindowTitle; + static QList generic_plugin_list; #ifndef QT_NO_SHORTCUT QShortcutMap shortcutMap; diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 42f61399d9..2382764183 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -432,6 +432,14 @@ void QWindow::setVisible(bool visible) // remove posted quit events when showing a new window QCoreApplication::removePostedEvents(qApp, QEvent::Quit); + if (type() == Qt::Window) { + QString &firstWindowTitle = QGuiApplicationPrivate::instance()->firstWindowTitle; + if (!firstWindowTitle.isEmpty()) { + setTitle(firstWindowTitle); + firstWindowTitle = QString(); + } + } + QShowEvent showEvent; QGuiApplication::sendEvent(this, &showEvent); } diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index d4237b135f..6ef9957fa1 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -60,6 +60,7 @@ class tst_QGuiApplication: public tst_QCoreApplication private slots: void displayName(); + void firstWindowTitle(); void focusObject(); void allWindows(); void topLevelWindows(); @@ -83,6 +84,17 @@ void tst_QGuiApplication::displayName() QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application")); } +void tst_QGuiApplication::firstWindowTitle() +{ + int argc = 3; + char *argv[] = { const_cast("tst_qguiapplication"), const_cast("-qwindowtitle"), const_cast("User Title") }; + QGuiApplication app(argc, argv); + QWindow window; + window.setTitle("Application Title"); + window.show(); + QCOMPARE(window.title(), QString("User Title")); +} + class DummyWindow : public QWindow { public: