about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-12-21 19:40:15 +0000
committerJames Booth <boothj5@gmail.com>2014-12-21 19:40:15 +0000
commit9a322a028f6c7d9a6b0b142ca9c4540e3f2082da (patch)
treeb141cf76c7bce4891b30719389f922063e388d0f
parent13f73a30e73f0349968f827e4003b3b4c84ebbf3 (diff)
downloadprofani-tty-9a322a028f6c7d9a6b0b142ca9c4540e3f2082da.tar.gz
Use class instead of base pointer
-rw-r--r--src/command/commands.c49
-rw-r--r--src/ui/core.c173
-rw-r--r--src/ui/occupantswin.c2
-rw-r--r--src/ui/window.c110
-rw-r--r--src/ui/window.h16
-rw-r--r--src/ui/windows.c8
6 files changed, 187 insertions, 171 deletions
diff --git a/src/command/commands.c b/src/command/commands.c
index cc914c1f..da3ee9ec 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -1605,11 +1605,12 @@ cmd_status(gchar **args, struct cmd_help_t help)
         case WIN_MUC:
             if (usr != NULL) {
                 ProfMucWin *mucwin = wins_get_current_muc();
+                ProfWin *window = (ProfWin*) mucwin;
                 Occupant *occupant = muc_roster_item(mucwin->roomjid, usr);
                 if (occupant) {
-                    win_show_occupant(&mucwin->super, occupant);
+                    win_show_occupant(window, occupant);
                 } else {
-                    win_save_vprint(&mucwin->super, '-', NULL, 0, 0, "", "No such participant \"%s\" in room.", usr);
+                    win_save_vprint(window, '-', NULL, 0, 0, "", "No such participant \"%s\" in room.", usr);
                 }
             } else {
                 ui_current_print_line("You must specify a nickname.");
@@ -1620,11 +1621,12 @@ cmd_status(gchar **args, struct cmd_help_t help)
                 ui_current_print_line("No parameter required when in chat.");
             } else {
                 ProfChatWin *chatwin = wins_get_current_chat();
+                ProfWin *window = (ProfWin*) chatwin;
                 PContact pcontact = roster_get_contact(chatwin->barejid);
                 if (pcontact != NULL) {
-                    win_show_contact(&chatwin->super, pcontact);
+                    win_show_contact(window, pcontact);
                 } else {
-                    win_save_println(&chatwin->super, "Error getting contact info.");
+                    win_save_println(window, "Error getting contact info.");
                 }
             }
             break;
@@ -1633,12 +1635,13 @@ cmd_status(gchar **args, struct cmd_help_t help)
                 ui_current_print_line("No parameter required when in chat.");
             } else {
                 ProfPrivateWin *privatewin = wins_get_current_private();
+                ProfWin *window = (ProfWin*) privatewin;
                 Jid *jid = jid_create(privatewin->fulljid);
                 Occupant *occupant = muc_roster_item(jid->barejid, jid->resourcepart);
                 if (occupant) {
-                    win_show_occupant(&privatewin->super, occupant);
+                    win_show_occupant(window, occupant);
                 } else {
-                    win_save_println(&privatewin->super, "Error getting contact info.");
+                    win_save_println(window, "Error getting contact info.");
                 }
                 jid_destroy(jid);
             }
@@ -1700,11 +1703,12 @@ cmd_info(gchar **args, struct cmd_help_t help)
                 ui_current_print_line("No parameter required when in chat.");
             } else {
                 ProfChatWin *chatwin = wins_get_current_chat();
+                ProfWin *window = (ProfWin*) chatwin;
                 PContact pcontact = roster_get_contact(chatwin->barejid);
                 if (pcontact != NULL) {
-                    win_show_info(&chatwin->super, pcontact);
+                    win_show_info(window, pcontact);
                 } else {
-                    win_save_println(&chatwin->super, "Error getting contact info.");
+                    win_save_println(window, "Error getting contact info.");
                 }
             }
             break;
@@ -1713,12 +1717,13 @@ cmd_info(gchar **args, struct cmd_help_t help)
                 ui_current_print_line("No parameter required when in chat.");
             } else {
                 ProfPrivateWin *privatewin = wins_get_current_private();
+                ProfWin *window = (ProfWin*) privatewin;
                 Jid *jid = jid_create(privatewin->fulljid);
                 Occupant *occupant = muc_roster_item(jid->barejid, jid->resourcepart);
                 if (occupant) {
-                    win_show_occupant_info(&privatewin->super, jid->barejid, occupant);
+                    win_show_occupant_info(window, jid->barejid, occupant);
                 } else {
-                    win_save_println(&privatewin->super, "Error getting contact info.");
+                    win_save_println(window, "Error getting contact info.");
                 }
                 jid_destroy(jid);
             }
@@ -2278,7 +2283,7 @@ cmd_form(gchar **args, struct cmd_help_t help)
                 help_text = command->help.long_help;
             }
 
-            ui_show_lines(&confwin->super, help_text);
+            ui_show_lines((ProfWin*) confwin, help_text);
         }
         ui_current_print_line("");
         return TRUE;
@@ -2338,7 +2343,7 @@ cmd_kick(gchar **args, struct cmd_help_t help)
             char *reason = args[1];
             iq_room_kick_occupant(mucwin->roomjid, nick, reason);
         } else {
-            win_save_vprint(&mucwin->super, '!', NULL, 0, 0, "", "Occupant does not exist: %s", nick);
+            win_save_vprint((ProfWin*) mucwin, '!', NULL, 0, 0, "", "Occupant does not exist: %s", nick);
         }
     } else {
         cons_show("Usage: %s", help.usage);
@@ -2392,14 +2397,15 @@ cmd_subject(gchar **args, struct cmd_help_t help)
     }
 
     ProfMucWin *mucwin = wins_get_current_muc();
