# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: C:\nam\nb55\xml\refactoring # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: src/org/netbeans/modules/xml/refactoring/RefactoringManager.java *** C:\nam\nb55\xml\refactoring\src\org\netbeans\modules\xml\refactoring\RefactoringManager.java Base (1.1.2.18) --- C:\nam\nb55\xml\refactoring\src\org\netbeans\modules\xml\refactoring\RefactoringManager.java Locally Modified (Based On 1.1.2.18) *************** *** 134,139 **** --- 134,142 ---- return false; } } + if (genericChangeUndoManager != null && ! genericChangeUndoManager.canUndo()) { + return false; + } return true; } *************** *** 148,154 **** um.undo(); } } ! if (genericChangeUndoManager != null) { genericChangeUndoManager.undo(); } } finally { --- 151,157 ---- um.undo(); } } ! if (genericChangeUndoManager != null && genericChangeUndoManager.canUndo()) { genericChangeUndoManager.undo(); } } finally { *************** *** 177,182 **** --- 180,188 ---- return false; } } + if (genericChangeUndoManager != null && ! genericChangeUndoManager.canRedo()) { + return false; + } return true; } *************** *** 191,196 **** --- 197,205 ---- um.redo(); } } + if (genericChangeUndoManager != null && genericChangeUndoManager.canRedo()) { + genericChangeUndoManager.redo(); + } } finally { setStatus(Status.IDLE); } *************** *** 254,265 **** } } ! private synchronized void addUndoableListener(ChangeExecutor exec) { ! if (! (exec instanceof GeneralChangeExecutor)) { ! return; ! } ! ! GeneralChangeExecutor executor = (GeneralChangeExecutor) exec; genericChangeUndoManager = new UndoManager(); executor.addUndoableEditListener(genericChangeUndoManager); } --- 263,269 ---- } } ! private synchronized void addUndoableListener(GeneralChangeExecutor executor) { genericChangeUndoManager = new UndoManager(); executor.addUndoableEditListener(genericChangeUndoManager); } *************** *** 357,363 **** boolean isLocal = request.isScopeLocal(); setStatus(Status.RUNNING); try { ! clearUndoManagers(); lastRefactorRequest = request; if (request.getChangeExecutor() == null) { --- 361,367 ---- boolean isLocal = request.isScopeLocal(); setStatus(Status.RUNNING); try { ! clearLastUndoSupport(); lastRefactorRequest = request; if (request.getChangeExecutor() == null) { *************** *** 374,381 **** UsageSet usageSet = request.getUsages(); if (! isLocal) { addUndoableRefactorListener(request.getTargetModel()); ! addUndoableListener(request.getChangeExecutor()); request.getChangeExecutor().doChange(request); if (! request.confirmChangePerformed()) { return; --- 378,388 ---- UsageSet usageSet = request.getUsages(); if (! isLocal) { + if (request.getChangeExecutor() instanceof GeneralChangeExecutor) { + addUndoableListener((GeneralChangeExecutor) request.getChangeExecutor()); + } else { addUndoableRefactorListener(request.getTargetModel()); ! } request.getChangeExecutor().doChange(request); if (! request.confirmChangePerformed()) { return; *************** *** 436,442 **** } if (! isRunning()) { // cancelled _undo(); ! clearUndoManagers(); } setStatus(Status.IDLE); } --- 443,449 ---- } if (! isRunning()) { // cancelled _undo(); ! clearLastUndoSupport(); } setStatus(Status.IDLE); } *************** *** 489,512 **** status = s; } ! synchronized void clearUndoManagers() { undoManagers = null; } public void propertyChange(PropertyChangeEvent evt) { if (UsageSet.VALID_PROPERTY.equals(evt.getPropertyName()) && Boolean.FALSE.equals(evt.getNewValue())) { ! clearUndoManagers(); ! ! if (evt.getSource() instanceof UsageSet) { ! UsageSet s = (UsageSet) evt.getSource(); ! s.removePropertyChangeListener(this); } } - } } --- 496,519 ---- status = s; } ! synchronized void clearLastUndoSupport() { undoManagers = null; + genericChangeUndoManager = null; + if (lastRefactorRequest != null && lastRefactorRequest.getUsages() != null) { + lastRefactorRequest.getUsages().removePropertyChangeListener(this); } + lastRefactorRequest = null; + } public void propertyChange(PropertyChangeEvent evt) { if (UsageSet.VALID_PROPERTY.equals(evt.getPropertyName()) && Boolean.FALSE.equals(evt.getNewValue())) { ! clearLastUndoSupport(); } } }