about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/core.c38
-rw-r--r--src/ui/ui.h4
-rw-r--r--src/ui/window.h3
-rw-r--r--src/ui/windows.c41
-rw-r--r--src/ui/windows.h2
5 files changed, 78 insertions, 10 deletions
diff --git a/src/ui/core.c b/src/ui/core.c
index 48999319..f80c6ad2 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -219,18 +219,28 @@ _ui_duck_exists(void)
     return wins_duck_exists();
 }
 
+static gboolean
+_ui_xmlconsole_exists(void)
+{
+    return wins_xmlconsole_exists();
+}
+
 static void
 _ui_handle_stanza(const char * const msg)
 {
-    ProfWin *console = wins_get_console();
-    if (g_str_has_prefix(msg, "SENT:")) {
-        win_vprint_line(console, '!', COLOUR_ONLINE, "<- %s", &msg[6]);
-    } else if (g_str_has_prefix(msg, "RECV:")) {
-        win_vprint_line(console, '!', COLOUR_AWAY, "-> %s", &msg[6]);
-    }
-    win_update_virtual(console);
-    if (wins_is_current(console)) {
-        ui_current_page_off();
+    if (ui_xmlconsole_exists()) {
+        ProfWin *xmlconsole = wins_get_xmlconsole();
+	    
+        if (g_str_has_prefix(msg, "SENT:")) {
+	    win_vprint_line(xmlconsole, '!', COLOUR_ONLINE, "<- %s", &msg[6]);
+	} else if (g_str_has_prefix(msg, "RECV:")) {
+	    win_vprint_line(xmlconsole, '!', COLOUR_AWAY, "-> %s", &msg[6]);
+	}
+
+	win_update_virtual(xmlconsole);
+	if (wins_is_current(xmlconsole)) {
+	    ui_current_page_off();
+	}
     }
 }
 
@@ -1118,6 +1128,14 @@ _ui_create_duck_win(void)
 }
 
 static void
+_ui_create_xmlconsole_win(void)
+{
+    ProfWin *window = wins_new("XML Console", WIN_XML);
+    int num = wins_get_num(window);
+    ui_switch_win(num);
+}
+
+static void
 _ui_open_duck_win(void)
 {
     ProfWin *window = wins_get_by_recipient("DuckDuckGo search");
@@ -1939,4 +1957,6 @@ ui_init_module(void)
     ui_replace_input = _ui_replace_input;
     ui_invalid_command_usage = _ui_invalid_command_usage;
     ui_handle_stanza = _ui_handle_stanza;
+    ui_create_xmlconsole_win = _ui_create_xmlconsole_win;
+    ui_xmlconsole_exists = _ui_xmlconsole_exists;
 }
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 43f2d5ed..a93cc3d0 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -163,6 +163,10 @@ void (*ui_replace_input)(char *input, const char * const new_input, int *size);
 
 void (*ui_invalid_command_usage)(const char * const usage, void (**setting_func)(void));
 
+void (*ui_create_xmlconsole_win)(void);
+gboolean (*ui_xmlconsole_exists)(void);
+void (*ui_open_xmlconsole_win)(void);
+
 // console window actions
 void (*cons_show)(const char * const msg, ...);
 void (*cons_about)(void);
diff --git a/src/ui/window.h b/src/ui/window.h
index 4bd37447..874e6307 100644
--- a/src/ui/window.h
+++ b/src/ui/window.h
@@ -41,7 +41,8 @@ typedef enum {
     WIN_CHAT,
     WIN_MUC,
     WIN_PRIVATE,
-    WIN_DUCK
+    WIN_DUCK,
+    WIN_XML
 } win_type_t;
 
 typedef struct prof_win_t {
diff --git a/src/ui/windows.c b/src/ui/windows.c
index 75691f0d..82659be5 100644
--- a/src/ui/windows.c
+++ b/src/ui/windows.c
@@ -297,6 +297,38 @@ wins_duck_exists(void)
     return FALSE;
 }
 
+gboolean
+wins_xmlconsole_exists(void)
+{
+    GList *values = g_hash_table_get_values(windows);
+    GList *curr = values;
+
+    while (curr != NULL) {
+        ProfWin *window = curr->data;
+        if (window->type == WIN_XML)
+            return TRUE;
+        curr = g_list_next(curr);
+    }
+
+    return FALSE;
+}
+
+ProfWin *
+wins_get_xmlconsole(void)
+{
+    GList *values = g_hash_table_get_values(windows);
+    GList *curr = values;
+
+    while (curr != NULL) {
+        ProfWin *window = curr->data;
+        if (window->type == WIN_XML)
+            return window;
+        curr = g_list_next(curr);
+    }
+
+    return NULL;
+}
+
 GSList *
 wins_get_chat_recipients(void)
 {
@@ -428,6 +460,7 @@ wins_create_summary(void)
         GString *priv_string;
         GString *muc_string;
         GString *duck_string;
+        GString *xml_string;
 
         switch (window->type)
         {
@@ -501,6 +534,14 @@ wins_create_summary(void)
 
                 break;
 
+            case WIN_XML:
+                xml_string = g_string_new("");
+                g_string_printf(xml_string, "%d: XML console", ui_index);
+                result = g_slist_append(result, strdup(xml_string->str));
+                g_string_free(xml_string, TRUE);
+
+                break;
+
             default:
                 break;
         }
diff --git a/src/ui/windows.h b/src/ui/windows.h
index f8dec429..cbe219df 100644
--- a/src/ui/windows.h
+++ b/src/ui/windows.h
@@ -48,5 +48,7 @@ gboolean wins_tidy(void);
 GSList * wins_create_summary(void);
 void wins_destroy(void);
 GList * wins_get_nums(void);
+gboolean wins_xmlconsole_exists(void);
+ProfWin * wins_get_xmlconsole(void);
 
 #endif