static void on_toggle_process_tree (GtkToggleButton *togglebutton, AttachProcess * ap) { ap->process_tree = gtk_toggle_button_get_active (togglebutton); attach_process_clear (ap, CLEAR_REVIEW); attach_process_review (ap); }
static gboolean on_delete_event (GtkWidget *dialog, GdkEvent *event, AttachProcess *ap) { g_return_val_if_fail (ap, FALSE); attach_process_clear (ap, CLEAR_FINAL); return FALSE; }
static void attach_process_update (AttachProcess * ap) { gchar *tmp, *tmp1, *cmd; gchar *shell; gchar *argv[4]; GError *err = NULL; GtkTreeStore *store; gboolean result; g_return_if_fail (ap); store = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (ap->treeview))); g_return_if_fail (store); if (anjuta_util_prog_is_installed ("ps", TRUE) == FALSE) return; tmp = anjuta_util_get_a_tmp_file (); #if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) cmd = g_strconcat ("ps axw -o pid,user,lstart,args > ", tmp, NULL); #else cmd = g_strconcat ("ps axw -H -o pid,user,start_time,args > ", tmp, NULL); #endif shell = anjuta_util_user_shell (); argv[0] = shell; argv[1] = "-c"; argv[2] = cmd; argv[3] = NULL; if (!g_spawn_sync (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL, NULL, &err)) { anjuta_util_dialog_error (NULL, _("Unable to execute: \"%s\". " "The returned error was: \"%s\"."), cmd, err->message); g_error_free (err); g_free (tmp); g_free (cmd); return; } g_free (cmd); result = g_file_get_contents (tmp, &tmp1, NULL, NULL); remove (tmp); g_free (tmp); if (! result) { anjuta_util_dialog_error_system (NULL, errno, _("Unable to open the file: %s\n"), tmp); return; } attach_process_clear (ap, CLEAR_UPDATE); ap->ps_output = anjuta_util_convert_to_utf8 (tmp1); g_free (tmp1); if (ap->ps_output) { attach_process_review (ap); } }
static void attach_process_update (AttachProcess * ap) { gchar *tmp, *tmp1, *cmd; gint ch_pid; gchar *shell; GtkTreeStore *store; gboolean result; g_return_if_fail (ap); store = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (ap->treeview))); g_return_if_fail (store); if (anjuta_util_prog_is_installed ("ps", TRUE) == FALSE) return; tmp = anjuta_util_get_a_tmp_file (); #if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) cmd = g_strconcat ("ps axw -o pid,user,lstart,args > ", tmp, NULL); #else cmd = g_strconcat ("ps axw -H -o pid,user,start_time,args > ", tmp, NULL); #endif shell = anjuta_util_user_shell (); ch_pid = fork (); if (ch_pid == 0) { execlp (shell, shell, "-c", cmd, NULL); } if (ch_pid < 0) { anjuta_util_dialog_error_system (NULL, errno, _("Unable to execute: %s."), cmd); g_free (tmp); g_free (cmd); return; } waitpid (ch_pid, NULL, 0); g_free (cmd); result = g_file_get_contents (tmp, &tmp1, NULL, NULL); remove (tmp); g_free (tmp); if (! result) { anjuta_util_dialog_error_system (NULL, errno, _("Unable to open the file: %s\n"), tmp); return; } attach_process_clear (ap, CLEAR_UPDATE); ap->ps_output = anjuta_util_convert_to_utf8 (tmp1); g_free (tmp1); if (ap->ps_output) { attach_process_review (ap); } }
static AttachProcess * attach_process_new () { AttachProcess *ap; ap = g_new0 (AttachProcess, 1); attach_process_clear (ap, CLEAR_INITIAL); return ap; }
static pid_t attach_process_show (AttachProcess * ap, GtkWindow *parent) { GtkTreeView *view; GtkTreeStore *store; GtkCellRenderer *renderer; GtkTreeSelection *selection; GtkCheckButton *checkb_hide_paths; GtkCheckButton *checkb_hide_params; GtkCheckButton *checkb_process_tree; gint i, res; pid_t selected_pid = -1; g_return_val_if_fail (ap != NULL, -1); if (!ap->dialog) { GtkBuilder *bxml; bxml = anjuta_util_builder_new (GLADE_FILE, NULL); if (!bxml) return 0; anjuta_util_builder_get_objects (bxml, "attach_process_dialog", &ap->dialog, "attach_process_tv", &ap->treeview, "checkb_hide_paths", &checkb_hide_paths, "checkb_hide_params", &checkb_hide_params, "checkb_process_tree", &checkb_process_tree, NULL); g_object_unref (bxml); view = GTK_TREE_VIEW (ap->treeview); store = gtk_tree_store_new (COLUMNS_NB, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (view, GTK_TREE_MODEL (store)); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (view), GTK_SELECTION_SINGLE); g_object_unref (G_OBJECT (store)); renderer = gtk_cell_renderer_text_new (); for (i = PID_COLUMN; i < COLUMNS_NB; i++) { GtkTreeViewColumn *column; column = gtk_tree_view_column_new_with_attributes (column_names[i], renderer, "text", i, NULL); gtk_tree_view_column_set_sort_column_id(column, i); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_append_column (view, column); if (i == COMMAND_COLUMN) gtk_tree_view_set_expander_column(view, column); } gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store), PID_COLUMN, sort_pid, NULL, NULL); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), START_COLUMN, GTK_SORT_DESCENDING); ap->hide_paths = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (checkb_hide_paths)); ap->hide_params = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (checkb_hide_params)); ap->process_tree = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (checkb_process_tree)); attach_process_update (ap); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (ap->treeview)); g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (on_selection_changed), ap); g_signal_connect (G_OBJECT (ap->dialog), "delete_event", G_CALLBACK (on_delete_event), ap); g_signal_connect (checkb_hide_paths, "toggled", G_CALLBACK (on_toggle_hide_paths), ap); g_signal_connect (checkb_hide_params, "toggled", G_CALLBACK (on_toggle_hide_params), ap); g_signal_connect (checkb_process_tree, "toggled", G_CALLBACK (on_toggle_process_tree), ap); } gtk_window_set_transient_for (GTK_WINDOW (ap->dialog), GTK_WINDOW (parent)); /* gtk_widget_show (ap->dialog); */ res = gtk_dialog_run (GTK_DIALOG (ap->dialog)); while (res == GTK_RESPONSE_APPLY) { attach_process_update (ap); res = gtk_dialog_run (GTK_DIALOG (ap->dialog)); } if (res == GTK_RESPONSE_OK) { selected_pid = ap->pid; } attach_process_clear (ap, CLEAR_FINAL); return selected_pid; }