609 |
|
|
610 |
/* |
/* |
611 |
* gui_input_action_dcc: execute an action on a DCC after a user input |
* gui_input_action_dcc: execute an action on a DCC after a user input |
612 |
|
* return -1 if DCC buffer was closed due to action, 0 otherwise |
613 |
*/ |
*/ |
614 |
|
|
615 |
void |
void |
616 |
gui_input_action_dcc (t_gui_window *window, char action) |
gui_input_action_dcc (t_gui_window *window, char *actions) |
617 |
{ |
{ |
618 |
t_irc_dcc *dcc_selected, *ptr_dcc, *ptr_dcc_next; |
t_irc_dcc *dcc_selected, *ptr_dcc, *ptr_dcc_next; |
619 |
|
t_gui_buffer *ptr_buffer; |
620 |
|
|
621 |
dcc_selected = (window->dcc_selected) ? |
while (actions[0]) |
|
(t_irc_dcc *) window->dcc_selected : dcc_list; |
|
|
|
|
|
switch (action) |
|
622 |
{ |
{ |
623 |
/* accept DCC */ |
if (actions[0] >= 32) |
624 |
case 'a': |
{ |
625 |
case 'A': |
dcc_selected = (window->dcc_selected) ? |
626 |
if (dcc_selected |
(t_irc_dcc *) window->dcc_selected : dcc_list; |
627 |
&& (DCC_IS_RECV(dcc_selected->status)) |
|
628 |
&& (dcc_selected->status == DCC_WAITING)) |
switch (actions[0]) |
|
{ |
|
|
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))) |
|
629 |
{ |
{ |
630 |
if (dcc_selected->next_dcc) |
/* accept DCC */ |
631 |
window->dcc_selected = dcc_selected->next_dcc; |
case 'a': |
632 |
else |
case 'A': |
633 |
|
if (dcc_selected |
634 |
|
&& (DCC_IS_RECV(dcc_selected->status)) |
635 |
|
&& (dcc_selected->status == DCC_WAITING)) |
636 |
|
{ |
637 |
|
dcc_accept (dcc_selected); |
638 |
|
} |
639 |
|
break; |
640 |
|
/* cancel DCC */ |
641 |
|
case 'c': |
642 |
|
case 'C': |
643 |
|
if (dcc_selected |
644 |
|
&& (!DCC_ENDED(dcc_selected->status))) |
645 |
|
{ |
646 |
|
dcc_close (dcc_selected, DCC_ABORTED); |
647 |
|
gui_redraw_buffer (window->buffer); |
648 |
|
} |
649 |
|
break; |
650 |
|
/* purge old DCC */ |
651 |
|
case 'p': |
652 |
|
case 'P': |
653 |
window->dcc_selected = NULL; |
window->dcc_selected = NULL; |
654 |
dcc_free (dcc_selected); |
ptr_dcc = dcc_list; |
655 |
gui_redraw_buffer (window->buffer); |
while (ptr_dcc) |
656 |
|
{ |
657 |
|
ptr_dcc_next = ptr_dcc->next_dcc; |
658 |
|
if (DCC_ENDED(ptr_dcc->status)) |
659 |
|
dcc_free (ptr_dcc); |
660 |
|
ptr_dcc = ptr_dcc_next; |
661 |
|
} |
662 |
|
gui_redraw_buffer (window->buffer); |
663 |
|
break; |
664 |
|
/* close DCC window */ |
665 |
|
case 'q': |
666 |
|
case 'Q': |
667 |
|
if (buffer_before_dcc) |
668 |
|
{ |
669 |
|
ptr_buffer = window->buffer; |
670 |
|
gui_switch_to_buffer (window, buffer_before_dcc); |
671 |
|
gui_buffer_free (ptr_buffer, 0); |
672 |
|
} |
673 |
|
else |
674 |
|
gui_buffer_free (window->buffer, 1); |
675 |
|
gui_redraw_buffer (window->buffer); |
676 |
|
return; |
677 |
|
break; |
678 |
|
/* remove from DCC list */ |
679 |
|
case 'r': |
680 |
|
case 'R': |
681 |
|
if (dcc_selected |
682 |
|
&& (DCC_ENDED(dcc_selected->status))) |
683 |
|
{ |
684 |
|
if (dcc_selected->next_dcc) |
685 |
|
window->dcc_selected = dcc_selected->next_dcc; |
686 |
|
else |
687 |
|
window->dcc_selected = NULL; |
688 |
|
dcc_free (dcc_selected); |
689 |
|
gui_redraw_buffer (window->buffer); |
690 |
|
} |
691 |
|
break; |
692 |
} |
} |
693 |
break; |
} |
694 |
|
actions = utf8_next_char (actions); |
695 |
} |
} |
696 |
} |
} |
697 |
|
|
708 |
int size, length; |
int size, length; |
709 |
char *ptr_start; |
char *ptr_start; |
710 |
|
|
711 |
if (window->buffer->dcc) |
if (window->buffer->has_input) |
|
{ |
|
|
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) |
|
712 |
{ |
{ |
713 |
if (pos == -1) |
if (pos == -1) |
714 |
pos = window->buffer->input_buffer_pos; |
pos = window->buffer->input_buffer_pos; |
1763 |
} |
} |
1764 |
|
|
1765 |
/* |
/* |
1766 |
|
* gui_switch_to_window_by_buffer: switch to next window displaying a buffer |
1767 |
|
*/ |
1768 |
|
|
1769 |
|
void |
1770 |
|
gui_switch_to_window_by_buffer (t_gui_window *window, int buffer_number) |
1771 |
|
{ |
1772 |
|
t_gui_window *ptr_win; |
1773 |
|
|
1774 |
|
if (!gui_ok) |
1775 |
|
return; |
1776 |
|
|
1777 |
|
ptr_win = (window->next_window) ? window->next_window : gui_windows; |
1778 |
|
while (ptr_win != window) |
1779 |
|
{ |
1780 |
|
if (ptr_win->buffer->number == buffer_number) |
1781 |
|
{ |
1782 |
|
gui_current_window = ptr_win; |
1783 |
|
gui_switch_to_buffer (gui_current_window, gui_current_window->buffer); |
1784 |
|
gui_redraw_buffer (gui_current_window->buffer); |
1785 |
|
return; |
1786 |
|
} |
1787 |
|
ptr_win = (ptr_win->next_window) ? ptr_win->next_window : gui_windows; |
1788 |
|
} |
1789 |
|
} |
1790 |
|
|
1791 |
|
/* |
1792 |
* gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist) |
* gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist) |
1793 |
*/ |
*/ |
1794 |
|
|