diff --git a/lib/installer-exclude/fmj.jar b/lib/installer-exclude/fmj.jar
index 77403b450..3a6441303 100644
Binary files a/lib/installer-exclude/fmj.jar and b/lib/installer-exclude/fmj.jar differ
diff --git a/lib/installer-exclude/ice4j.jar b/lib/installer-exclude/ice4j.jar
index ca03d9ae1..feb3fd2a9 100644
Binary files a/lib/installer-exclude/ice4j.jar and b/lib/installer-exclude/ice4j.jar differ
diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar
index a93128055..38ad7d92a 100644
Binary files a/lib/installer-exclude/libjitsi.jar and b/lib/installer-exclude/libjitsi.jar differ
diff --git a/src/net/java/sip/communicator/impl/gui/main/SingleWindowContainer.java b/src/net/java/sip/communicator/impl/gui/main/SingleWindowContainer.java
index 7db79d786..cdeffa3d4 100644
--- a/src/net/java/sip/communicator/impl/gui/main/SingleWindowContainer.java
+++ b/src/net/java/sip/communicator/impl/gui/main/SingleWindowContainer.java
@@ -202,7 +202,7 @@ public void close(CallPanel callPanel, boolean delay)
* @return true to indicate that a component contained in this
* container currently owns the keyboard focus, false - otherwise
*/
- public boolean containsFocus()
+ public boolean containsFocusOwner()
{
ChatPanel chat = getCurrentChat();
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 856b9cf2e..0b080588d 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
@@ -12,6 +12,7 @@
import javax.swing.text.*;
import net.java.sip.communicator.impl.gui.*;
+import net.java.sip.communicator.impl.gui.main.*;
import net.java.sip.communicator.service.gui.*;
/**
@@ -77,22 +78,31 @@ public void setContactList(ContactList contactList)
*/
public boolean dispatchKeyEvent(KeyEvent e)
{
+ // 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())
+ return false;
+
+ int id = e.getID();
+
+ if (id != KeyEvent.KEY_PRESSED && id != KeyEvent.KEY_TYPED)
+ return false;
+
+ SingleWindowContainer singleWindowContainer
+ = GuiActivator.getUIService().getSingleWindowContainer();
+
+ if ((singleWindowContainer != null)
+ && singleWindowContainer.containsFocusOwner())
+ return false;
+
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)
- || (GuiActivator.getUIService()
- .getSingleWindowContainer() != null)
- && GuiActivator.getUIService()
- .getSingleWindowContainer().containsFocus()
- || (focusOwner != null
+ if (focusOwner != null
&& !searchField.isFocusOwner()
&& focusOwner instanceof JTextComponent)
- || contactListContainer.isMenuSelected())
+ return false;
+ if (contactListContainer.isMenuSelected())
return false;
// Ctrl-Enter || Cmd-Enter typed when this window is the focused
@@ -106,15 +116,16 @@ public boolean dispatchKeyEvent(KeyEvent e)
// This is why we need to do it here and to check if the
// permanent focus owner is equal to the focus owner, which is not
// the case when a popup menu is opened.
- if (e.getKeyCode() == KeyEvent.VK_ENTER
- && (e.isControlDown() || e.isMetaDown()))
+ int keyCode = e.getKeyCode();
+
+ if (keyCode == KeyEvent.VK_ENTER
+ && (e.isControlDown() || e.isMetaDown()))
{
contactListContainer.ctrlEnterKeyTyped();
return false;
}
- else if (e.getKeyCode() == KeyEvent.VK_ENTER
- && keyManager.getFocusOwner()
- .equals(keyManager.getPermanentFocusOwner()))
+ else if (keyCode == KeyEvent.VK_ENTER
+ && focusOwner.equals(keyManager.getPermanentFocusOwner()))
{
contactListContainer.enterKeyTyped();
return false;
@@ -122,10 +133,10 @@ else if (e.getKeyCode() == KeyEvent.VK_ENTER
// If the search field is the focus owner.
if (searchField.isFocusOwner()
- && (e.getKeyCode() == KeyEvent.VK_UP
- || e.getKeyCode() == KeyEvent.VK_DOWN
- || e.getKeyCode() == KeyEvent.VK_PAGE_UP
- || e.getKeyCode() == KeyEvent.VK_PAGE_DOWN))
+ && (keyCode == KeyEvent.VK_UP
+ || keyCode == KeyEvent.VK_DOWN
+ || keyCode == KeyEvent.VK_PAGE_UP
+ || keyCode == KeyEvent.VK_PAGE_DOWN))
{
contactList.selectFirstContact();
contactList.getComponent().requestFocus();
@@ -134,54 +145,51 @@ else if (e.getKeyCode() == KeyEvent.VK_ENTER
// If the contact list is the focus owner.
if (contactList.getComponent().isFocusOwner()
- && e.getKeyCode() == KeyEvent.VK_ESCAPE)
+ && keyCode == KeyEvent.VK_ESCAPE)
{
// Removes all current selections.
contactList.removeSelection();
if (searchField.getText() != null)
- {
searchField.requestFocus();
- }
+
return false;
}
+ char keyChar = e.getKeyChar();
UIGroup selectedGroup = contactList.getSelectedGroup();
// No matter who is the focus owner.
- if (e.getKeyChar() == KeyEvent.CHAR_UNDEFINED
- || e.getKeyCode() == KeyEvent.VK_ENTER
- || e.getKeyCode() == KeyEvent.VK_DELETE
- || e.getKeyCode() == KeyEvent.VK_BACK_SPACE
- || e.getKeyCode() == KeyEvent.VK_TAB
- || e.getKeyChar() == '\t'
- || e.getKeyCode() == KeyEvent.VK_SPACE
- || (selectedGroup != null
- && (e.getKeyChar() == '+'
- || e.getKeyChar() == '-')))
+ if (keyChar == KeyEvent.CHAR_UNDEFINED
+ || keyCode == KeyEvent.VK_ENTER
+ || keyCode == KeyEvent.VK_DELETE
+ || keyCode == KeyEvent.VK_BACK_SPACE
+ || keyCode == KeyEvent.VK_TAB
+ || e.getKeyChar() == '\t'
+ || keyCode == KeyEvent.VK_SPACE
+ || (selectedGroup != null
+ && (keyChar == '+' || keyChar == '-')))
{
return false;
}
boolean singleWindowRule
- = GuiActivator.getUIService().getSingleWindowContainer() == null
+ = singleWindowContainer == null
|| contactList.getComponent().isFocusOwner();
if (!searchField.isFocusOwner()
- && keyManager.getFocusOwner() != null
- && singleWindowRule
- && keyManager.getFocusOwner()
- .equals(keyManager.getPermanentFocusOwner()))
+ && focusOwner != null
+ && singleWindowRule
+ && focusOwner.equals(keyManager.getPermanentFocusOwner()))
{
// Request the focus in the search field if a letter is typed.
searchField.requestFocusInWindow();
-
// We re-dispatch the event to search field.
keyManager.redispatchEvent(searchField, e);
-
// We don't want to dispatch further this event.
return true;
}
+
return false;
}
}
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java
index c7e28acd1..d10bfb0a2 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java
+++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListTreeCellRenderer.java
@@ -8,7 +8,6 @@
import java.awt.*;
import java.awt.event.*;
-
import java.util.*;
import java.util.List;
@@ -16,6 +15,8 @@
import javax.swing.JPopupMenu.Separator;
import javax.swing.tree.*;
+import org.jitsi.util.*;
+
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.main.call.*;
import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*;
@@ -459,14 +460,18 @@ public Component getTreeCellRendererComponent(JTree tree, Object value,
* system font (size) so there is no reason to specify any font size
* here, let alone a hard-coded absolute one. Anyway, use a
* hard-coded absolute font size but at least do not fall bellow the
- * default system font size.
+ * default system font size. On second thought, we are pretty sure
+ * that we are using the default system font on Windows and it makes
+ * no sense whatsoever to change its size.
*/
Font nameLabelFont = nameLabel.getFont();
nameLabel.setFont(
nameLabelFont.deriveFont(
Font.PLAIN,
- Math.max(nameLabelFont.getSize2D(), 13f)));
+ Math.max(
+ nameLabelFont.getSize2D(),
+ OSUtils.IS_WINDOWS ? 0F : 13F)));
if (contactForegroundColor != null)
nameLabel.setForeground(contactForegroundColor);
@@ -537,14 +542,18 @@ else if (value instanceof GroupNode)
* system font (size) so there is no reason to specify any font size
* here, let alone a hard-coded absolute one. Anyway, use a
* hard-coded absolute font size but at least do not fall bellow the
- * default system font size.
+ * default system font size. On second thought, we are pretty sure
+ * that we are using the default system font on Windows and it makes
+ * no sense whatsoever to change its size.
*/
Font nameLabelFont = nameLabel.getFont();
nameLabel.setFont(
nameLabelFont.deriveFont(
Font.BOLD,
- Math.max(nameLabelFont.getSize2D(), 13f)));
+ Math.max(
+ nameLabelFont.getSize2D(),
+ OSUtils.IS_WINDOWS ? 0F : 13F)));
nameLabel.setText(groupItem.getDisplayName());
if (groupForegroundColor != null)