+    ProfWin *window = (ProfWin*) mucwin;
 
     if (args[0] == NULL) {
         char *subject = muc_subject(mucwin->roomjid);
         if (subject) {
-            win_save_vprint(&mucwin->super, '!', NULL, NO_EOL, THEME_ROOMINFO, "", "Room subject: ");
-            win_save_vprint(&mucwin->super, '!', NULL, NO_DATE, 0, "", "%s", subject);
+            win_save_vprint(window, '!', NULL, NO_EOL, THEME_ROOMINFO, "", "Room subject: ");
+            win_save_vprint(window, '!', NULL, NO_DATE, 0, "", "%s", subject);
         } else {
-            win_save_print(&mucwin->super, '!', NULL, 0, THEME_ROOMINFO, "", "Room has no subject");
+            win_save_print(window, '!', NULL, 0, THEME_ROOMINFO, "", "Room has no subject");
         }
         return TRUE;
     }
@@ -2464,7 +2470,7 @@ cmd_affiliation(gchar **args, struct cmd_help_t help)
             iq_room_affiliation_list(mucwin->roomjid, "member");
             iq_room_affiliation_list(mucwin->roomjid, "outcast");
         } else if (g_strcmp0(affiliation, "none") == 0) {
-            win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Cannot list users with no affiliation.");
+            win_save_print((ProfWin*) mucwin, '!', NULL, 0, 0, "", "Cannot list users with no affiliation.");
         } else {
             iq_room_affiliation_list(mucwin->roomjid, affiliation);
         }
@@ -2532,7 +2538,7 @@ cmd_role(gchar **args, struct cmd_help_t help)
             iq_room_role_list(mucwin->roomjid, "participant");
             iq_room_role_list(mucwin->roomjid, "visitor");
         } else if (g_strcmp0(role, "none") == 0) {
-            win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Cannot list users with no role.");
+            win_save_print((ProfWin*) mucwin, '!', NULL, 0, 0, "", "Cannot list users with no role.");
         } else {
             iq_room_role_list(mucwin->roomjid, role);
         }
@@ -2584,7 +2590,8 @@ cmd_room(gchar **args, struct cmd_help_t help)
     }
 
     ProfMucWin *mucwin = wins_get_current_muc();
