From 0e7e931589404e4bc3e4cec0f1366c5c63f35d1d Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 16 Dec 2014 22:14:15 +0000 Subject: Added rosterwin.c --- src/ui/core.c | 56 ++++------------------------------ src/ui/rosterwin.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ui/rosterwin.h | 35 ++++++++++++++++++++++ src/ui/window.c | 2 ++ src/ui/window.h | 3 ++ 5 files changed, 133 insertions(+), 51 deletions(-) create mode 100644 src/ui/rosterwin.c create mode 100644 src/ui/rosterwin.h (limited to 'src/ui') diff --git a/src/ui/core.c b/src/ui/core.c index 3295c028..ff4784bc 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -69,6 +69,7 @@ #include "ui/inputwin.h" #include "ui/window.h" #include "ui/windows.h" +#include "ui/rosterwin.h" #include "xmpp/xmpp.h" static char *win_title; @@ -83,7 +84,6 @@ static void _win_handle_switch(const wint_t * const ch); static void _win_handle_page(const wint_t * const ch, const int result); static void _win_show_history(int win_index, const char * const contact); static void _ui_draw_term_title(void); -static void _ui_roster_contact(PContact contact); static void _ui_init(void) @@ -2938,52 +2938,6 @@ _ui_show_lines(ProfWin *window, const gchar** lines) } } -static void -_ui_roster_contact(PContact contact) -{ - if (p_contact_subscribed(contact)) { - ProfWin *window = wins_get_console(); - const char *name = p_contact_name_or_jid(contact); - const char *presence = p_contact_presence(contact); - - if ((g_strcmp0(presence, "offline") != 0) || ((g_strcmp0(presence, "offline") == 0) && - (prefs_get_boolean(PREF_ROSTER_OFFLINE)))) { - theme_item_t presence_colour = theme_main_presence_attrs(presence); - - ProfLayoutSplit *layout = (ProfLayoutSplit*)window->layout; - wattron(layout->subwin, theme_attrs(presence_colour)); - - GString *msg = g_string_new(" "); - g_string_append(msg, name); - win_printline_nowrap(layout->subwin, msg->str); - g_string_free(msg, TRUE); - - wattroff(layout->subwin, theme_attrs(presence_colour)); - - if (prefs_get_boolean(PREF_ROSTER_RESOURCE)) { - GList *resources = p_contact_get_available_resources(contact); - GList *curr_resource = resources; - while (curr_resource) { - Resource *resource = curr_resource->data; - const char *resource_presence = string_from_resource_presence(resource->presence); - theme_item_t resource_presence_colour = theme_main_presence_attrs(resource_presence); - wattron(layout->subwin, theme_attrs(resource_presence_colour)); - - GString *msg = g_string_new(" "); - g_string_append(msg, resource->name); - win_printline_nowrap(layout->subwin, msg->str); - g_string_free(msg, TRUE); - - wattroff(layout->subwin, theme_attrs(resource_presence_colour)); - - curr_resource = g_list_next(curr_resource); - } - g_list_free(resources); - } - } - } -} - static void _ui_roster_contacts_by_presence(const char * const presence, char *title) { @@ -2998,7 +2952,7 @@ _ui_roster_contacts_by_presence(const char * const presence, char *title) GSList *curr_contact = contacts; while (curr_contact) { PContact contact = curr_contact->data; - _ui_roster_contact(contact); + rosterwin_contact(contact); curr_contact = g_slist_next(curr_contact); } } @@ -3022,7 +2976,7 @@ _ui_roster_contacts_by_group(char *group) GSList *curr_contact = contacts; while (curr_contact) { PContact contact = curr_contact->data; - _ui_roster_contact(contact); + rosterwin_contact(contact); curr_contact = g_slist_next(curr_contact); } } @@ -3043,7 +2997,7 @@ _ui_roster_contacts_by_no_group(void) GSList *curr_contact = contacts; while (curr_contact) { PContact contact = curr_contact->data; - _ui_roster_contact(contact); + rosterwin_contact(contact); curr_contact = g_slist_next(curr_contact); } } @@ -3087,7 +3041,7 @@ _ui_roster(void) GSList *curr_contact = contacts; while (curr_contact) { PContact contact = curr_contact->data; - _ui_roster_contact(contact); + rosterwin_contact(contact); curr_contact = g_slist_next(curr_contact); } } diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c new file mode 100644 index 00000000..59222eb6 --- /dev/null +++ b/src/ui/rosterwin.c @@ -0,0 +1,88 @@ +/* + * rosterwin.c + * + * Copyright (C) 2012 - 2014 James Booth + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see . + * + * In addition, as a special exception, the copyright holders give permission to + * link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. + * + * You must obey the GNU General Public License in all respects for all of the + * code used other than OpenSSL. If you modify file(s) with this exception, you + * may extend this exception to your version of the file(s), but you are not + * obligated to do so. If you do not wish to do so, delete this exception + * statement from your version. If you delete this exception statement from all + * source files in the program, then also delete it here. + * + */ + +#include + +#include "contact.h" +#include "ui/window.h" +#include "ui/windows.h" +#include "config/preferences.h" + +void +rosterwin_contact(PContact contact) +{ + if (p_contact_subscribed(contact)) { + ProfWin *window = wins_get_console(); + const char *name = p_contact_name_or_jid(contact); + const char *presence = p_contact_presence(contact); + + if ((g_strcmp0(presence, "offline") != 0) || ((g_strcmp0(presence, "offline") == 0) && + (prefs_get_boolean(PREF_ROSTER_OFFLINE)))) { + theme_item_t presence_colour = theme_main_presence_attrs(presence); + + ProfLayoutSplit *layout = (ProfLayoutSplit*)window->layout; + assert(layout->memcheck == LAYOUT_SPLIT_MEMCHECK); + + wattron(layout->subwin, theme_attrs(presence_colour)); + + GString *msg = g_string_new(" "); + g_string_append(msg, name); + win_printline_nowrap(layout->subwin, msg->str); + g_string_free(msg, TRUE); + + wattroff(layout->subwin, theme_attrs(presence_colour)); + + if (prefs_get_boolean(PREF_ROSTER_RESOURCE)) { + GList *resources = p_contact_get_available_resources(contact); + GList *curr_resource = resources; + while (curr_resource) { + Resource *resource = curr_resource->data; + const char *resource_presence = string_from_resource_presence(resource->presence); + theme_item_t resource_presence_colour = theme_main_presence_attrs(resource_presence); + wattron(layout->subwin, theme_attrs(resource_presence_colour)); + + GString *msg = g_string_new(" "); + g_string_append(msg, resource->name); + win_printline_nowrap(layout->subwin, msg->str); + g_string_free(msg, TRUE); + + wattroff(layout->subwin, theme_attrs(resource_presence_colour)); + + curr_resource = g_list_next(curr_resource); + } + g_list_free(resources); + } + } + } +} \ No newline at end of file diff --git a/src/ui/rosterwin.h b/src/ui/rosterwin.h new file mode 100644 index 00000000..8272950e --- /dev/null +++ b/src/ui/rosterwin.h @@ -0,0 +1,35 @@ +/* + * rosterwin.h + * + * Copyright (C) 2012 - 2014 James Booth + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see . + * + * In addition, as a special exception, the copyright holders give permission to + * link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. + * + * You must obey the GNU General Public License in all respects for all of the + * code used other than OpenSSL. If you modify file(s) with this exception, you + * may extend this exception to your version of the file(s), but you are not + * obligated to do so. If you do not wish to do so, delete this exception + * statement from your version. If you delete this exception statement from all + * source files in the program, then also delete it here. + * + */ + +void rosterwin_contact(PContact contact); diff --git a/src/ui/window.c b/src/ui/window.c index c4f282d1..dfeb61a6 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -108,6 +108,7 @@ _win_create_split_layout(void) scrollok(layout->super.win, TRUE); layout->subwin = NULL; layout->sub_y_pos = 0; + layout->memcheck = LAYOUT_SPLIT_MEMCHECK; return &layout->super; } @@ -164,6 +165,7 @@ win_create_muc(const char * const roomjid) layout->subwin = NULL; } layout->sub_y_pos = 0; + layout->memcheck = LAYOUT_SPLIT_MEMCHECK; layout->super.buffer = buffer_create(); layout->super.y_pos = 0; layout->super.paged = 0; diff --git a/src/ui/window.h b/src/ui/window.h index 82a0eac8..444b82c6 100644 --- a/src/ui/window.h +++ b/src/ui/window.h @@ -56,6 +56,8 @@ #define PAD_SIZE 1000 +#define LAYOUT_SPLIT_MEMCHECK 1234567 + typedef enum { LAYOUT_SIMPLE, LAYOUT_SPLIT @@ -77,6 +79,7 @@ typedef struct prof_layout_split_t { ProfLayout super; WINDOW *subwin; int sub_y_pos; + unsigned long memcheck; } ProfLayoutSplit; typedef enum { -- cgit 1.4.1-2-gfad0