]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.cpp
Merge branch '4.9'
[dolphin.git] / src / views / dolphinview.cpp
index 986ecfaf8bec41f37d2925aa387faeed8132fc6f..05849729f95b2045794259c8ca2b2c68e72f6325 100644 (file)
@@ -98,8 +98,8 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
     m_toolTipManager(0),
     m_selectionChangedTimer(0),
     m_currentItemUrl(),
+    m_scrollToCurrentItem(false),
     m_restoredContentsPosition(),
-    m_createdItemUrl(),
     m_selectedUrls(),
     m_versionControlObserver(0)
 {
@@ -160,6 +160,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
     connect(m_model, SIGNAL(infoMessage(QString)),            this, SIGNAL(infoMessage(QString)));
     connect(m_model, SIGNAL(errorMessage(QString)),           this, SIGNAL(errorMessage(QString)));
     connect(m_model, SIGNAL(directoryRedirection(KUrl,KUrl)), this, SLOT(slotDirectoryRedirection(KUrl,KUrl)));
+    connect(m_model, SIGNAL(urlIsFileError(KUrl)),            this, SIGNAL(urlIsFileError(KUrl)));
 
     m_view->installEventFilter(this);
     connect(m_view, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)),
@@ -259,8 +260,14 @@ void DolphinView::setPreviewsShown(bool show)
     ViewProperties props(viewPropertiesUrl());
     props.setPreviewsShown(show);
 
+    const int oldZoomLevel = m_view->zoomLevel();
     m_view->setPreviewsShown(show);
     emit previewsShownChanged(show);
+
+    const int newZoomLevel = m_view->zoomLevel();
+    if (newZoomLevel != oldZoomLevel) {
+        emit zoomLevelChanged(newZoomLevel, oldZoomLevel);
+    }
 }
 
 bool DolphinView::previewsShown() const
@@ -356,6 +363,7 @@ void DolphinView::markUrlsAsSelected(const QList<KUrl>& urls)
 void DolphinView::markUrlAsCurrent(const KUrl& url)
 {
     m_currentItemUrl = url;
+    m_scrollToCurrentItem = true;
 }
 
 void DolphinView::selectItems(const QRegExp& pattern, bool enabled)
@@ -502,6 +510,16 @@ QString DolphinView::nameFilter() const
     return m_model->nameFilter();
 }
 
+void DolphinView::setMimeTypeFilters(const QStringList& filters)
+{
+    return m_model->setMimeTypeFilters(filters);
+}
+
+QStringList DolphinView::mimeTypeFilters() const
+{
+    return m_model->mimeTypeFilters();
+}
+
 QString DolphinView::statusBarText() const
 {
     QString summary;
@@ -617,9 +635,9 @@ void DolphinView::renameSelectedItems()
          return;
      }
 
