On Friday, September 16, 2016 at 2:54:20 PM UTC+2, Pavel Kakolin wrote:
>
> Imagine an @JsType(isNative = true) EventTarget (basically Element) with 
> @JsMethod addEventListener(final String type, final EventListener<?> 
> listener).
>
> We have a "mousedown" event listener and inside that listener we 
> call 
> com.google.gwt.core.client.Scheduler#scheduleFinally(com.google.gwt.core.client.Scheduler.ScheduledCommand).
>
> The problem is the ScheduledCommand is never executed after when mousedown 
> event is fired. Scheduler.scheduleDeferred works as expected.
>

Are you sure it's *never* executed? (vs. executed in the "finally" of 
another, later "event"?)
 

> Is it correct behaviour?
>

Actually, yes.
The thing is that JsInterop is "close to the metal", and won't wrap your 
JsFunction into $entry() (which takes care of scheduleEntry and 
scheduleFinally commands, and GWT.UncaughtExceptionHandler)
I *think* it's by-design.
See 
https://gwt-review.googlesource.com/#/q/file:user/src/com/google/gwt/core/client/internal/Entry.java
 
for examples of rewriting GWT internals with JsInterop, that explicitly 
$entry-wrap JsFunctionâ‹…s (that's what's making me say it's by-design)
 

> Is there any right way to scheduleFinally from inside event listeners 
> added to elements using jsinterop?
>

You'd have to somehow wrap your JsFunction into $entry() and actually pass 
the $entry-wrapped function to your addEventListener.

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to