void (Project project, @NotNull Dialog dialog) { ThreadingAssertions.assertEventDispatchThread(); if (LOG.isDebugEnabled()) { LOG.debug("leaveModal:" + dialog.getName() + " ; for project: " + project.getName()); } ourModalityStateMulticaster.getMulticaster().beforeModalityStateChanged(false, dialog); int index = ourModalEntities.indexOf(dialog); if (index != -1) { removeModality(dialog, index); } else if (project != null) { List<Dialog> dialogs = projectToModalEntities.get(project); int perProjectIndex = dialogs.indexOf(dialog); LOG.assertTrue(perProjectIndex >= 0); dialogs.remove(perProjectIndex); Stack<ModalityState> states = projectToModalEntitiesStack.get(project); states.remove(perProjectIndex + 1); for (int i = 1; i < states.size(); i++) { ((ModalityStateEx)states.get(i)).removeModality(dialog); } } reincludeSkippedItemsAndRequestFlush(); }