From 25cb5d0919011ec9f2f97994bf63c9049db95521 Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Wed, 7 Jul 2010 16:25:43 +0000 Subject: [PATCH] Fix issue #687 looses track of some chat windows (when using separate window for every chat). --- .../impl/gui/main/chat/ChatWindow.java | 41 +++++++++++++++++++ .../impl/gui/main/chat/ChatWindowManager.java | 6 ++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindow.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindow.java index ddcc062ef..2d7f01f3c 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindow.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindow.java @@ -477,6 +477,47 @@ public ChatPanel getCurrentChatPanel() return null; } + /** + * Returns the currently available chat panels. + * + * @return the currently available chat panels. + */ + public java.util.List getChatPanels() + { + ArrayList chatPanels = new ArrayList(); + + if(getChatTabCount() > 0) + { + int componentCount = chatTabbedPane.getComponentCount(); + + for (int i = 0; i < componentCount; i ++) + { + Component c = chatTabbedPane.getComponent(i); + + if(c instanceof ChatPanel) + { + chatPanels.add((ChatPanel)c); + } + } + } + else + { + int componentCount = mainPanel.getComponentCount(); + + for (int i = 0; i < componentCount; i ++) + { + Component c = mainPanel.getComponent(i); + + if(c instanceof ChatPanel) + { + chatPanels.add((ChatPanel)c); + } + } + } + + return chatPanels; + } + /** * Returns the tab count of the chat tabbed pane. Meant to be used when in * "Group chat windows" mode. diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java index 062023cf8..28739c25c 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWindowManager.java @@ -982,12 +982,14 @@ private boolean containsChat(ChatPanel chatPanel) */ private void disposeChatWindow(ChatWindow chatWindow) { - for (ChatPanel chatPanel : chatPanels) + List chatPanelsToDispose = chatWindow.getChatPanels(); + + for (ChatPanel chatPanel : chatPanelsToDispose) chatPanel.dispose(); synchronized (chatPanels) { - chatPanels.clear(); + chatPanels.removeAll(chatPanelsToDispose); } if (chatWindow.getChatCount() > 0)