Активация предыдущего окна после закрытия дочернего

Если из данного окна открыть другое окно c OpenMode.NEW_TAB, то после его закрытия становится активным следующее (если таковое имеется) из списка открытых табов. Как сделать, чтоб после закрытия данного окна активировалось окно, в котором его вызвали ?

1 симпатия

Здравствуйте, Юрий

Для начала, нужно получить доступ к tabbed контейнеру:

Screen rootScreen = AppUI.getCurrent().getTopLevelWindowNN()
        .getFrameOwner();

if (!(rootScreen instanceof Window.HasWorkArea)) {
    return;
}

Window.HasWorkArea hasWorkAreaRoot = (Window.HasWorkArea) rootScreen;
WebAppWorkArea workArea = (WebAppWorkArea) hasWorkAreaRoot.getWorkArea();

TabSheetBehaviour tabSheet = workArea.getTabbedWindowContainer()
        .getTabSheetBehaviour();

После этого подписаться на закрытие окна с помощью Screen#addAfterCloseListener и воспользоваться API tabbed контейнера:

screen.addAfterCloseListener(e -> {
    // choose required tab
    tabSheet.setSelectedTab(...);
});
1 симпатия

Коллега подсказал более изящное решение:

screen.addAfterCloseListener(e -> {
    screens.showFromNavigation(this);
});

Это не совсем активация, более того, в определённой ситуации может открыться дубликат

а можно по подробнее про определенную ситуацию ?

Если экран поддерживает множественное открытие (см. Screen#isMultipleOpen), то дубликат будет всегда появляться.

В противном случае дубликат будет открыт в зависимости от результата вызова Screen#isSameScreen.

1 симпатия