┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJin Liu <[email protected]>2024-05-13 11:01:17 +0000
committerFelix Ernst <[email protected]>2024-05-13 11:01:17 +0000
commit046b41666a8ac1cb0f6aaf0daad0361728f3907e (patch)
tree113ee4d319e43d806e927393f3d0c0f58f600fdc /src
parenta55c467fbb31d822d89722812388425327830377 (diff)
UrlNavigator: show a "lock" icon after the breadcrumb for read-only dir
Diffstat (limited to 'src')
-rw-r--r--src/dolphinurlnavigator.cpp27
-rw-r--r--src/dolphinurlnavigator.h10
-rw-r--r--src/dolphinviewcontainer.cpp10
3 files changed, 47 insertions, 0 deletions
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 <KUrlComboBox>
#include <QAbstractButton>
+#include <QLabel>
#include <QLayout>
#include <QLineEdit>
@@ -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()