Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SWT - event to reliably know, if shell user has switched to another shell

Tags:

shell

focus

swt

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?

like image 715
Skip Avatar asked Oct 05 '22 23:10

Skip


1 Answers

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.

like image 196
jens-na Avatar answered Oct 10 '22 02:10

jens-na