1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Merge branch 'master' into osx-functional

This commit is contained in:
James Booth 2016-01-15 00:47:51 +00:00
commit bdcca3c2ad
2 changed files with 80 additions and 25 deletions

View File

@ -131,8 +131,19 @@ _rosterwin_presence(ProfLayoutSplit *layout, theme_item_t colour, const char *pr
} }
} }
theme_item_t
_get_roster_theme(roster_contact_theme_t theme_type, const char *presence)
{
switch (theme_type) {
case ROSTER_CONTACT: return theme_roster_presence_attrs(presence);
case ROSTER_CONTACT_ACTIVE: return theme_roster_active_presence_attrs(presence);
case ROSTER_CONTACT_UNREAD: return theme_roster_unread_presence_attrs(presence);
default: return theme_roster_presence_attrs(presence);
}
}
static void static void
_rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_indent, roster_contact_theme_t theme_type) _rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_indent, roster_contact_theme_t theme_type, int unread)
{ {
gboolean join = prefs_get_boolean(PREF_ROSTER_RESOURCE_JOIN); gboolean join = prefs_get_boolean(PREF_ROSTER_RESOURCE_JOIN);
@ -141,13 +152,7 @@ _rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_inde
if (join && (g_list_length(resources) == 1)) { if (join && (g_list_length(resources) == 1)) {
Resource *resource = resources->data; Resource *resource = resources->data;
const char *resource_presence = string_from_resource_presence(resource->presence); const char *resource_presence = string_from_resource_presence(resource->presence);
theme_item_t resource_presence_colour = _get_roster_theme(theme_type, resource_presence);
theme_item_t resource_presence_colour;
switch (theme_type) {
case ROSTER_CONTACT: resource_presence_colour = theme_roster_presence_attrs(resource_presence); break;
case ROSTER_CONTACT_ACTIVE: resource_presence_colour = theme_roster_active_presence_attrs(resource_presence); break;
case ROSTER_CONTACT_UNREAD: resource_presence_colour = theme_roster_unread_presence_attrs(resource_presence); break;
}
wattron(layout->subwin, theme_attrs(resource_presence_colour)); wattron(layout->subwin, theme_attrs(resource_presence_colour));
GString *msg = g_string_new(""); GString *msg = g_string_new("");
@ -161,6 +166,11 @@ _rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_inde
if (prefs_get_boolean(PREF_ROSTER_PRIORITY)) { if (prefs_get_boolean(PREF_ROSTER_PRIORITY)) {
g_string_append_printf(msg, " %d", resource->priority); g_string_append_printf(msg, " %d", resource->priority);
} }
if (unread > 0) {
g_string_append_printf(msg, " (%d)", unread);
}
gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP); gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP);
win_sub_print(layout->subwin, msg->str, FALSE, wrap, 0); win_sub_print(layout->subwin, msg->str, FALSE, wrap, 0);
g_string_free(msg, TRUE); g_string_free(msg, TRUE);
@ -170,6 +180,20 @@ _rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_inde
_rosterwin_presence(layout, resource_presence_colour, resource_presence, resource->status, current_indent); _rosterwin_presence(layout, resource_presence_colour, resource_presence, resource->status, current_indent);
} }
} else { } else {
gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP);
if (unread > 0) {
GString *unreadmsg = g_string_new("");
g_string_append_printf(unreadmsg, " (%d)", unread);
const char *presence = p_contact_presence(contact);
theme_item_t presence_colour = _get_roster_theme(theme_type, presence);
wattron(layout->subwin, theme_attrs(presence_colour));
win_sub_print(layout->subwin, unreadmsg->str, FALSE, wrap, current_indent);
wattroff(layout->subwin, theme_attrs(presence_colour));
}
int resource_indent = prefs_get_roster_resource_indent(); int resource_indent = prefs_get_roster_resource_indent();
if (resource_indent > 0) { if (resource_indent > 0) {
current_indent += resource_indent; current_indent += resource_indent;
@ -179,13 +203,7 @@ _rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_inde
while (curr_resource) { while (curr_resource) {
Resource *resource = curr_resource->data; Resource *resource = curr_resource->data;
const char *resource_presence = string_from_resource_presence(resource->presence); const char *resource_presence = string_from_resource_presence(resource->presence);
theme_item_t resource_presence_colour = _get_roster_theme(theme_type, resource_presence);
theme_item_t resource_presence_colour;
switch (theme_type) {
case ROSTER_CONTACT: resource_presence_colour = theme_roster_presence_attrs(resource_presence); break;
case ROSTER_CONTACT_ACTIVE: resource_presence_colour = theme_roster_active_presence_attrs(resource_presence); break;
case ROSTER_CONTACT_UNREAD: resource_presence_colour = theme_roster_unread_presence_attrs(resource_presence); break;
}
wattron(layout->subwin, theme_attrs(resource_presence_colour)); wattron(layout->subwin, theme_attrs(resource_presence_colour));
GString *msg = g_string_new(" "); GString *msg = g_string_new(" ");
@ -203,7 +221,6 @@ _rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_inde
g_string_append_printf(msg, " %d", resource->priority); g_string_append_printf(msg, " %d", resource->priority);
} }
win_sub_newline_lazy(layout->subwin); win_sub_newline_lazy(layout->subwin);
gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP);
win_sub_print(layout->subwin, msg->str, FALSE, wrap, current_indent); win_sub_print(layout->subwin, msg->str, FALSE, wrap, current_indent);
g_string_free(msg, TRUE); g_string_free(msg, TRUE);
wattroff(layout->subwin, theme_attrs(resource_presence_colour)); wattroff(layout->subwin, theme_attrs(resource_presence_colour));
@ -218,9 +235,33 @@ _rosterwin_resources(ProfLayoutSplit *layout, PContact contact, int current_inde
} else if (prefs_get_boolean(PREF_ROSTER_PRESENCE) || prefs_get_boolean(PREF_ROSTER_STATUS)) { } else if (prefs_get_boolean(PREF_ROSTER_PRESENCE) || prefs_get_boolean(PREF_ROSTER_STATUS)) {
const char *presence = p_contact_presence(contact); const char *presence = p_contact_presence(contact);
const char *status = p_contact_status(contact); const char *status = p_contact_status(contact);
theme_item_t presence_colour = theme_main_presence_attrs(presence); theme_item_t presence_colour = _get_roster_theme(theme_type, presence);
gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP);
if (unread > 0) {
GString *unreadmsg = g_string_new("");
g_string_append_printf(unreadmsg, " (%d)", unread);
wattron(layout->subwin, theme_attrs(presence_colour));
win_sub_print(layout->subwin, unreadmsg->str, FALSE, wrap, current_indent);
wattroff(layout->subwin, theme_attrs(presence_colour));
}
_rosterwin_presence(layout, presence_colour, presence, status, current_indent); _rosterwin_presence(layout, presence_colour, presence, status, current_indent);
} else {
gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP);
if (unread > 0) {
GString *unreadmsg = g_string_new("");
g_string_append_printf(unreadmsg, " (%d)", unread);
const char *presence = p_contact_presence(contact);
theme_item_t presence_colour = _get_roster_theme(theme_type, presence);
wattron(layout->subwin, theme_attrs(presence_colour));
win_sub_print(layout->subwin, unreadmsg->str, FALSE, wrap, current_indent);
wattroff(layout->subwin, theme_attrs(presence_colour));
}
} }
g_list_free(resources); g_list_free(resources);
} }
@ -232,23 +273,20 @@ _rosterwin_contact(ProfLayoutSplit *layout, PContact contact)
const char *presence = p_contact_presence(contact); const char *presence = p_contact_presence(contact);
const char *status = p_contact_status(contact); const char *status = p_contact_status(contact);
const char *barejid = p_contact_barejid(contact); const char *barejid = p_contact_barejid(contact);
int unread = 0;
roster_contact_theme_t theme_type = ROSTER_CONTACT; roster_contact_theme_t theme_type = ROSTER_CONTACT;
ProfChatWin *chatwin = wins_get_chat(barejid); ProfChatWin *chatwin = wins_get_chat(barejid);
if (chatwin) { if (chatwin) {
if (chatwin->unread > 0) { if (chatwin->unread > 0) {
theme_type = ROSTER_CONTACT_UNREAD; theme_type = ROSTER_CONTACT_UNREAD;
unread = chatwin->unread;
} else { } else {
theme_type = ROSTER_CONTACT_ACTIVE; theme_type = ROSTER_CONTACT_ACTIVE;
} }
} }
theme_item_t presence_colour; theme_item_t presence_colour = _get_roster_theme(theme_type, presence);
switch (theme_type) {
case ROSTER_CONTACT: presence_colour = theme_roster_presence_attrs(presence); break;
case ROSTER_CONTACT_ACTIVE: presence_colour = theme_roster_active_presence_attrs(presence); break;
case ROSTER_CONTACT_UNREAD: presence_colour = theme_roster_unread_presence_attrs(presence); break;
}
wattron(layout->subwin, theme_attrs(presence_colour)); wattron(layout->subwin, theme_attrs(presence_colour));
GString *msg = g_string_new(" "); GString *msg = g_string_new(" ");
@ -266,6 +304,14 @@ _rosterwin_contact(ProfLayoutSplit *layout, PContact contact)
g_string_append_printf(msg, "%c", ch); g_string_append_printf(msg, "%c", ch);
} }
g_string_append(msg, name); g_string_append(msg, name);
if (!prefs_get_boolean(PREF_ROSTER_RESOURCE)) {
if (unread > 0) {
g_string_append_printf(msg, " (%d)", unread);
}
unread = 0;
}
win_sub_newline_lazy(layout->subwin); win_sub_newline_lazy(layout->subwin);
gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP); gboolean wrap = prefs_get_boolean(PREF_ROSTER_WRAP);
win_sub_print(layout->subwin, msg->str, FALSE, wrap, current_indent); win_sub_print(layout->subwin, msg->str, FALSE, wrap, current_indent);
@ -273,8 +319,17 @@ _rosterwin_contact(ProfLayoutSplit *layout, PContact contact)
wattroff(layout->subwin, theme_attrs(presence_colour)); wattroff(layout->subwin, theme_attrs(presence_colour));
if (prefs_get_boolean(PREF_ROSTER_RESOURCE)) { if (prefs_get_boolean(PREF_ROSTER_RESOURCE)) {
_rosterwin_resources(layout, contact, current_indent, theme_type); _rosterwin_resources(layout, contact, current_indent, theme_type, unread);
} else if (prefs_get_boolean(PREF_ROSTER_PRESENCE) || prefs_get_boolean(PREF_ROSTER_STATUS)) { } else if (prefs_get_boolean(PREF_ROSTER_PRESENCE) || prefs_get_boolean(PREF_ROSTER_STATUS)) {
if (unread > 0) {
GString *unreadmsg = g_string_new("");
g_string_append_printf(unreadmsg, " (%d)", unread);
wattron(layout->subwin, theme_attrs(presence_colour));
win_sub_print(layout->subwin, unreadmsg->str, FALSE, wrap, current_indent);
g_string_free(unreadmsg, TRUE);
wattroff(layout->subwin, theme_attrs(presence_colour));
}
_rosterwin_presence(layout, presence_colour, presence, status, current_indent); _rosterwin_presence(layout, presence_colour, presence, status, current_indent);
} }
} }

View File

@ -97,7 +97,7 @@ roster.empty=false
roster.by=group roster.by=group
roster.order=presence roster.order=presence
roster.count=true roster.count=true
roster.priority=true roster.priority=false
roster.size=25 roster.size=25
roster.wrap=true roster.wrap=true
roster.header.char=@ roster.header.char=@