From fb8ed07651a7101c2f9c41c6e6676ac8196c1225 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Mon, 3 Apr 2017 15:42:29 +0200 Subject: [PATCH] if the user did set an implicit size, keep it Summary: if the user code did something like IconItem { implicitWidth: 32 implicitHeight: 32 } then never automatically update implicitWidth or height. this favors compatibility and fixes the desktop toolbox appearance Test Plan: textbox works, other icon items in plasmashell seems properly sized. applet alternatives fix is still needed Reviewers: #plasma, hein Reviewed By: #plasma, hein Subscribers: hein, davidedmundson, plasma-devel, #frameworks Tags: #plasma, #frameworks Differential Revision: https://phabricator.kde.org/D5243 --- src/declarativeimports/core/iconitem.cpp | 44 ++++++++++++++++++++++-- src/declarativeimports/core/iconitem.h | 11 ++++++ 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/declarativeimports/core/iconitem.cpp b/src/declarativeimports/core/iconitem.cpp index e1666aa32..2b96c619d 100644 --- a/src/declarativeimports/core/iconitem.cpp +++ b/src/declarativeimports/core/iconitem.cpp @@ -49,6 +49,8 @@ IconItem::IconItem(QQuickItem *parent) m_sizeChanged(false), m_allowNextAnimation(false), m_blockNextAnimation(false), + m_implicitHeightSetByUser(false), + m_implicitWidthSetByUser(false), m_colorGroup(Plasma::Theme::NormalColorGroup), m_animValue(0) { @@ -75,6 +77,9 @@ IconItem::IconItem(QQuickItem *parent) connect(this, SIGNAL(overlaysChanged()), this, SLOT(schedulePixmapUpdate())); + connect(this, &IconItem::implicitWidthChanged, this, &IconItem::implicitWidthChanged2); + connect(this, &IconItem::implicitHeightChanged, this, &IconItem::implicitHeightChanged2); + updateImplicitSize(); } @@ -88,7 +93,13 @@ void IconItem::updateImplicitSize() const QSize &s = m_imageIcon.size(); if (s.isValid()) { - setImplicitSize(s.width(), s.height()); + if (!m_implicitWidthSetByUser && !m_implicitHeightSetByUser) { + setImplicitSize(s.width(), s.height()); + } else if (!m_implicitWidthSetByUser) { + setImplicitWidth(s.width()); + } else if (!m_implicitHeightSetByUser) { + setImplicitHeight(s.height()); + } return; } @@ -105,7 +116,13 @@ void IconItem::updateImplicitSize() s = m_svgIcon->size(); } if (s.isValid()) { - setImplicitSize(s.width(), s.height()); + if (!m_implicitWidthSetByUser && !m_implicitHeightSetByUser) { + setImplicitSize(s.width(), s.height()); + } else if (!m_implicitWidthSetByUser) { + setImplicitWidth(s.width()); + } else if (!m_implicitHeightSetByUser) { + setImplicitHeight(s.height()); + } return; } @@ -113,7 +130,14 @@ void IconItem::updateImplicitSize() // Fall back to initializing implicit size to the Dialog size. const int implicitSize = KIconLoader::global()->currentSize(KIconLoader::Dialog); - setImplicitSize(implicitSize, implicitSize); + + if (!m_implicitWidthSetByUser && !m_implicitHeightSetByUser) { + setImplicitSize(implicitSize, implicitSize); + } else if (!m_implicitWidthSetByUser) { + setImplicitWidth(implicitSize); + } else if (!m_implicitHeightSetByUser) { + setImplicitHeight(implicitSize); + } } void IconItem::setSource(const QVariant &source) @@ -418,6 +442,20 @@ Plasma::Svg::Status IconItem::status() const return m_status; } +void IconItem::setImplicitHeight2(int height) +{ + m_implicitHeightSetByUser = true; + setImplicitHeight(height); + emit implicitHeightChanged2(); +} + +void IconItem::setImplicitWidth2(int width) +{ + m_implicitWidthSetByUser = true; + setImplicitWidth(width); + emit implicitWidthChanged2(); +} + void IconItem::updatePolish() { QQuickItem::updatePolish(); diff --git a/src/declarativeimports/core/iconitem.h b/src/declarativeimports/core/iconitem.h index e4b2a959d..8b524e7a0 100644 --- a/src/declarativeimports/core/iconitem.h +++ b/src/declarativeimports/core/iconitem.h @@ -119,6 +119,10 @@ class IconItem : public QQuickItem */ Q_PROPERTY(int paintedHeight READ paintedHeight NOTIFY paintedSizeChanged) + Q_PROPERTY(int implicitHeight READ implicitHeight WRITE setImplicitHeight2 NOTIFY implicitHeightChanged2) + + Q_PROPERTY(int implicitWidth READ implicitWidth WRITE setImplicitWidth2 NOTIFY implicitWidthChanged2) + public: IconItem(QQuickItem *parent = 0); ~IconItem(); @@ -155,6 +159,9 @@ public: void setStatus(Plasma::Svg::Status status); Plasma::Svg::Status status() const; + void setImplicitHeight2(int height); + void setImplicitWidth2(int height); + void updatePolish() Q_DECL_OVERRIDE; QSGNode* updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData) Q_DECL_OVERRIDE; @@ -176,6 +183,8 @@ Q_SIGNALS: void colorGroupChanged(); void paintedSizeChanged(); void statusChanged(); + void implicitHeightChanged2(); + void implicitWidthChanged2(); private Q_SLOTS: void schedulePixmapUpdate(); @@ -210,6 +219,8 @@ private: bool m_sizeChanged; bool m_allowNextAnimation; bool m_blockNextAnimation; + bool m_implicitHeightSetByUser; + bool m_implicitWidthSetByUser; QPixmap m_iconPixmap; QPixmap m_oldIconPixmap;