PatchSet 7450 
Date: 2006/11/19 21:32:12
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
kaffe xlib-awt fixlets

        *
        libraries/javalib/awt-implementations/kaffe/java/awt/Component.java
        (dispatchEventImpl): Imported GNU Classpath's logic. Use event
        dispatcher to process the event.

        *
        
libraries/javalib/awt-implementations/kaffe/java/awt/EventDispatchThread.java:
        Large code importation from GNU Classpath. First try to dispatch
        to FocusManager and then dispatch explicitly to the destination.

        *
        libraries/javalib/awt-implementations/kaffe/java/awt/KeyEvt.java
        (dispatch) Dispatch the synthetic event first through the FocusManager 
and
        then directly to the destination.

        *
        libraries/javalib/awt-implementations/kaffe/java/awt/MenuComponent.java:
        (dispatchEventImpl): New internal method. It calls directly
        AWTEvent.dispatch()
        (dispatchEvent): Delegate to dispatchEventImpl.

Members: 
        ChangeLog:1.4950->1.4951 
        
libraries/javalib/awt-implementations/kaffe/java/awt/Component.java:1.19->1.20 
        
libraries/javalib/awt-implementations/kaffe/java/awt/EventDispatchThread.java:1.1->1.2
 
        
libraries/javalib/awt-implementations/kaffe/java/awt/KeyEvt.java:1.1->1.2 
        
libraries/javalib/awt-implementations/kaffe/java/awt/MenuComponent.java:1.2->1.3
 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4950 kaffe/ChangeLog:1.4951
--- kaffe/ChangeLog:1.4950      Sun Nov 19 18:31:38 2006
+++ kaffe/ChangeLog     Sun Nov 19 21:32:12 2006
@@ -1,3 +1,27 @@
+2006-11-19  Guilhem Lavaux  <[EMAIL PROTECTED]>,
+       Riccardo Mottola <[EMAIL PROTECTED]>
+
+       *
+       libraries/javalib/awt-implementations/kaffe/java/awt/Component.java
+       (dispatchEventImpl): Imported GNU Classpath's logic. Use event
+       dispatcher to process the event.
+
+       *
+       
libraries/javalib/awt-implementations/kaffe/java/awt/EventDispatchThread.java:
+       Large code importation from GNU Classpath. First try to dispatch 
+       to FocusManager and then dispatch explicitly to the destination.
+       
+       *
+       libraries/javalib/awt-implementations/kaffe/java/awt/KeyEvt.java
+       (dispatch) Dispatch the synthetic event first through the FocusManager 
and
+       then directly to the destination.
+       
+       *
+       libraries/javalib/awt-implementations/kaffe/java/awt/MenuComponent.java:
+       (dispatchEventImpl): New internal method. It calls directly
+       AWTEvent.dispatch()
+       (dispatchEvent): Delegate to dispatchEventImpl.
+
 2006-11-19  Dalibor Topic  <[EMAIL PROTECTED]>
 
        * kaffe/kaffevm/boehm-gc/gc-refs.c (KaffeGC_rmRef),
Index: kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java
diff -u 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java:1.19 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java:1.20
--- 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java:1.19  
    Fri Nov 10 17:20:05 2006
+++ kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java   
Sun Nov 19 21:32:12 2006
@@ -1221,45 +1221,26 @@
 {
     // This boolean tells us not to process focus events when the focus
     // opposite component is the same as the focus component.
-    boolean ignoreFocus =
-    (e instanceof FocusEvent &&
-     ((FocusEvent)e).getComponent() == ((FocusEvent)e).getOppositeComponent());
-
-    if (eventTypeEnabled (e.id))
-    {
-        if (e.id != PaintEvent.PAINT && e.id != PaintEvent.UPDATE
-            && !ignoreFocus)
-            processEvent(e);
-
-        // the trick we use to communicate between dispatch and redispatch
-        // is to have KeyboardFocusManager.redispatch synchronize on the
-        // object itself. we then do not redispatch to KeyboardFocusManager
-        // if we are already holding the lock.
-        if (! Thread.holdsLock(e))
-        {
-            switch (e.id)
-            {
-                case WindowEvent.WINDOW_GAINED_FOCUS:
-                case WindowEvent.WINDOW_LOST_FOCUS:
-                case KeyEvent.KEY_PRESSED:
-                case KeyEvent.KEY_RELEASED:
-                case KeyEvent.KEY_TYPED:
-                case FocusEvent.FOCUS_GAINED:
-                case FocusEvent.FOCUS_LOST:
-                    if (KeyboardFocusManager
-                        .getCurrentKeyboardFocusManager()
-                        .dispatchEvent(e))
-                        return;
-                case MouseEvent.MOUSE_PRESSED:
-                    if (isLightweight() && !e.isConsumed())
-                        requestFocus();
-                    break;
-            }
-        }
-    }
-
-    // here we differ from classpath since we have no peers
-    e.dispatch();
+    // Retarget focus events before dispatching it to the KeyboardFocusManager
+    // in order to handle lightweight components properly.
+    boolean dispatched = false;
+    if (! e.isFocusManagerEvent)
+      {
+       e = KeyboardFocusManager.retargetFocusEvent(e);
+       dispatched = KeyboardFocusManager.getCurrentKeyboardFocusManager()
+           .dispatchEvent(e);
+      }
+       
+    if (! dispatched)
+      {
+       if (eventTypeEnabled (e.id))
+           {
+               if (e.id != PaintEvent.PAINT && e.id != PaintEvent.UPDATE)
+               processEvent(e);
+           }
+       // here we differ from classpath since we have no peers
+       e.dispatch();
+      }
 }
 
 
