summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2005-07-16 11:32:23 +0000
committerSebastien Helleu <flashcode@flashtux.org>2005-07-16 11:32:23 +0000
commit99ad719ab9b770bd4d94a67022f75edfba7d60ba (patch)
tree26cfb568b9672446f1fe026270cd3c995120595f /src
parenta68a1f81928d4a252b4fd8ed5a3b35fc198b68f8 (diff)
downloadweechat-99ad719ab9b770bd4d94a67022f75edfba7d60ba.zip
Fixed segfault when switching to DCC buffer
Diffstat (limited to 'src')
-rw-r--r--src/gui/curses/gui-display.c151
-rw-r--r--src/gui/gui-common.c24
-rw-r--r--src/gui/gui.h2
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 ();