Mercurial > pidgin
changeset 22024:57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Mon, 07 Jan 2008 06:16:46 +0000 |
parents | d65fd48a3ad9 |
children | 7f657dd7ebaa |
files | finch/gntroomlist.c finch/gntroomlist.h finch/gntui.c |
diffstat | 3 files changed, 58 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/finch/gntroomlist.c Sun Jan 06 20:59:02 2008 +0000 +++ b/finch/gntroomlist.c Mon Jan 07 06:16:46 2008 +0000 @@ -38,6 +38,8 @@ #include "debug.h" +#define PREF_ROOT "/finch/roomlist" + /* Yes, just one roomlist at a time. Let's not get greedy. Aight? */ struct _FinchRoomlist { @@ -138,9 +140,13 @@ purple_roomlist_room_join(froomlist.roomlist, room); break; case PURPLE_ROOMLIST_ROOMTYPE_CATEGORY: - purple_roomlist_expand_category(froomlist.roomlist, room); + if (!room->expanded_once) { + purple_roomlist_expand_category(froomlist.roomlist, room); + room->expanded_once = TRUE; + } break; } + gnt_tree_set_expanded(GNT_TREE(widget), room, TRUE); } static void @@ -191,8 +197,10 @@ } if (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) { + if (!first) + gnt_text_view_append_text_with_flags(tv, "\n", GNT_TEXT_FLAG_NORMAL); gnt_text_view_append_text_with_flags(tv, - _("\nHit 'Enter' to find more rooms of this category."), + _("Hit 'Enter' to find more rooms of this category."), GNT_TEXT_FLAG_NORMAL); } } @@ -238,6 +246,15 @@ } static void +size_changed_cb(GntWidget *widget, int oldw, int oldh) +{ + int w, h; + gnt_widget_get_size(widget, &w, &h); + purple_prefs_set_int(PREF_ROOT "/size/width", w); + purple_prefs_set_int(PREF_ROOT "/size/height", h); +} + +static void setup_roomlist(PurpleAccount *account) { GntWidget *window, *tree, *hbox, *accounts; @@ -284,7 +301,7 @@ froomlist.details = gnt_text_view_new(); gnt_text_view_set_flag(GNT_TEXT_VIEW(froomlist.details), GNT_TEXT_VIEW_TOP_ALIGN); gnt_box_add_widget(GNT_BOX(window), froomlist.details); - gnt_widget_set_size(froomlist.details, -1, 10); + gnt_widget_set_size(froomlist.details, -1, 8); hbox = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), hbox); @@ -306,6 +323,13 @@ fl_show_with_account(PurpleAccount *account) { setup_roomlist(account); + g_signal_handlers_disconnect_matched(G_OBJECT(froomlist.window), G_SIGNAL_MATCH_FUNC, + 0, 0, NULL, G_CALLBACK(size_changed_cb), NULL); + gnt_widget_show(froomlist.window); + gnt_screen_resize_widget(froomlist.window, + purple_prefs_get_int(PREF_ROOT "/size/width"), + purple_prefs_get_int(PREF_ROOT "/size/height")); + g_signal_connect(G_OBJECT(froomlist.window), "size_changed", G_CALLBACK(size_changed_cb), NULL); gnt_window_present(froomlist.window); } @@ -325,15 +349,18 @@ static void fl_add_room(PurpleRoomlist *roomlist, PurpleRoomlistRoom *room) { + gboolean category; if (froomlist.roomlist != roomlist) return; + category = (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY); gnt_tree_remove(GNT_TREE(froomlist.tree), room); gnt_tree_add_row_after(GNT_TREE(froomlist.tree), room, gnt_tree_create_row(GNT_TREE(froomlist.tree), purple_roomlist_room_get_name(room), - purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY ? "<" : ""), + category ? "<" : ""), purple_roomlist_room_get_parent(room), NULL); + gnt_tree_set_expanded(GNT_TREE(froomlist.tree), room, !category); } static void @@ -363,6 +390,7 @@ NULL, /* void (*_purple_reserved3)(void); */ NULL /* void (*_purple_reserved4)(void); */ }; + PurpleRoomlistUiOps *finch_roomlist_get_ui_ops(void) { return &ui_ops; @@ -373,3 +401,15 @@ purple_roomlist_show_with_account(NULL); } +void finch_roomlist_init(void) +{ + purple_prefs_add_none(PREF_ROOT); + purple_prefs_add_none(PREF_ROOT "/size"); + purple_prefs_add_int(PREF_ROOT "/size/width", 60); + purple_prefs_add_int(PREF_ROOT "/size/height", 15); +} + +void finch_roomlist_uninit(void) +{ +} +
--- a/finch/gntroomlist.h Sun Jan 06 20:59:02 2008 +0000 +++ b/finch/gntroomlist.h Mon Jan 07 06:16:46 2008 +0000 @@ -34,6 +34,11 @@ /*@{*/ /** + * Initialize the roomlist subsystem. + */ +void finch_roomlist_init(void); + +/** * Get the ui-functions. * * @return The PurpleRoomlistUiOps structure populated with the appropriate functions. @@ -45,6 +50,11 @@ */ void finch_roomlist_show_all(void); +/** + * Uninitialize the roomlist subsystem. + */ +void finch_roomlist_uninit(void); + /*@}*/ #endif
--- a/finch/gntui.c Sun Jan 06 20:59:02 2008 +0000 +++ b/finch/gntui.c Mon Jan 07 06:16:46 2008 +0000 @@ -84,6 +84,7 @@ purple_xfers_set_ui_ops(finch_xfers_get_ui_ops()); /* Roomlist */ + finch_roomlist_init(); purple_roomlist_set_ui_ops(finch_roomlist_get_ui_ops()); gnt_register_action(_("Accounts"), finch_accounts_show_all); @@ -126,6 +127,9 @@ finch_xfers_uninit(); purple_xfers_set_ui_ops(NULL); + finch_roomlist_uninit(); + purple_roomlist_set_ui_ops(NULL); + gnt_quit(); #endif }