+void cb_reslist_reload_clicked(GtkWidget *widget, gpointer data)
+{
+ if(lsrestag != -1)
+ return;
+ gtk_widget_set_sensitive(reslist_delete, FALSE);
+ gtk_widget_set_sensitive(reslist_search, FALSE);
+ gtk_list_store_clear(reslist);
+ lsrestag = dc_queuecmd(NULL, NULL, L"filtercmd", L"lsres", NULL);
+ gtk_widget_set_sensitive(reslist_reload, FALSE);
+}
+
+int rmres(char *id)
+{
+ int tag, ret;
+ struct dc_response *resp;
+
+ ret = -1;
+ tag = dc_queuecmd(NULL, NULL, L"filtercmd", L"rmres", L"%%s", id, NULL);
+ if((resp = dc_gettaggedrespsync(tag)) != NULL)
+ {
+ if(resp->numlines > 0)
+ {
+ if(!wcscmp(resp->rlines[0].argv[1], L"ok"))
+ ret = 0;
+ else if(!wcsncmp(resp->rlines[0].argv[1], L"err:", 4))
+ msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("An error occurred (%ls)"), resp->rlines[0].argv[1] + 4);
+ }
+ dc_freeresp(resp);
+ }
+ handleresps();
+ return(ret);
+}
+
+void cb_reslist_delete_clicked(GtkWidget *widget, gpointer data)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ char *id;
+ gboolean locked;
+
+ if(nextsrch != -1)
+ return;
+ if(!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(reslist_list)), &model, &iter))
+ return;
+ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &id, 4, &locked, -1);
+ if(locked)
+ {
+ g_free(id);
+ return;
+ }
+ if(!rmres(id))
+ gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
+ g_free(id);
+}
+
+void cb_reslist_search_clicked(GtkWidget *widget, gpointer data)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ char *hash, *buf;
+
+ if(nextsrch != -1)
+ return;
+ if(!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(reslist_list)), &model, &iter))
+ return;
+ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 5, &hash, -1);
+ buf = sprintf2("H=%s", hash);
+ gtk_entry_set_text(GTK_ENTRY(main_realsrch), buf);
+ free(buf);
+ g_free(hash);
+ cb_main_srchbtn_clicked(widget, NULL);
+}
+
+void cb_reslist_list_cchange(GtkWidget *widget, gpointer data)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gboolean locked;
+ char *hash;
+
+ if(!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(reslist_list)), &model, &iter))
+ {
+ gtk_widget_set_sensitive(reslist_delete, FALSE);
+ gtk_widget_set_sensitive(reslist_search, FALSE);
+ return;
+ }
+ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 4, &locked, 5, &hash, -1);
+ gtk_widget_set_sensitive(reslist_delete, !locked);
+ gtk_widget_set_sensitive(reslist_search, hash && *hash);
+ g_free(hash);
+}
+
+void cb_reslist_list_activate(GtkWidget *widget, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ char *hash, *buf;
+
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
+ if(!gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path))
+ return;
+ if(nextsrch != -1)
+ return;
+ gtk_tree_model_get(model, &iter, 5, &hash, -1);
+ buf = sprintf2("H=%s", hash);
+ gtk_entry_set_text(GTK_ENTRY(main_realsrch), buf);
+ free(buf);
+ g_free(hash);
+ cb_main_srchbtn_clicked(widget, NULL);
+}
+
+gboolean cb_reslist_list_keypress(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ GtkTreeSelection *sel;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ char *id;
+ gboolean locked;
+
+ if((event->type == GDK_KEY_PRESS) && (event->keyval == GDK_Delete))
+ {
+ 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, 0, &id, 4, &locked, -1);
+ if(!locked)
+ {
+ if(!rmres(id))
+ gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
+ }
+ g_free(id);
+ }
+ return(TRUE);
+ }
+ return(FALSE);
+}
+