@@ -2950,7 +2931,7 @@
             Window toplevel = (Window) parent;
 // we can't check for that or  choice windows won't get focus
 //            if (toplevel.isFocusableWindow ())
-//            {
+            {
                 //if (peer != null && !isLightweight()) { // we don't have a 
peer
                 if (!isLightweight()) {
                     // This call will cause a FOCUS_GAINED event to be
@@ -2985,9 +2966,9 @@
                             eq.postEvent (new FocusEvent(this, 
FocusEvent.FOCUS_GAINED, false));
                     }
                 }
-            //}
-            //else
-            //    pendingFocusRequest = new FocusEvent(this, 
FocusEvent.FOCUS_GAINED);
+           }
+           //      else
+           //          pendingFocusRequest = new FocusEvent(this, 
FocusEvent.FOCUS_GAINED);
     }
     }
 }
Index: 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/EventDispatchThread.java
diff -u 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/EventDispatchThread.java:1.1
 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/EventDispatchThread.java:1.2
--- 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/EventDispatchThread.java:1.1
     Thu Jul 22 19:19:31 2004
+++ 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/EventDispatchThread.java
 Sun Nov 19 21:32:12 2006
@@ -8,20 +8,45 @@
  * See the file "license.terms" for information on usage and redistribution
  * of this file.
  * @author P.C.Mehlitz
+ * @author Bryce McKinlay
+ * @author Riccardo Mottola
  */
 class EventDispatchThread
   extends Thread
 {
-       boolean stop;
-       EventQueue queue;
-
-EventDispatchThread ( EventQueue queue ) {
-       super( "AWT-EventQueue-0" ); // some apps depend on this JDK thread name
-
-       this.queue = queue;
-
-       setPriority( Thread.NORM_PRIORITY + 1);
-}
+  /**
+   * The default priority when no property has been set.
+   */
+  private static final int DEFAULT_PRIORITY = NORM_PRIORITY + 1;
+
+  private static int dispatchThreadNum;
+
+  private EventQueue queue;
+  
+  boolean stop;
+
+  EventDispatchThread(EventQueue queue)
+  {
+    super();
+    setName("AWT-EventQueue-" + ++dispatchThreadNum);
+    this.queue = queue;
+
+    int priority = DEFAULT_PRIORITY;
+    try
+      {
+        String priorityString =
+          System.getProperty("gnu.awt.dispatchthread.priority");
+        if (priorityString != null)
+          {
+            priority = Integer.parseInt(priorityString); 
+          }      
+      }
+    catch (NumberFormatException ex)
+      {
+        // Ignore and use default.
+      }
+    setPriority(priority);
+  }
 
 public void run () {
        AWTEvent e;
@@ -29,26 +54,37 @@
        while ( !stop ) {
                // the inner loop protects us from being disrupted by
                // an exception (we should continue to dispatch as long as 
possible)
-               try {
-                       while ( !stop ) {                       
-                               if ( (e = queue.getNextEvent()) != null ){
-                                       e.dispatch();
-                               }
-                       }
-               }
-               catch ( SecurityException sx ) {
-                       if ( "system_exit".equals( sx.getMessage()) ) {
-                               // this is from our KaffeServer 
SecurityManager, ignore
-                       }
-                       else {
-                               Toolkit.tlkBeep();
-                               sx.printStackTrace( System.err);
-                       }
-               }
-               catch ( Throwable x ) {
-                       Toolkit.tlkBeep();
-                       x.printStackTrace( System.err);
-               }
+        try
+       {
+         AWTEvent evt = queue.getNextEvent();
+
+          KeyboardFocusManager manager;
+          manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+
+          // Try to dispatch this event to the current keyboard focus
+          // manager.  It will dispatch all FocusEvents, all
+          // WindowEvents related to focus, and all KeyEvents,
+          // returning true.  Otherwise, it returns false and we
+          // dispatch the event normally.
+          if (!manager.dispatchEvent (evt))
+           queue.dispatchEvent(evt);
+       }
+        catch (ThreadDeath death)
+        {
+          // If someone wants to kill us, let them.
+          return;
+        }
+       catch (InterruptedException ie)
+       {
+         // We are interrupted when we should finish executing
+         return;
+       }
+       catch (Throwable x)
+       {
+         System.err.println("Exception during event dispatch:");
+         x.printStackTrace(System.err);
+       }
+
        }
 }
 
