X-Git-Url: http://cgit.babelmonkeys.de/?p=jubjub.git;a=blobdiff_plain;f=src%2Fgui%2Fgtk%2FJubGtkRosterUI.m;h=e474bf9bc2438b946860a277f5e477960a27ea73;hp=4102e3432e3cf0307ffb90c9ff4908a613b1d4a2;hb=4d4a2b07fe52fa2d9e21b697dcf85c73bdd537a9;hpb=92e36a6a8e999e69c1750f1215dfe50ca0088035 diff --git a/src/gui/gtk/JubGtkRosterUI.m b/src/gui/gtk/JubGtkRosterUI.m index 4102e34..e474bf9 100644 --- a/src/gui/gtk/JubGtkRosterUI.m +++ b/src/gui/gtk/JubGtkRosterUI.m @@ -9,12 +9,13 @@ static void roster_row_activated(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer data) { - JubGtkRosterUI *roster = data; + OFAutoreleasePool *pool; + XMPPContact *contact; + JubChatClient *client = data; GtkTreeIter row_iter; GtkTreeModel *tree_model; gchar *jid_s; - XMPPJID *jid; - OFAutoreleasePool *pool; + OFString *jid; tree_model = gtk_tree_view_get_model(tree_view); gtk_tree_model_get_iter(tree_model, &row_iter, path); @@ -24,10 +25,12 @@ static void roster_row_activated(GtkTreeView *tree_view, GtkTreePath *path, if (!jid_s) return; pool = [OFAutoreleasePool new]; - jid = [XMPPJID JIDWithString: [OFString stringWithUTF8String: jid_s]]; - [roster performSelectorOnMainThread: @selector(chatForJID:) - withObject: jid + jid = [OFString stringWithUTF8String: jid_s]; + contact = [client.contactManager.contacts objectForKey: jid]; + + [client performSelectorOnMainThread: @selector(chatForContact:) + withObject: contact waitUntilDone: NO]; [pool release]; } @@ -82,7 +85,6 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, initWithKeyFunctions: keyFunctions valueFunctions: rowRefFunctions]; contactMap = [[OFMutableDictionary alloc] init]; - chatMap = [[OFMutableDictionary alloc] init]; client = [client_ retain]; [client.contactManager addDelegate: self]; @@ -109,7 +111,7 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, "RosterTreeView")); g_signal_connect(roster_view, "row_activated", - G_CALLBACK(roster_row_activated), self); + G_CALLBACK(roster_row_activated), client); presence_combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "PresenceComboBox")); @@ -132,7 +134,6 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, [client.contactManager removeDelegate: self]; [groupMap release]; [contactMap release]; - [chatMap release]; [client release]; gtk_widget_destroy(roster_window); @@ -140,46 +141,13 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, [super dealloc]; } -// FIXME: This needs to move somewhere else -- (JubGtkChatUI*)chatForJID: (XMPPJID*)jid -{ - OFAutoreleasePool *pool = [OFAutoreleasePool new]; - JubGtkChatUI *chat = - [chatMap objectForKey: [jid bareJID]]; - if (chat == nil) { - OFString * title = [@"Chat with " stringByAppendingString: - [jid bareJID]]; - - chat = [[[JubGtkChatUI alloc] - initWithTitle: title - closeBlock: ^{ - [chatMap removeObjectForKey: [jid bareJID]]; - } - sendBlock: ^(OFString *text) { - XMPPMessage *msg = - [XMPPMessage messageWithType: @"chat"]; - msg.to = jid; - msg.body = text; - [client.connection sendStanza: msg]; - } - ] autorelease]; - - [chatMap setObject: chat - forKey: [jid bareJID]]; - } - - [pool release]; - - return chat; -} - - (void)contact: (XMPPContact*)contact didSendMessage: (XMPPMessage*)message { if (message.body == nil || ![message.type isEqual: @"chat"]) return; - JubGtkChatUI *chat = [self chatForJID: message.from]; + id chat = [client chatForContact: contact]; [chat addMessage: message.body sender: [message.from bareJID]]; }