Mercurial > ~mikael > mcabber > hg
comparison mcabber/mcabber/screen.c @ 2100:113d3b96ae3e
Add option 'attention_char'
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 11 May 2014 14:27:05 +0200 |
parents | c4a68361883f |
children | f56c214a19dc |
comparison
equal
deleted
inserted
replaced
2099:a9440a1d52e5 | 2100:113d3b96ae3e |
---|---|
65 #define compose_color(col) (COLOR_PAIR(col->color_pair)|col->color_attrib) | 65 #define compose_color(col) (COLOR_PAIR(col->color_pair)|col->color_attrib) |
66 | 66 |
67 #define DEFAULT_LOG_WIN_HEIGHT (5+2) | 67 #define DEFAULT_LOG_WIN_HEIGHT (5+2) |
68 #define DEFAULT_ROSTER_WIDTH 24 | 68 #define DEFAULT_ROSTER_WIDTH 24 |
69 #define CHAT_WIN_HEIGHT (maxY-1-Log_Win_Height) | 69 #define CHAT_WIN_HEIGHT (maxY-1-Log_Win_Height) |
70 | |
71 #define DEFAULT_ATTENTION_CHAR '!' | |
70 | 72 |
71 const char *LocaleCharSet = "C"; | 73 const char *LocaleCharSet = "C"; |
72 | 74 |
73 static unsigned short int Log_Win_Height; | 75 static unsigned short int Log_Win_Height; |
74 static unsigned short int Roster_Width; | 76 static unsigned short int Roster_Width; |
1529 roster_msg_setflag(winId, special, TRUE); | 1531 roster_msg_setflag(winId, special, TRUE); |
1530 update_roster = TRUE; | 1532 update_roster = TRUE; |
1531 } | 1533 } |
1532 } | 1534 } |
1533 | 1535 |
1536 static unsigned int attention_sign(void) | |
1537 { | |
1538 guint sign; | |
1539 const char *as = settings_opt_get("attention_char"); | |
1540 if (!as) | |
1541 return DEFAULT_ATTENTION_CHAR; | |
1542 sign = get_char(as); | |
1543 if (get_char_width(as) != 1 || !iswprint(sign)) // XXX Better use a guard | |
1544 return DEFAULT_ATTENTION_CHAR; | |
1545 return sign; | |
1546 } | |
1547 | |
1534 // scr_update_main_status(forceupdate) | 1548 // scr_update_main_status(forceupdate) |
1535 // Redraw the main (bottom) status line. | 1549 // Redraw the main (bottom) status line. |
1536 // You can set forceupdate to FALSE in order to optimize screen refresh | 1550 // You can set forceupdate to FALSE in order to optimize screen refresh |
1537 // if you call top_panel()/update_panels() later. | 1551 // if you call top_panel()/update_panels() later. |
1538 void scr_update_main_status(int forceupdate) | 1552 void scr_update_main_status(int forceupdate) |
1539 { | 1553 { |
1540 char *sm = from_utf8(xmpp_getstatusmsg()); | 1554 char *sm = from_utf8(xmpp_getstatusmsg()); |
1541 const char *info = settings_opt_get("info"); | 1555 const char *info = settings_opt_get("info"); |
1542 guint prio = 0; | 1556 guint prio = 0; |
1543 gpointer unread_ptr; | 1557 gpointer unread_ptr; |
1544 char unreadchar; | 1558 guint unreadchar; |
1545 | 1559 |
1546 unread_ptr = unread_msg(NULL); | 1560 unread_ptr = unread_msg(NULL); |
1547 if (unread_ptr) { | 1561 if (unread_ptr) { |
1548 prio = buddy_getuiprio(unread_ptr); | 1562 prio = buddy_getuiprio(unread_ptr); |
1549 // If there's an unerad buffer but no priority set, let's consider the | 1563 // If there's an unerad buffer but no priority set, let's consider the |
1552 prio = 1; | 1566 prio = 1; |
1553 } | 1567 } |
1554 | 1568 |
1555 // Status bar unread message flag | 1569 // Status bar unread message flag |
1556 if (prio >= ROSTER_UI_PRIO_MUC_HL_MESSAGE) | 1570 if (prio >= ROSTER_UI_PRIO_MUC_HL_MESSAGE) |
1557 unreadchar = '!'; | 1571 unreadchar = attention_sign(); |
1558 else if (prio > 0) | 1572 else if (prio > 0) |
1559 unreadchar = '#'; | 1573 unreadchar = '#'; |
1560 else | 1574 else |
1561 unreadchar = ' '; | 1575 unreadchar = ' '; |
1562 | 1576 |
1563 werase(mainstatusWnd); | 1577 werase(mainstatusWnd); |
1564 if (info) { | 1578 if (info) { |
1565 char *info_locale = from_utf8(info); | 1579 char *info_locale = from_utf8(info); |
1566 mvwprintw(mainstatusWnd, 0, 0, "%c[%c] %s %s", unreadchar, | 1580 mvwprintw(mainstatusWnd, 0, 0, "%lc[%c] %s %s", unreadchar, |
1567 imstatus2char[xmpp_getstatus()], | 1581 imstatus2char[xmpp_getstatus()], |
1568 info_locale, (sm ? sm : "")); | 1582 info_locale, (sm ? sm : "")); |
1569 g_free(info_locale); | 1583 g_free(info_locale); |
1570 } else | 1584 } else |
1571 mvwprintw(mainstatusWnd, 0, 0, "%c[%c] %s", unreadchar, | 1585 mvwprintw(mainstatusWnd, 0, 0, "%lc[%c] %s", unreadchar, |
1572 imstatus2char[xmpp_getstatus()], (sm ? sm : "")); | 1586 imstatus2char[xmpp_getstatus()], (sm ? sm : "")); |
1573 if (forceupdate) { | 1587 if (forceupdate) { |
1574 top_panel(inputPanel); | 1588 top_panel(inputPanel); |
1575 update_panels(); | 1589 update_panels(); |
1576 } | 1590 } |
1999 int maxx, maxy; | 2013 int maxx, maxy; |
2000 GList *buddy; | 2014 GList *buddy; |
2001 int i, n; | 2015 int i, n; |
2002 int rOffset; | 2016 int rOffset; |
2003 int cursor_backup; | 2017 int cursor_backup; |
2004 char status, pending; | 2018 guint status, pending; |
2005 enum imstatus currentstatus = xmpp_getstatus(); | 2019 enum imstatus currentstatus = xmpp_getstatus(); |
2006 int x_pos; | 2020 int x_pos; |
2007 char *space; | 2021 char *space; |
2008 int prefix_length; | 2022 int prefix_length; |
2009 | 2023 |
2168 | 2182 |
2169 if (pending == '#') { | 2183 if (pending == '#') { |
2170 // Attention sign? | 2184 // Attention sign? |
2171 if ((ismuc && isurg >= ui_attn_sign_prio_level_muc) || | 2185 if ((ismuc && isurg >= ui_attn_sign_prio_level_muc) || |
2172 (!ismuc && isurg >= ui_attn_sign_prio_level)) | 2186 (!ismuc && isurg >= ui_attn_sign_prio_level)) |
2173 pending = '!'; | 2187 pending = attention_sign(); |
2174 } | 2188 } |
2175 | 2189 |
2176 if (isgrp) { | 2190 if (isgrp) { |
2177 if (ishid) { | 2191 if (ishid) { |
2178 int group_count = 0; | 2192 int group_count = 0; |
2179 foreach_group_member(BUDDATA(buddy), increment_if_buddy_not_filtered, | 2193 foreach_group_member(BUDDATA(buddy), increment_if_buddy_not_filtered, |
2180 &group_count); | 2194 &group_count); |
2181 snprintf(rline, 4*Roster_Width, "%s%c+++ %s (%i)", space, pending, name, | 2195 snprintf(rline, 4*Roster_Width, "%s%lc+++ %s (%i)", space, pending, |
2182 group_count); | 2196 name, group_count); |
2183 /* Do not display the item count if there isn't enough space */ | 2197 /* Do not display the item count if there isn't enough space */ |
2184 if (g_utf8_strlen(rline, 4*Roster_Width) >= Roster_Width) | 2198 if (g_utf8_strlen(rline, 4*Roster_Width) >= Roster_Width) |
2185 snprintf(rline, 4*Roster_Width, "%s%c+++ %s", space, pending, name); | 2199 snprintf(rline, 4*Roster_Width, "%s%lc+++ %s", space, pending, name); |
2186 } | 2200 } |
2187 else | 2201 else |
2188 snprintf(rline, 4*Roster_Width, "%s%c--- %s", space, pending, name); | 2202 snprintf(rline, 4*Roster_Width, "%s%lc--- %s", space, pending, name); |
2189 } else if (isspe) { | 2203 } else if (isspe) { |
2190 snprintf(rline, 4*Roster_Width, "%s%c%s", space, pending, name); | 2204 snprintf(rline, 4*Roster_Width, "%s%lc%s", space, pending, name); |
2191 } else { | 2205 } else { |
2192 char sepleft = '['; | 2206 char sepleft = '['; |
2193 char sepright = ']'; | 2207 char sepright = ']'; |
2194 if (btype & ROSTER_TYPE_USER) { | 2208 if (btype & ROSTER_TYPE_USER) { |
2195 guint subtype = buddy_getsubscription(BUDDATA(buddy)); | 2209 guint subtype = buddy_getsubscription(BUDDATA(buddy)); |
2198 if (!(subtype & sub_from)) { | 2212 if (!(subtype & sub_from)) { |
2199 sepleft = '{'; | 2213 sepleft = '{'; |
2200 sepright = '}'; | 2214 sepright = '}'; |
2201 } | 2215 } |
2202 } | 2216 } |
2203 snprintf(rline, 4*Roster_Width, | 2217 snprintf(rline, 4*Roster_Width, "%s%lc%c%c%c %s", |
2204 "%s%c%c%c%c %s", space, pending, sepleft, status, sepright, name); | 2218 space, pending, sepleft, status, sepright, name); |
2205 } | 2219 } |
2206 | 2220 |
2207 rline_locale = from_utf8(rline); | 2221 rline_locale = from_utf8(rline); |
2208 mvwprintw(rosterWnd, i, x_pos, "%s", rline_locale); | 2222 mvwprintw(rosterWnd, i, x_pos, "%s", rline_locale); |
2209 g_free(rline_locale); | 2223 g_free(rline_locale); |