@@ -70,31 +106,39 @@
                while ( !stop ) {
                        // the inner loop protects us from being disrupted by
                        // an exception (we should continue to dispatch as long 
as possible)
-                       try {
-                               while ( !stop ) {                       
-                                       if ( (e = queue.getNextEvent()) != null 
){
-                                               e.dispatch();
-                                               // this is better than to rely 
on a WINDOW_CLOSED, since we can
-                                               // save postEvents AND make 
dispatching faster
-                                               if ( (modalWindow.flags & 
Component.IS_ADD_NOTIFIED) == 0 ){
-                                                       return;
-                                               }
-                                       }
-                               }
-                       }
-                       catch ( SecurityException sx ) {
-                               if ( "system_exit".equals( sx.getMessage()) ) {
-                                       // this is from our KaffeServer 
SecurityManager, ignore
-                               }
-                               else {
-                                       sx.printStackTrace( System.err);
-                               }
-                       }
-                       catch ( Throwable x ) {
-                               x.printStackTrace( System.err);
-                       }
-               }
+                               try
+       {
+         AWTEvent evt = queue.getNextEvent();
+
+          KeyboardFocusManager manager;
+          manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+
+          // Try to dispatch this event to the current keyboard focus
+          // manager.  It will dispatch all FocusEvents, all
+          // WindowEvents related to focus, and all KeyEvents,
+          // returning true.  Otherwise, it returns false and we
+          // dispatch the event normally.
+          if (!manager.dispatchEvent (evt))
+           queue.dispatchEvent(evt);
        }
+        catch (ThreadDeath death)
+        {
+          // If someone wants to kill us, let them.
+          return;
+        }
+       catch (InterruptedException ie)
+       {
+         // We are interrupted when we should finish executing
+         return;
+       }
+       catch (Throwable x)
+       {
+         System.err.println("Exception during event dispatch:");
+         x.printStackTrace(System.err);
+       }
+
+}
+}
 }
 
 public void stopDispatching () {
Index: kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/KeyEvt.java
diff -u 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/KeyEvt.java:1.1 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/KeyEvt.java:1.2
--- kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/KeyEvt.java:1.1  
Thu Jul 22 19:19:32 2004
+++ kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/KeyEvt.java      
Sun Nov 19 21:32:12 2006
@@ -39,7 +39,9 @@
                                if ( keyChar != 0 ) {         // printable key
                                        if ( AWTEvent.keyTgt != null ) {     // 
maybe a fast finger pulled the keyTgt under our feet
                                                KeyEvt typedEvt = 
getEvent((Component)source, KEY_TYPED, 0, keyChar, modifiers);
-                                               
AWTEvent.keyTgt.process(typedEvt);
+                                               
+                                               if 
(!KeyboardFocusManager.getCurrentKeyboardFocusManager 
().dispatchEvent(typedEvt))
+                                                 
AWTEvent.keyTgt.process(typedEvt);
                                        }
                                }
                        }
Index: 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/MenuComponent.java
diff -u 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/MenuComponent.java:1.2
 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/MenuComponent.java:1.3
--- 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/MenuComponent.java:1.2
   Fri Nov 10 15:31:26 2006
+++ 
kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/MenuComponent.java   
    Sun Nov 19 21:32:12 2006
@@ -29,6 +29,11 @@
 }
 
 final public void dispatchEvent( AWTEvent e) {
+       dispatchEventImpl(e);
+}
+
+void dispatchEventImpl (AWTEvent e) {
+       e.dispatch();
 }
 
 ClassProperties getClassProperties () {

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to