diff options
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 33 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication.h | 4 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication_p.h | 3 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 8 |
4 files changed, 48 insertions, 0 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 1e27b5b7c9..0f3f8d8ff2 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -133,6 +133,8 @@ enum ApplicationResourceFlags static unsigned applicationResourceFlags = 0; +QIcon *QGuiApplicationPrivate::app_icon = 0; + QString *QGuiApplicationPrivate::platform_name = 0; QString *QGuiApplicationPrivate::displayName = 0; @@ -523,6 +525,8 @@ QGuiApplication::~QGuiApplication() d->cursor_list.clear(); #endif + delete QGuiApplicationPrivate::app_icon; + QGuiApplicationPrivate::app_icon = 0; delete QGuiApplicationPrivate::platform_name; QGuiApplicationPrivate::platform_name = 0; delete QGuiApplicationPrivate::displayName; @@ -2596,6 +2600,35 @@ void QGuiApplicationPrivate::notifyActiveWindowChange(QWindow *) { } +/*! + \property QGuiApplication::windowIcon + \brief the default window icon + + \sa QWindow::setIcon(), {Setting the Application Icon} +*/ +QIcon QGuiApplication::windowIcon() +{ + return QGuiApplicationPrivate::app_icon ? *QGuiApplicationPrivate::app_icon : QIcon(); +} + +void QGuiApplication::setWindowIcon(const QIcon &icon) +{ + if (!QGuiApplicationPrivate::app_icon) + QGuiApplicationPrivate::app_icon = new QIcon(); + *QGuiApplicationPrivate::app_icon = icon; + if (QGuiApplicationPrivate::is_app_running && !QGuiApplicationPrivate::is_app_closing) + QGuiApplicationPrivate::self->notifyWindowIconChanged(); +} + +void QGuiApplicationPrivate::notifyWindowIconChanged() +{ + QEvent ev(QEvent::ApplicationWindowIconChange); + const QWindowList list = QGuiApplication::topLevelWindows(); + for (int i = 0; i < list.size(); ++i) + QCoreApplication::sendEvent(list.at(i), &ev); +} + + /*! \property QGuiApplication::quitOnLastWindowClosed diff --git a/src/gui/kernel/qguiapplication.h b/src/gui/kernel/qguiapplication.h index 0089d48fa6..6d9a4b2376 100644 --- a/src/gui/kernel/qguiapplication.h +++ b/src/gui/kernel/qguiapplication.h @@ -73,6 +73,7 @@ class QStyleHints; class Q_GUI_EXPORT QGuiApplication : public QCoreApplication { Q_OBJECT + Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon) Q_PROPERTY(QString applicationDisplayName READ applicationDisplayName WRITE setApplicationDisplayName) Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection) Q_PROPERTY(QString platformName READ platformName STORED false) @@ -93,6 +94,9 @@ public: static QWindowList topLevelWindows(); static QWindow *topLevelAt(const QPoint &pos); + static void setWindowIcon(const QIcon &icon); + static QIcon windowIcon(); + static QString platformName(); static QWindow *modalWindow(); diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index 22f1cb9aa8..c23232182c 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -187,6 +187,7 @@ public: static QGuiApplicationPrivate *instance() { return self; } + static QIcon *app_icon; static QString *platform_name; static QString *displayName; @@ -282,6 +283,8 @@ public: // hook reimplemented in QApplication to apply the QStyle function on the QIcon virtual QPixmap applyQIconStyleHelper(QIcon::Mode, const QPixmap &basePixmap) const { return basePixmap; } + virtual void notifyWindowIconChanged(); + static QRect applyWindowGeometrySpecification(const QRect &windowGeometry, const QWindow *window); static void setApplicationState(Qt::ApplicationState state); diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 2382764183..51548aa371 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -776,6 +776,8 @@ void QWindow::setIcon(const QIcon &icon) d->windowIcon = icon; if (d->platformWindow) d->platformWindow->setWindowIcon(icon); + QEvent e(QEvent::WindowIconChange); + QCoreApplication::sendEvent(this, &e); } /*! @@ -786,6 +788,8 @@ void QWindow::setIcon(const QIcon &icon) QIcon QWindow::icon() const { Q_D(const QWindow); + if (d->windowIcon.isNull()) + return QGuiApplication::windowIcon(); return d->windowIcon; } @@ -1940,6 +1944,10 @@ bool QWindow::event(QEvent *ev) hideEvent(static_cast<QHideEvent *>(ev)); break; + case QEvent::ApplicationWindowIconChange: + setIcon(icon()); + break; + case QEvent::WindowStateChange: { Q_D(QWindow); emit windowStateChanged(d->windowState); |