Git commit b7980a8025e9f96b77ec625478cccfc908b566cc by Alexander Bikadorov. Committed on 20/08/2017 at 16:31. Pushed by abikadorov into branch 'master'.
GUI: fixed embedded terminal killed if chdir input is send too early FIXED: [ 383372 ] Toggle Fullscreen Embedded Terminal bug BUG: 383372 M +12 -6 krusader/GUI/terminaldock.cpp M +1 -0 krusader/GUI/terminaldock.h https://commits.kde.org/krusader/b7980a8025e9f96b77ec625478cccfc908b566cc diff --git a/krusader/GUI/terminaldock.cpp b/krusader/GUI/terminaldock.cpp index fa565b1c..4c44361b 100644 --- a/krusader/GUI/terminaldock.cpp +++ b/krusader/GUI/terminaldock.cpp @@ -19,10 +19,11 @@ #include "terminaldock.h" // QtCore -#include <QEvent> +#include <QDebug> #include <QDir> -#include <QString> +#include <QEvent> #include <QObject> +#include <QString> #include <QUrl> // QtGui #include <QKeyEvent> @@ -56,7 +57,7 @@ * A widget containing the konsolepart for the Embedded terminal emulator */ TerminalDock::TerminalDock(QWidget* parent, KrMainWindow *mainWindow) : QWidget(parent), - _mainWindow(mainWindow), konsole_part(0), t(0), initialised(false) + _mainWindow(mainWindow), konsole_part(0), t(0), initialised(false), firstInput(true) { terminal_hbox = new QHBoxLayout(this); } @@ -79,8 +80,8 @@ bool TerminalDock::initialise() if (konsole_part) { //loaded successfully terminal_hbox->addWidget(konsole_part->widget()); setFocusProxy(konsole_part->widget()); - connect(konsole_part, SIGNAL(destroyed()), - this, SLOT(killTerminalEmulator())); + connect(konsole_part, &KParts::ReadOnlyPart::destroyed, this, + &TerminalDock::killTerminalEmulator); // must filter app events, because some of them are processed // by child widgets of konsole_part->widget() // and would not be received on konsole_part->widget() @@ -91,6 +92,7 @@ bool TerminalDock::initialise() t->showShellInDir(lastPath); } initialised = true; + firstInput = true; } else KMessageBox::error(0, i18n("<b>Cannot create embedded terminal.</b><br/>" "The reported error was: %1", error)); @@ -114,6 +116,8 @@ bool TerminalDock::initialise() void TerminalDock::killTerminalEmulator() { + qDebug() << "killed"; + initialised = false; konsole_part = NULL; t = NULL; @@ -131,10 +135,12 @@ void TerminalDock::sendInput(const QString& input, bool clearCommand) // and command is appended to current input (e.g. "rm -rf x " concatenated with 'cd /usr'); // code "borrowed" from Dolphin, Copyright (C) 2007-2010 by Peter Penz <[email protected]> const int processId = t->terminalProcessId(); - if (processId > 0) { + // workaround (firstInput): kill is send to terminal if shell is not initialized yet + if (processId > 0 && !firstInput) { kill(processId, SIGINT); } } + firstInput = false; t->sendInput(input); } diff --git a/krusader/GUI/terminaldock.h b/krusader/GUI/terminaldock.h index 50442d1c..8eed69c0 100644 --- a/krusader/GUI/terminaldock.h +++ b/krusader/GUI/terminaldock.h @@ -65,6 +65,7 @@ private: KParts::ReadOnlyPart* konsole_part; // the actual part pointer TerminalInterface* t; // TerminalInterface of the konsole part bool initialised; + bool firstInput; bool applyShortcuts(QKeyEvent * ke); };
