diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2005-10-22 14:04:26 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2005-10-22 14:04:26 +0000 |
commit | 6beb8b6465fe2a3d7f89717ce2383f3d0027c404 (patch) | |
tree | 95c3a6116a097fe57298413316280cd2dc3dd606 /src/gui | |
parent | 1a140ab8b5e5ab61bb4ffdb842f845f6772ffe20 (diff) | |
download | weechat-6beb8b6465fe2a3d7f89717ce2383f3d0027c404.zip |
- added dcc_own_ip and dcc_port_range settings, patch by Jim Ramsay
- fixed bug when exiting DCC buffer (wrong input buffer)
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/curses/gui-input.c | 13 | ||||
-rw-r--r-- | src/gui/gui-common.c | 172 | ||||
-rw-r--r-- | src/gui/gui.h | 2 |
3 files changed, 111 insertions, 76 deletions
diff --git a/src/gui/curses/gui-input.c b/src/gui/curses/gui-input.c index 40f9b5919..118ae9f50 100644 --- a/src/gui/curses/gui-input.c +++ b/src/gui/curses/gui-input.c @@ -256,10 +256,15 @@ gui_input_read () if ((gui_key_pressed (key_str) != 0) && (insert_ok)) { - gui_input_insert_string (gui_current_window, key_str, -1); - gui_current_window->buffer->input_buffer_pos += utf8_strlen (key_str); - gui_draw_buffer_input (gui_current_window->buffer, 0); - gui_current_window->buffer->completion.position = -1; + if (gui_current_window->buffer->dcc) + gui_input_action_dcc (gui_current_window, key_str); + else + { + gui_input_insert_string (gui_current_window, key_str, -1); + gui_current_window->buffer->input_buffer_pos += utf8_strlen (key_str); + gui_draw_buffer_input (gui_current_window->buffer, 0); + gui_current_window->buffer->completion.position = -1; + } } i++; diff --git a/src/gui/gui-common.c b/src/gui/gui-common.c index f609736de..79282e16f 100644 --- a/src/gui/gui-common.c +++ b/src/gui/gui-common.c @@ -609,78 +609,89 @@ gui_input_optimize_buffer_size (t_gui_buffer *buffer) /* * gui_input_action_dcc: execute an action on a DCC after a user input + * return -1 if DCC buffer was closed due to action, 0 otherwise */ void -gui_input_action_dcc (t_gui_window *window, char action) +gui_input_action_dcc (t_gui_window *window, char *actions) { t_irc_dcc *dcc_selected, *ptr_dcc, *ptr_dcc_next; + t_gui_buffer *ptr_buffer; - dcc_selected = (window->dcc_selected) ? - (t_irc_dcc *) window->dcc_selected : dcc_list; - - switch (action) + while (actions[0]) { - /* accept DCC */ - case 'a': - case 'A': - if (dcc_selected - && (DCC_IS_RECV(dcc_selected->status)) - && (dcc_selected->status == DCC_WAITING)) - { - dcc_accept (dcc_selected); - } - break; - /* cancel DCC */ - case 'c': - case 'C': - if (dcc_selected - && (!DCC_ENDED(dcc_selected->status))) - { - dcc_close (dcc_selected, DCC_ABORTED); - gui_redraw_buffer (window->buffer); - } - break; - /* purge old DCC */ - case 'p': - case 'P': - window->dcc_selected = NULL; - ptr_dcc = dcc_list; - while (ptr_dcc) - { - ptr_dcc_next = ptr_dcc->next_dcc; - if (DCC_ENDED(ptr_dcc->status)) - dcc_free (ptr_dcc); - ptr_dcc = ptr_dcc_next; - } - gui_redraw_buffer (window->buffer); - break; - /* close DCC window */ - case 'q': - case 'Q': - if (buffer_before_dcc) - { - gui_buffer_free (window->buffer, 1); - gui_switch_to_buffer (window, buffer_before_dcc); - } - else - gui_buffer_free (window->buffer, 1); - gui_redraw_buffer (window->buffer); - break; - /* remove from DCC list */ - case 'r': - case 'R': - if (dcc_selected - && (DCC_ENDED(dcc_selected->status))) + if (actions[0] >= 32) + { + dcc_selected = (window->dcc_selected) ? + (t_irc_dcc *) window->dcc_selected : dcc_list; + + switch (actions[0]) { - if (dcc_selected->next_dcc) - window->dcc_selected = dcc_selected->next_dcc; - else + /* accept DCC */ + case 'a': + case 'A': + if (dcc_selected + && (DCC_IS_RECV(dcc_selected->status)) + && (dcc_selected->status == DCC_WAITING)) + { + dcc_accept (dcc_selected); + } + break; + /* cancel DCC */ + case 'c': + case 'C': + if (dcc_selected + && (!DCC_ENDED(dcc_selected->status))) + { + dcc_close (dcc_selected, DCC_ABORTED); + gui_redraw_buffer (window->buffer); + } + break; + /* purge old DCC */ + case 'p': + case 'P': window->dcc_selected = NULL; - dcc_free (dcc_selected); - gui_redraw_buffer (window->buffer); + ptr_dcc = dcc_list; + while (ptr_dcc) + { + ptr_dcc_next = ptr_dcc->next_dcc; + if (DCC_ENDED(ptr_dcc->status)) + dcc_free (ptr_dcc); + ptr_dcc = ptr_dcc_next; + } + gui_redraw_buffer (window->buffer); + break; + /* close DCC window */ + case 'q': + case 'Q': + if (buffer_before_dcc) + { + ptr_buffer = window->buffer; + gui_switch_to_buffer (window, buffer_before_dcc); + gui_buffer_free (ptr_buffer, 0); + } + else + gui_buffer_free (window->buffer, 1); + gui_redraw_buffer (window->buffer); + return; + break; + /* remove from DCC list */ + case 'r': + case 'R': + if (dcc_selected + && (DCC_ENDED(dcc_selected->status))) + { + if (dcc_selected->next_dcc) + window->dcc_selected = dcc_selected->next_dcc; + else + window->dcc_selected = NULL; + dcc_free (dcc_selected); + gui_redraw_buffer (window->buffer); + } + break; } - break; + } + actions = utf8_next_char (actions); } } @@ -697,16 +708,7 @@ gui_input_insert_string (t_gui_window *window, char *string, int pos) int size, length; char *ptr_start; - if (window->buffer->dcc) - { - while (string[0]) - { - if (string[0] >= 32) - gui_input_action_dcc (window, string[0]); - string = utf8_next_char (string); - } - } - else if (window->buffer->has_input) + if (window->buffer->has_input) { if (pos == -1) pos = window->buffer->input_buffer_pos; @@ -1761,6 +1763,32 @@ gui_switch_to_next_window (t_gui_window *window) } /* + * gui_switch_to_window_by_buffer: switch to next window displaying a buffer + */ + +void +gui_switch_to_window_by_buffer (t_gui_window *window, int buffer_number) +{ + t_gui_window *ptr_win; + + if (!gui_ok) + return; + + ptr_win = (window->next_window) ? window->next_window : gui_windows; + while (ptr_win != window) + { + if (ptr_win->buffer->number == buffer_number) + { + gui_current_window = ptr_win; + gui_switch_to_buffer (gui_current_window, gui_current_window->buffer); + gui_redraw_buffer (gui_current_window->buffer); + return; + } + ptr_win = (ptr_win->next_window) ? ptr_win->next_window : gui_windows; + } +} + +/* * gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist) */ diff --git a/src/gui/gui.h b/src/gui/gui.h index c95a07f69..1d33baf0f 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -331,6 +331,7 @@ extern t_gui_line *gui_new_line (t_gui_buffer *); extern t_gui_message *gui_new_message (t_gui_buffer *); extern void gui_input_clipboard_copy (char *, int); extern void gui_input_clipboard_paste (t_gui_window *); +extern void gui_input_action_dcc (t_gui_window *, char *); extern int gui_input_insert_string (t_gui_window *, char *, int); extern void gui_input_return (t_gui_window *); extern void gui_input_tab (t_gui_window *); @@ -364,6 +365,7 @@ extern void gui_switch_to_previous_buffer (t_gui_window *); extern void gui_switch_to_next_buffer (t_gui_window *); extern void gui_switch_to_previous_window (t_gui_window *); extern void gui_switch_to_next_window (t_gui_window *); +extern void gui_switch_to_window_by_buffer (t_gui_window *, int); extern void gui_switch_to_dcc_buffer (t_gui_window *); 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); |