diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2005-07-16 11:32:23 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2005-07-16 11:32:23 +0000 |
commit | 99ad719ab9b770bd4d94a67022f75edfba7d60ba (patch) | |
tree | 26cfb568b9672446f1fe026270cd3c995120595f /src | |
parent | a68a1f81928d4a252b4fd8ed5a3b35fc198b68f8 (diff) | |
download | weechat-99ad719ab9b770bd4d94a67022f75edfba7d60ba.zip |
Fixed segfault when switching to DCC buffer
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/curses/gui-display.c | 151 | ||||
-rw-r--r-- | src/gui/gui-common.c | 24 | ||||
-rw-r--r-- | src/gui/gui.h | 2 |
3 files changed, 87 insertions, 90 deletions
diff --git a/src/gui/curses/gui-display.c b/src/gui/curses/gui-display.c index 7a215a478..dbe3b4fef 100644 --- a/src/gui/curses/gui-display.c +++ b/src/gui/curses/gui-display.c @@ -1503,86 +1503,86 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase) wnoutrefresh (ptr_win->win_input); } - if (buffer->input_buffer_size == 0) - buffer->input_buffer[0] = '\0'; - - input_width = gui_get_input_width (ptr_win); - - if (buffer->input_buffer_pos - buffer->input_buffer_1st_display + 1 > - input_width) - buffer->input_buffer_1st_display = buffer->input_buffer_pos - - input_width + 1; - else + if (buffer->dcc) { - if (buffer->input_buffer_pos < buffer->input_buffer_1st_display) - buffer->input_buffer_1st_display = buffer->input_buffer_pos; - else + dcc_selected = (ptr_win->dcc_selected) ? (t_irc_dcc *) ptr_win->dcc_selected : dcc_list; + wmove (ptr_win->win_input, 0, 0); + if (dcc_selected) { - if ((buffer->input_buffer_1st_display > 0) && - (buffer->input_buffer_pos - - buffer->input_buffer_1st_display + 1) < input_width) + switch (dcc_selected->status) { - buffer->input_buffer_1st_display = - buffer->input_buffer_pos - input_width + 1; - if (buffer->input_buffer_1st_display < 0) - buffer->input_buffer_1st_display = 0; + case DCC_WAITING: + if (DCC_IS_RECV(dcc_selected->type)) + wprintw (ptr_win->win_input, _(" [A] Accept")); + wprintw (ptr_win->win_input, _(" [C] Cancel")); + break; + case DCC_CONNECTING: + case DCC_ACTIVE: + wprintw (ptr_win->win_input, _(" [C] Cancel")); + break; + case DCC_DONE: + case DCC_FAILED: + case DCC_ABORTED: + wprintw (ptr_win->win_input, _(" [R] Remove")); + break; } } - } - if (CHANNEL(buffer)) - { - snprintf (format, 32, "%%s %%s> %%-%ds", input_width); - if (ptr_win == gui_current_window) - mvwprintw (ptr_win->win_input, 0, 0, format, - CHANNEL(buffer)->name, - SERVER(buffer)->nick, - buffer->input_buffer + buffer->input_buffer_1st_display); - else - mvwprintw (ptr_win->win_input, 0, 0, format, - CHANNEL(buffer)->name, - SERVER(buffer)->nick, - ""); + wprintw (ptr_win->win_input, _(" [P] Purge old DCC")); + wprintw (ptr_win->win_input, _(" [Q] Close DCC view")); wclrtoeol (ptr_win->win_input); - ptr_win->win_input_x = strlen (CHANNEL(buffer)->name) + - strlen (SERVER(buffer)->nick) + 3 + - (buffer->input_buffer_pos - buffer->input_buffer_1st_display); + ptr_win->win_input_x = 0; if (ptr_win == gui_current_window) move (ptr_win->win_y + ptr_win->win_height - 1, - ptr_win->win_x + ptr_win->win_input_x); + ptr_win->win_x); } - else + else if (buffer->has_input) { - if (buffer->dcc) + if (buffer->input_buffer_size == 0) + buffer->input_buffer[0] = '\0'; + + input_width = gui_get_input_width (ptr_win); + + if (buffer->input_buffer_pos - buffer->input_buffer_1st_display + 1 > + input_width) + buffer->input_buffer_1st_display = buffer->input_buffer_pos - + input_width + 1; + else { - dcc_selected = (ptr_win->dcc_selected) ? (t_irc_dcc *) ptr_win->dcc_selected : dcc_list; - wmove (ptr_win->win_input, 0, 0); - if (dcc_selected) + if (buffer->input_buffer_pos < buffer->input_buffer_1st_display) + buffer->input_buffer_1st_display = buffer->input_buffer_pos; + else { - switch (dcc_selected->status) + if ((buffer->input_buffer_1st_display > 0) && + (buffer->input_buffer_pos - + buffer->input_buffer_1st_display + 1) < input_width) { - case DCC_WAITING: - if (DCC_IS_RECV(dcc_selected->type)) - wprintw (ptr_win->win_input, _(" [A] Accept")); - wprintw (ptr_win->win_input, _(" [C] Cancel")); - break; - case DCC_CONNECTING: - case DCC_ACTIVE: - wprintw (ptr_win->win_input, _(" [C] Cancel")); - break; - case DCC_DONE: - case DCC_FAILED: - case DCC_ABORTED: - wprintw (ptr_win->win_input, _(" [R] Remove")); - break; + buffer->input_buffer_1st_display = + buffer->input_buffer_pos - input_width + 1; + if (buffer->input_buffer_1st_display < 0) + buffer->input_buffer_1st_display = 0; } } - wprintw (ptr_win->win_input, _(" [P] Purge old DCC")); - wprintw (ptr_win->win_input, _(" [Q] Close DCC view")); + } + if (CHANNEL(buffer)) + { + snprintf (format, 32, "%%s %%s> %%-%ds", input_width); + if (ptr_win == gui_current_window) + mvwprintw (ptr_win->win_input, 0, 0, format, + CHANNEL(buffer)->name, + SERVER(buffer)->nick, + buffer->input_buffer + buffer->input_buffer_1st_display); + else + mvwprintw (ptr_win->win_input, 0, 0, format, + CHANNEL(buffer)->name, + SERVER(buffer)->nick, + ""); wclrtoeol (ptr_win->win_input); - ptr_win->win_input_x = 0; + ptr_win->win_input_x = strlen (CHANNEL(buffer)->name) + + strlen (SERVER(buffer)->nick) + 3 + + (buffer->input_buffer_pos - buffer->input_buffer_1st_display); if (ptr_win == gui_current_window) move (ptr_win->win_y + ptr_win->win_height - 1, - ptr_win->win_x); + ptr_win->win_x + ptr_win->win_input_x); } else { @@ -1759,33 +1759,6 @@ gui_get_dcc_buffer () } /* - * gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist) - */ - -void -gui_switch_to_dcc_buffer () -{ - t_gui_buffer *ptr_buffer; - - if (!gui_ok) - return; - - /* check if dcc buffer exists */ - for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) - { - if (ptr_buffer->dcc) - break; - } - if (ptr_buffer) - { - gui_switch_to_buffer (gui_current_window, ptr_buffer); - gui_redraw_buffer (ptr_buffer); - } - else - gui_buffer_new (gui_current_window, NULL, NULL, 1, 1); -} - -/* * gui_input_page_up: display previous page on buffer */ diff --git a/src/gui/gui-common.c b/src/gui/gui-common.c index 78d898608..318e9a48e 100644 --- a/src/gui/gui-common.c +++ b/src/gui/gui-common.c @@ -1604,6 +1604,30 @@ gui_switch_to_next_window () } /* + * gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist) + */ + +void +gui_switch_to_dcc_buffer () +{ + t_gui_buffer *ptr_buffer; + + /* check if dcc buffer exists */ + for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) + { + if (ptr_buffer->dcc) + break; + } + if (ptr_buffer) + { + gui_switch_to_buffer (gui_current_window, ptr_buffer); + gui_redraw_buffer (ptr_buffer); + } + else + gui_buffer_new (gui_current_window, NULL, NULL, 1, 1); +} + +/* * gui_switch_to_buffer_by_number: switch to another buffer with number */ diff --git a/src/gui/gui.h b/src/gui/gui.h index 953522e66..0d3774a76 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -346,6 +346,7 @@ extern void gui_switch_to_previous_buffer (); extern void gui_switch_to_next_buffer (); extern void gui_switch_to_previous_window (); extern void gui_switch_to_next_window (); +extern void gui_switch_to_dcc_buffer (); extern t_gui_buffer *gui_switch_to_buffer_by_number (t_gui_window *, int); extern void gui_move_buffer_to_number (t_gui_window *, int); extern void gui_window_print_log (t_gui_window *); @@ -382,7 +383,6 @@ extern void gui_draw_buffer_input (t_gui_buffer *, int); extern void gui_redraw_buffer (t_gui_buffer *); extern void gui_switch_to_buffer (t_gui_window *, t_gui_buffer *); extern t_gui_buffer *gui_get_dcc_buffer (); -extern void gui_switch_to_dcc_buffer (); extern void gui_input_page_up (); extern void gui_input_page_down (); extern void gui_input_nick_beginning (); |