From fcbd2592cf5f2c7d1006f0f45a278b2c53a33704 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 9 Jan 2016 20:40:13 +0000 Subject: [PATCH 1/4] Use different colour for roster chat rooms with unread messages --- src/ui/rosterwin.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index a3540d01..f54b2734 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -373,8 +373,13 @@ void _rosterwin_room(ProfLayoutSplit *layout, ProfMucWin *mucwin) { GString *msg = g_string_new(" "); - theme_item_t presence_colour = theme_main_presence_attrs("online"); - wattron(layout->subwin, theme_attrs(presence_colour)); + + if (mucwin->unread > 0) { + wattron(layout->subwin, theme_attrs(THEME_GREEN_BOLD)); + } else { + wattron(layout->subwin, theme_attrs(THEME_GREEN)); + } + int indent = prefs_get_roster_contact_indent(); int current_indent = 0; if (indent > 0) { @@ -398,11 +403,16 @@ _rosterwin_room(ProfLayoutSplit *layout, ProfMucWin *mucwin) gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP); win_sub_print(layout->subwin, msg->str, FALSE, wrap, current_indent); g_string_free(msg, TRUE); - wattroff(layout->subwin, theme_attrs(presence_colour)); + + if (mucwin->unread > 0) { + wattroff(layout->subwin, theme_attrs(THEME_GREEN_BOLD)); + } else { + wattroff(layout->subwin, theme_attrs(THEME_GREEN)); + } } static int -_compare_rooms(ProfMucWin *a, ProfMucWin *b) +_compare_rooms_unread(ProfMucWin *a, ProfMucWin *b) { if (a->unread > b->unread) { return -1; @@ -422,7 +432,7 @@ _rosterwin_rooms(ProfLayoutSplit *layout, gboolean newline) while (curr_room) { ProfMucWin *mucwin = wins_get_muc(curr_room->data); if (mucwin) { - rooms_sorted = g_list_insert_sorted(rooms_sorted, mucwin, (GCompareFunc)_compare_rooms); + rooms_sorted = g_list_insert_sorted(rooms_sorted, mucwin, (GCompareFunc)_compare_rooms_unread); } curr_room = g_list_next(curr_room); } From cd2458c0198bab99655248dd2e1071a862e5ef80 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 9 Jan 2016 21:37:59 +0000 Subject: [PATCH 2/4] Added roster room themes --- src/config/theme.c | 64 ++++++++++++++++++++++++------------------ src/config/theme.h | 2 ++ src/ui/rosterwin.c | 8 +++--- theme_template | 2 ++ themes/aqua | 2 ++ themes/batman | 2 ++ themes/boothj5 | 2 ++ themes/forest | 2 ++ themes/hacker | 2 ++ themes/headache | 4 ++- themes/joker | 4 ++- themes/mono | 4 ++- themes/orange | 4 ++- themes/original | 4 ++- themes/original_bright | 2 ++ themes/shade | 4 ++- themes/spawn | 4 ++- themes/whiteness | 2 ++ 18 files changed, 80 insertions(+), 38 deletions(-) diff --git a/src/config/theme.c b/src/config/theme.c index 6c346b91..846d0d97 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -120,6 +120,8 @@ static struct colours_t { NCURSES_COLOR_T otrtrusted; NCURSES_COLOR_T otruntrusted; NCURSES_COLOR_T rosterheader; + NCURSES_COLOR_T rosterroom; + NCURSES_COLOR_T rosterroomunread; NCURSES_COLOR_T occupantsheader; NCURSES_COLOR_T receiptsent; } colour_prefs; @@ -284,19 +286,23 @@ theme_init_colours(void) init_pair(43, colour_prefs.otrtrusted, colour_prefs.bkgnd); init_pair(44, colour_prefs.otruntrusted, colour_prefs.bkgnd); - // subwin headers + // roster init_pair(45, colour_prefs.rosterheader, colour_prefs.bkgnd); - init_pair(46, colour_prefs.occupantsheader, colour_prefs.bkgnd); + init_pair(46, colour_prefs.rosterroom, colour_prefs.bkgnd); + init_pair(47, colour_prefs.rosterroomunread, colour_prefs.bkgnd); + + // occupants + init_pair(48, colour_prefs.occupantsheader, colour_prefs.bkgnd); // raw - init_pair(47, COLOR_WHITE, colour_prefs.bkgnd); - init_pair(48, COLOR_GREEN, colour_prefs.bkgnd); - init_pair(49, COLOR_RED, colour_prefs.bkgnd); - init_pair(50, COLOR_YELLOW, colour_prefs.bkgnd); - init_pair(51, COLOR_BLUE, colour_prefs.bkgnd); - init_pair(52, COLOR_CYAN, colour_prefs.bkgnd); - init_pair(53, COLOR_BLACK, colour_prefs.bkgnd); - init_pair(54, COLOR_MAGENTA, colour_prefs.bkgnd); + init_pair(49, COLOR_WHITE, colour_prefs.bkgnd); + init_pair(50, COLOR_GREEN, colour_prefs.bkgnd); + init_pair(51, COLOR_RED, colour_prefs.bkgnd); + init_pair(52, COLOR_YELLOW, colour_prefs.bkgnd); + init_pair(53, COLOR_BLUE, colour_prefs.bkgnd); + init_pair(54, COLOR_CYAN, colour_prefs.bkgnd); + init_pair(55, COLOR_BLACK, colour_prefs.bkgnd); + init_pair(56, COLOR_MAGENTA, colour_prefs.bkgnd); } static NCURSES_COLOR_T @@ -401,6 +407,8 @@ _load_colours(void) _set_colour("me", &colour_prefs.me, COLOR_YELLOW, THEME_ME); _set_colour("them", &colour_prefs.them, COLOR_GREEN, THEME_THEM); _set_colour("roster.header", &colour_prefs.rosterheader, COLOR_YELLOW, THEME_ROSTER_HEADER); + _set_colour("roster.room", &colour_prefs.rosterroom, COLOR_GREEN, THEME_ROSTER_ROOM); + _set_colour("roster.room.unread", &colour_prefs.rosterroomunread, COLOR_GREEN, THEME_ROSTER_ROOM_UNREAD); _set_colour("occupants.header", &colour_prefs.occupantsheader, COLOR_YELLOW, THEME_OCCUPANTS_HEADER); _set_colour("receipt.sent", &colour_prefs.receiptsent, COLOR_RED, THEME_RECEIPT_SENT); } @@ -663,23 +671,25 @@ theme_attrs(theme_item_t attrs) case THEME_OTR_TRUSTED: result = COLOR_PAIR(43); break; case THEME_OTR_UNTRUSTED: result = COLOR_PAIR(44); break; case THEME_ROSTER_HEADER: result = COLOR_PAIR(45); break; - case THEME_OCCUPANTS_HEADER: result = COLOR_PAIR(46); break; - case THEME_WHITE: result = COLOR_PAIR(47); break; - case THEME_WHITE_BOLD: result = COLOR_PAIR(47); break; - case THEME_GREEN: result = COLOR_PAIR(48); break; - case THEME_GREEN_BOLD: result = COLOR_PAIR(48); break; - case THEME_RED: result = COLOR_PAIR(49); break; - case THEME_RED_BOLD: result = COLOR_PAIR(49); break; - case THEME_YELLOW: result = COLOR_PAIR(50); break; - case THEME_YELLOW_BOLD: result = COLOR_PAIR(50); break; - case THEME_BLUE: result = COLOR_PAIR(51); break; - case THEME_BLUE_BOLD: result = COLOR_PAIR(51); break; - case THEME_CYAN: result = COLOR_PAIR(52); break; - case THEME_CYAN_BOLD: result = COLOR_PAIR(52); break; - case THEME_BLACK: result = COLOR_PAIR(53); break; - case THEME_BLACK_BOLD: result = COLOR_PAIR(53); break; - case THEME_MAGENTA: result = COLOR_PAIR(54); break; - case THEME_MAGENTA_BOLD: result = COLOR_PAIR(54); break; + case THEME_ROSTER_ROOM: result = COLOR_PAIR(46); break; + case THEME_ROSTER_ROOM_UNREAD: result = COLOR_PAIR(47); break; + case THEME_OCCUPANTS_HEADER: result = COLOR_PAIR(48); break; + case THEME_WHITE: result = COLOR_PAIR(49); break; + case THEME_WHITE_BOLD: result = COLOR_PAIR(49); break; + case THEME_GREEN: result = COLOR_PAIR(50); break; + case THEME_GREEN_BOLD: result = COLOR_PAIR(50); break; + case THEME_RED: result = COLOR_PAIR(51); break; + case THEME_RED_BOLD: result = COLOR_PAIR(51); break; + case THEME_YELLOW: result = COLOR_PAIR(52); break; + case THEME_YELLOW_BOLD: result = COLOR_PAIR(52); break; + case THEME_BLUE: result = COLOR_PAIR(53); break; + case THEME_BLUE_BOLD: result = COLOR_PAIR(53); break; + case THEME_CYAN: result = COLOR_PAIR(54); break; + case THEME_CYAN_BOLD: result = COLOR_PAIR(54); break; + case THEME_BLACK: result = COLOR_PAIR(55); break; + case THEME_BLACK_BOLD: result = COLOR_PAIR(55); break; + case THEME_MAGENTA: result = COLOR_PAIR(56); break; + case THEME_MAGENTA_BOLD: result = COLOR_PAIR(56); break; default: break; } diff --git a/src/config/theme.h b/src/config/theme.h index 59db9f57..c0380354 100644 --- a/src/config/theme.h +++ b/src/config/theme.h @@ -85,6 +85,8 @@ typedef enum { THEME_OTR_UNTRUSTED, THEME_OCCUPANTS_HEADER, THEME_ROSTER_HEADER, + THEME_ROSTER_ROOM, + THEME_ROSTER_ROOM_UNREAD, THEME_RECEIPT_SENT, THEME_NONE, THEME_WHITE, diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index f54b2734..67f23442 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -375,9 +375,9 @@ _rosterwin_room(ProfLayoutSplit *layout, ProfMucWin *mucwin) GString *msg = g_string_new(" "); if (mucwin->unread > 0) { - wattron(layout->subwin, theme_attrs(THEME_GREEN_BOLD)); + wattron(layout->subwin, theme_attrs(THEME_ROSTER_ROOM_UNREAD)); } else { - wattron(layout->subwin, theme_attrs(THEME_GREEN)); + wattron(layout->subwin, theme_attrs(THEME_ROSTER_ROOM)); } int indent = prefs_get_roster_contact_indent(); @@ -405,9 +405,9 @@ _rosterwin_room(ProfLayoutSplit *layout, ProfMucWin *mucwin) g_string_free(msg, TRUE); if (mucwin->unread > 0) { - wattroff(layout->subwin, theme_attrs(THEME_GREEN_BOLD)); + wattroff(layout->subwin, theme_attrs(THEME_ROSTER_ROOM_UNREAD)); } else { - wattroff(layout->subwin, theme_attrs(THEME_GREEN)); + wattroff(layout->subwin, theme_attrs(THEME_ROSTER_ROOM)); } } diff --git a/theme_template b/theme_template index be6a9cd5..db9e9cd9 100644 --- a/theme_template +++ b/theme_template @@ -46,6 +46,8 @@ roommention= me= them= roster.header= +roster.room= +roster.room.unread= occupants.header= receipt.sent= diff --git a/themes/aqua b/themes/aqua index 11c250f4..76dd53a6 100644 --- a/themes/aqua +++ b/themes/aqua @@ -46,5 +46,7 @@ roommention=bold_blue me=cyan them=white roster.header=bold_white +roster.room=cyan +roster.room.unread=bold_cyan occupants.header=bold_white receipt.sent=white diff --git a/themes/batman b/themes/batman index 4d346ac1..f856ebb0 100644 --- a/themes/batman +++ b/themes/batman @@ -46,5 +46,7 @@ subscribed=magenta unsubscribed=black_bold roommention=cyan roster.header=yellow +roster.room=green +roster.room.unread=green occupants.header=yellow receipt.sent=red diff --git a/themes/boothj5 b/themes/boothj5 index 3273d688..d496ab78 100644 --- a/themes/boothj5 +++ b/themes/boothj5 @@ -46,6 +46,8 @@ roommention=bold_red me=blue them=bold_green roster.header=bold_yellow +roster.room=green +roster.room.unread=bold_green occupants.header=bold_yellow receipt.sent=bold_black diff --git a/themes/forest b/themes/forest index f5bbbafd..65407c93 100644 --- a/themes/forest +++ b/themes/forest @@ -46,5 +46,7 @@ roommention=bold_cyan me=blue them=bold_blue roster.header=bold_green +roster.room=green +roster.room.unread=bold_green occupants.header=bold_green receipt.sent=bold_black diff --git a/themes/hacker b/themes/hacker index 8fdc0c96..ff726544 100644 --- a/themes/hacker +++ b/themes/hacker @@ -46,5 +46,7 @@ roommention=bold_green me=green them=bold_green roster.header=bold_green +roster.room=green +roster.room=bold_green occupants.header=bold_green receipt.sent=bold_black diff --git a/themes/headache b/themes/headache index 5c06ca78..e9c63cbf 100644 --- a/themes/headache +++ b/themes/headache @@ -46,5 +46,7 @@ roommention=bold_green me=white them=white roster.header=bold_cyan +roster.room=red +roster.room.unread=bold_red occupants.header=bold_cyan -receipt.sent=red \ No newline at end of file +receipt.sent=red diff --git a/themes/joker b/themes/joker index 59e9ed94..6076339a 100644 --- a/themes/joker +++ b/themes/joker @@ -46,5 +46,7 @@ roommention=green me=magenta them=green roster.header=magenta +roster.room=green +roster.room.unread=green occupants.header=magenta -receipt.sent=red \ No newline at end of file +receipt.sent=red diff --git a/themes/mono b/themes/mono index 8efd7369..86265336 100644 --- a/themes/mono +++ b/themes/mono @@ -46,5 +46,7 @@ roommention=white me=white them=white roster.header=white +roster.room=white +roster.room.unread=white occupants.header=white -receipt.sent=white \ No newline at end of file +receipt.sent=white diff --git a/themes/orange b/themes/orange index 5fc6ddf2..035d4b45 100644 --- a/themes/orange +++ b/themes/orange @@ -46,5 +46,7 @@ roommention=blue me=black them=black roster.header=black +roster.room=blue +roster.room.unread=blue occupants.header=black -receipt.sent=red \ No newline at end of file +receipt.sent=red diff --git a/themes/original b/themes/original index d1c0b26a..5c4fa88e 100644 --- a/themes/original +++ b/themes/original @@ -46,5 +46,7 @@ roommention=yellow me=yellow them=green roster.header=yellow +roster.room=green +roster.room.unread=green occupants.header=yellow -receipt.sent=red \ No newline at end of file +receipt.sent=red diff --git a/themes/original_bright b/themes/original_bright index c584ff60..90dcae54 100644 --- a/themes/original_bright +++ b/themes/original_bright @@ -46,5 +46,7 @@ roommention=bold_yellow me=bold_yellow them=bold_green roster.header=bold_yellow +roster.room=bold_green +roster.room.unread=bold_green occupants.header=bold_yellow receipt.sent=bold_red diff --git a/themes/shade b/themes/shade index 38d42860..4a671717 100644 --- a/themes/shade +++ b/themes/shade @@ -46,5 +46,7 @@ roommention=green me=bold_black them=magenta roster.header=magenta +roster.room=green +roster.room.unread=green occupants.header=magenta -receipt.sent=red \ No newline at end of file +receipt.sent=red diff --git a/themes/spawn b/themes/spawn index b32862d3..907c10c5 100644 --- a/themes/spawn +++ b/themes/spawn @@ -46,5 +46,7 @@ roommention=red me=green them=yellow roster.header=white +roster.room=green +roster.room.unread=green occupants.header=white -receipt.sent=red \ No newline at end of file +receipt.sent=red diff --git a/themes/whiteness b/themes/whiteness index ff7d370a..ad26afcf 100644 --- a/themes/whiteness +++ b/themes/whiteness @@ -46,5 +46,7 @@ roommention=yellow me=black them=black roster.header=black +roster.room=green +roster.room.unread=green occupants.header=black receipt.sent=red From de902434010f68b5d3d0d7d8dbfb9d0b0b1c0b9b Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 9 Jan 2016 22:21:09 +0000 Subject: [PATCH 3/4] Added roster rooms order preference --- src/command/command.c | 25 +++++++++++++++++++++++++ src/command/commands.c | 25 +++++++++++++++++++++++++ src/config/preferences.c | 5 +++++ src/config/preferences.h | 1 + src/config/theme.c | 1 + src/ui/console.c | 4 ++++ src/ui/rosterwin.c | 14 +++++++++++++- 7 files changed, 74 insertions(+), 1 deletion(-) diff --git a/src/command/command.c b/src/command/command.c index 1a72f74a..27661679 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -281,6 +281,7 @@ static struct cmd_t command_defs[] = "/roster hide [offline|resource|presence|status|empty|count|priority|rooms]", "/roster by group|presence|none", "/roster order name|presence", + "/roster room order name|unread", "/roster header char |none", "/roster presence indent ", "/roster contact char |none", @@ -323,6 +324,8 @@ static struct cmd_t command_defs[] = { "by none", "No grouping in the roster panel." }, { "order name", "Order roster items by name only." }, { "order presence", "Order roster items by presence, and then by name." }, + { "room order name", "Order roster rooms by name." }, + { "room order unread", "Order roster rooms by unread messages, and then by name." }, { "header char ", "Prefix roster headers with specified character." }, { "header char none", "Remove roster header character prefix." }, { "contact char ", "Prefix roster contacts with specified character." }, @@ -1895,6 +1898,8 @@ static Autocomplete roster_resource_ac; static Autocomplete roster_presence_ac; static Autocomplete roster_char_ac; static Autocomplete roster_remove_all_ac; +static Autocomplete roster_room_ac; +static Autocomplete roster_room_order_ac; static Autocomplete group_ac; static Autocomplete bookmark_ac; static Autocomplete bookmark_property_ac; @@ -2155,6 +2160,7 @@ cmd_init(void) autocomplete_add(roster_ac, "hide"); autocomplete_add(roster_ac, "by"); autocomplete_add(roster_ac, "order"); + autocomplete_add(roster_ac, "room"); autocomplete_add(roster_ac, "size"); autocomplete_add(roster_ac, "wrap"); autocomplete_add(roster_ac, "header"); @@ -2199,6 +2205,13 @@ cmd_init(void) autocomplete_add(roster_order_ac, "name"); autocomplete_add(roster_order_ac, "presence"); + roster_room_ac = autocomplete_new(); + autocomplete_add(roster_room_ac, "order"); + + roster_room_order_ac = autocomplete_new(); + autocomplete_add(roster_room_order_ac, "name"); + autocomplete_add(roster_room_order_ac, "unread"); + roster_remove_all_ac = autocomplete_new(); autocomplete_add(roster_remove_all_ac, "contacts"); @@ -2472,6 +2485,8 @@ cmd_uninit(void) autocomplete_free(roster_show_ac); autocomplete_free(roster_by_ac); autocomplete_free(roster_order_ac); + autocomplete_free(roster_room_ac); + autocomplete_free(roster_room_order_ac); autocomplete_free(roster_remove_all_ac); autocomplete_free(group_ac); autocomplete_free(bookmark_ac); @@ -2681,6 +2696,8 @@ cmd_reset_autocomplete(ProfWin *window) autocomplete_reset(roster_show_ac); autocomplete_reset(roster_by_ac); autocomplete_reset(roster_order_ac); + autocomplete_reset(roster_room_ac); + autocomplete_reset(roster_room_order_ac); autocomplete_reset(roster_remove_all_ac); autocomplete_reset(group_ac); autocomplete_reset(titlebar_ac); @@ -3087,6 +3104,10 @@ _roster_autocomplete(ProfWin *window, const char *const input) if (result) { return result; } + result = autocomplete_param_with_ac(input, "/roster room order", roster_room_order_ac, TRUE); + if (result) { + return result; + } jabber_conn_status_t conn_status = jabber_get_connection_status(); if (conn_status == JABBER_CONNECTED) { @@ -3124,6 +3145,10 @@ _roster_autocomplete(ProfWin *window, const char *const input) if (result) { return result; } + result = autocomplete_param_with_ac(input, "/roster room", roster_room_ac, TRUE); + if (result) { + return result; + } result = autocomplete_param_with_func(input, "/roster wrap", prefs_autocomplete_boolean_choice); if (result) { return result; diff --git a/src/command/commands.c b/src/command/commands.c index e94c9e3c..5075d0b3 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -2184,6 +2184,31 @@ cmd_roster(ProfWin *window, const char *const command, gchar **args) return TRUE; } + } else if (g_strcmp0(args[0], "room") == 0) { + if (g_strcmp0(args[1], "order") == 0) { + if (g_strcmp0(args[2], "name") == 0) { + cons_show("Ordering roster rooms by name"); + prefs_set_string(PREF_ROSTER_ROOMS_ORDER, "name"); + if (conn_status == JABBER_CONNECTED) { + rosterwin_roster(); + } + return TRUE; + } else if (g_strcmp0(args[2], "unread") == 0) { + cons_show("Ordering roster rooms by unread messages"); + prefs_set_string(PREF_ROSTER_ROOMS_ORDER, "unread"); + if (conn_status == JABBER_CONNECTED) { + rosterwin_roster(); + } + return TRUE; + } else { + cons_bad_cmd_usage(command); + return TRUE; + } + } else { + cons_bad_cmd_usage(command); + return TRUE; + } + // add contact } else if (strcmp(args[0], "add") == 0) { if (conn_status != JABBER_CONNECTED) { diff --git a/src/config/preferences.c b/src/config/preferences.c index 89fed31a..7188517a 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -1047,6 +1047,7 @@ _get_group(preference_t pref) case PREF_ROSTER_WRAP: case PREF_ROSTER_RESOURCE_JOIN: case PREF_ROSTER_ROOMS: + case PREF_ROSTER_ROOMS_ORDER: case PREF_RESOURCE_TITLE: case PREF_RESOURCE_MESSAGE: case PREF_ENC_WARN: @@ -1243,6 +1244,8 @@ _get_key(preference_t pref) return "roster.resource.join"; case PREF_ROSTER_ROOMS: return "roster.rooms"; + case PREF_ROSTER_ROOMS_ORDER: + return "roster.rooms.order"; case PREF_RESOURCE_TITLE: return "resource.title"; case PREF_RESOURCE_MESSAGE: @@ -1330,6 +1333,8 @@ _get_default_string(preference_t pref) return "presence"; case PREF_ROSTER_ORDER: return "presence"; + case PREF_ROSTER_ROOMS_ORDER: + return "name"; case PREF_TIME_CONSOLE: return "%H:%M:%S"; case PREF_TIME_CHAT: diff --git a/src/config/preferences.h b/src/config/preferences.h index da367b85..a46acf6a 100644 --- a/src/config/preferences.h +++ b/src/config/preferences.h @@ -74,6 +74,7 @@ typedef enum { PREF_ROSTER_WRAP, PREF_ROSTER_RESOURCE_JOIN, PREF_ROSTER_ROOMS, + PREF_ROSTER_ROOMS_ORDER, PREF_MUC_PRIVILEGES, PREF_PRESENCE, PREF_WRAP, diff --git a/src/config/theme.c b/src/config/theme.c index 846d0d97..286f5d6b 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -476,6 +476,7 @@ _load_preferences(void) _set_boolean_preference("roster.count", PREF_ROSTER_COUNT); _set_boolean_preference("roster.priority", PREF_ROSTER_PRIORITY); _set_boolean_preference("roster.rooms", PREF_ROSTER_ROOMS); + _set_string_preference("roster.rooms.order", PREF_ROSTER_ROOMS_ORDER); if (g_key_file_has_key(theme, "ui", "roster.size", NULL)) { gint roster_size = g_key_file_get_integer(theme, "ui", "roster.size", NULL); prefs_set_roster_size(roster_size); diff --git a/src/ui/console.c b/src/ui/console.c index 212656c3..42001960 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -1337,6 +1337,10 @@ cons_roster_setting(void) cons_show("Roster order (/roster) : %s", order); prefs_free_string(order); + char *rooms_order = prefs_get_string(PREF_ROSTER_ROOMS_ORDER); + cons_show("Roster rooms order (/roster) : %s", rooms_order); + prefs_free_string(rooms_order); + int size = prefs_get_roster_size(); cons_show("Roster size (/roster) : %d", size); diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index 67f23442..afafdd86 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -411,6 +411,12 @@ _rosterwin_room(ProfLayoutSplit *layout, ProfMucWin *mucwin) } } +static int +_compare_rooms_name(ProfMucWin *a, ProfMucWin *b) +{ + return g_strcmp0(a->roomjid, b->roomjid); +} + static int _compare_rooms_unread(ProfMucWin *a, ProfMucWin *b) { @@ -432,7 +438,13 @@ _rosterwin_rooms(ProfLayoutSplit *layout, gboolean newline) while (curr_room) { ProfMucWin *mucwin = wins_get_muc(curr_room->data); if (mucwin) { - rooms_sorted = g_list_insert_sorted(rooms_sorted, mucwin, (GCompareFunc)_compare_rooms_unread); + char *order = prefs_get_string(PREF_ROSTER_ROOMS_ORDER); + if (g_strcmp0(order, "unread") == 0) { + rooms_sorted = g_list_insert_sorted(rooms_sorted, mucwin, (GCompareFunc)_compare_rooms_unread); + } else { + rooms_sorted = g_list_insert_sorted(rooms_sorted, mucwin, (GCompareFunc)_compare_rooms_name); + } + prefs_free_string(order); } curr_room = g_list_next(curr_room); } From 97d96746155996cf18ccd0f4ad4eba3b9a5413f1 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 9 Jan 2016 22:31:24 +0000 Subject: [PATCH 4/4] Updated themes --- theme_template | 2 ++ themes/boothj5 | 1 + themes/complex | 1 + 3 files changed, 4 insertions(+) diff --git a/theme_template b/theme_template index db9e9cd9..dc74471f 100644 --- a/theme_template +++ b/theme_template @@ -92,6 +92,8 @@ roster.resource.join= roster.presence= roster.presence.indent= roster.status= +roster.rooms= +roster.rooms.order= occupants= occupants.size= occupants.jid= diff --git a/themes/boothj5 b/themes/boothj5 index d496ab78..4786b1e6 100644 --- a/themes/boothj5 +++ b/themes/boothj5 @@ -92,6 +92,7 @@ roster.presence=true roster.presence.indent=-1 roster.status=true roster.rooms=true +roster.rooms.order=name occupants=true occupants.size=15 occupants.jid=false diff --git a/themes/complex b/themes/complex index 21191d75..dc98217e 100644 --- a/themes/complex +++ b/themes/complex @@ -38,6 +38,7 @@ roster.presence=true roster.presence.indent=1 roster.status=true roster.rooms=true +roster.rooms.order=unread privileges=true presence=true intype=true