summaryrefslogtreecommitdiff
path: root/src/fe-text
diff options
context:
space:
mode:
authorailin-nemui <ailin-nemui@users.noreply.github.com>2018-03-26 12:46:04 +0200
committerGitHub <noreply@github.com>2018-03-26 12:46:04 +0200
commit7fc59d2d1016e28eced6dbcaddc1e1865fe0ebe8 (patch)
treee8225ec8feeb8429f3b9636e222bd07938b524c4 /src/fe-text
parent191e0ac84ed42b51395ff9659b4f6169a1fcb3aa (diff)
parentc7ca8102c002287f492ca71f2193ee9b269f5bf5 (diff)
downloadirssi-7fc59d2d1016e28eced6dbcaddc1e1865fe0ebe8.zip
Merge pull request #862 from ailin-nemui/line_is_null
fix a crash when trying to append to a NULL line
Diffstat (limited to 'src/fe-text')
-rw-r--r--src/fe-text/gui-printtext.c40
-rw-r--r--src/fe-text/textbuffer-view.c5
2 files changed, 30 insertions, 15 deletions
diff --git a/src/fe-text/gui-printtext.c b/src/fe-text/gui-printtext.c
index c52f9ced..83a36f14 100644
--- a/src/fe-text/gui-printtext.c
+++ b/src/fe-text/gui-printtext.c
@@ -120,12 +120,19 @@ void gui_printtext_internal(int xpos, int ypos, const char *str)
next_xpos = next_ypos = -1;
}
+static void view_add_eol(TEXT_BUFFER_VIEW_REC *view, LINE_REC **line);
+
void gui_printtext_after_time(TEXT_DEST_REC *dest, LINE_REC *prev, const char *str, time_t time)
{
GUI_WINDOW_REC *gui;
gui = WINDOW_GUI(dest->window);
+ if (prev == NULL && !gui->view->buffer->last_eol) {
+ /* we have an unfinished line in the buffer still */
+ view_add_eol(gui->view, &gui->insert_after);
+ }
+
gui->use_insert_after = TRUE;
gui->insert_after = prev;
gui->insert_after_time = time;
@@ -249,9 +256,26 @@ static void view_add_eol(TEXT_BUFFER_VIEW_REC *view, LINE_REC **line)
textbuffer_view_insert_line(view, *line);
}
+static void print_text_no_window(int flags, int fg, int bg, int attr, const char *str)
+{
+ g_return_if_fail(next_xpos != -1);
+
+ term_set_color2(root_window, attr, fg, bg);
+
+ term_move(root_window, next_xpos, next_ypos);
+ if (flags & GUI_PRINT_FLAG_CLRTOEOL) {
+ if (clrtoeol_info->window != NULL) {
+ term_window_clrtoeol_abs(clrtoeol_info->window, next_ypos);
+ } else {
+ term_clrtoeol(root_window);
+ }
+ }
+ next_xpos += term_addstr(root_window, str);
+}
+
static void sig_gui_print_text(WINDOW_REC *window, void *fgcolor,
void *bgcolor, void *pflags,
- char *str, TEXT_DEST_REC *dest)
+ const char *str, TEXT_DEST_REC *dest)
{
GUI_WINDOW_REC *gui;
TEXT_BUFFER_VIEW_REC *view;
@@ -265,19 +289,7 @@ static void sig_gui_print_text(WINDOW_REC *window, void *fgcolor,
get_colors(flags, &fg, &bg, &attr);
if (window == NULL) {
- g_return_if_fail(next_xpos != -1);
-
- term_set_color2(root_window, attr, fg, bg);
-
- term_move(root_window, next_xpos, next_ypos);
- if (flags & GUI_PRINT_FLAG_CLRTOEOL) {
- if (clrtoeol_info->window != NULL) {
- term_window_clrtoeol_abs(clrtoeol_info->window, next_ypos);
- } else {
- term_clrtoeol(root_window);
- }
- }
- next_xpos += term_addstr(root_window, str);
+ print_text_no_window(flags, fg, bg, attr, str);
return;
}
diff --git a/src/fe-text/textbuffer-view.c b/src/fe-text/textbuffer-view.c
index 99625ecc..3ccd95f5 100644
--- a/src/fe-text/textbuffer-view.c
+++ b/src/fe-text/textbuffer-view.c
@@ -913,11 +913,14 @@ void textbuffer_view_resize(TEXT_BUFFER_VIEW_REC *view, int width, int height)
} else if (view->startline == view->bottom_startline &&
view->subline > view->bottom_subline) {
view->subline = view->bottom_subline;
- } else {
+ } else if (view->startline != NULL) {
/* make sure the subline is still in allowed range */
linecount = view_get_linecount(view, view->startline);
if (view->subline > linecount)
view->subline = linecount;
+ } else {
+ /* we don't have a startline. still under construction? */
+ view->subline = 0;
}
textbuffer_view_init_ypos(view);