quarks
quarks

Reputation: 35276

Handle Window close event

I'm trying to handle the event when the close button of a Window is clicked:

// View Code
@Override
public void attachWindowListener(WindowListener listener) {
    window.addWindowListener(listener);
}

// Presenter code
    view.attachWindowListener(new WindowListener(){
          public void windowHide(WindowEvent we) {
              GWT.log("Window Event - Processing fields");
              processFields();
          }         
    });

However, the windowHide function seems to be not executed since I can't see the log I placed there.

How to properly handle that event?

Upvotes: 0

Views: 4332

Answers (3)

quarks
quarks

Reputation: 35276

This worked:

    window.addListener(Events.Hide, new Listener<ComponentEvent>() {
        @Override
        public void handleEvent(ComponentEvent be) {
          // Do stuff
        }
    });

Upvotes: 0

Bionic_Geek
Bionic_Geek

Reputation: 536

Based on the information provided I would guess that either a.) the events you think are firing do not fire for the Window component (even if it seems like they should) or b.) the events are firing but in a different order than you expect.

For example, it's possible that a BrowserEvent or some other event is firing first as the window is being closed and the Window object's WindowEvent never fires. According to the API docs for GXT 2.x, the WindowEvent will fire on hide and deactivate but it does not specify that it fires on close. The GXT 3.0.x API doc is less clear on this point but I would assume the same behavior. Unfortunately Sencha does not provide good documentation on what events fire for a given component and in what order.

With that said, I have had some luck working through similar issues to this by using a debug class which outputs all the events on a component to which it is attached. This may shed some light on which events are firing and their order of execution, and you may find an optimal event to which you can attach your processFields() method.

For a good example of a debugger class, see this answer from a related post: https://stackoverflow.com/a/2891746/460638. It also includes an example of how to attach the debugger to your component.

API Doc for Window, GXT 2.x: http://dev.sencha.com/deploy/gxt-2.2.5/docs/api/com/extjs/gxt/ui/client/widget/Window.html

API Doc for Window, GXT 3.0.x: http://dev.sencha.com/deploy/gxt-3.0.0/javadoc/gxt/com/sencha/gxt/widget/core/client/Window.html

Upvotes: 0

Anders R. Bystrup
Anders R. Bystrup

Reputation: 16050

How about

Window.addCloseHandler( 
    new CloseHandler<Window>() 
    {
        public void onClose( CloseEvent<Window> windowCloseEvent ) 
        {
            // Do your worst here
        }
    } );

I usually put this in onModuleLoad() in my EntryPoint class.

Cheers,

Upvotes: 2

Related Questions