summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2004-09-16 20:01:56 +0000
committerSebastien Helleu <flashcode@flashtux.org>2004-09-16 20:01:56 +0000
commitc65666181290f0a4285893cf1c2d95be3eb8132e (patch)
treee5cbddc4db6fc70b0d8291cfc5c71d7e350db9cb
parentNew /perl autoload command (diff)
downloadweechat-c65666181290f0a4285893cf1c2d95be3eb8132e.tar.xz
weechat-c65666181290f0a4285893cf1c2d95be3eb8132e.zip
Added DCC control keys (Accept, Cancel, Remove, Close DCC view)
-rw-r--r--po/fr.po37
-rw-r--r--po/weechat.pot37
-rw-r--r--src/gui/curses/gui-display.c41
-rw-r--r--src/gui/curses/gui-input.c59
-rw-r--r--src/irc/irc-dcc.c22
-rw-r--r--src/irc/irc.h3
-rw-r--r--weechat/po/fr.po37
-rw-r--r--weechat/po/weechat.pot37
-rw-r--r--weechat/src/gui/curses/gui-display.c41
-rw-r--r--weechat/src/gui/curses/gui-input.c59
-rw-r--r--weechat/src/irc/irc-dcc.c22
-rw-r--r--weechat/src/irc/irc.h3
12 files changed, 350 insertions, 48 deletions
diff --git a/po/fr.po b/po/fr.po
index c7806f454..61cf1c32a 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.0.8-pre2\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2004-09-13 21:42+0200\n"
+"POT-Creation-Date: 2004-09-16 21:57+0200\n"
"PO-Revision-Date: 2004-08-08 20:47+0200\n"
"Last-Translator: FlashCode <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1581,36 +1581,36 @@ msgstr "Echoué"
msgid "Aborted"
msgstr "Interrompu"
-#: src/irc/irc-dcc.c:219
+#: src/irc/irc-dcc.c:235
#, c-format
msgid "%s not enough memory for new DCC\n"
msgstr "%s pas assez de mémoire pour un nouveau DCC\n"
-#: src/irc/irc-dcc.c:247
+#: src/irc/irc-dcc.c:263
msgid "Incoming DCC file from "
msgstr "Réception fichier DCC de "
-#: src/irc/irc-dcc.c:272
+#: src/irc/irc-dcc.c:288
msgid " bytes\n"
msgstr "octets\n"
-#: src/irc/irc-dcc.c:325
+#: src/irc/irc-dcc.c:341
msgid "DCC: file "
msgstr "DCC: fichier "
-#: src/irc/irc-dcc.c:330
+#: src/irc/irc-dcc.c:346
msgid " (local filename: "
msgstr " (nom local: "
-#: src/irc/irc-dcc.c:335
+#: src/irc/irc-dcc.c:351
msgid ") from "
msgstr ") de "
-#: src/irc/irc-dcc.c:340
+#: src/irc/irc-dcc.c:356
msgid ": ok!\n"
msgstr ": ok!\n"
-#: src/irc/irc-dcc.c:366
+#: src/irc/irc-dcc.c:382
#, c-format
msgid "aborting active DCC: \"%s\" from %s\n"
msgstr "abandon du DCC actif: \"%s\" de %s\n"
@@ -1710,6 +1710,25 @@ msgstr "[Act: "
msgid "-MORE-"
msgstr "-PLUS-"
+#: src/gui/curses/gui-display.c:1216
+msgid " [A] Accept"
+msgstr " [A] Accepter"
+
+#: src/gui/curses/gui-display.c:1217 src/gui/curses/gui-display.c:1223
+#: src/gui/curses/gui-display.c:1230
+msgid " [C] Cancel"
+msgstr " [C] Annuler"
+
+#: src/gui/curses/gui-display.c:1218 src/gui/curses/gui-display.c:1224
+#: src/gui/curses/gui-display.c:1231 src/gui/curses/gui-display.c:1238
+#: src/gui/curses/gui-display.c:1243
+msgid " [Q] Close DCC view"
+msgstr " [Q] Fermer la vue DCC"
+
+#: src/gui/curses/gui-display.c:1237
+msgid " [R] Remove"
+msgstr " [R] Retirer"
+
#: src/gui/gtk/gui-display.c:657
msgid "server"
msgstr "serveur"
diff --git a/po/weechat.pot b/po/weechat.pot
index 48e132e52..198496c3f 100644
--- a/po/weechat.pot
+++ b/po/weechat.pot
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2004-09-13 21:42+0200\n"
+"POT-Creation-Date: 2004-09-16 21:57+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1480,36 +1480,36 @@ msgstr ""
msgid "Aborted"
msgstr ""
-#: src/irc/irc-dcc.c:219
+#: src/irc/irc-dcc.c:235
#, c-format
msgid "%s not enough memory for new DCC\n"
msgstr ""
-#: src/irc/irc-dcc.c:247
+#: src/irc/irc-dcc.c:263
msgid "Incoming DCC file from "
msgstr ""
-#: src/irc/irc-dcc.c:272
+#: src/irc/irc-dcc.c:288
msgid " bytes\n"
msgstr ""
-#: src/irc/irc-dcc.c:325
+#: src/irc/irc-dcc.c:341
msgid "DCC: file "
msgstr ""
-#: src/irc/irc-dcc.c:330
+#: src/irc/irc-dcc.c:346
msgid " (local filename: "
msgstr ""
-#: src/irc/irc-dcc.c:335
+#: src/irc/irc-dcc.c:351
msgid ") from "
msgstr ""
-#: src/irc/irc-dcc.c:340
+#: src/irc/irc-dcc.c:356
msgid ": ok!\n"
msgstr ""
-#: src/irc/irc-dcc.c:366
+#: src/irc/irc-dcc.c:382
#, c-format
msgid "aborting active DCC: \"%s\" from %s\n"
msgstr ""
@@ -1603,6 +1603,25 @@ msgstr ""
msgid "-MORE-"
msgstr ""
+#: src/gui/curses/gui-display.c:1216
+msgid " [A] Accept"
+msgstr ""
+
+#: src/gui/curses/gui-display.c:1217 src/gui/curses/gui-display.c:1223
+#: src/gui/curses/gui-display.c:1230
+msgid " [C] Cancel"
+msgstr ""
+
+#: src/gui/curses/gui-display.c:1218 src/gui/curses/gui-display.c:1224
+#: src/gui/curses/gui-display.c:1231 src/gui/curses/gui-display.c:1238
+#: src/gui/curses/gui-display.c:1243
+msgid " [Q] Close DCC view"
+msgstr ""
+
+#: src/gui/curses/gui-display.c:1237
+msgid " [R] Remove"
+msgstr ""
+
#: src/gui/gtk/gui-display.c:657
msgid "server"
msgstr ""
diff --git a/src/gui/curses/gui-display.c b/src/gui/curses/gui-display.c
index 15b229040..e57b7ba44 100644
--- a/src/gui/curses/gui-display.c
+++ b/src/gui/curses/gui-display.c
@@ -1134,6 +1134,7 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
char format[32];
char *ptr_nickname;
int input_width;
+ t_dcc *dcc_selected;
if (!gui_ok)
return;
@@ -1202,8 +1203,44 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
{
if (buffer->dcc)
{
- snprintf (format, 32, "%%-%ds", input_width);
- mvwprintw (ptr_win->win_input, 0, 0, format, "");
+ dcc_selected = (ptr_win->dcc_selected) ? (t_dcc *) ptr_win->dcc_selected : dcc_list;
+ if (dcc_selected)
+ {
+ switch (dcc_selected->status)
+ {
+ case DCC_WAITING:
+ if ((dcc_selected->type == DCC_CHAT_RECV)
+ || (dcc_selected->type == DCC_FILE_RECV))
+ {
+ mvwprintw (ptr_win->win_input, 0, 0,
+ _(" [A] Accept"));
+ wprintw (ptr_win->win_input, _(" [C] Cancel"));
+ wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
+ }
+ else
+ {
+ mvwprintw (ptr_win->win_input, 0, 0,
+ _(" [C] Cancel"));
+ wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
+ }
+ break;
+ case DCC_CONNECTING:
+ case DCC_ACTIVE:
+ mvwprintw (ptr_win->win_input, 0, 0,
+ _(" [C] Cancel"));
+ wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
+ break;
+ case DCC_DONE:
+ case DCC_FAILED:
+ case DCC_ABORTED:
+ mvwprintw (ptr_win->win_input, 0, 0,
+ _(" [R] Remove"));
+ wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
+ break;
+ }
+ }
+ else
+ mvwprintw (ptr_win->win_input, 0, 0, _(" [Q] Close DCC view"));
wclrtoeol (ptr_win->win_input);
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
diff --git a/src/gui/curses/gui-input.c b/src/gui/curses/gui-input.c
index b37d6c816..b94e8d9d8 100644
--- a/src/gui/curses/gui-input.c
+++ b/src/gui/curses/gui-input.c
@@ -52,6 +52,7 @@ gui_read_keyb ()
int key, i;
t_gui_buffer *ptr_buffer;
char new_char[2];
+ t_dcc *dcc_selected;
key = getch ();
if (key != ERR)
@@ -104,6 +105,7 @@ gui_read_keyb ()
gui_current_window->dcc_selected =
((t_dcc *)(gui_current_window->dcc_selected))->prev_dcc;
gui_draw_buffer_chat (gui_current_window->buffer, 1);
+ gui_draw_buffer_input (gui_current_window->buffer, 1);
}
}
}
@@ -160,6 +162,7 @@ gui_read_keyb ()
gui_current_window->dcc_selected =
dcc_list->next_dcc;
gui_draw_buffer_chat (gui_current_window->buffer, 1);
+ gui_draw_buffer_input (gui_current_window->buffer, 1);
}
}
}
@@ -500,7 +503,61 @@ gui_read_keyb ()
break;
/* other key => add to input buffer */
default:
- if (!gui_current_window->buffer->dcc)
+ if (gui_current_window->buffer->dcc)
+ {
+ dcc_selected = (gui_current_window->dcc_selected) ?
+ (t_dcc *) gui_current_window->dcc_selected : dcc_list;
+ switch (key)
+ {
+ /* accept DCC */
+ case 'a':
+ case 'A':
+ if (dcc_selected
+ && (((dcc_selected->type == DCC_CHAT_RECV)
+ || (dcc_selected->type == DCC_FILE_RECV))
+ && (dcc_selected->status == DCC_WAITING)))
+ {
+ dcc_accept (dcc_selected);
+ }
+ break;
+ /* cancel DCC */
+ case 'c':
+ case 'C':
+ if (dcc_selected
+ && ((dcc_selected->status == DCC_WAITING)
+ || (dcc_selected->status == DCC_CONNECTING)
+ || (dcc_selected->status == DCC_ACTIVE)))
+ {
+ dcc_close (dcc_selected, DCC_ABORTED);
+ gui_redraw_buffer (gui_current_window->buffer);
+ }
+ break;
+ /* close DCC window */
+ case 'q':
+ case 'Q':
+ gui_buffer_free (gui_current_window->buffer, 1);
+ break;
+ /* remove from DCC list */
+ case 'r':
+ case 'R':
+ if (dcc_selected
+ && (((dcc_selected->type == DCC_CHAT_RECV)
+ || (dcc_selected->type == DCC_FILE_RECV))
+ && ((dcc_selected->status == DCC_DONE)
+ || (dcc_selected->status == DCC_FAILED)
+ || (dcc_selected->status == DCC_ABORTED))))
+ {
+ if (dcc_selected->next_dcc)
+ gui_current_window->dcc_selected = dcc_selected->next_dcc;
+ else
+ gui_current_window->dcc_selected = NULL;
+ dcc_free (dcc_selected);
+ gui_redraw_buffer (gui_current_window->buffer);
+ }
+ break;
+ }
+ }
+ else
{
/*gui_printf (gui_current_window->buffer,
"[Debug] key pressed = %d, hex = %02X, octal = %o\n", key, key, key);*/
diff --git a/src/irc/irc-dcc.c b/src/irc/irc-dcc.c
index d338bd82b..9b8e115cd 100644
--- a/src/irc/irc-dcc.c
+++ b/src/irc/irc-dcc.c
@@ -55,7 +55,7 @@ dcc_redraw (int highlight)
gui_draw_buffer_chat (gui_get_dcc_buffer (), 0);
if (highlight)
{
- hotlist_add (1, gui_get_dcc_buffer ());
+ hotlist_add (highlight, gui_get_dcc_buffer ());
gui_draw_buffer_status (gui_current_window->buffer, 0);
}
}
@@ -92,16 +92,32 @@ dcc_send ()
}
/*
- * dcc_free: free DCC struct
+ * dcc_free: free DCC struct and remove it from list
*/
void
dcc_free (t_dcc *ptr_dcc)
{
+ t_dcc *new_dcc_list;
+
+ if (ptr_dcc->prev_dcc)
+ {
+ (ptr_dcc->prev_dcc)->next_dcc = ptr_dcc->next_dcc;
+ new_dcc_list = dcc_list;
+ }
+ else
+ new_dcc_list = ptr_dcc->next_dcc;
+
+ if (ptr_dcc->next_dcc)
+ (ptr_dcc->next_dcc)->prev_dcc = ptr_dcc->prev_dcc;
+
if (ptr_dcc->nick)
free (ptr_dcc->nick);
if (ptr_dcc->filename)
free (ptr_dcc->filename);
+
+ free (ptr_dcc);
+ dcc_list = new_dcc_list;
}
/*
@@ -276,7 +292,7 @@ dcc_add (t_irc_server *server, int type, unsigned long addr, int port, char *nic
|| ( (type == DCC_FILE_RECV) && (cfg_dcc_auto_accept_files) ) )
dcc_accept (new_dcc);
else
- hotlist_add (2, gui_get_dcc_buffer ());
+ dcc_redraw (2);
gui_draw_buffer_status (gui_current_window->buffer, 0);
return new_dcc;
diff --git a/src/irc/irc.h b/src/irc/irc.h
index 9ce6238f1..b90bd7654 100644
--- a/src/irc/irc.h
+++ b/src/irc/irc.h
@@ -248,6 +248,9 @@ extern int nick_get_max_length (t_irc_channel *);
/* DCC functions (irc-dcc.c) */
extern void dcc_send ();
+extern void dcc_free (t_dcc *);
+extern void dcc_close (t_dcc *, int);
+extern void dcc_accept (t_dcc *);
extern t_dcc *dcc_add (t_irc_server *, int, unsigned long, int, char *, char *,
unsigned int);
extern void dcc_handle ();
diff --git a/weechat/po/fr.po b/weechat/po/fr.po
index c7806f454..61cf1c32a 100644
--- a/weechat/po/fr.po
+++ b/weechat/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.0.8-pre2\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2004-09-13 21:42+0200\n"
+"POT-Creation-Date: 2004-09-16 21:57+0200\n"
"PO-Revision-Date: 2004-08-08 20:47+0200\n"
"Last-Translator: FlashCode <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1581,36 +1581,36 @@ msgstr "Echoué"
msgid "Aborted"
msgstr "Interrompu"
-#: src/irc/irc-dcc.c:219
+#: src/irc/irc-dcc.c:235
#, c-format
msgid "%s not enough memory for new DCC\n"
msgstr "%s pas assez de mémoire pour un nouveau DCC\n"
-#: src/irc/irc-dcc.c:247
+#: src/irc/irc-dcc.c:263
msgid "Incoming DCC file from "
msgstr "Réception fichier DCC de "
-#: src/irc/irc-dcc.c:272
+#: src/irc/irc-dcc.c:288
msgid " bytes\n"
msgstr "octets\n"
-#: src/irc/irc-dcc.c:325
+#: src/irc/irc-dcc.c:341
msgid "DCC: file "
msgstr "DCC: fichier "
-#: src/irc/irc-dcc.c:330
+#: src/irc/irc-dcc.c:346
msgid " (local filename: "
msgstr " (nom local: "
-#: src/irc/irc-dcc.c:335
+#: src/irc/irc-dcc.c:351
msgid ") from "
msgstr ") de "
-#: src/irc/irc-dcc.c:340
+#: src/irc/irc-dcc.c:356
msgid ": ok!\n"
msgstr ": ok!\n"
-#: src/irc/irc-dcc.c:366
+#: src/irc/irc-dcc.c:382
#, c-format
msgid "aborting active DCC: \"%s\" from %s\n"
msgstr "abandon du DCC actif: \"%s\" de %s\n"
@@ -1710,6 +1710,25 @@ msgstr "[Act: "
msgid "-MORE-"
msgstr "-PLUS-"
+#: src/gui/curses/gui-display.c:1216
+msgid " [A] Accept"
+msgstr " [A] Accepter"
+
+#: src/gui/curses/gui-display.c:1217 src/gui/curses/gui-display.c:1223
+#: src/gui/curses/gui-display.c:1230
+msgid " [C] Cancel"
+msgstr " [C] Annuler"
+
+#: src/gui/curses/gui-display.c:1218 src/gui/curses/gui-display.c:1224
+#: src/gui/curses/gui-display.c:1231 src/gui/curses/gui-display.c:1238
+#: src/gui/curses/gui-display.c:1243
+msgid " [Q] Close DCC view"
+msgstr " [Q] Fermer la vue DCC"
+
+#: src/gui/curses/gui-display.c:1237
+msgid " [R] Remove"
+msgstr " [R] Retirer"
+
#: src/gui/gtk/gui-display.c:657
msgid "server"
msgstr "serveur"
diff --git a/weechat/po/weechat.pot b/weechat/po/weechat.pot
index 48e132e52..198496c3f 100644
--- a/weechat/po/weechat.pot
+++ b/weechat/po/weechat.pot
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2004-09-13 21:42+0200\n"
+"POT-Creation-Date: 2004-09-16 21:57+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1480,36 +1480,36 @@ msgstr ""
msgid "Aborted"
msgstr ""
-#: src/irc/irc-dcc.c:219
+#: src/irc/irc-dcc.c:235
#, c-format
msgid "%s not enough memory for new DCC\n"
msgstr ""
-#: src/irc/irc-dcc.c:247
+#: src/irc/irc-dcc.c:263
msgid "Incoming DCC file from "
msgstr ""
-#: src/irc/irc-dcc.c:272
+#: src/irc/irc-dcc.c:288
msgid " bytes\n"
msgstr ""
-#: src/irc/irc-dcc.c:325
+#: src/irc/irc-dcc.c:341
msgid "DCC: file "
msgstr ""
-#: src/irc/irc-dcc.c:330
+#: src/irc/irc-dcc.c:346
msgid " (local filename: "
msgstr ""
-#: src/irc/irc-dcc.c:335
+#: src/irc/irc-dcc.c:351
msgid ") from "
msgstr ""
-#: src/irc/irc-dcc.c:340
+#: src/irc/irc-dcc.c:356
msgid ": ok!\n"
msgstr ""
-#: src/irc/irc-dcc.c:366
+#: src/irc/irc-dcc.c:382
#, c-format
msgid "aborting active DCC: \"%s\" from %s\n"
msgstr ""
@@ -1603,6 +1603,25 @@ msgstr ""
msgid "-MORE-"
msgstr ""
+#: src/gui/curses/gui-display.c:1216
+msgid " [A] Accept"
+msgstr ""
+
+#: src/gui/curses/gui-display.c:1217 src/gui/curses/gui-display.c:1223
+#: src/gui/curses/gui-display.c:1230
+msgid " [C] Cancel"
+msgstr ""
+
+#: src/gui/curses/gui-display.c:1218 src/gui/curses/gui-display.c:1224
+#: src/gui/curses/gui-display.c:1231 src/gui/curses/gui-display.c:1238
+#: src/gui/curses/gui-display.c:1243
+msgid " [Q] Close DCC view"
+msgstr ""
+
+#: src/gui/curses/gui-display.c:1237
+msgid " [R] Remove"
+msgstr ""
+
#: src/gui/gtk/gui-display.c:657
msgid "server"
msgstr ""
diff --git a/weechat/src/gui/curses/gui-display.c b/weechat/src/gui/curses/gui-display.c
index 15b229040..e57b7ba44 100644
--- a/weechat/src/gui/curses/gui-display.c
+++ b/weechat/src/gui/curses/gui-display.c
@@ -1134,6 +1134,7 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
char format[32];
char *ptr_nickname;
int input_width;
+ t_dcc *dcc_selected;
if (!gui_ok)
return;
@@ -1202,8 +1203,44 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
{
if (buffer->dcc)
{
- snprintf (format, 32, "%%-%ds", input_width);
- mvwprintw (ptr_win->win_input, 0, 0, format, "");
+ dcc_selected = (ptr_win->dcc_selected) ? (t_dcc *) ptr_win->dcc_selected : dcc_list;
+ if (dcc_selected)
+ {
+ switch (dcc_selected->status)
+ {
+ case DCC_WAITING:
+ if ((dcc_selected->type == DCC_CHAT_RECV)
+ || (dcc_selected->type == DCC_FILE_RECV))
+ {
+ mvwprintw (ptr_win->win_input, 0, 0,
+ _(" [A] Accept"));
+ wprintw (ptr_win->win_input, _(" [C] Cancel"));
+ wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
+ }
+ else
+ {
+ mvwprintw (ptr_win->win_input, 0, 0,
+ _(" [C] Cancel"));
+ wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
+ }
+ break;
+ case DCC_CONNECTING:
+ case DCC_ACTIVE:
+ mvwprintw (ptr_win->win_input, 0, 0,
+ _(" [C] Cancel"));
+ wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
+ break;
+ case DCC_DONE:
+ case DCC_FAILED:
+ case DCC_ABORTED:
+ mvwprintw (ptr_win->win_input, 0, 0,
+ _(" [R] Remove"));
+ wprintw (ptr_win->win_input, _(" [Q] Close DCC view"));
+ break;
+ }
+ }
+ else
+ mvwprintw (ptr_win->win_input, 0, 0, _(" [Q] Close DCC view"));
wclrtoeol (ptr_win->win_input);
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
diff --git a/weechat/src/gui/curses/gui-input.c b/weechat/src/gui/curses/gui-input.c
index b37d6c816..b94e8d9d8 100644
--- a/weechat/src/gui/curses/gui-input.c
+++ b/weechat/src/gui/curses/gui-input.c
@@ -52,6 +52,7 @@ gui_read_keyb ()
int key, i;
t_gui_buffer *ptr_buffer;
char new_char[2];
+ t_dcc *dcc_selected;
key = getch ();
if (key != ERR)
@@ -104,6 +105,7 @@ gui_read_keyb ()
gui_current_window->dcc_selected =
((t_dcc *)(gui_current_window->dcc_selected))->prev_dcc;
gui_draw_buffer_chat (gui_current_window->buffer, 1);
+ gui_draw_buffer_input (gui_current_window->buffer, 1);
}
}
}
@@ -160,6 +162,7 @@ gui_read_keyb ()
gui_current_window->dcc_selected =
dcc_list->next_dcc;
gui_draw_buffer_chat (gui_current_window->buffer, 1);
+ gui_draw_buffer_input (gui_current_window->buffer, 1);
}
}
}
@@ -500,7 +503,61 @@ gui_read_keyb ()
break;
/* other key => add to input buffer */
default:
- if (!gui_current_window->buffer->dcc)
+ if (gui_current_window->buffer->dcc)
+ {
+ dcc_selected = (gui_current_window->dcc_selected) ?
+ (t_dcc *) gui_current_window->dcc_selected : dcc_list;
+ switch (key)
+ {
+ /* accept DCC */
+ case 'a':
+ case 'A':
+ if (dcc_selected
+ && (((dcc_selected->type == DCC_CHAT_RECV)
+ || (dcc_selected->type == DCC_FILE_RECV))
+ && (dcc_selected->status == DCC_WAITING)))
+ {
+ dcc_accept (dcc_selected);
+ }
+ break;
+ /* cancel DCC */
+ case 'c':
+ case 'C':
+ if (dcc_selected
+ && ((dcc_selected->status == DCC_WAITING)
+ || (dcc_selected->status == DCC_CONNECTING)
+ || (dcc_selected->status == DCC_ACTIVE)))
+ {
+ dcc_close (dcc_selected, DCC_ABORTED);
+ gui_redraw_buffer (gui_current_window->buffer);
+ }
+ break;
+ /* close DCC window */
+ case 'q':
+ case 'Q':
+ gui_buffer_free (gui_current_window->buffer, 1);
+ break;
+ /* remove from DCC list */
+ case 'r':
+ case 'R':
+ if (dcc_selected
+ && (((dcc_selected->type == DCC_CHAT_RECV)
+ || (dcc_selected->type == DCC_FILE_RECV))
+ && ((dcc_selected->status == DCC_DONE)
+ || (dcc_selected->status == DCC_FAILED)
+ || (dcc_selected->status == DCC_ABORTED))))
+ {
+ if (dcc_selected->next_dcc)
+ gui_current_window->dcc_selected = dcc_selected->next_dcc;
+ else
+ gui_current_window->dcc_selected = NULL;
+ dcc_free (dcc_selected);
+ gui_redraw_buffer (gui_current_window->buffer);
+ }
+ break;
+ }
+ }
+ else
{
/*gui_printf (gui_current_window->buffer,
"[Debug] key pressed = %d, hex = %02X, octal = %o\n", key, key, key);*/
diff --git a/weechat/src/irc/irc-dcc.c b/weechat/src/irc/irc-dcc.c
index d338bd82b..9b8e115cd 100644
--- a/weechat/src/irc/irc-dcc.c
+++ b/weechat/src/irc/irc-dcc.c
@@ -55,7 +55,7 @@ dcc_redraw (int highlight)
gui_draw_buffer_chat (gui_get_dcc_buffer (), 0);
if (highlight)
{
- hotlist_add (1, gui_get_dcc_buffer ());
+ hotlist_add (highlight, gui_get_dcc_buffer ());
gui_draw_buffer_status (gui_current_window->buffer, 0);
}
}
@@ -92,16 +92,32 @@ dcc_send ()
}
/*
- * dcc_free: free DCC struct
+ * dcc_free: free DCC struct and remove it from list
*/
void
dcc_free (t_dcc *ptr_dcc)
{
+ t_dcc *new_dcc_list;
+
+ if (ptr_dcc->prev_dcc)
+ {
+ (ptr_dcc->prev_dcc)->next_dcc = ptr_dcc->next_dcc;
+ new_dcc_list = dcc_list;
+ }
+ else
+ new_dcc_list = ptr_dcc->next_dcc;
+
+ if (ptr_dcc->next_dcc)
+ (ptr_dcc->next_dcc)->prev_dcc = ptr_dcc->prev_dcc;
+
if (ptr_dcc->nick)
free (ptr_dcc->nick);
if (ptr_dcc->filename)
free (ptr_dcc->filename);
+
+ free (ptr_dcc);
+ dcc_list = new_dcc_list;
}
/*
@@ -276,7 +292,7 @@ dcc_add (t_irc_server *server, int type, unsigned long addr, int port, char *nic
|| ( (type == DCC_FILE_RECV) && (cfg_dcc_auto_accept_files) ) )
dcc_accept (new_dcc);
else
- hotlist_add (2, gui_get_dcc_buffer ());
+ dcc_redraw (2);
gui_draw_buffer_status (gui_current_window->buffer, 0);
return new_dcc;
diff --git a/weechat/src/irc/irc.h b/weechat/src/irc/irc.h
index 9ce6238f1..b90bd7654 100644
--- a/weechat/src/irc/irc.h
+++ b/weechat/src/irc/irc.h
@@ -248,6 +248,9 @@ extern int nick_get_max_length (t_irc_channel *);
/* DCC functions (irc-dcc.c) */
extern void dcc_send ();
+extern void dcc_free (t_dcc *);
+extern void dcc_close (t_dcc *, int);
+extern void dcc_accept (t_dcc *);
extern t_dcc *dcc_add (t_irc_server *, int, unsigned long, int, char *, char *,
unsigned int);
extern void dcc_handle ();