about summary refs log tree commit diff stats
path: root/src/ui/statusbar.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-04-06 01:33:00 +0100
committerJames Booth <boothj5@gmail.com>2014-04-06 01:33:00 +0100
commit6b2d2fd8e40503085ad26e63e048df2e60eba30f (patch)
tree789cf839cc8c8a106b22f316f0e24b5bdea632e3 /src/ui/statusbar.c
parentc9d28b69991560a049c9a482e74a0c9b24bd9b53 (diff)
downloadprofani-tty-6b2d2fd8e40503085ad26e63e048df2e60eba30f.tar.gz
Removed dirty flag from statusbar
Diffstat (limited to 'src/ui/statusbar.c')
-rw-r--r--src/ui/statusbar.c95
1 files changed, 53 insertions, 42 deletions
diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c
index 4eacf992..738242e0 100644
--- a/src/ui/statusbar.c
+++ b/src/ui/statusbar.c
@@ -35,6 +35,8 @@
 #include "config/theme.h"
 #include "ui/ui.h"
 
+#define TIME_CHECK 60000000
+
 static WINDOW *status_bar;
 static char *message = NULL;
 //                          1  2  3  4  5  6  7  8  9  0  >
@@ -44,7 +46,6 @@ static int is_active[12];
 static GHashTable *remaining_active;
 static int is_new[12];
 static GHashTable *remaining_new;
-static int dirty;
 static GDateTime *last_time;
 static int current;
 
@@ -52,6 +53,7 @@ static void _update_win_statuses(void);
 static void _mark_new(int num);
 static void _mark_active(int num);
 static void _mark_inactive(int num);
+static void _status_bar_draw(void);
 
 static void
 _create_status_bar(void)
@@ -76,11 +78,12 @@ _create_status_bar(void)
     mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket);
     wattroff(status_bar, COLOUR_STATUS_BRACKET);
 
-    if (last_time != NULL)
+    if (last_time != NULL) {
         g_date_time_unref(last_time);
+    }
     last_time = g_date_time_new_now_local();
 
-    dirty = TRUE;
+    _status_bar_draw();
 }
 
 static void
@@ -89,30 +92,8 @@ _status_bar_update_virtual(void)
     GDateTime *now_time = g_date_time_new_now_local();
     GTimeSpan elapsed = g_date_time_difference(now_time, last_time);
 
-    if (elapsed >= 60000000) {
-        dirty = TRUE;
-        if (last_time != NULL)
-            g_date_time_unref(last_time);
-        last_time = g_date_time_new_now_local();
-    }
-
-    if (dirty) {
-        gchar *date_fmt = g_date_time_format(last_time, "%H:%M");
-        assert(date_fmt != NULL);
-
-        wattron(status_bar, COLOUR_STATUS_BRACKET);
-        mvwaddch(status_bar, 0, 1, '[');
-        wattroff(status_bar, COLOUR_STATUS_BRACKET);
-        mvwprintw(status_bar, 0, 2, date_fmt);
-        wattron(status_bar, COLOUR_STATUS_BRACKET);
-        mvwaddch(status_bar, 0, 7, ']');
-        wattroff(status_bar, COLOUR_STATUS_BRACKET);
-        g_free(date_fmt);
-
-        _update_win_statuses();
-        wnoutrefresh(status_bar);
-        inp_put_back();
-        dirty = FALSE;
+    if (elapsed >= TIME_CHECK) {
+        _status_bar_draw();
     }
 
     g_date_time_unref(now_time);
@@ -133,15 +114,15 @@ _status_bar_resize(void)
     mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket);
     wattroff(status_bar, COLOUR_STATUS_BRACKET);
 
-    _update_win_statuses();
-
-    if (message != NULL)
+    if (message != NULL) {
         mvwprintw(status_bar, 0, 10, message);
-
-    if (last_time != NULL)
+    }
+    if (last_time != NULL) {
         g_date_time_unref(last_time);
+    }
     last_time = g_date_time_new_now_local();
