┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2014-04-29 21:44:46 +0200
committerFrank Reininghaus <[email protected]>2014-04-29 21:44:46 +0200
commiteddb62ac0c9cf2c37991401ea5332a7f334c05a9 (patch)
treed22b2e9c05d3fe8be3d8ba62d7e46ca5fa7ab380
parentae5bcfcdeece23915e7272af1046a7e71e269474 (diff)
parent5f29eec07572503679ca1dd354236065f33ff4a7 (diff)
Merge branch 'KDE/4.13'
-rw-r--r--src/dolphinmainwindow.cpp6
-rw-r--r--src/kitemviews/kfileitemmodel.cpp2
-rw-r--r--src/kitemviews/kitemlistselectionmanager.cpp11
-rw-r--r--src/kitemviews/kstandarditemlistwidget.cpp6
-rw-r--r--src/kitemviews/private/kdirectorycontentscounter.cpp15
-rw-r--r--src/panels/places/placespanel.cpp5
-rw-r--r--src/tests/kitemlistselectionmanagertest.cpp26
-rw-r--r--src/views/versioncontrol/updateitemstatesthread.cpp4
8 files changed, 63 insertions, 12 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 847301434..28169cfb5 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -481,6 +481,8 @@ void DolphinMainWindow::openNewTab(const KUrl& url)
m_viewTab.append(viewTab);
actionCollection()->action("close_tab")->setEnabled(true);
+ actionCollection()->action("activate_prev_tab")->setEnabled(true);
+ actionCollection()->action("activate_next_tab")->setEnabled(true);
// Provide a split view, if the startup settings are set this way
if (GeneralSettings::splitView()) {
@@ -1155,6 +1157,8 @@ void DolphinMainWindow::closeTab(int index)
if (m_viewTab.count() == 1) {
m_tabBar->removeTab(0);
actionCollection()->action("close_tab")->setEnabled(false);
+ actionCollection()->action("activate_prev_tab")->setEnabled(false);
+ actionCollection()->action("activate_next_tab")->setEnabled(false);
} else {
m_tabBar->blockSignals(false);
}
@@ -1634,11 +1638,13 @@ void DolphinMainWindow::setupActions()
KAction* activateNextTab = actionCollection()->addAction("activate_next_tab");
activateNextTab->setText(i18nc("@action:inmenu", "Activate Next Tab"));
+ activateNextTab->setEnabled(false);
connect(activateNextTab, SIGNAL(triggered()), SLOT(activateNextTab()));
activateNextTab->setShortcuts(QApplication::isRightToLeft() ? prevTabKeys : nextTabKeys);
KAction* activatePrevTab = actionCollection()->addAction("activate_prev_tab");
activatePrevTab->setText(i18nc("@action:inmenu", "Activate Previous Tab"));
+ activatePrevTab->setEnabled(false);
connect(activatePrevTab, SIGNAL(triggered()), SLOT(activatePrevTab()));
activatePrevTab->setShortcuts(QApplication::isRightToLeft() ? nextTabKeys : prevTabKeys);
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index fd773e1e9..a0f9305cb 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -216,7 +216,7 @@ void KFileItemModel::setShowHiddenFiles(bool show)
m_dirLister->setShowingDotFiles(show);
m_dirLister->emitChanges();
if (show) {
- slotCompleted();
+ dispatchPendingItemsToInsert();
}
}
diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp
index ebff1a30e..1f0a89d06 100644
--- a/src/kitemviews/kitemlistselectionmanager.cpp
+++ b/src/kitemviews/kitemlistselectionmanager.cpp
@@ -331,6 +331,11 @@ void KItemListSelectionManager::itemsMoved(const KItemRange& itemRange, const QL
// Store the current selection (needed in the selectionChanged() signal)
const KItemSet previousSelection = selectedItems();
+ // endAnchoredSelection() adds all items between m_currentItem and
+ // m_anchorItem to m_selectedItems. They can then be moved
+ // individually later in this function.
+ endAnchoredSelection();
+
// Update the current item
if (m_currentItem >= itemRange.index && m_currentItem < itemRange.index + itemRange.count) {
const int previousCurrentItem = m_currentItem;
@@ -342,10 +347,8 @@ void KItemListSelectionManager::itemsMoved(const KItemRange& itemRange, const QL
emit currentChanged(newCurrentItem, previousCurrentItem);
}
- // Update the anchor item
- if (m_anchorItem >= itemRange.index && m_anchorItem < itemRange.index + itemRange.count) {
- m_anchorItem = movedToIndexes.at(m_anchorItem - itemRange.index);
- }
+ // Start a new anchored selection.
+ beginAnchoredSelection(m_currentItem);
// Update the selections
if (!m_selectedItems.isEmpty()) {
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
index d8b5ad908..037226997 100644
--- a/src/kitemviews/kstandarditemlistwidget.cpp
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
@@ -658,6 +658,12 @@ void KStandardItemListWidget::dataChanged(const QHash<QByteArray, QVariant>& cur
dirtyRoles = roles;
}
+ // The URL might have changed (i.e., if the sort order of the items has
+ // been changed). Therefore, the "is cut" state must be updated.
+ KFileItemClipboard* clipboard = KFileItemClipboard::instance();
+ const KUrl itemUrl = data().value("url").value<KUrl>();
+ m_isCut = clipboard->isCut(itemUrl);
+
// The icon-state might depend from other roles and hence is
// marked as dirty whenever a role has been changed
dirtyRoles.insert("iconPixmap");
diff --git a/src/kitemviews/private/kdirectorycontentscounter.cpp b/src/kitemviews/private/kdirectorycontentscounter.cpp
index 65afb7c3e..7d1e76999 100644
--- a/src/kitemviews/private/kdirectorycontentscounter.cpp
+++ b/src/kitemviews/private/kdirectorycontentscounter.cpp
@@ -60,14 +60,23 @@ KDirectoryContentsCounter::~KDirectoryContentsCounter()
{
--m_workersCount;
- if (m_workersCount == 0) {
+ if (m_workersCount > 0) {
+ // The worker thread will continue running. It could even be running
+ // a method of m_worker at the moment, so we delete it using
+ // deleteLater() to prevent a crash.
+ m_worker->deleteLater();
+ } else {
+ // There are no remaining workers -> stop the worker thread.
m_workerThread->quit();
m_workerThread->wait();
delete m_workerThread;
m_workerThread = 0;
- }
- delete m_worker;
+ // The worker thread has finished running now, so it's safe to delete
+ // m_worker. deleteLater() would not work at all because the event loop
+ // which would deliver the event to m_worker is not running any more.
+ delete m_worker;
+ }
}
void KDirectoryContentsCounter::addDirectory(const QString& path)
diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp
index d5308eabe..f19fa1e25 100644
--- a/src/panels/places/placespanel.cpp
+++ b/src/panels/places/placespanel.cpp
@@ -283,8 +283,9 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
} else if (action == hideAction) {
item->setHidden(hideAction->isChecked());
} else if (action == openInNewTabAction) {
- const KUrl url = m_model->item(index)->dataValue("url").value<KUrl>();
- emit placeMiddleClicked(url);
+ // TriggerItem does set up the storage first and then it will
+ // emit the slotItemMiddleClicked signal, because of Qt::MiddleButton.
+ triggerItem(index, Qt::MiddleButton);
} else if (action == teardownAction) {
m_model->requestTeardown(index);
} else if (action == ejectAction) {
diff --git a/src/tests/kitemlistselectionmanagertest.cpp b/src/tests/kitemlistselectionmanagertest.cpp
index af2610d8c..492d0234f 100644
--- a/src/tests/kitemlistselectionmanagertest.cpp
+++ b/src/tests/kitemlistselectionmanagertest.cpp
@@ -78,6 +78,7 @@ private slots:
void testChangeSelection();
void testDeleteCurrentItem_data();
void testDeleteCurrentItem();
+ void testAnchoredSelectionAfterMovingItems();
private:
void verifySelectionChange(QSignalSpy& spy, const KItemSet& currentSelection, const KItemSet& previousSelection) const;
@@ -413,6 +414,15 @@ void KItemListSelectionManagerTest::testChangeSelection_data()
<< QVariant::fromValue(QList<int>() << 4 << 5 << 2 << 3))
<< (KItemSet() << 0 << 1 << 4 << 5);
+ QTest::newRow("Move items with active anchored selection")
+ << KItemSet()
+ << 0 << 3
+ << (KItemSet() << 0 << 1 << 2 << 3)
+ << MoveItems
+ << (QList<QVariant>() << QVariant::fromValue(KItemRange(2, 4))
+ << QVariant::fromValue(QList<int>() << 4 << 5 << 2 << 3))
+ << (KItemSet() << 0 << 1 << 4 << 5);
+
// Revert sort order
QTest::newRow("Revert sort order")
<< (KItemSet() << 0 << 1)
@@ -519,6 +529,22 @@ void KItemListSelectionManagerTest::testDeleteCurrentItem()
QCOMPARE(m_selectionManager->currentItem(), newCurrentItemIndex);
}
+void KItemListSelectionManagerTest::testAnchoredSelectionAfterMovingItems()
+{
+ m_selectionManager->setCurrentItem(4);
+ m_selectionManager->beginAnchoredSelection(4);
+
+ // Reverse the items between 0 and 5.
+ m_selectionManager->itemsMoved(KItemRange(0, 6), QList<int>() << 5 << 4 << 3 << 2 << 1 << 0);
+
+ QCOMPARE(m_selectionManager->currentItem(), 1);
+ QCOMPARE(m_selectionManager->m_anchorItem, 1);
+
+ // Make 2 the current item -> 1 and 2 should be selected.
+ m_selectionManager->setCurrentItem(2);
+ QCOMPARE(m_selectionManager->selectedItems(), KItemSet() << 1 << 2);
+}
+
void KItemListSelectionManagerTest::verifySelectionChange(QSignalSpy& spy,
const KItemSet& currentSelection,
const KItemSet& previousSelection) const
diff --git a/src/views/versioncontrol/updateitemstatesthread.cpp b/src/views/versioncontrol/updateitemstatesthread.cpp
index 6457f607d..62fcd09aa 100644
--- a/src/views/versioncontrol/updateitemstatesthread.cpp
+++ b/src/views/versioncontrol/updateitemstatesthread.cpp
@@ -64,9 +64,9 @@ void UpdateItemStatesThread::run()
items[i].version = static_cast<KVersionControlPlugin2::ItemVersion>(state);
}
}
-
- m_plugin->endRetrieval();
}
+
+ m_plugin->endRetrieval();
}
}