| 136 switch (purple_roomlist_room_get_type(room)) { |
138 switch (purple_roomlist_room_get_type(room)) { |
| 137 case PURPLE_ROOMLIST_ROOMTYPE_ROOM: |
139 case PURPLE_ROOMLIST_ROOMTYPE_ROOM: |
| 138 purple_roomlist_room_join(froomlist.roomlist, room); |
140 purple_roomlist_room_join(froomlist.roomlist, room); |
| 139 break; |
141 break; |
| 140 case PURPLE_ROOMLIST_ROOMTYPE_CATEGORY: |
142 case PURPLE_ROOMLIST_ROOMTYPE_CATEGORY: |
| 141 purple_roomlist_expand_category(froomlist.roomlist, room); |
143 if (!room->expanded_once) { |
| |
144 purple_roomlist_expand_category(froomlist.roomlist, room); |
| |
145 room->expanded_once = TRUE; |
| |
146 } |
| 142 break; |
147 break; |
| 143 } |
148 } |
| |
149 gnt_tree_set_expanded(GNT_TREE(widget), room, TRUE); |
| 144 } |
150 } |
| 145 |
151 |
| 146 static void |
152 static void |
| 147 roomlist_selection_changed(GntWidget *widget, gpointer old, gpointer current, gpointer null) |
153 roomlist_selection_changed(GntWidget *widget, gpointer old, gpointer current, gpointer null) |
| 148 { |
154 { |
| 189 g_free(label); |
195 g_free(label); |
| 190 first = FALSE; |
196 first = FALSE; |
| 191 } |
197 } |
| 192 |
198 |
| 193 if (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) { |
199 if (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) { |
| |
200 if (!first) |
| |
201 gnt_text_view_append_text_with_flags(tv, "\n", GNT_TEXT_FLAG_NORMAL); |
| 194 gnt_text_view_append_text_with_flags(tv, |
202 gnt_text_view_append_text_with_flags(tv, |
| 195 _("\nHit 'Enter' to find more rooms of this category."), |
203 _("Hit 'Enter' to find more rooms of this category."), |
| 196 GNT_TEXT_FLAG_NORMAL); |
204 GNT_TEXT_FLAG_NORMAL); |
| 197 } |
205 } |
| 198 } |
206 } |
| 199 |
207 |
| 200 static void |
208 static void |
| 233 purple_account_get_protocol_name(account)); |
241 purple_account_get_protocol_name(account)); |
| 234 gnt_combo_box_add_data(accounts, account, text); |
242 gnt_combo_box_add_data(accounts, account, text); |
| 235 g_free(text); |
243 g_free(text); |
| 236 } |
244 } |
| 237 } |
245 } |
| |
246 } |
| |
247 |
| |
248 static void |
| |
249 size_changed_cb(GntWidget *widget, int oldw, int oldh) |
| |
250 { |
| |
251 int w, h; |
| |
252 gnt_widget_get_size(widget, &w, &h); |
| |
253 purple_prefs_set_int(PREF_ROOT "/size/width", w); |
| |
254 purple_prefs_set_int(PREF_ROOT "/size/height", h); |
| 238 } |
255 } |
| 239 |
256 |
| 240 static void |
257 static void |
| 241 setup_roomlist(PurpleAccount *account) |
258 setup_roomlist(PurpleAccount *account) |
| 242 { |
259 { |
| 282 gnt_box_add_widget(GNT_BOX(window), tree); |
299 gnt_box_add_widget(GNT_BOX(window), tree); |
| 283 |
300 |
| 284 froomlist.details = gnt_text_view_new(); |
301 froomlist.details = gnt_text_view_new(); |
| 285 gnt_text_view_set_flag(GNT_TEXT_VIEW(froomlist.details), GNT_TEXT_VIEW_TOP_ALIGN); |
302 gnt_text_view_set_flag(GNT_TEXT_VIEW(froomlist.details), GNT_TEXT_VIEW_TOP_ALIGN); |
| 286 gnt_box_add_widget(GNT_BOX(window), froomlist.details); |
303 gnt_box_add_widget(GNT_BOX(window), froomlist.details); |
| 287 gnt_widget_set_size(froomlist.details, -1, 10); |
304 gnt_widget_set_size(froomlist.details, -1, 8); |
| 288 |
305 |
| 289 hbox = gnt_hbox_new(FALSE); |
306 hbox = gnt_hbox_new(FALSE); |
| 290 gnt_box_add_widget(GNT_BOX(window), hbox); |
307 gnt_box_add_widget(GNT_BOX(window), hbox); |
| 291 |
308 |
| 292 for (iter = 0; buttons[iter].label; iter++) { |
309 for (iter = 0; buttons[iter].label; iter++) { |
| 304 |
321 |
| 305 static void |
322 static void |
| 306 fl_show_with_account(PurpleAccount *account) |
323 fl_show_with_account(PurpleAccount *account) |
| 307 { |
324 { |
| 308 setup_roomlist(account); |
325 setup_roomlist(account); |
| |
326 g_signal_handlers_disconnect_matched(G_OBJECT(froomlist.window), G_SIGNAL_MATCH_FUNC, |
| |
327 0, 0, NULL, G_CALLBACK(size_changed_cb), NULL); |
| |
328 gnt_widget_show(froomlist.window); |
| |
329 gnt_screen_resize_widget(froomlist.window, |
| |
330 purple_prefs_get_int(PREF_ROOT "/size/width"), |
| |
331 purple_prefs_get_int(PREF_ROOT "/size/height")); |
| |
332 g_signal_connect(G_OBJECT(froomlist.window), "size_changed", G_CALLBACK(size_changed_cb), NULL); |
| 309 gnt_window_present(froomlist.window); |
333 gnt_window_present(froomlist.window); |
| 310 } |
334 } |
| 311 |
335 |
| 312 static void |
336 static void |
| 313 fl_create(PurpleRoomlist *list) |
337 fl_create(PurpleRoomlist *list) |
| 323 } |
347 } |
| 324 |
348 |
| 325 static void |
349 static void |
| 326 fl_add_room(PurpleRoomlist *roomlist, PurpleRoomlistRoom *room) |
350 fl_add_room(PurpleRoomlist *roomlist, PurpleRoomlistRoom *room) |
| 327 { |
351 { |
| |
352 gboolean category; |
| 328 if (froomlist.roomlist != roomlist) |
353 if (froomlist.roomlist != roomlist) |
| 329 return; |
354 return; |
| 330 |
355 |
| |
356 category = (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY); |
| 331 gnt_tree_remove(GNT_TREE(froomlist.tree), room); |
357 gnt_tree_remove(GNT_TREE(froomlist.tree), room); |
| 332 gnt_tree_add_row_after(GNT_TREE(froomlist.tree), room, |
358 gnt_tree_add_row_after(GNT_TREE(froomlist.tree), room, |
| 333 gnt_tree_create_row(GNT_TREE(froomlist.tree), |
359 gnt_tree_create_row(GNT_TREE(froomlist.tree), |
| 334 purple_roomlist_room_get_name(room), |
360 purple_roomlist_room_get_name(room), |
| 335 purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY ? "<" : ""), |
361 category ? "<" : ""), |
| 336 purple_roomlist_room_get_parent(room), NULL); |
362 purple_roomlist_room_get_parent(room), NULL); |
| |
363 gnt_tree_set_expanded(GNT_TREE(froomlist.tree), room, !category); |
| 337 } |
364 } |
| 338 |
365 |
| 339 static void |
366 static void |
| 340 fl_destroy(PurpleRoomlist *list) |
367 fl_destroy(PurpleRoomlist *list) |
| 341 { |
368 { |
| 361 NULL, /* void (*_purple_reserved1)(void); */ |
388 NULL, /* void (*_purple_reserved1)(void); */ |
| 362 NULL, /* void (*_purple_reserved2)(void); */ |
389 NULL, /* void (*_purple_reserved2)(void); */ |
| 363 NULL, /* void (*_purple_reserved3)(void); */ |
390 NULL, /* void (*_purple_reserved3)(void); */ |
| 364 NULL /* void (*_purple_reserved4)(void); */ |
391 NULL /* void (*_purple_reserved4)(void); */ |
| 365 }; |
392 }; |
| |
393 |
| 366 PurpleRoomlistUiOps *finch_roomlist_get_ui_ops(void) |
394 PurpleRoomlistUiOps *finch_roomlist_get_ui_ops(void) |
| 367 { |
395 { |
| 368 return &ui_ops; |
396 return &ui_ops; |
| 369 } |
397 } |
| 370 |
398 |
| 371 void finch_roomlist_show_all(void) |
399 void finch_roomlist_show_all(void) |
| 372 { |
400 { |
| 373 purple_roomlist_show_with_account(NULL); |
401 purple_roomlist_show_with_account(NULL); |
| 374 } |
402 } |
| 375 |
403 |
| |
404 void finch_roomlist_init(void) |
| |
405 { |
| |
406 purple_prefs_add_none(PREF_ROOT); |
| |
407 purple_prefs_add_none(PREF_ROOT "/size"); |
| |
408 purple_prefs_add_int(PREF_ROOT "/size/width", 60); |
| |
409 purple_prefs_add_int(PREF_ROOT "/size/height", 15); |
| |
410 } |
| |
411 |
| |
412 void finch_roomlist_uninit(void) |
| |
413 { |
| |
414 } |
| |
415 |