From bcb7ac7777fde4015f5712ce2a82d7e31e3f9577 Mon Sep 17 00:00:00 2001 From: Simmo Saan Date: Thu, 3 Dec 2015 11:57:09 +0200 Subject: [PATCH 1/2] gui: fix focus data being offset when prefix_align is none (closes #610) window->coords_x_message stored a single x coordinate for the entire window which was used for message position calculation. Such approach does not work when prefix_align is none, thus now the x coordinate in question is exactly calculated for a line individually. --- src/gui/curses/gui-curses-chat.c | 1 - src/gui/gui-window.c | 13 +++++++------ src/gui/gui-window.h | 1 - 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/gui/curses/gui-curses-chat.c b/src/gui/curses/gui-curses-chat.c index 0bbd1810e..d9291c352 100644 --- a/src/gui/curses/gui-curses-chat.c +++ b/src/gui/curses/gui-curses-chat.c @@ -1312,7 +1312,6 @@ gui_chat_display_line (struct t_gui_window *window, struct t_gui_line *line, { if (window->win_chat_cursor_y < window->coords_size) window->coords[window->win_chat_cursor_y].data = line->data->message; - window->coords_x_message = window->win_chat_cursor_x; } /* reset color & style for a new line */ diff --git a/src/gui/gui-window.c b/src/gui/gui-window.c index 825fd47ba..07c0d20ee 100644 --- a/src/gui/gui-window.c +++ b/src/gui/gui-window.c @@ -139,7 +139,7 @@ gui_window_get_context_at_xy (struct t_gui_window *window, char **beginning, char **end) { - int win_x, win_y; + int win_x, win_y, coords_x_message; char *data_next_line, *str_temp; const char *ptr_data, *word_start, *word_end, *last_space; @@ -183,7 +183,11 @@ gui_window_get_context_at_xy (struct t_gui_window *window, if (!window->coords[win_y].data) return; - if (win_x < window->coords_x_message) + coords_x_message = gui_line_get_align ((*line)->data->buffer, *line, 0, + ((win_y > 0) && + (window->coords[win_y - 1].line != *line))); + + if (win_x < coords_x_message) { /* X is before message (time/buffer/prefix) */ if ((win_x >= window->coords[win_y].time_x1) @@ -209,7 +213,7 @@ gui_window_get_context_at_xy (struct t_gui_window *window, && (window->coords[win_y + 1].line == *line)) ? window->coords[win_y + 1].data : NULL; ptr_data = gui_chat_string_add_offset_screen (window->coords[win_y].data, - win_x - window->coords_x_message); + win_x - coords_x_message); if (ptr_data && ptr_data[0] && (!data_next_line || (ptr_data < data_next_line))) { @@ -645,7 +649,6 @@ gui_window_new (struct t_gui_window *parent_window, struct t_gui_buffer *buffer, /* coordinates */ new_window->coords_size = 0; new_window->coords = NULL; - new_window->coords_x_message = 0; /* tree */ new_window->ptr_tree = ptr_leaf; @@ -934,7 +937,6 @@ gui_window_coords_alloc (struct t_gui_window *window) gui_window_coords_init_line (window, i); } } - window->coords_x_message = 0; } /* @@ -1956,7 +1958,6 @@ gui_window_print_log () log_printf (" scroll. . . . . . . : 0x%lx", ptr_window->scroll); log_printf (" coords_size . . . . : %d", ptr_window->coords_size); log_printf (" coords. . . . . . . : 0x%lx", ptr_window->coords); - log_printf (" coords_x_message. . : %d", ptr_window->coords_x_message); log_printf (" ptr_tree. . . . . . : 0x%lx", ptr_window->ptr_tree); log_printf (" prev_window . . . . : 0x%lx", ptr_window->prev_window); log_printf (" next_window . . . . : 0x%lx", ptr_window->next_window); diff --git a/src/gui/gui-window.h b/src/gui/gui-window.h index f0f9387ec..572506bc6 100644 --- a/src/gui/gui-window.h +++ b/src/gui/gui-window.h @@ -76,7 +76,6 @@ struct t_gui_window /* coordinates (for focus) */ int coords_size; /* size of coords (number of lines) */ struct t_gui_window_coords *coords;/* coords for window */ - int coords_x_message; /* start X for messages */ /* tree */ struct t_gui_window_tree *ptr_tree;/* pointer to leaf in windows tree */ From 93d2dbf3e1ef30e676a6edd56ab2b9bd2ddd70d9 Mon Sep 17 00:00:00 2001 From: Simmo Saan Date: Thu, 3 Dec 2015 12:00:22 +0200 Subject: [PATCH 2/2] gui: add missing line pointer to long words split across lines (closes #617) Displaying a word which was forced to be split across lines added the new coords without pointer to the original line. This made them unquotable in cursor mode. --- src/gui/curses/gui-curses-chat.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/curses/gui-curses-chat.c b/src/gui/curses/gui-curses-chat.c index d9291c352..1c58c87f2 100644 --- a/src/gui/curses/gui-curses-chat.c +++ b/src/gui/curses/gui-curses-chat.c @@ -525,7 +525,10 @@ gui_chat_display_word (struct t_gui_window *window, gui_window_restore_style (GUI_WINDOW_OBJECTS(window)->win_chat); } if (window->win_chat_cursor_y < window->coords_size) + { + window->coords[window->win_chat_cursor_y].line = line; window->coords[window->win_chat_cursor_y].data = (char *)word + (ptr_data - data); + } } chars_to_display = gui_chat_strlen_screen (ptr_data);