mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-05 16:19:10 +00:00
Expose konsolepart shortcuts in Dolphin's shortcuts view
Adapt some changes from Yakuake a0b08cb1f7
credit to Stephan Sahm @schlichtanders
BUG: 428265
This commit is contained in:
parent
94262a1c02
commit
d71b617205
|
@ -53,6 +53,7 @@
|
|||
#include <KProtocolInfo>
|
||||
#include <KProtocolManager>
|
||||
#include <KShell>
|
||||
#include <KShortcutsDialog>
|
||||
#include <KStandardAction>
|
||||
#include <KStartupInfo>
|
||||
#include <KSycoca>
|
||||
|
@ -170,7 +171,7 @@ DolphinMainWindow::DolphinMainWindow() :
|
|||
|
||||
setupDockWidgets();
|
||||
|
||||
setupGUI(Keys | Save | Create | ToolBar);
|
||||
setupGUI(Save | Create | ToolBar);
|
||||
stateChanged(QStringLiteral("new_file"));
|
||||
|
||||
QClipboard* clipboard = QApplication::clipboard();
|
||||
|
@ -1372,6 +1373,19 @@ void DolphinMainWindow::slotStorageTearDownExternallyRequested(const QString& mo
|
|||
}
|
||||
}
|
||||
|
||||
void DolphinMainWindow::slotKeyBindings()
|
||||
{
|
||||
KShortcutsDialog dialog(KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsAllowed, this);
|
||||
dialog.addCollection(actionCollection());
|
||||
if (m_terminalPanel) {
|
||||
KActionCollection *konsolePartActionCollection = m_terminalPanel->actionCollection();
|
||||
if (konsolePartActionCollection) {
|
||||
dialog.addCollection(konsolePartActionCollection, QStringLiteral("KonsolePart"));
|
||||
}
|
||||
}
|
||||
dialog.configure();
|
||||
}
|
||||
|
||||
void DolphinMainWindow::setViewsToHomeIfMountPathOpen(const QString& mountPath)
|
||||
{
|
||||
const QVector<DolphinViewContainer*> theViewContainers = viewContainers();
|
||||
|
@ -1709,6 +1723,7 @@ void DolphinMainWindow::setupActions()
|
|||
"contain mostly the same commands and configuration options."));
|
||||
connect(showMenuBar, &KToggleAction::triggered, // Fixes #286822
|
||||
this, &DolphinMainWindow::toggleShowMenuBar, Qt::QueuedConnection);
|
||||
KStandardAction::keyBindings(this, &DolphinMainWindow::slotKeyBindings, actionCollection());
|
||||
KStandardAction::preferences(this, &DolphinMainWindow::editSettings, actionCollection());
|
||||
|
||||
// setup 'Help' menu for the m_controlButton. The other one is set up in the base class.
|
||||
|
|
|
@ -576,6 +576,12 @@ private Q_SLOTS:
|
|||
* to go to.
|
||||
*/
|
||||
void slotGoForward(QAction* action);
|
||||
|
||||
/**
|
||||
* Is called when configuring the keyboard shortcuts
|
||||
*/
|
||||
void slotKeyBindings();
|
||||
|
||||
private:
|
||||
/**
|
||||
* Sets up the various menus and actions and connects them.
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "terminalpanel.h"
|
||||
|
||||
#include <KActionCollection>
|
||||
#include <KIO/DesktopExecParser>
|
||||
#include <KIO/Job>
|
||||
#include <KIO/JobUiDelegate>
|
||||
|
@ -17,6 +18,8 @@
|
|||
#include <KPluginFactory>
|
||||
#include <KProtocolInfo>
|
||||
#include <KShell>
|
||||
#include <KXMLGUIBuilder>
|
||||
#include <KXMLGUIFactory>
|
||||
#include <kde_terminal_interface.h>
|
||||
|
||||
#include <QAction>
|
||||
|
@ -100,6 +103,21 @@ QString TerminalPanel::runningProgramName() const
|
|||
return m_terminal ? m_terminal->foregroundProcessName() : QString();
|
||||
}
|
||||
|
||||
KActionCollection *TerminalPanel::actionCollection()
|
||||
{
|
||||
// m_terminal is the only reference reset to nullptr in case the terminal is
|
||||
// closed again
|
||||
if (m_terminal && m_konsolePart && m_terminalWidget) {
|
||||
const auto guiClients = m_konsolePart->childClients();
|
||||
for (auto *client : guiClients) {
|
||||
if (client->actionCollection()->associatedWidgets().contains(m_terminalWidget)) {
|
||||
return client->actionCollection();
|
||||
}
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool TerminalPanel::hasProgramRunning() const
|
||||
{
|
||||
return m_terminal && (m_terminal->foregroundProcessId() != -1);
|
||||
|
@ -139,6 +157,23 @@ void TerminalPanel::showEvent(QShowEvent* event)
|
|||
m_layout->removeWidget(m_konsolePartMissingMessage);
|
||||
}
|
||||
m_terminal = qobject_cast<TerminalInterface*>(m_konsolePart);
|
||||
|
||||
// needed to collect the correct KonsolePart actionCollection
|
||||
// namely the one of the single inner terminal and not the outer KonsolePart
|
||||
if (!m_konsolePart->factory() && m_terminalWidget) {
|
||||
if (!m_konsolePart->clientBuilder()) {
|
||||
m_konsolePart->setClientBuilder(new KXMLGUIBuilder(m_terminalWidget));
|
||||
}
|
||||
|
||||
auto factory = new KXMLGUIFactory(m_konsolePart->clientBuilder(), this);
|
||||
factory->addClient(m_konsolePart);
|
||||
|
||||
// Prevents the KXMLGui warning about removing the client
|
||||
connect(m_terminalWidget, &QObject::destroyed, this, [factory, this] {
|
||||
factory->removeClient(m_konsolePart);
|
||||
});
|
||||
}
|
||||
|
||||
} else if (!m_konsolePartMissingMessage) {
|
||||
const auto konsoleInstallUrl = QUrl("appstream://org.kde.konsole.desktop");
|
||||
const auto konsoleNotInstalledText = i18n("Terminal cannot be shown because Konsole is not installed. "
|
||||
|
|
|
@ -7,12 +7,13 @@
|
|||
#ifndef TERMINALPANEL_H
|
||||
#define TERMINALPANEL_H
|
||||
|
||||
#include "panels/panel.h"
|
||||
#include "kiofuse_interface.h"
|
||||
#include "panels/panel.h"
|
||||
|
||||
#include <QQueue>
|
||||
|
||||
class TerminalInterface;
|
||||
class KActionCollection;
|
||||
class KMessageWidget;
|
||||
class QVBoxLayout;
|
||||
class QWidget;
|
||||
|
@ -47,6 +48,7 @@ public:
|
|||
bool terminalHasFocus() const;
|
||||
bool hasProgramRunning() const;
|
||||
QString runningProgramName() const;
|
||||
KActionCollection *actionCollection();
|
||||
|
||||
public Q_SLOTS:
|
||||
void terminalExited();
|
||||
|
|
Loading…
Reference in a new issue