aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/awt/DefaultKeyboardFocusManager.java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2005-07-16 01:27:14 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-07-16 01:27:14 +0000
commitb0fa81eea9a270f23d6ad67ca7a6d25c18d20da1 (patch)
tree8762d1f992e2f725a6bde1ff966ed6f1e5f4f823 /libjava/java/awt/DefaultKeyboardFocusManager.java
parentea54b29342c8506acb4f858c68340c44b72e3532 (diff)
downloadgcc-b0fa81eea9a270f23d6ad67ca7a6d25c18d20da1.zip
gcc-b0fa81eea9a270f23d6ad67ca7a6d25c18d20da1.tar.gz
gcc-b0fa81eea9a270f23d6ad67ca7a6d25c18d20da1.tar.bz2
Major merge with Classpath.
Removed many duplicate files. * HACKING: Updated.x * classpath: Imported new directory. * standard.omit: New file. * Makefile.in, aclocal.m4, configure: Rebuilt. * sources.am: New file. * configure.ac: Run Classpath configure script. Moved code around to support. Disable xlib AWT peers (temporarily). * Makefile.am (SUBDIRS): Added 'classpath' (JAVAC): Removed. (AM_CPPFLAGS): Added more -I options. (BOOTCLASSPATH): Simplified. Completely redid how sources are built. Include sources.am. * include/Makefile.am (tool_include__HEADERS): Removed jni.h. * include/jni.h: Removed (in Classpath). * scripts/classes.pl: Updated to look at built classes. * scripts/makemake.tcl: New file. * testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Added -I options. (gcj_jni_invocation_compile_c_to_binary): Likewise. From-SVN: r102082
Diffstat (limited to 'libjava/java/awt/DefaultKeyboardFocusManager.java')
-rw-r--r--libjava/java/awt/DefaultKeyboardFocusManager.java503
1 files changed, 0 insertions, 503 deletions
diff --git a/libjava/java/awt/DefaultKeyboardFocusManager.java b/libjava/java/awt/DefaultKeyboardFocusManager.java
deleted file mode 100644
index 8362a97..0000000
--- a/libjava/java/awt/DefaultKeyboardFocusManager.java
+++ /dev/null
@@ -1,503 +0,0 @@
-/* DefaultKeyboardFocusManager.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.awt;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.FocusEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.WindowEvent;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-// FIXME: finish documentation
-public class DefaultKeyboardFocusManager extends KeyboardFocusManager
-{
- /**
- * This class models a request to delay the dispatch of events that
- * arrive after a certain time, until a certain component becomes
- * the focus owner.
- */
- private class EventDelayRequest implements Comparable
- {
- /** A {@link java.util.List} of {@link java.awt.event.KeyEvent}s
- that are being delayed, pending this request's {@link
- Component} receiving the keyboard focus. */
- private LinkedList enqueuedKeyEvents = new LinkedList ();
-
- /** An event timestamp. All events that arrive after this time
- should be queued in the {@link #enqueuedKeyEvents} {@link
- java.util.List}. */
- public long timestamp;
- /** When this {@link Component} becomes focused, all events
- between this EventDelayRequest and the next one in will be
- dispatched from {@link #enqueuedKeyEvents}. */
- public Component focusedComp;
-
- /**
- * Construct a new EventDelayRequest.
- *
- * @param timestamp events that arrive after this time will be
- * delayed
- * @param focusedComp the Component that needs to receive focus
- * before events are dispatched
- */
- public EventDelayRequest (long timestamp, Component focusedComp)
- {
- this.timestamp = timestamp;
- this.focusedComp = focusedComp;
- }
-
- public int compareTo (Object o)
- {
- if (!(o instanceof EventDelayRequest))
- throw new ClassCastException ();
-
- EventDelayRequest request = (EventDelayRequest) o;
-
- if (request.timestamp < timestamp)
- return -1;
- else if (request.timestamp == timestamp)
- return 0;
- else
- return 1;
- }
-
- public boolean equals (Object o)
- {
- if (!(o instanceof EventDelayRequest) || o == null)
- return false;
-
- EventDelayRequest request = (EventDelayRequest) o;
-
- return (request.timestamp == timestamp
- && request.focusedComp == focusedComp);
- }
-
- public void enqueueEvent (KeyEvent e)
- {
- KeyEvent last = (KeyEvent) enqueuedKeyEvents.getLast ();
- if (last != null && e.getWhen () < last.getWhen ())
- throw new RuntimeException ("KeyEvents enqueued out-of-order");
-
- if (e.getWhen () <= timestamp)
- throw new RuntimeException ("KeyEvents enqueued before starting timestamp");
-
- enqueuedKeyEvents.add (e);
- }
-
- public void dispatchEvents ()
- {
- int size = enqueuedKeyEvents.size ();
- for (int i = 0; i < size; i++)
- {
- KeyEvent e = (KeyEvent) enqueuedKeyEvents.remove (0);
- dispatchKeyEvent (e);
- }
- }
-
- public void discardEvents ()
- {
- enqueuedKeyEvents.clear ();
- }
- }
-
- /** The {@link java.util.SortedSet} of current {@link
- #EventDelayRequest}s. */
- private SortedSet delayRequests = new TreeSet ();
-
- public DefaultKeyboardFocusManager ()
- {
- }
-
- public boolean dispatchEvent (AWTEvent e)
- {
- if (e instanceof WindowEvent)
- {
- Window target = (Window) e.getSource ();
-
- if (e.id == WindowEvent.WINDOW_ACTIVATED)
- setGlobalActiveWindow (target);
- else if (e.id == WindowEvent.WINDOW_GAINED_FOCUS)
- setGlobalFocusedWindow (target);
- else if (e.id != WindowEvent.WINDOW_LOST_FOCUS
- && e.id != WindowEvent.WINDOW_DEACTIVATED)
- return false;
-
- redispatchEvent(target, e);
- return true;
- }
- else if (e instanceof FocusEvent)
- {
- Component target = (Component) e.getSource ();
-
- if (e.id == FocusEvent.FOCUS_GAINED)
- {
- if (! (target instanceof Window))
- {
- if (((FocusEvent) e).isTemporary ())
- setGlobalFocusOwner (target);
- else
- setGlobalPermanentFocusOwner (target);
- }
-
- // Keep track of this window's focus owner.
-
- // Find the target Component's top-level ancestor.
- Container parent = target.getParent ();
-
- while (parent != null
- && !(parent instanceof Window))
- parent = parent.getParent ();
-
- Window toplevel = parent == null ?
- (Window) target : (Window) parent;
-
- Component focusOwner = getFocusOwner ();
- if (focusOwner != null
- && ! (focusOwner instanceof Window))
- toplevel.setFocusOwner (focusOwner);
- }
- else if (e.id == FocusEvent.FOCUS_LOST)
- {
- if (((FocusEvent) e).isTemporary ())
- setGlobalFocusOwner (null);
- else
- setGlobalPermanentFocusOwner (null);
- }
-
- redispatchEvent(target, e);
-
- return true;
- }
- else if (e instanceof KeyEvent)
- {
- // Loop through all registered KeyEventDispatchers, giving
- // each a chance to handle this event.
- Iterator i = getKeyEventDispatchers().iterator();
-
- while (i.hasNext ())
- {
- KeyEventDispatcher dispatcher = (KeyEventDispatcher) i.next ();
- if (dispatcher.dispatchKeyEvent ((KeyEvent) e))
- return true;
- }
-
- // processKeyEvent checks if this event represents a focus
- // traversal key stroke.
- Component focusOwner = getGlobalPermanentFocusOwner ();
-
- if (focusOwner != null)
- processKeyEvent (focusOwner, (KeyEvent) e);
-
- if (e.isConsumed ())
- return true;
-
- if (enqueueKeyEvent ((KeyEvent) e))
- // This event was enqueued for dispatch at a later time.
- return true;
- else
- // This event wasn't handled by any of the registered
- // KeyEventDispatchers, and wasn't enqueued for dispatch
- // later, so send it to the default dispatcher.
- return dispatchKeyEvent ((KeyEvent) e);
- }
-
- return false;
- }
-
- private boolean enqueueKeyEvent (KeyEvent e)
- {
- Iterator i = delayRequests.iterator ();
- boolean oneEnqueued = false;
- while (i.hasNext ())
- {
- EventDelayRequest request = (EventDelayRequest) i.next ();
- if (e.getWhen () > request.timestamp)
- {
- request.enqueueEvent (e);
- oneEnqueued = true;
- }
- }
- return oneEnqueued;
- }
-
- public boolean dispatchKeyEvent (KeyEvent e)
- {
- Component focusOwner = getGlobalPermanentFocusOwner ();
-
- if (focusOwner != null)
- redispatchEvent(focusOwner, e);
-
- // Loop through all registered KeyEventPostProcessors, giving
- // each a chance to process this event.
- Iterator i = getKeyEventPostProcessors().iterator();
-
- while (i.hasNext ())
- {
- KeyEventPostProcessor processor = (KeyEventPostProcessor) i.next ();
- if (processor.postProcessKeyEvent ((KeyEvent) e))
- return true;
- }
-
- // The event hasn't been consumed yet. Check if it is an
- // MenuShortcut.
- if (postProcessKeyEvent (e))
- return true;
-
- // Always return true.
- return true;
- }
-
- public boolean postProcessKeyEvent (KeyEvent e)
- {
- // Check if this event represents a menu shortcut.
-
- // MenuShortcuts are activated by Ctrl- KeyEvents, only on KEY_PRESSED.
- int modifiers = e.getModifiersEx ();
- if (e.getID() == KeyEvent.KEY_PRESSED
- && (modifiers & KeyEvent.CTRL_DOWN_MASK) != 0)
- {
- Window focusedWindow = getGlobalFocusedWindow ();
- if (focusedWindow instanceof Frame)
- {
- MenuBar menubar = ((Frame) focusedWindow).getMenuBar ();
-
- if (menubar != null)
- {
- // If there's a menubar, loop through all menu items,
- // checking whether each one has a shortcut, and if
- // so, whether this key event should activate it.
- int numMenus = menubar.getMenuCount ();
-
- for (int i = 0; i < numMenus; i++)
- {
- Menu menu = menubar.getMenu (i);
- int numItems = menu.getItemCount ();
-
- for (int j = 0; j < numItems; j++)
- {
- MenuItem item = menu.getItem (j);
- MenuShortcut shortcut = item.getShortcut ();
-
- if (item.isEnabled() && shortcut != null)
- {
- // Dispatch a new ActionEvent if:
- //
- // a) this is a Shift- KeyEvent, and the
- // shortcut requires the Shift modifier
- //
- // or, b) this is not a Shift- KeyEvent, and the
- // shortcut does not require the Shift
- // modifier.
- if (shortcut.getKey () == e.getKeyCode ()
- && ((shortcut.usesShiftModifier ()
- && (modifiers & KeyEvent.SHIFT_DOWN_MASK) != 0)
- || (! shortcut.usesShiftModifier ()
- && (modifiers & KeyEvent.SHIFT_DOWN_MASK) == 0)))
- {
- item.dispatchEvent (new ActionEvent (item,
- ActionEvent.ACTION_PERFORMED,
- item.getActionCommand (),
- modifiers));
- // The event was dispatched.
- return true;
- }
- }
- }
- }
- }
- }
- }
- return false;
- }
-
- public void processKeyEvent (Component comp, KeyEvent e)
- {
- AWTKeyStroke eventKeystroke = AWTKeyStroke.getAWTKeyStrokeForEvent (e);
- // For every focus traversal keystroke, we need to also consume
- // the other two key event types for the same key (e.g. if
- // KEY_PRESSED TAB is a focus traversal keystroke, we also need to
- // consume KEY_RELEASED and KEY_TYPED TAB key events).
- AWTKeyStroke oppositeKeystroke = AWTKeyStroke.getAWTKeyStroke (e.getKeyCode (),
- e.getModifiersEx (),
- !(e.id == KeyEvent.KEY_RELEASED));
-
- Set forwardKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
- Set backwardKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
- Set upKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS);
- Set downKeystrokes = null;
- if (comp instanceof Container)
- downKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS);
-
- if (forwardKeystrokes.contains (eventKeystroke))
- {
- focusNextComponent (comp);
- e.consume ();
- }
- else if (backwardKeystrokes.contains (eventKeystroke))
- {
- focusPreviousComponent (comp);
- e.consume ();
- }
- else if (upKeystrokes.contains (eventKeystroke))
- {
- upFocusCycle (comp);
- e.consume ();
- }
- else if (comp instanceof Container
- && downKeystrokes.contains (eventKeystroke))
- {
- downFocusCycle ((Container) comp);
- e.consume ();
- }
- else if (forwardKeystrokes.contains (oppositeKeystroke)
- || backwardKeystrokes.contains (oppositeKeystroke)
- || upKeystrokes.contains (oppositeKeystroke)
- || (comp instanceof Container &&
- downKeystrokes.contains (oppositeKeystroke)))
- e.consume ();
- }
-
- protected void enqueueKeyEvents (long after, Component untilFocused)
- {
- delayRequests.add (new EventDelayRequest (after, untilFocused));
- }
-
- protected void dequeueKeyEvents (long after, Component untilFocused)
- {
- // FIXME: need synchronization on delayRequests and enqueuedKeyEvents.
-
- // Remove the KeyEvent with the oldest timestamp, which should be
- // the first element in the SortedSet.
- if (after < 0)
- {
- int size = delayRequests.size ();
- if (size > 0)
- delayRequests.remove (delayRequests.first ());
- }
- else
- {
- EventDelayRequest template = new EventDelayRequest (after, untilFocused);
- if (delayRequests.contains (template))
- {
- EventDelayRequest actual = (EventDelayRequest) delayRequests.tailSet (template).first ();
- delayRequests.remove (actual);
- actual.dispatchEvents ();
- }
- }
- }
-
- protected void discardKeyEvents (Component comp)
- {
- // FIXME: need synchronization on delayRequests and enqueuedKeyEvents.
-
- Iterator i = delayRequests.iterator ();
-
- while (i.hasNext ())
- {
- EventDelayRequest request = (EventDelayRequest) i.next ();
-
- if (request.focusedComp == comp
- || (comp instanceof Container
- && ((Container) comp).isAncestorOf (request.focusedComp)))
- request.discardEvents ();
- }
- }
-
- public void focusPreviousComponent (Component comp)
- {
- Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
- Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
- FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
-
- Component previous = policy.getComponentBefore (focusCycleRoot, focusComp);
- if (previous != null)
- previous.requestFocusInWindow ();
- }
-
- public void focusNextComponent (Component comp)
- {
- Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
- Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
- FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
-
- Component next = policy.getComponentAfter (focusCycleRoot, focusComp);
- if (next != null)
- next.requestFocusInWindow ();
- }
-
- public void upFocusCycle (Component comp)
- {
- Component focusComp = (comp == null) ? getGlobalFocusOwner () : comp;
- Container focusCycleRoot = focusComp.getFocusCycleRootAncestor ();
-
- if (focusCycleRoot instanceof Window)
- {
- FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
- Component defaultComponent = policy.getDefaultComponent (focusCycleRoot);
- if (defaultComponent != null)
- defaultComponent.requestFocusInWindow ();
- }
- else
- {
- Container parentFocusCycleRoot = focusCycleRoot.getFocusCycleRootAncestor ();
-
- focusCycleRoot.requestFocusInWindow ();
- setGlobalCurrentFocusCycleRoot (parentFocusCycleRoot);
- }
- }
-
- public void downFocusCycle (Container cont)
- {
- if (cont == null)
- return;
-
- if (cont.isFocusCycleRoot (cont))
- {
- FocusTraversalPolicy policy = cont.getFocusTraversalPolicy ();
- Component defaultComponent = policy.getDefaultComponent (cont);
- if (defaultComponent != null)
- defaultComponent.requestFocusInWindow ();
- setGlobalCurrentFocusCycleRoot (cont);
- }
- }
-} // class DefaultKeyboardFocusManager