X-Git-Url: http://cgit.babelmonkeys.de/?p=jubjub.git;a=blobdiff_plain;f=src%2Fgui%2Fgtk%2FJubGtkRosterUI.m;h=99e51446e75486d6a6f97bafd732c0d9c83c5c8f;hp=e59a79ec6cd8d42de51d2e437eaf1041a644f74d;hb=62fb875be3885fcecbed4f614f01975cd200c9c8;hpb=aa496c511349d1a855e77122b3be22bc57e3a524 diff --git a/src/gui/gtk/JubGtkRosterUI.m b/src/gui/gtk/JubGtkRosterUI.m index e59a79e..99e5144 100644 --- a/src/gui/gtk/JubGtkRosterUI.m +++ b/src/gui/gtk/JubGtkRosterUI.m @@ -73,7 +73,7 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, } @implementation JubGtkRosterUI -- initWithClient: (JubChatClient*)client_ +- initWithClient: (JubChatClient*)client { self = [super init]; @@ -81,30 +81,30 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, GtkTreeView *roster_view; GtkBuilder *builder; - groupMap = [[OFMapTable alloc] + _groupMap = [[OFMapTable alloc] initWithKeyFunctions: keyFunctions valueFunctions: rowRefFunctions]; - contactMap = [[OFMutableDictionary alloc] init]; - client = [client_ retain]; + _contactMap = [[OFMutableDictionary alloc] init]; + _client = [client retain]; - [client.contactManager addDelegate: self]; + [_client.contactManager addDelegate: self]; builder = gtk_builder_new(); gtk_builder_add_from_file(builder, "data/gtk/roster.ui", NULL); gtk_builder_connect_signals(builder, NULL); - roster_window = + _roster_window = GTK_WIDGET(gtk_builder_get_object(builder, "RosterWindow")); - gtk_widget_show(roster_window); + gtk_widget_show(_roster_window); - roster_model = GTK_TREE_STORE(gtk_builder_get_object(builder, + _roster_model = GTK_TREE_STORE(gtk_builder_get_object(builder, "RosterTreeStore")); - roster_filter = GTK_TREE_MODEL_FILTER( + _roster_filter = GTK_TREE_MODEL_FILTER( gtk_builder_get_object(builder, "RosterTreeModelFilter")); - gtk_tree_model_filter_set_visible_func(roster_filter, + gtk_tree_model_filter_set_visible_func(_roster_filter, filter_roster_by_presence, NULL, NULL); roster_view = GTK_TREE_VIEW(gtk_builder_get_object(builder, @@ -113,11 +113,11 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, g_signal_connect(roster_view, "row_activated", G_CALLBACK(roster_row_activated), client); - presence_combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, + _presence_combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "PresenceComboBox")); - presence_combo_changed_handler_id = - g_signal_connect(presence_combo, "changed", + _presence_combo_changed_handler_id = + g_signal_connect(_presence_combo, "changed", G_CALLBACK(presence_changed), client.connection); g_object_unref(G_OBJECT(builder)); @@ -131,12 +131,12 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, - (void)dealloc { - [client.contactManager removeDelegate: self]; - [groupMap release]; - [contactMap release]; - [client release]; + [_client.contactManager removeDelegate: self]; + [_groupMap release]; + [_contactMap release]; + [_client release]; - gtk_widget_destroy(roster_window); + gtk_widget_destroy(_roster_window); [super dealloc]; } @@ -147,7 +147,7 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, if (message.body == nil || ![message.type isEqual: @"chat"]) return; - id chat = [client chatForContact: contact]; + id chat = [_client chatForContact: contact]; [chat addMessage: message.body sender: [message.from bareJID]]; } @@ -163,58 +163,64 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, OFString *bareJID = [item.JID bareJID]; OFMapTable *contactRows; - if (!(contactRows = [contactMap objectForKey: bareJID])) { + if (!(contactRows = [_contactMap objectForKey: bareJID])) { contactRows = [OFMapTable mapTableWithKeyFunctions: keyFunctions valueFunctions: rowRefFunctions]; - [contactMap setObject: contactRows - forKey: bareJID]; + [_contactMap setObject: contactRows + forKey: bareJID]; } - group_ref = [groupMap valueForKey: group]; + group_ref = [_groupMap valueForKey: group]; if (!group_ref) { // Create new group row - gtk_tree_store_append(roster_model, &group_iter, NULL); - gtk_tree_store_set(roster_model, &group_iter, + gtk_tree_store_append(_roster_model, &group_iter, NULL); + gtk_tree_store_set(_roster_model, &group_iter, 0, [group UTF8String], -1); group_path = gtk_tree_model_get_path(GTK_TREE_MODEL( - roster_model), &group_iter); + _roster_model), &group_iter); group_ref = gtk_tree_row_reference_new(GTK_TREE_MODEL( - roster_model), group_path); + _roster_model), group_path); - [groupMap setValue: group_ref - forKey: group]; + [_groupMap setValue: group_ref + forKey: group]; } else { // Get iter for existing group row group_path = gtk_tree_row_reference_get_path(group_ref); - gtk_tree_model_get_iter(GTK_TREE_MODEL(roster_model), + gtk_tree_model_get_iter(GTK_TREE_MODEL(_roster_model), &group_iter, group_path); } gtk_tree_path_free(group_path); // Create new contact row - gtk_tree_store_append(roster_model, &contact_iter, &group_iter); + gtk_tree_store_append(_roster_model, &contact_iter, + &group_iter); if (item.name) - gtk_tree_store_set(roster_model, &contact_iter, + gtk_tree_store_set(_roster_model, &contact_iter, 0, [item.name UTF8String], 1, [bareJID UTF8String], 2, "unavailable", -1); - else - gtk_tree_store_set(roster_model, &contact_iter, + else if (item.JID.node) + gtk_tree_store_set(_roster_model, &contact_iter, 0, [item.JID.node UTF8String], 1, [bareJID UTF8String], 2, "unavailable", -1); + else + gtk_tree_store_set(_roster_model, &contact_iter, + 0, [item.JID.domain UTF8String], + 1, [bareJID UTF8String], + 2, "unavailable", -1); contact_path = gtk_tree_model_get_path(GTK_TREE_MODEL( - roster_model), &contact_iter); + _roster_model), &contact_iter); contact_ref = gtk_tree_row_reference_new(GTK_TREE_MODEL( - roster_model), contact_path); + _roster_model), contact_path); gtk_tree_path_free(contact_path); @@ -231,32 +237,32 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, GtkTreePath *contact_path, *group_path; GtkTreeRowReference *contact_ref, *group_ref; OFString *bareJID = [item.JID bareJID]; - OFMapTable *contactRows = [contactMap objectForKey: bareJID]; + OFMapTable *contactRows = [_contactMap objectForKey: bareJID]; contact_ref = [contactRows valueForKey: group]; contact_path = gtk_tree_row_reference_get_path(contact_ref); - gtk_tree_model_get_iter(GTK_TREE_MODEL(roster_model), + gtk_tree_model_get_iter(GTK_TREE_MODEL(_roster_model), &contact_iter, contact_path); gtk_tree_path_free(contact_path); - gtk_tree_store_remove(roster_model, &contact_iter); + gtk_tree_store_remove(_roster_model, &contact_iter); - group_ref = [groupMap valueForKey: group]; + group_ref = [_groupMap valueForKey: group]; group_path = gtk_tree_row_reference_get_path(group_ref); - gtk_tree_model_get_iter(GTK_TREE_MODEL(roster_model), + gtk_tree_model_get_iter(GTK_TREE_MODEL(_roster_model), &group_iter, group_path); - if (!gtk_tree_model_iter_has_child(GTK_TREE_MODEL(roster_model), - &group_iter)) { - gtk_tree_store_remove(roster_model, &group_iter); - [groupMap removeValueForKey: group]; + if (!gtk_tree_model_iter_has_child(GTK_TREE_MODEL( + _roster_model), &group_iter)) { + gtk_tree_store_remove(_roster_model, &group_iter); + [_groupMap removeValueForKey: group]; } gtk_tree_path_free(group_path); [contactRows removeValueForKey: group]; if([contactRows count] == 0) - [contactMap removeObjectForKey: bareJID]; + [_contactMap removeObjectForKey: bareJID]; }); } @@ -343,32 +349,32 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, GtkTreePath *path; GtkTreeRowReference *ref; OFString *bareJID = [contact.rosterItem.JID bareJID]; - OFMapTable *contactRows = [contactMap objectForKey: bareJID]; + OFMapTable *contactRows = [_contactMap objectForKey: bareJID]; for (OFString *group in contact.rosterItem.groups) { ref = [contactRows valueForKey: group]; path = gtk_tree_row_reference_get_path(ref); - gtk_tree_model_get_iter(GTK_TREE_MODEL(roster_model), + gtk_tree_model_get_iter(GTK_TREE_MODEL(_roster_model), &iter, path); gtk_tree_path_free(path); if ([highPresence.type isEqual: @"available"]) { if (highPresence.show != nil) - gtk_tree_store_set(roster_model, &iter, + gtk_tree_store_set(_roster_model, &iter, 2, [highPresence.show UTF8String], -1); else - gtk_tree_store_set(roster_model, &iter, + gtk_tree_store_set(_roster_model, &iter, 2, "available", -1); } else - gtk_tree_store_set(roster_model, &iter, + gtk_tree_store_set(_roster_model, &iter, 2, "unavailable", -1); - gtk_tree_store_set(roster_model, &iter, + gtk_tree_store_set(_roster_model, &iter, 3, [tooltip UTF8String], -1); } - gtk_tree_model_filter_refilter(roster_filter); + gtk_tree_model_filter_refilter(_roster_filter); }); } @@ -389,24 +395,24 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, g_idle_add_block(^{ // Block the PresenceComboBox's changed handler, so it doesn't // fire and resend presence - g_signal_handler_block(presence_combo, - presence_combo_changed_handler_id); + g_signal_handler_block(_presence_combo, + _presence_combo_changed_handler_id); if ([presence.type isEqual: @"unavailable"]) - gtk_combo_box_set_active_id(presence_combo, + gtk_combo_box_set_active_id(_presence_combo, "unavailable"); else if (show == nil) - gtk_combo_box_set_active_id(presence_combo, + gtk_combo_box_set_active_id(_presence_combo, "available"); else - gtk_combo_box_set_active_id(presence_combo, + gtk_combo_box_set_active_id(_presence_combo, [show UTF8String]); // Unblock the changed handler - g_signal_handler_unblock(presence_combo, - presence_combo_changed_handler_id); + g_signal_handler_unblock(_presence_combo, + _presence_combo_changed_handler_id); - gtk_widget_set_tooltip_markup(GTK_WIDGET(presence_combo), + gtk_widget_set_tooltip_markup(GTK_WIDGET(_presence_combo), [tooltip UTF8String]); }); }