The nixpkgs patch is to clear out a conflict with a patch that's applied to plasma-workspace by nixpkgs
3978 lines
162 KiB
Diff
3978 lines
162 KiB
Diff
From 21990d59c176084af615b97a6e586d32aa47fb66 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 11 Apr 2025 17:31:12 +0300
|
|
Subject: [PATCH 01/69] WIP: new selection effect stuff
|
|
|
|
based on felix branch
|
|
https://invent.kde.org/felixernst/dolphin/-/commit/b3fa4479c1c23da08c120e8462bae42c712381d3
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 49 +++++++++++------
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 63 +++++++---------------
|
|
2 files changed, 52 insertions(+), 60 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index baf2445726..a6fd75a347 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -124,23 +124,11 @@ void KItemListWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *o
|
|
painter->fillRect(backgroundRect, backgroundColor);
|
|
}
|
|
|
|
- if (m_selected && m_editedRole.isEmpty()) {
|
|
+ if ((m_selected || m_current) && m_editedRole.isEmpty()) {
|
|
const QStyle::State activeState(isActiveWindow() && widget->hasFocus() ? QStyle::State_Active : 0);
|
|
drawItemStyleOption(painter, widget, activeState | QStyle::State_Enabled | QStyle::State_Selected | QStyle::State_Item);
|
|
}
|
|
|
|
- if (m_current && m_editedRole.isEmpty()) {
|
|
- QStyleOptionFocusRect focusRectOption;
|
|
- initStyleOption(&focusRectOption);
|
|
- focusRectOption.rect = textFocusRect().toRect();
|
|
- focusRectOption.state = QStyle::State_Enabled | QStyle::State_Item | QStyle::State_KeyboardFocusChange;
|
|
- if (m_selected && widget->hasFocus()) {
|
|
- focusRectOption.state |= QStyle::State_Selected;
|
|
- }
|
|
-
|
|
- style()->drawPrimitive(QStyle::PE_FrameFocusRect, &focusRectOption, painter, widget);
|
|
- }
|
|
-
|
|
if (m_hoverOpacity > 0.0) {
|
|
if (!m_hoverCache) {
|
|
// Initialize the m_hoverCache pixmap to improve the drawing performance
|
|
@@ -623,8 +611,39 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
- viewItemOption.rect = selectionRect().toRect();
|
|
- style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget);
|
|
+ viewItemOption.rect = selectionRect().toRect().adjusted(2, 2, -2, -2);
|
|
+ QPainterPath path;
|
|
+ path.addRoundedRect(viewItemOption.rect, 5, 5);
|
|
+ QColor accentColor{widget->palette().color(QPalette::Accent)};
|
|
+ painter->setRenderHint(QPainter::Antialiasing);
|
|
+ bool current = m_current && styleState & QStyle::State_Active;
|
|
+
|
|
+ // Background item
|
|
+ accentColor.setAlphaF(0.0);
|
|
+ if (m_selected && m_hovered) {
|
|
+ accentColor.setAlphaF(0.5);
|
|
+ } else if (m_selected) {
|
|
+ accentColor.setAlphaF(0.4);
|
|
+ } else if (m_hovered && current) {
|
|
+ accentColor.setAlphaF(0.3);
|
|
+ } else if (m_hovered) {
|
|
+ accentColor.setAlphaF(0.1);
|
|
+ }
|
|
+ painter->fillPath(path, accentColor);
|
|
+
|
|
+ // Focus decoration
|
|
+ if (current && m_hovered) {
|
|
+ accentColor.setAlphaF(1.0);
|
|
+ } else if (current || m_hovered) {
|
|
+ accentColor.setAlphaF(0.9);
|
|
+ } else if (m_current) {
|
|
+ accentColor.setAlphaF(0.3);
|
|
+ }
|
|
+ if (m_current || m_hovered) {
|
|
+ const QPen pen{accentColor, 2};
|
|
+ painter->setPen(pen);
|
|
+ painter->drawPath(path);
|
|
+ }
|
|
}
|
|
|
|
#include "moc_kitemlistwidget.cpp"
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 49d2f26bfd..c320e375b4 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -541,31 +541,23 @@ QRectF KStandardItemListWidget::selectionRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
|
|
- switch (m_layout) {
|
|
- case IconsLayout:
|
|
- return m_textRect;
|
|
-
|
|
- case CompactLayout:
|
|
- case DetailsLayout: {
|
|
- const int padding = styleOption().padding;
|
|
- QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding);
|
|
- QRectF result = adjustedIconRect | m_textRect;
|
|
- if (m_highlightEntireRow) {
|
|
- if (layoutDirection() == Qt::LeftToRight) {
|
|
- result.setRight(leftPadding() + m_columnWidthSum);
|
|
- } else {
|
|
- result.setLeft(size().width() - m_columnWidthSum - rightPadding());
|
|
- }
|
|
+ const int padding = styleOption().padding;
|
|
+ QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding);
|
|
+ QRectF result = adjustedIconRect | m_textRect;
|
|
+ if (m_highlightEntireRow) {
|
|
+ if (layoutDirection() == Qt::LeftToRight) {
|
|
+ result.setRight(leftPadding() + m_columnWidthSum);
|
|
+ } else {
|
|
+ result.setLeft(size().width() - m_columnWidthSum - rightPadding());
|
|
}
|
|
- return result;
|
|
}
|
|
|
|
- default:
|
|
- Q_ASSERT(false);
|
|
- break;
|
|
+ if (m_layout == IconsLayout) {
|
|
+ const int availableWidth = size().width() - 2 * padding - result.width();
|
|
+ result = result.adjusted(-0.5 * availableWidth, 0, 0.5 * availableWidth, 0);
|
|
}
|
|
|
|
- return m_textRect;
|
|
+ return result;
|
|
}
|
|
|
|
QRectF KStandardItemListWidget::expansionToggleRect() const
|
|
@@ -578,7 +570,6 @@ QRectF KStandardItemListWidget::selectionToggleRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
|
|
- const QRectF widgetIconRect = iconRect();
|
|
const int widgetIconSize = iconSize();
|
|
int toggleSize = KIconLoader::SizeSmall;
|
|
if (widgetIconSize >= KIconLoader::SizeEnormous) {
|
|
@@ -587,29 +578,11 @@ QRectF KStandardItemListWidget::selectionToggleRect() const
|
|
toggleSize = KIconLoader::SizeSmallMedium;
|
|
}
|
|
|
|
- QPointF pos = widgetIconRect.topLeft();
|
|
-
|
|
- // If the selection toggle has a very small distance to the
|
|
- // widget borders, the size of the selection toggle will get
|
|
- // increased to prevent an accidental clicking of the item
|
|
- // when trying to hit the toggle.
|
|
- const int widgetHeight = size().height();
|
|
- const int widgetWidth = size().width();
|
|
- const int minMargin = 2;
|
|
-
|
|
- if (toggleSize + minMargin * 2 >= widgetHeight) {
|
|
- pos.rx() -= (widgetHeight - toggleSize) / 2;
|
|
- toggleSize = widgetHeight;
|
|
- pos.setY(0);
|
|
- }
|
|
- if (toggleSize + minMargin * 2 >= widgetWidth) {
|
|
- pos.ry() -= (widgetWidth - toggleSize) / 2;
|
|
- toggleSize = widgetWidth;
|
|
- pos.setX(0);
|
|
- }
|
|
-
|
|
+ const int padding = styleOption().padding;
|
|
+ const QRectF selectionRectMinusPadding = selectionRect().adjusted(padding, padding, -padding, -padding);
|
|
+ QPointF pos = selectionRectMinusPadding.topLeft();
|
|
if (QApplication::isRightToLeft()) {
|
|
- pos.setX(widgetIconRect.right() - (pos.x() + toggleSize - widgetIconRect.left()));
|
|
+ pos.setX(selectionRectMinusPadding.right() - (pos.x() + toggleSize - selectionRectMinusPadding.left()));
|
|
}
|
|
|
|
return QRectF(pos, QSizeF(toggleSize, toggleSize));
|
|
@@ -748,7 +721,7 @@ QColor KStandardItemListWidget::textColor(const QWidget &widget) const
|
|
}
|
|
|
|
const QPalette::ColorGroup group = isActiveWindow() && widget.hasFocus() ? QPalette::Active : QPalette::Inactive;
|
|
- const QPalette::ColorRole role = isSelected() ? QPalette::HighlightedText : normalTextColorRole();
|
|
+ const QPalette::ColorRole role = /*isSelected() ? QPalette::HighlightedText :*/ normalTextColorRole();
|
|
return styleOption().palette.color(group, role);
|
|
}
|
|
|
|
@@ -1568,7 +1541,7 @@ void KStandardItemListWidget::updateAdditionalInfoTextColor()
|
|
const bool hasFocus = scene()->views()[0]->parentWidget()->hasFocus();
|
|
if (m_customTextColor.isValid()) {
|
|
c1 = m_customTextColor;
|
|
- } else if (isSelected() && hasFocus && (m_layout != DetailsLayout || m_highlightEntireRow)) {
|
|
+ } else if (false && isSelected() && hasFocus && (m_layout != DetailsLayout || m_highlightEntireRow)) {
|
|
// The detail text color needs to match the main text (HighlightedText) for the same level
|
|
// of readability. We short circuit early here to avoid interpolating with another color.
|
|
m_additionalInfoTextColor = styleOption().palette.color(QPalette::HighlightedText);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 64650add73385948fd76b487a90da2c7635a2b7a Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 14 Apr 2025 14:53:01 +0300
|
|
Subject: [PATCH 02/69] Show a gap between selection and focus
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 35 ++++++++++++++++--------------
|
|
1 file changed, 19 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index a6fd75a347..1e82c27b1b 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -607,13 +607,16 @@ void KItemListWidget::clearHoverCache()
|
|
void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QStyle::State styleState)
|
|
{
|
|
QStyleOptionViewItem viewItemOption;
|
|
+ const int focusPenWidth = 2;
|
|
+ const int roundness = 5;
|
|
initStyleOption(&viewItemOption);
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
- viewItemOption.rect = selectionRect().toRect().adjusted(2, 2, -2, -2);
|
|
+ viewItemOption.rect = selectionRect().toRect();
|
|
+ viewItemOption.rect = viewItemOption.rect.adjusted(focusPenWidth, focusPenWidth, -focusPenWidth, -focusPenWidth);
|
|
QPainterPath path;
|
|
- path.addRoundedRect(viewItemOption.rect, 5, 5);
|
|
+ path.addRoundedRect(viewItemOption.rect, roundness, roundness);
|
|
QColor accentColor{widget->palette().color(QPalette::Accent)};
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
bool current = m_current && styleState & QStyle::State_Active;
|
|
@@ -621,26 +624,26 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// Background item
|
|
accentColor.setAlphaF(0.0);
|
|
if (m_selected && m_hovered) {
|
|
- accentColor.setAlphaF(0.5);
|
|
+ accentColor.setAlphaF(1.0);
|
|
} else if (m_selected) {
|
|
- accentColor.setAlphaF(0.4);
|
|
- } else if (m_hovered && current) {
|
|
- accentColor.setAlphaF(0.3);
|
|
+ accentColor.setAlphaF(0.8);
|
|
} else if (m_hovered) {
|
|
- accentColor.setAlphaF(0.1);
|
|
+ accentColor.setAlphaF(0.3);
|
|
+ }
|
|
+ if (current) {
|
|
+ auto currentGap = focusPenWidth;
|
|
+ auto currentPathRect = viewItemOption.rect.adjusted(currentGap, currentGap, -currentGap, -currentGap);
|
|
+ QPainterPath currentPath;
|
|
+ currentPath.addRoundedRect(currentPathRect, roundness, roundness);
|
|
+ painter->fillPath(currentPath, accentColor);
|
|
+ } else {
|
|
+ painter->fillPath(path, accentColor);
|
|
}
|
|
- painter->fillPath(path, accentColor);
|
|
|
|
// Focus decoration
|
|
- if (current && m_hovered) {
|
|
- accentColor.setAlphaF(1.0);
|
|
- } else if (current || m_hovered) {
|
|
- accentColor.setAlphaF(0.9);
|
|
- } else if (m_current) {
|
|
- accentColor.setAlphaF(0.3);
|
|
- }
|
|
if (m_current || m_hovered) {
|
|
- const QPen pen{accentColor, 2};
|
|
+ accentColor.setAlphaF(1.0);
|
|
+ const QPen pen{accentColor, focusPenWidth};
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
}
|
|
--
|
|
GitLab
|
|
|
|
|
|
From da8cbfdd2d72237e2d2a13c88b5a0fafd558ea24 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 14 Apr 2025 15:20:00 +0300
|
|
Subject: [PATCH 03/69] Do not colorize icons
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 11 -----------
|
|
1 file changed, 11 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index c320e375b4..c56c859a71 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -1120,17 +1120,6 @@ void KStandardItemListWidget::updatePixmapCache()
|
|
if (m_isHidden) {
|
|
KIconEffect::semiTransparent(m_pixmap);
|
|
}
|
|
-
|
|
- if (m_layout == IconsLayout && isSelected()) {
|
|
- const QColor color = palette().brush(QPalette::Normal, QPalette::Highlight).color();
|
|
- QImage image = m_pixmap.toImage();
|
|
- if (image.isNull()) {
|
|
- m_hoverPixmap = QPixmap();
|
|
- return;
|
|
- }
|
|
- KIconEffect::colorize(image, color, 0.8f);
|
|
- m_pixmap = QPixmap::fromImage(image);
|
|
- }
|
|
}
|
|
|
|
int scaledIconSize = 0;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 434aee5f8375f66c41eefc75206a2b2a81849ea9 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 14 Apr 2025 15:58:30 +0300
|
|
Subject: [PATCH 04/69] add highlightedTextColor back
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index c56c859a71..486c909de1 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -721,7 +721,7 @@ QColor KStandardItemListWidget::textColor(const QWidget &widget) const
|
|
}
|
|
|
|
const QPalette::ColorGroup group = isActiveWindow() && widget.hasFocus() ? QPalette::Active : QPalette::Inactive;
|
|
- const QPalette::ColorRole role = /*isSelected() ? QPalette::HighlightedText :*/ normalTextColorRole();
|
|
+ const QPalette::ColorRole role = isSelected() ? QPalette::HighlightedText : normalTextColorRole();
|
|
return styleOption().palette.color(group, role);
|
|
}
|
|
|
|
--
|
|
GitLab
|
|
|
|
|
|
From fa6ed958b64cf5fd39d3624a661b5984249fce30 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 14 Apr 2025 16:51:26 +0300
|
|
Subject: [PATCH 05/69] Modify padding for iconslayout
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 10 +++++-----
|
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 486c909de1..2d209ba5bb 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -550,11 +550,11 @@ QRectF KStandardItemListWidget::selectionRect() const
|
|
} else {
|
|
result.setLeft(size().width() - m_columnWidthSum - rightPadding());
|
|
}
|
|
- }
|
|
-
|
|
- if (m_layout == IconsLayout) {
|
|
- const int availableWidth = size().width() - 2 * padding - result.width();
|
|
- result = result.adjusted(-0.5 * availableWidth, 0, 0.5 * availableWidth, 0);
|
|
+ } else {
|
|
+ // Make sure values are always positive
|
|
+ const int availableWidth = qAbs((size().width() - 2 * padding - result.width()) * 0.5);
|
|
+ const int availableHeight = m_layout == CompactLayout ? 0 : qAbs((size().height() - 2 * padding - result.height()) * 0.5);
|
|
+ result = result.adjusted(-availableWidth, -availableHeight, availableWidth, availableHeight);
|
|
}
|
|
|
|
return result;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 66c8dbf844c81197ec30a90ead4b392b803573ae Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 14 Apr 2025 16:55:17 +0300
|
|
Subject: [PATCH 06/69] Use highlight color
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 1e82c27b1b..8c5b1e6259 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -617,7 +617,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
viewItemOption.rect = viewItemOption.rect.adjusted(focusPenWidth, focusPenWidth, -focusPenWidth, -focusPenWidth);
|
|
QPainterPath path;
|
|
path.addRoundedRect(viewItemOption.rect, roundness, roundness);
|
|
- QColor accentColor{widget->palette().color(QPalette::Accent)};
|
|
+ QColor accentColor{widget->palette().color(QPalette::Highlight)};
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
bool current = m_current && styleState & QStyle::State_Active;
|
|
|
|
@@ -643,7 +643,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// Focus decoration
|
|
if (m_current || m_hovered) {
|
|
accentColor.setAlphaF(1.0);
|
|
- const QPen pen{accentColor, focusPenWidth};
|
|
+ const QPen pen{accentColor.lighter(120), focusPenWidth};
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
}
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 49441c8362b56b04ce0ccf25f6f45070a4ca8477 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 14 Apr 2025 17:00:54 +0300
|
|
Subject: [PATCH 07/69] adjust the viewitemoption.rect
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 9 ++++++---
|
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 8c5b1e6259..9444616f58 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -608,20 +608,23 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
{
|
|
QStyleOptionViewItem viewItemOption;
|
|
const int focusPenWidth = 2;
|
|
+ // Small adjustment due to how QRect coordinates work
|
|
+ const int viewItemRectAdjustment = focusPenWidth + 1;
|
|
const int roundness = 5;
|
|
initStyleOption(&viewItemOption);
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
viewItemOption.rect = selectionRect().toRect();
|
|
- viewItemOption.rect = viewItemOption.rect.adjusted(focusPenWidth, focusPenWidth, -focusPenWidth, -focusPenWidth);
|
|
+ viewItemOption.rect = viewItemOption.rect.adjusted(viewItemRectAdjustment, viewItemRectAdjustment, -viewItemRectAdjustment, -viewItemRectAdjustment);
|
|
QPainterPath path;
|
|
path.addRoundedRect(viewItemOption.rect, roundness, roundness);
|
|
QColor accentColor{widget->palette().color(QPalette::Highlight)};
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
bool current = m_current && styleState & QStyle::State_Active;
|
|
|
|
- // Background item
|
|
+ // Background item, alpha values are from
|
|
+ // https://invent.kde.org/plasma/libplasma/-/blob/master/src/desktoptheme/breeze/widgets/viewitem.svg
|
|
accentColor.setAlphaF(0.0);
|
|
if (m_selected && m_hovered) {
|
|
accentColor.setAlphaF(1.0);
|
|
@@ -641,7 +644,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
}
|
|
|
|
// Focus decoration
|
|
- if (m_current || m_hovered) {
|
|
+ if (current || m_hovered) {
|
|
accentColor.setAlphaF(1.0);
|
|
const QPen pen{accentColor.lighter(120), focusPenWidth};
|
|
painter->setPen(pen);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 35ffad2d67c6dca2bab0d979b8017a5da377ae05 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 15 Apr 2025 15:03:01 +0300
|
|
Subject: [PATCH 08/69] Make hovered outline transparent
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 9444616f58..ddf9a4ea1a 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -645,7 +645,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
|
|
// Focus decoration
|
|
if (current || m_hovered) {
|
|
- accentColor.setAlphaF(1.0);
|
|
+ accentColor.setAlphaF(m_hovered ? 0.4 : 1.0);
|
|
const QPen pen{accentColor.lighter(120), focusPenWidth};
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 528f25f0c412073a3ae643fb5f9f8d163cc83d21 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 15 Apr 2025 15:10:27 +0300
|
|
Subject: [PATCH 09/69] Only apply hover effect to icon when its selected
|
|
|
|
Better contrast this way
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 4 +++-
|
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 2d209ba5bb..b9bbb68b8a 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -1171,7 +1171,9 @@ void KStandardItemListWidget::updatePixmapCache()
|
|
// Prepare the pixmap that is used when the item gets hovered
|
|
if (isHovered()) {
|
|
m_hoverPixmap = m_pixmap;
|
|
- KIconEffect::toActive(m_hoverPixmap);
|
|
+ if (isSelected()) {
|
|
+ KIconEffect::toActive(m_hoverPixmap);
|
|
+ }
|
|
} else if (hoverOpacity() <= 0.0) {
|
|
// No hover animation is ongoing. Clear m_hoverPixmap to save memory.
|
|
m_hoverPixmap = QPixmap();
|
|
--
|
|
GitLab
|
|
|
|
|
|
From edf7272c9c8245f7297d2bd9738996433fd8bb82 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 15 Apr 2025 16:53:09 +0300
|
|
Subject: [PATCH 10/69] Use style 2
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 17 +++++------------
|
|
1 file changed, 5 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index ddf9a4ea1a..14795af9fa 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -629,23 +629,16 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
if (m_selected && m_hovered) {
|
|
accentColor.setAlphaF(1.0);
|
|
} else if (m_selected) {
|
|
- accentColor.setAlphaF(0.8);
|
|
+ accentColor.setAlphaF(0.5);
|
|
} else if (m_hovered) {
|
|
accentColor.setAlphaF(0.3);
|
|
}
|
|
- if (current) {
|
|
- auto currentGap = focusPenWidth;
|
|
- auto currentPathRect = viewItemOption.rect.adjusted(currentGap, currentGap, -currentGap, -currentGap);
|
|
- QPainterPath currentPath;
|
|
- currentPath.addRoundedRect(currentPathRect, roundness, roundness);
|
|
- painter->fillPath(currentPath, accentColor);
|
|
- } else {
|
|
- painter->fillPath(path, accentColor);
|
|
- }
|
|
+
|
|
+ painter->fillPath(path, accentColor);
|
|
|
|
// Focus decoration
|
|
- if (current || m_hovered) {
|
|
- accentColor.setAlphaF(m_hovered ? 0.4 : 1.0);
|
|
+ if (current) {
|
|
+ accentColor.setAlphaF(1.0);
|
|
const QPen pen{accentColor.lighter(120), focusPenWidth};
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 9933d7c49a1d0bcf956afe69b347df18fb2f1c70 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 15 Apr 2025 17:04:08 +0300
|
|
Subject: [PATCH 11/69] Set pen color according to base lightness
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 5 +++--
|
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 14795af9fa..64584abce2 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -629,7 +629,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
if (m_selected && m_hovered) {
|
|
accentColor.setAlphaF(1.0);
|
|
} else if (m_selected) {
|
|
- accentColor.setAlphaF(0.5);
|
|
+ accentColor.setAlphaF(0.8);
|
|
} else if (m_hovered) {
|
|
accentColor.setAlphaF(0.3);
|
|
}
|
|
@@ -639,7 +639,8 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// Focus decoration
|
|
if (current) {
|
|
accentColor.setAlphaF(1.0);
|
|
- const QPen pen{accentColor.lighter(120), focusPenWidth};
|
|
+ // Set the pen color lighter or darker depending on background color
|
|
+ const QPen pen{m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker() : accentColor.lighter(), focusPenWidth};
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
}
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 0ddc8b6f93bda0afc525e57576ef00ab0ad94697 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 15 Apr 2025 17:21:11 +0300
|
|
Subject: [PATCH 12/69] Dont show focus before interaction
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 4 ++++
|
|
src/kitemviews/kitemlistselectionmanager.cpp | 4 +---
|
|
2 files changed, 5 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index cd60c3a41b..f0c6a26878 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -478,6 +478,10 @@ bool KItemListController::keyPressEvent(QKeyEvent *event)
|
|
return false;
|
|
}
|
|
|
|
+ if (index < 0) {
|
|
+ index = 0;
|
|
+ }
|
|
+
|
|
if (m_selectionManager->currentItem() != index) {
|
|
switch (m_selectionBehavior) {
|
|
case NoSelection:
|
|
diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp
|
|
index 6f7f0e0776..abf58df240 100644
|
|
--- a/src/kitemviews/kitemlistselectionmanager.cpp
|
|
+++ b/src/kitemviews/kitemlistselectionmanager.cpp
|
|
@@ -217,9 +217,7 @@ void KItemListSelectionManager::itemsInserted(const KItemRangeList &itemRanges)
|
|
const KItemSet previousSelection = selectedItems();
|
|
|
|
// Update the current item
|
|
- if (m_currentItem < 0) {
|
|
- setCurrentItem(0);
|
|
- } else {
|
|
+ if (m_currentItem >= 0) {
|
|
const int previousCurrent = m_currentItem;
|
|
int inc = 0;
|
|
for (const KItemRange &itemRange : itemRanges) {
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 8588d3aa3bb73e7c6f35df8844de0b9ccc335078 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 16 Apr 2025 15:23:08 +0300
|
|
Subject: [PATCH 13/69] Less intense selection lightening/darkening
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 64584abce2..ebbfb98cc6 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -640,7 +640,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
if (current) {
|
|
accentColor.setAlphaF(1.0);
|
|
// Set the pen color lighter or darker depending on background color
|
|
- const QPen pen{m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker() : accentColor.lighter(), focusPenWidth};
|
|
+ const QPen pen{m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker(110) : accentColor.lighter(110), focusPenWidth};
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
}
|
|
--
|
|
GitLab
|
|
|
|
|
|
From cbec8b9acd0aa13ddb984097e9c9ea37baba6a33 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 16 Apr 2025 15:23:43 +0300
|
|
Subject: [PATCH 14/69] Clean up currentItem when clicking on empty area
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 3 +++
|
|
1 file changed, 3 insertions(+)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index f0c6a26878..4f5c8fbb39 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1720,6 +1720,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
|
|
if (!m_pressedIndex.has_value()) {
|
|
// We have a right-click in an empty region, don't create rubber band.
|
|
+ m_selectionManager->setCurrentItem(-1);
|
|
return true;
|
|
}
|
|
}
|
|
@@ -1783,6 +1784,8 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
}
|
|
|
|
return !createRubberBand;
|
|
+ } else {
|
|
+ m_selectionManager->setCurrentItem(-1);
|
|
}
|
|
|
|
return false;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From cfe048eabb2e29c8e01f9a0428548f8366078b73 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 16 Apr 2025 15:52:33 +0300
|
|
Subject: [PATCH 15/69] Clean up the current item after mouse drag if it
|
|
selects nothing
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 16 ++++++++++++++--
|
|
src/kitemviews/kitemlistcontroller.h | 5 +++++
|
|
2 files changed, 19 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 4f5c8fbb39..e8edc33c03 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1720,7 +1720,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
|
|
if (!m_pressedIndex.has_value()) {
|
|
// We have a right-click in an empty region, don't create rubber band.
|
|
- m_selectionManager->setCurrentItem(-1);
|
|
+ cleanUpCurrentItem();
|
|
return true;
|
|
}
|
|
}
|
|
@@ -1785,7 +1785,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
|
|
return !createRubberBand;
|
|
} else {
|
|
- m_selectionManager->setCurrentItem(-1);
|
|
+ cleanUpCurrentItem();
|
|
}
|
|
|
|
return false;
|
|
@@ -1881,6 +1881,8 @@ bool KItemListController::onRelease(const QPointF &pos, const Qt::KeyboardModifi
|
|
m_pressedMouseGlobalPos = QPointF();
|
|
m_pressedIndex = std::nullopt;
|
|
m_clearSelectionIfItemsAreNotDragged = false;
|
|
+ // Clean up current item if nothing is selected after release from drag operation
|
|
+ cleanUpCurrentItem();
|
|
return false;
|
|
}
|
|
|
|
@@ -1913,4 +1915,14 @@ void KItemListController::slotStateChanged(QScroller::State newState)
|
|
}
|
|
}
|
|
|
|
+void KItemListController::cleanUpCurrentItem()
|
|
+{
|
|
+ if (m_selectionManager->currentItem() != -1 && m_selectionManager->selectedItems().count() == 0) {
|
|
+ if (m_selectionManager->isAnchoredSelectionActive()) {
|
|
+ m_selectionManager->endAnchoredSelection();
|
|
+ }
|
|
+ m_selectionManager->setCurrentItem(-1);
|
|
+ }
|
|
+}
|
|
+
|
|
#include "moc_kitemlistcontroller.cpp"
|
|
diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h
|
|
index 48da07206d..7fcda72795 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.h
|
|
+++ b/src/kitemviews/kitemlistcontroller.h
|
|
@@ -325,6 +325,11 @@ private:
|
|
bool onPress(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons);
|
|
bool onRelease(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons, bool touch);
|
|
void startRubberBand();
|
|
+ /**
|
|
+ * Ends the anchoredSelection and sets the currentItem in selectionManager to -1.
|
|
+ * This is used to not draw the focus item when using mouse to operate the view.
|
|
+ */
|
|
+ void cleanUpCurrentItem();
|
|
|
|
private:
|
|
bool m_singleClickActivationEnforced;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From d833acb8a5af26fef199e9dd6c1e26416947a0b9 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 16 Apr 2025 16:10:42 +0300
|
|
Subject: [PATCH 16/69] Fix text colors
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 6 +++---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 10 ++++------
|
|
2 files changed, 7 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index ebbfb98cc6..0f85b726a8 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -619,7 +619,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
viewItemOption.rect = viewItemOption.rect.adjusted(viewItemRectAdjustment, viewItemRectAdjustment, -viewItemRectAdjustment, -viewItemRectAdjustment);
|
|
QPainterPath path;
|
|
path.addRoundedRect(viewItemOption.rect, roundness, roundness);
|
|
- QColor accentColor{widget->palette().color(QPalette::Highlight)};
|
|
+ QColor accentColor{widget->palette().color(QPalette::Accent)};
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
bool current = m_current && styleState & QStyle::State_Active;
|
|
|
|
@@ -627,9 +627,9 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// https://invent.kde.org/plasma/libplasma/-/blob/master/src/desktoptheme/breeze/widgets/viewitem.svg
|
|
accentColor.setAlphaF(0.0);
|
|
if (m_selected && m_hovered) {
|
|
- accentColor.setAlphaF(1.0);
|
|
+ accentColor.setAlphaF(0.5);
|
|
} else if (m_selected) {
|
|
- accentColor.setAlphaF(0.8);
|
|
+ accentColor.setAlphaF(0.4);
|
|
} else if (m_hovered) {
|
|
accentColor.setAlphaF(0.3);
|
|
}
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index b9bbb68b8a..b60aeb19ba 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -721,7 +721,7 @@ QColor KStandardItemListWidget::textColor(const QWidget &widget) const
|
|
}
|
|
|
|
const QPalette::ColorGroup group = isActiveWindow() && widget.hasFocus() ? QPalette::Active : QPalette::Inactive;
|
|
- const QPalette::ColorRole role = isSelected() ? QPalette::HighlightedText : normalTextColorRole();
|
|
+ const QPalette::ColorRole role = normalTextColorRole();
|
|
return styleOption().palette.color(group, role);
|
|
}
|
|
|
|
@@ -1171,9 +1171,7 @@ void KStandardItemListWidget::updatePixmapCache()
|
|
// Prepare the pixmap that is used when the item gets hovered
|
|
if (isHovered()) {
|
|
m_hoverPixmap = m_pixmap;
|
|
- if (isSelected()) {
|
|
- KIconEffect::toActive(m_hoverPixmap);
|
|
- }
|
|
+ KIconEffect::toActive(m_hoverPixmap);
|
|
} else if (hoverOpacity() <= 0.0) {
|
|
// No hover animation is ongoing. Clear m_hoverPixmap to save memory.
|
|
m_hoverPixmap = QPixmap();
|
|
@@ -1532,10 +1530,10 @@ void KStandardItemListWidget::updateAdditionalInfoTextColor()
|
|
const bool hasFocus = scene()->views()[0]->parentWidget()->hasFocus();
|
|
if (m_customTextColor.isValid()) {
|
|
c1 = m_customTextColor;
|
|
- } else if (false && isSelected() && hasFocus && (m_layout != DetailsLayout || m_highlightEntireRow)) {
|
|
+ } else if (isSelected() && hasFocus && (m_layout != DetailsLayout || m_highlightEntireRow)) {
|
|
// The detail text color needs to match the main text (HighlightedText) for the same level
|
|
// of readability. We short circuit early here to avoid interpolating with another color.
|
|
- m_additionalInfoTextColor = styleOption().palette.color(QPalette::HighlightedText);
|
|
+ m_additionalInfoTextColor = styleOption().palette.color(normalTextColorRole());
|
|
return;
|
|
} else {
|
|
c1 = styleOption().palette.text().color();
|
|
--
|
|
GitLab
|
|
|
|
|
|
From ec725291eac833b8982cda4b1592d54239626b4f Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 16 Apr 2025 16:32:35 +0300
|
|
Subject: [PATCH 17/69] Add bit more padding around the text to take outline in
|
|
account
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index b60aeb19ba..8e2515c686 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -1171,7 +1171,9 @@ void KStandardItemListWidget::updatePixmapCache()
|
|
// Prepare the pixmap that is used when the item gets hovered
|
|
if (isHovered()) {
|
|
m_hoverPixmap = m_pixmap;
|
|
- KIconEffect::toActive(m_hoverPixmap);
|
|
+ if (isSelected()) {
|
|
+ KIconEffect::toActive(m_hoverPixmap);
|
|
+ }
|
|
} else if (hoverOpacity() <= 0.0) {
|
|
// No hover animation is ongoing. Clear m_hoverPixmap to save memory.
|
|
m_hoverPixmap = QPixmap();
|
|
@@ -1300,7 +1302,8 @@ void KStandardItemListWidget::updateIconsLayoutTextCache()
|
|
|
|
const KItemListStyleOption &option = styleOption();
|
|
const qreal padding = option.padding;
|
|
- const qreal maxWidth = size().width() - 2 * padding;
|
|
+ // adjust the max width according to new outline style
|
|
+ const qreal maxWidth = size().width() - 2 * padding - 10;
|
|
const qreal lineSpacing = m_customizedFontMetrics.lineSpacing();
|
|
|
|
// Initialize properties for the "text" role. It will be used as anchor
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 230a6221183594954086187553016d577d738a38 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 16 Apr 2025 16:36:26 +0300
|
|
Subject: [PATCH 18/69] revert padding
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 8e2515c686..0303547b23 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -1303,7 +1303,7 @@ void KStandardItemListWidget::updateIconsLayoutTextCache()
|
|
const KItemListStyleOption &option = styleOption();
|
|
const qreal padding = option.padding;
|
|
// adjust the max width according to new outline style
|
|
- const qreal maxWidth = size().width() - 2 * padding - 10;
|
|
+ const qreal maxWidth = size().width() - 2 * padding;
|
|
const qreal lineSpacing = m_customizedFontMetrics.lineSpacing();
|
|
|
|
// Initialize properties for the "text" role. It will be used as anchor
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 462e3846d8f077f739d7551a0930df53d9c7069e Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 17 Apr 2025 11:41:33 +0300
|
|
Subject: [PATCH 19/69] Use rect instead of selectionRect for the selection
|
|
painting
|
|
|
|
Selectionrect is for mouse selection things
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 5 +----
|
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 0f85b726a8..92041fc1e7 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -608,15 +608,12 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
{
|
|
QStyleOptionViewItem viewItemOption;
|
|
const int focusPenWidth = 2;
|
|
- // Small adjustment due to how QRect coordinates work
|
|
- const int viewItemRectAdjustment = focusPenWidth + 1;
|
|
const int roundness = 5;
|
|
initStyleOption(&viewItemOption);
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
- viewItemOption.rect = selectionRect().toRect();
|
|
- viewItemOption.rect = viewItemOption.rect.adjusted(viewItemRectAdjustment, viewItemRectAdjustment, -viewItemRectAdjustment, -viewItemRectAdjustment);
|
|
+ viewItemOption.rect = rect().toRect();
|
|
QPainterPath path;
|
|
path.addRoundedRect(viewItemOption.rect, roundness, roundness);
|
|
QColor accentColor{widget->palette().color(QPalette::Accent)};
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 06dbf47020e8a3bc33f8ae87a451a8418efc3306 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 17 Apr 2025 11:53:15 +0300
|
|
Subject: [PATCH 20/69] Revert currentItem changes
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 19 -------------------
|
|
src/kitemviews/kitemlistcontroller.h | 5 -----
|
|
src/kitemviews/kitemlistselectionmanager.cpp | 4 +++-
|
|
3 files changed, 3 insertions(+), 25 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index e8edc33c03..cd60c3a41b 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -478,10 +478,6 @@ bool KItemListController::keyPressEvent(QKeyEvent *event)
|
|
return false;
|
|
}
|
|
|
|
- if (index < 0) {
|
|
- index = 0;
|
|
- }
|
|
-
|
|
if (m_selectionManager->currentItem() != index) {
|
|
switch (m_selectionBehavior) {
|
|
case NoSelection:
|
|
@@ -1720,7 +1716,6 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
|
|
if (!m_pressedIndex.has_value()) {
|
|
// We have a right-click in an empty region, don't create rubber band.
|
|
- cleanUpCurrentItem();
|
|
return true;
|
|
}
|
|
}
|
|
@@ -1784,8 +1779,6 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
}
|
|
|
|
return !createRubberBand;
|
|
- } else {
|
|
- cleanUpCurrentItem();
|
|
}
|
|
|
|
return false;
|
|
@@ -1881,8 +1874,6 @@ bool KItemListController::onRelease(const QPointF &pos, const Qt::KeyboardModifi
|
|
m_pressedMouseGlobalPos = QPointF();
|
|
m_pressedIndex = std::nullopt;
|
|
m_clearSelectionIfItemsAreNotDragged = false;
|
|
- // Clean up current item if nothing is selected after release from drag operation
|
|
- cleanUpCurrentItem();
|
|
return false;
|
|
}
|
|
|
|
@@ -1915,14 +1906,4 @@ void KItemListController::slotStateChanged(QScroller::State newState)
|
|
}
|
|
}
|
|
|
|
-void KItemListController::cleanUpCurrentItem()
|
|
-{
|
|
- if (m_selectionManager->currentItem() != -1 && m_selectionManager->selectedItems().count() == 0) {
|
|
- if (m_selectionManager->isAnchoredSelectionActive()) {
|
|
- m_selectionManager->endAnchoredSelection();
|
|
- }
|
|
- m_selectionManager->setCurrentItem(-1);
|
|
- }
|
|
-}
|
|
-
|
|
#include "moc_kitemlistcontroller.cpp"
|
|
diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h
|
|
index 7fcda72795..48da07206d 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.h
|
|
+++ b/src/kitemviews/kitemlistcontroller.h
|
|
@@ -325,11 +325,6 @@ private:
|
|
bool onPress(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons);
|
|
bool onRelease(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons, bool touch);
|
|
void startRubberBand();
|
|
- /**
|
|
- * Ends the anchoredSelection and sets the currentItem in selectionManager to -1.
|
|
- * This is used to not draw the focus item when using mouse to operate the view.
|
|
- */
|
|
- void cleanUpCurrentItem();
|
|
|
|
private:
|
|
bool m_singleClickActivationEnforced;
|
|
diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp
|
|
index abf58df240..6f7f0e0776 100644
|
|
--- a/src/kitemviews/kitemlistselectionmanager.cpp
|
|
+++ b/src/kitemviews/kitemlistselectionmanager.cpp
|
|
@@ -217,7 +217,9 @@ void KItemListSelectionManager::itemsInserted(const KItemRangeList &itemRanges)
|
|
const KItemSet previousSelection = selectedItems();
|
|
|
|
// Update the current item
|
|
- if (m_currentItem >= 0) {
|
|
+ if (m_currentItem < 0) {
|
|
+ setCurrentItem(0);
|
|
+ } else {
|
|
const int previousCurrent = m_currentItem;
|
|
int inc = 0;
|
|
for (const KItemRange &itemRange : itemRanges) {
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 71ed6a4a0745770410056ad234ee8d7104c10767 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 17 Apr 2025 12:20:14 +0300
|
|
Subject: [PATCH 21/69] Make the focus effect hiding/showing visual only
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 14 ++++++++++++++
|
|
src/kitemviews/kitemlistcontroller.h | 1 +
|
|
src/kitemviews/kitemlistview.cpp | 3 +++
|
|
src/kitemviews/kitemlistwidget.cpp | 8 +++++++-
|
|
src/kitemviews/kitemlistwidget.h | 3 +++
|
|
5 files changed, 28 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index cd60c3a41b..de8bd26254 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1731,6 +1731,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (rightClick && hitTargetIsRowEmptyRegion) {
|
|
// We have a right click outside the icon and text rect but within the hover highlight area.
|
|
// We don't want items to get selected through this, so we return now.
|
|
+ showFocusWidget(false);
|
|
return true;
|
|
}
|
|
|
|
@@ -1779,6 +1780,8 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
}
|
|
|
|
return !createRubberBand;
|
|
+ } else {
|
|
+ showFocusWidget(false);
|
|
}
|
|
|
|
return false;
|
|
@@ -1906,4 +1909,15 @@ void KItemListController::slotStateChanged(QScroller::State newState)
|
|
}
|
|
}
|
|
|
|
+void KItemListController::showFocusWidget(bool show)
|
|
+{
|
|
+ const auto widgets = m_view->visibleItemListWidgets();
|
|
+ for (auto widget : widgets) {
|
|
+ if (widget->isCurrent()) {
|
|
+ widget->showFocusEffect(show);
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
#include "moc_kitemlistcontroller.cpp"
|
|
diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h
|
|
index 48da07206d..d071f20ab0 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.h
|
|
+++ b/src/kitemviews/kitemlistcontroller.h
|
|
@@ -325,6 +325,7 @@ private:
|
|
bool onPress(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons);
|
|
bool onRelease(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons, bool touch);
|
|
void startRubberBand();
|
|
+ void showFocusWidget(bool show);
|
|
|
|
private:
|
|
bool m_singleClickActivationEnforced;
|
|
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
|
|
index 265e41e6ca..4db8d4ed0a 100644
|
|
--- a/src/kitemviews/kitemlistview.cpp
|
|
+++ b/src/kitemviews/kitemlistview.cpp
|
|
@@ -1529,6 +1529,8 @@ void KItemListView::slotCurrentChanged(int current, int previous)
|
|
|
|
KItemListWidget *currentWidget = m_visibleItems.value(current, nullptr);
|
|
if (currentWidget) {
|
|
+ // If previous item was -1, we're setting the first item current, so we can hide focus
|
|
+ currentWidget->showFocusEffect(previous >= 0 ? true : false);
|
|
currentWidget->setCurrent(true);
|
|
}
|
|
}
|
|
@@ -1548,6 +1550,7 @@ void KItemListView::slotSelectionChanged(const KItemSet ¤t, const KItemSet
|
|
KItemListWidget *widget = it.value();
|
|
const bool isSelected(current.contains(index));
|
|
widget->setSelected(isSelected);
|
|
+ widget->showFocusEffect(true);
|
|
|
|
#ifndef QT_NO_ACCESSIBILITY
|
|
if (!QAccessible::isActive()) {
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 92041fc1e7..e41f8a1557 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -37,6 +37,7 @@ KItemListWidget::KItemListWidget(KItemListWidgetInformant *informant, QGraphicsI
|
|
, m_expansionAreaHovered(false)
|
|
, m_alternateBackground(false)
|
|
, m_enabledSelectionToggle(false)
|
|
+ , m_showFocusEffect(true)
|
|
, m_data()
|
|
, m_visibleRoles()
|
|
, m_columnWidths()
|
|
@@ -634,7 +635,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
painter->fillPath(path, accentColor);
|
|
|
|
// Focus decoration
|
|
- if (current) {
|
|
+ if (current && m_showFocusEffect) {
|
|
accentColor.setAlphaF(1.0);
|
|
// Set the pen color lighter or darker depending on background color
|
|
const QPen pen{m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker(110) : accentColor.lighter(110), focusPenWidth};
|
|
@@ -643,4 +644,9 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
}
|
|
}
|
|
|
|
+void KItemListWidget::showFocusEffect(bool show)
|
|
+{
|
|
+ m_showFocusEffect = show;
|
|
+}
|
|
+
|
|
#include "moc_kitemlistwidget.cpp"
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 0e07d7ab55..06ed511155 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -194,6 +194,8 @@ public:
|
|
*/
|
|
virtual void startActivateSoonAnimation(int timeUntilActivation);
|
|
|
|
+ void showFocusEffect(bool showFocusEffect);
|
|
+
|
|
Q_SIGNALS:
|
|
void roleEditingCanceled(int index, const QByteArray &role, const QVariant &value);
|
|
void roleEditingFinished(int index, const QByteArray &role, const QVariant &value);
|
|
@@ -258,6 +260,7 @@ private:
|
|
bool m_expansionAreaHovered;
|
|
bool m_alternateBackground;
|
|
bool m_enabledSelectionToggle;
|
|
+ bool m_showFocusEffect;
|
|
QHash<QByteArray, QVariant> m_data;
|
|
QList<QByteArray> m_visibleRoles;
|
|
QHash<QByteArray, qreal> m_columnWidths;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From e89ce5966ac02f7349922b4a0794d433f705d1dd Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 17 Apr 2025 14:46:51 +0300
|
|
Subject: [PATCH 22/69] Start drag from background area
|
|
|
|
Now that we have full size selection item, starting
|
|
drag when mouse is in there makes sense.
|
|
|
|
Signed-off-by: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 14 +-------------
|
|
1 file changed, 1 insertion(+), 13 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index de8bd26254..3757fae1f2 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1721,19 +1721,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
}
|
|
|
|
if (m_pressedIndex.has_value()) {
|
|
- // The hover highlight area of an item is being pressed.
|
|
- const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); // anything outside of row.contains() will be the empty region of the row rect
|
|
- const bool hitTargetIsRowEmptyRegion = !row->contains(row->mapFromItem(m_view, pos));
|
|
- // again, when this method returns false, a rubberBand selection is created as the event is not consumed;
|
|
- // createRubberBand here tells us whether to return true or false.
|
|
- bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
-
|
|
- if (rightClick && hitTargetIsRowEmptyRegion) {
|
|
- // We have a right click outside the icon and text rect but within the hover highlight area.
|
|
- // We don't want items to get selected through this, so we return now.
|
|
- showFocusWidget(false);
|
|
- return true;
|
|
- }
|
|
+ bool createRubberBand = false;
|
|
|
|
m_selectionManager->setCurrentItem(m_pressedIndex.value());
|
|
|
|
--
|
|
GitLab
|
|
|
|
|
|
From d92820622459bf1c15f24cc76747680e7e15fbf0 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 17 Apr 2025 15:39:58 +0300
|
|
Subject: [PATCH 23/69] Show focus effects always on keypress
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 6 ++----
|
|
src/kitemviews/kitemlistwidget.cpp | 5 ++++-
|
|
2 files changed, 6 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 3757fae1f2..190402c705 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -238,6 +238,7 @@ bool KItemListController::isSearchAsYouTypeActive() const
|
|
bool KItemListController::keyPressEvent(QKeyEvent *event)
|
|
{
|
|
int index = m_selectionManager->currentItem();
|
|
+ showFocusWidget(true);
|
|
int key = event->key();
|
|
const bool shiftPressed = event->modifiers() & Qt::ShiftModifier;
|
|
|
|
@@ -1901,10 +1902,7 @@ void KItemListController::showFocusWidget(bool show)
|
|
{
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
for (auto widget : widgets) {
|
|
- if (widget->isCurrent()) {
|
|
- widget->showFocusEffect(show);
|
|
- return;
|
|
- }
|
|
+ widget->showFocusEffect(show);
|
|
}
|
|
}
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index e41f8a1557..174e2feb6a 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -646,7 +646,10 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
|
|
void KItemListWidget::showFocusEffect(bool show)
|
|
{
|
|
- m_showFocusEffect = show;
|
|
+ if (m_showFocusEffect != show) {
|
|
+ m_showFocusEffect = show;
|
|
+ update();
|
|
+ }
|
|
}
|
|
|
|
#include "moc_kitemlistwidget.cpp"
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 39063dd2c47d79a1adadbeefd9c612c03fe8b24c Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 17 Apr 2025 16:20:12 +0300
|
|
Subject: [PATCH 24/69] Rename methods, add method for checking if focus is
|
|
shown for widget
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 8 ++++----
|
|
src/kitemviews/kitemlistcontroller.h | 2 +-
|
|
src/kitemviews/kitemlistview.cpp | 3 ---
|
|
src/kitemviews/kitemlistwidget.cpp | 15 ++++++++++-----
|
|
src/kitemviews/kitemlistwidget.h | 5 +++--
|
|
5 files changed, 18 insertions(+), 15 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 190402c705..f30453e9cb 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -238,7 +238,7 @@ bool KItemListController::isSearchAsYouTypeActive() const
|
|
bool KItemListController::keyPressEvent(QKeyEvent *event)
|
|
{
|
|
int index = m_selectionManager->currentItem();
|
|
- showFocusWidget(true);
|
|
+ showKeyboardFocusEffect(true);
|
|
int key = event->key();
|
|
const bool shiftPressed = event->modifiers() & Qt::ShiftModifier;
|
|
|
|
@@ -1770,7 +1770,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
|
|
return !createRubberBand;
|
|
} else {
|
|
- showFocusWidget(false);
|
|
+ showKeyboardFocusEffect(false);
|
|
}
|
|
|
|
return false;
|
|
@@ -1898,11 +1898,11 @@ void KItemListController::slotStateChanged(QScroller::State newState)
|
|
}
|
|
}
|
|
|
|
-void KItemListController::showFocusWidget(bool show)
|
|
+void KItemListController::showKeyboardFocusEffect(bool show)
|
|
{
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
for (auto widget : widgets) {
|
|
- widget->showFocusEffect(show);
|
|
+ widget->showKeyboardFocusEffect(show);
|
|
}
|
|
}
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h
|
|
index d071f20ab0..d424f92dd0 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.h
|
|
+++ b/src/kitemviews/kitemlistcontroller.h
|
|
@@ -325,7 +325,7 @@ private:
|
|
bool onPress(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons);
|
|
bool onRelease(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons, bool touch);
|
|
void startRubberBand();
|
|
- void showFocusWidget(bool show);
|
|
+ void showKeyboardFocusEffect(bool show);
|
|
|
|
private:
|
|
bool m_singleClickActivationEnforced;
|
|
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
|
|
index 4db8d4ed0a..265e41e6ca 100644
|
|
--- a/src/kitemviews/kitemlistview.cpp
|
|
+++ b/src/kitemviews/kitemlistview.cpp
|
|
@@ -1529,8 +1529,6 @@ void KItemListView::slotCurrentChanged(int current, int previous)
|
|
|
|
KItemListWidget *currentWidget = m_visibleItems.value(current, nullptr);
|
|
if (currentWidget) {
|
|
- // If previous item was -1, we're setting the first item current, so we can hide focus
|
|
- currentWidget->showFocusEffect(previous >= 0 ? true : false);
|
|
currentWidget->setCurrent(true);
|
|
}
|
|
}
|
|
@@ -1550,7 +1548,6 @@ void KItemListView::slotSelectionChanged(const KItemSet ¤t, const KItemSet
|
|
KItemListWidget *widget = it.value();
|
|
const bool isSelected(current.contains(index));
|
|
widget->setSelected(isSelected);
|
|
- widget->showFocusEffect(true);
|
|
|
|
#ifndef QT_NO_ACCESSIBILITY
|
|
if (!QAccessible::isActive()) {
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 174e2feb6a..6d1f40a444 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -37,7 +37,7 @@ KItemListWidget::KItemListWidget(KItemListWidgetInformant *informant, QGraphicsI
|
|
, m_expansionAreaHovered(false)
|
|
, m_alternateBackground(false)
|
|
, m_enabledSelectionToggle(false)
|
|
- , m_showFocusEffect(true)
|
|
+ , m_showKeyboardFocusEffect(false)
|
|
, m_data()
|
|
, m_visibleRoles()
|
|
, m_columnWidths()
|
|
@@ -635,7 +635,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
painter->fillPath(path, accentColor);
|
|
|
|
// Focus decoration
|
|
- if (current && m_showFocusEffect) {
|
|
+ if (current && m_showKeyboardFocusEffect) {
|
|
accentColor.setAlphaF(1.0);
|
|
// Set the pen color lighter or darker depending on background color
|
|
const QPen pen{m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker(110) : accentColor.lighter(110), focusPenWidth};
|
|
@@ -644,12 +644,17 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
}
|
|
}
|
|
|
|
-void KItemListWidget::showFocusEffect(bool show)
|
|
+void KItemListWidget::showKeyboardFocusEffect(bool show)
|
|
{
|
|
- if (m_showFocusEffect != show) {
|
|
- m_showFocusEffect = show;
|
|
+ if (m_showKeyboardFocusEffect != show) {
|
|
+ m_showKeyboardFocusEffect = show;
|
|
update();
|
|
}
|
|
}
|
|
|
|
+bool KItemListWidget::keyboardFocusEffectShown()
|
|
+{
|
|
+ return m_showKeyboardFocusEffect;
|
|
+}
|
|
+
|
|
#include "moc_kitemlistwidget.cpp"
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 06ed511155..21e2af4ba1 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -194,7 +194,8 @@ public:
|
|
*/
|
|
virtual void startActivateSoonAnimation(int timeUntilActivation);
|
|
|
|
- void showFocusEffect(bool showFocusEffect);
|
|
+ void showKeyboardFocusEffect(bool showFocusEffect);
|
|
+ bool keyboardFocusEffectShown();
|
|
|
|
Q_SIGNALS:
|
|
void roleEditingCanceled(int index, const QByteArray &role, const QVariant &value);
|
|
@@ -260,7 +261,7 @@ private:
|
|
bool m_expansionAreaHovered;
|
|
bool m_alternateBackground;
|
|
bool m_enabledSelectionToggle;
|
|
- bool m_showFocusEffect;
|
|
+ bool m_showKeyboardFocusEffect;
|
|
QHash<QByteArray, QVariant> m_data;
|
|
QList<QByteArray> m_visibleRoles;
|
|
QHash<QByteArray, qreal> m_columnWidths;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 80eaae9049df5806380de6a68f957dc503d8b06a Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 17 Apr 2025 16:50:45 +0300
|
|
Subject: [PATCH 25/69] Show focus when selection mode is toggled or navigation
|
|
keys pressed
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 8 +++++++-
|
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index f30453e9cb..466bf401ed 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -222,6 +222,9 @@ bool KItemListController::singleClickActivationEnforced() const
|
|
|
|
void KItemListController::setSelectionModeEnabled(bool enabled)
|
|
{
|
|
+ if (enabled) {
|
|
+ showKeyboardFocusEffect(true);
|
|
+ }
|
|
m_selectionMode = enabled;
|
|
}
|
|
|
|
@@ -238,7 +241,6 @@ bool KItemListController::isSearchAsYouTypeActive() const
|
|
bool KItemListController::keyPressEvent(QKeyEvent *event)
|
|
{
|
|
int index = m_selectionManager->currentItem();
|
|
- showKeyboardFocusEffect(true);
|
|
int key = event->key();
|
|
const bool shiftPressed = event->modifiers() & Qt::ShiftModifier;
|
|
|
|
@@ -291,6 +293,10 @@ bool KItemListController::keyPressEvent(QKeyEvent *event)
|
|
const bool navigationPressed = key == Qt::Key_Home || key == Qt::Key_End || key == Qt::Key_PageUp || key == Qt::Key_PageDown || key == Qt::Key_Up
|
|
|| key == Qt::Key_Down || key == Qt::Key_Left || key == Qt::Key_Right;
|
|
|
|
+ if (navigationPressed) {
|
|
+ showKeyboardFocusEffect(true);
|
|
+ }
|
|
+
|
|
const int itemCount = m_model->count();
|
|
|
|
// For horizontal scroll orientation, transform
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 0faf1eeabd4f6be73b622b13058c0b56a473be61 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 22 Apr 2025 16:23:18 +0300
|
|
Subject: [PATCH 26/69] Always show focus, make focus when unselected more
|
|
transparent, remove showKeyboardFocusEffect
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 17 -----------------
|
|
src/kitemviews/kitemlistcontroller.h | 1 -
|
|
src/kitemviews/kitemlistwidget.cpp | 23 +++++------------------
|
|
src/kitemviews/kitemlistwidget.h | 4 ----
|
|
4 files changed, 5 insertions(+), 40 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 466bf401ed..cd19cd7f69 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -222,9 +222,6 @@ bool KItemListController::singleClickActivationEnforced() const
|
|
|
|
void KItemListController::setSelectionModeEnabled(bool enabled)
|
|
{
|
|
- if (enabled) {
|
|
- showKeyboardFocusEffect(true);
|
|
- }
|
|
m_selectionMode = enabled;
|
|
}
|
|
|
|
@@ -293,10 +290,6 @@ bool KItemListController::keyPressEvent(QKeyEvent *event)
|
|
const bool navigationPressed = key == Qt::Key_Home || key == Qt::Key_End || key == Qt::Key_PageUp || key == Qt::Key_PageDown || key == Qt::Key_Up
|
|
|| key == Qt::Key_Down || key == Qt::Key_Left || key == Qt::Key_Right;
|
|
|
|
- if (navigationPressed) {
|
|
- showKeyboardFocusEffect(true);
|
|
- }
|
|
-
|
|
const int itemCount = m_model->count();
|
|
|
|
// For horizontal scroll orientation, transform
|
|
@@ -1775,8 +1768,6 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
}
|
|
|
|
return !createRubberBand;
|
|
- } else {
|
|
- showKeyboardFocusEffect(false);
|
|
}
|
|
|
|
return false;
|
|
@@ -1904,12 +1895,4 @@ void KItemListController::slotStateChanged(QScroller::State newState)
|
|
}
|
|
}
|
|
|
|
-void KItemListController::showKeyboardFocusEffect(bool show)
|
|
-{
|
|
- const auto widgets = m_view->visibleItemListWidgets();
|
|
- for (auto widget : widgets) {
|
|
- widget->showKeyboardFocusEffect(show);
|
|
- }
|
|
-}
|
|
-
|
|
#include "moc_kitemlistcontroller.cpp"
|
|
diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h
|
|
index d424f92dd0..48da07206d 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.h
|
|
+++ b/src/kitemviews/kitemlistcontroller.h
|
|
@@ -325,7 +325,6 @@ private:
|
|
bool onPress(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons);
|
|
bool onRelease(const QPointF &pos, const Qt::KeyboardModifiers modifiers, const Qt::MouseButtons buttons, bool touch);
|
|
void startRubberBand();
|
|
- void showKeyboardFocusEffect(bool show);
|
|
|
|
private:
|
|
bool m_singleClickActivationEnforced;
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 6d1f40a444..a67759d087 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -37,7 +37,6 @@ KItemListWidget::KItemListWidget(KItemListWidgetInformant *informant, QGraphicsI
|
|
, m_expansionAreaHovered(false)
|
|
, m_alternateBackground(false)
|
|
, m_enabledSelectionToggle(false)
|
|
- , m_showKeyboardFocusEffect(false)
|
|
, m_data()
|
|
, m_visibleRoles()
|
|
, m_columnWidths()
|
|
@@ -608,7 +607,6 @@ void KItemListWidget::clearHoverCache()
|
|
void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QStyle::State styleState)
|
|
{
|
|
QStyleOptionViewItem viewItemOption;
|
|
- const int focusPenWidth = 2;
|
|
const int roundness = 5;
|
|
initStyleOption(&viewItemOption);
|
|
viewItemOption.state = styleState;
|
|
@@ -635,26 +633,15 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
painter->fillPath(path, accentColor);
|
|
|
|
// Focus decoration
|
|
- if (current && m_showKeyboardFocusEffect) {
|
|
- accentColor.setAlphaF(1.0);
|
|
+ if (current) {
|
|
+ accentColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker(110) : accentColor.lighter(110);
|
|
+ accentColor.setAlphaF(m_selected || m_hovered ? 1.0 : 0.5);
|
|
// Set the pen color lighter or darker depending on background color
|
|
- const QPen pen{m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker(110) : accentColor.lighter(110), focusPenWidth};
|
|
+ QPen pen{accentColor, 1.5};
|
|
+ pen.setCosmetic(true);
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
}
|
|
}
|
|
|
|
-void KItemListWidget::showKeyboardFocusEffect(bool show)
|
|
-{
|
|
- if (m_showKeyboardFocusEffect != show) {
|
|
- m_showKeyboardFocusEffect = show;
|
|
- update();
|
|
- }
|
|
-}
|
|
-
|
|
-bool KItemListWidget::keyboardFocusEffectShown()
|
|
-{
|
|
- return m_showKeyboardFocusEffect;
|
|
-}
|
|
-
|
|
#include "moc_kitemlistwidget.cpp"
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 21e2af4ba1..0e07d7ab55 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -194,9 +194,6 @@ public:
|
|
*/
|
|
virtual void startActivateSoonAnimation(int timeUntilActivation);
|
|
|
|
- void showKeyboardFocusEffect(bool showFocusEffect);
|
|
- bool keyboardFocusEffectShown();
|
|
-
|
|
Q_SIGNALS:
|
|
void roleEditingCanceled(int index, const QByteArray &role, const QVariant &value);
|
|
void roleEditingFinished(int index, const QByteArray &role, const QVariant &value);
|
|
@@ -261,7 +258,6 @@ private:
|
|
bool m_expansionAreaHovered;
|
|
bool m_alternateBackground;
|
|
bool m_enabledSelectionToggle;
|
|
- bool m_showKeyboardFocusEffect;
|
|
QHash<QByteArray, QVariant> m_data;
|
|
QList<QByteArray> m_visibleRoles;
|
|
QHash<QByteArray, qreal> m_columnWidths;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From c372ea1e5c1fa65c86f971a20a0cb4ccaf1e3d41 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 22 Apr 2025 16:59:40 +0300
|
|
Subject: [PATCH 27/69] Fix inconsistent hover area sizing, refactor
|
|
selectionRect
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 9 ++++-----
|
|
src/kitemviews/kitemlistview.cpp | 2 +-
|
|
src/kitemviews/kitemlistwidget.cpp | 2 +-
|
|
src/kitemviews/kitemlistwidget.h | 10 +++++-----
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 14 +++++---------
|
|
5 files changed, 16 insertions(+), 21 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index cd19cd7f69..6ef03dc609 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -990,7 +990,7 @@ bool KItemListController::hoverMoveEvent(QGraphicsSceneHoverEvent *event, const
|
|
// we also unhover any old expansion toggle hovers, in case the mouse movement from expansion toggle to icon+text is too fast (i.e. newHoveredWidget is never null between the transition)
|
|
unhoverOldExpansionWidget();
|
|
|
|
- const bool isOverIconAndText = newHoveredWidget->iconRect().contains(mappedPos) || newHoveredWidget->textRect().contains(mappedPos);
|
|
+ const bool isOverIconAndText = newHoveredWidget->selectionRect().contains(mappedPos);
|
|
const bool hasMultipleSelection = m_selectionManager->selectedItems().count() > 1;
|
|
|
|
if (hasMultipleSelection && !isOverIconAndText) {
|
|
@@ -1366,8 +1366,7 @@ void KItemListController::slotRubberBandChanged()
|
|
if (widgetRect.intersects(rubberBandRect)) {
|
|
// Select the full row intersecting with the rubberband rectangle
|
|
const QRectF selectionRect = widget->selectionRect().translated(widgetRect.topLeft());
|
|
- const QRectF iconRect = widget->iconRect().translated(widgetRect.topLeft());
|
|
- if (selectionRect.intersects(rubberBandRect) || iconRect.intersects(rubberBandRect)) {
|
|
+ if (selectionRect.intersects(rubberBandRect)) {
|
|
selectedItems.insert(index);
|
|
}
|
|
}
|
|
@@ -1661,7 +1660,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (selectedItemsCount > 1 && m_pressedIndex.has_value()) {
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value());
|
|
const auto mappedPos = row->mapFromItem(m_view, pos);
|
|
- if (pressedItemAlreadySelected || row->iconRect().contains(mappedPos) || row->textRect().contains(mappedPos)) {
|
|
+ if (pressedItemAlreadySelected || row->selectionRect().contains(mappedPos)) {
|
|
// we are indeed inside the text/icon rect, keep m_pressedIndex what it is
|
|
// and short-circuit for single-click activation (it will then propagate to onRelease and activate the item)
|
|
// or we just keep going for double-click activation
|
|
@@ -1744,7 +1743,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
// We rule out the latter, if the item is not clicked directly and was unselected previously.
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value());
|
|
const auto mappedPos = row->mapFromItem(m_view, pos);
|
|
- if (!row->iconRect().contains(mappedPos) && !row->textRect().contains(mappedPos) && !pressedItemAlreadySelected) {
|
|
+ if (!row->selectionRect().contains(mappedPos) && !pressedItemAlreadySelected) {
|
|
createRubberBand = true;
|
|
} else {
|
|
m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Toggle);
|
|
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
|
|
index 265e41e6ca..9e0a9e0e5c 100644
|
|
--- a/src/kitemviews/kitemlistview.cpp
|
|
+++ b/src/kitemviews/kitemlistview.cpp
|
|
@@ -542,7 +542,7 @@ QRectF KItemListView::itemContextRect(int index) const
|
|
|
|
const KItemListWidget *widget = m_visibleItems.value(index);
|
|
if (widget) {
|
|
- contextRect = widget->iconRect() | widget->textRect();
|
|
+ contextRect = widget->selectionRect();
|
|
contextRect.translate(itemRect(index).topLeft());
|
|
}
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index a67759d087..8c2432967a 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -612,7 +612,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
- viewItemOption.rect = rect().toRect();
|
|
+ viewItemOption.rect = selectionRect().toRect();
|
|
QPainterPath path;
|
|
path.addRoundedRect(viewItemOption.rect, roundness, roundness);
|
|
QColor accentColor{widget->palette().color(QPalette::Accent)};
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 0e07d7ab55..4d857c00d7 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -144,11 +144,6 @@ public:
|
|
*/
|
|
bool contains(const QPointF &point) const override;
|
|
|
|
- /**
|
|
- * @return Rectangle for the area that shows the icon.
|
|
- */
|
|
- virtual QRectF iconRect() const = 0;
|
|
-
|
|
/**
|
|
* @return Rectangle for the area that contains the text-properties.
|
|
*/
|
|
@@ -245,6 +240,11 @@ private Q_SLOTS:
|
|
void slotHoverSequenceTimerTimeout();
|
|
|
|
private:
|
|
+ /**
|
|
+ * @return Rectangle for the area that shows the icon.
|
|
+ */
|
|
+ virtual QRectF iconRect() const = 0;
|
|
+
|
|
void initializeSelectionToggle();
|
|
void setHoverOpacity(qreal opacity);
|
|
void drawItemStyleOption(QPainter *painter, QWidget *widget, QStyle::State styleState);
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 0303547b23..4b061c9bb1 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -541,23 +541,19 @@ QRectF KStandardItemListWidget::selectionRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
|
|
- const int padding = styleOption().padding;
|
|
- QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding);
|
|
- QRectF result = adjustedIconRect | m_textRect;
|
|
if (m_highlightEntireRow) {
|
|
+ const int padding = styleOption().padding;
|
|
+ QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding);
|
|
+ QRectF result = adjustedIconRect | m_textRect;
|
|
if (layoutDirection() == Qt::LeftToRight) {
|
|
result.setRight(leftPadding() + m_columnWidthSum);
|
|
} else {
|
|
result.setLeft(size().width() - m_columnWidthSum - rightPadding());
|
|
}
|
|
+ return result;
|
|
} else {
|
|
- // Make sure values are always positive
|
|
- const int availableWidth = qAbs((size().width() - 2 * padding - result.width()) * 0.5);
|
|
- const int availableHeight = m_layout == CompactLayout ? 0 : qAbs((size().height() - 2 * padding - result.height()) * 0.5);
|
|
- result = result.adjusted(-availableWidth, -availableHeight, availableWidth, availableHeight);
|
|
+ return rect();
|
|
}
|
|
-
|
|
- return result;
|
|
}
|
|
|
|
QRectF KStandardItemListWidget::expansionToggleRect() const
|
|
--
|
|
GitLab
|
|
|
|
|
|
From b09399593c25ab44013cf98afa61813fa628af2a Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 23 Apr 2025 11:58:20 +0300
|
|
Subject: [PATCH 28/69] Add constexpr for roundness
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 8c2432967a..269c9b9955 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -607,7 +607,7 @@ void KItemListWidget::clearHoverCache()
|
|
void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QStyle::State styleState)
|
|
{
|
|
QStyleOptionViewItem viewItemOption;
|
|
- const int roundness = 5;
|
|
+ constexpr int roundness = 5; // From Breeze style.
|
|
initStyleOption(&viewItemOption);
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 688624a1521d8a1d70c37af79920283fda3f8e5f Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 23 Apr 2025 12:03:58 +0300
|
|
Subject: [PATCH 29/69] Add slight padding to compactlayout selectionRect
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 4b061c9bb1..8024d8cb54 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -541,8 +541,8 @@ QRectF KStandardItemListWidget::selectionRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
|
|
+ const int padding = styleOption().padding;
|
|
if (m_highlightEntireRow) {
|
|
- const int padding = styleOption().padding;
|
|
QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding);
|
|
QRectF result = adjustedIconRect | m_textRect;
|
|
if (layoutDirection() == Qt::LeftToRight) {
|
|
@@ -552,6 +552,9 @@ QRectF KStandardItemListWidget::selectionRect() const
|
|
}
|
|
return result;
|
|
} else {
|
|
+ if (m_layout == CompactLayout) {
|
|
+ return rect().adjusted(0, padding, 0, -padding);
|
|
+ }
|
|
return rect();
|
|
}
|
|
}
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 320e14cc150e90bbd2a9981ac5e48973755e6d02 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 23 Apr 2025 12:11:04 +0300
|
|
Subject: [PATCH 30/69] Add rubberband start behavior back
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 13 ++++++++++++-
|
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 6ef03dc609..fd3feb1a1b 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1720,7 +1720,18 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
}
|
|
|
|
if (m_pressedIndex.has_value()) {
|
|
- bool createRubberBand = false;
|
|
+ // The hover highlight area of an item is being pressed.
|
|
+ const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); // anything outside of row.contains() will be the empty region of the row rect
|
|
+ const bool hitTargetIsRowEmptyRegion = !row->contains(row->mapFromItem(m_view, pos));
|
|
+ // again, when this method returns false, a rubberBand selection is created as the event is not consumed;
|
|
+ // createRubberBand here tells us whether to return true or false.
|
|
+ bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
+
|
|
+ if (rightClick && hitTargetIsRowEmptyRegion) {
|
|
+ // We have a right click outside the icon and text rect but within the hover highlight area.
|
|
+ // We don't want items to get selected through this, so we return now.
|
|
+ return true;
|
|
+ }
|
|
|
|
m_selectionManager->setCurrentItem(m_pressedIndex.value());
|
|
|
|
--
|
|
GitLab
|
|
|
|
|
|
From bf66254daea497b588cdaf2578f3990597188f8a Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 25 Apr 2025 11:06:02 +0300
|
|
Subject: [PATCH 31/69] Remove hover pixmap
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 18 +++---------------
|
|
src/kitemviews/kstandarditemlistwidget.h | 1 -
|
|
2 files changed, 3 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 8024d8cb54..da7fd5f4c7 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -271,7 +271,6 @@ KStandardItemListWidget::KStandardItemListWidget(KItemListWidgetInformant *infor
|
|
, m_scaledPixmapSize()
|
|
, m_columnWidthSum()
|
|
, m_iconRect()
|
|
- , m_hoverPixmap()
|
|
, m_textRect()
|
|
, m_sortedVisibleRoles()
|
|
, m_expansionArea()
|
|
@@ -346,7 +345,7 @@ void KStandardItemListWidget::paint(QPainter *painter, const QStyleOptionGraphic
|
|
drawSiblingsInformation(painter);
|
|
}
|
|
|
|
- auto pixmap = isHovered() ? m_hoverPixmap : m_pixmap;
|
|
+ auto pixmap = m_pixmap;
|
|
if (!m_overlays.isEmpty()) {
|
|
const qreal dpr = KItemViewsUtils::devicePixelRatio(this);
|
|
|
|
@@ -388,7 +387,7 @@ void KStandardItemListWidget::paint(QPainter *painter, const QStyleOptionGraphic
|
|
{
|
|
QPainter p(&pixmap2);
|
|
p.setOpacity(hoverOpacity());
|
|
- p.drawPixmap(0, 0, m_hoverPixmap);
|
|
+ p.drawPixmap(0, 0, m_pixmap);
|
|
}
|
|
|
|
// Paint pixmap2 on pixmap1 using CompositionMode_Plus
|
|
@@ -1108,7 +1107,7 @@ void KStandardItemListWidget::updatePixmapCache()
|
|
}
|
|
|
|
if (m_pixmap.isNull()) {
|
|
- m_hoverPixmap = QPixmap();
|
|
+ m_pixmap = QPixmap();
|
|
return;
|
|
}
|
|
|
|
@@ -1166,17 +1165,6 @@ void KStandardItemListWidget::updatePixmapCache()
|
|
const QSizeF squareIconSize(widgetIconSize, widgetIconSize);
|
|
m_iconRect = QRectF(squareIconPos, squareIconSize);
|
|
}
|
|
-
|
|
- // Prepare the pixmap that is used when the item gets hovered
|
|
- if (isHovered()) {
|
|
- m_hoverPixmap = m_pixmap;
|
|
- if (isSelected()) {
|
|
- KIconEffect::toActive(m_hoverPixmap);
|
|
- }
|
|
- } else if (hoverOpacity() <= 0.0) {
|
|
- // No hover animation is ongoing. Clear m_hoverPixmap to save memory.
|
|
- m_hoverPixmap = QPixmap();
|
|
- }
|
|
}
|
|
|
|
void KStandardItemListWidget::updateTextsCache()
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h
|
|
index 594d3e4928..3dbf442913 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.h
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.h
|
|
@@ -280,7 +280,6 @@ private:
|
|
|
|
qreal m_columnWidthSum;
|
|
QRectF m_iconRect; // Cache for KItemListWidget::iconRect()
|
|
- QPixmap m_hoverPixmap; // Cache for modified m_pixmap when hovering the item
|
|
|
|
QRectF m_textRect;
|
|
|
|
--
|
|
GitLab
|
|
|
|
|
|
From f41db3725ad36175721afd430de8ea1b63867803 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 25 Apr 2025 11:12:33 +0300
|
|
Subject: [PATCH 32/69] Change the alpha values
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 8 ++++----
|
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 269c9b9955..b52661e6ee 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -623,11 +623,11 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// https://invent.kde.org/plasma/libplasma/-/blob/master/src/desktoptheme/breeze/widgets/viewitem.svg
|
|
accentColor.setAlphaF(0.0);
|
|
if (m_selected && m_hovered) {
|
|
- accentColor.setAlphaF(0.5);
|
|
+ accentColor.setAlphaF(0.25);
|
|
} else if (m_selected) {
|
|
- accentColor.setAlphaF(0.4);
|
|
+ accentColor.setAlphaF(0.2);
|
|
} else if (m_hovered) {
|
|
- accentColor.setAlphaF(0.3);
|
|
+ accentColor.setAlphaF(0.15);
|
|
}
|
|
|
|
painter->fillPath(path, accentColor);
|
|
@@ -635,7 +635,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// Focus decoration
|
|
if (current) {
|
|
accentColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker(110) : accentColor.lighter(110);
|
|
- accentColor.setAlphaF(m_selected || m_hovered ? 1.0 : 0.5);
|
|
+ accentColor.setAlphaF(m_selected || m_hovered ? 0.8 : 0.5);
|
|
// Set the pen color lighter or darker depending on background color
|
|
QPen pen{accentColor, 1.5};
|
|
pen.setCosmetic(true);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From e299bf436628e58677f06513266811ac4f215f59 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 25 Apr 2025 12:53:42 +0300
|
|
Subject: [PATCH 33/69] Set hovered effect to widgets when dragging
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index fd3feb1a1b..66e9ce4884 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -652,6 +652,10 @@ bool KItemListController::mouseMoveEvent(QGraphicsSceneMouseEvent *event, const
|
|
m_selectionManager->endAnchoredSelection();
|
|
m_selectionManager->setCurrentItem(newCurrent.value());
|
|
m_selectionManager->beginAnchoredSelection(newCurrent.value());
|
|
+ // Set hovered effect when dragging.
|
|
+ for (const auto widget : m_view->visibleItemListWidgets()) {
|
|
+ widget->setHovered(widget->isCurrent());
|
|
+ }
|
|
}
|
|
|
|
if (m_view->scrollOrientation() == Qt::Vertical) {
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 7a96007a21cc3a844a04992bd4edb764df561039 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 25 Apr 2025 13:08:52 +0300
|
|
Subject: [PATCH 34/69] Move virtual iconrect back to public
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.h | 10 +++++-----
|
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 4d857c00d7..0e07d7ab55 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -144,6 +144,11 @@ public:
|
|
*/
|
|
bool contains(const QPointF &point) const override;
|
|
|
|
+ /**
|
|
+ * @return Rectangle for the area that shows the icon.
|
|
+ */
|
|
+ virtual QRectF iconRect() const = 0;
|
|
+
|
|
/**
|
|
* @return Rectangle for the area that contains the text-properties.
|
|
*/
|
|
@@ -240,11 +245,6 @@ private Q_SLOTS:
|
|
void slotHoverSequenceTimerTimeout();
|
|
|
|
private:
|
|
- /**
|
|
- * @return Rectangle for the area that shows the icon.
|
|
- */
|
|
- virtual QRectF iconRect() const = 0;
|
|
-
|
|
void initializeSelectionToggle();
|
|
void setHoverOpacity(qreal opacity);
|
|
void drawItemStyleOption(QPainter *painter, QWidget *widget, QStyle::State styleState);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 829d721b6ed44202ad91b4ee0ead1b578746d21f Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 25 Apr 2025 13:11:20 +0300
|
|
Subject: [PATCH 35/69] Remove unecessary assignment
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 1 -
|
|
1 file changed, 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index da7fd5f4c7..25dece0f62 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -1107,7 +1107,6 @@ void KStandardItemListWidget::updatePixmapCache()
|
|
}
|
|
|
|
if (m_pixmap.isNull()) {
|
|
- m_pixmap = QPixmap();
|
|
return;
|
|
}
|
|
|
|
--
|
|
GitLab
|
|
|
|
|
|
From d8d4a220cb55e0de7364abd1ebfa4666dbbfa2a8 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 28 Apr 2025 15:56:09 +0300
|
|
Subject: [PATCH 36/69] Better alpha values
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 8 ++++----
|
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index b52661e6ee..1b6969130f 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -623,11 +623,11 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// https://invent.kde.org/plasma/libplasma/-/blob/master/src/desktoptheme/breeze/widgets/viewitem.svg
|
|
accentColor.setAlphaF(0.0);
|
|
if (m_selected && m_hovered) {
|
|
- accentColor.setAlphaF(0.25);
|
|
+ accentColor.setAlphaF(0.32);
|
|
} else if (m_selected) {
|
|
- accentColor.setAlphaF(0.2);
|
|
+ accentColor.setAlphaF(0.30);
|
|
} else if (m_hovered) {
|
|
- accentColor.setAlphaF(0.15);
|
|
+ accentColor.setAlphaF(0.20);
|
|
}
|
|
|
|
painter->fillPath(path, accentColor);
|
|
@@ -635,7 +635,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// Focus decoration
|
|
if (current) {
|
|
accentColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker(110) : accentColor.lighter(110);
|
|
- accentColor.setAlphaF(m_selected || m_hovered ? 0.8 : 0.5);
|
|
+ accentColor.setAlphaF(m_selected || m_hovered ? 0.8 : 0.6);
|
|
// Set the pen color lighter or darker depending on background color
|
|
QPen pen{accentColor, 1.5};
|
|
pen.setCosmetic(true);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From c116d53065c1cd71a1f5d924643824145e2e834e Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 29 Apr 2025 11:35:57 +0300
|
|
Subject: [PATCH 37/69] Use text color as background color, modify alpha values
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 20 +++++++++++---------
|
|
1 file changed, 11 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 1b6969130f..0af131c586 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -615,29 +615,31 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
viewItemOption.rect = selectionRect().toRect();
|
|
QPainterPath path;
|
|
path.addRoundedRect(viewItemOption.rect, roundness, roundness);
|
|
- QColor accentColor{widget->palette().color(QPalette::Accent)};
|
|
+ QColor backgroundColor{widget->palette().color(QPalette::Accent)};
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
bool current = m_current && styleState & QStyle::State_Active;
|
|
|
|
// Background item, alpha values are from
|
|
// https://invent.kde.org/plasma/libplasma/-/blob/master/src/desktoptheme/breeze/widgets/viewitem.svg
|
|
- accentColor.setAlphaF(0.0);
|
|
+ backgroundColor.setAlphaF(0.0);
|
|
if (m_selected && m_hovered) {
|
|
- accentColor.setAlphaF(0.32);
|
|
+ backgroundColor.setAlphaF(0.40);
|
|
} else if (m_selected) {
|
|
- accentColor.setAlphaF(0.30);
|
|
+ backgroundColor.setAlphaF(0.32);
|
|
} else if (m_hovered) {
|
|
- accentColor.setAlphaF(0.20);
|
|
+ backgroundColor = widget->palette().color(QPalette::Text);
|
|
+ backgroundColor.setAlphaF(0.06);
|
|
}
|
|
|
|
- painter->fillPath(path, accentColor);
|
|
+ painter->fillPath(path, backgroundColor);
|
|
|
|
// Focus decoration
|
|
if (current) {
|
|
- accentColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? accentColor.darker(110) : accentColor.lighter(110);
|
|
- accentColor.setAlphaF(m_selected || m_hovered ? 0.8 : 0.6);
|
|
+ QColor focusColor{widget->palette().color(QPalette::Accent)};
|
|
+ focusColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? focusColor.darker(110) : focusColor.lighter(110);
|
|
+ focusColor.setAlphaF(m_selected || m_hovered ? 0.8 : 0.6);
|
|
// Set the pen color lighter or darker depending on background color
|
|
- QPen pen{accentColor, 1.5};
|
|
+ QPen pen{focusColor, 1.5};
|
|
pen.setCosmetic(true);
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 66ccf1e63224471fa80ea4d2d868c8dc31697498 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 5 May 2025 14:31:47 +0300
|
|
Subject: [PATCH 38/69] Make sure backgrounds dont overlap at the outline
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 5 +++--
|
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 0af131c586..c65c0b2d78 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -608,13 +608,14 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
{
|
|
QStyleOptionViewItem viewItemOption;
|
|
constexpr int roundness = 5; // From Breeze style.
|
|
+ constexpr qreal penWidth = 1.5;
|
|
initStyleOption(&viewItemOption);
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
viewItemOption.rect = selectionRect().toRect();
|
|
QPainterPath path;
|
|
- path.addRoundedRect(viewItemOption.rect, roundness, roundness);
|
|
+ path.addRoundedRect(selectionRect().adjusted(penWidth, penWidth, -penWidth, -penWidth), roundness, roundness);
|
|
QColor backgroundColor{widget->palette().color(QPalette::Accent)};
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
bool current = m_current && styleState & QStyle::State_Active;
|
|
@@ -639,7 +640,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
focusColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? focusColor.darker(110) : focusColor.lighter(110);
|
|
focusColor.setAlphaF(m_selected || m_hovered ? 0.8 : 0.6);
|
|
// Set the pen color lighter or darker depending on background color
|
|
- QPen pen{focusColor, 1.5};
|
|
+ QPen pen{focusColor, penWidth};
|
|
pen.setCosmetic(true);
|
|
painter->setPen(pen);
|
|
painter->drawPath(path);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 91f8b3123f62db459c970c46190cbf967e1050f9 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 23 May 2025 14:22:14 +0300
|
|
Subject: [PATCH 39/69] Add horizontal margin according to icon size
|
|
|
|
---
|
|
src/views/dolphinitemlistview.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/views/dolphinitemlistview.cpp b/src/views/dolphinitemlistview.cpp
|
|
index d31dc11bae..7910080f82 100644
|
|
--- a/src/views/dolphinitemlistview.cpp
|
|
+++ b/src/views/dolphinitemlistview.cpp
|
|
@@ -194,7 +194,7 @@ void DolphinItemListView::updateGridSize()
|
|
|
|
itemHeight = padding * 3 + iconSize + option.fontMetrics.lineSpacing();
|
|
|
|
- horizontalMargin = 4;
|
|
+ horizontalMargin = qMax(8.0, ((iconSize + padding) / 4.0)) * qApp->devicePixelRatio();
|
|
verticalMargin = 8;
|
|
maxTextLines = IconsModeSettings::maximumTextLines();
|
|
break;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 4884701d6f4f4e86bf490c5f5df80289f8b40873 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 26 May 2025 16:21:21 +0300
|
|
Subject: [PATCH 40/69] Use PM_SizeGripSize for horizontal and vertical margins
|
|
|
|
---
|
|
src/views/dolphinitemlistview.cpp | 5 +++--
|
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/views/dolphinitemlistview.cpp b/src/views/dolphinitemlistview.cpp
|
|
index 7910080f82..8529f23a76 100644
|
|
--- a/src/views/dolphinitemlistview.cpp
|
|
+++ b/src/views/dolphinitemlistview.cpp
|
|
@@ -194,8 +194,9 @@ void DolphinItemListView::updateGridSize()
|
|
|
|
itemHeight = padding * 3 + iconSize + option.fontMetrics.lineSpacing();
|
|
|
|
- horizontalMargin = qMax(8.0, ((iconSize + padding) / 4.0)) * qApp->devicePixelRatio();
|
|
- verticalMargin = 8;
|
|
+ const auto margin = style()->pixelMetric(QStyle::PM_SizeGripSize);
|
|
+ horizontalMargin = margin;
|
|
+ verticalMargin = margin;
|
|
maxTextLines = IconsModeSettings::maximumTextLines();
|
|
break;
|
|
}
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 452a00a4fe2e1552d9b1e48b4d9ab98b67007072 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 2 Jun 2025 12:34:02 +0300
|
|
Subject: [PATCH 41/69] Refactor selectionRect to
|
|
selectionRectCore/extended/visual
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 10 +++---
|
|
src/kitemviews/kitemlistview.cpp | 4 +--
|
|
src/kitemviews/kitemlistwidget.cpp | 7 ++--
|
|
src/kitemviews/kitemlistwidget.h | 22 ++++++++----
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 41 ++++++++++++----------
|
|
src/kitemviews/kstandarditemlistwidget.h | 5 +--
|
|
6 files changed, 51 insertions(+), 38 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 66e9ce4884..566f1d6a24 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -994,7 +994,7 @@ bool KItemListController::hoverMoveEvent(QGraphicsSceneHoverEvent *event, const
|
|
// we also unhover any old expansion toggle hovers, in case the mouse movement from expansion toggle to icon+text is too fast (i.e. newHoveredWidget is never null between the transition)
|
|
unhoverOldExpansionWidget();
|
|
|
|
- const bool isOverIconAndText = newHoveredWidget->selectionRect().contains(mappedPos);
|
|
+ const bool isOverIconAndText = newHoveredWidget->selectionRectCore().contains(mappedPos);
|
|
const bool hasMultipleSelection = m_selectionManager->selectedItems().count() > 1;
|
|
|
|
if (hasMultipleSelection && !isOverIconAndText) {
|
|
@@ -1369,7 +1369,7 @@ void KItemListController::slotRubberBandChanged()
|
|
const QRectF widgetRect = m_view->itemRect(index);
|
|
if (widgetRect.intersects(rubberBandRect)) {
|
|
// Select the full row intersecting with the rubberband rectangle
|
|
- const QRectF selectionRect = widget->selectionRect().translated(widgetRect.topLeft());
|
|
+ const QRectF selectionRect = widget->visualSelectionRect().translated(widgetRect.topLeft());
|
|
if (selectionRect.intersects(rubberBandRect)) {
|
|
selectedItems.insert(index);
|
|
}
|
|
@@ -1470,7 +1470,7 @@ KItemListWidget *KItemListController::widgetForPos(const QPointF &pos) const
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
for (KItemListWidget *widget : widgets) {
|
|
const QPointF mappedPos = widget->mapFromItem(m_view, pos);
|
|
- if (widget->contains(mappedPos) || widget->selectionRect().contains(mappedPos)) {
|
|
+ if (widget->contains(mappedPos) || widget->visualSelectionRect().contains(mappedPos)) {
|
|
return widget;
|
|
}
|
|
}
|
|
@@ -1664,7 +1664,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (selectedItemsCount > 1 && m_pressedIndex.has_value()) {
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value());
|
|
const auto mappedPos = row->mapFromItem(m_view, pos);
|
|
- if (pressedItemAlreadySelected || row->selectionRect().contains(mappedPos)) {
|
|
+ if (pressedItemAlreadySelected || row->selectionRectCore().contains(mappedPos)) {
|
|
// we are indeed inside the text/icon rect, keep m_pressedIndex what it is
|
|
// and short-circuit for single-click activation (it will then propagate to onRelease and activate the item)
|
|
// or we just keep going for double-click activation
|
|
@@ -1758,7 +1758,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
// We rule out the latter, if the item is not clicked directly and was unselected previously.
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value());
|
|
const auto mappedPos = row->mapFromItem(m_view, pos);
|
|
- if (!row->selectionRect().contains(mappedPos) && !pressedItemAlreadySelected) {
|
|
+ if (!row->selectionRectCore().contains(mappedPos) && !pressedItemAlreadySelected) {
|
|
createRubberBand = true;
|
|
} else {
|
|
m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Toggle);
|
|
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
|
|
index 9e0a9e0e5c..4146dd8438 100644
|
|
--- a/src/kitemviews/kitemlistview.cpp
|
|
+++ b/src/kitemviews/kitemlistview.cpp
|
|
@@ -425,7 +425,7 @@ std::optional<int> KItemListView::itemAt(const QPointF &pos) const
|
|
|
|
const KItemListWidget *widget = it.value();
|
|
const QPointF mappedPos = widget->mapFromItem(this, pos);
|
|
- if (widget->contains(mappedPos) || widget->selectionRect().contains(mappedPos)) {
|
|
+ if (widget->contains(mappedPos) || widget->visualSelectionRect().contains(mappedPos)) {
|
|
return it.key();
|
|
}
|
|
}
|
|
@@ -542,7 +542,7 @@ QRectF KItemListView::itemContextRect(int index) const
|
|
|
|
const KItemListWidget *widget = m_visibleItems.value(index);
|
|
if (widget) {
|
|
- contextRect = widget->selectionRect();
|
|
+ contextRect = widget->visualSelectionRect();
|
|
contextRect.translate(itemRect(index).topLeft());
|
|
}
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index c65c0b2d78..18bd4c48b3 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -407,7 +407,7 @@ bool KItemListWidget::contains(const QPointF &point) const
|
|
return false;
|
|
}
|
|
|
|
- return iconRect().contains(point) || textRect().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point);
|
|
+ return selectionRectCore().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point);
|
|
}
|
|
|
|
QRectF KItemListWidget::textFocusRect() const
|
|
@@ -613,9 +613,10 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
- viewItemOption.rect = selectionRect().toRect();
|
|
+ // TODO: check if we're extended or not
|
|
+ viewItemOption.rect = visualSelectionRect().toRect();
|
|
QPainterPath path;
|
|
- path.addRoundedRect(selectionRect().adjusted(penWidth, penWidth, -penWidth, -penWidth), roundness, roundness);
|
|
+ path.addRoundedRect(visualSelectionRect().adjusted(penWidth, penWidth, -penWidth, -penWidth), roundness, roundness);
|
|
QColor backgroundColor{widget->palette().color(QPalette::Accent)};
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
bool current = m_current && styleState & QStyle::State_Active;
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 0e07d7ab55..489081b604 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -144,11 +144,6 @@ public:
|
|
*/
|
|
bool contains(const QPointF &point) const override;
|
|
|
|
- /**
|
|
- * @return Rectangle for the area that shows the icon.
|
|
- */
|
|
- virtual QRectF iconRect() const = 0;
|
|
-
|
|
/**
|
|
* @return Rectangle for the area that contains the text-properties.
|
|
*/
|
|
@@ -164,9 +159,22 @@ public:
|
|
virtual QRectF textFocusRect() const;
|
|
|
|
/**
|
|
- * @return Rectangle around which a selection box should be drawn if the item is selected.
|
|
+ * Used for drawing the visuals, and situations where we want the behavior of the
|
|
+ * selection to match the visuals.
|
|
+ *
|
|
+ * @return The rectangle around selection, depending on if it's full width or not.
|
|
+ */
|
|
+ virtual QRectF visualSelectionRect() const = 0;
|
|
+
|
|
+ /**
|
|
+ * @return Rectangle around icon and it's text: The core area of the item.
|
|
+ */
|
|
+ virtual QRectF selectionRectCore() const = 0;
|
|
+
|
|
+ /**
|
|
+ * @return Same as core, but extended to the full width of the details view.
|
|
*/
|
|
- virtual QRectF selectionRect() const = 0;
|
|
+ virtual QRectF selectionRectExtended() const = 0;
|
|
|
|
/**
|
|
* @return Rectangle for the selection-toggle that is used to select or deselect an item.
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 25dece0f62..0661a19944 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -483,12 +483,6 @@ void KStandardItemListWidget::paint(QPainter *painter, const QStyleOptionGraphic
|
|
#endif
|
|
}
|
|
|
|
-QRectF KStandardItemListWidget::iconRect() const
|
|
-{
|
|
- const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
- return m_iconRect;
|
|
-}
|
|
-
|
|
QRectF KStandardItemListWidget::textRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
@@ -536,28 +530,37 @@ QRectF KStandardItemListWidget::textFocusRect() const
|
|
return m_textRect;
|
|
}
|
|
|
|
-QRectF KStandardItemListWidget::selectionRect() const
|
|
+QRectF KStandardItemListWidget::visualSelectionRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
-
|
|
- const int padding = styleOption().padding;
|
|
if (m_highlightEntireRow) {
|
|
- QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding);
|
|
- QRectF result = adjustedIconRect | m_textRect;
|
|
- if (layoutDirection() == Qt::LeftToRight) {
|
|
- result.setRight(leftPadding() + m_columnWidthSum);
|
|
- } else {
|
|
- result.setLeft(size().width() - m_columnWidthSum - rightPadding());
|
|
- }
|
|
- return result;
|
|
+ return selectionRectExtended();
|
|
} else {
|
|
if (m_layout == CompactLayout) {
|
|
- return rect().adjusted(0, padding, 0, -padding);
|
|
+ const int padding = styleOption().padding;
|
|
+ return rect().adjusted(-padding, 0, padding, 0);
|
|
}
|
|
return rect();
|
|
}
|
|
}
|
|
|
|
+QRectF KStandardItemListWidget::selectionRectCore() const
|
|
+{
|
|
+ QRectF result = m_iconRect | m_textRect;
|
|
+ return result;
|
|
+}
|
|
+
|
|
+QRectF KStandardItemListWidget::selectionRectExtended() const
|
|
+{
|
|
+ QRectF result = selectionRectCore();
|
|
+ if (layoutDirection() == Qt::LeftToRight) {
|
|
+ result.setRight(leftPadding() + m_columnWidthSum);
|
|
+ } else {
|
|
+ result.setLeft(size().width() - m_columnWidthSum - rightPadding());
|
|
+ }
|
|
+ return result;
|
|
+}
|
|
+
|
|
QRectF KStandardItemListWidget::expansionToggleRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
@@ -577,7 +580,7 @@ QRectF KStandardItemListWidget::selectionToggleRect() const
|
|
}
|
|
|
|
const int padding = styleOption().padding;
|
|
- const QRectF selectionRectMinusPadding = selectionRect().adjusted(padding, padding, -padding, -padding);
|
|
+ const QRectF selectionRectMinusPadding = selectionRectCore().adjusted(padding, padding, -padding, -padding);
|
|
QPointF pos = selectionRectMinusPadding.topLeft();
|
|
if (QApplication::isRightToLeft()) {
|
|
pos.setX(selectionRectMinusPadding.right() - (pos.x() + toggleSize - selectionRectMinusPadding.left()));
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h
|
|
index 3dbf442913..c8feed1c9f 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.h
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.h
|
|
@@ -105,10 +105,11 @@ public:
|
|
|
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
|
|
|
|
- QRectF iconRect() const override;
|
|
QRectF textRect() const override;
|
|
QRectF textFocusRect() const override;
|
|
- QRectF selectionRect() const override;
|
|
+ QRectF visualSelectionRect() const override;
|
|
+ QRectF selectionRectCore() const override;
|
|
+ QRectF selectionRectExtended() const override;
|
|
QRectF expansionToggleRect() const override;
|
|
QRectF selectionToggleRect() const override;
|
|
QPixmap createDragPixmap(const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 6a9f1e168b201d6f6d2edf88d1eb040a208d48f5 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 2 Jun 2025 19:04:47 +0300
|
|
Subject: [PATCH 42/69] fix emblem position
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 0661a19944..58fc9b0415 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -580,7 +580,7 @@ QRectF KStandardItemListWidget::selectionToggleRect() const
|
|
}
|
|
|
|
const int padding = styleOption().padding;
|
|
- const QRectF selectionRectMinusPadding = selectionRectCore().adjusted(padding, padding, -padding, -padding);
|
|
+ const QRectF selectionRectMinusPadding = visualSelectionRect().adjusted(padding, padding, -padding, -padding);
|
|
QPointF pos = selectionRectMinusPadding.topLeft();
|
|
if (QApplication::isRightToLeft()) {
|
|
pos.setX(selectionRectMinusPadding.right() - (pos.x() + toggleSize - selectionRectMinusPadding.left()));
|
|
--
|
|
GitLab
|
|
|
|
|
|
From f1098aa09599e59fceacc3c90e3daf5b4c177860 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 2 Jun 2025 19:05:01 +0300
|
|
Subject: [PATCH 43/69] fix widget contains
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 18bd4c48b3..ea6b31861e 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -407,7 +407,7 @@ bool KItemListWidget::contains(const QPointF &point) const
|
|
return false;
|
|
}
|
|
|
|
- return selectionRectCore().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point);
|
|
+ return visualSelectionRect().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point);
|
|
}
|
|
|
|
QRectF KItemListWidget::textFocusRect() const
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 5e9a5e1a0801a4e9e8b3b72f741cb989e8637e18 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 2 Jun 2025 19:05:11 +0300
|
|
Subject: [PATCH 44/69] remove unnecessary comparisons
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
src/kitemviews/kitemlistview.cpp | 2 +-
|
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 566f1d6a24..e398985e8a 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1470,7 +1470,7 @@ KItemListWidget *KItemListController::widgetForPos(const QPointF &pos) const
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
for (KItemListWidget *widget : widgets) {
|
|
const QPointF mappedPos = widget->mapFromItem(m_view, pos);
|
|
- if (widget->contains(mappedPos) || widget->visualSelectionRect().contains(mappedPos)) {
|
|
+ if (widget->contains(mappedPos)) {
|
|
return widget;
|
|
}
|
|
}
|
|
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
|
|
index 4146dd8438..90f2beebb9 100644
|
|
--- a/src/kitemviews/kitemlistview.cpp
|
|
+++ b/src/kitemviews/kitemlistview.cpp
|
|
@@ -425,7 +425,7 @@ std::optional<int> KItemListView::itemAt(const QPointF &pos) const
|
|
|
|
const KItemListWidget *widget = it.value();
|
|
const QPointF mappedPos = widget->mapFromItem(this, pos);
|
|
- if (widget->contains(mappedPos) || widget->visualSelectionRect().contains(mappedPos)) {
|
|
+ if (widget->contains(mappedPos)) {
|
|
return it.key();
|
|
}
|
|
}
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 57d43263cbee51f0f3cb9b0675ffd9fd347791dc Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 2 Jun 2025 19:42:30 +0300
|
|
Subject: [PATCH 45/69] Draw different selection highlights depending on
|
|
settings
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 8 ++++++--
|
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 58fc9b0415..d507d7c0f1 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -533,8 +533,12 @@ QRectF KStandardItemListWidget::textFocusRect() const
|
|
QRectF KStandardItemListWidget::visualSelectionRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
- if (m_highlightEntireRow) {
|
|
- return selectionRectExtended();
|
|
+ if (m_layout == DetailsLayout) {
|
|
+ if (m_highlightEntireRow) {
|
|
+ return rect();
|
|
+ } else {
|
|
+ return selectionRectExtended();
|
|
+ }
|
|
} else {
|
|
if (m_layout == CompactLayout) {
|
|
const int padding = styleOption().padding;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 337040cbe81adb6e443fc11045e9e2fd5f800a2b Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 2 Jun 2025 19:44:24 +0300
|
|
Subject: [PATCH 46/69] Make sure we follow details mode selection settings
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index e398985e8a..45cba1a0db 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1726,7 +1726,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (m_pressedIndex.has_value()) {
|
|
// The hover highlight area of an item is being pressed.
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); // anything outside of row.contains() will be the empty region of the row rect
|
|
- const bool hitTargetIsRowEmptyRegion = !row->contains(row->mapFromItem(m_view, pos));
|
|
+ const bool hitTargetIsRowEmptyRegion = !row->selectionRectCore().contains(row->mapFromItem(m_view, pos));
|
|
// again, when this method returns false, a rubberBand selection is created as the event is not consumed;
|
|
// createRubberBand here tells us whether to return true or false.
|
|
bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
--
|
|
GitLab
|
|
|
|
|
|
From e212678b7c1972cd28c72d6515ad7e52242e3082 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 3 Jun 2025 11:46:56 +0300
|
|
Subject: [PATCH 47/69] Fix drawing for details view
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 8 ++++----
|
|
2 files changed, 5 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 45cba1a0db..dfe3fb0eaf 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1726,7 +1726,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (m_pressedIndex.has_value()) {
|
|
// The hover highlight area of an item is being pressed.
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); // anything outside of row.contains() will be the empty region of the row rect
|
|
- const bool hitTargetIsRowEmptyRegion = !row->selectionRectCore().contains(row->mapFromItem(m_view, pos));
|
|
+ const bool hitTargetIsRowEmptyRegion = !row->visualSelectionRect().contains(row->mapFromItem(m_view, pos));
|
|
// again, when this method returns false, a rubberBand selection is created as the event is not consumed;
|
|
// createRubberBand here tells us whether to return true or false.
|
|
bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index d507d7c0f1..a233472fc6 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -533,15 +533,15 @@ QRectF KStandardItemListWidget::textFocusRect() const
|
|
QRectF KStandardItemListWidget::visualSelectionRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
+ const int padding = styleOption().padding;
|
|
if (m_layout == DetailsLayout) {
|
|
+ auto rect = selectionRectCore();
|
|
if (m_highlightEntireRow) {
|
|
- return rect();
|
|
- } else {
|
|
- return selectionRectExtended();
|
|
+ rect = selectionRectExtended();
|
|
}
|
|
+ return rect.adjusted(-padding, 0, padding, 0);
|
|
} else {
|
|
if (m_layout == CompactLayout) {
|
|
- const int padding = styleOption().padding;
|
|
return rect().adjusted(-padding, 0, padding, 0);
|
|
}
|
|
return rect();
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 85e7e8eb933448b89138e0ce0b1d23f838711aa3 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 3 Jun 2025 12:00:17 +0300
|
|
Subject: [PATCH 48/69] cleanup
|
|
|
|
---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 1 -
|
|
1 file changed, 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index a233472fc6..ed267bb25d 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -1295,7 +1295,6 @@ void KStandardItemListWidget::updateIconsLayoutTextCache()
|
|
|
|
const KItemListStyleOption &option = styleOption();
|
|
const qreal padding = option.padding;
|
|
- // adjust the max width according to new outline style
|
|
const qreal maxWidth = size().width() - 2 * padding;
|
|
const qreal lineSpacing = m_customizedFontMetrics.lineSpacing();
|
|
|
|
--
|
|
GitLab
|
|
|
|
|
|
From a22c63ce2472213ca27fe57c4feafde3985a99d7 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Tue, 3 Jun 2025 17:51:51 +0300
|
|
Subject: [PATCH 49/69] remove hover effect when dragging
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 6 +-----
|
|
1 file changed, 1 insertion(+), 5 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index dfe3fb0eaf..561917e80e 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -652,10 +652,6 @@ bool KItemListController::mouseMoveEvent(QGraphicsSceneMouseEvent *event, const
|
|
m_selectionManager->endAnchoredSelection();
|
|
m_selectionManager->setCurrentItem(newCurrent.value());
|
|
m_selectionManager->beginAnchoredSelection(newCurrent.value());
|
|
- // Set hovered effect when dragging.
|
|
- for (const auto widget : m_view->visibleItemListWidgets()) {
|
|
- widget->setHovered(widget->isCurrent());
|
|
- }
|
|
}
|
|
|
|
if (m_view->scrollOrientation() == Qt::Vertical) {
|
|
@@ -1363,7 +1359,7 @@ void KItemListController::slotRubberBandChanged()
|
|
|
|
// Select all visible items that intersect with the rubberband
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
- for (const KItemListWidget *widget : widgets) {
|
|
+ for (KItemListWidget *widget : widgets) {
|
|
const int index = widget->index();
|
|
|
|
const QRectF widgetRect = m_view->itemRect(index);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From b4937aa0676d84beb41ee4d6750b0cee711a5682 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 4 Jun 2025 12:31:26 +0300
|
|
Subject: [PATCH 50/69] set a click highlight color
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 11 ++++++-----
|
|
src/kitemviews/kitemlistwidget.cpp | 14 ++++++++++++--
|
|
src/kitemviews/kitemlistwidget.h | 3 +++
|
|
3 files changed, 21 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 561917e80e..525e8107a4 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1640,6 +1640,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
// simplify the overall logic and possibilities both for users and devs.
|
|
const bool leftClick = buttons & Qt::LeftButton;
|
|
const bool rightClick = buttons & Qt::RightButton;
|
|
+ const bool singleClickActivation = m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick);
|
|
|
|
// The previous selection is cleared if either
|
|
// 1. The selection mode is SingleSelection, or
|
|
@@ -1664,7 +1665,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
// we are indeed inside the text/icon rect, keep m_pressedIndex what it is
|
|
// and short-circuit for single-click activation (it will then propagate to onRelease and activate the item)
|
|
// or we just keep going for double-click activation
|
|
- if (m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) || m_singleClickActivationEnforced) {
|
|
+ if (singleClickActivation || m_singleClickActivationEnforced) {
|
|
if (!pressedItemAlreadySelected) {
|
|
// An unselected item was clicked directly while deselecting multiple other items so we mark it "current".
|
|
m_selectionManager->setCurrentItem(m_pressedIndex.value());
|
|
@@ -1740,8 +1741,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
break;
|
|
|
|
case SingleSelection:
|
|
- if (!leftClick || shiftOrControlPressed
|
|
- || (!m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) && !m_singleClickActivationEnforced)) {
|
|
+ if (!leftClick || shiftOrControlPressed || (!singleClickActivation && !m_singleClickActivationEnforced)) {
|
|
m_selectionManager->setSelected(m_pressedIndex.value());
|
|
}
|
|
break;
|
|
@@ -1764,9 +1764,10 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
}
|
|
} else if (!shiftPressed || !m_selectionManager->isAnchoredSelectionActive()) {
|
|
// Select the pressed item and start a new anchored selection
|
|
- if (!leftClick || shiftOrControlPressed
|
|
- || (!m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) && !m_singleClickActivationEnforced)) {
|
|
+ if (!leftClick || shiftOrControlPressed || (!singleClickActivation && !m_singleClickActivationEnforced)) {
|
|
m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Select);
|
|
+ } else if (leftClick && (m_singleClickActivationEnforced || singleClickActivation)) {
|
|
+ row->setClickHighlight(true);
|
|
}
|
|
m_selectionManager->beginAnchoredSelection(m_pressedIndex.value());
|
|
}
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index ea6b31861e..22d10d1481 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -37,6 +37,7 @@ KItemListWidget::KItemListWidget(KItemListWidgetInformant *informant, QGraphicsI
|
|
, m_expansionAreaHovered(false)
|
|
, m_alternateBackground(false)
|
|
, m_enabledSelectionToggle(false)
|
|
+ , m_clickHighlighted(false)
|
|
, m_data()
|
|
, m_visibleRoles()
|
|
, m_columnWidths()
|
|
@@ -281,6 +282,7 @@ void KItemListWidget::setHovered(bool hovered)
|
|
|
|
m_hoverSequenceTimer.start(interval);
|
|
} else {
|
|
+ m_clickHighlighted = false;
|
|
setHoverOpacity(0.0);
|
|
|
|
if (m_selectionToggle) {
|
|
@@ -604,6 +606,14 @@ void KItemListWidget::clearHoverCache()
|
|
m_hoverCache = nullptr;
|
|
}
|
|
|
|
+void KItemListWidget::setClickHighlight(bool enabled)
|
|
+{
|
|
+ if (m_clickHighlighted != enabled) {
|
|
+ m_clickHighlighted = enabled;
|
|
+ update();
|
|
+ }
|
|
+}
|
|
+
|
|
void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QStyle::State styleState)
|
|
{
|
|
QStyleOptionViewItem viewItemOption;
|
|
@@ -624,11 +634,11 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// Background item, alpha values are from
|
|
// https://invent.kde.org/plasma/libplasma/-/blob/master/src/desktoptheme/breeze/widgets/viewitem.svg
|
|
backgroundColor.setAlphaF(0.0);
|
|
- if (m_selected && m_hovered) {
|
|
+ if ((m_selected && m_hovered) || m_clickHighlighted) {
|
|
backgroundColor.setAlphaF(0.40);
|
|
} else if (m_selected) {
|
|
backgroundColor.setAlphaF(0.32);
|
|
- } else if (m_hovered) {
|
|
+ } else if (m_hovered && !m_clickHighlighted) {
|
|
backgroundColor = widget->palette().color(QPalette::Text);
|
|
backgroundColor.setAlphaF(0.06);
|
|
}
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 489081b604..415bc4b5c7 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -109,6 +109,8 @@ public:
|
|
void setEnabledSelectionToggle(bool enabled);
|
|
bool enabledSelectionToggle() const;
|
|
|
|
+ void setClickHighlight(bool enabled);
|
|
+
|
|
/**
|
|
* Sets the sibling information for the item and all of its parents.
|
|
* The sibling information of the upper most parent is represented by
|
|
@@ -266,6 +268,7 @@ private:
|
|
bool m_expansionAreaHovered;
|
|
bool m_alternateBackground;
|
|
bool m_enabledSelectionToggle;
|
|
+ bool m_clickHighlighted;
|
|
QHash<QByteArray, QVariant> m_data;
|
|
QList<QByteArray> m_visibleRoles;
|
|
QHash<QByteArray, qreal> m_columnWidths;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 9f5e8f169ac98a6d2b23bf850cb6a4470a51b30d Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 5 Jun 2025 12:17:14 +0300
|
|
Subject: [PATCH 51/69] Add hitTargetRect
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
src/kitemviews/kitemlistwidget.h | 11 +++++++++--
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 9 +++++++++
|
|
src/kitemviews/kstandarditemlistwidget.h | 1 +
|
|
4 files changed, 20 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 525e8107a4..d5c72a875b 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1723,7 +1723,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (m_pressedIndex.has_value()) {
|
|
// The hover highlight area of an item is being pressed.
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); // anything outside of row.contains() will be the empty region of the row rect
|
|
- const bool hitTargetIsRowEmptyRegion = !row->visualSelectionRect().contains(row->mapFromItem(m_view, pos));
|
|
+ const bool hitTargetIsRowEmptyRegion = !row->hitTargetRect().contains(row->mapFromItem(m_view, pos));
|
|
// again, when this method returns false, a rubberBand selection is created as the event is not consumed;
|
|
// createRubberBand here tells us whether to return true or false.
|
|
bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 415bc4b5c7..ca0dc704b8 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -139,8 +139,8 @@ public:
|
|
int iconSize() const;
|
|
|
|
/**
|
|
- * @return True if \a point is inside KItemListWidget::hoverRect(),
|
|
- * KItemListWidget::textRect(), KItemListWidget::selectionToggleRect()
|
|
+ * @return True if \a point is inside KItemListWidget::visualSelectionRect(),
|
|
+ * KItemListWidget::selectionToggleRect()
|
|
* or KItemListWidget::expansionToggleRect().
|
|
* @reimp
|
|
*/
|
|
@@ -178,6 +178,13 @@ public:
|
|
*/
|
|
virtual QRectF selectionRectExtended() const = 0;
|
|
|
|
+ /**
|
|
+ * @return Rectangle where dragging the item is allowed to start.
|
|
+ * In compact and icon views, it returns KItemListWidget::visualSelectionRect().
|
|
+ * In details view, it returns KItemListWidget::selectionRectCore().
|
|
+ */
|
|
+ virtual QRectF hitTargetRect() const = 0;
|
|
+
|
|
/**
|
|
* @return Rectangle for the selection-toggle that is used to select or deselect an item.
|
|
* Per default an empty rectangle is returned which means that no selection-toggle
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index ed267bb25d..46374d577b 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -565,6 +565,15 @@ QRectF KStandardItemListWidget::selectionRectExtended() const
|
|
return result;
|
|
}
|
|
|
|
+QRectF KStandardItemListWidget::hitTargetRect() const
|
|
+{
|
|
+ if (m_layout == DetailsLayout) {
|
|
+ return selectionRectCore();
|
|
+ } else {
|
|
+ return visualSelectionRect();
|
|
+ }
|
|
+}
|
|
+
|
|
QRectF KStandardItemListWidget::expansionToggleRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h
|
|
index c8feed1c9f..b9deed7454 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.h
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.h
|
|
@@ -110,6 +110,7 @@ public:
|
|
QRectF visualSelectionRect() const override;
|
|
QRectF selectionRectCore() const override;
|
|
QRectF selectionRectExtended() const override;
|
|
+ QRectF hitTargetRect() const override;
|
|
QRectF expansionToggleRect() const override;
|
|
QRectF selectionToggleRect() const override;
|
|
QPixmap createDragPixmap(const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From a58b2bcb52433019b1682113ae0feeebf7113b14 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 9 Jun 2025 11:41:46 +0300
|
|
Subject: [PATCH 52/69] Set click highlight work like toolbar click highlight
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 8 +++++++-
|
|
src/kitemviews/kitemlistwidget.cpp | 20 ++++++++++++--------
|
|
2 files changed, 19 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index d5c72a875b..5201134b9f 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -675,6 +675,10 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent *event, con
|
|
return false;
|
|
}
|
|
|
|
+ for (KItemListWidget *widget : m_view->visibleItemListWidgets()) {
|
|
+ widget->setClickHighlight(false);
|
|
+ }
|
|
+
|
|
if (m_view->m_tapAndHoldIndicator->isActive()) {
|
|
m_view->m_tapAndHoldIndicator->setActive(false);
|
|
}
|
|
@@ -1029,6 +1033,7 @@ bool KItemListController::hoverLeaveEvent(QGraphicsSceneHoverEvent *event, const
|
|
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
for (KItemListWidget *widget : widgets) {
|
|
+ widget->setClickHighlight(false);
|
|
if (widget->isHovered()) {
|
|
widget->setHovered(false);
|
|
Q_EMIT itemUnhovered(widget->index());
|
|
@@ -1766,7 +1771,8 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
// Select the pressed item and start a new anchored selection
|
|
if (!leftClick || shiftOrControlPressed || (!singleClickActivation && !m_singleClickActivationEnforced)) {
|
|
m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Select);
|
|
- } else if (leftClick && (m_singleClickActivationEnforced || singleClickActivation)) {
|
|
+ }
|
|
+ if (leftClick) {
|
|
row->setClickHighlight(true);
|
|
}
|
|
m_selectionManager->beginAnchoredSelection(m_pressedIndex.value());
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 22d10d1481..a14d28162a 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -282,7 +282,6 @@ void KItemListWidget::setHovered(bool hovered)
|
|
|
|
m_hoverSequenceTimer.start(interval);
|
|
} else {
|
|
- m_clickHighlighted = false;
|
|
setHoverOpacity(0.0);
|
|
|
|
if (m_selectionToggle) {
|
|
@@ -634,13 +633,18 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
// Background item, alpha values are from
|
|
// https://invent.kde.org/plasma/libplasma/-/blob/master/src/desktoptheme/breeze/widgets/viewitem.svg
|
|
backgroundColor.setAlphaF(0.0);
|
|
- if ((m_selected && m_hovered) || m_clickHighlighted) {
|
|
- backgroundColor.setAlphaF(0.40);
|
|
- } else if (m_selected) {
|
|
- backgroundColor.setAlphaF(0.32);
|
|
- } else if (m_hovered && !m_clickHighlighted) {
|
|
- backgroundColor = widget->palette().color(QPalette::Text);
|
|
- backgroundColor.setAlphaF(0.06);
|
|
+
|
|
+ if (m_clickHighlighted) {
|
|
+ backgroundColor.setAlphaF(0.5);
|
|
+ } else {
|
|
+ if (m_selected && m_hovered) {
|
|
+ backgroundColor.setAlphaF(0.40);
|
|
+ } else if (m_selected) {
|
|
+ backgroundColor.setAlphaF(0.32);
|
|
+ } else if (m_hovered) {
|
|
+ backgroundColor = widget->palette().color(QPalette::Text);
|
|
+ backgroundColor.setAlphaF(0.06);
|
|
+ }
|
|
}
|
|
|
|
painter->fillPath(path, backgroundColor);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From cf5f5e8d2735bef7df60926ccdfc1fae1473de97 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 11 Jun 2025 13:16:01 +0300
|
|
Subject: [PATCH 53/69] make button click highlight stronger, fix highlight not
|
|
clearing
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 7 ++++---
|
|
src/kitemviews/kitemlistwidget.cpp | 3 ++-
|
|
2 files changed, 6 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 5201134b9f..5222b9c957 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1733,6 +1733,10 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
// createRubberBand here tells us whether to return true or false.
|
|
bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
|
|
+ if (leftClick) {
|
|
+ row->setClickHighlight(true);
|
|
+ }
|
|
+
|
|
if (rightClick && hitTargetIsRowEmptyRegion) {
|
|
// We have a right click outside the icon and text rect but within the hover highlight area.
|
|
// We don't want items to get selected through this, so we return now.
|
|
@@ -1772,9 +1776,6 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (!leftClick || shiftOrControlPressed || (!singleClickActivation && !m_singleClickActivationEnforced)) {
|
|
m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Select);
|
|
}
|
|
- if (leftClick) {
|
|
- row->setClickHighlight(true);
|
|
- }
|
|
m_selectionManager->beginAnchoredSelection(m_pressedIndex.value());
|
|
}
|
|
break;
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index a14d28162a..eb24a19dc8 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -609,6 +609,7 @@ void KItemListWidget::setClickHighlight(bool enabled)
|
|
{
|
|
if (m_clickHighlighted != enabled) {
|
|
m_clickHighlighted = enabled;
|
|
+ clearHoverCache();
|
|
update();
|
|
}
|
|
}
|
|
@@ -635,7 +636,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
backgroundColor.setAlphaF(0.0);
|
|
|
|
if (m_clickHighlighted) {
|
|
- backgroundColor.setAlphaF(0.5);
|
|
+ backgroundColor.setAlphaF(1.0);
|
|
} else {
|
|
if (m_selected && m_hovered) {
|
|
backgroundColor.setAlphaF(0.40);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 4398a90bfcab35834d0fd84c4e449456509089fb Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Wed, 11 Jun 2025 13:44:04 +0300
|
|
Subject: [PATCH 54/69] Make sure text is readable when clickHighlighted
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 5 +++++
|
|
src/kitemviews/kitemlistwidget.h | 1 +
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 6 +++++-
|
|
3 files changed, 11 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index eb24a19dc8..0f15aa883b 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -605,6 +605,11 @@ void KItemListWidget::clearHoverCache()
|
|
m_hoverCache = nullptr;
|
|
}
|
|
|
|
+bool KItemListWidget::isClickHighlighted() const
|
|
+{
|
|
+ return m_clickHighlighted;
|
|
+}
|
|
+
|
|
void KItemListWidget::setClickHighlight(bool enabled)
|
|
{
|
|
if (m_clickHighlighted != enabled) {
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index ca0dc704b8..40b630cc4f 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -109,6 +109,7 @@ public:
|
|
void setEnabledSelectionToggle(bool enabled);
|
|
bool enabledSelectionToggle() const;
|
|
|
|
+ bool isClickHighlighted() const;
|
|
void setClickHighlight(bool enabled);
|
|
|
|
/**
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 46374d577b..1a2976bfeb 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -712,7 +712,11 @@ QFont KStandardItemListWidget::customizedFont(const QFont &baseFont) const
|
|
|
|
QPalette::ColorRole KStandardItemListWidget::normalTextColorRole() const
|
|
{
|
|
- return QPalette::Text;
|
|
+ if (isClickHighlighted()) {
|
|
+ return QPalette::HighlightedText;
|
|
+ } else {
|
|
+ return QPalette::Text;
|
|
+ }
|
|
}
|
|
|
|
void KStandardItemListWidget::setTextColor(const QColor &color)
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 71bcec57388d613955148b9d590c85ab977f978e Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 12 Jun 2025 18:03:53 +0300
|
|
Subject: [PATCH 55/69] widgetForDropPos uses hitTargetRect instead of contains
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 5222b9c957..cb97f484d3 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1490,7 +1490,7 @@ KItemListWidget *KItemListController::widgetForDropPos(const QPointF &pos) const
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
for (KItemListWidget *widget : widgets) {
|
|
const QPointF mappedPos = widget->mapFromItem(m_view, pos);
|
|
- if (widget->contains(mappedPos)) {
|
|
+ if (widget->hitTargetRect().contains(mappedPos)) {
|
|
return widget;
|
|
}
|
|
}
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 23d522fa8a4726f8b668419fa31fbac04e6e6a84 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 12 Jun 2025 18:03:53 +0300
|
|
Subject: [PATCH 56/69] change hitTargetRect comment
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.h | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 40b630cc4f..6e73bb72d5 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -180,7 +180,7 @@ public:
|
|
virtual QRectF selectionRectExtended() const = 0;
|
|
|
|
/**
|
|
- * @return Rectangle where dragging the item is allowed to start.
|
|
+ * @return Returns rectangle where item is considered "hit" during actions, such as drag and drop.
|
|
* In compact and icon views, it returns KItemListWidget::visualSelectionRect().
|
|
* In details view, it returns KItemListWidget::selectionRectCore().
|
|
*/
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 105d70b4d6d5ae02305619cfd4fdb37b6048ddbd Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 12 Jun 2025 18:18:13 +0300
|
|
Subject: [PATCH 57/69] Remove selectionRectExtended
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.h | 5 -----
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 17 +++++------------
|
|
src/kitemviews/kstandarditemlistwidget.h | 1 -
|
|
3 files changed, 5 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 6e73bb72d5..2287683570 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -174,11 +174,6 @@ public:
|
|
*/
|
|
virtual QRectF selectionRectCore() const = 0;
|
|
|
|
- /**
|
|
- * @return Same as core, but extended to the full width of the details view.
|
|
- */
|
|
- virtual QRectF selectionRectExtended() const = 0;
|
|
-
|
|
/**
|
|
* @return Returns rectangle where item is considered "hit" during actions, such as drag and drop.
|
|
* In compact and icon views, it returns KItemListWidget::visualSelectionRect().
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 1a2976bfeb..3530677e83 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -537,7 +537,11 @@ QRectF KStandardItemListWidget::visualSelectionRect() const
|
|
if (m_layout == DetailsLayout) {
|
|
auto rect = selectionRectCore();
|
|
if (m_highlightEntireRow) {
|
|
- rect = selectionRectExtended();
|
|
+ if (layoutDirection() == Qt::LeftToRight) {
|
|
+ rect.setRight(leftPadding() + m_columnWidthSum);
|
|
+ } else {
|
|
+ rect.setLeft(size().width() - m_columnWidthSum - rightPadding());
|
|
+ }
|
|
}
|
|
return rect.adjusted(-padding, 0, padding, 0);
|
|
} else {
|
|
@@ -554,17 +558,6 @@ QRectF KStandardItemListWidget::selectionRectCore() const
|
|
return result;
|
|
}
|
|
|
|
-QRectF KStandardItemListWidget::selectionRectExtended() const
|
|
-{
|
|
- QRectF result = selectionRectCore();
|
|
- if (layoutDirection() == Qt::LeftToRight) {
|
|
- result.setRight(leftPadding() + m_columnWidthSum);
|
|
- } else {
|
|
- result.setLeft(size().width() - m_columnWidthSum - rightPadding());
|
|
- }
|
|
- return result;
|
|
-}
|
|
-
|
|
QRectF KStandardItemListWidget::hitTargetRect() const
|
|
{
|
|
if (m_layout == DetailsLayout) {
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h
|
|
index b9deed7454..a85e4ee11c 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.h
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.h
|
|
@@ -109,7 +109,6 @@ public:
|
|
QRectF textFocusRect() const override;
|
|
QRectF visualSelectionRect() const override;
|
|
QRectF selectionRectCore() const override;
|
|
- QRectF selectionRectExtended() const override;
|
|
QRectF hitTargetRect() const override;
|
|
QRectF expansionToggleRect() const override;
|
|
QRectF selectionToggleRect() const override;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 18aec3429bc384e3fe8e80a95fb64e513d8d1442 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 12 Jun 2025 18:21:01 +0300
|
|
Subject: [PATCH 58/69] Rename visualSelectionRect to selectionRectFull
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
src/kitemviews/kitemlistview.cpp | 2 +-
|
|
src/kitemviews/kitemlistwidget.cpp | 6 +++---
|
|
src/kitemviews/kitemlistwidget.h | 6 +++---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 6 +++---
|
|
src/kitemviews/kstandarditemlistwidget.h | 2 +-
|
|
6 files changed, 12 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index cb97f484d3..66b5cb9696 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1370,7 +1370,7 @@ void KItemListController::slotRubberBandChanged()
|
|
const QRectF widgetRect = m_view->itemRect(index);
|
|
if (widgetRect.intersects(rubberBandRect)) {
|
|
// Select the full row intersecting with the rubberband rectangle
|
|
- const QRectF selectionRect = widget->visualSelectionRect().translated(widgetRect.topLeft());
|
|
+ const QRectF selectionRect = widget->selectionRectFull().translated(widgetRect.topLeft());
|
|
if (selectionRect.intersects(rubberBandRect)) {
|
|
selectedItems.insert(index);
|
|
}
|
|
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
|
|
index 90f2beebb9..5394e7341e 100644
|
|
--- a/src/kitemviews/kitemlistview.cpp
|
|
+++ b/src/kitemviews/kitemlistview.cpp
|
|
@@ -542,7 +542,7 @@ QRectF KItemListView::itemContextRect(int index) const
|
|
|
|
const KItemListWidget *widget = m_visibleItems.value(index);
|
|
if (widget) {
|
|
- contextRect = widget->visualSelectionRect();
|
|
+ contextRect = widget->selectionRectFull();
|
|
contextRect.translate(itemRect(index).topLeft());
|
|
}
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 0f15aa883b..2abf9fe067 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -408,7 +408,7 @@ bool KItemListWidget::contains(const QPointF &point) const
|
|
return false;
|
|
}
|
|
|
|
- return visualSelectionRect().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point);
|
|
+ return selectionRectFull().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point);
|
|
}
|
|
|
|
QRectF KItemListWidget::textFocusRect() const
|
|
@@ -629,9 +629,9 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
// TODO: check if we're extended or not
|
|
- viewItemOption.rect = visualSelectionRect().toRect();
|
|
+ viewItemOption.rect = selectionRectFull().toRect();
|
|
QPainterPath path;
|
|
- path.addRoundedRect(visualSelectionRect().adjusted(penWidth, penWidth, -penWidth, -penWidth), roundness, roundness);
|
|
+ path.addRoundedRect(selectionRectFull().adjusted(penWidth, penWidth, -penWidth, -penWidth), roundness, roundness);
|
|
QColor backgroundColor{widget->palette().color(QPalette::Accent)};
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
bool current = m_current && styleState & QStyle::State_Active;
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 2287683570..f277e18a73 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -140,7 +140,7 @@ public:
|
|
int iconSize() const;
|
|
|
|
/**
|
|
- * @return True if \a point is inside KItemListWidget::visualSelectionRect(),
|
|
+ * @return True if \a point is inside KItemListWidget::selectionRectFull(),
|
|
* KItemListWidget::selectionToggleRect()
|
|
* or KItemListWidget::expansionToggleRect().
|
|
* @reimp
|
|
@@ -167,7 +167,7 @@ public:
|
|
*
|
|
* @return The rectangle around selection, depending on if it's full width or not.
|
|
*/
|
|
- virtual QRectF visualSelectionRect() const = 0;
|
|
+ virtual QRectF selectionRectFull() const = 0;
|
|
|
|
/**
|
|
* @return Rectangle around icon and it's text: The core area of the item.
|
|
@@ -176,7 +176,7 @@ public:
|
|
|
|
/**
|
|
* @return Returns rectangle where item is considered "hit" during actions, such as drag and drop.
|
|
- * In compact and icon views, it returns KItemListWidget::visualSelectionRect().
|
|
+ * In compact and icon views, it returns KItemListWidget::selectionRectFull().
|
|
* In details view, it returns KItemListWidget::selectionRectCore().
|
|
*/
|
|
virtual QRectF hitTargetRect() const = 0;
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 3530677e83..ba3465c041 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -530,7 +530,7 @@ QRectF KStandardItemListWidget::textFocusRect() const
|
|
return m_textRect;
|
|
}
|
|
|
|
-QRectF KStandardItemListWidget::visualSelectionRect() const
|
|
+QRectF KStandardItemListWidget::selectionRectFull() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
const int padding = styleOption().padding;
|
|
@@ -563,7 +563,7 @@ QRectF KStandardItemListWidget::hitTargetRect() const
|
|
if (m_layout == DetailsLayout) {
|
|
return selectionRectCore();
|
|
} else {
|
|
- return visualSelectionRect();
|
|
+ return selectionRectFull();
|
|
}
|
|
}
|
|
|
|
@@ -586,7 +586,7 @@ QRectF KStandardItemListWidget::selectionToggleRect() const
|
|
}
|
|
|
|
const int padding = styleOption().padding;
|
|
- const QRectF selectionRectMinusPadding = visualSelectionRect().adjusted(padding, padding, -padding, -padding);
|
|
+ const QRectF selectionRectMinusPadding = selectionRectFull().adjusted(padding, padding, -padding, -padding);
|
|
QPointF pos = selectionRectMinusPadding.topLeft();
|
|
if (QApplication::isRightToLeft()) {
|
|
pos.setX(selectionRectMinusPadding.right() - (pos.x() + toggleSize - selectionRectMinusPadding.left()));
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h
|
|
index a85e4ee11c..f2b7a49438 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.h
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.h
|
|
@@ -107,7 +107,7 @@ public:
|
|
|
|
QRectF textRect() const override;
|
|
QRectF textFocusRect() const override;
|
|
- QRectF visualSelectionRect() const override;
|
|
+ QRectF selectionRectFull() const override;
|
|
QRectF selectionRectCore() const override;
|
|
QRectF hitTargetRect() const override;
|
|
QRectF expansionToggleRect() const override;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From c1aba1674385f07858c51fc9d16376f4fab10066 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 12 Jun 2025 18:24:44 +0300
|
|
Subject: [PATCH 59/69] rename clickHighlight to isPressed, add comment, move
|
|
items
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 6 +++---
|
|
src/kitemviews/kitemlistwidget.cpp | 4 ++--
|
|
src/kitemviews/kitemlistwidget.h | 7 ++++---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 2 +-
|
|
4 files changed, 10 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 66b5cb9696..1729a65cba 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -676,7 +676,7 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent *event, con
|
|
}
|
|
|
|
for (KItemListWidget *widget : m_view->visibleItemListWidgets()) {
|
|
- widget->setClickHighlight(false);
|
|
+ widget->setPressed(false);
|
|
}
|
|
|
|
if (m_view->m_tapAndHoldIndicator->isActive()) {
|
|
@@ -1033,7 +1033,7 @@ bool KItemListController::hoverLeaveEvent(QGraphicsSceneHoverEvent *event, const
|
|
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
for (KItemListWidget *widget : widgets) {
|
|
- widget->setClickHighlight(false);
|
|
+ widget->setPressed(false);
|
|
if (widget->isHovered()) {
|
|
widget->setHovered(false);
|
|
Q_EMIT itemUnhovered(widget->index());
|
|
@@ -1734,7 +1734,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
|
|
if (leftClick) {
|
|
- row->setClickHighlight(true);
|
|
+ row->setPressed(true);
|
|
}
|
|
|
|
if (rightClick && hitTargetIsRowEmptyRegion) {
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 2abf9fe067..a47f98ae18 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -605,12 +605,12 @@ void KItemListWidget::clearHoverCache()
|
|
m_hoverCache = nullptr;
|
|
}
|
|
|
|
-bool KItemListWidget::isClickHighlighted() const
|
|
+bool KItemListWidget::isPressed() const
|
|
{
|
|
return m_clickHighlighted;
|
|
}
|
|
|
|
-void KItemListWidget::setClickHighlight(bool enabled)
|
|
+void KItemListWidget::setPressed(bool enabled)
|
|
{
|
|
if (m_clickHighlighted != enabled) {
|
|
m_clickHighlighted = enabled;
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index f277e18a73..7e6b8f9c93 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -98,6 +98,10 @@ public:
|
|
void setHovered(bool hovered);
|
|
bool isHovered() const;
|
|
|
|
+ /** Sets a purely visual pressed highlight effect. */
|
|
+ void setPressed(bool enabled);
|
|
+ bool isPressed() const;
|
|
+
|
|
void setExpansionAreaHovered(bool hover);
|
|
bool expansionAreaHovered() const;
|
|
|
|
@@ -109,9 +113,6 @@ public:
|
|
void setEnabledSelectionToggle(bool enabled);
|
|
bool enabledSelectionToggle() const;
|
|
|
|
- bool isClickHighlighted() const;
|
|
- void setClickHighlight(bool enabled);
|
|
-
|
|
/**
|
|
* Sets the sibling information for the item and all of its parents.
|
|
* The sibling information of the upper most parent is represented by
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index ba3465c041..3511666704 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -705,7 +705,7 @@ QFont KStandardItemListWidget::customizedFont(const QFont &baseFont) const
|
|
|
|
QPalette::ColorRole KStandardItemListWidget::normalTextColorRole() const
|
|
{
|
|
- if (isClickHighlighted()) {
|
|
+ if (isPressed()) {
|
|
return QPalette::HighlightedText;
|
|
} else {
|
|
return QPalette::Text;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 4af2e8ce7dfe422bfc79073e57aa0774b0bf62c0 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Thu, 12 Jun 2025 18:25:54 +0300
|
|
Subject: [PATCH 60/69] remove todo
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 1 -
|
|
1 file changed, 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index a47f98ae18..3eb246e940 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -628,7 +628,6 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS
|
|
viewItemOption.state = styleState;
|
|
viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne;
|
|
viewItemOption.showDecorationSelected = true;
|
|
- // TODO: check if we're extended or not
|
|
viewItemOption.rect = selectionRectFull().toRect();
|
|
QPainterPath path;
|
|
path.addRoundedRect(selectionRectFull().adjusted(penWidth, penWidth, -penWidth, -penWidth), roundness, roundness);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 6e4705e98dc1f00cbcd6a51d3797a39a8e7bd1c4 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 13 Jun 2025 11:34:13 +0300
|
|
Subject: [PATCH 61/69] Remove hitTargetRect
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 7 +++++--
|
|
src/kitemviews/kitemlistwidget.h | 7 -------
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 9 ---------
|
|
src/kitemviews/kstandarditemlistwidget.h | 1 -
|
|
4 files changed, 5 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 1729a65cba..1a11d4e882 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1490,7 +1490,7 @@ KItemListWidget *KItemListController::widgetForDropPos(const QPointF &pos) const
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
for (KItemListWidget *widget : widgets) {
|
|
const QPointF mappedPos = widget->mapFromItem(m_view, pos);
|
|
- if (widget->hitTargetRect().contains(mappedPos)) {
|
|
+ if (widget->selectionRectCore().contains(mappedPos)) {
|
|
return widget;
|
|
}
|
|
}
|
|
@@ -1728,7 +1728,10 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (m_pressedIndex.has_value()) {
|
|
// The hover highlight area of an item is being pressed.
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); // anything outside of row.contains() will be the empty region of the row rect
|
|
- const bool hitTargetIsRowEmptyRegion = !row->hitTargetRect().contains(row->mapFromItem(m_view, pos));
|
|
+
|
|
+ // When full row is highlighted, we want to be able to start dragging from anywhere except the core of the item.
|
|
+ const auto hitRect = m_view->highlightEntireRow() ? row->selectionRectCore() : row->selectionRectFull();
|
|
+ const bool hitTargetIsRowEmptyRegion = !hitRect.contains(row->mapFromItem(m_view, pos));
|
|
// again, when this method returns false, a rubberBand selection is created as the event is not consumed;
|
|
// createRubberBand here tells us whether to return true or false.
|
|
bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index 7e6b8f9c93..d75a4db549 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -175,13 +175,6 @@ public:
|
|
*/
|
|
virtual QRectF selectionRectCore() const = 0;
|
|
|
|
- /**
|
|
- * @return Returns rectangle where item is considered "hit" during actions, such as drag and drop.
|
|
- * In compact and icon views, it returns KItemListWidget::selectionRectFull().
|
|
- * In details view, it returns KItemListWidget::selectionRectCore().
|
|
- */
|
|
- virtual QRectF hitTargetRect() const = 0;
|
|
-
|
|
/**
|
|
* @return Rectangle for the selection-toggle that is used to select or deselect an item.
|
|
* Per default an empty rectangle is returned which means that no selection-toggle
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 3511666704..0a2cfb5968 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -558,15 +558,6 @@ QRectF KStandardItemListWidget::selectionRectCore() const
|
|
return result;
|
|
}
|
|
|
|
-QRectF KStandardItemListWidget::hitTargetRect() const
|
|
-{
|
|
- if (m_layout == DetailsLayout) {
|
|
- return selectionRectCore();
|
|
- } else {
|
|
- return selectionRectFull();
|
|
- }
|
|
-}
|
|
-
|
|
QRectF KStandardItemListWidget::expansionToggleRect() const
|
|
{
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h
|
|
index f2b7a49438..cabe3a8c96 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.h
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.h
|
|
@@ -109,7 +109,6 @@ public:
|
|
QRectF textFocusRect() const override;
|
|
QRectF selectionRectFull() const override;
|
|
QRectF selectionRectCore() const override;
|
|
- QRectF hitTargetRect() const override;
|
|
QRectF expansionToggleRect() const override;
|
|
QRectF selectionToggleRect() const override;
|
|
QPixmap createDragPixmap(const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 7e05aa4ccc0121e415ed29dce09cbd116cd186f5 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Fri, 13 Jun 2025 19:17:19 +0300
|
|
Subject: [PATCH 62/69] Modify selectionRectCore to return fullRect unless
|
|
dragging in details view
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 4 +---
|
|
src/kitemviews/kstandarditemlistwidget.cpp | 10 +++++++---
|
|
2 files changed, 8 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 1a11d4e882..2afcf212e6 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1729,9 +1729,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
// The hover highlight area of an item is being pressed.
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); // anything outside of row.contains() will be the empty region of the row rect
|
|
|
|
- // When full row is highlighted, we want to be able to start dragging from anywhere except the core of the item.
|
|
- const auto hitRect = m_view->highlightEntireRow() ? row->selectionRectCore() : row->selectionRectFull();
|
|
- const bool hitTargetIsRowEmptyRegion = !hitRect.contains(row->mapFromItem(m_view, pos));
|
|
+ const bool hitTargetIsRowEmptyRegion = !row->selectionRectCore().contains(row->mapFromItem(m_view, pos));
|
|
// again, when this method returns false, a rubberBand selection is created as the event is not consumed;
|
|
// createRubberBand here tells us whether to return true or false.
|
|
bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty());
|
|
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
index 0a2cfb5968..d078b06573 100644
|
|
--- a/src/kitemviews/kstandarditemlistwidget.cpp
|
|
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
|
|
@@ -535,7 +535,7 @@ QRectF KStandardItemListWidget::selectionRectFull() const
|
|
const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing();
|
|
const int padding = styleOption().padding;
|
|
if (m_layout == DetailsLayout) {
|
|
- auto rect = selectionRectCore();
|
|
+ auto rect = m_iconRect | m_textRect;
|
|
if (m_highlightEntireRow) {
|
|
if (layoutDirection() == Qt::LeftToRight) {
|
|
rect.setRight(leftPadding() + m_columnWidthSum);
|
|
@@ -554,8 +554,12 @@ QRectF KStandardItemListWidget::selectionRectFull() const
|
|
|
|
QRectF KStandardItemListWidget::selectionRectCore() const
|
|
{
|
|
- QRectF result = m_iconRect | m_textRect;
|
|
- return result;
|
|
+ // Allow dragging from selection area in details view.
|
|
+ if (m_layout == DetailsLayout && highlightEntireRow() && !isSelected()) {
|
|
+ QRectF result = m_iconRect | m_textRect;
|
|
+ return result;
|
|
+ }
|
|
+ return selectionRectFull();
|
|
}
|
|
|
|
QRectF KStandardItemListWidget::expansionToggleRect() const
|
|
--
|
|
GitLab
|
|
|
|
|
|
From bf8220e6bac6d4f0148c465af012ff98f16ff73e Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 16 Jun 2025 11:07:05 +0300
|
|
Subject: [PATCH 63/69] Remove unneeded check
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 2afcf212e6..10edf64a66 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1764,7 +1764,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
// We rule out the latter, if the item is not clicked directly and was unselected previously.
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value());
|
|
const auto mappedPos = row->mapFromItem(m_view, pos);
|
|
- if (!row->selectionRectCore().contains(mappedPos) && !pressedItemAlreadySelected) {
|
|
+ if (!row->selectionRectCore().contains(mappedPos)) {
|
|
createRubberBand = true;
|
|
} else {
|
|
m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Toggle);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From bc5a187f34f1566a7b5f7dacaac851519dfe17c1 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 16 Jun 2025 11:07:48 +0300
|
|
Subject: [PATCH 64/69] add const back
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 10edf64a66..96f34f1a11 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1364,7 +1364,7 @@ void KItemListController::slotRubberBandChanged()
|
|
|
|
// Select all visible items that intersect with the rubberband
|
|
const auto widgets = m_view->visibleItemListWidgets();
|
|
- for (KItemListWidget *widget : widgets) {
|
|
+ for (const KItemListWidget *widget : widgets) {
|
|
const int index = widget->index();
|
|
|
|
const QRectF widgetRect = m_view->itemRect(index);
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 73977c43f0a6c6d82f5fc8992132138402be8f32 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 16 Jun 2025 11:09:09 +0300
|
|
Subject: [PATCH 65/69] remove selectionToggleRect check
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
|
|
index 3eb246e940..c06e46339f 100644
|
|
--- a/src/kitemviews/kitemlistwidget.cpp
|
|
+++ b/src/kitemviews/kitemlistwidget.cpp
|
|
@@ -408,7 +408,7 @@ bool KItemListWidget::contains(const QPointF &point) const
|
|
return false;
|
|
}
|
|
|
|
- return selectionRectFull().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point);
|
|
+ return selectionRectFull().contains(point) || expansionToggleRect().contains(point);
|
|
}
|
|
|
|
QRectF KItemListWidget::textFocusRect() const
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 0f477b912347b5661add69dc5a8cf9ee44ecdbfb Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 16 Jun 2025 11:11:24 +0300
|
|
Subject: [PATCH 66/69] remove presseditemalreadyselected check
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 96f34f1a11..5f668ce3ab 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1666,7 +1666,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
if (selectedItemsCount > 1 && m_pressedIndex.has_value()) {
|
|
const auto row = m_view->m_visibleItems.value(m_pressedIndex.value());
|
|
const auto mappedPos = row->mapFromItem(m_view, pos);
|
|
- if (pressedItemAlreadySelected || row->selectionRectCore().contains(mappedPos)) {
|
|
+ if (row->selectionRectCore().contains(mappedPos)) {
|
|
// we are indeed inside the text/icon rect, keep m_pressedIndex what it is
|
|
// and short-circuit for single-click activation (it will then propagate to onRelease and activate the item)
|
|
// or we just keep going for double-click activation
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 60a92ae27e28c162fd3f4a926b4b00b818134151 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 16 Jun 2025 11:16:09 +0300
|
|
Subject: [PATCH 67/69] add setPressed with more than one selection
|
|
|
|
---
|
|
src/kitemviews/kitemlistcontroller.cpp | 3 +++
|
|
1 file changed, 3 insertions(+)
|
|
|
|
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
|
|
index 5f668ce3ab..fdde48abcd 100644
|
|
--- a/src/kitemviews/kitemlistcontroller.cpp
|
|
+++ b/src/kitemviews/kitemlistcontroller.cpp
|
|
@@ -1681,6 +1681,9 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier
|
|
m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Toggle);
|
|
}
|
|
}
|
|
+ if (leftClick) {
|
|
+ row->setPressed(true);
|
|
+ }
|
|
return true; // event handled, don't create rubber band
|
|
}
|
|
} else {
|
|
--
|
|
GitLab
|
|
|
|
|
|
From b3e1a4918e7165c3a19f5a9188e45ec6371fd9fa Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 16 Jun 2025 11:19:48 +0300
|
|
Subject: [PATCH 68/69] set itemContextRect to selectionRectCore
|
|
|
|
---
|
|
src/kitemviews/kitemlistview.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
|
|
index 5394e7341e..3ed4df3e7b 100644
|
|
--- a/src/kitemviews/kitemlistview.cpp
|
|
+++ b/src/kitemviews/kitemlistview.cpp
|
|
@@ -542,7 +542,7 @@ QRectF KItemListView::itemContextRect(int index) const
|
|
|
|
const KItemListWidget *widget = m_visibleItems.value(index);
|
|
if (widget) {
|
|
- contextRect = widget->selectionRectFull();
|
|
+ contextRect = widget->selectionRectCore();
|
|
contextRect.translate(itemRect(index).topLeft());
|
|
}
|
|
|
|
--
|
|
GitLab
|
|
|
|
|
|
From 65b8c32380f9a7f8a8bf0296adfea9c976682b57 Mon Sep 17 00:00:00 2001
|
|
From: Akseli Lahtinen <akselmo@akselmo.dev>
|
|
Date: Mon, 16 Jun 2025 11:20:34 +0300
|
|
Subject: [PATCH 69/69] fix doc
|
|
|
|
---
|
|
src/kitemviews/kitemlistwidget.h | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
|
|
index d75a4db549..b87a3b34e6 100644
|
|
--- a/src/kitemviews/kitemlistwidget.h
|
|
+++ b/src/kitemviews/kitemlistwidget.h
|
|
@@ -166,12 +166,12 @@ public:
|
|
* Used for drawing the visuals, and situations where we want the behavior of the
|
|
* selection to match the visuals.
|
|
*
|
|
- * @return The rectangle around selection, depending on if it's full width or not.
|
|
+ * @return The rectangle around selection.
|
|
*/
|
|
virtual QRectF selectionRectFull() const = 0;
|
|
|
|
/**
|
|
- * @return Rectangle around icon and it's text: The core area of the item.
|
|
+ * @return The core area of the item. All of it reacts exactly the same way to mouse clicks.
|
|
*/
|
|
virtual QRectF selectionRectCore() const = 0;
|
|
|
|
--
|
|
GitLab
|
|
|