Hi,

I need to support a single focus/blur of a group of widgets.
Please some advise on this?

Examples:
1) Date (Birtyday) field that consists of 3 small text boxes, that can
be filled in by the user.
2) Date picker field: two date pickers to select a period.

It's important that 1) and 2) form one widget with a single focus/blur
event.  This is needed for further actions that depend on these
events.
For example: Form validation that occurs when a blur occurs. You don't
want to do a blur validation when the user is still filling in the
form and selects the other date field in 1) or the end date of the
date picker in 2). The blur will do validation and shows the
validation result. However, if the user is still busy filling in the
widget, you don't want to show some alert box.

Implementation: I solved this with a WidgetGroupFocus object that
contains widgets and will control the focus/blur events. On a blur it
will hold the blur event and  run a DeferredCommand to see if a focus
event occured on one of the containing widgets in the meantime. If
yes, the blur event is ignored, other wise the blur is distributed to
the subscribers.

This has two major disadvantages:
1) The global blur event will always be informed after the focus
event. As described above the blur event will be hold, to determine if
a focus event occurred on a widget that is outside the widget group.
In case this happens, the blur will be distributed after the focus
event (normally it's the other way around). However, I can live with
this...

2) The hold event can't be re-used. The hold blur event can't be
distributed as the same event after it has been hold as it might give
problems when the event is further processed, as GWT is already
processing other events. So GWT will throw exceptions like the ones
below when doing so (like expected).
In the past with the older event model this wasn't such an issue as
the listener didn't receive an event directly.
----
com.google.gwt.core.client.JavaScriptException: (Error): Member not
found.
 number: -2147352573
 description: Member not found.
at com.google.gwt.dom.client.DOMImpl.eventGetType(Native Method)
---

Bottom line: the solution isn't so elegant so I am looking for a
better way of solving this. This might not be so difficult if it's
possible to be able to look on the event queue when receiving a blur
event. If the queue contains the upcoming focus event that caused the
blur event, the blur could be ignored.... (in my case)
But I have no idea how to do this, or if this is possible.
I played with the NativePreviewEvent to see if I could detect the
upcoming focus event that follows the blur event, but that has no
luck...

Any idea's?


--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to