┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkseli Lahtinen <[email protected]>2025-04-24 15:03:42 +0300
committerAkseli Lahtinen <[email protected]>2025-04-24 15:08:25 +0300
commitbe36fc1bc45b63693bd5861efed94c08cd9ffe2a (patch)
treed28221d403d6b81ec1bf98c45467c31db0ff39e8
parent98dfc4dc180386e79ce2914aab57b2944be83620 (diff)
DolphinStatusBar: Fix premature text squeezing
The text would get squeezed and elided prematurely due to some clipping calculations and paddings created for the clipping. This slightly modifies the clipping code, that we extend the painted area and then clip off the excess, instead of moving the area to specific place and then clipping off the excess. This also makes sure the text width accounts for one extra character plus the clippings we do, so that text will always fit the statusbar. BUG: 503164
-rw-r--r--src/dolphinviewcontainer.cpp8
-rw-r--r--src/statusbar/dolphinstatusbar.cpp11
2 files changed, 10 insertions, 9 deletions
diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp
index 9bda4d888..ee4bb6e4c 100644
--- a/src/dolphinviewcontainer.cpp
+++ b/src/dolphinviewcontainer.cpp
@@ -1094,11 +1094,9 @@ bool DolphinViewContainer::eventFilter(QObject *object, QEvent *event)
QRect DolphinViewContainer::preferredSmallStatusBarGeometry()
{
- // Adjust to clipping, we need to add 1 due to how QRects coordinates work.
- int clipAdjustment = m_statusBar->clippingAmount() + 1;
- // Add offset depending if horizontal scrollbar or filterbar is visible.
- const int yPos = m_view->geometry().bottom() - m_view->horizontalScrollBarHeight() - m_statusBar->minimumHeight() + clipAdjustment;
- QRect statusBarRect = rect().adjusted(-clipAdjustment, yPos, 0, 0);
+ // Add offset depending if horizontal scrollbar or filterbar is visible, we need to add 1 due to how QRect coordinates work.
+ const int yPos = m_view->geometry().bottom() - m_view->horizontalScrollBarHeight() - m_statusBar->minimumHeight() + 1;
+ QRect statusBarRect = rect().adjusted(0, yPos, 0, 0);
return statusBarRect;
}
diff --git a/src/statusbar/dolphinstatusbar.cpp b/src/statusbar/dolphinstatusbar.cpp
index 17a29e84c..f81120a44 100644
--- a/src/statusbar/dolphinstatusbar.cpp
+++ b/src/statusbar/dolphinstatusbar.cpp
@@ -50,6 +50,7 @@ DolphinStatusBar::DolphinStatusBar(QWidget *parent)
setProperty("_breeze_statusbar_separator", true);
QWidget *contentsContainer = prepareContentsContainer();
+ contentsContainer->setContentsMargins(0, 0, 0, 0);
// Initialize text label
m_label = new KSqueezedTextLabel(m_text, contentsContainer);
@@ -292,8 +293,8 @@ void DolphinStatusBar::updateWidthToContent()
// from "jumping around" when user tries to interact with them.
setFixedWidth(maximumViewWidth);
} else {
- const int contentWidth = style()->pixelMetric(QStyle::PM_LayoutLeftMargin, &opt, this) + labelSize.width()
- + style()->pixelMetric(QStyle::PM_LayoutRightMargin, &opt, this);
+ // Make sure we have room for the text
+ const int contentWidth = labelSize.width() + QFontMetrics(font()).averageCharWidth() + (clippingAmount() * 2);
setFixedWidth(qMin(contentWidth, maximumViewWidth));
}
Q_EMIT widthUpdated();
@@ -422,7 +423,7 @@ void DolphinStatusBar::updateContentsMargins()
m_topLayout->setContentsMargins(6, 0, 2, 0);
} else {
// Add extra margins to toplayout to avoid clipping too early.
- m_topLayout->setContentsMargins(clippingAmount() * 2, 0, clippingAmount(), clippingAmount());
+ m_topLayout->setContentsMargins(clippingAmount() * 2, 0, clippingAmount(), 0);
}
setContentsMargins(0, 0, 0, 0);
}
@@ -438,11 +439,13 @@ void DolphinStatusBar::paintEvent(QPaintEvent *paintEvent)
if (m_label && !m_label->fullText().isEmpty()) {
opt.state = QStyle::State_Sunken;
QPainterPath path;
- // Clip the left and bottom border off.
+ // Adjust the rectangle to be a bit larger, then clip the left and bottom border off.
QRect clipRect;
if (layoutDirection() == Qt::RightToLeft) {
+ opt.rect = rect().adjusted(0, 0, clippingAmount(), clippingAmount());
clipRect = QRect(opt.rect.topLeft(), opt.rect.bottomRight()).adjusted(0, 0, -clippingAmount(), -clippingAmount());
} else {
+ opt.rect = rect().adjusted(-clippingAmount(), 0, 0, clippingAmount());
clipRect = QRect(opt.rect.topLeft(), opt.rect.bottomRight()).adjusted(clippingAmount(), 0, 0, -clippingAmount());
}
path.addRect(clipRect);