]> cloud.milkyroute.net Git - dolphin.git/commitdiff
UrlNavigator: show a "lock" icon after the breadcrumb for read-only dir
authorJin Liu <m.liu.jin@gmail.com>
Mon, 13 May 2024 11:01:17 +0000 (11:01 +0000)
committerFelix Ernst <felixernst@kde.org>
Mon, 13 May 2024 11:01:17 +0000 (11:01 +0000)
src/dolphinurlnavigator.cpp
src/dolphinurlnavigator.h
src/dolphinviewcontainer.cpp

index ad45691771be875905e7f1851d1cc4a200459845..3a40eea5c482fbefe777b8f24d5c413909138d82 100644 (file)
@@ -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()) {
index 93a5731050594f78a64d516fba9a3dffab18f4c7..1387b567f694aba7c3dd4c3a2d02745c7a91335c 100644 (file)
@@ -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
index 5a424d17ba00002bc28026f4e26ebb21bfc2c30d..ef58abee0eef3f7dff7f5e267bfe4c9b901d6076 100644 (file)
@@ -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()