]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix terminal panel not keeping up with dir changes
authorFelix Ernst <fe.a.ernst@gmail.com>
Wed, 27 Apr 2022 10:40:40 +0000 (10:40 +0000)
committerFelix Ernst <fe.a.ernst@gmail.com>
Wed, 27 Apr 2022 10:40:40 +0000 (10:40 +0000)
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.

src/panels/terminal/terminalpanel.cpp

index 75bfe93d011583949b39753a9d4d7e3a798cf7bf..d87ae3b1e84c6f469017ea001fa4dc445f19f398 100644 (file)
@@ -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;