X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Fviewers%2FAbstractPageViewer.java;h=e23e3ba7957320a67cdd82cb0d5de5f18c4561be;hb=fb3182380d9688998a81d853a4eebcf87b6a48c7;hp=1445fed33a82caf7186c9b77f8a238ba5e5809c9;hpb=a8505b964d83ed88d984f616ee13509814301729;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java index 1445fed33..e23e3ba79 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java @@ -16,6 +16,7 @@ import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; import org.argeo.cms.ui.CmsEditable; import org.argeo.cms.ui.widgets.ScrolledPage; +import org.argeo.jcr.JcrException; import org.eclipse.jface.viewers.ContentViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; @@ -190,13 +191,25 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ updateContent(part); prepare(part, caretPosition); edited = part; + edited.getControl().addFocusListener(new FocusListener() { + + @Override + public void focusLost(FocusEvent event) { + stopEditing(true); + } + + @Override + public void focusGained(FocusEvent event) { + } + }); + layout(part.getControl()); } catch (RepositoryException e) { throw new CmsException("Cannot edit " + part, e); } } - private void stopEditing(Boolean save) throws RepositoryException { + protected void stopEditing(Boolean save) { if (edited instanceof Widget && ((Widget) edited).isDisposed()) { edited = null; return; @@ -209,32 +222,29 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ return; } - if (save) - save(edited); + try { + if (save) + save(edited); - edited.stopEditing(); - updateContent(edited); - layout(((EditablePart) edited).getControl()); - edited = null; + edited.stopEditing(); + updateContent(edited); + layout(((EditablePart) edited).getControl()); + } catch (RepositoryException e) { + throw new JcrException("Cannot stop editing", e); + } finally { + edited = null; + } } // METHODS AVAILABLE TO EXTENDING CLASSES protected void saveEdit() { - try { - if (edited != null) - stopEditing(true); - } catch (RepositoryException e) { - throw new CmsException("Cannot stop editing", e); - } + if (edited != null) + stopEditing(true); } protected void cancelEdit() { - try { - if (edited != null) - stopEditing(false); - } catch (RepositoryException e) { - throw new CmsException("Cannot cancel editing", e); - } + if (edited != null) + stopEditing(false); } /** Layout this controls from the related base page. */