-    dirty = TRUE;
+
+    _status_bar_draw();
 }
 
 static void
@@ -156,6 +137,8 @@ _status_bar_set_all_inactive(void)
 
     g_hash_table_remove_all(remaining_active);
     g_hash_table_remove_all(remaining_new);
+
+    _status_bar_draw();
 }
 
 static void
@@ -173,6 +156,8 @@ _status_bar_current(int i)
     mvwprintw(status_bar, 0, cols - 34, _active);
     mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket);
     wattroff(status_bar, COLOUR_STATUS_BRACKET);
+
+    _status_bar_draw();
 }
 
 static void
@@ -213,6 +198,8 @@ _status_bar_inactive(const int win)
         is_new[true_win] = FALSE;
         _mark_inactive(true_win);
     }
+
+    _status_bar_draw();
 }
 
 static void
@@ -247,6 +234,8 @@ _status_bar_active(const int win)
         is_new[true_win] = FALSE;
         _mark_active(true_win);
     }
+
+    _status_bar_draw();
 }
 
 static void
@@ -270,13 +259,16 @@ _status_bar_new(const int win)
         is_new[true_win] = TRUE;
         _mark_new(true_win);
     }
+
+    _status_bar_draw();
 }
 
 static void
 _status_bar_get_password(void)
 {
     status_bar_print_message("Enter password:");
-    dirty = TRUE;
+
+    _status_bar_draw();
 }
 
 static void
@@ -297,8 +289,7 @@ _status_bar_print_message(const char * const msg)
     mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket);
     wattroff(status_bar, COLOUR_STATUS_BRACKET);
 
-    _update_win_statuses();
-    dirty = TRUE;
+    _status_bar_draw();
 }
 
 static void
@@ -326,7 +317,7 @@ _status_bar_clear(void)
     mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket);
     wattroff(status_bar, COLOUR_STATUS_BRACKET);
 
-    dirty = TRUE;
+    _status_bar_draw();
 }
 
 static void
@@ -346,8 +337,7 @@ _status_bar_clear_message(void)
     mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket);
     wattroff(status_bar, COLOUR_STATUS_BRACKET);
 
-    _update_win_statuses();
-    dirty = TRUE;
+    _status_bar_draw();
 }
 
 static void
@@ -383,7 +373,6 @@ _mark_new(int num)
     }
     wattroff(status_bar, COLOUR_STATUS_NEW);
     wattroff(status_bar, A_BLINK);
-    dirty = TRUE;
 }
 
 static void
@@ -400,7 +389,6 @@ _mark_active(int num)
         mvwprintw(status_bar, 0, cols - 34 + active_pos, "%d", num);
     }
     wattroff(status_bar, COLOUR_STATUS_ACTIVE);
-    dirty = TRUE;
 }
 
 static void
@@ -409,7 +397,30 @@ _mark_inactive(int num)
     int active_pos = 1 + ((num-1) * 3);
     int cols = getmaxx(stdscr);
     mvwaddch(status_bar, 0, cols - 34 + active_pos, ' ');
-    dirty = TRUE;
+}
+
+static void
+_status_bar_draw(void)
+{
+    if (last_time != NULL) {
+        g_date_time_unref(last_time);
+    }
+    last_time = g_date_time_new_now_local();
+    gchar *date_fmt = g_date_time_format(last_time, "%H:%M");
+    assert(date_fmt != NULL);
+
+    wattron(status_bar, COLOUR_STATUS_BRACKET);
+    mvwaddch(status_bar, 0, 1, '[');
+    wattroff(status_bar, COLOUR_STATUS_BRACKET);
+    mvwprintw(status_bar, 0, 2, date_fmt);
+    wattron(status_bar, COLOUR_STATUS_BRACKET);
+    mvwaddch(status_bar, 0, 7, ']');
+    wattroff(status_bar, COLOUR_STATUS_BRACKET);
+    g_free(date_fmt);
+
+    _update_win_statuses();
+    wnoutrefresh(status_bar);
+    inp_put_back();
 }
 
 void