-    int num = wins_get_num(&mucwin->super);
+    ProfWin *window = (ProfWin*) mucwin;
+    int num = wins_get_num(window);
 
     int ui_index = num;
     if (ui_index == 10) {
@@ -2594,12 +2601,12 @@ cmd_room(gchar **args, struct cmd_help_t help)
     if (g_strcmp0(args[0], "accept") == 0) {
         gboolean requires_config = muc_requires_config(mucwin->roomjid);
         if (!requires_config) {
-            win_save_print(&mucwin->super, '!', NULL, 0, THEME_ROOMINFO, "", "Current room does not require configuration.");
+            win_save_print(window, '!', NULL, 0, THEME_ROOMINFO, "", "Current room does not require configuration.");
             return TRUE;
         } else {
             iq_confirm_instant_room(mucwin->roomjid);
             muc_set_requires_config(mucwin->roomjid, FALSE);
-            win_save_print(&mucwin->super, '!', NULL, 0, THEME_ROOMINFO, "", "Room unlocked.");
+            win_save_print(window, '!', NULL, 0, THEME_ROOMINFO, "", "Room unlocked.");
             return TRUE;
         }
     }
@@ -2616,7 +2623,7 @@ cmd_room(gchar **args, struct cmd_help_t help)
         g_string_free(win_title, TRUE);
 
         if (confwin != NULL) {
-            num = wins_get_num(&confwin->super);
+            num = wins_get_num(window);
             ui_switch_win(num);
         } else {
             iq_request_room_config_form(mucwin->roomjid);
diff --git a/src/ui/core.c b/src/ui/core.c
index 33a84044..55c1ba47 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -270,6 +270,7 @@ static void
 _ui_contact_typing(const char * const barejid)
 {
     ProfChatWin *chatwin = wins_get_chat(barejid);
+    ProfWin *window = (ProfWin*) chatwin;
 
     if (prefs_get_boolean(PREF_INTYPE)) {
         // no chat window for user
@@ -277,22 +278,22 @@ _ui_contact_typing(const char * const barejid)
             cons_show_typing(barejid);
 
         // have chat window but not currently in it
-        } else if (!wins_is_current(&chatwin->super)) {
+        } else if (!wins_is_current(window)) {
             cons_show_typing(barejid);
 
         // in chat window with user
         } else {
             title_bar_set_typing(TRUE);
 
-            int num = wins_get_num(&chatwin->super);
+            int num = wins_get_num(window);
             status_bar_active(num);
        }
     }
 
     if (prefs_get_boolean(PREF_NOTIFY_TYPING)) {
         gboolean is_current = FALSE;
-        if (&chatwin->super != NULL) {
-            is_current = wins_is_current(&chatwin->super);
+        if (window) {
+            is_current = wins_is_current(window);
         }
         if ( !is_current || (is_current && prefs_get_boolean(PREF_NOTIFY_TYPING_CURRENT)) ) {
             PContact contact = roster_get_contact(barejid);
@@ -349,11 +350,13 @@ _ui_incoming_msg(const char * const barejid, const char * const message, GTimeVa
         win_created = TRUE;
     }
 
-    int num = wins_get_num(&chatwin->super);
+    ProfWin *window = (ProfWin*) chatwin;
+
+    int num = wins_get_num(window);
 
     // currently viewing chat window with sender
-    if (wins_is_current(&chatwin->super)) {
-        win_print_incoming_message(&chatwin->super, tv_stamp, display_from, message);
+    if (wins_is_current(window)) {
+        win_print_incoming_message(window, tv_stamp, display_from, message);
         title_bar_set_typing(FALSE);
         status_bar_active(num);
 
@@ -366,7 +369,7 @@ _ui_incoming_msg(const char * const barejid, const char * const message, GTimeVa
             flash();
         }
 
-        chatwin->super.unread++;
+        window->unread++;
         if (prefs_get_boolean(PREF_CHLOG) && prefs_get_boolean(PREF_HISTORY)) {
             _win_show_history(num, barejid);
         }
@@ -375,11 +378,11 @@ _ui_incoming_msg(const char * const barejid, const char * const message, GTimeVa
         if ((tv_stamp != NULL) && (win_created)) {
             PContact pcontact = roster_get_contact(barejid);
             if (pcontact != NULL) {
-                win_show_contact(&chatwin->super, pcontact);
+                win_show_contact(window, pcontact);
             }
         }
 
-        win_print_incoming_message(&chatwin->super, tv_stamp, display_from, message);
+        win_print_incoming_message(window, tv_stamp, display_from, message);
     }
 
     int ui_index = num;
@@ -392,7 +395,7 @@ _ui_incoming_msg(const char * const barejid, const char * const message, GTimeVa
     }
 
     if (prefs_get_boolean(PREF_NOTIFY_MESSAGE)) {
-        gboolean is_current = wins_is_current(&chatwin->super);
+        gboolean is_current = wins_is_current(window);
         if ( !is_current || (is_current && prefs_get_boolean(PREF_NOTIFY_MESSAGE_CURRENT)) ) {
             if (prefs_get_boolean(PREF_NOTIFY_MESSAGE_TEXT)) {
                 notify_message(display_from, ui_index, message);
@@ -417,11 +420,12 @@ _ui_incoming_private_msg(const char * const fulljid, const char * const message,
         privatewin = (ProfPrivateWin*)window;
     }
 
-    int num = wins_get_num(&privatewin->super);
+    ProfWin *window = (ProfWin*) privatewin;
+    int num = wins_get_num(window);
 
     // currently viewing chat window with sender
-    if (wins_is_current(&privatewin->super)) {
-        win_print_incoming_message(&privatewin->super, tv_stamp, display_from, message);
+    if (wins_is_current(window)) {
+        win_print_incoming_message(window, tv_stamp, display_from, message);
         title_bar_set_typing(FALSE);
         status_bar_active(num);
 
@@ -434,12 +438,12 @@ _ui_incoming_private_msg(const char * const fulljid, const char * const message,
             flash();
         }
 
-        privatewin->super.unread++;
+        window->unread++;
         if (prefs_get_boolean(PREF_CHLOG) && prefs_get_boolean(PREF_HISTORY)) {
             _win_show_history(num, fulljid);
         }
 
-        win_print_incoming_message(&privatewin->super, tv_stamp, display_from, message);
+        win_print_incoming_message(window, tv_stamp, display_from, message);
     }
 
     int ui_index = num;
@@ -452,7 +456,7 @@ _ui_incoming_private_msg(const char * const fulljid, const char * const message,
     }
 
     if (prefs_get_boolean(PREF_NOTIFY_MESSAGE)) {
-        gboolean is_current = wins_is_current(&privatewin->super);
+        gboolean is_current = wins_is_current(window);
         if ( !is_current || (is_current && prefs_get_boolean(PREF_NOTIFY_MESSAGE_CURRENT)) ) {
             if (prefs_get_boolean(PREF_NOTIFY_MESSAGE_TEXT)) {
                 notify_message(display_from, ui_index, message);
@@ -580,8 +584,7 @@ _ui_handle_recipient_not_found(const char * const recipient, const char * const
     ProfChatWin *chatwin = wins_get_chat(recipient);
     if (chatwin) {
         cons_show_error("Recipient %s not found: %s", recipient, err_msg);
-        // TODO change super references to superclass cast
-        win_save_vprint(&chatwin->super, '!', NULL, 0, THEME_ERROR, "", "Recipient %s not found: %s", recipient, err_msg);
+        win_save_vprint((ProfWin*) chatwin, '!', NULL, 0, THEME_ERROR, "", "Recipient %s not found: %s", recipient, err_msg);
         return;
     }
 
@@ -589,7 +592,7 @@ _ui_handle_recipient_not_found(const char * const recipient, const char * const
     ProfMucWin *mucwin = wins_get_muc(recipient);
     if (mucwin) {
         cons_show_error("Room %s not found: %s", recipient, err_msg);
-        win_save_vprint(&mucwin->super, '!', NULL, 0, THEME_ERROR, "", "Room %s not found: %s", recipient, err_msg);
+        win_save_vprint((ProfWin*) mucwin, '!', NULL, 0, THEME_ERROR, "", "Room %s not found: %s", recipient, err_msg);
         return;
     }
 
@@ -597,7 +600,7 @@ _ui_handle_recipient_not_found(const char * const recipient, const char * const
     ProfPrivateWin *privatewin = wins_get_private(recipient);
     if (privatewin) {
         cons_show_error("Recipient %s not found: %s", recipient, err_msg);
-        win_save_vprint(&privatewin->super, '!', NULL, 0, THEME_ERROR, "", "Recipient %s not found: %s", recipient, err_msg);
+        win_save_vprint((ProfWin*) privatewin, '!', NULL, 0, THEME_ERROR, "", "Recipient %s not found: %s", recipient, err_msg);
         return;
     }
 
@@ -2342,42 +2345,44 @@ _ui_show_room_info(ProfMucWin *mucwin)
     char *role = muc_role_str(mucwin->roomjid);
     char *affiliation = muc_affiliation_str(mucwin->roomjid);
 
-    win_save_vprint(&mucwin->super, '!', NULL, 0, 0, "", "Room: %s", mucwin->roomjid);
-    win_save_vprint(&mucwin->super, '!', NULL, 0, 0, "", "Affiliation: %s", affiliation);
-    win_save_vprint(&mucwin->super, '!', NULL, 0, 0, "", "Role: %s", role);
-    win_save_print(&mucwin->super, '-', NULL, 0, 0, "", "");
+    ProfWin *window = (ProfWin*) mucwin;
+    win_save_vprint(window, '!', NULL, 0, 0, "", "Room: %s", mucwin->roomjid);
+    win_save_vprint(window, '!', NULL, 0, 0, "", "Affiliation: %s", affiliation);
+    win_save_vprint(window, '!', NULL, 0, 0, "", "Role: %s", role);
+    win_save_print(window, '-', NULL, 0, 0, "", "");
 }
 
 static void
 _ui_show_room_role_list(ProfMucWin *mucwin, muc_role_t role)
 {
+    ProfWin *window = (ProfWin*) mucwin;
     GSList *occupants = muc_occupants_by_role(mucwin->roomjid, role);
 
     if (!occupants) {
         switch (role) {
             case MUC_ROLE_MODERATOR:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "No moderators found.");
+                win_save_print(window, '!', NULL, 0, 0, "", "No moderators found.");
                 break;
             case MUC_ROLE_PARTICIPANT:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "No participants found.");
+                win_save_print(window, '!', NULL, 0, 0, "", "No participants found.");
                 break;
             case MUC_ROLE_VISITOR:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "No visitors found.");
+                win_save_print(window, '!', NULL, 0, 0, "", "No visitors found.");
                 break;
             default:
                 break;
         }
-        win_save_print(&mucwin->super, '-', NULL, 0, 0, "", "");
+        win_save_print(window, '-', NULL, 0, 0, "", "");
     } else {
         switch (role) {
             case MUC_ROLE_MODERATOR:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Moderators:");
+                win_save_print(window, '!', NULL, 0, 0, "", "Moderators:");
                 break;
             case MUC_ROLE_PARTICIPANT:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Participants:");
+                win_save_print(window, '!', NULL, 0, 0, "", "Participants:");
                 break;
             case MUC_ROLE_VISITOR:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Visitors:");
+                win_save_print(window, '!', NULL, 0, 0, "", "Visitors:");
                 break;
             default:
                 break;
@@ -2388,55 +2393,56 @@ _ui_show_room_role_list(ProfMucWin *mucwin, muc_role_t role)
             Occupant *occupant = curr_occupant->data;
             if (occupant->role == role) {
                 if (occupant->jid) {
-                    win_save_vprint(&mucwin->super, '!', NULL, 0, 0, "", "  %s (%s)", occupant->nick, occupant->jid);
+                    win_save_vprint(window, '!', NULL, 0, 0, "", "  %s (%s)", occupant->nick, occupant->jid);
                 } else {
-                    win_save_vprint(&mucwin->super, '!', NULL, 0, 0, "", "  %s", occupant->nick);
+                    win_save_vprint(window, '!', NULL, 0, 0, "", "  %s", occupant->nick);
                 }
             }
 
             curr_occupant = g_slist_next(curr_occupant);
         }
 
-        win_save_print(&mucwin->super, '-', NULL, 0, 0, "", "");
+        win_save_print(window, '-', NULL, 0, 0, "", "");
     }
 }
 
 static void
 _ui_show_room_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation)
 {
+    ProfWin *window = (ProfWin*) mucwin;
     GSList *occupants = muc_occupants_by_affiliation(mucwin->roomjid, affiliation);
 
     if (!occupants) {
         switch (affiliation) {
             case MUC_AFFILIATION_OWNER:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "No owners found.");
+                win_save_print(window, '!', NULL, 0, 0, "", "No owners found.");
                 break;
             case MUC_AFFILIATION_ADMIN:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "No admins found.");
+                win_save_print(window, '!', NULL, 0, 0, "", "No admins found.");
                 break;
             case MUC_AFFILIATION_MEMBER:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "No members found.");
+                win_save_print(window, '!', NULL, 0, 0, "", "No members found.");
                 break;
             case MUC_AFFILIATION_OUTCAST:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "No outcasts found.");
+                win_save_print(window, '!', NULL, 0, 0, "", "No outcasts found.");
                 break;
             default:
                 break;
         }
-        win_save_print(&mucwin->super, '-', NULL, 0, 0, "", "");
+        win_save_print(window, '-', NULL, 0, 0, "", "");
     } else {
         switch (affiliation) {
             case MUC_AFFILIATION_OWNER:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Owners:");
+                win_save_print(window, '!', NULL, 0, 0, "", "Owners:");
                 break;
             case MUC_AFFILIATION_ADMIN:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Admins:");
+                win_save_print(window, '!', NULL, 0, 0, "", "Admins:");
                 break;
             case MUC_AFFILIATION_MEMBER:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Members:");
+                win_save_print(window, '!', NULL, 0, 0, "", "Members:");
                 break;
             case MUC_AFFILIATION_OUTCAST:
-                win_save_print(&mucwin->super, '!', NULL, 0, 0, "", "Outcasts:");
+                win_save_print(window, '!', NULL, 0, 0, "", "Outcasts:");
                 break;
             default:
                 break;
@@ -2447,16 +2453,16 @@ _ui_show_room_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation
             Occupant *occupant = curr_occupant->data;
             if (occupant->affiliation == affiliation) {
                 if (occupant->jid) {
-                    win_save_vprint(&mucwin->super, '!', NULL, 0, 0, "", "  %s (%s)", occupant->nick, occupant->jid);
+                    win_save_vprint(window, '!', NULL, 0, 0, "", "  %s (%s)", occupant->nick, occupant->jid);
                 } else {
-                    win_save_vprint(&mucwin->super, '!', NULL, 0, 0, "", "  %s", occupant->nick);
+                    win_save_vprint(window, '!', NULL, 0, 0, "", "  %s", occupant->nick);
                 }
             }
 
             curr_occupant = g_slist_next(curr_occupant);
         }
 
-        win_save_print(&mucwin->super, '-', NULL, 0, 0, "", "");
+        win_save_print(window, '-', NULL, 0, 0, "", "");
     }
 }
 
@@ -2594,16 +2600,17 @@ _ui_handle_form_field(ProfWin *window, char *tag, FormField *field)
 static void
 _ui_show_form(ProfMucConfWin *confwin)
 {
+    ProfWin *window = (ProfWin*) confwin;
     if (confwin->form->title != NULL) {
-        win_save_print(&confwin->super, '-', NULL, NO_EOL, 0, "", "Form title: ");
-        win_save_print(&confwin->super, '-', NULL, NO_DATE, 0, "", confwin->form->title);
+        win_save_print(window, '-', NULL, NO_EOL, 0, "", "Form title: ");
+        win_save_print(window, '-', NULL, NO_DATE, 0, "", confwin->form->title);
     } else {
         gchar **split_recipient = g_strsplit(confwin->from, " ", 2);
         char *roomjid = split_recipient[0];
-        win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "Configuration for room %s.", roomjid);
+        win_save_vprint(window, '-', NULL, 0, 0, "", "Configuration for room %s.", roomjid);
         g_strfreev(split_recipient);
     }
-    win_save_print(&confwin->super, '-', NULL, 0, 0, "", "");
+    win_save_print(window, '-', NULL, 0, 0, "", "");
 
     ui_show_form_help(confwin);
 
@@ -2615,11 +2622,11 @@ _ui_show_form(ProfMucConfWin *confwin)
         if ((g_strcmp0(field->type, "fixed") == 0) && field->values) {
             if (field->values) {
                 char *value = field->values->data;
-                win_save_print(&confwin->super, '-', NULL, 0, 0, "", value);
+                win_save_print(window, '-', NULL, 0, 0, "", value);
             }
         } else if (g_strcmp0(field->type, "hidden") != 0 && field->var) {
             char *tag = g_hash_table_lookup(confwin->form->var_to_tag, field->var);
-            _ui_handle_form_field(&confwin->super, tag, field);
+            _ui_handle_form_field(window, tag, field);
         }
 
         curr_field = g_slist_next(curr_field);
@@ -2755,18 +2762,19 @@ _ui_handle_room_config_submit_result_error(const char * const roomjid, const cha
 static void
 _ui_show_form_field_help(ProfMucConfWin *confwin, char *tag)
 {
+    ProfWin *window = (ProfWin*) confwin;
     FormField *field = form_get_field_by_tag(confwin->form, tag);
     if (field != NULL) {
-        win_save_print(&confwin->super, '-', NULL, NO_EOL, 0, "", field->label);
+        win_save_print(window, '-', NULL, NO_EOL, 0, "", field->label);
         if (field->required) {
-            win_save_print(&confwin->super, '-', NULL, NO_DATE, 0, "", " (Required):");
+            win_save_print(window, '-', NULL, NO_DATE, 0, "", " (Required):");
         } else {
-            win_save_print(&confwin->super, '-', NULL, NO_DATE, 0, "", ":");
+            win_save_print(window, '-', NULL, NO_DATE, 0, "", ":");
         }
         if (field->description != NULL) {
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Description : %s", field->description);
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Description : %s", field->description);
         }
-        win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Type        : %s", field->type);
+        win_save_vprint(window, '-', NULL, 0, 0, "", "  Type        : %s", field->type);
 
         int num_values = 0;
         GSList *curr_option = NULL;
@@ -2775,51 +2783,51 @@ _ui_show_form_field_help(ProfMucConfWin *confwin, char *tag)
         switch (field->type_t) {
         case FIELD_TEXT_SINGLE:
         case FIELD_TEXT_PRIVATE:
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Set         : /%s <value>", tag);
-            win_save_print(&confwin->super, '-', NULL, 0, 0, "", "  Where       : <value> is any text");
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Set         : /%s <value>", tag);
+            win_save_print(window, '-', NULL, 0, 0, "", "  Where       : <value> is any text");
             break;
         case FIELD_TEXT_MULTI:
             num_values = form_get_value_count(confwin->form, tag);
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Add         : /%s add <value>", tag);
-            win_save_print(&confwin->super, '-', NULL, 0, 0, "", "  Where       : <value> is any text");
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Add         : /%s add <value>", tag);
+            win_save_print(window, '-', NULL, 0, 0, "", "  Where       : <value> is any text");
             if (num_values > 0) {
-                win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Remove      : /%s remove <value>", tag);
-                win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Where       : <value> between 'val1' and 'val%d'", num_values);
+                win_save_vprint(window, '-', NULL, 0, 0, "", "  Remove      : /%s remove <value>", tag);
+                win_save_vprint(window, '-', NULL, 0, 0, "", "  Where       : <value> between 'val1' and 'val%d'", num_values);
             }
             break;
         case FIELD_BOOLEAN:
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Set         : /%s <value>", tag);
-            win_save_print(&confwin->super, '-', NULL, 0, 0, "", "  Where       : <value> is either 'on' or 'off'");
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Set         : /%s <value>", tag);
+            win_save_print(window, '-', NULL, 0, 0, "", "  Where       : <value> is either 'on' or 'off'");
             break;
         case FIELD_LIST_SINGLE:
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Set         : /%s <value>", tag);
-            win_save_print(&confwin->super, '-', NULL, 0, 0, "", "  Where       : <value> is one of");
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Set         : /%s <value>", tag);
+            win_save_print(window, '-', NULL, 0, 0, "", "  Where       : <value> is one of");
             curr_option = field->options;
             while (curr_option != NULL) {
                 option = curr_option->data;
-                win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "                  %s", option->value);
+                win_save_vprint(window, '-', NULL, 0, 0, "", "                  %s", option->value);
                 curr_option = g_slist_next(curr_option);
             }
             break;
         case FIELD_LIST_MULTI:
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Add         : /%s add <value>", tag);
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Remove      : /%s remove <value>", tag);
-            win_save_print(&confwin->super, '-', NULL, 0, 0, "", "  Where       : <value> is one of");
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Add         : /%s add <value>", tag);
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Remove      : /%s remove <value>", tag);
+            win_save_print(window, '-', NULL, 0, 0, "", "  Where       : <value> is one of");
             curr_option = field->options;
             while (curr_option != NULL) {
                 option = curr_option->data;
-                win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "                  %s", option->value);
+                win_save_vprint(window, '-', NULL, 0, 0, "", "                  %s", option->value);
                 curr_option = g_slist_next(curr_option);
             }
             break;
         case FIELD_JID_SINGLE:
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Set         : /%s <value>", tag);
-            win_save_print(&confwin->super, '-', NULL, 0, 0, "", "  Where       : <value> is a valid Jabber ID");
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Set         : /%s <value>", tag);
+            win_save_print(window, '-', NULL, 0, 0, "", "  Where       : <value> is a valid Jabber ID");
             break;
         case FIELD_JID_MULTI:
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Add         : /%s add <value>", tag);
-            win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "  Remove      : /%s remove <value>", tag);
-            win_save_print(&confwin->super, '-', NULL, 0, 0, "", "  Where       : <value> is a valid Jabber ID");
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Add         : /%s add <value>", tag);
+            win_save_vprint(window, '-', NULL, 0, 0, "", "  Remove      : /%s remove <value>", tag);
+            win_save_print(window, '-', NULL, 0, 0, "", "  Where       : <value> is a valid Jabber ID");
             break;
         case FIELD_FIXED:
         case FIELD_UNKNOWN:
@@ -2828,7 +2836,7 @@ _ui_show_form_field_help(ProfMucConfWin *confwin, char *tag)
             break;
         }
     } else {
-        win_save_vprint(&confwin->super, '-', NULL, 0, 0, "", "No such field %s", tag);
+        win_save_vprint(window, '-', NULL, 0, 0, "", "No such field %s", tag);
     }
 }
 
@@ -2836,9 +2844,10 @@ static void
 _ui_show_form_help(ProfMucConfWin *confwin)
 {
     if (confwin->form->instructions != NULL) {
-        win_save_print(&confwin->super, '-', NULL, 0, 0, "", "Supplied instructions:");
-        win_save_print(&confwin->super, '-', NULL, 0, 0, "", confwin->form->instructions);
-        win_save_print(&confwin->super, '-', NULL, 0, 0, "", "");
+        ProfWin *window = (ProfWin*) confwin;
+        win_save_print(window, '-', NULL, 0, 0, "", "Supplied instructions:");
+        win_save_print(window, '-', NULL, 0, 0, "", confwin->form->instructions);
+        win_save_print(window, '-', NULL, 0, 0, "", "");
     }
 }
 
diff --git a/src/ui/occupantswin.c b/src/ui/occupantswin.c
index 2afc3e26..64d5dc7b 100644
--- a/src/ui/occupantswin.c
+++ b/src/ui/occupantswin.c
@@ -61,7 +61,7 @@ _occupantswin_occupants(const char * const roomjid)
     if (mucwin) {
         GList *occupants = muc_roster(roomjid);
         if (occupants) {
-            ProfLayoutSplit *layout = (ProfLayoutSplit*)mucwin->super.layout;
+            ProfLayoutSplit *layout = (ProfLayoutSplit*)mucwin->window.layout;
             assert(layout->memcheck == LAYOUT_SPLIT_MEMCHECK);
 
             werase(layout->subwin);
diff --git a/src/ui/window.c b/src/ui/window.c
index 513f5842..c84a76bb 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -83,15 +83,15 @@ _win_create_simple_layout(void)
     int cols = getmaxx(stdscr);
 
     ProfLayoutSimple *layout = malloc(sizeof(ProfLayoutSimple));
-    layout->super.type = LAYOUT_SIMPLE;
-    layout->super.win = newpad(PAD_SIZE, cols);
-    wbkgd(layout->super.win, theme_attrs(THEME_TEXT));
-    layout->super.buffer = buffer_create();
-    layout->super.y_pos = 0;
-    layout->super.paged = 0;
-    scrollok(layout->super.win, TRUE);
+    layout->base.type = LAYOUT_SIMPLE;
+    layout->base.win = newpad(PAD_SIZE, cols);
+    wbkgd(layout->base.win, theme_attrs(THEME_TEXT));
+    layout->base.buffer = buffer_create();
+    layout->base.y_pos = 0;
+    layout->base.paged = 0;
+    scrollok(layout->base.win, TRUE);
 
-    return &layout->super;
+    return &layout->base;
 }
 
 static ProfLayout*
@@ -100,40 +100,40 @@ _win_create_split_layout(void)
     int cols = getmaxx(stdscr);
 
     ProfLayoutSplit *layout = malloc(sizeof(ProfLayoutSplit));
-    layout->super.type = LAYOUT_SPLIT;
-    layout->super.win = newpad(PAD_SIZE, cols);
-    wbkgd(layout->super.win, theme_attrs(THEME_TEXT));
-    layout->super.buffer = buffer_create();
-    layout->super.y_pos = 0;
-    layout->super.paged = 0;
-    scrollok(layout->super.win, TRUE);
+    layout->base.type = LAYOUT_SPLIT;
+    layout->base.win = newpad(PAD_SIZE, cols);
+    wbkgd(layout->base.win, theme_attrs(THEME_TEXT));
+    layout->base.buffer = buffer_create();
+    layout->base.y_pos = 0;
+    layout->base.paged = 0;
+    scrollok(layout->base.win, TRUE);
     layout->subwin = NULL;
     layout->sub_y_pos = 0;
     layout->memcheck = LAYOUT_SPLIT_MEMCHECK;
 
-    return &layout->super;
+    return &layout->base;
 }
 
 ProfWin*
 win_create_console(void)
 {
     ProfConsoleWin *new_win = malloc(sizeof(ProfConsoleWin));
-    new_win->super.type = WIN_CONSOLE;
-    new_win->super.layout = _win_create_split_layout();
-    new_win->super.unread = 0;
+    new_win->window.type = WIN_CONSOLE;
+    new_win->window.layout = _win_create_split_layout();
+    new_win->window.unread = 0;
 
     new_win->from = strdup(CONS_WIN_TITLE);
 
-    return &new_win->super;
+    return &new_win->window;
 }
 
 ProfWin*
 win_create_chat(const char * const barejid)
 {
     ProfChatWin *new_win = malloc(sizeof(ProfChatWin));
-    new_win->super.type = WIN_CHAT;
-    new_win->super.layout = _win_create_simple_layout();
-    new_win->super.unread = 0;
+    new_win->window.type = WIN_CHAT;
+    new_win->window.layout = _win_create_simple_layout();
+    new_win->window.unread = 0;
 
     new_win->barejid = strdup(barejid);
     new_win->resource = NULL;
@@ -143,7 +143,7 @@ win_create_chat(const char * const barejid)
 
     new_win->memcheck = PROFCHATWIN_MEMCHECK;
 
-    return &new_win->super;
+    return &new_win->window;
 }
 
 ProfWin*
@@ -152,80 +152,80 @@ win_create_muc(const char * const roomjid)
     ProfMucWin *new_win = malloc(sizeof(ProfMucWin));
     int cols = getmaxx(stdscr);
 
-    new_win->super.type = WIN_MUC;
+    new_win->window.type = WIN_MUC;
 
     ProfLayoutSplit *layout = malloc(sizeof(ProfLayoutSplit));
-    layout->super.type = LAYOUT_SPLIT;
+    layout->base.type = LAYOUT_SPLIT;
 
     if (prefs_get_boolean(PREF_OCCUPANTS)) {
         int subwin_cols = win_occpuants_cols();
-        layout->super.win = newpad(PAD_SIZE, cols - subwin_cols);
-        wbkgd(layout->super.win, theme_attrs(THEME_TEXT));
+        layout->base.win = newpad(PAD_SIZE, cols - subwin_cols);
+        wbkgd(layout->base.win, theme_attrs(THEME_TEXT));
         layout->subwin = newpad(PAD_SIZE, subwin_cols);;
         wbkgd(layout->subwin, theme_attrs(THEME_TEXT));
     } else {
-        layout->super.win = newpad(PAD_SIZE, (cols));
-        wbkgd(layout->super.win, theme_attrs(THEME_TEXT));
+        layout->base.win = newpad(PAD_SIZE, (cols));
+        wbkgd(layout->base.win, theme_attrs(THEME_TEXT));
         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;
-    scrollok(layout->super.win, TRUE);
-    new_win->super.layout = (ProfLayout*)layout;
+    layout->base.buffer = buffer_create();
+    layout->base.y_pos = 0;
+    layout->base.paged = 0;
+    scrollok(layout->base.win, TRUE);
+    new_win->window.layout = (ProfLayout*)layout;
 
     new_win->roomjid = strdup(roomjid);
-    new_win->super.unread = 0;
+    new_win->window.unread = 0;
 
     new_win->memcheck = PROFMUCWIN_MEMCHECK;
 
-    return &new_win->super;
+    return &new_win->window;
 }
 
 ProfWin*
 win_create_muc_config(const char * const title, DataForm *form)
 {
     ProfMucConfWin *new_win = malloc(sizeof(ProfMucConfWin));
-    new_win->super.type = WIN_MUC_CONFIG;
-    new_win->super.layout = _win_create_simple_layout();
-    new_win->super.unread = 0;
+    new_win->window.type = WIN_MUC_CONFIG;
+    new_win->window.layout = _win_create_simple_layout();
+    new_win->window.unread = 0;
 
     new_win->from = strdup(title);
     new_win->form = form;
 
     new_win->memcheck = PROFCONFWIN_MEMCHECK;
 
-    return &new_win->super;
+    return &new_win->window;
 }
 
 ProfWin*
 win_create_private(const char * const fulljid)
 {
     ProfPrivateWin *new_win = malloc(sizeof(ProfPrivateWin));
-    new_win->super.type = WIN_PRIVATE;
-    new_win->super.layout = _win_create_simple_layout();
-    new_win->super.unread = 0;
+    new_win->window.type = WIN_PRIVATE;
+    new_win->window.layout = _win_create_simple_layout();
+    new_win->window.unread = 0;
 
     new_win->fulljid = strdup(fulljid);
 
     new_win->memcheck = PROFPRIVATEWIN_MEMCHECK;
 
-    return &new_win->super;
+    return &new_win->window;
 }
 
 ProfWin*
 win_create_xmlconsole(void)
 {
     ProfXMLWin *new_win = malloc(sizeof(ProfXMLWin));
-    new_win->super.type = WIN_XML;
-    new_win->super.layout = _win_create_simple_layout();
-    new_win->super.unread = 0;
+    new_win->window.type = WIN_XML;
+    new_win->window.layout = _win_create_simple_layout();
+    new_win->window.unread = 0;
 
     new_win->from = strdup(XML_WIN_TITLE);
 
-    return &new_win->super;
+    return &new_win->window;
 }
 
 void
@@ -239,7 +239,7 @@ win_hide_subwin(ProfWin *window)
         layout->subwin = NULL;
         layout->sub_y_pos = 0;
         int cols = getmaxx(stdscr);
-        wresize(layout->super.win, PAD_SIZE, cols);
+        wresize(layout->base.win, PAD_SIZE, cols);
         win_redraw(window);
     } else {
         int cols = getmaxx(stdscr);
@@ -267,7 +267,7 @@ win_show_subwin(ProfWin *window)
     ProfLayoutSplit *layout = (ProfLayoutSplit*)window->layout;
     layout->subwin = newpad(PAD_SIZE, subwin_cols);
     wbkgd(layout->subwin, theme_attrs(THEME_TEXT));
-    wresize(layout->super.win, PAD_SIZE, cols - subwin_cols);
+    wresize(layout->base.win, PAD_SIZE, cols - subwin_cols);
     win_redraw(window);
 }
 
@@ -279,8 +279,8 @@ win_free(ProfWin* window)
         if (layout->subwin) {
             delwin(layout->subwin);
         }
-        buffer_free(layout->super.buffer);
-        delwin(layout->super.win);
+        buffer_free(layout->base.buffer);
+        delwin(layout->base.win);
     } else {
         buffer_free(window->layout->buffer);
         delwin(window->layout->win);
@@ -374,10 +374,10 @@ win_update_virtual(ProfWin *window)
             } else {
                 subwin_cols = win_roster_cols();
             }
-            pnoutrefresh(layout->super.win, layout->super.y_pos, 0, 1, 0, rows-3, (cols-subwin_cols)-1);
+            pnoutrefresh(layout->base.win, layout->base.y_pos, 0, 1, 0, rows-3, (cols-subwin_cols)-1);
             pnoutrefresh(layout->subwin, layout->sub_y_pos, 0, 1, (cols-subwin_cols), rows-3, cols-1);
         } else {
-            pnoutrefresh(layout->super.win, layout->super.y_pos, 0, 1, 0, rows-3, cols-1);
+            pnoutrefresh(layout->base.win, layout->base.y_pos, 0, 1, 0, rows-3, cols-1);
         }
     } else {
         pnoutrefresh(window->layout->win, window->layout->y_pos, 0, 1, 0, rows-3, cols-1);
diff --git a/src/ui/window.h b/src/ui/window.h
index ddf34c51..39df44d7 100644
--- a/src/ui/window.h
+++ b/src/ui/window.h
@@ -76,11 +76,11 @@ typedef struct prof_layout_t {
 } ProfLayout;
 
 typedef struct prof_layout_simple_t {
-    ProfLayout super;
+    ProfLayout base;
 } ProfLayoutSimple;
 
 typedef struct prof_layout_split_t {
-    ProfLayout super;
+    ProfLayout base;
     WINDOW *subwin;
     int sub_y_pos;
     unsigned long memcheck;
@@ -102,12 +102,12 @@ typedef struct prof_win_t {
 } ProfWin;
 
 typedef struct prof_console_win_t {
-    ProfWin super;
+    ProfWin window;
     char *from;
 } ProfConsoleWin;
 
 typedef struct prof_chat_win_t {
-    ProfWin super;
+    ProfWin window;
     char *barejid;
     gboolean is_otr;
     gboolean is_trusted;
@@ -117,26 +117,26 @@ typedef struct prof_chat_win_t {
 } ProfChatWin;
 
 typedef struct prof_muc_win_t {
-    ProfWin super;
+    ProfWin window;
     char *roomjid;
     unsigned long memcheck;
 } ProfMucWin;
 
 typedef struct prof_mucconf_win_t {
-    ProfWin super;
+    ProfWin window;
     char *from;
     DataForm *form;
     unsigned long memcheck;
 } ProfMucConfWin;
 
 typedef struct prof_private_win_t {
-    ProfWin super;
+    ProfWin window;
     char *fulljid;
     unsigned long memcheck;
 } ProfPrivateWin;
 
 typedef struct prof_xml_win_t {
-    ProfWin super;
+    ProfWin window;
     char *from;
 } ProfXMLWin;
 
diff --git a/src/ui/windows.c b/src/ui/windows.c
index a3a50a1d..1d660164 100644
--- a/src/ui/windows.c
+++ b/src/ui/windows.c
@@ -505,11 +505,11 @@ wins_resize_all(void)
                 } else if (window->type == WIN_MUC) {
                     subwin_cols = win_occpuants_cols();
                 }
-                wresize(layout->super.win, PAD_SIZE, cols - subwin_cols);
+                wresize(layout->base.win, PAD_SIZE, cols - subwin_cols);
                 wresize(layout->subwin, PAD_SIZE, subwin_cols);
                 rosterwin_roster();
             } else {
-                wresize(layout->super.win, PAD_SIZE, cols);
+                wresize(layout->base.win, PAD_SIZE, cols);
             }
         } else {
             wresize(window->layout->win, PAD_SIZE, cols);
@@ -551,12 +551,12 @@ wins_show_subwin(ProfWin *window)
     if (current_win->type == WIN_MUC) {
         ProfLayoutSplit *layout = (ProfLayoutSplit*)current_win->layout;
         subwin_cols = win_occpuants_cols();
-        pnoutrefresh(layout->super.win, layout->super.y_pos, 0, 1, 0, rows-3, (cols-subwin_cols)-1);
+        pnoutrefresh(layout->base.win, layout->base.y_pos, 0, 1, 0, rows-3, (cols-subwin_cols)-1);
         pnoutrefresh(layout->subwin, layout->sub_y_pos, 0, 1, (cols-subwin_cols), rows-3, cols-1);
     } else if (current_win->type == WIN_CONSOLE) {
         ProfLayoutSplit *layout = (ProfLayoutSplit*)current_win->layout;
         subwin_cols = win_roster_cols();
-        pnoutrefresh(layout->super.win, layout->super.y_pos, 0, 1, 0, rows-3, (cols-subwin_cols)-1);
+        pnoutrefresh(layout->base.win, layout->base.y_pos, 0, 1, 0, rows-3, (cols-subwin_cols)-1);
         pnoutrefresh(layout->subwin, layout->sub_y_pos, 0, 1, (cols-subwin_cols), rows-3, cols-1);
     }
 }