sinkEvents on Composite.

93 views
Skip to first unread message

Javid

unread,
Oct 2, 2006, 12:34:58 PM10/2/06
to Google Web Toolkit
Hi,
Is it possible to catch the click events on a composite widget? I have
a composite widget and I need to catch the click events. For some
reason, the click events are not fired.
Here is my code:

public class MyWidget extends Composite implements SourcesClickEvents {

public MyWidget() {
final DockPanel panel = new DockPanel();
initWidget(panel);
sinkEvents(Event.ONCLICK);
setStyleName("my-widget");
}

public void onBrowserEvent(Event evt) {
switch(DOM.eventGetType(evt)
case: Event.ONCLICK:
clickListeners.firClick(this);
break;
}

}
Thanks for any help,

Javid

Mike

unread,
Oct 2, 2006, 3:06:54 PM10/2/06
to Google Web Toolkit
When I've needed to do that I've added listeners to each of my
contained widgets, then refired the events as if they came from me.

In your case, the DockPanel doesn't source click events, but if you
create a subclass of DockPanel that does, you should be able to get it
done.

public class ClickableDockPanel extends DockPanel implements
SourcesClickEvents {

private ClickListenerCollection listeners = new
ClickListenerCollection();

public ClickableDockPanel() {
sinkEvents(Event.ONCLICK);
}

public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
if (DOM.eventGetType(event) == Event.ONCLICK) {
listeners.fireClick(this);
}
}

public void addClickListener(ClickListener listener) {
listeners.add(listener);
}

public void removeClickListener(ClickListener listener) {
listeners.remove(listener);
}

}

-Mike

claude

unread,
Oct 2, 2006, 5:07:16 PM10/2/06
to Google Web Toolkit
Add DOM.setEventListener to route the clicks to your onBrowserEvent
method.

mP

unread,
Oct 2, 2006, 6:30:21 PM10/2/06
to Google Web Toolkit
I find it easiest to do the DOM.setEventListener( this,
this.getElement() ) in your onAttach or onLoad.

Reply all
Reply to author
Forward
0 new messages