diff options
Diffstat (limited to 'src/panels/terminal')
| -rw-r--r-- | src/panels/terminal/terminalpanel.cpp | 11 | ||||
| -rw-r--r-- | src/panels/terminal/terminalpanel.h | 5 |
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; |
