I need to know, when a user switches to another shell, by clicking in it.
I tried shellListener.shellDeactivated() but this event is triggered, when the shell looses focus to it's own controls, means when a Control in the active Shell was clicked.
This is not the intended behaviour, since I need to know, when another Shell was activated, instead of mine.
Any Ideas?
Let's assume you have three shells. A main shell and two shells which can be opened from the main shell.
So the main shell should be notified when another shell gets activated. You can add a listener which waits for a specific event type (in the main shell):
shell.addListener(SWT.Show, new Listener() {
@Override
public void handleEvent(Event e) {
System.out.println("activated: " + e.text);
}
});
The other shells should fire (notify) this event when they got activated. For that you add a shell listener to the other two shells, and fire the event in the method shellActivated() with o.notifyListeners();.
shell.addShellListener(new ShellAdapter() {
@Override
public void shellActivated(ShellEvent e) {
Shell shellSrc = (Shell) e.getSource();
Display display = shellSrc.getDisplay();
Event event = new Event();
event.type = SWT.Show;
event.text = "other shell 1";
Shell[] shells = display.getShells();
for(Shell o : shells) {
o.notifyListeners(SWT.Show, event);
}
}
});
When you activate one of the other two shells the main shell will be notified with the event type SWT.Show.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With