Title: [733] trunk/core/src/java/org/jbehave/core/threaded: [EK] Proper focus requesting when typing; using the QueueingAdapter for listening to typed event.
Revision
733
Author
sirenian
Date
2007-05-24 12:25:43 -0500 (Thu, 24 May 2007)

Log Message

[EK] Proper focus requesting when typing; using the QueueingAdapter for listening to typed event.

Modified Paths

Diff

Modified: trunk/core/src/java/org/jbehave/core/threaded/QueuedObjectHolder.java (732 => 733)

--- trunk/core/src/java/org/jbehave/core/threaded/QueuedObjectHolder.java	2007-05-24 17:14:38 UTC (rev 732)
+++ trunk/core/src/java/org/jbehave/core/threaded/QueuedObjectHolder.java	2007-05-24 17:25:43 UTC (rev 733)
@@ -53,4 +53,10 @@
         return object;
     }
 
+    public void clear() {
+        synchronized(waitingPlace) {
+            object = null;
+        }
+    }
+
 }

Modified: trunk/extensions/swing/src/java/org/jbehave/threaded/swing/CharacterTyper.java (732 => 733)

--- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/CharacterTyper.java	2007-05-24 17:14:38 UTC (rev 732)
+++ trunk/extensions/swing/src/java/org/jbehave/threaded/swing/CharacterTyper.java	2007-05-24 17:25:43 UTC (rev 733)
@@ -6,14 +6,12 @@
 import java.awt.EventQueue;
 import java.awt.Toolkit;
 import java.awt.Window;
-import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
 
 import javax.swing.JComponent;
 import javax.swing.JFrame;
 
-import org.jbehave.core.exception.PendingException;
-import org.jbehave.core.threaded.QueuedObjectHolder;
 import org.jbehave.core.threaded.TimeoutException;
 
 /**
@@ -21,15 +19,15 @@
  */
 class CharacterTyper {
 
-    private static final String TEXT_TYPING_UNSUPPORTED = "Text typing is not supported for your Swing library.";
-    
     private EventQueue sysQueue;
     private Idler idler;
+    private Focuser focuser;
 
 
     CharacterTyper() {
         sysQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
         idler = new Idler();
+        focuser = new Focuser();
     }
     
     public void typeIntoComponent(Component component, String text) {
@@ -40,7 +38,7 @@
                 queuer.waitForEvent();
             }
         } finally {
-            queuer.removeSelf();
+            queuer.removeSelfFromComponent();
         }
     }
     
@@ -55,9 +53,11 @@
             Container contentPane = ((JFrame)window).getContentPane();
             if (contentPane instanceof JComponent) {
                 queuer = new QueueingKeyAdapter(contentPane);
+                focuser.requestFocusOn(contentPane);
             }
         } else {
             queuer = new QueueingKeyAdapter(window.getFocusOwner());
+            focuser.requestFocusOn(window.getFocusOwner());
         }
         
         postKeyEvent(window, key);
@@ -65,7 +65,7 @@
         try {
             queuer.waitForEvent();
         } finally {
-            queuer.removeSelf();
+            queuer.removeSelfFromComponent();
         }
     }
 
@@ -85,29 +85,30 @@
                 c);
     }
         
-    private class QueueingKeyAdapter extends KeyAdapter {
-        private QueuedObjectHolder holder = new QueuedObjectHolder();
-        private final Component component;
+    private class QueueingKeyAdapter extends QueueingAdapter implements KeyListener {
         
         public QueueingKeyAdapter(Component component) {
-            this.component = component;
-            component.requestFocus();
-            component.addKeyListener(this);
+            super(component, "KeyEvent");
         }
+        
         public void keyTyped(KeyEvent e) {
-            holder.set(e);
+            eventOccurred();
         }
-        public void waitForEvent() {
-            try {
-                holder.get(1000);
-            } catch (TimeoutException e) {
-                throw new PendingException(TEXT_TYPING_UNSUPPORTED);
-            }
-            idler.waitForIdle();
+        
+        protected void addSelfToComponent() {
+            component.addKeyListener(this);
         }
-        
-        public void removeSelf() {
+        protected void removeSelfFromComponent() {
             component.removeKeyListener(this);
         }
+        
+        public void keyPressed(KeyEvent e) {
+            // TODO Auto-generated method stub
+            
+        }
+        public void keyReleased(KeyEvent e) {
+            // TODO Auto-generated method stub
+            
+        }
     }       
 }

Modified: trunk/extensions/swing/src/java/org/jbehave/threaded/swing/QueueingAdapter.java (732 => 733)

--- trunk/extensions/swing/src/java/org/jbehave/threaded/swing/QueueingAdapter.java	2007-05-24 17:14:38 UTC (rev 732)
+++ trunk/extensions/swing/src/java/org/jbehave/threaded/swing/QueueingAdapter.java	2007-05-24 17:25:43 UTC (rev 733)
@@ -24,6 +24,7 @@
         } catch (TimeoutException e) {
             throw new RuntimeException("Expected " + eventType + " on component " + component.getName() + " was not received");
         }
+        holder.clear();
         idler.waitForIdle();
     }
 


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to