static gboolean view_release_event(GtkWidget *view, GdkEventButton *event, gpointer user_data){ if(event->button!=1) return FALSE; GtkTreePath *path=NULL; GtkTreeViewColumn *column=NULL; if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view), (gint)event->x, (gint)event->y, &path, &column, NULL, NULL)){ const gchar *title=gtk_tree_view_column_get_title(column); if(!strcmp(title," ")){ GtkTreeIter iter; gint ihost=GPOINTER_TO_INT(user_data); GtkTreeModel *model=GTK_TREE_MODEL(lists[ihost]); gtk_tree_model_get_iter(model, &iter, path); GValue value=G_VALUE_INIT; gtk_tree_model_get_value(model, &iter, COL_PID, &value); int pid=strtol(g_value_get_string(&value), NULL, 10); g_value_unset(&value); PROC_T *p=proc_get(ihost, pid); if(p){ if(p->status.info<10){ kill_job(p); }else{ scheduler_cmd(ihost, pid, CMD_REMOVE); } } } } return TRUE; }
/*A general routine handle actions to each item.*/ static void handle_selected(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data, int cmd, const char *action){ (void)path; gint ihost=GPOINTER_TO_INT(user_data); GValue value=G_VALUE_INIT; gtk_tree_model_get_value(model, iter, COL_PID, &value); int pid=strtol(g_value_get_string(&value), NULL, 10); g_value_unset(&value); if(cmd<0){ switch(cmd){ case -1:{ if(!strcmp(action, "CopyPath")){ gtk_tree_model_get_value(model, iter, COL_START, &value); }else if(!strcmp(action, "CopyOutPath")){ gtk_tree_model_get_value(model, iter, COL_OUT, &value); }else if(!strcmp(action, "Copy")){ gtk_tree_model_get_value(model, iter, COL_FULL, &value); } gchar *jobinfo=g_strdup(g_value_get_string(&value)); g_value_unset(&value); clipboard_append(jobinfo); g_free(jobinfo); } break; } }else{ if(scheduler_cmd(ihost,pid,cmd)){ warning("Failed to %s the job\n", action); } } }
static void delete_hbox_event(GtkWidget *btn, GdkEventButton *event,PROC_T *p){ (void)btn; if(event->button==1){ scheduler_cmd(p->hid,p->pid,CMD_REMOVE); } }