[Winmerge-svn] SF.net SVN: winmerge: [4990] trunk
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ki...@us...> - 2008-02-01 14:34:53
|
Revision: 4990 http://winmerge.svn.sourceforge.net/winmerge/?rev=4990&view=rev Author: kimmov Date: 2008-02-01 06:34:51 -0800 (Fri, 01 Feb 2008) Log Message: ----------- BUG: [ 1882019 ] Read-only does not disable Delete in main menu Modified Paths: -------------- trunk/Docs/Users/ChangeLog.txt trunk/Src/DirActions.cpp trunk/Src/DirView.cpp trunk/Src/Languages/English.pot Modified: trunk/Docs/Users/ChangeLog.txt =================================================================== --- trunk/Docs/Users/ChangeLog.txt 2008-02-01 14:19:21 UTC (rev 4989) +++ trunk/Docs/Users/ChangeLog.txt 2008-02-01 14:34:51 UTC (rev 4990) @@ -9,6 +9,7 @@ Use radio symbol for current EOL menu item (#1869755) Ask and create pair for unique folder and open them (#1881454) BugFix: Always return 0 to command line (#1854419) + BugFix: Merge/Delete deleted items from read-only sides (#1882019) Translation updates: - Croatian (r4952) - Japanese (r4962) Modified: trunk/Src/DirActions.cpp =================================================================== --- trunk/Src/DirActions.cpp 2008-02-01 14:19:21 UTC (rev 4989) +++ trunk/Src/DirActions.cpp 2008-02-01 14:34:51 UTC (rev 4990) @@ -414,6 +414,10 @@ /** * @brief Delete left, right or both items. + * @note Usually we don't need to check for read-only in this level of code. + * Usually we can disable handling read-only items/sides by disabling GUI + * element. But in this case the GUI element effects to both sides and can + * be selected when another side is read-only. */ void CDirView::DoDelAll() { @@ -435,46 +439,57 @@ int leftFlags = ALLOW_DONT_CARE; int rightFlags = ALLOW_DONT_CARE; + BOOL leftRO = GetDocument()->GetReadOnly(TRUE); + BOOL rightRO = GetDocument()->GetReadOnly(FALSE); FileActionItem act; - if (IsItemDeletableOnBoth(di)) + if (IsItemDeletableOnBoth(di) && !leftRO && !rightRO) { leftFlags = ALLOW_ALL; rightFlags = ALLOW_ALL; act.src = srFile; act.dest = slFile; + act.UIResult = FileActionItem::UI_DEL_BOTH; } - else if (IsItemDeletableOnLeft(di)) + else if (IsItemDeletableOnLeft(di) && !leftRO) { leftFlags = ALLOW_ALL; act.src = slFile; + act.UIResult = FileActionItem::UI_DEL_LEFT; } - else if (IsItemDeletableOnRight(di)) + else if (IsItemDeletableOnRight(di) && !rightRO) { rightFlags = ALLOW_ALL; act.src = srFile; + act.UIResult = FileActionItem::UI_DEL_RIGHT; } - // We must first check that paths still exists - CString failpath; - BOOL succeed = CheckPathsExist(slFile.c_str(), srFile.c_str(), leftFlags, - rightFlags, failpath); - if (succeed == FALSE) + // Check one of sides is actually being added to removal list + if (leftFlags != ALLOW_DONT_CARE || rightFlags != ALLOW_DONT_CARE) { - WarnContentsChanged(failpath); - return; + // We must first check that paths still exists + CString failpath; + BOOL succeed = CheckPathsExist(slFile.c_str(), srFile.c_str(), leftFlags, + rightFlags, failpath); + if (succeed == FALSE) + { + WarnContentsChanged(failpath); + return; + } + + act.dirflag = di.diffcode.isDirectory(); + act.context = sel; + act.atype = actType; + actionScript.AddActionItem(act); + ++selCount; } - - act.dirflag = di.diffcode.isDirectory(); - act.context = sel; - act.atype = actType; - act.UIResult = FileActionItem::UI_DEL_BOTH; - actionScript.AddActionItem(act); } - ++selCount; } - // Now we prompt, and execute actions - ConfirmAndPerformActions(actionScript, selCount); + if (selCount > 0) + { + // Now we prompt, and execute actions + ConfirmAndPerformActions(actionScript, selCount); + } } /** Modified: trunk/Src/DirView.cpp =================================================================== --- trunk/Src/DirView.cpp 2008-02-01 14:19:21 UTC (rev 4989) +++ trunk/Src/DirView.cpp 2008-02-01 14:34:51 UTC (rev 4990) @@ -1713,10 +1713,18 @@ } /** - * @brief Update main menu "Merge | Delete" item + * @brief Update main menu "Merge | Delete" item. + * @param [in] pCmdUI Item to modify. */ void CDirView::DoUpdateDelete(CCmdUI* pCmdUI) { + // If both sides are read-only, then there is nothing to delete + if (GetDocument()->GetReadOnly(TRUE) && GetDocument()->GetReadOnly(FALSE)) + { + pCmdUI->Enable(FALSE); + return; + } + // If no selected items, disable int count = GetSelectedCount(); if (count == 0) Modified: trunk/Src/Languages/English.pot =================================================================== --- trunk/Src/Languages/English.pot 2008-02-01 14:19:21 UTC (rev 4989) +++ trunk/Src/Languages/English.pot 2008-02-01 14:34:51 UTC (rev 4990) @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: WinMerge\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=13216&atid=113216\n" -"POT-Creation-Date: 2008-02-01 16:18+0000\n" +"POT-Creation-Date: 2008-02-01 16:34+0000\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: English <win...@li...>\n" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |