- 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:
