diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java index 3ec57faa2..3097ed4ec 100755 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java @@ -1772,4 +1772,15 @@ private static String getContactAvatar( return GuiActivator.getResources().getImageURL( "service.gui.DEFAULT_USER_PHOTO_SMALL").toString(); } + + /** + * Releases the resources allocated by this instance throughout its lifetime + * and prepares it for garbage collection. + */ + public void dispose() + { + super.dispose(); + + clear(); + } } \ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatPanel.java index d39b7a0f1..0633c2cdc 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatPanel.java @@ -906,7 +906,7 @@ private void appendChatMessage(ChatMessage chatMessage) * Passes the message to the contained ChatConversationPanel * for processing and replaces the specified message with this one. * - * @param chatMessage The message used as a correction. + * @param message The message used as a correction. */ private void applyMessageCorrection(ChatMessage message) { diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIFilterQuery.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIFilterQuery.java index d4072f480..20f38d0ad 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/UIFilterQuery.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/UIFilterQuery.java @@ -69,6 +69,15 @@ public class UIFilterQuery */ private final ContactList contactList; + /** + * Map of the created show more contacts for a query. + * We stored them, so we can remove them (sometimes those + * contacts are not added to UI, so they are not removed and + * not cleared) + */ + private final Map showMoreContactMap + = new HashMap(); + /** * Creates an instance of UIFilterQuery by specifying the parent * ContactList. @@ -299,6 +308,14 @@ private void cancelQuery(Object query) contactQuery.removeContactQueryListener(contactList); if (!isSucceeded && contactQuery.getQueryResults().size() > 0) isSucceeded = true; + + // removes ShowMoreContact and clears it + ShowMoreContact showMoreContact + = showMoreContactMap.remove(contactQuery); + if(showMoreContact != null) + { + showMoreContact.setContactNode(null); + } } else if (query instanceof MetaContactQuery) { @@ -343,6 +360,7 @@ private void contactReceived(ContactQuery query, SourceContact contact) ShowMoreContact moreInfoContact = new ShowMoreContact(query, queryResults, getMaxResultShown()); + showMoreContactMap.put(query, moreInfoContact); ContactSourceService contactSource = query.getContactSource(); diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java index 0ce9f0f7b..0c1635752 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/contactsource/ShowMoreContact.java @@ -219,6 +219,13 @@ public ContactNode getContactNode() public void setContactNode(ContactNode contactNode) { this.contactNode = contactNode; + + // contactNode is null, when the the ui contact is removed/cleared + // we must free resources + if(contactNode == null) + { + GuiActivator.getContactList().removeContactListListener(this); + } } /** diff --git a/src/net/java/sip/communicator/plugin/generalconfig/autoaway/AutoAwayConfigurationPanel.java b/src/net/java/sip/communicator/plugin/generalconfig/autoaway/AutoAwayConfigurationPanel.java index 2e61953c8..3c5a144d4 100644 --- a/src/net/java/sip/communicator/plugin/generalconfig/autoaway/AutoAwayConfigurationPanel.java +++ b/src/net/java/sip/communicator/plugin/generalconfig/autoaway/AutoAwayConfigurationPanel.java @@ -11,6 +11,7 @@ import javax.swing.*; import javax.swing.event.*; +import javax.swing.text.*; import net.java.sip.communicator.plugin.generalconfig.*; import net.java.sip.communicator.util.swing.*; @@ -102,6 +103,15 @@ public void stateChanged(ChangeEvent e) "plugin.autoaway.AWAY_MINUTES"))); timerPanel.add(timer); + try + { + // changes that are valid will be saved immediately while typing + ((DefaultFormatter)((JSpinner.DefaultEditor)timer.getEditor()) + .getTextField().getFormatter()).setCommitsOnValidEdit(true); + } + catch(Throwable t) + {} + JPanel mainPanel = new TransparentPanel(new BorderLayout(5, 5)); mainPanel.add(enable, BorderLayout.NORTH);