/** * Sort search according to selected column */ void on_clist_search_results_click_column(GtkCList *clist, gint column, gpointer unused_udata) { search_t *search; (void) unused_udata; g_assert(clist != NULL); search = search_gui_get_current_search(); if (search == NULL) return; /* rotate or initialize search order */ if (column == search->sort_col) { switch (search->sort_order) { case SORT_ASC: search->sort_order = SORT_DESC; break; case SORT_DESC: search->sort_order = SORT_NONE; break; case SORT_NONE: search->sort_order = SORT_ASC; } } else { search->sort_col = column; search->sort_order = SORT_ASC; } search_gui_sort_column(search, column); /* Sort column, draw arrow */ }
/** * Remove the search from the gui and update all widget accordingly. */ void search_gui_remove_search(search_t *search) { GtkTreeIter iter; GtkTreeModel *model; bool stopped; g_return_if_fail(search); stopped = search_gui_start_massive_update(search); if (search_gui_get_current_search() == search) { GtkTreeView *tv = GTK_TREE_VIEW(search->tree); tree_view_save_widths(tv, PROP_SEARCH_RESULTS_COL_WIDTHS); tree_view_save_visibility(tv, PROP_SEARCH_RESULTS_COL_VISIBLE); tree_view_motion_clear_callback(&tvm_search); } g_assert(0 == slist_length(search->queue)); slist_free(&search->queue); model = gtk_tree_view_get_model(tree_view_search); if (tree_find_iter_by_data(model, c_sl_sch, search, &iter)) { gtk_list_store_remove(GTK_LIST_STORE(model), &iter); } if (stopped) search_gui_end_massive_update(search); }
/** * Request host browsing for the selected entries. */ void search_gui_browse_selected(void) { search_t *search; GtkCTree *ctree; GList *selected; GList *l;; search = search_gui_get_current_search(); g_assert(search != NULL); ctree = GTK_CTREE(search->tree); selected = GTK_CLIST(ctree)->selection; if (selected == NULL) { statusbar_gui_message(15, "*** No search result selected! ***"); return; } search_gui_option_menu_searches_freeze(); for (l = selected; l != NULL; l = g_list_next(l)) { GtkCTreeNode *node = l->data; gui_record_t *grc; results_set_t *rs; record_t *rc; guint32 flags = 0; if (node == NULL) break; grc = gtk_ctree_node_get_row_data(ctree, node); rc = grc->shared_record; if (!rc) continue; rs = rc->results_set; flags |= 0 != (rs->status & ST_FIREWALL) ? SOCK_F_PUSH : 0; flags |= 0 != (rs->status & ST_TLS) ? SOCK_F_TLS : 0; flags |= ((rs->status & ST_G2) && T_GTKG != rs->vendor) ? SOCK_F_G2 : 0; (void) search_gui_new_browse_host( rs->hostname, rs->addr, rs->port, rs->guid, rs->proxies, flags); } search_gui_option_menu_searches_thaw(); }
static void row_selected_expire(cqueue_t *cq, gpointer unused_udata) { search_t *search; (void) unused_udata; cq_zero(cq, &row_selected_ev); search = search_gui_get_current_search(); if (search) { search_gui_refresh_popup(); search_gui_refresh_details(selected_record); } else { search_gui_clear_details(); } }
void on_popup_search_copy_magnet_activate(GtkMenuItem *unused_item, gpointer unused_udata) { search_t *search; (void) unused_item; (void) unused_udata; search = search_gui_get_current_search(); g_return_if_fail(search); if (selected_record) { char *magnet = search_gui_get_magnet(search, selected_record); clipboard_set_text(gui_main_window(), magnet); HFREE_NULL(magnet); } }
/** * Queue a bitzi queries from the search context menu */ void on_popup_search_metadata_activate(GtkMenuItem *unused_menuitem, gpointer unused_udata) { GList *node_list; GSList *data_list; search_t *search; guint32 bitzi_debug; (void) unused_menuitem; (void) unused_udata; search = search_gui_get_current_search(); g_assert(search != NULL); gtk_clist_freeze(GTK_CLIST(search->tree)); node_list = g_list_copy(GTK_CLIST(search->tree)->selection); data_list = search_cb_collect_ctree_data(GTK_CTREE(search->tree), node_list, gui_record_sha1_eq); /* Make sure the column is actually visible. */ { static const gint min_width = 80; GtkCList *clist = GTK_CLIST(search->tree); gtk_clist_set_column_visibility(clist, c_sr_meta, TRUE); if (clist->column[c_sr_meta].width < min_width) gtk_clist_set_column_width(clist, c_sr_meta, min_width); } /* Queue up our requests */ gnet_prop_get_guint32_val(PROP_BITZI_DEBUG, &bitzi_debug); if (bitzi_debug > 10) g_debug("on_popup_search_metadata_activate: %d items, %p", g_slist_position(data_list, g_slist_last(data_list)) + 1, cast_to_gconstpointer(data_list)); G_SLIST_FOREACH(data_list, search_gui_queue_bitzi_by_sha1); gtk_clist_thaw(GTK_CLIST(search->tree)); g_slist_free(data_list); g_list_free(node_list); }