diff --git a/src/ui/core.c b/src/ui/core.c index 86d216ad..5502f972 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -596,6 +596,7 @@ ui_switch_win(const int i) if (i == 1) { title_bar_title(); + status_bar_current(1); status_bar_active(1); } else { PContact contact = roster_get_contact(new_current->from); @@ -608,7 +609,8 @@ ui_switch_win(const int i) } else { title_bar_set_recipient(new_current->from); } - title_bar_draw();; + title_bar_draw(); + status_bar_current(i); status_bar_active(i); } wins_refresh_current(); @@ -628,6 +630,7 @@ ui_next_win(void) if (i == 1) { title_bar_title(); + status_bar_current(1); status_bar_active(1); } else { PContact contact = roster_get_contact(new_current->from); @@ -640,7 +643,8 @@ ui_next_win(void) } else { title_bar_set_recipient(new_current->from); } - title_bar_draw();; + title_bar_draw(); + status_bar_current(i); status_bar_active(i); } wins_refresh_current(); @@ -659,6 +663,7 @@ ui_previous_win(void) if (i == 1) { title_bar_title(); + status_bar_current(1); status_bar_active(1); } else { PContact contact = roster_get_contact(new_current->from); @@ -671,7 +676,8 @@ ui_previous_win(void) } else { title_bar_set_recipient(new_current->from); } - title_bar_draw();; + title_bar_draw(); + status_bar_current(i); status_bar_active(i); } wins_refresh_current(); @@ -689,6 +695,7 @@ ui_close_current(void) int current_index = wins_get_current_num(); status_bar_inactive(current_index); wins_close_current(); + status_bar_current(1); status_bar_active(1); title_bar_title(); } @@ -697,6 +704,7 @@ void ui_close_win(int index) { wins_close_by_num(index); + status_bar_current(1); status_bar_active(1); title_bar_title(); diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index e7456adc..16bd31c9 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -39,12 +39,14 @@ static WINDOW *status_bar; static char *message = NULL; // 1 2 3 4 5 6 7 8 9 0 > static char _active[34] = "[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]"; +static char *bracket = "- -"; 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; static void _status_bar_update_time(void); static void _update_win_statuses(void); @@ -66,11 +68,13 @@ create_status_bar(void) } remaining_active = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, NULL); remaining_new = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, NULL); + current = 1; status_bar = newwin(1, cols, rows-2, 0); wbkgd(status_bar, COLOUR_STATUS_TEXT); wattron(status_bar, COLOUR_STATUS_BRACKET); mvwprintw(status_bar, 0, cols - 34, _active); + mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket); wattroff(status_bar, COLOUR_STATUS_BRACKET); if (last_time != NULL) @@ -116,6 +120,7 @@ status_bar_resize(void) werase(status_bar); wattron(status_bar, COLOUR_STATUS_BRACKET); mvwprintw(status_bar, 0, cols - 34, _active); + mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket); wattroff(status_bar, COLOUR_STATUS_BRACKET); _update_win_statuses(); @@ -143,6 +148,23 @@ status_bar_set_all_inactive(void) g_hash_table_remove_all(remaining_new); } +void +status_bar_current(int i) +{ + if (i == 0) { + current = 10; + } else if (i > 10) { + current = 11; + } else { + current = i; + } + int cols = getmaxx(stdscr); + wattron(status_bar, COLOUR_STATUS_BRACKET); + mvwprintw(status_bar, 0, cols - 34, _active); + mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket); + wattroff(status_bar, COLOUR_STATUS_BRACKET); +} + void status_bar_inactive(const int win) { @@ -263,6 +285,7 @@ status_bar_print_message(const char * const msg) wattron(status_bar, COLOUR_STATUS_BRACKET); mvwprintw(status_bar, 0, cols - 34, _active); + mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket); wattroff(status_bar, COLOUR_STATUS_BRACKET); _update_win_statuses(); @@ -291,6 +314,7 @@ status_bar_clear(void) wattron(status_bar, COLOUR_STATUS_BRACKET); mvwprintw(status_bar, 0, cols - 34, _active); + mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket); wattroff(status_bar, COLOUR_STATUS_BRACKET); dirty = TRUE; @@ -310,6 +334,7 @@ status_bar_clear_message(void) wattron(status_bar, COLOUR_STATUS_BRACKET); mvwprintw(status_bar, 0, cols - 34, _active); + mvwprintw(status_bar, 0, cols - 34 + ((current - 1) * 3), bracket); wattroff(status_bar, COLOUR_STATUS_BRACKET); _update_win_statuses(); diff --git a/src/ui/ui.h b/src/ui/ui.h index 4cde751e..4d4ead7b 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -228,6 +228,7 @@ void status_bar_active(const int win); void status_bar_new(const int win); void status_bar_update_time(void); void status_bar_set_all_inactive(void); +void status_bar_current(int i); // input window actions wint_t inp_get_char(char *input, int *size);