static void dcc_dclick_cb (GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer data) { struct DCC *dcc; GSList *list; list = dcc_get_selected (); if (!list) return; dcc = list->data; g_slist_free (list); if (dcc->type == TYPE_RECV) { accept_clicked (0, 0); return; } switch (dcc->dccstat) { case STAT_FAILED: case STAT_ABORTED: case STAT_DONE: dcc_abort (dcc->serv->front_session, dcc); } }
static void abort_clicked (GtkWidget * wid, gpointer none) { struct DCC *dcc; GSList *start, *list; start = list = dcc_get_selected (); for (; list; list = list->next) { dcc = list->data; dcc_abort (dcc->serv->front_session, dcc); } g_slist_free (start); }
static void accept_clicked (GtkWidget * wid, gpointer none) { struct DCC *dcc; GSList *start, *list; start = list = dcc_get_selected (); for (; list; list = list->next) { dcc = list->data; if (dcc->type != TYPE_SEND) dcc_get (dcc); } g_slist_free (start); }
static void abort_clicked (GtkWidget * wid, gpointer none) { struct DCC *dcc; GSList *start, *list; start = list = dcc_get_selected (); for (; list; list = list->next) { dcc = list->data; dcc_abort (dcc->serv->front_session, dcc); } g_slist_free (start); /* Enable the clear button if it wasn't already enabled */ update_clear_button_sensitivity (); }
static void dcc_row_cb (GtkTreeSelection *sel, gpointer user_data) { struct DCC *dcc; GSList *list; list = dcc_get_selected (); if (!list) { gtk_widget_set_sensitive (dccfwin.accept_button, FALSE); gtk_widget_set_sensitive (dccfwin.resume_button, FALSE); gtk_widget_set_sensitive (dccfwin.abort_button, FALSE); dcc_details_populate (NULL); return; } gtk_widget_set_sensitive (dccfwin.abort_button, TRUE); if (list->next) /* multi selection */ { gtk_widget_set_sensitive (dccfwin.accept_button, TRUE); gtk_widget_set_sensitive (dccfwin.resume_button, TRUE); dcc_details_populate (list->data); } else { /* turn OFF/ON appropriate buttons */ dcc = list->data; if (dcc->dccstat == STAT_QUEUED && dcc->type == TYPE_RECV) { gtk_widget_set_sensitive (dccfwin.accept_button, TRUE); gtk_widget_set_sensitive (dccfwin.resume_button, TRUE); } else { gtk_widget_set_sensitive (dccfwin.accept_button, FALSE); gtk_widget_set_sensitive (dccfwin.resume_button, FALSE); } dcc_details_populate (dcc); } g_slist_free (list); }
static void resume_clicked (GtkWidget * wid, gpointer none) { struct DCC *dcc; char buf[512]; GSList *list; list = dcc_get_selected (); if (!list) return; dcc = list->data; g_slist_free (list); if (dcc->type == TYPE_RECV && !dcc_resume (dcc)) { switch (dcc->resume_error) { case 0: /* unknown error */ fe_message (_("That file is not resumable."), FE_MSG_ERROR); break; case 1: snprintf (buf, sizeof (buf), _( "Cannot access file: %s\n" "%s.\n" "Resuming not possible."), dcc->destfile, errorstring (dcc->resume_errno)); fe_message (buf, FE_MSG_ERROR); break; case 2: fe_message (_("File in download directory is larger " "than file offered. Resuming not possible."), FE_MSG_ERROR); break; case 3: fe_message (_("Cannot resume the same file from two people."), FE_MSG_ERROR); } } }