finch/gntroomlist.c

changeset 22147
08e54b0f86a3
parent 22146
c1fb24f33a22
child 22169
bed812105128
equal deleted inserted replaced
22146:c1fb24f33a22 22147:08e54b0f86a3
36 #include "gnttree.h" 36 #include "gnttree.h"
37 #include "gntwindow.h" 37 #include "gntwindow.h"
38 38
39 #include "debug.h" 39 #include "debug.h"
40 40
41 #define PREF_ROOT "/finch/roomlist"
42
41 /* Yes, just one roomlist at a time. Let's not get greedy. Aight? */ 43 /* Yes, just one roomlist at a time. Let's not get greedy. Aight? */
42 struct _FinchRoomlist 44 struct _FinchRoomlist
43 { 45 {
44 GntWidget *window; 46 GntWidget *window;
45 47
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

mercurial