The terminal panel is supposed to show the same location as the
currently active Dolphin view at all times.
However there was an issue when the terminal is supposed to
quickly switch to a new location and then back again to the old
one. The terminal ignored the switch to the old location unless it
had already fully switched to the new location. Because it isn't
particularly fast at fully switching to the new location, it would
never do the expected thing of switching back to the old location.
This commit makes it so the switch to the old location is only
ignored if there are no in-progress switches to a different
location.
BUG: 391380
BUG: 416690
FIXED-IN: 22.04.2
Not totally sure if this fixes everything but it seems like an improvement.
void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHistory)
{
void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHistory)
{
- if (dir == m_konsolePartCurrentDirectory) {
+ if (dir == m_konsolePartCurrentDirectory // We are already there
+ && m_sendCdToTerminalHistory.isEmpty() // …and that is not because the terminal couldn't keep up
+ ) {
m_clearTerminal = false;
return;
}
m_clearTerminal = false;
return;
}
- m_terminal->sendInput(" cd " + KShell::quoteArg(dir) + '\n');
-
// We want to ignore the currentDirectoryChanged(QString) signal, which we will receive after
// the directory change, because this directory change is not caused by a "cd" command that the
// user entered in the panel. Therefore, we have to remember 'dir'. Note that it could also be
// We want to ignore the currentDirectoryChanged(QString) signal, which we will receive after
// the directory change, because this directory change is not caused by a "cd" command that the
// user entered in the panel. Therefore, we have to remember 'dir'. Note that it could also be
if (addToHistory == HistoryPolicy::AddToHistory)
m_sendCdToTerminalHistory.enqueue(QDir(dir).canonicalPath());
if (addToHistory == HistoryPolicy::AddToHistory)
m_sendCdToTerminalHistory.enqueue(QDir(dir).canonicalPath());
+ m_terminal->sendInput(" cd " + KShell::quoteArg(dir) + '\n');
+
if (m_clearTerminal) {
m_terminal->sendInput(QStringLiteral(" clear\n"));
m_clearTerminal = false;
if (m_clearTerminal) {
m_terminal->sendInput(QStringLiteral(" clear\n"));
m_clearTerminal = false;