aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/awt/DefaultKeyboardFocusManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/awt/DefaultKeyboardFocusManager.java')
-rw-r--r--libjava/java/awt/DefaultKeyboardFocusManager.java52
1 files changed, 30 insertions, 22 deletions
diff --git a/libjava/java/awt/DefaultKeyboardFocusManager.java b/libjava/java/awt/DefaultKeyboardFocusManager.java
index d4c8bdd..7912e29 100644
--- a/libjava/java/awt/DefaultKeyboardFocusManager.java
+++ b/libjava/java/awt/DefaultKeyboardFocusManager.java
@@ -155,7 +155,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
&& e.id != WindowEvent.WINDOW_DEACTIVATED)
return false;
- target.dispatchEvent (e);
+ redispatchEvent(target, e);
return true;
}
else if (e instanceof FocusEvent)
@@ -197,7 +197,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
setGlobalPermanentFocusOwner (null);
}
- target.dispatchEvent (e);
+ redispatchEvent(target, e);
return true;
}
@@ -258,7 +258,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
Component focusOwner = getGlobalPermanentFocusOwner ();
if (focusOwner != null)
- focusOwner.dispatchEvent (e);
+ redispatchEvent(focusOwner, e);
// Loop through all registered KeyEventPostProcessors, giving
// each a chance to process this event.
@@ -284,10 +284,10 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
{
// Check if this event represents a menu shortcut.
- // MenuShortcuts are activated by Ctrl- KeyEvents.
- int modifiers = e.getModifiers ();
- if ((modifiers & KeyEvent.CTRL_MASK) != 0
- || (modifiers & KeyEvent.CTRL_DOWN_MASK) != 0)
+ // 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)
@@ -311,17 +311,21 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
MenuItem item = menu.getItem (j);
MenuShortcut shortcut = item.getShortcut ();
- if (shortcut != null)
+ if (item.isEnabled() && shortcut != null)
{
- // Dispatch a new ActionEvent if this is a
- // Shift- KeyEvent and the shortcut requires
- // the Shift modifier, or if the shortcut
- // doesn't require the Shift modifier.
- if ((shortcut.usesShiftModifier ()
- && ((modifiers & KeyEvent.SHIFT_MASK) != 0
- || (modifiers & KeyEvent.SHIFT_DOWN_MASK) != 0)
- || !shortcut.usesShiftModifier ())
- && shortcut.getKey () == e.getKeyCode ())
+ // 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,
@@ -347,7 +351,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
// 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.getModifiers (),
+ e.getModifiersEx (),
!(e.id == KeyEvent.KEY_RELEASED));
Set forwardKeystrokes = comp.getFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
@@ -439,7 +443,8 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
Component previous = policy.getComponentBefore (focusCycleRoot, focusComp);
- previous.requestFocusInWindow ();
+ if (previous != null)
+ previous.requestFocusInWindow ();
}
public void focusNextComponent (Component comp)
@@ -449,7 +454,8 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
Component next = policy.getComponentAfter (focusCycleRoot, focusComp);
- next.requestFocusInWindow ();
+ if (next != null)
+ next.requestFocusInWindow ();
}
public void upFocusCycle (Component comp)
@@ -461,7 +467,8 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
{
FocusTraversalPolicy policy = focusCycleRoot.getFocusTraversalPolicy ();
Component defaultComponent = policy.getDefaultComponent (focusCycleRoot);
- defaultComponent.requestFocusInWindow ();
+ if (defaultComponent != null)
+ defaultComponent.requestFocusInWindow ();
}
else
{
@@ -481,7 +488,8 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
{
FocusTraversalPolicy policy = cont.getFocusTraversalPolicy ();
Component defaultComponent = policy.getDefaultComponent (cont);
- defaultComponent.requestFocusInWindow ();
+ if (defaultComponent != null)
+ defaultComponent.requestFocusInWindow ();
setGlobalCurrentFocusCycleRoot (cont);
}
}