diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatTransportSelectorBox.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatTransportSelectorBox.java index 47d004baa..929ee3e1f 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatTransportSelectorBox.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatTransportSelectorBox.java @@ -355,6 +355,21 @@ public void setSelected(ChatTransport chatTransport) new ImageIcon(createTransportStatusImage(chatTransport))); } + /** + * Do we have a selected transport. + * @return do we have a selected transport. + */ + boolean hasSelectedTransport() + { + for(JCheckBoxMenuItem item : transportMenuItems.values()) + { + if(item.isSelected()) + return true; + } + + return false; + } + /** * Returns the protocol menu. * diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java index babab236b..23f66e2cd 100755 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatWritePanel.java @@ -1106,7 +1106,7 @@ public void run() // Schedules the timer. if(chatTransport.getResourceName() != null) { - OutdatedResourceTimerTask task + OutdatedResourceTimerTask task = new OutdatedResourceTimerTask(); outdatedResourceTimer = new java.util.Timer(); outdatedResourceTimer.schedule(task, timeout); @@ -1115,7 +1115,13 @@ public void run() // Sets the new resource transport is really effective (i.e. we have // received a message from this resource). - if(transportSelectorBox != null && isMessageOrFileTransferReceived) + // if we do not have any selected resource, or the currently selected + // if offline + if(transportSelectorBox != null + && (isMessageOrFileTransferReceived + || (!transportSelectorBox.hasSelectedTransport() + || !chatPanel.getChatSession().getCurrentChatTransport() + .getStatus().isOnline()))) { transportSelectorBox.setSelected(chatTransport); } @@ -1493,7 +1499,9 @@ public void run() // We found the bare ID, then set it as the current resource // transport. - if(transport.getResourceName() == null) + // choose only online resources + if(transport.getResourceName() == null + && transport.getStatus().isOnline()) { isOutdatedResource = false; setSelectedChatTransport(transport, true); diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java b/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java index 23f15e64b..8cdb44929 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/MetaContactChatSession.java @@ -761,6 +761,8 @@ private void removeChatTransports(Contact contact) } contact.removeResourceListener(this); + + currentChatTransport = null; } /**