From 046b41666a8ac1cb0f6aaf0daad0361728f3907e Mon Sep 17 00:00:00 2001 From: Jin Liu Date: Mon, 13 May 2024 11:01:17 +0000 Subject: [PATCH] UrlNavigator: show a "lock" icon after the breadcrumb for read-only dir --- src/dolphinurlnavigator.cpp | 27 +++++++++++++++++++++++++++ src/dolphinurlnavigator.h | 10 ++++++++++ src/dolphinviewcontainer.cpp | 10 ++++++++++ 3 files changed, 47 insertions(+) diff --git a/src/dolphinurlnavigator.cpp b/src/dolphinurlnavigator.cpp index ad4569177..3a40eea5c 100644 --- a/src/dolphinurlnavigator.cpp +++ b/src/dolphinurlnavigator.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -49,6 +50,12 @@ DolphinUrlNavigator::DolphinUrlNavigator(const QUrl &url, QWidget *parent) DolphinUrlNavigatorsController::registerDolphinUrlNavigator(this); connect(this, &KUrlNavigator::returnPressed, this, &DolphinUrlNavigator::slotReturnPressed); + + auto readOnlyBadge = new QLabel(); + readOnlyBadge->setPixmap(QIcon::fromTheme(QStringLiteral("emblem-readonly")).pixmap(12, 12)); + readOnlyBadge->setToolTip(i18nc("@info:tooltip of a 'locked' symbol in url navigator", "This folder is not writable for you.")); + readOnlyBadge->hide(); + setBadgeWidget(readOnlyBadge); } DolphinUrlNavigator::~DolphinUrlNavigator() @@ -69,6 +76,9 @@ QSize DolphinUrlNavigator::sizeHint() const widthHint += widget->minimumSizeHint().width(); } } + if (readOnlyBadgeVisible()) { + widthHint += badgeWidget()->sizeHint().width(); + } return QSize(widthHint, KUrlNavigator::sizeHint().height()); } @@ -111,6 +121,23 @@ void DolphinUrlNavigator::setPlaceholderText(const QString &text) editor()->lineEdit()->setPlaceholderText(text); } +void DolphinUrlNavigator::setReadOnlyBadgeVisible(bool visible) +{ + QWidget *readOnlyBadge = badgeWidget(); + if (readOnlyBadge) { + readOnlyBadge->setVisible(visible); + } +} + +bool DolphinUrlNavigator::readOnlyBadgeVisible() const +{ + QWidget *readOnlyBadge = badgeWidget(); + if (readOnlyBadge) { + return readOnlyBadge->isVisible(); + } + return false; +} + void DolphinUrlNavigator::slotReturnPressed() { if (!GeneralSettings::editableUrl()) { diff --git a/src/dolphinurlnavigator.h b/src/dolphinurlnavigator.h index 93a573105..1387b567f 100644 --- a/src/dolphinurlnavigator.h +++ b/src/dolphinurlnavigator.h @@ -76,6 +76,16 @@ public: */ void setPlaceholderText(const QString &text); + /** + * Sets the visibility of the read-only badge at the end of the breadcrumb. + */ + void setReadOnlyBadgeVisible(bool visible); + + /** + * Returns the visibility of the read-only badge at the end of the breadcrumb. + */ + bool readOnlyBadgeVisible() const; + public Q_SLOTS: /** * Switches to "breadcrumb" mode if the editable mode is not set to be diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 5a424d17b..ef58abee0 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -302,6 +302,8 @@ void DolphinViewContainer::connectUrlNavigator(DolphinUrlNavigator *urlNavigator connect(m_view, &DolphinView::urlChanged, urlNavigator, &DolphinUrlNavigator::setLocationUrl); connect(urlNavigator, &DolphinUrlNavigator::activated, this, &DolphinViewContainer::activate); + urlNavigator->setReadOnlyBadgeVisible(rootItem().isLocalFile() && !rootItem().isWritable()); + m_urlNavigatorConnected = urlNavigator; } @@ -651,6 +653,10 @@ void DolphinViewContainer::slotDirectoryLoadingStarted() m_statusBar->setProgressText(QString()); updateDirectoryLoadingProgress(-1); } + + if (m_urlNavigatorConnected) { + m_urlNavigatorConnected->setReadOnlyBadgeVisible(false); + } } void DolphinViewContainer::slotDirectoryLoadingCompleted() @@ -667,6 +673,10 @@ void DolphinViewContainer::slotDirectoryLoadingCompleted() } else { updateStatusBar(); } + + if (m_urlNavigatorConnected) { + m_urlNavigatorConnected->setReadOnlyBadgeVisible(rootItem().isLocalFile() && !rootItem().isWritable()); + } } void DolphinViewContainer::slotDirectoryLoadingCanceled() -- 2.47.3