about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorDebXWoody <stefan@debxwoody.de>2021-05-29 08:05:03 +0200
committerDebXWoody <stefan@debxwoody.de>2021-05-29 08:05:03 +0200
commit35206453667d46e4e14903c435958a94d8ad00e5 (patch)
treeee26090c0db3464cf991ad8096c6c8d4da1d03e5 /src
parent69e3cebf26dc5c6a9c13fe3269bcd659060d7c4e (diff)
downloadprofani-tty-35206453667d46e4e14903c435958a94d8ad00e5.tar.gz
Attention flag for chat windows
User is able to toggle a flag for chat windows. This flag should be used to mark
the window for "Attention".

Use Ctrl+f to mark the window.
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_ac.c1
-rw-r--r--src/command/cmd_defs.c3
-rw-r--r--src/command/cmd_funcs.c7
-rw-r--r--src/command/cmd_funcs.h1
-rw-r--r--src/ui/inputwin.c22
-rw-r--r--src/ui/titlebar.c12
-rw-r--r--src/ui/win_types.h1
-rw-r--r--src/ui/window.c2
8 files changed, 48 insertions, 1 deletions
diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c
index b84d4d2e..03c6e404 100644
--- a/src/command/cmd_ac.c
+++ b/src/command/cmd_ac.c
@@ -471,6 +471,7 @@ cmd_ac_init(void)
 
     wins_ac = autocomplete_new();
     autocomplete_add(wins_ac, "unread");
+    autocomplete_add(wins_ac, "attention");
     autocomplete_add(wins_ac, "prune");
     autocomplete_add(wins_ac, "swap");
 
diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c
index 4ebc3432..a1b00df0 100644
--- a/src/command/cmd_defs.c
+++ b/src/command/cmd_defs.c
@@ -973,6 +973,7 @@ static struct cmd_t command_defs[] = {
       parse_args, 0, 3, NULL,
       CMD_SUBFUNCS(
               { "unread", cmd_wins_unread },
+              { "attention", cmd_wins_attention },
               { "prune", cmd_wins_prune },
               { "swap", cmd_wins_swap })
       CMD_MAINFUNC(cmd_wins)
@@ -981,6 +982,7 @@ static struct cmd_t command_defs[] = {
       CMD_SYN(
               "/wins",
               "/wins unread",
+              "/wins attention",
               "/wins prune",
               "/wins swap <source> <target>")
       CMD_DESC(
@@ -988,6 +990,7 @@ static struct cmd_t command_defs[] = {
               "Passing no argument will list all currently active windows and information about their usage.")
       CMD_ARGS(
               { "unread", "List windows with unread messages." },
+              { "attention", "Marked windows" },
               { "prune", "Close all windows with no unread messages." },
               { "swap <source> <target>", "Swap windows, target may be an empty position." })
       CMD_NOEXAMPLES
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index b2262c5f..0f3fb3a8 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -1299,6 +1299,13 @@ cmd_wins_unread(ProfWin* window, const char* const command, gchar** args)
 }
 
 gboolean
+cmd_wins_attention(ProfWin* window, const char* const command, gchar** args)
+{
+    cons_show_wins(TRUE);
+    return TRUE;
+}
+
+gboolean
 cmd_wins_prune(ProfWin* window, const char* const command, gchar** args)
 {
     ui_prune_wins();
diff --git a/src/command/cmd_funcs.h b/src/command/cmd_funcs.h
index 0785963b..aadcb55f 100644
--- a/src/command/cmd_funcs.h
+++ b/src/command/cmd_funcs.h
@@ -209,6 +209,7 @@ gboolean cmd_otr_sendfile(ProfWin* window, const char* const command, gchar** ar
 
 gboolean cmd_wins(ProfWin* window, const char* const command, gchar** args);
 gboolean cmd_wins_unread(ProfWin* window, const char* const command, gchar** args);
+gboolean cmd_wins_attention(ProfWin* window, const char* const command, gchar** args);
 gboolean cmd_wins_prune(ProfWin* window, const char* const command, gchar** args);
 gboolean cmd_wins_swap(ProfWin* window, const char* const command, gchar** args);
 
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c
index 74fcfbb4..e23fad68 100644
--- a/src/ui/inputwin.c
+++ b/src/ui/inputwin.c
@@ -125,6 +125,8 @@ static int _inp_rl_win_20_handler(int count, int key);
 static int _inp_rl_win_prev_handler(int count, int key);
 static int _inp_rl_win_next_handler(int count, int key);
 static int _inp_rl_win_next_unread_handler(int count, int key);
+static int _inp_rl_win_attention_handler(int count, int key);
+static int _inp_rl_win_attention_next_handler(int count, int key);
 static int _inp_rl_win_pageup_handler(int count, int key);
 static int _inp_rl_win_pagedown_handler(int count, int key);
 static int _inp_rl_subwin_pageup_handler(int count, int key);
@@ -480,6 +482,8 @@ _inp_rl_startup_hook(void)
     rl_bind_keyseq("\\e\\e[C", _inp_rl_win_next_handler);
 
     rl_bind_keyseq("\\ea", _inp_rl_win_next_unread_handler);
+    rl_bind_keyseq("\\ef", _inp_rl_win_attention_handler);
+    rl_bind_keyseq("\\em", _inp_rl_win_attention_next_handler);
 
     rl_bind_keyseq("\\e\\e[5~", _inp_rl_subwin_pageup_handler);
     rl_bind_keyseq("\\e[5;3~", _inp_rl_subwin_pageup_handler);
@@ -807,6 +811,24 @@ _inp_rl_win_next_unread_handler(int count, int key)
 }
 
 static int
+_inp_rl_win_attention_handler(int count, int key) {
+    ProfWin* current = wins_get_current();
+    if ( current ) {
+        ProfChatWin* chatwin = (ProfChatWin*)current;
+        chatwin->has_attention = !chatwin->has_attention;
+        win_redraw(current);
+    }
+    return 0;
+}
+
+static int
+_inp_rl_win_attention_next_handler(int count, int key) {
+    //ProfWin* current = wins_get_current();
+    return 0;
+}
+
+
+static int
 _inp_rl_win_pageup_handler(int count, int key)
 {
     ProfWin* current = wins_get_current();
diff --git a/src/ui/titlebar.c b/src/ui/titlebar.c
index dee6a7e2..0b2187ce 100644
--- a/src/ui/titlebar.c
+++ b/src/ui/titlebar.c
@@ -487,6 +487,18 @@ _show_privacy(ProfChatWin* chatwin)
 
         return;
     }
+    if (chatwin->has_attention) {
+        wprintw(win, " ");
+        wattron(win, bracket_attrs);
+        wprintw(win, "[");
+        wattroff(win, bracket_attrs);
+        wattron(win, encrypted_attrs);
+        wprintw(win, "ATTENTION");
+        wattroff(win, encrypted_attrs);
+        wattron(win, bracket_attrs);
+        wprintw(win, "]");
+        wattroff(win, bracket_attrs);
+    }
 
     if (chatwin->pgp_send || chatwin->pgp_recv) {
         GString* pgpmsg = g_string_new("PGP ");
diff --git a/src/ui/win_types.h b/src/ui/win_types.h
index e740b543..d40a5396 100644
--- a/src/ui/win_types.h
+++ b/src/ui/win_types.h
@@ -176,6 +176,7 @@ typedef struct prof_chat_win_t
     // For LMC
     char* last_message;
     char* last_msg_id;
+    gboolean has_attention;
 } ProfChatWin;
 
 typedef struct prof_muc_win_t
diff --git a/src/ui/window.c b/src/ui/window.c
index b6676774..f4439c74 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -158,7 +158,7 @@ win_create_chat(const char* const barejid)
     new_win->outgoing_char = NULL;
     new_win->last_message = NULL;
     new_win->last_msg_id = NULL;
-
+    new_win->has_attention = FALSE;
     new_win->memcheck = PROFCHATWIN_MEMCHECK;
 
     return &new_win->window;