diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/wayland/qwaylanddecoration.cpp | 15 | ||||
-rw-r--r-- | src/plugins/platforms/wayland/qwaylandwindow.cpp | 8 | ||||
-rw-r--r-- | src/plugins/platforms/wayland/qwaylandwindow.h | 14 |
3 files changed, 35 insertions, 2 deletions
diff --git a/src/plugins/platforms/wayland/qwaylanddecoration.cpp b/src/plugins/platforms/wayland/qwaylanddecoration.cpp index 258a54495..f8c374a6c 100644 --- a/src/plugins/platforms/wayland/qwaylanddecoration.cpp +++ b/src/plugins/platforms/wayland/qwaylanddecoration.cpp @@ -108,6 +108,18 @@ void QWaylandDecoration::paint(QPaintDevice *device) p.restore(); } + // Window icon + QIcon icon = m_wayland_window->windowIcon(); + if (!icon.isNull()) { + QPixmap pixmap = icon.pixmap(QSize(128, 128)); + QPixmap scaled = pixmap.scaled(22, 22, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + QRectF iconRect(0, 0, 22, 22); + p.drawPixmap(iconRect.adjusted(margins().left() + BUTTON_SPACING, 4, + margins().left() + BUTTON_SPACING, 4), + scaled, iconRect); + } + // Window title QString windowTitleText = window()->title(); if (!windowTitleText.isEmpty()) { @@ -117,7 +129,8 @@ void QWaylandDecoration::paint(QPaintDevice *device) } QRect titleBar = top; - titleBar.setLeft(m_margins.left() + BUTTON_SPACING); + titleBar.setLeft(m_margins.left() + BUTTON_SPACING + + (icon.isNull() ? 0 : 22 + BUTTON_SPACING)); titleBar.setRight(minimizeButtonRect().left() - BUTTON_SPACING); p.save(); diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 64170d24a..dc95aa93c 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -148,6 +148,14 @@ void QWaylandWindow::setWindowTitle(const QString &title) } } +void QWaylandWindow::setWindowIcon(const QIcon &icon) +{ + mWindowIcon = icon; + + if (mWindowDecoration && window()->isVisible()) + mWindowDecoration->paintDecoration(); +} + void QWaylandWindow::setGeometry(const QRect &rect) { QPlatformWindow::setGeometry(rect); diff --git a/src/plugins/platforms/wayland/qwaylandwindow.h b/src/plugins/platforms/wayland/qwaylandwindow.h index 0e379e5df..a58e49db1 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.h +++ b/src/plugins/platforms/wayland/qwaylandwindow.h @@ -42,8 +42,10 @@ #ifndef QWAYLANDWINDOW_H #define QWAYLANDWINDOW_H -#include <qpa/qplatformwindow.h> #include <QtCore/QWaitCondition> +#include <QtGui/QIcon> + +#include <qpa/qplatformwindow.h> #include "qwaylanddisplay.h" @@ -74,6 +76,9 @@ public: void setWindowTitle(const QString &title); + inline QIcon windowIcon() const; + void setWindowIcon(const QIcon &icon); + void setGeometry(const QRect &rect); void configure(uint32_t edges, int32_t width, int32_t height); @@ -141,6 +146,8 @@ protected: bool mSentInitialResize; QPoint mOffset; + QIcon mWindowIcon; + private: void handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice, ulong timestamp, @@ -154,6 +161,11 @@ private: }; +inline QIcon QWaylandWindow::windowIcon() const +{ + return mWindowIcon; +} + inline QPoint QWaylandWindow::attachOffset() const { return mOffset; |