Mercurial > pidgin.yaz
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, |