+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;
+ }
+}
+
+/* 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);
+}
+