Dialog.java (show): Enable blocking for all modal dialogs and run secondary dispatch thread to...
* java/awt/Dialog.java (show): Enable blocking for all modal dialogs and run secondary dispatch thread to process event queue while this thread is blocked. From-SVN: r75788
This commit is contained in:
parent
bc298aa711
commit
cc11dca961
2 changed files with 28 additions and 9 deletions
|
@ -1,3 +1,9 @@
|
|||
2004-01-12 Fernando Nasser <fnasser@redhat.com>
|
||||
|
||||
* java/awt/Dialog.java (show): Enable blocking for all modal dialogs
|
||||
and run secondary dispatch thread to process event queue while this
|
||||
thread is blocked.
|
||||
|
||||
2004-01-12 Graydon Hoare <graydon@redhat.com>
|
||||
|
||||
* gnu/java/awt/gtk/GdkGraphics2D.java
|
||||
|
|
|
@ -88,6 +88,12 @@ private boolean undecorated = false;
|
|||
*/
|
||||
private boolean blocked = false;
|
||||
|
||||
/**
|
||||
* Secondary EventQueue to handle AWT events while
|
||||
* we are blocked for modality in show
|
||||
*/
|
||||
private EventQueue eq2 = null;
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
|
@ -394,20 +400,22 @@ public synchronized void
|
|||
show()
|
||||
{
|
||||
super.show();
|
||||
|
||||
if (isModal())
|
||||
{
|
||||
// If already shown (and blocked) just return
|
||||
if (blocked)
|
||||
return;
|
||||
|
||||
/* FIXME: Currently this thread may block forever if it called from
|
||||
the event dispatch thread, so we only do this for FileDialog which
|
||||
only depends on a signal which is delivered in the Gtk thread.
|
||||
Remove this test when we add code to start another event
|
||||
dispatch thread. */
|
||||
if ((Thread.currentThread () instanceof EventDispatchThread) &&
|
||||
!(this instanceof FileDialog))
|
||||
return;
|
||||
/* If show is called in the dispatch thread for a modal dialog it will
|
||||
block so we must run another thread so the events keep being
|
||||
dispatched.*/
|
||||
if (EventQueue.isDispatchThread ())
|
||||
{
|
||||
EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
|
||||
eq2 = new EventQueue ();
|
||||
eq.push (eq2);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -418,8 +426,13 @@ show()
|
|||
catch (InterruptedException e)
|
||||
{
|
||||
blocked = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (eq2 != null)
|
||||
{
|
||||
eq2.pop ();
|
||||
eq2 = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue