diff options
author | David Faure <david.faure@kdab.com> | 2014-04-04 19:28:43 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-02 10:03:31 +0200 |
commit | 532b94e98f3d7c74599b7093a3c353e3a747f7a4 (patch) | |
tree | cbb963bfa349f67da1ce20ce4c781979ec132f14 | |
parent | 9e44204bf84edcfe2befaaa9b7280257c9268548 (diff) |
Add support for -qwindowicon command line argument.
[ChangeLog][QtGui][QGuiApplication] Add support for -icon command line
argument on X11, add -qwindowicon on all platforms.
Change-Id: Iacc602466699bf634d8b34aab7ed73c83fd9844f
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 6 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication_p.h | 1 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 5 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/icons/appicon.png | bin | 0 -> 175 bytes | |||
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/icons/usericon.png | bin | 0 -> 14743 bytes | |||
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/qguiapplication.pro | 2 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp | 19 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.qrc | 6 |
8 files changed, 38 insertions, 1 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index f0ef39e809..01b888919d 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -495,6 +495,7 @@ static QWindowGeometrySpecification windowGeometrySpecification; \l{Session Management}{session}. \li -qwindowgeometry, sets the geometry of the first window \li -qwindowtitle, sets the title of the first window + \li -qwindowicon, sets the default window icon \endlist The following standard command line options are available for X11: @@ -1115,6 +1116,11 @@ void QGuiApplicationPrivate::createPlatformIntegration() } else if (arg == "-qwindowtitle" || (platformName == "xcb" && arg == "-title")) { if (++i < argc) firstWindowTitle = QString::fromLocal8Bit(argv[i]); + } else if (arg == "-qwindowicon" || (platformName == "xcb" && arg == "-icon")) { + if (++i < argc) { + const QString icon = QString::fromLocal8Bit(argv[i]); + forcedWindowIcon = QDir::isAbsolutePath(icon) ? QIcon(icon) : QIcon::fromTheme(icon); + } } else { argv[j++] = argv[i]; } diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index 8f6149d1ed..782a4b34b3 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -234,6 +234,7 @@ public: QInputMethod *inputMethod; QString firstWindowTitle; + QIcon forcedWindowIcon; static QList<QObject *> generic_plugin_list; #ifndef QT_NO_SHORTCUT diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 6dcc3df166..2b0c95b2b6 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -436,11 +436,14 @@ void QWindow::setVisible(bool visible) QCoreApplication::removePostedEvents(qApp, QEvent::Quit); if (type() == Qt::Window) { - QString &firstWindowTitle = QGuiApplicationPrivate::instance()->firstWindowTitle; + QGuiApplicationPrivate *app_priv = QGuiApplicationPrivate::instance(); + QString &firstWindowTitle = app_priv->firstWindowTitle; if (!firstWindowTitle.isEmpty()) { setTitle(firstWindowTitle); firstWindowTitle = QString(); } + if (!app_priv->forcedWindowIcon.isNull()) + setIcon(app_priv->forcedWindowIcon); } QShowEvent showEvent; diff --git a/tests/auto/gui/kernel/qguiapplication/icons/appicon.png b/tests/auto/gui/kernel/qguiapplication/icons/appicon.png Binary files differnew file mode 100644 index 0000000000..b5d3ecbddf --- /dev/null +++ b/tests/auto/gui/kernel/qguiapplication/icons/appicon.png diff --git a/tests/auto/gui/kernel/qguiapplication/icons/usericon.png b/tests/auto/gui/kernel/qguiapplication/icons/usericon.png Binary files differnew file mode 100644 index 0000000000..8d703640c1 --- /dev/null +++ b/tests/auto/gui/kernel/qguiapplication/icons/usericon.png diff --git a/tests/auto/gui/kernel/qguiapplication/qguiapplication.pro b/tests/auto/gui/kernel/qguiapplication/qguiapplication.pro index cd363bab31..895c2a0307 100644 --- a/tests/auto/gui/kernel/qguiapplication/qguiapplication.pro +++ b/tests/auto/gui/kernel/qguiapplication/qguiapplication.pro @@ -7,3 +7,5 @@ INCLUDEPATH += $$CORE_TEST_PATH TARGET = tst_qguiapplication QT += gui-private SOURCES += tst_qguiapplication.cpp + +RESOURCES = tst_qguiapplication.qrc diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index 6ef9957fa1..eea72cd246 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -61,6 +61,7 @@ class tst_QGuiApplication: public tst_QCoreApplication private slots: void displayName(); void firstWindowTitle(); + void windowIcon(); void focusObject(); void allWindows(); void topLevelWindows(); @@ -95,6 +96,24 @@ void tst_QGuiApplication::firstWindowTitle() QCOMPARE(window.title(), QString("User Title")); } +void tst_QGuiApplication::windowIcon() +{ + int argc = 3; + char *argv[] = { const_cast<char*>("tst_qguiapplication"), const_cast<char*>("-qwindowicon"), const_cast<char*>(":/icons/usericon.png") }; + QGuiApplication app(argc, argv); + QIcon appIcon(":/icons/appicon.png"); + app.setWindowIcon(appIcon); + + QWindow window; + window.show(); + + QIcon userIcon(":/icons/usericon.png"); + // Comparing icons is hard. cacheKey() differs because the icon was independently loaded. + // So we use availableSizes, after making sure that the app and user icons do have different sizes. + QVERIFY(userIcon.availableSizes() != appIcon.availableSizes()); + QCOMPARE(window.icon().availableSizes(), userIcon.availableSizes()); +} + class DummyWindow : public QWindow { public: diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.qrc b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.qrc new file mode 100644 index 0000000000..b26fba37b9 --- /dev/null +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.qrc @@ -0,0 +1,6 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource prefix="/"> + <file>icons/usericon.png</file> + <file>icons/appicon.png</file> +</qresource> +</RCC> |