]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java
Major refactoring of Argeo CMS UI
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / viewers / AbstractPageViewer.java
index a60c4f62e3824cc498d2c13cf54aaecdc8a07a15..60cb228437adcd784b5e848d4e9682a7a8e460af 100644 (file)
@@ -13,7 +13,7 @@ import javax.security.auth.Subject;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.cms.ui.CmsEditable;
+import org.argeo.api.cms.CmsEditable;
 import org.argeo.cms.ui.widgets.ScrolledPage;
 import org.argeo.jcr.JcrException;
 import org.eclipse.jface.viewers.ContentViewer;
@@ -164,7 +164,8 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ
                                        mouseListener = null;
                                refresh(getControl());
                                // layout(getControl());
-                               layoutPage();
+                               if (!getControl().isDisposed())
+                                       layoutPage();
                        } catch (RepositoryException e) {
                                throw new JcrException("Cannot refresh", e);
                        }
@@ -198,9 +199,9 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ
                        }
 
                        part.startEditing();
+                       edited = part;
                        updateContent(part);
                        prepare(part, caretPosition);
-                       edited = part;
                        edited.getControl().addFocusListener(new FocusListener() {
                                private static final long serialVersionUID = 6883521812717097017L;
 
@@ -239,8 +240,12 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ
                                save(edited);
 
                        edited.stopEditing();
-                       updateContent(edited);
-                       layout(((EditablePart) edited).getControl());
+                       EditablePart editablePart = edited;
+                       Control control = ((EditablePart) edited).getControl();
+                       edited = null;
+                       // TODO make edited state management more robust
+                       updateContent(editablePart);
+                       layout(control);
                } catch (RepositoryException e) {
                        throw new JcrException("Cannot stop editing", e);
                } finally {