private void registerOwnerListener() { assert listenOnSupplier != null; listenOnComponent = listenOnSupplier.get(); if (listenOnComponent == null) { throw new IllegalStateException( String.format("Could register shortcut listener for %s. " + "%s<%s> supplied a null value.", this.toString(), SerializableSupplier.class.getSimpleName(), Component.class.getSimpleName())); } if (!(listenOnComponent instanceof UI)) { listenOnAttachListenerRegistration = new CompoundRegistration(); listenOnAttachListenerRegistration.addRegistration( listenOnComponent.addAttachListener( attachEvent -> updateHandlerListenerRegistration())); listenOnAttachListenerRegistration.addRegistration( listenOnComponent.addDetachListener( detachEvent -> removeListenerRegistration())); } // either the scope is an active UI, or the component is attached to an // active UI - in either case, we want to update dom registration if (listenOnComponent.getUI().isPresent()) { updateHandlerListenerRegistration(); } }
private void updateHandlerListenerRegistration() { assert listenOnComponent != null; if (shortcutListenerRegistration == null) { if (listenOnComponent.getUI().isPresent()) { shortcutListenerRegistration = new CompoundRegistration(); Registration keydownRegistration = ComponentUtil.addListener( listenOnComponent, KeyDownEvent.class, e -> { if (lifecycleOwner.isVisible()) { invokeShortcutEventListener(); } }, domRegistration -> { shortcutListenerRegistration.addRegistration( domRegistration); configureHandlerListenerRegistration(); }); shortcutListenerRegistration.addRegistration( keydownRegistration); } } else { configureHandlerListenerRegistration(); } }
private void registerLifecycleOwner(Component owner) { assert owner != null; lifecycleOwner = owner; // since we are attached, UI should be available Registration attachRegistration = owner.addAttachListener(e -> queueBeforeExecutionCallback()); // remove shortcut listener when detached Registration detachRegistration = owner.addDetachListener(e -> removeListenerRegistration()); lifecycleRegistration = new CompoundRegistration(attachRegistration, detachRegistration); }