about summary refs log tree commit diff stats
path: root/src/windows.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows.c')
-rw-r--r--src/windows.c296
1 files changed, 184 insertions, 112 deletions
diff --git a/src/windows.c b/src/windows.c
index eb9b4580..c56ceb70 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -88,11 +88,11 @@ static void _set_current(int index);
 static void _create_windows(void);
 static void _cons_splash_logo(void);
 static void _cons_show_basic_help(void);
-static void _cons_show_contact(PContact contact);
+static void _win_show_contact(ProfWin *window, PContact contact);
 static int _find_prof_win_index(const char * const contact);
 static int _new_prof_win(const char * const contact, win_type_t type);
 static void _current_window_refresh(void);
-static void _win_show_time(WINDOW *win);
+static void _win_show_time(WINDOW *win, char showchar);
 static void _win_show_user(WINDOW *win, const char * const user, const int colour);
 static void _win_show_message(WINDOW *win, const char * const message);
 static void _win_show_error_msg(WINDOW *win, const char * const message);
@@ -125,8 +125,10 @@ ui_init(void)
     initscr();
     raw();
     keypad(stdscr, TRUE);
-    mousemask(ALL_MOUSE_EVENTS, NULL);
-    mouseinterval(5);
+    if (prefs_get_mouse()) {
+        mousemask(ALL_MOUSE_EVENTS, NULL);
+        mouseinterval(5);
+    }
     ui_load_colours();
     refresh();
     create_title_bar();
