summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2005-10-22 14:04:26 +0000
committerSebastien Helleu <flashcode@flashtux.org>2005-10-22 14:04:26 +0000
commit6beb8b6465fe2a3d7f89717ce2383f3d0027c404 (patch)
tree95c3a6116a097fe57298413316280cd2dc3dd606 /src/gui
parent1a140ab8b5e5ab61bb4ffdb842f845f6772ffe20 (diff)
downloadweechat-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.c13
-rw-r--r--src/gui/gui-common.c172
-rw-r--r--src/gui/gui.h2
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);