From 2f927523657fa3949c8b9d7365152b21f2ab2f0c Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 16 May 2013 22:34:05 +0100 Subject: [PATCH] Added "read" parameter to /close Closes all windows where there are no unread messages --- src/command/command.c | 18 +++++++++++++++--- src/ui/core.c | 10 ++++++++++ src/ui/ui.h | 1 + 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/command/command.c b/src/command/command.c index b986239f..4f2c1932 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -482,12 +482,13 @@ static struct cmd_t main_commands[] = { "/close", _cmd_close, parse_args, 0, 1, - { "/close [win|all]", "Close a window window.", - { "/close [win|all]", - "----------------", + { "/close [win|read|all]", "Close a window window.", + { "/close [win|read|all]", + "---------------------", "Passing no argument will close the current window.", "Passing 2,3,4,5,6,7,8,9 or 0 will close the specified window.", "Passing 'all' will close all currently open windows.", + "Passing 'read' will close all windows that have no unread messages.", "The console window cannot be closed.", "If in a chat room, you will leave the room.", NULL } } }, @@ -2520,6 +2521,17 @@ _cmd_close(gchar **args, struct cmd_help_t help) cons_show("Closed all windows."); return TRUE; + } else if (strcmp(args[0], "read") == 0) { + for (curr = 1; curr <= 9; curr++) { + if (ui_win_exists(curr) && (ui_win_unread(curr) == 0)) { + if (conn_status == JABBER_CONNECTED) { + _close_connected_win(curr); + } + ui_close_win(curr); + } + } + cons_show("Closed windows."); + return TRUE; } else { index = atoi(args[0]); if (index == 0) { diff --git a/src/ui/core.c b/src/ui/core.c index 992a5701..717966b4 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -1215,6 +1215,16 @@ ui_unread(void) return result; } +int +ui_win_unread(int index) +{ + if (windows[index] != NULL) { + return windows[index]->unread; + } else { + return 0; + } +} + static void _ui_draw_win_title(void) { diff --git a/src/ui/ui.h b/src/ui/ui.h index 83441311..e165b353 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -79,6 +79,7 @@ win_type_t ui_win_type(int index); char * ui_recipient(int index); void ui_close_win(int index); gboolean ui_win_exists(int index); +int ui_win_unread(int index); // ui events void ui_contact_typing(const char * const from);