mirror of
https://github.com/weechat/weechat.git
synced 2026-07-03 08:13:14 +02:00
Fixed segfault when switching to DCC buffer
This commit is contained in:
@@ -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
|
||||
{
|
||||
@@ -1758,33 +1758,6 @@ gui_get_dcc_buffer ()
|
||||
return gui_buffer_new (gui_current_window, NULL, NULL, 1, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
@@ -1603,6 +1603,30 @@ gui_switch_to_next_window ()
|
||||
gui_redraw_buffer (gui_current_window->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;
|
||||
|
||||
/* 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
|
||||
*/
|
||||
|
||||
+1
-1
@@ -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 ();
|
||||
|
||||
@@ -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
|
||||
{
|
||||
@@ -1758,33 +1758,6 @@ gui_get_dcc_buffer ()
|
||||
return gui_buffer_new (gui_current_window, NULL, NULL, 1, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
@@ -1603,6 +1603,30 @@ gui_switch_to_next_window ()
|
||||
gui_redraw_buffer (gui_current_window->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;
|
||||
|
||||
/* 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
|
||||
*/
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
Reference in New Issue
Block a user