]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/treeviewsidebarpage.cpp
fix crash when opening a lot of columns and going back very fast by clicking on each...
[dolphin.git] / src / treeviewsidebarpage.cpp
index 6c89e762bb2eefc382b4d1ccea283cb066140c23..8258fbfc8d390b3896edde13937e693324220524 100644 (file)
 #include "dolphinview.h"
 #include "dolphinsettings.h"
 #include "dolphin_folderspanelsettings.h"
+#include "dolphin_generalsettings.h"
+#include "renamedialog.h"
 #include "sidebartreeview.h"
 #include "treeviewcontextmenu.h"
 
 #include <kfileplacesmodel.h>
 #include <kdirlister.h>
 #include <kfileitem.h>
+#include <konq_operations.h>
 
+#include <QApplication>
 #include <QItemSelection>
 #include <QTreeView>
 #include <QBoxLayout>
@@ -41,6 +45,7 @@
 TreeViewSidebarPage::TreeViewSidebarPage(QWidget* parent) :
     SidebarPage(parent),
     m_setLeafVisible(false),
+    m_mouseButtons(Qt::NoButton),
     m_dirLister(0),
     m_dolphinModel(0),
     m_proxyModel(0),
@@ -79,6 +84,28 @@ bool TreeViewSidebarPage::showHiddenFiles() const
     return FoldersPanelSettings::showHiddenFiles();
 }
 
+
+void TreeViewSidebarPage::rename(const KFileItem& item)
+{
+    if (DolphinSettings::instance().generalSettings()->renameInline()) {
+        const QModelIndex dirIndex = m_dolphinModel->indexForItem(item);
+        const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex);
+        m_treeView->edit(proxyIndex);
+    } else {
+        KFileItemList items;
+        items.append(item);
+        RenameDialog dialog(this, items);
+        if (dialog.exec() == QDialog::Accepted) {
+            const QString& newName = dialog.newName();
+            if (!newName.isEmpty()) {
+                KUrl newUrl = item.url();
+                newUrl.setFileName(newName);
+                KonqOperations::rename(this, item.url(), newUrl);
+            }
+        }
+    }
+}
+
 void TreeViewSidebarPage::setUrl(const KUrl& url)
 {
     if (!url.isValid() || (url == SidebarPage::url())) {
@@ -135,6 +162,8 @@ void TreeViewSidebarPage::showEvent(QShowEvent* event)
                 this, SLOT(updateActiveView(const QModelIndex&)));
         connect(m_treeView, SIGNAL(urlsDropped(const KUrl::List&, const QModelIndex&)),
                 this, SLOT(dropUrls(const KUrl::List&, const QModelIndex&)));
+        connect(m_treeView, SIGNAL(pressed(const QModelIndex&)),
+                this, SLOT(updateMouseButtons()));
 
         QVBoxLayout* layout = new QVBoxLayout(this);
         layout->setMargin(0);
@@ -166,7 +195,7 @@ void TreeViewSidebarPage::updateActiveView(const QModelIndex& index)
     const QModelIndex dirIndex = m_proxyModel->mapToSource(index);
     const KFileItem item = m_dolphinModel->itemForIndex(dirIndex);
     if (!item.isNull()) {
-        emit changeUrl(item.url());
+        emit changeUrl(item.url(), m_mouseButtons);
     }
 }
 
@@ -210,6 +239,8 @@ void TreeViewSidebarPage::expandToLeafDir()
 
 void TreeViewSidebarPage::loadSubTree()
 {
+    m_treeView->selectionModel()->clearSelection();
+
     if (m_leafDir.isParentOf(m_dirLister->url())) {
         // The leaf directory is not a child of the base URL, hence
         // no sub directory must be loaded or selected.
@@ -236,6 +267,11 @@ void TreeViewSidebarPage::scrollToLeaf()
     }
 }
 
+void TreeViewSidebarPage::updateMouseButtons()
+{
+    m_mouseButtons = QApplication::mouseButtons();
+}
+
 void TreeViewSidebarPage::loadTree(const KUrl& url)
 {
     Q_ASSERT(m_dirLister != 0);