about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command/command.c18
-rw-r--r--src/ui/core.c10
-rw-r--r--src/ui/ui.h1
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);