diff options
| author | Marco Martin <notmart@gmail.com> | 2017-04-03 13:42:29 (GMT) |
|---|---|---|
| committer | Marco Martin <notmart@gmail.com> | 2017-04-03 14:07:18 (GMT) |
| commit | fb8ed07651a7101c2f9c41c6e6676ac8196c1225 (patch) | |
| tree | 193f9391cb4d78757cdc3c0a67662c1543895437 | |
| parent | 03427e4323c9306f1f3fd6712ac0cd5e5873c873 (diff) | |
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
| -rw-r--r-- | src/declarativeimports/core/iconitem.cpp | 44 | ||||
| -rw-r--r-- | 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 e1666aa..2b96c61 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 e4b2a95..8b524e7 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; |
