<AWT Dev> Problem with modal Dialog
Artem Ananiev
Artem.Ananiev at Sun.COM
Mon Feb 16 08:15:52 PST 2009
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 particula 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);
}
Thanks,
Artem
> /Roman
>
More information about the awt-dev
mailing list