From: Felix Ernst Date: Wed, 27 Apr 2022 10:40:40 +0000 (+0000) Subject: Fix terminal panel not keeping up with dir changes X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/e70e12e3bdf3ce4e9cca4c8f003655ea10b21d7e Fix terminal panel not keeping up with dir changes 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. --- diff --git a/src/panels/terminal/terminalpanel.cpp b/src/panels/terminal/terminalpanel.cpp index 75bfe93d0..d87ae3b1e 100644 --- a/src/panels/terminal/terminalpanel.cpp +++ b/src/panels/terminal/terminalpanel.cpp @@ -234,7 +234,9 @@ void TerminalPanel::changeDir(const QUrl& url) 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; } @@ -252,8 +254,6 @@ void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHist } #endif - 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 @@ -261,6 +261,8 @@ void TerminalPanel::sendCdToTerminal(const QString& dir, HistoryPolicy addToHist 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;