aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator
diff options
context:
space:
mode:
authorYana Stamcheva <yana@jitsi.org>2010-04-06 10:05:40 +0000
committerYana Stamcheva <yana@jitsi.org>2010-04-06 10:05:40 +0000
commit6197ab8cd7ac5806a2501407603908c4d3cbaf03 (patch)
treecbf249faff8ea6a3e45645867c367a94f15ab2a9 /src/net/java/sip/communicator
parent0f1bde01f65aba4ffe760fad9efcb271e8eb90c0 (diff)
downloadjitsi-6197ab8cd7ac5806a2501407603908c4d3cbaf03.zip
jitsi-6197ab8cd7ac5806a2501407603908c4d3cbaf03.tar.gz
jitsi-6197ab8cd7ac5806a2501407603908c4d3cbaf03.tar.bz2
Ongoing work on Issue #809 ("Could not show contact list window" : https://sip-communicator.dev.java.net/issues/show_bug.cgi?id=809).
Diffstat (limited to 'src/net/java/sip/communicator')
-rw-r--r--src/net/java/sip/communicator/impl/gui/UIServiceImpl.java36
-rwxr-xr-xsrc/net/java/sip/communicator/impl/gui/main/MainFrame.java12
-rw-r--r--src/net/java/sip/communicator/impl/osdependent/jdic/TrayMenuFactory.java142
-rw-r--r--src/net/java/sip/communicator/service/gui/UIService.java27
4 files changed, 200 insertions, 17 deletions
diff --git a/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java b/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
index 3542f75..aa7cb03 100644
--- a/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
+++ b/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
@@ -351,6 +351,21 @@ public class UIServiceImpl
}
/**
+ * Brings the focus to the main application window.
+ */
+ public void bringToFront()
+ {
+ if (mainFrame.getState() == Frame.ICONIFIED)
+ mainFrame.setState(Frame.NORMAL);
+ // Because toFront() method gives us no guarantee that our frame would
+ // go on top we'll try to also first request the focus and set our
+ // window always on top.
+ mainFrame.requestFocus();
+ mainFrame.setAlwaysOnTop(true);
+ mainFrame.toFront();
+ }
+
+ /**
* Implements the <code>UIService.setExitOnMainWindowClose</code>. Sets a
* boolean property, which indicates whether the application should be
* exited when the main application window is closed.
@@ -1172,4 +1187,23 @@ public class UIServiceImpl
else
return null;
}
-}
+
+ /**
+ * Adds the given <tt>WindowListener</tt> to the main application window.
+ * @param l the <tt>WindowListener</tt> to add
+ */
+ public void addWindowListener(WindowListener l)
+ {
+ mainFrame.addWindowListener(l);
+ }
+
+ /**
+ * Removes the given <tt>WindowListener</tt> from the main application
+ * window.
+ * @param l the <tt>WindowListener</tt> to remove
+ */
+ public void removeWindowListener(WindowListener l)
+ {
+ mainFrame.removeWindowListener(l);
+ }
+} \ No newline at end of file
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 4980783..21ea616 100755
--- a/src/net/java/sip/communicator/impl/gui/main/MainFrame.java
+++ b/src/net/java/sip/communicator/impl/gui/main/MainFrame.java
@@ -117,16 +117,6 @@ public class MainFrame
{
MainFrame.this.windowClosed(event);
}
-
- public void windowActivated(WindowEvent event)
- {
- ConfigurationManager.setApplicationVisible(true);
- }
-
- public void windowOpened(WindowEvent event)
- {
- ConfigurationManager.setApplicationVisible(true);
- }
});
this.initTitleFont();
@@ -1492,4 +1482,4 @@ public class MainFrame
return false;
}
}
-}
+} \ No newline at end of file
diff --git a/src/net/java/sip/communicator/impl/osdependent/jdic/TrayMenuFactory.java b/src/net/java/sip/communicator/impl/osdependent/jdic/TrayMenuFactory.java
index 23d3478..d6eb9da 100644
--- a/src/net/java/sip/communicator/impl/osdependent/jdic/TrayMenuFactory.java
+++ b/src/net/java/sip/communicator/impl/osdependent/jdic/TrayMenuFactory.java
@@ -22,10 +22,10 @@ import net.java.sip.communicator.util.*;
*
* @author Nicolas Chamouard
* @author Lubomir Marinov
+ * @author Yana Stamcheva
*/
public final class TrayMenuFactory
{
-
/**
* Handles the <tt>ActionEvent</tt> when one of the menu items is selected.
*
@@ -68,8 +68,28 @@ public final class TrayMenuFactory
.showMessagePopupDialog(Resources.getString(
"impl.systray.FAILED_TO_OPEN_ADD_CONTACT_DIALOG"));
}
+ else if (itemName.equals("service.gui.SHOW"))
+ {
+ OsDependentActivator.getUIService().setVisible(true);
+ OsDependentActivator.getUIService().bringToFront();
+
+ changeTrayMenuItem(source, "service.gui.HIDE",
+ "service.gui.HIDE", "service.gui.icons.SEARCH_ICON_16x16");
+ }
+ else if (itemName.equals("service.gui.HIDE"))
+ {
+ OsDependentActivator.getUIService().setVisible(false);
+
+ changeTrayMenuItem(source, "service.gui.SHOW",
+ "service.gui.SHOW", "service.gui.icons.SEARCH_ICON_16x16");
+ }
}
+ /**
+ * Adds the given <tt>trayMenuItem</tt> to the given <tt>trayMenu</tt>.
+ * @param trayMenu the tray menu to which to add the item
+ * @param trayMenuItem the item to add
+ */
private static void add(Object trayMenu, Object trayMenuItem)
{
if (trayMenu instanceof JPopupMenu)
@@ -78,6 +98,11 @@ public final class TrayMenuFactory
((PopupMenu) trayMenu).add((MenuItem) trayMenuItem);
}
+ /**
+ * Adds a <tt>PopupMenuListener</tt> to the given <tt>trayMenu</tt>.
+ * @param trayMenu the tray menu to which to add a popup listener
+ * @param listener the listener to add
+ */
public static void addPopupMenuListener(Object trayMenu,
PopupMenuListener listener)
{
@@ -85,6 +110,10 @@ public final class TrayMenuFactory
((JPopupMenu) trayMenu).addPopupMenuListener(listener);
}
+ /**
+ * Adds a separator to the given <tt>trayMenu</tt>.
+ * @param trayMenu the tray menu to which to add a separator
+ */
private static void addSeparator(Object trayMenu)
{
if (trayMenu instanceof JPopupMenu)
@@ -93,6 +122,12 @@ public final class TrayMenuFactory
((PopupMenu) trayMenu).addSeparator();
}
+ /**
+ * Creates a tray menu for the given system tray.
+ * @param tray the system tray for which we're creating a menu
+ * @param swing indicates if we should create a Swing or an AWT menu
+ * @return a tray menu for the given system tray
+ */
public static Object createTrayMenu(SystrayServiceJdicImpl tray,
boolean swing)
{
@@ -117,13 +152,76 @@ public final class TrayMenuFactory
addSeparator(trayMenu);
add(trayMenu, new StatusSubMenu(tray, swing).getMenu());
addSeparator(trayMenu);
- add(trayMenu, createTrayMenuItem("service.gui.QUIT",
- "service.gui.QUIT", "service.systray.QUIT_MENU_ICON", listener,
+
+ String showHideName;
+ String showHideTextId;
+ String showHideIconId;
+
+ if (OsDependentActivator.getUIService().isVisible())
+ {
+ showHideName = "service.gui.HIDE";
+ showHideTextId = "service.gui.HIDE";
+ showHideIconId = "service.gui.icons.SEARCH_ICON_16x16";
+ }
+ else
+ showHideName = "service.gui.SHOW";
+ showHideTextId = "service.gui.SHOW";
+ showHideIconId = "service.gui.icons.SEARCH_ICON_16x16";
+
+ final Object showHideMenuItem = createTrayMenuItem( showHideName,
+ showHideTextId,
+ showHideIconId,
+ listener,
+ swing);
+
+ add(trayMenu, showHideMenuItem);
+
+ add(trayMenu, createTrayMenuItem("service.gui.CLOSE",
+ "service.gui.CLOSE", "service.systray.CLOSE_MENU_ICON", listener,
swing));
+ OsDependentActivator.getUIService().addWindowListener(
+ new WindowAdapter()
+ {
+ /**
+ * Invoked when a window is activated.
+ */
+ public void windowActivated(WindowEvent e)
+ {
+ changeTrayMenuItem( showHideMenuItem,
+ "service.gui.HIDE",
+ "service.gui.HIDE",
+ "service.gui.icons.SEARCH_ICON_16x16");
+ }
+
+ /**
+ * Invoked when a window is de-activated.
+ */
+ public void windowDeactivated(WindowEvent e)
+ {
+ changeTrayMenuItem( showHideMenuItem,
+ "service.gui.SHOW",
+ "service.gui.SHOW",
+ "service.gui.icons.SEARCH_ICON_16x16");
+ }
+ });
+
return trayMenu;
}
+ /**
+ * Creates a tray menu with the given <tt>name</tt>, text given by
+ * <tt>textID</tt> and icon given by <tt>iconID</tt>. The <tt>listener</tt>
+ * is handling item events and the <tt>swing</tt> value indicates if we
+ * should create a Swing menu item or and an AWT item.
+ * @param name the name of the item
+ * @param textID the identifier of the text in the localization resources
+ * @param iconID the identifier of the icon in the image resources
+ * @param listener the <tt>ActionListener</tt> handling action events
+ * @param swing indicates if we should create a Swing menu item or an AWT
+ * item
+ * @return a reference to the newly created item
+ */
private static Object createTrayMenuItem( String name,
String textID,
String iconID,
@@ -150,10 +248,46 @@ public final class TrayMenuFactory
return trayMenuItem;
}
+ /**
+ * Changes the tray menu item properties, like name, text and icon.
+ * @param trayItem the tray menu item to change
+ * @param name the new name of the item
+ * @param textID the new text identifier
+ * @param iconID the new icon string identifier
+ */
+ private static void changeTrayMenuItem( Object trayItem,
+ String name,
+ String textID,
+ String iconID)
+ {
+ String text = Resources.getString(textID);
+
+ if (trayItem instanceof JMenuItem)
+ {
+ JMenuItem jmenuItem = (JMenuItem) trayItem;
+ jmenuItem.setName(name);
+ jmenuItem.setText(text);
+ jmenuItem.setIcon(Resources.getImage(iconID));
+ }
+ else if (trayItem instanceof MenuItem)
+ {
+ MenuItem menuItem = (MenuItem) trayItem;
+ menuItem.setName(name);
+ menuItem.setLabel(text);
+ }
+ }
+
+ /**
+ * Returns <tt>true</tt> if the given <tt>trayMenu</tt> is visible,
+ * otherwise returns <tt>false</tt>.
+ * @param trayMenu the <tt>TrayMenu</tt> to check
+ * @return <tt>true</tt> if the given <tt>trayMenu</tt> is visible,
+ * otherwise returns <tt>false</tt>
+ */
public static boolean isVisible(Object trayMenu)
{
if (trayMenu instanceof JPopupMenu)
return ((JPopupMenu) trayMenu).isVisible();
return false;
}
-}
+} \ No newline at end of file
diff --git a/src/net/java/sip/communicator/service/gui/UIService.java b/src/net/java/sip/communicator/service/gui/UIService.java
index 78f4834..321e2db 100644
--- a/src/net/java/sip/communicator/service/gui/UIService.java
+++ b/src/net/java/sip/communicator/service/gui/UIService.java
@@ -7,6 +7,7 @@
package net.java.sip.communicator.service.gui;
import java.awt.*;
+import java.awt.event.*;
import java.util.*;
import java.util.List;
@@ -133,6 +134,11 @@ public interface UIService
public void move(int x, int y);
/**
+ * Brings the focus to the main application window.
+ */
+ public void bringToFront();
+
+ /**
* Sets the exitOnClose property. When TRUE, the user could exit the
* application by simply closing the main application window (by clicking
* the X button or pressing Alt-F4). When set to FALSE the main application
@@ -387,4 +393,23 @@ public interface UIService
* configuration window; <tt>false</tt> to hide it
*/
public void setConfigurationWindowVisible(boolean visible);
-}
+
+ /**
+ * Adds the given <tt>WindowListener</tt> listening for events triggered
+ * by the main UIService component. This is normally the main application
+ * window component, the one containing the contact list. This listener
+ * would also receive events when this window is shown or hidden.
+ * @param l the <tt>WindowListener</tt> to add
+ */
+ public void addWindowListener(WindowListener l);
+
+ /**
+ * Removes the given <tt>WindowListener</tt> from the list of registered
+ * listener. The <tt>WindowListener</tt> is listening for events
+ * triggered by the main UIService component. This is normally the main
+ * application window component, the one containing the contact list. This
+ * listener would also receive events when this window is shown or hidden.
+ * @param l the <tt>WindowListener</tt> to remove
+ */
+ public void removeWindowListener(WindowListener l);
+} \ No newline at end of file