Hi Artem, On Mon, Feb 16, 2009 at 7:15 PM, Artem Ananiev <[email protected]> wrote: > > Roman Kennke wrote: >> >> Hi Artem, >> >>>>>>> Hrmpf. Seems I cannot. The disclaimer says 'During the initial >>>>>>> rollout >>>>>>> phase, this site will only be accepting and tracking patch >>>>>>> contributions >>>>>>> from developers without push access to the OpenJDK 6 and 7 forests.' >>>>>>> and >>>>>>> since I _have_ push access, I can't file bug reports. Too bad. >>>>>>> >>>>>>> BTW, simply sending this over the EQ is no solution either, because >>>>>>> then >>>>>>> later it will fail to invokeAndWait(). I will think a little more >>>>>>> about >>>>>>> this, or maybe anybody has a quick idea? >>>>>> >>>>>> Just an idea (have not evaluated it carefully): >>>>>> perhaps we should set keepBlockingEDT to false not in >>>>>> hideAndDisposeHandler(), >>>>>> but in WakingRunnable.run() instead. >>>>> >>>>> I'm looking at this problem at the moment. The problem is the instance >>>>> of WakingRunnable is not run on EDT at all - I don't know why. >>>> >>>> I know why. It is because the DisposeAction is run _immediately_, before >>>> the WakingRunnable had a chance. This DisposeAction calls removeNotify(), >>>> which leads to all events on the EQ that are related to the Dialog beeing >>>> discarded. >>> >>> Could you, please, point to the place where all the events are discarded? >>> I don't see any. >> >> In Component.removeNotify(), we call this: >> >> Toolkit.getEventQueue().removeSourceEvents(this, false); > > OK, I see. What a wonderful code... > >> which removes all events related to the component. removeNotify() is >> called from inside the DisposeAction. > > For this particular case it's enough to add some additional check to > hideAndDisposeHandler: > > if (showAppContext != curAppContext) { > // Wake up event dispatch thread on which the dialog was > // initially shown > SunToolkit.postEvent(showAppContext, wakingEvent); > showAppContext = null; > + } else if (EventQueue.isDispatchThread()) { > + waking.run(); > } else { > Toolkit.getEventQueue().postEvent(wakingEvent); > }
this change will fix this particular test, but the same problem may exists even when we call hide() not on EDT, it is just a little bit harder to write test for this ;) What about moving resetting keepBlockingEDT to WakingEvent.run(), or, perhaps, we can simply change target of WakingEvent from a dialog to toolkit. What do you think? Oleg. > > Thanks, > > Artem > >> /Roman >> >
