]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Merge remote-tracking branch 'origin/master' into frameworks
authorFrank Reininghaus <frank78ac@googlemail.com>
Fri, 24 Oct 2014 16:49:05 +0000 (18:49 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Fri, 24 Oct 2014 16:49:05 +0000 (18:49 +0200)
Conflicts:
dolphin/src/panels/terminal/terminalpanel.cpp
dolphin/src/panels/terminal/terminalpanel.h

1  2 
src/panels/information/phononwidget.cpp
src/panels/terminal/terminalpanel.cpp
src/panels/terminal/terminalpanel.h

index 0de587bf8c56073c47fb22d739691252949a7116,3d9909239c112d03ad9ade7d7ff1e80ebe2dd9ca..1c9c21cd39b844846df0c4291cfbf6a49ec17231
  #include <QToolButton>
  
  #include <KDialog>
 -#include <KIcon>
 -#include <KUrl>
 -#include <KLocale>
 +#include <QIcon>
 +#include <KIconLoader>
 +#include <QUrl>
 +#include <KLocalizedString>
  
  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();
      }
  }
index 02489d40e0ec2dfd6d95b4c1e16d46c5b4086407,f827503a2b592520d81f41dc58a9b8f690c8dc51..fb7d89d31d7cf47fe0ee26b0c9e451931724ddc2
  #include <KPluginLoader>
  #include <KPluginFactory>
  #include <KService>
 -#include <kde_terminal_interface_v2.h>
 -#include <KParts/Part>
 +#include <kde_terminal_interface.h>
 +#include <KParts/ReadOnlyPart>
  #include <KShell>
  #include <KIO/Job>
  #include <KIO/JobUiDelegate>
 +#include <KJobWidgets>
  
 -#include <QBoxLayout>
  #include <QDir>
  #include <QShowEvent>
 +#include <QVBoxLayout>
  
  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<KParts::ReadOnlyPart>(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<TerminalInterfaceV2 *>(m_konsolePart);
 +            m_terminal = qobject_cast<TerminalInterface*>(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;
      } 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");
  void TerminalPanel::slotMostLocalUrlResult(KJob* job)
  {
      KIO::StatJob* statJob = static_cast<KIO::StatJob *>(job);
 -    const KUrl url = statJob->mostLocalUrl();
 +    const QUrl url = statJob->mostLocalUrl();
      if (url.isLocalFile()) {
          sendCdToTerminal(url.toLocalFile());
      }
  
  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"
index 5d012a332d622ded87fe18a26af7ec7ad38c7b44,b65239baf3de021309120d5af63258fb5d55f96c..b3ccefb31c8063953fb9384ea5248df68a67c509
@@@ -22,7 -22,9 +22,9 @@@
  
  #include <panels/panel.h>
  
 -class TerminalInterfaceV2;
+ #include <QQueue>
 +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:
      KIO::StatJob* m_mostLocalUrlJob;
  
      QVBoxLayout* m_layout;
 -    TerminalInterfaceV2* m_terminal;
 +    TerminalInterface* m_terminal;
      QWidget* m_terminalWidget;
      KParts::ReadOnlyPart* m_konsolePart;
      QString m_konsolePartCurrentDirectory;
+     QQueue<QString> m_sendCdToTerminalHistory;
  };
  
  #endif // TERMINALPANEL_H