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)