while ((m_nIndex = pView(m_pView)->GetNextItem(m_nIndex, m_nFlags & nMask)) == -1)\r
{\r
m_strFolderPrefix = *m_curFolderPrefix++;\r
- m_index = 1;\r
+ m_index++;\r
}\r
- return m_pView->GetDiffItem(m_nIndex);\r
+ const auto& di = m_pView->GetDiffItem(m_nIndex);\r
+ // If the current item is a folder, ignore the current item if the next selected item is a child element of that folder.\r
+ if (m_index > (((di.diffcode.diffcode & DIFFCODE::THREEWAY) == 0) ? 1 : 2) || !di.diffcode.isDirectory())\r
+ return di;\r
+ const int nextIndex = pView(m_pView)->GetNextItem(m_nIndex, m_nFlags & nMask);\r
+ if (nextIndex == -1)\r
+ return di;\r
+ const auto& diNext = m_pView->GetDiffItem(nextIndex);\r
+ const String curRelPath = strutils::makelower(di.diffFileInfo[m_index].GetFile());\r
+ if (strutils::makelower(diNext.diffFileInfo[m_index].GetFile()).find(curRelPath) != 0)\r
+ return di;\r
+ return *DIFFITEM::GetEmptyItem();\r
}\r
\r
/**\r
const CDiffContext& ctxt = m_pView->GetDiffContext();\r
const DIFFITEM &di = Next();\r
\r
- if ((m_nFlags & DiffsOnly) && !IsItemNavigableDiff(ctxt, di))\r
+ if (di.isEmpty() || ((m_nFlags & DiffsOnly) && !IsItemNavigableDiff(ctxt, di)))\r
{\r
return 0;\r
}\r