Fix directory navigation in Dolphin::Terminal.

When navigating in Dolphin it attempts to keep any open Terminal (F4)
in sync by changing the directory in the shell.  It does this by
sending a "^C; cd $DIRECTORY" however shells under FreeBSD treat "^C"
as a literal string and not SIGINT.  Fix this by sending SIGINT to the
shell instead of "^C".

It appears Linux does not exhibit this behaviour.

Patch originally written by David Naylor, from the KDE-FreeBSD team.

REVIEW: 101096
CCMAIL: naylor.b.david@gmail.com
This commit is contained in:
Raphael Kubo da Costa 2011-04-12 11:14:25 -03:00
parent 43cebfda13
commit 5f78219e18

View file

@ -19,6 +19,8 @@
#include "terminalpanel.h"
#include <signal.h>
#include <kpluginloader.h>
#include <kpluginfactory.h>
#include <kde_terminal_interface_v2.h>
@ -115,11 +117,8 @@ void TerminalPanel::sendCdToTerminal(const QString& dir)
// The TerminalV2 interface does not provide a way to delete the
// current line before sending a new input. This is mandatory,
// otherwise sending a 'cd x' to a existing 'rm -rf *' might
// result in data loss. As workaround Ctrl+C is send.
QString cancel;
cancel.append(QChar(3));
cancel.append(QChar('c'));
m_terminal->sendInput(cancel);
// result in data loss. As workaround SIGINT is send.
kill(m_terminal->terminalProcessId(), SIGINT);
}
m_terminal->sendInput("cd " + KShell::quoteArg(dir) + '\n');