summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2014-04-04 19:28:43 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-05-02 10:03:31 +0200
commit532b94e98f3d7c74599b7093a3c353e3a747f7a4 (patch)
treecbb963bfa349f67da1ce20ce4c781979ec132f14
parent9e44204bf84edcfe2befaaa9b7280257c9268548 (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.cpp6
-rw-r--r--src/gui/kernel/qguiapplication_p.h1
-rw-r--r--src/gui/kernel/qwindow.cpp5
-rw-r--r--tests/auto/gui/kernel/qguiapplication/icons/appicon.pngbin0 -> 175 bytes
-rw-r--r--tests/auto/gui/kernel/qguiapplication/icons/usericon.pngbin0 -> 14743 bytes
-rw-r--r--tests/auto/gui/kernel/qguiapplication/qguiapplication.pro2
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp19
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.qrc6
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
new file mode 100644
index 0000000000..b5d3ecbddf
--- /dev/null
+++ b/tests/auto/gui/kernel/qguiapplication/icons/appicon.png
Binary files differ
diff --git a/tests/auto/gui/kernel/qguiapplication/icons/usericon.png b/tests/auto/gui/kernel/qguiapplication/icons/usericon.png
new file mode 100644
index 0000000000..8d703640c1
--- /dev/null
+++ b/tests/auto/gui/kernel/qguiapplication/icons/usericon.png
Binary files differ
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>