#include "dolphinmainwindow.h"
+#include "admin/workerintegration.h"
#include "dolphin_generalsettings.h"
#include "dolphinbookmarkhandler.h"
#include "dolphincontextmenu.h"
#include <KColorSchemeManager>
#include <KConfig>
#include <KConfigGui>
+#include <KDialogJobUiDelegate>
#include <KDualAction>
#include <KFileItemListProperties>
#include <KIO/CommandLauncherJob>
#include <KMessageBox>
#include <KProtocolInfo>
#include <KProtocolManager>
+#include <KRecentFilesAction>
#include <KShell>
#include <KShortcutsDialog>
#include <KStandardAction>
#include <QTimer>
#include <QToolButton>
#include <QtConcurrentRun>
+#include <dolphindebug.h>
#include <algorithm>
m_disabledActionNotifier = new DisabledActionNotifier(this);
connect(m_disabledActionNotifier, &DisabledActionNotifier::disabledActionTriggered, this, [this](const QAction *, QString reason) {
- m_activeViewContainer->showMessage(reason, DolphinViewContainer::Warning);
+ m_activeViewContainer->showMessage(reason, KMessageWidget::Warning);
});
setupDockWidgets();
updateViewActions();
updateGoActions();
+ // will signal used urls to activities manager, too
+ m_recentFiles->addUrl(url);
+
Q_EMIT urlChanged(url);
}
KIO::StatJob *statJob = static_cast<KIO::StatJob *>(job);
if (statJob->error()) {
- m_activeViewContainer->showMessage(job->errorString(), DolphinViewContainer::Error);
+ m_activeViewContainer->showMessage(job->errorString(), KMessageWidget::Error);
} else {
KIO::highlightInFileManager({destinationUrl});
}
void DolphinMainWindow::createDirectory()
{
- m_newFileMenu->setWorkingDirectory(activeViewContainer()->url());
- m_newFileMenu->createDirectory();
+ // When creating directory, namejob is being run. In network folders,
+ // this job can take long time, so instead of starting multiple namejobs,
+ // just check if we are already running one. This prevents opening multiple
+ // dialogs. BUG:481401
+ if (!m_newFileMenu->isCreateDirectoryRunning()) {
+ m_newFileMenu->setWorkingDirectory(activeViewContainer()->url());
+ m_newFileMenu->createDirectory();
+ }
}
void DolphinMainWindow::quit()
void DolphinMainWindow::showErrorMessage(const QString &message)
{
- m_activeViewContainer->showMessage(message, DolphinViewContainer::Error);
+ m_activeViewContainer->showMessage(message, KMessageWidget::Error);
}
void DolphinMainWindow::slotUndoAvailable(bool available)
// setup 'View' menu
// (note that most of it is set up in DolphinViewActionHandler)
+ Admin::WorkerIntegration::createActAsAdminAction(actionCollection(), this);
+
m_splitViewAction = actionCollection()->add<KActionMenu>(QStringLiteral("split_view"));
m_splitViewMenuAction = actionCollection()->addAction(QStringLiteral("split_view_menu"));
connect(openInSplitViewAction, &QAction::triggered, this, [this]() {
openInSplitView(QUrl());
});
+
+ m_recentFiles = new KRecentFilesAction(this);
}
void DolphinMainWindow::setupDockWidgets()
connect(infoPanel, &InformationPanel::urlActivated, this, &DolphinMainWindow::handleUrl);
infoDock->setWidget(infoPanel);
- createPanelAction(QIcon::fromTheme(QStringLiteral("dialog-information")), Qt::Key_F11, infoDock, QStringLiteral("show_information_panel"));
+ createPanelAction(QIcon::fromTheme(QStringLiteral("documentinfo")), Qt::Key_F11, infoDock, QStringLiteral("show_information_panel"));
addDockWidget(Qt::RightDockWidgetArea, infoDock);
connect(this, &DolphinMainWindow::urlChanged, infoPanel, &InformationPanel::setUrl);
connect(view, &DolphinView::goForwardRequested, this, &DolphinMainWindow::goForward);
connect(view, &DolphinView::urlActivated, this, &DolphinMainWindow::handleUrl);
connect(view, &DolphinView::goUpRequested, this, &DolphinMainWindow::goUp);
+ connect(view, &DolphinView::doubleClickViewBackground, this, &DolphinMainWindow::slotDoubleClickViewBackground);
connect(container->urlNavigatorInternalWithHistory(), &KUrlNavigator::urlChanged, this, &DolphinMainWindow::changeUrl);
connect(container->urlNavigatorInternalWithHistory(), &KUrlNavigator::historyChanged, this, &DolphinMainWindow::updateHistory);
DolphinMainWindow *mainWin = qobject_cast<DolphinMainWindow *>(parentWidget());
if (mainWin) {
DolphinViewContainer *container = mainWin->activeViewContainer();
- container->showMessage(job->errorString(), DolphinViewContainer::Error);
+ container->showMessage(job->errorString(), KMessageWidget::Error);
} else {
KIO::FileUndoManager::UiInterface::jobError(job);
}
return m_tabWidget->isItemVisibleInAnyView(QUrl::fromUserInput(urlOfItem));
}
+void DolphinMainWindow::slotDoubleClickViewBackground(Qt::MouseButton button)
+{
+ Q_UNUSED(button) // might be of use later
+
+ GeneralSettings *settings = GeneralSettings::self();
+ QString clickAction = settings->doubleClickViewAction();
+
+ DolphinView *view = activeViewContainer()->view();
+ if (view == nullptr || clickAction == "none") {
+ return;
+ }
+
+ if (clickAction == customCommand) {
+ // run custom command set by the user
+ QString path = view->url().toLocalFile();
+ QString clickCustomAction = settings->doubleClickViewCustomAction();
+ clickCustomAction.replace("{path}", path.prepend('"').append('"'));
+
+ m_job = new KIO::CommandLauncherJob(clickCustomAction);
+ m_job->setUiDelegate(new KDialogJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, this));
+ m_job->start();
+
+ } else {
+ // get the action set by the user and trigger it
+ const KActionCollection *actions = actionCollection();
+ QAction *action = actions->action(clickAction);
+ if (action == nullptr) {
+ qCWarning(DolphinDebug) << QStringLiteral("Double-click view: action `%1` was not found").arg(clickAction);
+ return;
+ }
+ action->trigger();
+ }
+}
+
#include "moc_dolphinmainwindow.cpp"