diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java index 44cb5059544060bcff758505defc6bae591d335c..0cf943c6e4fa4f78488c5e2268263c854bd6707f 100644 --- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java +++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java @@ -207,7 +207,9 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre @Override public void dispatchEvent(UserRequest ureq, Component source, Event event) { - if (source.equals(backLink) || source.equals(closeLink)) { + boolean closeEvent = source.equals(closeLink); + boolean backEvent = source.equals(backLink); + if (backEvent || closeEvent) { if (stack.size() > 1) { // back means to one level down, change source to the stack item one below current source = stack.get(stack.size()-2); @@ -235,13 +237,12 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre } if(popedCrumb.getController() != null) { - fireEvent(ureq, new PopEvent(popedCrumb.getController(), popedCrumb.getUserObject())); + fireEvent(ureq, new PopEvent(popedCrumb.getController(), popedCrumb.getUserObject(), closeEvent)); } else if(popedCrumb.getUserObject() != null) { - fireEvent(ureq, new PopEvent(popedCrumb.getUserObject())); + fireEvent(ureq, new PopEvent(popedCrumb.getUserObject(), closeEvent)); } } else if(stack.indexOf(source) == 0) { fireEvent(ureq, new RootEvent()); - } } } @@ -397,7 +398,7 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre BreadCrumb rootCrumb = (BreadCrumb)rootLink.getUserObject(); setContent(rootCrumb.getController()); updateCloseLinkTitle(); - fireEvent(ureq, new PopEvent(rootCrumb.getController())); + fireEvent(ureq, new PopEvent(rootCrumb.getController(), false)); } } diff --git a/src/main/java/org/olat/core/gui/components/stack/PopEvent.java b/src/main/java/org/olat/core/gui/components/stack/PopEvent.java index e72b92d8208c9e205fe13d8e85f4ff38fd67b687..6d1769b584a221cbe21be27e8b44d68ce06219fd 100644 --- a/src/main/java/org/olat/core/gui/components/stack/PopEvent.java +++ b/src/main/java/org/olat/core/gui/components/stack/PopEvent.java @@ -30,21 +30,28 @@ public class PopEvent extends Event { private static final long serialVersionUID = -8478820879485545321L; + private final boolean close; private final Object uobject; private final Controller controller; - public PopEvent(Controller controller, Object uobject) { + public PopEvent(Controller controller, Object uobject, boolean close) { super("pop"); + this.close = close; this.uobject = uobject; this.controller = controller; } - public PopEvent(Object uobject) { + public PopEvent(Object uobject, boolean close) { super("pop"); + this.close = close; this.uobject = uobject; this.controller = null; } + public boolean isClose() { + return close; + } + public Object getUserObject() { return uobject; } diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java index bac8ea917aae1c5efbc3aec0d2137b57fe2ca965..044a461c5f2861c81548a6677d3d8c48a2fd1e3c 100644 --- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java +++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java @@ -160,7 +160,9 @@ public class AssessmentToolController extends MainLayoutBasicController implemen } else if(stackPanel == source) { if(event instanceof PopEvent) { PopEvent pe = (PopEvent)event; - if(pe.getController() == courseTreeCtrl) { + if(pe.isClose()) { + stackPanel.popUpToRootController(ureq); + } else if(pe.getController() == courseTreeCtrl) { removeAsListenerAndDispose(courseTreeCtrl); courseTreeCtrl = null; segmentButtonsCmp.setSelectedButton(overviewLink);