-     if (items.count() == 1) {
+     if (items.count() == 1 && GeneralSettings::renameInline()) {
          const int index = m_model->index(items.first());
-         m_container->controller()->view()->editRole(index, "text");
+         m_view->editRole(index, "text");
      } else {
          RenameDialog* dialog = new RenameDialog(this, items);
          dialog->setAttribute(Qt::WA_DeleteOnClose);
@@ -735,6 +753,20 @@ void DolphinView::hideEvent(QHideEvent* event)
     QWidget::hideEvent(event);
 }
 
+bool DolphinView::event(QEvent* event)
+{
+    /* See Bug 297355
+     * Dolphin leaves file preview tooltips open even when is not visible.
+     *
+     * Hide tool-tip when Dolphin loses focus.
+     */
+    if (event->type() == QEvent::WindowDeactivate) {
+        hideToolTip();
+    }
+
+    return QWidget::event(event);
+}
+
 void DolphinView::activate()
 {
     setActive(true);
@@ -760,6 +792,14 @@ void DolphinView::slotItemsActivated(const QSet<int>& indexes)
         items.append(m_model->fileItem(index));
     }
 
+    if (items.count() > 5) {
+        QString question = QString("Are you sure you want to open %1 items?").arg(items.count());
+        const int answer = KMessageBox::warningYesNo(this, question);
+        if (answer != KMessageBox::Yes) {
+            return;
+        }
+    }
+
     foreach (const KFileItem& item, items) {
         if (item.isDir()) {
             emit tabRequested(item.url());
@@ -1135,25 +1175,8 @@ QString DolphinView::viewPropertiesContext() const
 
 void DolphinView::observeCreatedItem(const KUrl& url)
 {
-    m_createdItemUrl = url;
-    connect(m_model, SIGNAL(directoryLoadingCompleted()),
-            this, SLOT(selectAndScrollToCreatedItem()));
-}
-
-void DolphinView::selectAndScrollToCreatedItem()
-{
-    KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager();
-    const int index = m_model->index(m_createdItemUrl);
-    if (index != -1) {
-        selectionManager->setCurrentItem(index);
-        selectionManager->clearSelection();
-        selectionManager->setSelected(index);
-        m_view->scrollToItem(index);
-    }
-
-    disconnect(m_model, SIGNAL(directoryLoadingCompleted()),
-               this, SLOT(selectAndScrollToCreatedItem()));
-    m_createdItemUrl = KUrl();
+    markUrlAsCurrent(url);
+    markUrlsAsSelected(QList<KUrl>() << url);
 }
 
 void DolphinView::slotDirectoryRedirection(const KUrl& oldUrl, const KUrl& newUrl)
@@ -1171,6 +1194,12 @@ void DolphinView::updateViewState()
         const int currentIndex = m_model->index(m_currentItemUrl);
         if (currentIndex != -1) {
             selectionManager->setCurrentItem(currentIndex);
+
+            // scroll to current item and reset the state
+            if (m_scrollToCurrentItem) {
+                m_view->scrollToItem(currentIndex);
+                m_scrollToCurrentItem = false;
+            }
         } else {
             selectionManager->setCurrentItem(0);
         }
@@ -1314,11 +1343,21 @@ void DolphinView::slotVisibleRolesChangedByHeader(const QList<QByteArray>& curre
 
 void DolphinView::slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& value)
 {
+    if (index < 0 || index >= m_model->count()) {
+        return;
+    }
+
     if (role == "text") {
-        const KFileItem item = m_model->fileItem(index);
+        const KFileItem oldItem = m_model->fileItem(index);
         const QString newName = value.toString();
-        if (!newName.isEmpty() && newName != item.text() && newName != QLatin1String(".") && newName != QLatin1String("..")) {
-            KonqOperations::rename(this, item.url(), newName);
+        if (!newName.isEmpty() && newName != oldItem.text() && newName != QLatin1String(".") && newName != QLatin1String("..")) {
+            const KUrl oldUrl = oldItem.url();
+
+            QHash<QByteArray, QVariant> data;
+            data.insert(role, value);
+            m_model->setData(index, data);
+
+            KonqOperations::rename(this, oldUrl, newName);
         }
     }
 }
@@ -1459,7 +1498,7 @@ KUrl::List DolphinView::simplifiedSelectedUrls() const
     KUrl::List urls;
 
     const KFileItemList items = selectedItems();
-    foreach (const KFileItem &item, items) {
+    foreach (const KFileItemitem, items) {
         urls.append(item.url());
     }
 
@@ -1484,7 +1523,7 @@ void DolphinView::markPastedUrlsAsSelected(const QMimeData* mimeData)
     const KUrl::List sourceUrls = KUrl::List::fromMimeData(mimeData);
     KUrl::List destUrls;
     foreach (const KUrl& source, sourceUrls) {
-        KUrl destination(url().url() + "/" + source.fileName());
+        KUrl destination(url().url() + '/' + source.fileName());
         destUrls << destination;
     }
     markUrlsAsSelected(destUrls);