X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/f588a7d48b7cef5351d8b0f030a6ec5e76229976..e990cbbe3fb00d4e4be42d4bbff8db74e11a2b2b:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index cf7778c82..1c9624504 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -6,6 +6,7 @@ #include "dolphinviewcontainer.h" +#include "admin/bar.h" #include "dolphin_compactmodesettings.h" #include "dolphin_contentdisplaysettings.h" #include "dolphin_detailsmodesettings.h" @@ -46,12 +47,13 @@ // An overview of the widgets contained by this ViewContainer struct LayoutStructure { int searchBox = 0; - int messageWidget = 1; - int selectionModeTopBar = 2; - int view = 3; - int selectionModeBottomBar = 4; - int filterBar = 5; - int statusBar = 6; + int adminBar = 1; + int messageWidget = 2; + int selectionModeTopBar = 3; + int view = 4; + int selectionModeBottomBar = 5; + int filterBar = 6; + int statusBar = 7; }; constexpr LayoutStructure positionFor; @@ -62,6 +64,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) , m_urlNavigatorConnected{nullptr} , m_searchBox(nullptr) , m_searchModeEnabled(false) + , m_adminBar{nullptr} , m_messageWidget(nullptr) , m_selectionModeTopBar{nullptr} , m_view(nullptr) @@ -103,7 +106,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) m_messageWidget->setPosition(KMessageWidget::Header); m_messageWidget->hide(); -#ifndef Q_OS_WIN +#if !defined(Q_OS_WIN) && !defined(Q_OS_HAIKU) if (getuid() == 0) { // We must be logged in as the root user; show a big scary warning showMessage(i18n("Running Dolphin as root can be dangerous. Please be careful."), Warning); @@ -147,6 +150,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) connect(m_view, &DolphinView::hiddenFilesShownChanged, this, &DolphinViewContainer::slotHiddenFilesShownChanged); connect(m_view, &DolphinView::sortHiddenLastChanged, this, &DolphinViewContainer::slotSortHiddenLastChanged); connect(m_view, &DolphinView::currentDirectoryRemoved, this, &DolphinViewContainer::slotCurrentDirectoryRemoved); + connect(m_view, &DolphinView::urlChanged, this, &DolphinViewContainer::updateAdminBarVisibility); // Initialize status bar m_statusBar = new DolphinStatusBar(this); @@ -176,6 +180,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) m_topLayout->addWidget(m_statusBar, positionFor.statusBar, 0); setSearchModeEnabled(isSearchUrl(url)); + updateAdminBarVisibility(url); // Update view as the ContentDisplaySettings change // this happens here and not in DolphinView as DolphinviewContainer and DolphinView are not in the same build target ATM @@ -297,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; } @@ -646,6 +653,10 @@ void DolphinViewContainer::slotDirectoryLoadingStarted() m_statusBar->setProgressText(QString()); updateDirectoryLoadingProgress(-1); } + + if (m_urlNavigatorConnected) { + m_urlNavigatorConnected->setReadOnlyBadgeVisible(false); + } } void DolphinViewContainer::slotDirectoryLoadingCompleted() @@ -662,6 +673,10 @@ void DolphinViewContainer::slotDirectoryLoadingCompleted() } else { updateStatusBar(); } + + if (m_urlNavigatorConnected) { + m_urlNavigatorConnected->setReadOnlyBadgeVisible(rootItem().isLocalFile() && !rootItem().isWritable()); + } } void DolphinViewContainer::slotDirectoryLoadingCanceled() @@ -768,6 +783,20 @@ void DolphinViewContainer::showItemInfo(const KFileItem &item) } } +void DolphinViewContainer::updateAdminBarVisibility(const QUrl &url) +{ + if (url.scheme() == QStringLiteral("admin")) { + if (!m_adminBar) { + m_adminBar = new Admin::Bar(this); + m_topLayout->addWidget(m_adminBar, positionFor.adminBar, 0); + connect(m_adminBar, &Admin::Bar::activated, this, &DolphinViewContainer::activate); + } + m_adminBar->setVisible(true, WithAnimation); + } else if (m_adminBar) { + m_adminBar->setVisible(false, WithAnimation); + } +} + void DolphinViewContainer::closeFilterBar() { m_filterBar->closeFilterBar(); @@ -839,7 +868,8 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const QUrl &url) void DolphinViewContainer::slotUrlSelectionRequested(const QUrl &url) { - m_view->markUrlsAsSelected({url}); + // We do not want to select any item here because there is no reason to assume that the user wants to edit the folder we are emerging from. BUG: 424723 + m_view->markUrlAsCurrent(url); // makes the item scroll into view }