@Override protected void registerSynchronizers(SynchronizersConfiguration conf) { super.registerSynchronizers(conf); conf.add(Synchronizers.forPropsOneWay(Properties.TRUE, myTargetView.focusable())); conf.add( Synchronizers.<Cell, View>forSingleRole( this, Properties.<Cell>constant(getSource().root), new WritableProperty<View>() { @Override public void set(View value) { myTargetView.children().clear(); if (value != null) { myTargetView.children().add(value); } } }, new MapperFactory<Cell, View>() { @Override public Mapper<? extends Cell, ? extends View> createMapper(Cell source) { return CellMappers.create(source, myContext); } })); conf.add( Synchronizers.forRegistration( new Supplier<Registration>() { @Override public Registration get() { ViewTrait redispatchTrait = createRedistpatchTrait(); myContext.containerFocused().set(myTargetView.focused().get()); return new CompositeRegistration( getSource().addListener(createCellContainerListener()), getSource() .focusedCell .addHandler( new EventHandler<PropertyChangeEvent<Cell>>() { @Override public void onEvent(PropertyChangeEvent<Cell> event) { if (event.getNewValue() != null) { myTargetView.container().focusedView().set(myTargetView); } } }), myTargetView .focused() .addHandler( new EventHandler<PropertyChangeEvent<Boolean>>() { @Override public void onEvent(PropertyChangeEvent<Boolean> event) { myContext.containerFocused().set(event.getNewValue()); for (TextCell cell : myWithCaret) { BaseCellMapper<?, ?> mapper = (BaseCellMapper<?, ?>) rootMapper().getDescendantMapper(cell); mapper.refreshProperties(); } for (Cell cell : myHighlighted) { BaseCellMapper<?, ?> mapper = (BaseCellMapper<?, ?>) rootMapper().getDescendantMapper(cell); mapper.refreshProperties(); } } }), getTarget().addTrait(redispatchTrait), myPopupView.addTrait(redispatchTrait)); } })); }