┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/panels/terminal
diff options
context:
space:
mode:
Diffstat (limited to 'src/panels/terminal')
-rw-r--r--src/panels/terminal/terminalpanel.cpp11
-rw-r--r--src/panels/terminal/terminalpanel.h5
2 files changed, 12 insertions, 4 deletions
diff --git a/src/panels/terminal/terminalpanel.cpp b/src/panels/terminal/terminalpanel.cpp
index a357b31ac..55773345c 100644
--- a/src/panels/terminal/terminalpanel.cpp
+++ b/src/panels/terminal/terminalpanel.cpp
@@ -50,9 +50,10 @@ TerminalPanel::TerminalPanel(QWidget *parent)
TerminalPanel::~TerminalPanel()
{
if (m_konsolePart) {
- // Avoid when QObject cleanup, which comes after our destructor, deletes the konsolePart
- // and subsequently calls back into our slot when the destructor has already run.
disconnect(m_konsolePart, &KParts::ReadOnlyPart::destroyed, this, &TerminalPanel::terminalExited);
+ // Delete before QObject child cleanup, while m_konsolePartClientBuilder is still alive.
+ delete m_konsolePart;
+ m_konsolePart = nullptr;
}
}
@@ -145,9 +146,10 @@ bool TerminalPanel::urlChanged()
return false;
}
- const bool sendInput = m_terminal && !hasProgramRunning() && isVisible() && m_syncUrl;
+ const bool sendInput = m_terminal && !hasProgramRunning() && isVisible() && m_syncUrl && url() != m_url;
if (sendInput) {
changeDir(url());
+ m_url = url();
}
return true;
@@ -178,7 +180,8 @@ void TerminalPanel::showEvent(QShowEvent *event)
// 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));
+ m_konsolePartClientBuilder = std::make_unique<KXMLGUIBuilder>(m_terminalWidget);
+ m_konsolePart->setClientBuilder(m_konsolePartClientBuilder.get());
}
auto factory = new KXMLGUIFactory(m_konsolePart->clientBuilder(), this);
diff --git a/src/panels/terminal/terminalpanel.h b/src/panels/terminal/terminalpanel.h
index 0aaf921c0..d6ed4b981 100644
--- a/src/panels/terminal/terminalpanel.h
+++ b/src/panels/terminal/terminalpanel.h
@@ -12,6 +12,9 @@
#include <QQueue>
+#include <memory>
+
+class KXMLGUIBuilder;
class TerminalInterface;
class KActionCollection;
class KMessageWidget;
@@ -86,6 +89,7 @@ private:
private:
bool m_clearTerminal;
bool m_syncUrl;
+ QUrl m_url;
KIO::StatJob *m_mostLocalUrlJob;
QVBoxLayout *m_layout;
@@ -93,6 +97,7 @@ private:
QWidget *m_terminalWidget;
KMessageWidget *m_konsolePartMissingMessage;
KParts::ReadOnlyPart *m_konsolePart;
+ std::unique_ptr<KXMLGUIBuilder> m_konsolePartClientBuilder;
QString m_konsolePartCurrentDirectory;
QQueue<QString> m_sendCdToTerminalHistory;
org::kde::KIOFuse::VFS m_kiofuseInterface;