about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-12-16 22:14:15 +0000
committerJames Booth <boothj5@gmail.com>2014-12-16 22:14:15 +0000
commit0e7e931589404e4bc3e4cec0f1366c5c63f35d1d (patch)
tree8221e04b0173d01c013989af039f98c174d79cba /src/ui
parent0ac789e48c073bfbe0c964f4d84752458fcfc3c2 (diff)
downloadprofani-tty-0e7e931589404e4bc3e4cec0f1366c5c63f35d1d.tar.gz
Added rosterwin.c
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/core.c56
-rw-r--r--src/ui/rosterwin.c88
-rw-r--r--src/ui/rosterwin.h35
-rw-r--r--src/ui/window.c2
-rw-r--r--src/ui/window.h3
5 files changed, 133 insertions, 51 deletions
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)
@@ -2939,52 +2939,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)
 {
     ProfWin *window = wins_get_console();
@@ -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 <boothj5@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ * 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 <assert.h>
+
+#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 <boothj5@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ * 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 {