public void OpenChatWindow(JID jid, bool isMucUser, bool focus, ChatHandlerEvent callback) { QApplication.Invoke(delegate { IChatHandler handler = null; string windowJid = isMucUser ? jid.ToString() : jid.Bare; lock (m_ChatWindows) { if (!m_ChatWindows.ContainsKey(windowJid)) { handler = new ChatHandler(m_Account, isMucUser, windowJid); var window = new ChatWindow(handler); window.Closed += HandleChatWindowClosed; m_ChatWindows.Add(windowJid, window); Gui.TabbedChatsWindow.AddChatWindow(window, focus); } else { var window = m_ChatWindows[windowJid]; if (focus) { Gui.TabbedChatsWindow.FocusChatWindow(window); } handler = (ChatHandler)window.Handler; } } if (callback != null) { callback(handler); } }); }