+void cb_main_srhash_activate(GtkWidget *widget, gpointer data)
+{
+ GtkTreeSelection *sel;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ char *hash, *buf;
+
+ if(nextsrch != -1)
+ return;
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(main_srchres));
+ if(gtk_tree_selection_get_selected(sel, &model, &iter))
+ {
+ gtk_tree_model_get(model, &iter, 9, &hash, -1);
+ buf = sprintf2("H=%s", hash);
+ gtk_entry_set_text(GTK_ENTRY(main_realsrch), buf);
+ g_free(hash);
+ free(buf);
+ cb_main_srchbtn_clicked(widget, NULL);
+ } else {
+ return;
+ }
+}
+
+void cb_main_trhash_activate(GtkWidget *widget, gpointer data)
+{
+ GtkTreeSelection *sel;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ char *hash, *buf;
+
+ if(nextsrch != -1)
+ return;
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(main_downloads));
+ if(gtk_tree_selection_get_selected(sel, &model, &iter))
+ {
+ gtk_tree_model_get(model, &iter, 12, &hash, -1);
+ buf = sprintf2("H=%s", hash);
+ gtk_entry_set_text(GTK_ENTRY(main_realsrch), buf);
+ g_free(hash);
+ free(buf);
+ cb_main_srchbtn_clicked(widget, NULL);
+ } else {
+ return;
+ }
+}
+
+void cb_main_trcancel_activate(GtkWidget *widget, gpointer data)
+{
+ GtkTreeSelection *sel;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ int id, tag;
+ struct dc_response *resp;
+
+ if(nextsrch != -1)
+ return;
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(main_downloads));
+ if(gtk_tree_selection_get_selected(sel, &model, &iter))
+ {
+ gtk_tree_model_get(model, &iter, 0, &id, -1);
+ tag = dc_queuecmd(NULL, NULL, L"cancel", L"%%i", id, NULL);
+ if((resp = dc_gettaggedrespsync(tag)) != NULL)
+ {
+ if(resp->code == 502)
+ msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("You do not have permission to do that"));
+ else if(resp->code != 200)
+ msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("An error occurred while trying to cancel (%i)"), resp->code);
+ dc_freeresp(resp);
+ }
+ handleresps();
+ } else {
+ return;
+ }
+}
+
+/* XXX: This is quite a hack, since the calling convention is
+ * different for the popup-menu sig and the button-press-event sig. It
+ * most certainly works, but I don't know how portable it is. */
+gboolean cb_main_srpopup(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+ GtkTreeSelection *sel;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ char *hash;
+
+ if((event != NULL) && (event->button != 3))
+ return(FALSE);
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
+ if(gtk_tree_selection_get_selected(sel, &model, &iter))
+ {
+ gtk_tree_model_get(model, &iter, 9, &hash, -1);
+ if((nextsrch != -1) || (hash == NULL) || (*hash == 0))
+ gtk_widget_set_sensitive(main_srhash, FALSE);
+ else
+ gtk_widget_set_sensitive(main_srhash, TRUE);
+ g_free(hash);
+ } else {
+ return(FALSE);
+ }
+ if(event == NULL)
+ gtk_menu_popup(GTK_MENU(main_srpopup), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
+ else
+ gtk_menu_popup(GTK_MENU(main_srpopup), NULL, NULL, NULL, NULL, event->button, event->time);
+ return(FALSE);
+}
+
+/* The above hack note goes for this one too. */
+gboolean cb_main_trpopup(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+ GtkTreeSelection *sel;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ char *hash;
+
+ if((event != NULL) && (event->button != 3))
+ return(FALSE);
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
+ if(gtk_tree_selection_get_selected(sel, &model, &iter))
+ {
+ gtk_tree_model_get(model, &iter, 12, &hash, -1);
+ if((nextsrch != -1) || (hash == NULL) || (*hash == 0))
+ gtk_widget_set_sensitive(main_trhash, FALSE);
+ else
+ gtk_widget_set_sensitive(main_trhash, TRUE);
+ g_free(hash);
+ } else {
+ return(FALSE);
+ }
+ if(event == NULL)
+ gtk_menu_popup(GTK_MENU(main_trpopup), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
+ else
+ gtk_menu_popup(GTK_MENU(main_trpopup), NULL, NULL, NULL, NULL, event->button, event->time);
+ return(FALSE);
+}
+