OSDN Git Service

Fix sf.net ticket #2217 Compare results refresh incorrectly after deletions
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Tue, 12 Mar 2019 14:44:07 +0000 (23:44 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Tue, 12 Mar 2019 14:44:07 +0000 (23:44 +0900)
Src/DirView.cpp
Src/DirView.h

index 20a6e2f..0b6df13 100644 (file)
@@ -1007,7 +1007,7 @@ void CDirView::UpdateAfterFileScript(FileActionScript & actionList)
                UPDATEITEM_TYPE updatetype = UpdateDiffAfterOperation(act, ctxt, GetDiffItem(act.context));
                if (updatetype == UPDATEITEM_REMOVE)
                {
-                       DeleteItem(act.context);
+                       DeleteItem(act.context, true);
                        bItemsRemoved = true;
                }
                else if (updatetype == UPDATEITEM_UPDATE)
@@ -1613,10 +1613,21 @@ DIFFITEM &CDirView::GetDiffItem(int sel)
        return GetDiffContext().GetDiffRefAt(diffpos);
 }
 
-void CDirView::DeleteItem(int sel)
+void CDirView::DeleteItem(int sel, bool removeDIFFITEM)
 {
        if (m_bTreeMode)
                CollapseSubdir(sel);
+       if (removeDIFFITEM)
+       {
+               DIFFITEM *diffpos = GetItemKey(sel);
+               if (diffpos != (DIFFITEM *)SPECIAL_ITEM_POS)
+               {
+                       if (diffpos->HasChildren())
+                               diffpos->RemoveChildren();
+                       diffpos->DelinkFromSiblings();
+                       delete diffpos;
+               }
+       }
        m_pList->DeleteItem(sel);
 }
 
index 682d325..12a88ba 100644 (file)
@@ -100,7 +100,7 @@ public:
        DIFFITEM *GetItemKey(int idx) const;
        int GetItemIndex(DIFFITEM *key);
        // for populating list
-       void DeleteItem(int sel);
+       void DeleteItem(int sel, bool removeDIFFITEM = false);
        void DeleteAllDisplayItems();
        void SetFont(const LOGFONT & lf);