From 4bed7e4e6621b94f8fbc6add215de2a765eafeff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kil=C3=A5s?= Date: Sat, 18 May 2013 22:55:54 +0200 Subject: [PATCH] Fix for "Main window menu bar can not always be navigated using keyboard". --- .../communicator/impl/gui/main/MainFrame.java | 3 ++- .../ContactListSearchKeyDispatcher.java | 17 ++++++++++++++--- .../impl/gui/utils/InviteDialog.java | 3 ++- .../impl/gui/utils/OneChoiceInviteDialog.java | 3 ++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/MainFrame.java b/src/net/java/sip/communicator/impl/gui/main/MainFrame.java index d8214cb15..48caec801 100644 --- a/src/net/java/sip/communicator/impl/gui/main/MainFrame.java +++ b/src/net/java/sip/communicator/impl/gui/main/MainFrame.java @@ -225,7 +225,8 @@ public MainFrame() clKeyDispatcher = new ContactListSearchKeyDispatcher( keyManager, searchField, - this); + this, + menu); keyManager.addKeyEventDispatcher(clKeyDispatcher); /* diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSearchKeyDispatcher.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSearchKeyDispatcher.java index 797253b87..93d3e9e99 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSearchKeyDispatcher.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListSearchKeyDispatcher.java @@ -8,6 +8,7 @@ import java.awt.*; import java.awt.event.*; +import javax.swing.*; import javax.swing.text.*; @@ -45,17 +46,25 @@ public class ContactListSearchKeyDispatcher */ private final ContactListContainer contactListContainer; + /** + * The menu bar of the parent window. + */ + private final JMenuBar menuBar; + /** * Creates an instance of MainKeyDispatcher. * @param keyManager the parent KeyboardFocusManager + * @param menuBar of the parent window or null if none is used. */ public ContactListSearchKeyDispatcher( KeyboardFocusManager keyManager, SearchField searchField, - ContactListContainer container) + ContactListContainer container, + JMenuBar menuBar) { this.keyManager = keyManager; this.searchField = searchField; this.contactListContainer = container; + this.menuBar = menuBar; } /** @@ -78,9 +87,10 @@ public void setContactList(ContactList contactList) public boolean dispatchKeyEvent(KeyEvent e) { Component focusOwner = keyManager.getFocusOwner(); - + // If this window is not the focus window or if the event is not // of type PRESSED we have nothing more to do here. + // Also don't re-dispatch any events if the menu is active. if (!contactListContainer.isFocused() || (e.getID() != KeyEvent.KEY_PRESSED && e.getID() != KeyEvent.KEY_TYPED) @@ -90,7 +100,8 @@ public boolean dispatchKeyEvent(KeyEvent e) .getSingleWindowContainer().containsFocus() || (focusOwner != null && !searchField.isFocusOwner() - && focusOwner instanceof JTextComponent)) + && focusOwner instanceof JTextComponent) + || (menuBar != null && menuBar.isSelected())) return false; // Ctrl-Enter || Cmd-Enter typed when this window is the focused diff --git a/src/net/java/sip/communicator/impl/gui/utils/InviteDialog.java b/src/net/java/sip/communicator/impl/gui/utils/InviteDialog.java index ed46aea98..168450880 100644 --- a/src/net/java/sip/communicator/impl/gui/utils/InviteDialog.java +++ b/src/net/java/sip/communicator/impl/gui/utils/InviteDialog.java @@ -235,7 +235,8 @@ public void actionPerformed(ActionEvent e) ContactListSearchKeyDispatcher clKeyDispatcher = new ContactListSearchKeyDispatcher( keyManager, searchField, - this); + this, + null); clKeyDispatcher.setContactList(srcContactList); diff --git a/src/net/java/sip/communicator/impl/gui/utils/OneChoiceInviteDialog.java b/src/net/java/sip/communicator/impl/gui/utils/OneChoiceInviteDialog.java index f542447b5..3752f46a1 100644 --- a/src/net/java/sip/communicator/impl/gui/utils/OneChoiceInviteDialog.java +++ b/src/net/java/sip/communicator/impl/gui/utils/OneChoiceInviteDialog.java @@ -138,7 +138,8 @@ public void focusGained(FocusEvent e) ContactListSearchKeyDispatcher clKeyDispatcher = new ContactListSearchKeyDispatcher( keyManager, searchField, - this); + this, + null); clKeyDispatcher.setContactList(contactList);