@@ -345,7 +347,7 @@ ui_show_incoming_msg(const char * const from, const char * const message,
     // no spare windows left
     if (win_index == 0) {
         if (tv_stamp == NULL) {
-            _win_show_time(console->win);
+            _win_show_time(console->win, '-');
         } else {
             GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp);
             gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
@@ -382,7 +384,7 @@ ui_show_incoming_msg(const char * const from, const char * const message,
         // currently viewing chat window with sender
         if (win_index == current_index) {
             if (tv_stamp == NULL) {
-                _win_show_time(win);
+                _win_show_time(win, '-');
             } else {
                 GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp);
                 gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
@@ -421,7 +423,7 @@ ui_show_incoming_msg(const char * const from, const char * const message,
             }
 
             if (tv_stamp == NULL) {
-                _win_show_time(win);
+                _win_show_time(win, '-');
             } else {
                 GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp);
                 gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
@@ -495,7 +497,7 @@ ui_disconnected(void)
     for (i = 1; i < NUM_WINS; i++) {
         if (windows[i] != NULL) {
             WINDOW *win = windows[i]->win;
-            _win_show_time(win);
+            _win_show_time(win, '-');
             wattron(win, COLOUR_ERROR);
             wprintw(win, "%s\n", "Lost connection.");
             wattroff(win, COLOUR_ERROR);
@@ -593,7 +595,7 @@ win_current_show(const char * const msg, ...)
     va_start(arg, msg);
     GString *fmt_msg = g_string_new(NULL);
     g_string_vprintf(fmt_msg, msg, arg);
-    _win_show_time(current->win);
+    _win_show_time(current->win, '-');
     wprintw(current->win, "%s\n", fmt_msg->str);
     g_string_free(fmt_msg, TRUE);
     va_end(arg);
@@ -605,7 +607,7 @@ void
 win_current_bad_show(const char * const msg)
 {
     WINDOW *win = current->win;
-    _win_show_time(win);
+    _win_show_time(win, '-');
     wattron(win, COLOUR_ERROR);
     wprintw(win, "%s\n", msg);
     wattroff(win, COLOUR_ERROR);
@@ -645,7 +647,7 @@ win_show_error_msg(const char * const from, const char *err_msg)
     // chat window exists
     if (win_index < NUM_WINS) {
         win = windows[win_index]->win;
-        _win_show_time(win);
+        _win_show_time(win, '-');
         _win_show_error_msg(win, err_msg);
         if (win_index == current_index) {
             dirty = TRUE;
@@ -675,7 +677,7 @@ win_show_system_msg(const char * const from, const char *message)
     }
     win = windows[win_index]->win;
 
-    _win_show_time(win);
+    _win_show_time(win, '-');
     wprintw(win, "*%s %s\n", bare_jid, message);
 
     // this is the current window
@@ -697,7 +699,7 @@ win_show_gone(const char * const from)
     // chat window exists
     if (win_index < NUM_WINS) {
         win = windows[win_index]->win;
-        _win_show_time(win);
+        _win_show_time(win, '-');
         wattron(win, COLOUR_GONE);
         wprintw(win, "*%s ", from);
         wprintw(win, "has left the conversation.");
@@ -719,7 +721,16 @@ win_new_chat_win(const char * const to)
 
     // create new window
     if (win_index == NUM_WINS) {
-        win_index = _new_prof_win(to, WIN_CHAT);
+        Jid *jid = jid_create(to);
+
+        if (muc_room_is_active(jid)) {
+            win_index = _new_prof_win(to, WIN_PRIVATE);
+        } else {
+            win_index = _new_prof_win(to, WIN_CHAT);
+        }
+
+        jid_destroy(jid);
+
         win = windows[win_index]->win;
 
         if (prefs_get_chlog() && prefs_get_history()) {
@@ -753,13 +764,16 @@ win_show_outgoing_msg(const char * const from, const char * const to,
 
     // create new window
     if (win_index == NUM_WINS) {
+        Jid *jid = jid_create(to);
 
-        if (muc_room_is_active(to)) {
+        if (muc_room_is_active(jid)) {
             win_index = _new_prof_win(to, WIN_PRIVATE);
         } else {
             win_index = _new_prof_win(to, WIN_CHAT);
         }
 
+        jid_destroy(jid);
+
         win = windows[win_index]->win;
 
         if (prefs_get_chlog() && prefs_get_history()) {
@@ -779,7 +793,7 @@ win_show_outgoing_msg(const char * const from, const char * const to,
         win = windows[win_index]->win;
     }
 
-    _win_show_time(win);
+    _win_show_time(win, '-');
     if (strncmp(message, "/me ", 4) == 0) {
         wattron(win, COLOUR_ME);
         wprintw(win, "*%s ", from);
@@ -794,33 +808,40 @@ win_show_outgoing_msg(const char * const from, const char * const to,
 }
 
 void
-win_join_chat(const char * const room, const char * const nick)
+win_join_chat(Jid *jid)
 {
-    int win_index = _find_prof_win_index(room);
+    int win_index = _find_prof_win_index(jid->barejid);
 
     // create new window
     if (win_index == NUM_WINS) {
-        win_index = _new_prof_win(room, WIN_MUC);
+        win_index = _new_prof_win(jid->barejid, WIN_MUC);
     }
 
     ui_switch_win(win_index);
 }
 
 void
-win_show_room_roster(const char * const room)
+win_show_room_roster(const char * const room, GList *roster, const char * const presence)
 {
     int win_index = _find_prof_win_index(room);
     WINDOW *win = windows[win_index]->win;
 
-    GList *roster = muc_get_roster(room);
-
+    _win_show_time(win, '!');
     if ((roster == NULL) || (g_list_length(roster) == 0)) {
         wattron(win, COLOUR_ROOMINFO);
-        wprintw(win, "You are alone!\n");
+        if (presence == NULL) {
+            wprintw(win, "Room is empty.\n");
+        } else {
+            wprintw(win, "No participants are %s.\n", presence);
+        }
         wattroff(win, COLOUR_ROOMINFO);
     } else {
         wattron(win, COLOUR_ROOMINFO);
-        wprintw(win, "Room occupants:\n");
+        if (presence == NULL) {
+            wprintw(win, "Participants: ");
+        } else {
+            wprintw(win, "Participants (%s): ", presence);
+        }
         wattroff(win, COLOUR_ROOMINFO);
         wattron(win, COLOUR_ONLINE);
 
@@ -880,9 +901,9 @@ win_show_room_member_offline(const char * const room, const char * const nick)
     int win_index = _find_prof_win_index(room);
     WINDOW *win = windows[win_index]->win;
 
-    _win_show_time(win);
+    _win_show_time(win, '!');
     wattron(win, COLOUR_OFFLINE);
-    wprintw(win, "-- %s has left the room.\n", nick);
+    wprintw(win, "<- %s has left the room.\n", nick);
     wattroff(win, COLOUR_OFFLINE);
 
     if (win_index == current_index)
@@ -896,9 +917,9 @@ win_show_room_member_online(const char * const room, const char * const nick,
     int win_index = _find_prof_win_index(room);
     WINDOW *win = windows[win_index]->win;
 
-    _win_show_time(win);
+    _win_show_time(win, '!');
     wattron(win, COLOUR_ONLINE);
-    wprintw(win, "++ %s has joined the room.\n", nick);
+    wprintw(win, "-> %s has joined the room.\n", nick);
     wattroff(win, COLOUR_ONLINE);
 
     if (win_index == current_index)
@@ -926,7 +947,7 @@ win_show_room_member_nick_change(const char * const room,
     int win_index = _find_prof_win_index(room);
     WINDOW *win = windows[win_index]->win;
 
-    _win_show_time(win);
+    _win_show_time(win, '!');
     wattron(win, COLOUR_THEM);
     wprintw(win, "** %s is now known as %s\n", old_nick, nick);
     wattroff(win, COLOUR_THEM);
@@ -941,7 +962,7 @@ win_show_room_nick_change(const char * const room, const char * const nick)
     int win_index = _find_prof_win_index(room);
     WINDOW *win = windows[win_index]->win;
 
-    _win_show_time(win);
+    _win_show_time(win, '!');
     wattron(win, COLOUR_ME);
     wprintw(win, "** You are now known as %s\n", nick);
     wattroff(win, COLOUR_ME);
@@ -983,7 +1004,7 @@ win_show_room_message(const char * const room_jid, const char * const nick,
     int win_index = _find_prof_win_index(room_jid);
     WINDOW *win = windows[win_index]->win;
 
-    _win_show_time(win);
+    _win_show_time(win, '-');
     if (strcmp(nick, muc_get_room_nick(room_jid)) != 0) {
         if (strncmp(message, "/me ", 4) == 0) {
             wattron(win, COLOUR_THEM);
@@ -1047,6 +1068,7 @@ win_show_room_subject(const char * const room_jid, const char * const subject)
     int win_index = _find_prof_win_index(room_jid);
     WINDOW *win = windows[win_index]->win;
 
+    _win_show_time(win, '!');
     wattron(win, COLOUR_ROOMINFO);
     wprintw(win, "Room subject: ");
     wattroff(win, COLOUR_ROOMINFO);
@@ -1069,6 +1091,7 @@ win_show_room_broadcast(const char * const room_jid, const char * const message)
     int win_index = _find_prof_win_index(room_jid);
     WINDOW *win = windows[win_index]->win;
 
+    _win_show_time(win, '!');
     wattron(win, COLOUR_ROOMINFO);
     wprintw(win, "Room message: ");
     wattroff(win, COLOUR_ROOMINFO);
@@ -1093,7 +1116,7 @@ cons_show_wins(void)
 
     cons_show("");
     cons_show("Active windows:");
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "1: Console\n");
 
     for (i = 1; i < NUM_WINS; i++) {
@@ -1106,7 +1129,7 @@ cons_show_wins(void)
         for (i = 1; i < NUM_WINS; i++) {
             if (windows[i] != NULL) {
                 ProfWin *window = windows[i];
-                _win_show_time(console->win);
+                _win_show_time(console->win, '-');
 
                 switch (window->type)
                 {
@@ -1163,9 +1186,50 @@ cons_show_status(const char * const contact)
     PContact pcontact = contact_list_get_contact(contact);
 
     if (pcontact != NULL) {
-        _cons_show_contact(pcontact);
+        _win_show_contact(console, pcontact);
+    } else {
+        cons_show("No such contact \"%s\" in roster.", contact);
+    }
+}
+
+void
+win_show_status(void)
+{
+    char *recipient = win_current_get_recipient();
+    PContact pcontact = contact_list_get_contact(recipient);
+
+    if (pcontact != NULL) {
+        _win_show_contact(current, pcontact);
     } else {
-        cons_show("No such contact %s in roster.", contact);
+        win_current_show("Error getting contact info.");
+    }
+}
+
+void
+win_private_show_status(void)
+{
+    Jid *jid = jid_create(win_current_get_recipient());
+
+    PContact pcontact = muc_get_participant(jid->barejid, jid->resourcepart);
+
+    if (pcontact != NULL) {
+        _win_show_contact(current, pcontact);
+    } else {
+        win_current_show("Error getting contact info.");
+    }
+
+    jid_destroy(jid);
+}
+
+void
+win_room_show_status(const char * const contact)
+{
+    PContact pcontact = muc_get_participant(win_current_get_recipient(), contact);
+
+    if (pcontact != NULL) {
+        _win_show_contact(current, pcontact);
+    } else {
+        win_current_show("No such participant \"%s\" in room.", contact);
     }
 }
 
@@ -1228,6 +1292,11 @@ cons_show_ui_prefs(void)
     else
         cons_show("Version checking (/vercheck) : OFF");
 
+    if (prefs_get_mouse())
+        cons_show("Mouse handling (/mouse)      : ON");
+    else
+        cons_show("Mouse handling (/mouse)      : OFF");
+
     if (prefs_get_statuses())
         cons_show("Status (/statuses)           : ON");
     else
@@ -1524,7 +1593,7 @@ cons_show_contacts(GSList *list)
     while(curr) {
         PContact contact = curr->data;
         if (strcmp(p_contact_subscription(contact), "none") != 0) {
-            _cons_show_contact(contact);
+            _win_show_contact(console, contact);
         }
         curr = g_slist_next(curr);
     }
@@ -1537,7 +1606,7 @@ cons_bad_show(const char * const msg, ...)
     va_start(arg, msg);
     GString *fmt_msg = g_string_new(NULL);
     g_string_vprintf(fmt_msg, msg, arg);
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_ERROR);
     wprintw(console->win, "%s\n", fmt_msg->str);
     wattroff(console->win, COLOUR_ERROR);
@@ -1554,7 +1623,7 @@ cons_bad_show(const char * const msg, ...)
 void
 cons_show_time(void)
 {
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
 }
 
 void
@@ -1564,7 +1633,7 @@ cons_show(const char * const msg, ...)
     va_start(arg, msg);
     GString *fmt_msg = g_string_new(NULL);
     g_string_vprintf(fmt_msg, msg, arg);
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "%s\n", fmt_msg->str);
     g_string_free(fmt_msg, TRUE);
     va_end(arg);
@@ -1591,7 +1660,7 @@ cons_show_word(const char * const word)
 void
 cons_bad_command(const char * const cmd)
 {
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "Unknown command: %s\n", cmd);
 
     if (current_index == 0) {
@@ -1610,7 +1679,7 @@ cons_about(void)
     if (prefs_get_splash()) {
         _cons_splash_logo();
     } else {
-        _win_show_time(console->win);
+        _win_show_time(console->win, '-');
 
         if (strcmp(PACKAGE_STATUS, "development") == 0) {
             wprintw(console->win, "Welcome to Profanity, version %sdev\n", PACKAGE_VERSION);
@@ -1619,21 +1688,21 @@ cons_about(void)
         }
     }
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "Copyright (C) 2012, 2013 James Booth <%s>.\n", PACKAGE_BUGREPORT);
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n");
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "\n");
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "This is free software; you are free to change and redistribute it.\n");
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "There is NO WARRANTY, to the extent permitted by law.\n");
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "\n");
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "Type '/help' to show complete help.\n");
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "\n");
 
     if (prefs_get_vercheck()) {
@@ -1659,12 +1728,12 @@ cons_check_version(gboolean not_available_msg)
 
         if (relase_valid) {
             if (_new_release(latest_release)) {
-                _win_show_time(console->win);
+                _win_show_time(console->win, '-');
                 wprintw(console->win, "A new version of Profanity is available: %s", latest_release);
-                _win_show_time(console->win);
+                _win_show_time(console->win, '-');
                 wprintw(console->win, "Check <http://www.profanity.im> for details.\n");
                 free(latest_release);
-                _win_show_time(console->win);
+                _win_show_time(console->win, '-');
                 wprintw(console->win, "\n");
             } else {
                 if (not_available_msg) {
@@ -1815,47 +1884,47 @@ _new_release(char *found_version)
 static void
 _cons_splash_logo(void)
 {
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "Welcome to\n");
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_SPLASH);
     wprintw(console->win, "                   ___            _           \n");
     wattroff(console->win, COLOUR_SPLASH);
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_SPLASH);
     wprintw(console->win, "                  / __)          (_)_         \n");
     wattroff(console->win, COLOUR_SPLASH);
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_SPLASH);
     wprintw(console->win, " ____   ____ ___ | |__ ____ ____  _| |_ _   _ \n");
     wattroff(console->win, COLOUR_SPLASH);
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_SPLASH);
     wprintw(console->win, "|  _ \\ / ___) _ \\|  __) _  |  _ \\| |  _) | | |\n");
     wattroff(console->win, COLOUR_SPLASH);
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_SPLASH);
     wprintw(console->win, "| | | | |  | |_| | | ( ( | | | | | | |_| |_| |\n");
     wattroff(console->win, COLOUR_SPLASH);
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_SPLASH);
     wprintw(console->win, "| ||_/|_|   \\___/|_|  \\_||_|_| |_|_|\\___)__  |\n");
     wattroff(console->win, COLOUR_SPLASH);
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_SPLASH);
     wprintw(console->win, "|_|                                    (____/ \n");
     wattroff(console->win, COLOUR_SPLASH);
 
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wprintw(console->win, "\n");
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     if (strcmp(PACKAGE_STATUS, "development") == 0) {
         wprintw(console->win, "Version %sdev\n", PACKAGE_VERSION);
     } else {
@@ -1896,12 +1965,12 @@ _new_prof_win(const char * const contact, win_type_t type)
 }
 
 static void
-_win_show_time(WINDOW *win)
+_win_show_time(WINDOW *win, char showchar)
 {
     GDateTime *time = g_date_time_new_now_local();
     gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
     wattron(win, COLOUR_TIME);
-    wprintw(win, "%s - ", date_fmt);
+    wprintw(win, "%s %c ", date_fmt, showchar);
     wattroff(win, COLOUR_TIME);
     g_date_time_unref(time);
     g_free(date_fmt);
@@ -1974,7 +2043,7 @@ _show_status_string(WINDOW *win, const char * const from,
     if (!prefs_get_statuses())
         return;
 
-    _win_show_time(win);
+    _win_show_time(win, '-');
 
     if (show != NULL) {
         if (strcmp(show, "away") == 0) {
@@ -2052,7 +2121,7 @@ _show_status_string(WINDOW *win, const char * const from,
 static void
 _cons_show_typing(const char * const short_from)
 {
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_TYPING);
     wprintw(console->win, "!! %s is typing a message...\n", short_from);
     wattroff(console->win, COLOUR_TYPING);
@@ -2061,14 +2130,14 @@ _cons_show_typing(const char * const short_from)
 static void
 _cons_show_incoming_message(const char * const short_from, const int win_index)
 {
-    _win_show_time(console->win);
+    _win_show_time(console->win, '-');
     wattron(console->win, COLOUR_INCOMING);
     wprintw(console->win, "<< incoming from %s (%d)\n", short_from, win_index + 1);
     wattroff(console->win, COLOUR_INCOMING);
 }
 
 static void
-_cons_show_contact(PContact contact)
+_win_show_contact(ProfWin *window, PContact contact)
 {
     const char *jid = p_contact_jid(contact);
     const char *name = p_contact_name(contact);
@@ -2076,68 +2145,68 @@ _cons_show_contact(PContact contact)
     const char *status = p_contact_status(contact);
     GDateTime *last_activity = p_contact_last_activity(contact);
 
-    _win_show_time(console->win);
+    _win_show_time(window->win, '-');
 
     if (strcmp(presence, "online") == 0) {
-        wattron(console->win, COLOUR_ONLINE);
+        wattron(window->win, COLOUR_ONLINE);
     } else if (strcmp(presence, "away") == 0) {
-        wattron(console->win, COLOUR_AWAY);
+        wattron(window->win, COLOUR_AWAY);
     } else if (strcmp(presence, "chat") == 0) {
-        wattron(console->win, COLOUR_CHAT);
+        wattron(window->win, COLOUR_CHAT);
     } else if (strcmp(presence, "dnd") == 0) {
-        wattron(console->win, COLOUR_DND);
+        wattron(window->win, COLOUR_DND);
     } else if (strcmp(presence, "xa") == 0) {
-        wattron(console->win, COLOUR_XA);
+        wattron(window->win, COLOUR_XA);
     } else {
-        wattron(console->win, COLOUR_OFFLINE);
+        wattron(window->win, COLOUR_OFFLINE);
     }
 
-    wprintw(console->win, "%s", jid);
+    wprintw(window->win, "%s", jid);
 
     if (name != NULL) {
-        wprintw(console->win, " (%s)", name);
+        wprintw(window->win, " (%s)", name);
     }
 
-    wprintw(console->win, " is %s", presence);
+    wprintw(window->win, " is %s", presence);
 
     if (last_activity != NULL) {
         GDateTime *now = g_date_time_new_now_local();
         GTimeSpan span = g_date_time_difference(now, last_activity);
 
-        wprintw(console->win, ", idle ");
+        wprintw(window->win, ", idle ");
 
         int hours = span / G_TIME_SPAN_HOUR;
         span = span - hours * G_TIME_SPAN_HOUR;
         if (hours > 0) {
-            wprintw(console->win, "%dh", hours);
+            wprintw(window->win, "%dh", hours);
         }
 
         int minutes = span / G_TIME_SPAN_MINUTE;
         span = span - minutes * G_TIME_SPAN_MINUTE;
-        wprintw(console->win, "%dm", minutes);
+        wprintw(window->win, "%dm", minutes);
 
         int seconds = span / G_TIME_SPAN_SECOND;
-        wprintw(console->win, "%ds", seconds);
+        wprintw(window->win, "%ds", seconds);
     }
 
     if (status != NULL) {
-        wprintw(console->win, ", \"%s\"", p_contact_status(contact));
+        wprintw(window->win, ", \"%s\"", p_contact_status(contact));
     }
 
-    wprintw(console->win, "\n");
+    wprintw(window->win, "\n");
 
     if (strcmp(presence, "online") == 0) {
-        wattroff(console->win, COLOUR_ONLINE);
+        wattroff(window->win, COLOUR_ONLINE);
     } else if (strcmp(presence, "away") == 0) {
-        wattroff(console->win, COLOUR_AWAY);
+        wattroff(window->win, COLOUR_AWAY);
     } else if (strcmp(presence, "chat") == 0) {
-        wattroff(console->win, COLOUR_CHAT);
+        wattroff(window->win, COLOUR_CHAT);
     } else if (strcmp(presence, "dnd") == 0) {
-        wattroff(console->win, COLOUR_DND);
+        wattroff(window->win, COLOUR_DND);
     } else if (strcmp(presence, "xa") == 0) {
-        wattroff(console->win, COLOUR_XA);
+        wattroff(window->win, COLOUR_XA);
     } else {
-        wattroff(console->win, COLOUR_OFFLINE);
+        wattroff(window->win, COLOUR_OFFLINE);
     }
 }
 
@@ -2176,42 +2245,45 @@ _win_handle_page(const wint_t * const ch)
     int page_space = rows - 4;
     int *page_start = &(current->y_pos);
 
-    MEVENT mouse_event;
+    if (prefs_get_mouse()) {
+        MEVENT mouse_event;
 
-    if (*ch == KEY_MOUSE) {
-        if (getmouse(&mouse_event) == OK) {
+        if (*ch == KEY_MOUSE) {
+            if (getmouse(&mouse_event) == OK) {
 
 #ifdef PLATFORM_CYGWIN
-            if (mouse_event.bstate & BUTTON5_PRESSED) { // mouse wheel down
+                if (mouse_event.bstate & BUTTON5_PRESSED) { // mouse wheel down
 #else
-            if (mouse_event.bstate & BUTTON2_PRESSED) { // mouse wheel down
+                if (mouse_event.bstate & BUTTON2_PRESSED) { // mouse wheel down
 #endif
-                *page_start += 4;
+                    *page_start += 4;
 
-                // only got half a screen, show full screen
-                if ((y - (*page_start)) < page_space)
-                    *page_start = y - page_space;
+                    // only got half a screen, show full screen
+                    if ((y - (*page_start)) < page_space)
+                        *page_start = y - page_space;
 
-                // went past end, show full screen
-                else if (*page_start >= y)
-                    *page_start = y - page_space;
+                    // went past end, show full screen
+                    else if (*page_start >= y)
+                        *page_start = y - page_space;
 
-                current->paged = 1;
-                dirty = TRUE;
-            } else if (mouse_event.bstate & BUTTON4_PRESSED) { // mouse wheel up
-                *page_start -= 4;
+                    current->paged = 1;
+                    dirty = TRUE;
+                } else if (mouse_event.bstate & BUTTON4_PRESSED) { // mouse wheel up
+                    *page_start -= 4;
 
-                // went past beginning, show first page
-                if (*page_start < 0)
-                    *page_start = 0;
+                    // went past beginning, show first page
+                    if (*page_start < 0)
+                        *page_start = 0;
 
-                current->paged = 1;
-                dirty = TRUE;
+                    current->paged = 1;
+                    dirty = TRUE;
+                }
             }
         }
+    }
 
     // page up
-    } else if (*ch == KEY_PPAGE) {
+    if (*ch == KEY_PPAGE) {
         *page_start -= page_space;
 
         // went past beginning, show first page