Je viens de découvrir une bien meilleure solution. Cela fonctionne comme ça.
Shell coverup = new Shell(SWT.NO_TRIM) ;
coverup.setBounds(parentComposite.getShell().getBounds());
coverup.moveAbove(Display.getCurrent().getActiveShell());
coverup.setAlpha(13);
coverup.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
popupShell = new Shell(coverup, SWT.NO_TRIM);
coverup.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent mouseEvent)
{
System.out.println("coverup - mouse moves");
coverup.close() ;
}
});
Ce qui est en anglais:
Créer une coquille invisible la même taille que la coquille application/parent.
Couvrir la coque parent avec la coque invisible.
Fixation d'une souris Entrez l'écouteur sur la coque de couverture.
Créer le menu contextuel en tant qu'enfant de la coque de couverture Lorsque la souris entre dans le menu contextuel, activez le camouflage. Cela signifie que, peu importe où la souris se trouve après avoir été dans le popup, elle entre dans le shell coverup - et l'événement coverup mouse enter dispose tout.
Nous ne détectons pas lorsque nous quittons la fenêtre contextuelle - nous détectons lorsque la souris pénètre dans les environs.
Bonus supplémentaire: le réglage de l'arrière-plan du coverup à un gris clair, et un faible Alpha, rend l'application entière grisée subtilement - de sorte que l'utilisateur est conscient est désactivé. Petit gotcha: si le shell contextuel n'est pas entièrement contenu dans l'appwindow, où le shell popup sort de l'appwindow, la souris peut s'échapper sans déclencher le shell coverup.
Autre que cela - cela fonctionne très bien!
Merci, c'était génial, ça a fait l'affaire! Maintenant, une technicité: à proprement parler je joins l'écouteur à la zone de texte à l'intérieur du shell et non le shell car je ne reçois pas d'événements générés pour le shell pour une raison que je ne connais pas. Par conséquent, lorsque je passe à la barre de défilement à droite de la zone de texte, le shell est placé depuis que la souris est sortie de la zone de texte. Comment puis-je attacher l'auditeur à la coquille s'il vous plaît? Merci et salutations, Krt_Malta –
Vous pouvez l'attacher directement au shell, shell est aussi un widget. – pajton