diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/PresenceStatusMenu.java b/src/net/java/sip/communicator/impl/gui/main/presence/PresenceStatusMenu.java
index dc64b0b84..b10e7f7e8 100644
--- a/src/net/java/sip/communicator/impl/gui/main/presence/PresenceStatusMenu.java
+++ b/src/net/java/sip/communicator/impl/gui/main/presence/PresenceStatusMenu.java
@@ -295,7 +295,10 @@ public void dispose()
titleArea = null;
if(statusMessageMenu != null)
+ {
+ statusMessageMenu.removePropertyChangeListener(this);
statusMessageMenu.dispose();
+ }
statusMessageMenu = null;
}
}
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/presence/NewStatusMessageDialog.java b/src/net/java/sip/communicator/plugin/desktoputil/presence/NewStatusMessageDialog.java
index 132f8de15..b2e25341e 100644
--- a/src/net/java/sip/communicator/plugin/desktoputil/presence/NewStatusMessageDialog.java
+++ b/src/net/java/sip/communicator/plugin/desktoputil/presence/NewStatusMessageDialog.java
@@ -45,9 +45,9 @@ public class NewStatusMessageDialog
DesktopUtilActivator.getResources().getI18NString("service.gui.CANCEL"));
/**
- * The presence operation set through which we change the status message.
+ * The current status message.
*/
- private final OperationSetPresence presenceOpSet;
+ private final String currentStatusMessage;
/**
* Message panel.
@@ -67,15 +67,14 @@ public class NewStatusMessageDialog
/**
* Creates an instance of NewStatusMessageDialog.
*
- * @param protocolProvider the ProtocolProviderService.
+ * @param currentStatusMessage the current status message.
*/
- public NewStatusMessageDialog (ProtocolProviderService protocolProvider,
+ public NewStatusMessageDialog (String currentStatusMessage,
StatusMessageMenu parentMenu)
{
super(false);
- presenceOpSet
- = protocolProvider.getOperationSet(OperationSetPresence.class);
+ this.currentStatusMessage = currentStatusMessage;
this.parentMenu = parentMenu;
this.init();
@@ -130,7 +129,7 @@ private void init()
dataPanel.add(messageLabel, BorderLayout.WEST);
- messageTextField.setText(presenceOpSet.getCurrentStatusMessage());
+ messageTextField.setText(currentStatusMessage);
dataPanel.add(messageTextField, BorderLayout.CENTER);
infoTitleLabel.setHorizontalAlignment(JLabel.CENTER);
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/presence/StatusMessageMenu.java b/src/net/java/sip/communicator/plugin/desktoputil/presence/StatusMessageMenu.java
index 99d19ab6b..d746039b7 100644
--- a/src/net/java/sip/communicator/plugin/desktoputil/presence/StatusMessageMenu.java
+++ b/src/net/java/sip/communicator/plugin/desktoputil/presence/StatusMessageMenu.java
@@ -99,8 +99,9 @@ public class StatusMessageMenu
/**
* All property change listeners registered so far.
+ * Static so we can communicate between status message menus.
*/
- private java.util.List
+ private static java.util.List
propertyChangeListeners = new ArrayList();
/**
@@ -326,8 +327,12 @@ public void actionPerformed(Object menuItem)
if (menuItem.equals(newMessageItem))
{
- NewStatusMessageDialog dialog
- = new NewStatusMessageDialog(protocolProvider, this);
+ OperationSetPresence presenceOpSet
+ = protocolProvider.getOperationSet(OperationSetPresence.class);
+
+ NewStatusMessageDialog dialog = new NewStatusMessageDialog(
+ presenceOpSet == null ?
+ "" : presenceOpSet.getCurrentStatusMessage(), this);
dialog.setLocation(
Toolkit.getDefaultToolkit().getScreenSize().width/2
@@ -931,9 +936,9 @@ else if(o instanceof CheckboxMenuItem)
*/
public void dispose()
{
+ removePropertyChangeListener(this);
+
protocolProvider = null;
- propertyChangeListeners.clear();
- propertyChangeListeners = null;
noMessageItem = null;
newMessageItem = null;