diff options
| author | Frank Reininghaus <[email protected]> | 2014-10-24 18:49:05 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2014-10-24 18:49:05 +0200 |
| commit | fa988586bc923b33497cbc97aaac07fc93a4ca83 (patch) | |
| tree | 1232efe3052753b7f406f11fc1d84476b2282d96 /src/panels/terminal | |
| parent | c07a97c4be1b5118026ea95831fd1edf7fac34e9 (diff) | |
| parent | 1f02d15f7ec13dd206698f88a92a9949cbfc3470 (diff) | |
Merge remote-tracking branch 'origin/master' into frameworks
Conflicts:
dolphin/src/panels/terminal/terminalpanel.cpp
dolphin/src/panels/terminal/terminalpanel.h
Diffstat (limited to 'src/panels/terminal')
| -rw-r--r-- | src/panels/terminal/terminalpanel.cpp | 31 | ||||
| -rw-r--r-- | src/panels/terminal/terminalpanel.h | 3 |
2 files changed, 22 insertions, 12 deletions
diff --git a/src/panels/terminal/terminalpanel.cpp b/src/panels/terminal/terminalpanel.cpp index 02489d40e..fb7d89d31 100644 --- a/src/panels/terminal/terminalpanel.cpp +++ b/src/panels/terminal/terminalpanel.cpp @@ -43,7 +43,8 @@ TerminalPanel::TerminalPanel(QWidget* parent) : m_terminal(0), m_terminalWidget(0), m_konsolePart(0), - m_konsolePartCurrentDirectory() + m_konsolePartCurrentDirectory(), + m_sendCdToTerminalHistory() { m_layout = new QVBoxLayout(this); m_layout->setMargin(0); @@ -117,11 +118,11 @@ void TerminalPanel::showEvent(QShowEvent* event) } } if (m_terminal) { - connect(m_konsolePart, SIGNAL(currentDirectoryChanged(QString)), - this, SLOT(slotKonsolePartCurrentDirectoryChanged(QString))); m_terminal->showShellInDir(url().toLocalFile()); changeDir(url()); m_terminalWidget->setFocus(); + connect(m_konsolePart, SIGNAL(currentDirectoryChanged(QString)), + this, SLOT(slotKonsolePartCurrentDirectoryChanged(QString))); } Panel::showEvent(event); @@ -162,7 +163,12 @@ void TerminalPanel::sendCdToTerminal(const QString& dir) } m_terminal->sendInput(" cd " + KShell::quoteArg(dir) + '\n'); - m_konsolePartCurrentDirectory = dir; + + // 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 + // a symbolic link -> remember the 'canonical' path. + m_sendCdToTerminalHistory.enqueue(QDir(dir).canonicalPath()); if (m_clearTerminal) { m_terminal->sendInput(" clear\n"); @@ -183,14 +189,15 @@ void TerminalPanel::slotMostLocalUrlResult(KJob* job) void TerminalPanel::slotKonsolePartCurrentDirectoryChanged(const QString& dir) { - m_konsolePartCurrentDirectory = dir; + m_konsolePartCurrentDirectory = QDir(dir).canonicalPath(); - // Only change the view URL if 'dir' is different from the current view URL. - // Note that the current view URL could also be a symbolic link to 'dir' - // -> use QDir::canonicalPath() to check that. - const QUrl oldUrl(url()); - const QUrl newUrl(QUrl::fromLocalFile(dir)); - if (newUrl != oldUrl && dir != QDir(oldUrl.path()).canonicalPath()) { - emit changeUrl(newUrl); + // Only emit a changeUrl signal if the directory change was caused by the user inside the + // terminal, and not by sendCdToTerminal(QString). + while (!m_sendCdToTerminalHistory.empty()) { + if (m_konsolePartCurrentDirectory == m_sendCdToTerminalHistory.dequeue()) { + return; + } } + + emit changeUrl(dir); } diff --git a/src/panels/terminal/terminalpanel.h b/src/panels/terminal/terminalpanel.h index 5d012a332..b3ccefb31 100644 --- a/src/panels/terminal/terminalpanel.h +++ b/src/panels/terminal/terminalpanel.h @@ -22,6 +22,8 @@ #include <panels/panel.h> +#include <QQueue> + class TerminalInterface; class QVBoxLayout; class QWidget; @@ -82,6 +84,7 @@ private: QWidget* m_terminalWidget; KParts::ReadOnlyPart* m_konsolePart; QString m_konsolePartCurrentDirectory; + QQueue<QString> m_sendCdToTerminalHistory; }; #endif // TERMINALPANEL_H |
