comparison pidgin/gtkroomlist.c @ 32393:5dafa68c8eb0

Some struct hiding. What a pain.
author Mark Doliner <mark@kingant.net>
date Tue, 23 Aug 2011 05:43:51 +0000
parents 917c597beb97
children 2ec94166be43
comparison
equal deleted inserted replaced
32392:5c174d124e29 32393:5dafa68c8eb0
89 89
90 if (dialog->pg_update_to > 0) 90 if (dialog->pg_update_to > 0)
91 purple_timeout_remove(dialog->pg_update_to); 91 purple_timeout_remove(dialog->pg_update_to);
92 92
93 if (dialog->roomlist) { 93 if (dialog->roomlist) {
94 PidginRoomlist *rl = dialog->roomlist->ui_data; 94 PidginRoomlist *rl = purple_roomlist_get_ui_data(dialog->roomlist);
95 95
96 if (dialog->pg_update_to > 0) 96 if (dialog->pg_update_to > 0)
97 /* yes, that's right, unref it twice. */ 97 /* yes, that's right, unref it twice. */
98 purple_roomlist_unref(dialog->roomlist); 98 purple_roomlist_unref(dialog->roomlist);
99 99
113 { 113 {
114 gboolean change = (account != dialog->account); 114 gboolean change = (account != dialog->account);
115 dialog->account = account; 115 dialog->account = account;
116 116
117 if (change && dialog->roomlist) { 117 if (change && dialog->roomlist) {
118 PidginRoomlist *rl = dialog->roomlist->ui_data; 118 PidginRoomlist *rl = purple_roomlist_get_ui_data(dialog->roomlist);
119 if (rl->tree) { 119 if (rl->tree) {
120 gtk_widget_destroy(rl->tree); 120 gtk_widget_destroy(rl->tree);
121 rl->tree = NULL; 121 rl->tree = NULL;
122 } 122 }
123 purple_roomlist_unref(dialog->roomlist); 123 purple_roomlist_unref(dialog->roomlist);
133 gc = purple_account_get_connection(dialog->account); 133 gc = purple_account_get_connection(dialog->account);
134 if (!gc) 134 if (!gc)
135 return; 135 return;
136 136
137 if (dialog->roomlist != NULL) { 137 if (dialog->roomlist != NULL) {
138 rl = dialog->roomlist->ui_data; 138 rl = purple_roomlist_get_ui_data(dialog->roomlist);
139 gtk_widget_destroy(rl->tree); 139 gtk_widget_destroy(rl->tree);
140 purple_roomlist_unref(dialog->roomlist); 140 purple_roomlist_unref(dialog->roomlist);
141 } 141 }
142 142
143 dialog->roomlist = purple_roomlist_get_list(gc); 143 dialog->roomlist = purple_roomlist_get_list(gc);
144 if (!dialog->roomlist) 144 if (!dialog->roomlist)
145 return; 145 return;
146 purple_roomlist_ref(dialog->roomlist); 146 purple_roomlist_ref(dialog->roomlist);
147 rl = dialog->roomlist->ui_data; 147 rl = purple_roomlist_get_ui_data(dialog->roomlist);
148 rl->dialog = dialog; 148 rl->dialog = dialog;
149 149
150 if (dialog->account_widget) 150 if (dialog->account_widget)
151 gtk_widget_set_sensitive(dialog->account_widget, FALSE); 151 gtk_widget_set_sensitive(dialog->account_widget, FALSE);
152 152
201 201
202 if (gtk_tree_selection_get_selected(selection, NULL, &iter)) { 202 if (gtk_tree_selection_get_selected(selection, NULL, &iter)) {
203 val.g_type = 0; 203 val.g_type = 0;
204 gtk_tree_model_get_value(GTK_TREE_MODEL(grl->model), &iter, ROOM_COLUMN, &val); 204 gtk_tree_model_get_value(GTK_TREE_MODEL(grl->model), &iter, ROOM_COLUMN, &val);
205 room = g_value_get_pointer(&val); 205 room = g_value_get_pointer(&val);
206 if (!room || !(room->type & PURPLE_ROOMLIST_ROOMTYPE_ROOM)) { 206 if (!room || !(purple_roomlist_room_get_type(room) & PURPLE_ROOMLIST_ROOMTYPE_ROOM)) {
207 gtk_widget_set_sensitive(dialog->join_button, FALSE); 207 gtk_widget_set_sensitive(dialog->join_button, FALSE);
208 gtk_widget_set_sensitive(dialog->add_button, FALSE); 208 gtk_widget_set_sensitive(dialog->add_button, FALSE);
209 return; 209 return;
210 } 210 }
211 211
226 } 226 }
227 227
228 static void do_add_room_cb(GtkWidget *w, struct _menu_cb_info *info) 228 static void do_add_room_cb(GtkWidget *w, struct _menu_cb_info *info)
229 { 229 {
230 char *name; 230 char *name;
231 PurpleConnection *gc = purple_account_get_connection(info->list->account); 231 PurpleAccount *account = purple_roomlist_get_account(info->list);
232 PurpleConnection *gc = purple_account_get_connection(account);
232 PurplePluginProtocolInfo *prpl_info = NULL; 233 PurplePluginProtocolInfo *prpl_info = NULL;
233 234
234 if(gc != NULL) 235 if(gc != NULL)
235 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); 236 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
236 237
237 if(prpl_info != NULL && prpl_info->roomlist_room_serialize) 238 if(prpl_info != NULL && prpl_info->roomlist_room_serialize)
238 name = prpl_info->roomlist_room_serialize(info->room); 239 name = prpl_info->roomlist_room_serialize(info->room);
239 else 240 else
240 name = g_strdup(info->room->name); 241 name = g_strdup(purple_roomlist_room_get_name(info->room));
241 242
242 purple_blist_request_add_chat(info->list->account, NULL, NULL, name); 243 purple_blist_request_add_chat(account, NULL, NULL, name);
243 244
244 g_free(name); 245 g_free(name);
245 } 246 }
246 247
247 static void add_room_to_blist_cb(GtkButton *button, PidginRoomlistDialog *dialog) 248 static void add_room_to_blist_cb(GtkButton *button, PidginRoomlistDialog *dialog)
248 { 249 {
249 PurpleRoomlist *rl = dialog->roomlist; 250 PurpleRoomlist *rl = dialog->roomlist;
250 PidginRoomlist *grl = rl->ui_data; 251 PidginRoomlist *grl = purple_roomlist_get_ui_data(rl);
251 struct _menu_cb_info *info = g_object_get_data(G_OBJECT(button), "room-info"); 252 struct _menu_cb_info *info = g_object_get_data(G_OBJECT(button), "room-info");
252 253
253 if(info != NULL) 254 if(info != NULL)
254 do_add_room_cb(grl->tree, info); 255 do_add_room_cb(grl->tree, info);
255 } 256 }
260 } 261 }
261 262
262 static void join_button_cb(GtkButton *button, PidginRoomlistDialog *dialog) 263 static void join_button_cb(GtkButton *button, PidginRoomlistDialog *dialog)
263 { 264 {
264 PurpleRoomlist *rl = dialog->roomlist; 265 PurpleRoomlist *rl = dialog->roomlist;
265 PidginRoomlist *grl = rl->ui_data; 266 PidginRoomlist *grl = purple_roomlist_get_ui_data(rl);
266 struct _menu_cb_info *info = g_object_get_data(G_OBJECT(button), "room-info"); 267 struct _menu_cb_info *info = g_object_get_data(G_OBJECT(button), "room-info");
267 268
268 if(info != NULL) 269 if(info != NULL)
269 do_join_cb(grl->tree, info); 270 do_join_cb(grl->tree, info);
270 } 271 }
271 272
272 static void row_activated_cb(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *arg2, 273 static void row_activated_cb(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *arg2,
273 PurpleRoomlist *list) 274 PurpleRoomlist *list)
274 { 275 {
275 PidginRoomlist *grl = list->ui_data; 276 PidginRoomlist *grl = purple_roomlist_get_ui_data(list);
276 GtkTreeIter iter; 277 GtkTreeIter iter;
277 PurpleRoomlistRoom *room; 278 PurpleRoomlistRoom *room;
278 GValue val; 279 GValue val;
279 struct _menu_cb_info info; 280 struct _menu_cb_info info;
280 281
281 gtk_tree_model_get_iter(GTK_TREE_MODEL(grl->model), &iter, path); 282 gtk_tree_model_get_iter(GTK_TREE_MODEL(grl->model), &iter, path);
282 val.g_type = 0; 283 val.g_type = 0;
283 gtk_tree_model_get_value(GTK_TREE_MODEL(grl->model), &iter, ROOM_COLUMN, &val); 284 gtk_tree_model_get_value(GTK_TREE_MODEL(grl->model), &iter, ROOM_COLUMN, &val);
284 room = g_value_get_pointer(&val); 285 room = g_value_get_pointer(&val);
285 if (!room || !(room->type & PURPLE_ROOMLIST_ROOMTYPE_ROOM)) 286 if (!room || !(purple_roomlist_room_get_type(room) & PURPLE_ROOMLIST_ROOMTYPE_ROOM))
286 return; 287 return;
287 288
288 info.list = list; 289 info.list = list;
289 info.room = room; 290 info.room = room;
290 291
292 } 293 }
293 294
294 static gboolean room_click_cb(GtkWidget *tv, GdkEventButton *event, PurpleRoomlist *list) 295 static gboolean room_click_cb(GtkWidget *tv, GdkEventButton *event, PurpleRoomlist *list)
295 { 296 {
296 GtkTreePath *path; 297 GtkTreePath *path;
297 PidginRoomlist *grl = list->ui_data; 298 PidginRoomlist *grl = purple_roomlist_get_ui_data(list);
298 GValue val; 299 GValue val;
299 PurpleRoomlistRoom *room; 300 PurpleRoomlistRoom *room;
300 GtkTreeIter iter; 301 GtkTreeIter iter;
301 GtkWidget *menu; 302 GtkWidget *menu;
302 static struct _menu_cb_info info; /* XXX? */ 303 static struct _menu_cb_info info; /* XXX? */
311 gtk_tree_path_free(path); 312 gtk_tree_path_free(path);
312 val.g_type = 0; 313 val.g_type = 0;
313 gtk_tree_model_get_value (GTK_TREE_MODEL(grl->model), &iter, ROOM_COLUMN, &val); 314 gtk_tree_model_get_value (GTK_TREE_MODEL(grl->model), &iter, ROOM_COLUMN, &val);
314 room = g_value_get_pointer(&val); 315 room = g_value_get_pointer(&val);
315 316
316 if (!room || !(room->type & PURPLE_ROOMLIST_ROOMTYPE_ROOM)) 317 if (!room || !(purple_roomlist_room_get_type(room) & PURPLE_ROOMLIST_ROOMTYPE_ROOM))
317 return FALSE; 318 return FALSE;
318 319
319 info.list = list; 320 info.list = list;
320 info.room = room; 321 info.room = room;
321 322
339 340
340 val.g_type = 0; 341 val.g_type = 0;
341 gtk_tree_model_get_value(gtk_tree_view_get_model(treeview), arg1, ROOM_COLUMN, &val); 342 gtk_tree_model_get_value(gtk_tree_view_get_model(treeview), arg1, ROOM_COLUMN, &val);
342 category = g_value_get_pointer(&val); 343 category = g_value_get_pointer(&val);
343 344
344 if (!category->expanded_once) { 345 if (!purple_roomlist_room_get_expanded_once(category)) {
345 purple_roomlist_expand_category(list, category); 346 purple_roomlist_expand_category(list, category);
346 category->expanded_once = TRUE; 347 purple_roomlist_room_set_expanded_once(category, TRUE);
347 } 348 }
348 } 349 }
349 350
350 #define SMALL_SPACE 6 351 #define SMALL_SPACE 6
351 #define TOOLTIP_BORDER 12 352 #define TOOLTIP_BORDER 12
352 353
353 static gboolean 354 static gboolean
354 pidgin_roomlist_paint_tooltip(GtkWidget *widget, gpointer user_data) 355 pidgin_roomlist_paint_tooltip(GtkWidget *widget, gpointer user_data)
355 { 356 {
356 PurpleRoomlist *list = user_data; 357 PurpleRoomlist *list = user_data;
357 PidginRoomlist *grl = list->ui_data; 358 PidginRoomlist *grl = purple_roomlist_get_ui_data(list);
358 GtkStyle *style; 359 GtkStyle *style;
359 int current_height, max_width; 360 int current_height, max_width;
360 int max_text_width; 361 int max_text_width;
361 GtkTextDirection dir = gtk_widget_get_direction(GTK_WIDGET(grl->tree)); 362 GtkTextDirection dir = gtk_widget_get_direction(GTK_WIDGET(grl->tree));
362 363
391 return FALSE; 392 return FALSE;
392 } 393 }
393 394
394 static gboolean pidgin_roomlist_create_tip(PurpleRoomlist *list, GtkTreePath *path) 395 static gboolean pidgin_roomlist_create_tip(PurpleRoomlist *list, GtkTreePath *path)
395 { 396 {
396 PidginRoomlist *grl = list->ui_data; 397 PidginRoomlist *grl = purple_roomlist_get_ui_data(list);
397 PurpleRoomlistRoom *room; 398 PurpleRoomlistRoom *room;
398 GtkTreeIter iter; 399 GtkTreeIter iter;
399 GValue val; 400 GValue val;
400 gchar *name, *tmp, *node_name; 401 gchar *name, *tmp, *node_name;
401 GString *tooltip_text = NULL; 402 GString *tooltip_text = NULL;
412 413
413 val.g_type = 0; 414 val.g_type = 0;
414 gtk_tree_model_get_value(GTK_TREE_MODEL(grl->model), &iter, ROOM_COLUMN, &val); 415 gtk_tree_model_get_value(GTK_TREE_MODEL(grl->model), &iter, ROOM_COLUMN, &val);
415 room = g_value_get_pointer(&val); 416 room = g_value_get_pointer(&val);
416 417
417 if (!room || !(room->type & PURPLE_ROOMLIST_ROOMTYPE_ROOM)) 418 if (!room || !(purple_roomlist_room_get_type(room) & PURPLE_ROOMLIST_ROOMTYPE_ROOM))
418 return FALSE; 419 return FALSE;
419 420
420 tooltip_text = g_string_new(""); 421 tooltip_text = g_string_new("");
421 gtk_tree_model_get(GTK_TREE_MODEL(grl->model), &iter, NAME_COLUMN, &name, -1); 422 gtk_tree_model_get(GTK_TREE_MODEL(grl->model), &iter, NAME_COLUMN, &name, -1);
422 423
423 for (j = NUM_OF_COLUMNS, l = room->fields, k = list->fields; l && k; j++, l = l->next, k = k->next) { 424 for (j = NUM_OF_COLUMNS,
425 l = purple_roomlist_room_get_fields(room),
426 k = purple_roomlist_get_fields(list);
427 l && k; j++, l = l->next, k = k->next)
428 {
424 PurpleRoomlistField *f = k->data; 429 PurpleRoomlistField *f = k->data;
425 gchar *label; 430 gchar *label;
426 if (f->hidden) 431 if (purple_roomlist_field_get_hidden(f))
427 continue; 432 continue;
428 label = g_markup_escape_text(f->label, -1); 433 label = g_markup_escape_text(purple_roomlist_field_get_label(f), -1);
429 switch (f->type) { 434 switch (purple_roomlist_field_get_type(f)) {
430 case PURPLE_ROOMLIST_FIELD_BOOL: 435 case PURPLE_ROOMLIST_FIELD_BOOL:
431 g_string_append_printf(tooltip_text, "%s<b>%s:</b> %s", first ? "" : "\n", label, l->data ? "True" : "False"); 436 g_string_append_printf(tooltip_text, "%s<b>%s:</b> %s", first ? "" : "\n", label, l->data ? "True" : "False");
432 break; 437 break;
433 case PURPLE_ROOMLIST_FIELD_INT: 438 case PURPLE_ROOMLIST_FIELD_INT:
434 g_string_append_printf(tooltip_text, "%s<b>%s:</b> %d", first ? "" : "\n", label, GPOINTER_TO_INT(l->data)); 439 g_string_append_printf(tooltip_text, "%s<b>%s:</b> %d", first ? "" : "\n", label, GPOINTER_TO_INT(l->data));
476 static gboolean 481 static gboolean
477 pidgin_roomlist_create_tooltip(GtkWidget *widget, GtkTreePath *path, 482 pidgin_roomlist_create_tooltip(GtkWidget *widget, GtkTreePath *path,
478 gpointer data, int *w, int *h) 483 gpointer data, int *w, int *h)
479 { 484 {
480 PurpleRoomlist *list = data; 485 PurpleRoomlist *list = data;
481 PidginRoomlist *grl = list->ui_data; 486 PidginRoomlist *grl = purple_roomlist_get_ui_data(list);
482 grl->tipwindow = widget; 487 grl->tipwindow = widget;
483 if (!pidgin_roomlist_create_tip(data, path)) 488 if (!pidgin_roomlist_create_tip(data, path))
484 return FALSE; 489 return FALSE;
485 if (w) 490 if (w)
486 *w = TOOLTIP_BORDER + SMALL_SPACE + 491 *w = TOOLTIP_BORDER + SMALL_SPACE +
620 625
621 static void pidgin_roomlist_new(PurpleRoomlist *list) 626 static void pidgin_roomlist_new(PurpleRoomlist *list)
622 { 627 {
623 PidginRoomlist *rl = g_new0(PidginRoomlist, 1); 628 PidginRoomlist *rl = g_new0(PidginRoomlist, 1);
624 629
625 list->ui_data = rl; 630 purple_roomlist_set_ui_data(list, rl);
626 631
627 rl->cats = g_hash_table_new_full(NULL, NULL, NULL, (GDestroyNotify)gtk_tree_row_reference_free); 632 rl->cats = g_hash_table_new_full(NULL, NULL, NULL, (GDestroyNotify)gtk_tree_row_reference_free);
628 633
629 roomlists = g_list_append(roomlists, list); 634 roomlists = g_list_append(roomlists, list);
630 } 635 }
683 return result; 688 return result;
684 } 689 }
685 690
686 static void pidgin_roomlist_set_fields(PurpleRoomlist *list, GList *fields) 691 static void pidgin_roomlist_set_fields(PurpleRoomlist *list, GList *fields)
687 { 692 {
688 PidginRoomlist *grl = list->ui_data; 693 PidginRoomlist *grl = purple_roomlist_get_ui_data(list);
689 gint columns = NUM_OF_COLUMNS; 694 gint columns = NUM_OF_COLUMNS;
690 int j; 695 int j;
691 GtkTreeStore *model; 696 GtkTreeStore *model;
692 GtkWidget *tree; 697 GtkWidget *tree;
693 GtkCellRenderer *renderer; 698 GtkCellRenderer *renderer;
705 types[ROOM_COLUMN] = G_TYPE_POINTER; 710 types[ROOM_COLUMN] = G_TYPE_POINTER;
706 711
707 for (j = NUM_OF_COLUMNS, l = fields; l; l = l->next, j++) { 712 for (j = NUM_OF_COLUMNS, l = fields; l; l = l->next, j++) {
708 PurpleRoomlistField *f = l->data; 713 PurpleRoomlistField *f = l->data;
709 714
710 switch (f->type) { 715 switch (purple_roomlist_field_get_type(f)) {
711 case PURPLE_ROOMLIST_FIELD_BOOL: 716 case PURPLE_ROOMLIST_FIELD_BOOL:
712 types[j] = G_TYPE_BOOLEAN; 717 types[j] = G_TYPE_BOOLEAN;
713 break; 718 break;
714 case PURPLE_ROOMLIST_FIELD_INT: 719 case PURPLE_ROOMLIST_FIELD_INT:
715 types[j] = G_TYPE_INT; 720 types[j] = G_TYPE_INT;
747 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); 752 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
748 753
749 for (j = NUM_OF_COLUMNS, l = fields; l; l = l->next, j++) { 754 for (j = NUM_OF_COLUMNS, l = fields; l; l = l->next, j++) {
750 PurpleRoomlistField *f = l->data; 755 PurpleRoomlistField *f = l->data;
751 756
752 if (f->hidden) 757 if (purple_roomlist_field_get_hidden(f))
753 continue; 758 continue;
754 759
755 renderer = gtk_cell_renderer_text_new(); 760 renderer = gtk_cell_renderer_text_new();
756 column = gtk_tree_view_column_new_with_attributes(f->label, renderer, 761 column = gtk_tree_view_column_new_with_attributes(
757 "text", j, NULL); 762 purple_roomlist_field_get_label(f), renderer,
763 "text", j, NULL);
758 gtk_tree_view_column_set_sizing(GTK_TREE_VIEW_COLUMN(column), 764 gtk_tree_view_column_set_sizing(GTK_TREE_VIEW_COLUMN(column),
759 GTK_TREE_VIEW_COLUMN_GROW_ONLY); 765 GTK_TREE_VIEW_COLUMN_GROW_ONLY);
760 gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE); 766 gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
761 gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), j); 767 gtk_tree_view_column_set_sort_column_id(GTK_TREE_VIEW_COLUMN(column), j);
762 gtk_tree_view_column_set_reorderable(GTK_TREE_VIEW_COLUMN(column), TRUE); 768 gtk_tree_view_column_set_reorderable(GTK_TREE_VIEW_COLUMN(column), TRUE);
763 if (f->type == PURPLE_ROOMLIST_FIELD_INT) { 769 if (purple_roomlist_field_get_type(f) == PURPLE_ROOMLIST_FIELD_INT) {
764 gtk_tree_view_column_set_cell_data_func(column, renderer, int_cell_data_func, 770 gtk_tree_view_column_set_cell_data_func(column, renderer, int_cell_data_func,
765 GINT_TO_POINTER(j), NULL); 771 GINT_TO_POINTER(j), NULL);
766 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model), j, int_sort_func, 772 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model), j, int_sort_func,
767 GINT_TO_POINTER(j), NULL); 773 GINT_TO_POINTER(j), NULL);
768 } 774 }
787 } 793 }
788 794
789 static gboolean pidgin_progress_bar_pulse(gpointer data) 795 static gboolean pidgin_progress_bar_pulse(gpointer data)
790 { 796 {
791 PurpleRoomlist *list = data; 797 PurpleRoomlist *list = data;
792 PidginRoomlist *rl = list->ui_data; 798 PidginRoomlist *rl = purple_roomlist_get_ui_data(list);
793 799
794 if (!rl || !rl->dialog || !rl->dialog->pg_needs_pulse) { 800 if (!rl || !rl->dialog || !rl->dialog->pg_needs_pulse) {
795 if (rl && rl->dialog) 801 if (rl && rl->dialog)
796 rl->dialog->pg_update_to = 0; 802 rl->dialog->pg_update_to = 0;
797 purple_roomlist_unref(list); 803 purple_roomlist_unref(list);
803 return TRUE; 809 return TRUE;
804 } 810 }
805 811
806 static void pidgin_roomlist_add_room(PurpleRoomlist *list, PurpleRoomlistRoom *room) 812 static void pidgin_roomlist_add_room(PurpleRoomlist *list, PurpleRoomlistRoom *room)
807 { 813 {
808 PidginRoomlist *rl = list->ui_data; 814 PidginRoomlist *rl = purple_roomlist_get_ui_data(list);
809 GtkTreeRowReference *rr, *parentrr = NULL; 815 GtkTreeRowReference *rr, *parentrr = NULL;
810 GtkTreePath *path; 816 GtkTreePath *path;
811 GtkTreeIter iter, parent, child; 817 GtkTreeIter iter, parent, child;
812 GList *l, *k; 818 GList *l, *k;
813 int j; 819 int j;
814 gboolean append = TRUE; 820 gboolean append = TRUE;
815 821
816 rl->total_rooms++; 822 rl->total_rooms++;
817 if (room->type == PURPLE_ROOMLIST_ROOMTYPE_ROOM) 823 if (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_ROOM)
818 rl->num_rooms++; 824 rl->num_rooms++;
819 825
820 if (rl->dialog) { 826 if (rl->dialog) {
821 if (rl->dialog->pg_update_to == 0) { 827 if (rl->dialog->pg_update_to == 0) {
822 purple_roomlist_ref(list); 828 purple_roomlist_ref(list);
824 gtk_progress_bar_pulse(GTK_PROGRESS_BAR(rl->dialog->progress)); 830 gtk_progress_bar_pulse(GTK_PROGRESS_BAR(rl->dialog->progress));
825 } else 831 } else
826 rl->dialog->pg_needs_pulse = TRUE; 832 rl->dialog->pg_needs_pulse = TRUE;
827 } 833 }
828 834
829 if (room->parent) { 835 if (purple_roomlist_room_get_parent(room)) {
830 parentrr = g_hash_table_lookup(rl->cats, room->parent); 836 parentrr = g_hash_table_lookup(rl->cats, purple_roomlist_room_get_parent(room));
831 path = gtk_tree_row_reference_get_path(parentrr); 837 path = gtk_tree_row_reference_get_path(parentrr);
832 if (path) { 838 if (path) {
833 PurpleRoomlistRoom *tmproom = NULL; 839 PurpleRoomlistRoom *tmproom = NULL;
834 840
835 gtk_tree_model_get_iter(GTK_TREE_MODEL(rl->model), &parent, path); 841 gtk_tree_model_get_iter(GTK_TREE_MODEL(rl->model), &parent, path);
846 if (append) 852 if (append)
847 gtk_tree_store_append(rl->model, &iter, (parentrr ? &parent : NULL)); 853 gtk_tree_store_append(rl->model, &iter, (parentrr ? &parent : NULL));
848 else 854 else
849 iter = child; 855 iter = child;
850 856
851 if (room->type & PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) 857 if (purple_roomlist_room_get_type(room) & PURPLE_ROOMLIST_ROOMTYPE_CATEGORY)
852 gtk_tree_store_append(rl->model, &child, &iter); 858 gtk_tree_store_append(rl->model, &child, &iter);
853 859
854 path = gtk_tree_model_get_path(GTK_TREE_MODEL(rl->model), &iter); 860 path = gtk_tree_model_get_path(GTK_TREE_MODEL(rl->model), &iter);
855 861
856 if (room->type & PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) { 862 if (purple_roomlist_room_get_type(room) & PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) {
857 rr = gtk_tree_row_reference_new(GTK_TREE_MODEL(rl->model), path); 863 rr = gtk_tree_row_reference_new(GTK_TREE_MODEL(rl->model), path);
858 g_hash_table_insert(rl->cats, room, rr); 864 g_hash_table_insert(rl->cats, room, rr);
859 } 865 }
860 866
861 gtk_tree_path_free(path); 867 gtk_tree_path_free(path);
862 868
863 gtk_tree_store_set(rl->model, &iter, NAME_COLUMN, room->name, -1); 869 gtk_tree_store_set(rl->model, &iter, NAME_COLUMN, purple_roomlist_room_get_name(room), -1);
864 gtk_tree_store_set(rl->model, &iter, ROOM_COLUMN, room, -1); 870 gtk_tree_store_set(rl->model, &iter, ROOM_COLUMN, room, -1);
865 871
866 for (j = NUM_OF_COLUMNS, l = room->fields, k = list->fields; l && k; j++, l = l->next, k = k->next) { 872 for (j = NUM_OF_COLUMNS,
873 l = purple_roomlist_room_get_fields(room),
874 k = purple_roomlist_get_fields(list);
875 l && k; j++, l = l->next, k = k->next)
876 {
867 PurpleRoomlistField *f = k->data; 877 PurpleRoomlistField *f = k->data;
868 if (f->hidden) 878 if (purple_roomlist_field_get_hidden(f))
869 continue; 879 continue;
870 gtk_tree_store_set(rl->model, &iter, j, l->data, -1); 880 gtk_tree_store_set(rl->model, &iter, j, l->data, -1);
871 } 881 }
872 } 882 }
873 883
874 static void pidgin_roomlist_in_progress(PurpleRoomlist *list, gboolean in_progress) 884 static void pidgin_roomlist_in_progress(PurpleRoomlist *list, gboolean in_progress)
875 { 885 {
876 PidginRoomlist *rl = list->ui_data; 886 PidginRoomlist *rl = purple_roomlist_get_ui_data(list);
877 887
878 if (!rl || !rl->dialog) 888 if (!rl || !rl->dialog)
879 return; 889 return;
880 890
881 if (in_progress) { 891 if (in_progress) {
893 } 903 }
894 } 904 }
895 905
896 static void pidgin_roomlist_destroy(PurpleRoomlist *list) 906 static void pidgin_roomlist_destroy(PurpleRoomlist *list)
897 { 907 {
898 PidginRoomlist *rl = list->ui_data; 908 PidginRoomlist *rl = purple_roomlist_get_ui_data(list);
899 909
900 roomlists = g_list_remove(roomlists, list); 910 roomlists = g_list_remove(roomlists, list);
901 911
902 g_return_if_fail(rl != NULL); 912 g_return_if_fail(rl != NULL);
903 913
904 g_hash_table_destroy(rl->cats); 914 g_hash_table_destroy(rl->cats);
905 g_free(rl); 915 g_free(rl);
906 list->ui_data = NULL; 916 purple_roomlist_set_ui_data(list, NULL);
907 } 917 }
908 918
909 static PurpleRoomlistUiOps ops = { 919 static PurpleRoomlistUiOps ops = {
910 pidgin_roomlist_dialog_show_with_account, 920 pidgin_roomlist_dialog_show_with_account,
911 pidgin_roomlist_new, 921 pidgin_roomlist_new,