Author: scabanovich
Date: 2010-11-03 07:45:14 -0400 (Wed, 03 Nov 2010)
New Revision: 26219
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/editor/ObjectMultiPageEditor.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java
Log:
JBIDE-7301
https://jira.jboss.org/browse/JBIDE-7301
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/editor/ObjectMultiPageEditor.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/editor/ObjectMultiPageEditor.java 2010-11-03
11:44:00 UTC (rev 26218)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/editor/ObjectMultiPageEditor.java 2010-11-03
11:45:14 UTC (rev 26219)
@@ -345,7 +345,11 @@
if(monitor != null) monitor.setCanceled(true);
return;
}
- if(textEditor != null && textEditor.isModified()) textEditor.save();
+ lock2 = false;
+ try {
+ if(textEditor != null && textEditor.isModified()) {
+ textEditor.save();
+ }
XModelObject o = getModelObject();
if(o == null || !o.isActive()) return;
XModelObject p = o.getParent();
@@ -372,6 +376,9 @@
saveX(monitor);
f.updateRegistration(o);
+ } finally {
+ lock2 = false;
+ }
}
@@ -495,21 +502,16 @@
boolean lock2 = false;
boolean waitForMerge = false;
- int waitingEventsCount = 0;
public void nodeChanged(XModelTreeEvent event) {
if(lock2) return;
if(event.getDetails() == XModelTreeEvent.BEFORE_MERGE && event.getModelObject()
== getModelObject()) {
waitForMerge = true;
- waitingEventsCount = 0;
return;
}
if(event.getDetails() == XModelTreeEvent.AFTER_MERGE && event.getModelObject()
== getModelObject()) {
waitForMerge = false;
-// System.out.println("waitingEventsCount=" + waitingEventsCount);
- waitingEventsCount = 0;
}
- waitingEventsCount++;
if(waitForMerge) return;
if(needsUpdate()) {
Display.getDefault().syncExec(new U());
@@ -518,7 +520,6 @@
public void structureChanged(XModelTreeEvent event) {
if(lock2) return;
- waitingEventsCount++;
if(waitForMerge) return;
if(needsUpdate()) {
Display.getDefault().syncExec(new U());
@@ -725,7 +726,7 @@
e.widget.getDisplay().asyncExec(new Runnable() {
public void run() {
handleActivation();
- if(getActivePage() != getSourcePageIndex() && textEditor != null &&
textEditor.isModified()) {
+ if(textEditor != null && textEditor.isModified()) {
textEditor.save();
}
}
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java 2010-11-03
11:44:00 UTC (rev 26218)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java 2010-11-03
11:45:14 UTC (rev 26219)
@@ -253,20 +253,24 @@
class TextFocusListener extends FocusAdapter {
public void focusLost(FocusEvent e) {
- if(!XMLTextEditor.super.isDirty()) return;
- Display.getDefault().syncExec(
- new Runnable() {
- public void run() {
- try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- //ignore
- }
- save();
+ saveInThread();
+ }
+ }
+
+ private void saveInThread() {
+ if(!XMLTextEditor.super.isDirty()) return;
+ Display.getDefault().syncExec(
+ new Runnable() {
+ public void run() {
+ try {
+ Thread.sleep(200);
+ } catch (InterruptedException e) {
+ //ignore
}
+ save();
}
- );
- }
+ }
+ );
}
public void save() {
@@ -274,7 +278,7 @@
lock = true;
try {
FileAnyImpl f = (FileAnyImpl)getModelObject();
- if(f != null) f.edit(getSourceViewer().getDocument().get());
+ if(f != null) f.edit(getSourceViewer().getDocument().get());
} catch (XModelException e) {
ModelUIPlugin.getPluginLog().logError(e);
} finally {
@@ -446,6 +450,12 @@
public void documentChanged(DocumentEvent event) {
textChanged(null);
+ StyledText text = getSourceViewer() != null ? getSourceViewer().getTextWidget() :
null;
+ if(text != null && !text.isDisposed()) {
+ if(!text.isFocusControl() && text.isVisible()) {
+ saveInThread();
+ }
+ }
}
public void doRevertToSaved() {