┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphinviewcontainer.cpp
diff options
context:
space:
mode:
authorFelix Ernst <[email protected]>2024-07-13 15:37:31 +0000
committerFelix Ernst <[email protected]>2024-07-13 15:37:31 +0000
commit19fdc5b67990bb75009a1fc511619bd449d559d7 (patch)
tree846b3d1392fc94ed1e9530458bad046c706be1ad /src/dolphinviewcontainer.cpp
parent8271df42bda9284012ebc05f7edbd0689c07f6a1 (diff)
Stop acting as admin when the authorization expires
Previously, the authorization just silently expired without any visible change. The surprise only came when the user tried to do any action, which immediately would show a password prompt. We don't want users to randomly type passwords into password prompts unexpectedly showing up. This commit avoids that. With this change, the view container visibly de-escalates privileges and shows a message explaining what happened. A method was implemented in kio-admin to make this possible. See: https://commits.kde.org/kio-admin/a2da29289d12ef845e2c1da17ed04c59f1c47762 This commit also improves some logic around the responsibility of hiding bars and activating view containers. This is also part of my project funded by the European Commission.
Diffstat (limited to 'src/dolphinviewcontainer.cpp')
-rw-r--r--src/dolphinviewcontainer.cpp41
1 files changed, 23 insertions, 18 deletions
diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp
index 99ba4efa8..27f845fa7 100644
--- a/src/dolphinviewcontainer.cpp
+++ b/src/dolphinviewcontainer.cpp
@@ -145,7 +145,6 @@ 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);
@@ -165,7 +164,9 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent)
});
connect(m_statusBar, &DolphinStatusBar::stopPressed, this, &DolphinViewContainer::stopDirectoryLoading);
connect(m_statusBar, &DolphinStatusBar::zoomLevelChanged, this, &DolphinViewContainer::slotStatusBarZoomLevelChanged);
- connect(m_statusBar, &DolphinStatusBar::showMessage, this, &DolphinViewContainer::showMessage);
+ connect(m_statusBar, &DolphinStatusBar::showMessage, this, [this](const QString &message, KMessageWidget::MessageType messageType) {
+ showMessage(message, messageType);
+ });
m_statusBarTimer = new QTimer(this);
m_statusBarTimer->setSingleShot(true);
@@ -182,7 +183,6 @@ 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
@@ -404,7 +404,7 @@ void DolphinViewContainer::slotSplitTabDisabled()
}
}
-void DolphinViewContainer::showMessage(const QString &message, KMessageWidget::MessageType messageType)
+void DolphinViewContainer::showMessage(const QString &message, KMessageWidget::MessageType messageType, std::initializer_list<QAction *> buttonActions)
{
if (message.isEmpty()) {
return;
@@ -417,6 +417,14 @@ void DolphinViewContainer::showMessage(const QString &message, KMessageWidget::M
m_messageWidget->setWordWrap(true);
m_messageWidget->setMessageType(messageType);
+ const QList<QAction *> previousMessageWidgetActions = m_messageWidget->actions();
+ for (auto action : previousMessageWidgetActions) {
+ m_messageWidget->removeAction(action);
+ }
+ for (QAction *action : buttonActions) {
+ m_messageWidget->addAction(action);
+ }
+
m_messageWidget->setWordWrap(false);
const int unwrappedWidth = m_messageWidget->sizeHint().width();
m_messageWidget->setWordWrap(unwrappedWidth > size().width());
@@ -638,6 +646,17 @@ void DolphinViewContainer::slotDirectoryLoadingCompleted()
if (m_urlNavigatorConnected) {
m_urlNavigatorConnected->setReadOnlyBadgeVisible(rootItem().isLocalFile() && !rootItem().isWritable());
}
+
+ // Update admin bar visibility
+ if (m_view->url().scheme() == QStringLiteral("admin")) {
+ if (!m_adminBar) {
+ m_adminBar = new Admin::Bar(this);
+ m_topLayout->addWidget(m_adminBar, positionFor.adminBar, 0);
+ }
+ m_adminBar->setVisible(true, WithAnimation);
+ } else if (m_adminBar) {
+ m_adminBar->setVisible(false, WithAnimation);
+ }
}
void DolphinViewContainer::slotDirectoryLoadingCanceled()
@@ -740,20 +759,6 @@ 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();