diff options
Diffstat (limited to 'src/ui/window.c')
-rw-r--r-- | src/ui/window.c | 115 |
1 files changed, 90 insertions, 25 deletions
diff --git a/src/ui/window.c b/src/ui/window.c index 60b47659..c008e44d 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -136,7 +136,7 @@ win_create_chat(const char * const barejid) new_win->barejid = strdup(barejid); new_win->resource_override = NULL; new_win->enc_mode = PROF_ENC_NONE; - new_win->is_trusted = FALSE; + new_win->otr_is_trusted = FALSE; new_win->history_shown = FALSE; new_win->unread = 0; new_win->state = chat_state_new(); @@ -460,6 +460,46 @@ win_sub_page_up(ProfWin *window) } void +win_clear(ProfWin *window) +{ + werase(window->layout->win); + win_update_virtual(window); +} + +void +win_resize(ProfWin *window) +{ + int subwin_cols = 0; + int cols = getmaxx(stdscr); + + if (window->layout->type == LAYOUT_SPLIT) { + ProfLayoutSplit *layout = (ProfLayoutSplit*)window->layout; + if (layout->subwin) { + if (window->type == WIN_CONSOLE) { + subwin_cols = win_roster_cols(); + } else if (window->type == WIN_MUC) { + subwin_cols = win_occpuants_cols(); + } + wresize(layout->base.win, PAD_SIZE, cols - subwin_cols); + wresize(layout->subwin, PAD_SIZE, subwin_cols); + if (window->type == WIN_CONSOLE) { + rosterwin_roster(); + } else if (window->type == WIN_MUC) { + ProfMucWin *mucwin = (ProfMucWin *)window; + assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); + occupantswin_occupants(mucwin->roomjid); + } + } else { + wresize(layout->base.win, PAD_SIZE, cols); + } + } else { + wresize(window->layout->win, PAD_SIZE, cols); + } + + win_redraw(window); +} + +void win_mouse(ProfWin *window, const wint_t ch, const int result) { int rows = getmaxy(stdscr); @@ -532,6 +572,37 @@ win_update_virtual(ProfWin *window) } void +win_refresh_without_subwin(ProfWin *window) +{ + int rows, cols; + getmaxyx(stdscr, rows, cols); + + if ((window->type == WIN_MUC) || (window->type == WIN_CONSOLE)) { + pnoutrefresh(window->layout->win, window->layout->y_pos, 0, 1, 0, rows-3, cols-1); + } +} + +void +win_refresh_with_subwin(ProfWin *window) +{ + int rows, cols; + getmaxyx(stdscr, rows, cols); + int subwin_cols = 0; + + if (window->type == WIN_MUC) { + ProfLayoutSplit *layout = (ProfLayoutSplit*)window->layout; + subwin_cols = win_occpuants_cols(); + pnoutrefresh(layout->base.win, layout->base.y_pos, 0, 1, 0, rows-3, (cols-subwin_cols)-1); + pnoutrefresh(layout->subwin, layout->sub_y_pos, 0, 1, (cols-subwin_cols), rows-3, cols-1); + } else if (window->type == WIN_CONSOLE) { + ProfLayoutSplit *layout = (ProfLayoutSplit*)window->layout; + subwin_cols = win_roster_cols(); + pnoutrefresh(layout->base.win, layout->base.y_pos, 0, 1, 0, rows-3, (cols-subwin_cols)-1); + pnoutrefresh(layout->subwin, layout->sub_y_pos, 0, 1, (cols-subwin_cols), rows-3, cols-1); + } +} + +void win_move_to_end(ProfWin *window) { window->layout->paged = 0; @@ -852,14 +923,14 @@ win_show_status_string(ProfWin *window, const char * const from, } void -win_print_incoming_message(ProfWin *window, GTimeVal *tv_stamp, +win_print_incoming_message(ProfWin *window, GDateTime *timestamp, const char * const from, const char * const message) { switch (window->type) { case WIN_CHAT: case WIN_PRIVATE: - win_print(window, '-', tv_stamp, NO_ME, THEME_TEXT_THEM, from, message); + win_print(window, '-', timestamp, NO_ME, THEME_TEXT_THEM, from, message); break; default: assert(FALSE); @@ -868,31 +939,25 @@ win_print_incoming_message(ProfWin *window, GTimeVal *tv_stamp, } void -win_vprint(ProfWin *window, const char show_char, GTimeVal *tstamp, +win_vprint(ProfWin *window, const char show_char, GDateTime *timestamp, int flags, theme_item_t theme_item, const char * const from, const char * const message, ...) { va_list arg; va_start(arg, message); GString *fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, message, arg); - win_print(window, show_char, tstamp, flags, theme_item, from, fmt_msg->str); + win_print(window, show_char, timestamp, flags, theme_item, from, fmt_msg->str); g_string_free(fmt_msg, TRUE); } void -win_print(ProfWin *window, const char show_char, GTimeVal *tstamp, +win_print(ProfWin *window, const char show_char, GDateTime *timestamp, int flags, theme_item_t theme_item, const char * const from, const char * const message) { - GDateTime *time; + if (timestamp == NULL) timestamp = g_date_time_new_now_local(); - if (tstamp == NULL) { - time = g_date_time_new_now_local(); - } else { - time = g_date_time_new_from_timeval_utc(tstamp); - } - - buffer_push(window->layout->buffer, show_char, time, flags, theme_item, from, message, NULL); - _win_print(window, show_char, time, flags, theme_item, from, message, NULL); + buffer_push(window->layout->buffer, show_char, timestamp, flags, theme_item, from, message, NULL); + _win_print(window, show_char, timestamp, flags, theme_item, from, message, NULL); // TODO: cross-reference.. this should be replaced by a real event-based system ui_input_nonblocking(TRUE); } @@ -954,17 +1019,17 @@ _win_print(ProfWin *window, const char show_char, GDateTime *time, int colour = theme_attrs(THEME_ME); size_t indent = 0; - if ((flags & NO_DATE) == 0) { - gchar *date_fmt = NULL; - char *time_pref = prefs_get_string(PREF_TIME); - date_fmt = g_date_time_format(time, time_pref); - free(time_pref); - assert(date_fmt != NULL); - - if(strlen(date_fmt) != 0){ - indent = 3 + strlen(date_fmt); - } + gchar *date_fmt = NULL; + char *time_pref = prefs_get_string(PREF_TIME); + date_fmt = g_date_time_format(time, time_pref); + free(time_pref); + assert(date_fmt != NULL); + if(strlen(date_fmt) != 0){ + indent = 3 + strlen(date_fmt); + } + + if ((flags & NO_DATE) == 0) { if (date_fmt && strlen(date_fmt)) { if ((flags & NO_COLOUR_DATE) == 0) { wattron(window->layout->win, theme_attrs(THEME_TIME)); |