mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-19 16:31:21 +00:00
Fix crash when triggereing the "Compare files" action via D-Bus
If the number of selected items is not two, Dolphin disables this action. However, it is still possible to trigger it via D-Bus, and this could cause a crash in DolphinMainWindow::compareFiles() because this function did not test at all if there are really two items selected. This patch adds such a check and simplifies the code in that function. BUG: 325517 FIXED-IN: 4.11.3
This commit is contained in:
parent
0c55297ce4
commit
96ba990d86
|
@ -999,50 +999,23 @@ void DolphinMainWindow::goHome(Qt::MouseButtons buttons)
|
||||||
|
|
||||||
void DolphinMainWindow::compareFiles()
|
void DolphinMainWindow::compareFiles()
|
||||||
{
|
{
|
||||||
// The method is only invoked if exactly 2 files have
|
const DolphinViewContainer* primaryViewContainer = m_viewTab[m_tabIndex].primaryView;
|
||||||
// been selected. The selected files may be:
|
Q_ASSERT(primaryViewContainer);
|
||||||
// - both in the primary view
|
KFileItemList items = primaryViewContainer->view()->selectedItems();
|
||||||
// - both in the secondary view
|
|
||||||
// - one in the primary view and the other in the secondary
|
|
||||||
// view
|
|
||||||
Q_ASSERT(m_viewTab[m_tabIndex].primaryView);
|
|
||||||
|
|
||||||
KUrl urlA;
|
const DolphinViewContainer* secondaryViewContainer = m_viewTab[m_tabIndex].secondaryView;
|
||||||
KUrl urlB;
|
if (secondaryViewContainer) {
|
||||||
|
items.append(secondaryViewContainer->view()->selectedItems());
|
||||||
KFileItemList items = m_viewTab[m_tabIndex].primaryView->view()->selectedItems();
|
|
||||||
|
|
||||||
switch (items.count()) {
|
|
||||||
case 0: {
|
|
||||||
Q_ASSERT(m_viewTab[m_tabIndex].secondaryView);
|
|
||||||
items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems();
|
|
||||||
Q_ASSERT(items.count() == 2);
|
|
||||||
urlA = items[0].url();
|
|
||||||
urlB = items[1].url();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case 1: {
|
if (items.count() != 2) {
|
||||||
urlA = items[0].url();
|
// The action is disabled in this case, but it could have been triggered
|
||||||
Q_ASSERT(m_viewTab[m_tabIndex].secondaryView);
|
// via D-Bus, see https://bugs.kde.org/show_bug.cgi?id=325517
|
||||||
items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems();
|
return;
|
||||||
Q_ASSERT(items.count() == 1);
|
|
||||||
urlB = items[0].url();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case 2: {
|
KUrl urlA = items.at(0).url();
|
||||||
urlA = items[0].url();
|
KUrl urlB = items.at(1).url();
|
||||||
urlB = items[1].url();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default: {
|
|
||||||
// may not happen: compareFiles may only get invoked if 2
|
|
||||||
// files are selected
|
|
||||||
Q_ASSERT(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString command("kompare -c \"");
|
QString command("kompare -c \"");
|
||||||
command.append(urlA.pathOrUrl());
|
command.append(urlA.pathOrUrl());
|
||||||
|
|
Loading…
Reference in a new issue