Merge branch 'KDE/4.13'

This commit is contained in:
Frank Reininghaus 2014-04-29 21:44:46 +02:00
commit eddb62ac0c
8 changed files with 63 additions and 12 deletions

View file

@ -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);

View file

@ -216,7 +216,7 @@ void KFileItemModel::setShowHiddenFiles(bool show)
m_dirLister->setShowingDotFiles(show);
m_dirLister->emitChanges();
if (show) {
slotCompleted();
dispatchPendingItemsToInsert();
}
}

View file

@ -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()) {

View file

@ -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");

View file

@ -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)

View file

@ -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) {

View file

@ -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

View file

@ -64,9 +64,9 @@ void UpdateItemStatesThread::run()
items[i].version = static_cast<KVersionControlPlugin2::ItemVersion>(state);
}
}
m_plugin->endRetrieval();
}
m_plugin->endRetrieval();
}
}