From: Frank Reininghaus Date: Fri, 24 Oct 2014 16:49:05 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/master' into frameworks X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/fa988586bc923b33497cbc97aaac07fc93a4ca83?hp=-c Merge remote-tracking branch 'origin/master' into frameworks Conflicts: dolphin/src/panels/terminal/terminalpanel.cpp dolphin/src/panels/terminal/terminalpanel.h --- fa988586bc923b33497cbc97aaac07fc93a4ca83 diff --combined src/panels/information/phononwidget.cpp index 0de587bf8,3d9909239..1c9c21cd3 --- a/src/panels/information/phononwidget.cpp +++ b/src/panels/information/phononwidget.cpp @@@ -32,10 -32,9 +32,10 @@@ #include #include -#include -#include -#include +#include +#include +#include +#include class EmbeddedVideoPlayer : public Phonon::VideoWidget { @@@ -73,7 -72,7 +73,7 @@@ PhononWidget::PhononWidget(QWidget *par { } -void PhononWidget::setUrl(const KUrl &url) +void PhononWidget::setUrl(const QUrl &url) { if (m_url != url) { stop(); // emits playingStopped() signal @@@ -81,7 -80,7 +81,7 @@@ } } -KUrl PhononWidget::url() const +QUrl PhononWidget::url() const { return m_url; } @@@ -129,16 -128,16 +129,16 @@@ void PhononWidget::showEvent(QShowEven m_playButton->setToolTip(i18n("play")); m_playButton->setIconSize(buttonSize); - m_playButton->setIcon(KIcon("media-playback-start")); + m_playButton->setIcon(QIcon::fromTheme("media-playback-start")); m_playButton->setAutoRaise(true); - connect(m_playButton, SIGNAL(clicked()), this, SLOT(play())); + connect(m_playButton, &QToolButton::clicked, this, &PhononWidget::play); m_stopButton->setToolTip(i18n("stop")); m_stopButton->setIconSize(buttonSize); - m_stopButton->setIcon(KIcon("media-playback-stop")); + m_stopButton->setIcon(QIcon::fromTheme("media-playback-stop")); m_stopButton->setAutoRaise(true); m_stopButton->hide(); - connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); + connect(m_stopButton, &QToolButton::clicked, this, &PhononWidget::stop); m_seekSlider->setIconVisible(false); @@@ -178,13 -177,20 +178,20 @@@ void PhononWidget::play( { if (!m_media) { m_media = new Phonon::MediaObject(this); - connect(m_media, SIGNAL(stateChanged(Phonon::State,Phonon::State)), - this, SLOT(stateChanged(Phonon::State))); - connect(m_media, SIGNAL(hasVideoChanged(bool)), - this, SLOT(slotHasVideoChanged(bool))); + connect(m_media, &Phonon::MediaObject::stateChanged, + this, &PhononWidget::stateChanged); + connect(m_media, &Phonon::MediaObject::hasVideoChanged, + this, &PhononWidget::slotHasVideoChanged); m_seekSlider->setMediaObject(m_media); } + if (!m_videoPlayer) { + m_videoPlayer = new EmbeddedVideoPlayer(this); + m_topLayout->insertWidget(0, m_videoPlayer); + Phonon::createPath(m_media, m_videoPlayer); + applyVideoSize(); + } + if (!m_audioOutput) { m_audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); Phonon::createPath(m_media, m_audioOutput); @@@ -218,15 -224,6 +225,6 @@@ void PhononWidget::slotHasVideoChanged( emit hasVideoChanged(hasVideo); if (hasVideo) { - if (!m_videoPlayer) { - // Replay the media to apply path changes - m_media->stop(); - m_videoPlayer = new EmbeddedVideoPlayer(this); - m_topLayout->insertWidget(0, m_videoPlayer); - Phonon::createPath(m_media, m_videoPlayer); - m_media->play(); - } - applyVideoSize(); m_videoPlayer->show(); } } diff --combined src/panels/terminal/terminalpanel.cpp index 02489d40e,f827503a2..fb7d89d31 --- a/src/panels/terminal/terminalpanel.cpp +++ b/src/panels/terminal/terminalpanel.cpp @@@ -24,16 -24,15 +24,16 @@@ #include #include #include -#include -#include +#include +#include #include #include #include +#include -#include #include #include +#include TerminalPanel::TerminalPanel(QWidget* parent) : Panel(parent), @@@ -43,7 -42,8 +43,8 @@@ m_terminal(0), m_terminalWidget(0), m_konsolePart(0), - m_konsolePartCurrentDirectory() + m_konsolePartCurrentDirectory(), + m_sendCdToTerminalHistory() { m_layout = new QVBoxLayout(this); m_layout->setMargin(0); @@@ -70,7 -70,7 +71,7 @@@ void TerminalPanel::dockVisibilityChang this, SLOT(slotKonsolePartCurrentDirectoryChanged(QString))); // Make sure this terminal does not prevent unmounting any removable drives - changeDir(KUrl::fromPath("/")); + changeDir(QUrl::fromLocalFile("/")); // Because we have disconnected from the part's currentDirectoryChanged() // signal, we have to update m_konsolePartCurrentDirectory manually. If this @@@ -110,24 -110,24 +111,24 @@@ void TerminalPanel::showEvent(QShowEven } m_konsolePart = factory ? (factory->create(this)) : 0; if (m_konsolePart) { - connect(m_konsolePart, SIGNAL(destroyed(QObject*)), this, SLOT(terminalExited())); + connect(m_konsolePart, &KParts::ReadOnlyPart::destroyed, this, &TerminalPanel::terminalExited); m_terminalWidget = m_konsolePart->widget(); m_layout->addWidget(m_terminalWidget); - m_terminal = qobject_cast(m_konsolePart); + m_terminal = qobject_cast(m_konsolePart); } } 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); } -void TerminalPanel::changeDir(const KUrl& url) +void TerminalPanel::changeDir(const QUrl& url) { delete m_mostLocalUrlJob; m_mostLocalUrlJob = 0; @@@ -137,9 -137,9 +138,9 @@@ } else { m_mostLocalUrlJob = KIO::mostLocalUrl(url, KIO::HideProgressInfo); if (m_mostLocalUrlJob->ui()) { - m_mostLocalUrlJob->ui()->setWindow(this); + KJobWidgets::setWindow(m_mostLocalUrlJob, this); } - connect(m_mostLocalUrlJob, SIGNAL(result(KJob*)), this, SLOT(slotMostLocalUrlResult(KJob*))); + connect(m_mostLocalUrlJob, &KIO::StatJob::result, this, &TerminalPanel::slotMostLocalUrlResult); } } @@@ -162,7 -162,12 +163,12 @@@ void TerminalPanel::sendCdToTerminal(co } 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"); @@@ -173,7 -178,7 +179,7 @@@ void TerminalPanel::slotMostLocalUrlResult(KJob* job) { KIO::StatJob* statJob = static_cast(job); - const KUrl url = statJob->mostLocalUrl(); + const QUrl url = statJob->mostLocalUrl(); if (url.isLocalFile()) { sendCdToTerminal(url.toLocalFile()); } @@@ -183,14 -188,17 +189,15 @@@ void TerminalPanel::slotKonsolePartCurrentDirectoryChanged(const QString& dir) { - m_konsolePartCurrentDirectory = dir; - - // 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); + m_konsolePartCurrentDirectory = QDir(dir).canonicalPath(); + + // 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); } - -#include "terminalpanel.moc" diff --combined src/panels/terminal/terminalpanel.h index 5d012a332,b65239baf..b3ccefb31 --- a/src/panels/terminal/terminalpanel.h +++ b/src/panels/terminal/terminalpanel.h @@@ -22,7 -22,9 +22,9 @@@ #include + #include + -class TerminalInterfaceV2; +class TerminalInterface; class QVBoxLayout; class QWidget; @@@ -33,7 -35,7 +35,7 @@@ namespace KIO namespace KParts { class ReadOnlyPart; } - +class KJob; /** * @brief Shows the terminal which is synchronized with the URL of the * active view. @@@ -56,7 -58,7 +58,7 @@@ signals /** * Is emitted if the an URL change is requested. */ - void changeUrl(const KUrl& url); + void changeUrl(const QUrl& url); protected: /** @see Panel::urlChanged() */ @@@ -70,7 -72,7 +72,7 @@@ private slots void slotKonsolePartCurrentDirectoryChanged(const QString& dir); private: - void changeDir(const KUrl& url); + void changeDir(const QUrl& url); void sendCdToTerminal(const QString& path); private: @@@ -78,10 -80,11 +80,11 @@@ KIO::StatJob* m_mostLocalUrlJob; QVBoxLayout* m_layout; - TerminalInterfaceV2* m_terminal; + TerminalInterface* m_terminal; QWidget* m_terminalWidget; KParts::ReadOnlyPart* m_konsolePart; QString m_konsolePartCurrentDirectory; + QQueue m_sendCdToTerminalHistory; }; #endif // TERMINALPANEL_H