┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphinmainwindow.cpp
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2013-10-13 10:55:21 +0200
committerFrank Reininghaus <[email protected]>2013-10-13 10:55:21 +0200
commit96ba990d865b2dfb966961061ba5154dcd3187b4 (patch)
treebe30166c2fb23ce9c2cce8afb42ef88f22770497 /src/dolphinmainwindow.cpp
parent0c55297ce40847a9af1e00f233c3943f66ab577f (diff)
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
Diffstat (limited to 'src/dolphinmainwindow.cpp')
-rw-r--r--src/dolphinmainwindow.cpp51
1 files changed, 12 insertions, 39 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index a11fb0c5b..ccef356ea 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -999,50 +999,23 @@ void DolphinMainWindow::goHome(Qt::MouseButtons buttons)
void DolphinMainWindow::compareFiles()
{
- // The method is only invoked if exactly 2 files have
- // been selected. The selected files may be:
- // - both in the primary view
- // - 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;
- KUrl urlB;
-
- KFileItemList items = m_viewTab[m_tabIndex].primaryView->view()->selectedItems();
+ const DolphinViewContainer* primaryViewContainer = m_viewTab[m_tabIndex].primaryView;
+ Q_ASSERT(primaryViewContainer);
+ KFileItemList items = primaryViewContainer->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;
+ const DolphinViewContainer* secondaryViewContainer = m_viewTab[m_tabIndex].secondaryView;
+ if (secondaryViewContainer) {
+ items.append(secondaryViewContainer->view()->selectedItems());
}
- case 1: {
- urlA = items[0].url();
- Q_ASSERT(m_viewTab[m_tabIndex].secondaryView);
- items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems();
- Q_ASSERT(items.count() == 1);
- urlB = items[0].url();
- break;
- }
-
- case 2: {
- urlA = items[0].url();
- urlB = items[1].url();
- break;
+ if (items.count() != 2) {
+ // The action is disabled in this case, but it could have been triggered
+ // via D-Bus, see https://bugs.kde.org/show_bug.cgi?id=325517
+ return;
}
- default: {
- // may not happen: compareFiles may only get invoked if 2
- // files are selected
- Q_ASSERT(false);
- }
- }
+ KUrl urlA = items.at(0).url();
+ KUrl urlB = items.at(1).url();
QString command("kompare -c \"");
command.append(urlA.pathOrUrl());