В текущее окно рабочего стола был добавлен PostSelectionListener:
getWorkbenchWindow().getSelectionService().addPostSelectionListener(listener);
Тем не менее, изменения выбора в GraphicalViewer
которые отображаются в GraphicalEditor
, не распознаются вышеупомянутым слушателем, даже если графический просмотрщик был установлен как сайт графического редактора SelectionProvider
:
getSite().setSelectionProvider(getGraphicalViewer());
Я добавил ISelectionChangedListener
непосредственно в графический просмотрщик, и его метод selectionChanged
вызывается каждый раз, когда выбор изменяется (как и предполагалось).
Кто-нибудь имеет представление о том, что может вызвать эту проблему?
Также,
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection()
всегда возвращает правильный выбор, даже если изменение выбора не было зарегистрировано первым выбранным прослушивателем.
Я, наконец, нашел решение своей проблемы, хотя я не знаю, почему это решение. Класс GraphicalEditor
устанавливает средство просмотра в качестве поставщика выбора сайта в createPartControl(Composite)
. Я перезаписал этот метод, чтобы настроить просмотрщик самостоятельно, но я не установил здесь поставщика выбора, но позже в другом методе. Изменение этого как-то решило проблему.