From c3c3ef4bbcef6db826b602c5f313c827979b9d16 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Tue, 13 Nov 2018 14:14:03 +0100
Subject: [PATCH] OO-3731: prevent activation loop to disposed the survey
 controller

---
 .../stack/BreadcrumbedStackedPanel.java           |  4 ++++
 .../modules/quality/ui/QualityHomeController.java | 15 +++++++++------
 2 files changed, 13 insertions(+), 6 deletions(-)

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 1f44ead7a7e..d7883a94c7c 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
@@ -277,6 +277,10 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre
 		}
 		return controller;
 	}
+	
+	public boolean hasController(Controller controller) {
+		return getIndex(controller) >= 0;
+	}
 
 	@Override
 	public void popContent() {
diff --git a/src/main/java/org/olat/modules/quality/ui/QualityHomeController.java b/src/main/java/org/olat/modules/quality/ui/QualityHomeController.java
index d32d3c4c848..99b53040933 100644
--- a/src/main/java/org/olat/modules/quality/ui/QualityHomeController.java
+++ b/src/main/java/org/olat/modules/quality/ui/QualityHomeController.java
@@ -221,12 +221,15 @@ public class QualityHomeController extends BasicController implements Activateab
 	}
 
 	private void doOpenUserParticipations(UserRequest ureq) {
-		stackPanel.popUpToRootController(ureq);
-		OLATResourceable ores = OresHelper.createOLATResourceableInstance(ORES_MY_TYPE, 0l);
-		WindowControl bwControl = addToHistory(ureq, ores, null);
-		executorParticipationListCtrl = new ExecutorParticipationsListController(ureq, bwControl, secCallback);
-		listenTo(executorParticipationListCtrl);
-		stackPanel.pushController(translate("breadcrumb.executor.participations"), executorParticipationListCtrl);
+		// reuse existing list controller allow full screen mode et prevent unwanted disposed controllers
+		if(!stackPanel.hasController(executorParticipationListCtrl)) {
+			stackPanel.popUpToRootController(ureq);
+			OLATResourceable ores = OresHelper.createOLATResourceableInstance(ORES_MY_TYPE, 0l);
+			WindowControl bwControl = addToHistory(ureq, ores, null);
+			executorParticipationListCtrl = new ExecutorParticipationsListController(ureq, bwControl, secCallback);
+			listenTo(executorParticipationListCtrl);
+			stackPanel.pushController(translate("breadcrumb.executor.participations"), executorParticipationListCtrl);
+		}
 	}
 	
 	private void doOpenSuggestion(UserRequest ureq) {
-- 
GitLab