X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/05762d42ea91ea034086c67099cf9208f86c00ff..abb6807645598e8117e98bbf232cd9cd90fe019a:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 2c3c6c38d..5ae81f31d 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -60,7 +60,6 @@ #include "dolphiniconsview.h" #include "dolphin_generalsettings.h" #include "draganddrophelper.h" -#include "folderexpander.h" #include "renamedialog.h" #include "settings/dolphinsettings.h" #include "viewproperties.h" @@ -97,8 +96,7 @@ DolphinView::DolphinView(QWidget* parent, m_activeItemUrl(), m_createdItemUrl(), m_selectedItems(), - m_newFileNames(), - m_expandedDragSource(0) + m_newFileNames() { m_topLayout = new QVBoxLayout(this); m_topLayout->setSpacing(0); @@ -136,8 +134,8 @@ DolphinView::DolphinView(QWidget* parent, this, SLOT(clearHoverInformation())); KDirLister* dirLister = m_viewAccessor.dirLister(); - connect(dirLister, SIGNAL(redirection(KUrl, KUrl)), - this, SIGNAL(redirection(KUrl, KUrl))); + connect(dirLister, SIGNAL(redirection(KUrl,KUrl)), + this, SLOT(slotRedirection(KUrl,KUrl))); connect(dirLister, SIGNAL(completed()), this, SLOT(slotDirListerCompleted())); connect(dirLister, SIGNAL(refreshItems(const QList>&)), @@ -161,8 +159,6 @@ DolphinView::DolphinView(QWidget* parent, DolphinView::~DolphinView() { - delete m_expandedDragSource; - m_expandedDragSource = 0; } const KUrl& DolphinView::url() const @@ -313,7 +309,8 @@ void DolphinView::invertSelection() bool DolphinView::hasSelection() const { - return m_viewAccessor.itemView()->selectionModel()->hasSelection(); + const QAbstractItemView* view = m_viewAccessor.itemView(); + return view && view->selectionModel()->hasSelection(); } void DolphinView::clearSelection() @@ -628,7 +625,7 @@ void DolphinView::renameSelectedItems() return; } delete dialog; - + // the selection would be invalid after renaming the items, so just clear // it before clearSelection(); @@ -854,18 +851,6 @@ bool DolphinView::eventFilter(QObject* watched, QEvent* event) } break; - case QEvent::MouseButtonPress: - if ((watched == m_viewAccessor.itemView()->viewport()) && (m_expandedDragSource != 0)) { - // Listening to a mousebutton press event to delete expanded views is a - // workaround, as it seems impossible for the FolderExpander to know when - // a dragging outside a view has been finished. However it works quite well: - // A mousebutton press event indicates that a drag operation must be - // finished already. - m_expandedDragSource->deleteLater(); - m_expandedDragSource = 0; - } - break; - case QEvent::DragEnter: if (watched == m_viewAccessor.itemView()->viewport()) { setActive(true); @@ -1065,26 +1050,6 @@ bool DolphinView::itemsExpandable() const return m_viewAccessor.itemsExpandable(); } -void DolphinView::deleteWhenNotDragSource(QAbstractItemView *view) -{ - if (view == 0) - return; - - if (DragAndDropHelper::instance().isDragSource(view)) { - // We must store for later deletion. - if (m_expandedDragSource != 0) { - // The old stored view is obviously not the drag source anymore. - m_expandedDragSource->deleteLater(); - m_expandedDragSource = 0; - } - view->hide(); - m_expandedDragSource = view; - } - else { - view->deleteLater(); - } -} - void DolphinView::observeCreatedItem(const KUrl& url) { m_createdItemUrl = url; @@ -1209,7 +1174,6 @@ void DolphinView::loadDirectory(const KUrl& url, bool reload) connect(m_viewAccessor.dirLister(), SIGNAL(completed()), this, SLOT(restoreSelection())); } - m_viewAccessor.dirLister()->stop(); m_viewAccessor.dirLister()->openUrl(url, reload ? KDirLister::Reload : KDirLister::NoFlags); } @@ -1305,26 +1269,9 @@ void DolphinView::createView() view->installEventFilter(this); view->viewport()->installEventFilter(this); - - /* TODO: enable folder expanding again later - - if (m_mode != ColumnView) { - // Give the view the ability to auto-expand its directories on hovering - // (the column view takes care about this itself). If the details view - // uses expandable folders, the auto-expanding should be used always. - FolderExpander* folderExpander = new FolderExpander(view, m_viewAccessor.proxyModel()); - folderExpander->setEnabled(m_viewAccessor.hasExpandableFolders()); - connect(folderExpander, SIGNAL(enterDir(const QModelIndex&)), - m_controller, SLOT(triggerItem(const QModelIndex&))); - - } - else { - // Listen out for requests to delete the current column. - connect(m_viewAccessor.columnsContainer(), SIGNAL(requestColumnDeletion(QAbstractItemView*)), - this, SLOT(deleteWhenNotDragSource(QAbstractItemView*))); - }*/ - m_controller->setItemView(view); + connect(m_controller, SIGNAL(selectionChanged()), + this, SLOT(emitDelayedSelectionChangedSignal())); // When changing the view mode, the selection is lost due to reinstantiating // a new item view with a custom selection model. Pass the ownership of the @@ -1336,8 +1283,6 @@ void DolphinView::createView() } m_selectionModel->setParent(this); - connect(view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), - this, SLOT(emitDelayedSelectionChangedSignal())); connect(view->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(emitContentsMoved())); connect(view->horizontalScrollBar(), SIGNAL(valueChanged(int)), @@ -1365,10 +1310,6 @@ void DolphinView::deleteView() m_controller->disconnect(view); view->disconnect(); - // TODO: move this code into ViewAccessor::deleteView() - deleteWhenNotDragSource(view); - view = 0; - m_viewAccessor.deleteView(); } } @@ -1417,8 +1358,15 @@ DolphinView::ViewAccessor::ViewAccessor(DolphinSortFilterProxyModel* proxyModel) m_iconsView(0), m_detailsView(0), m_columnsContainer(0), - m_proxyModel(proxyModel) + m_proxyModel(proxyModel), + m_dragSource(0) +{ +} + +DolphinView::ViewAccessor::~ViewAccessor() { + delete m_dragSource; + m_dragSource = 0; } void DolphinView::ViewAccessor::createView(QWidget* parent, @@ -1447,13 +1395,30 @@ void DolphinView::ViewAccessor::createView(QWidget* parent, void DolphinView::ViewAccessor::deleteView() { - // TODO: Move the deleteWhenNotDragSource() code into the view - // accessor, so that creating and deleting is fully done by - // the view accessor. + QAbstractItemView* view = itemView(); + if (view != 0) { + if (DragAndDropHelper::instance().isDragSource(view)) { + // The view is a drag source (the feature "Open folders + // during drag operations" is used). Deleting the view + // during an ongoing drag operation is not allowed, so + // this will postponed. + if (m_dragSource != 0) { + // the old stored view is obviously not the drag source anymore + m_dragSource->deleteLater(); + m_dragSource = 0; + } + view->hide(); + m_dragSource = view; + } else { + view->deleteLater(); + } + } + m_iconsView = 0; m_detailsView = 0; - m_columnsContainer->deleteLater(); + if (m_columnsContainer) + m_columnsContainer->deleteLater(); m_columnsContainer = 0; } @@ -1505,13 +1470,6 @@ bool DolphinView::ViewAccessor::supportsCategorizedSorting() const return m_iconsView != 0; } -bool DolphinView::ViewAccessor::hasExpandableFolders() const -{ - const DolphinSettings& settings = DolphinSettings::instance(); - return settings.generalSettings()->autoExpandFolders() || - ((m_detailsView != 0) && settings.detailsModeSettings()->expandableFolders()); -} - bool DolphinView::ViewAccessor::itemsExpandable() const { return (m_detailsView != 0) && m_detailsView->itemsExpandable(); @@ -1524,7 +1482,6 @@ bool DolphinView::ViewAccessor::reloadOnAdditionalInfoChange() const return m_detailsView != 0; } - DolphinModel* DolphinView::ViewAccessor::dirModel() const { return static_cast(proxyModel()->sourceModel()); @@ -1543,4 +1500,10 @@ KDirLister* DolphinView::ViewAccessor::dirLister() const return dirModel()->dirLister(); } +void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl) +{ + emit redirection(oldUrl, newUrl); + m_controller->redirectToUrl(newUrl); // #186947 +} + #include "dolphinview.moc"