2
* Copyright (C) 2001 Kevin Vandersloot
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public License
6
* as published by the Free Software Foundation; either version 2
7
* of the License, or (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU Library General Public
15
* License along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22
#include <libgnome/gnome-help.h>
23
#include <libgnomevfs/gnome-vfs.h>
25
#include <glib/gi18n.h>
27
#include "callbacks.h"
28
#include "interface.h"
29
#include "proctable.h"
31
#include "procactions.h"
32
#include "procdialogs.h"
34
#include "openfiles.h"
35
#include "favorites.h"
36
#include "load-graph.h"
43
cb_kill_sigstop(GtkAction *action, gpointer data)
45
ProcData * const procdata = data;
48
kill_process (procdata, SIGSTOP);
55
cb_kill_sigcont(GtkAction *action, gpointer data)
57
ProcData * const procdata = data;
60
kill_process (procdata, SIGCONT);
67
kill_process_helper(ProcData *procdata, int sig)
69
if (procdata->config.show_kill_warning)
70
procdialog_create_kill_dialog (procdata, sig);
72
kill_process (procdata, sig);
77
cb_edit_preferences (GtkAction *action, gpointer data)
79
ProcData * const procdata = data;
81
procdialog_create_preferences_dialog (procdata);
86
cb_renice (GtkAction *action, gpointer data)
88
ProcData * const procdata = data;
90
procdialog_create_renice_dialog (procdata);
95
cb_end_process (GtkAction *action, gpointer data)
97
kill_process_helper(data, SIGTERM);
102
cb_kill_process (GtkAction *action, gpointer data)
104
kill_process_helper(data, SIGKILL);
109
cb_show_memory_maps (GtkAction *action, gpointer data)
111
ProcData * const procdata = data;
113
create_memmaps_dialog (procdata);
117
cb_show_open_files (GtkAction *action, gpointer data)
119
ProcData *procdata = data;
121
create_openfiles_dialog (procdata);
125
cb_show_lsof(GtkAction *action, gpointer data)
127
ProcData *procdata = data;
128
procman_lsof(procdata);
132
cb_show_hidden_processes (GtkAction *action, gpointer data)
134
ProcData * const procdata = data;
136
create_blacklist_dialog (procdata);
141
cb_hide_process (GtkAction *action, gpointer data)
143
ProcData * const procdata = data;
145
if (procdata->config.show_hide_message)
146
procdialog_create_hide_dialog (procdata);
148
add_selected_to_blacklist (procdata);
153
cb_about (GtkAction *action, gpointer data)
155
const gchar * const authors[] = {
158
"Jorgen Scheibengruber",
164
const gchar * const documenters[] = {
170
const gchar * const artists[] = {
171
"Baptiste Mille-Mathias",
175
gtk_show_about_dialog (
177
"name", _("System Monitor"),
178
"comments", _("View current processes and monitor "
181
"copyright", "Copyright \xc2\xa9 2001-2004 Kevin Vandersloot\n"
182
"Copyright \xc2\xa9 2005-2006 Benoît Dejean",
183
"logo-icon-name", "utilities-system-monitor",
186
"documenters", documenters,
187
"translator-credits", _("translator-credits"),
189
"wrap-license", TRUE,
196
cb_help_contents (GtkAction *action, gpointer data)
198
GError *error = NULL;
200
gnome_help_display ("gnome-system-monitor.xml", NULL, &error);
204
g_warning (error->message);
205
g_error_free (error);
211
cb_app_exit (GtkAction *action, gpointer data)
213
ProcData * const procdata = data;
215
cb_app_delete (NULL, NULL, procdata);
220
cb_app_delete (GtkWidget *window, GdkEventAny *event, gpointer data)
222
ProcData * const procdata = data;
224
procman_save_config (procdata);
225
if (procdata->timeout)
226
g_source_remove (procdata->timeout);
227
if (procdata->disk_timeout)
228
g_source_remove (procdata->disk_timeout);
238
cb_end_process_button_pressed (GtkButton *button, gpointer data)
240
kill_process_helper(data, SIGTERM);
244
static void change_gconf_color(GConfClient *client, const char *key,
248
char color[24]; /* color should be 1 + 3*4 + 1 = 15 chars -> 24 */
250
gtk_color_button_get_color(cp, &c);
251
g_snprintf(color, sizeof color, "#%04x%04x%04x", c.red, c.green, c.blue);
252
gconf_client_set_string (client, key, color, NULL);
257
cb_cpu_color_changed (GtkColorButton *cp, gpointer data)
260
gint i = GPOINTER_TO_INT (data);
261
GConfClient *client = gconf_client_get_default ();
264
strcpy(key, "/apps/procman/cpu_color");
267
g_snprintf(key, sizeof key, "/apps/procman/cpu_color%d", i);
270
change_gconf_color(client, key, cp);
274
cb_mem_color_changed (GtkColorButton *cp, gpointer data)
276
ProcData * const procdata = data;
277
change_gconf_color(procdata->client, "/apps/procman/mem_color", cp);
282
cb_swap_color_changed (GtkColorButton *cp, gpointer data)
284
ProcData * const procdata = data;
285
change_gconf_color(procdata->client, "/apps/procman/swap_color", cp);
289
cb_net_in_color_changed (GtkColorButton *cp, gpointer data)
291
ProcData * const procdata = data;
292
change_gconf_color(procdata->client, "/apps/procman/net_in_color", cp);
296
cb_net_out_color_changed (GtkColorButton *cp, gpointer data)
298
ProcData * const procdata = data;
299
change_gconf_color(procdata->client, "/apps/procman/net_out_color", cp);
303
cb_bg_color_changed (GtkColorButton *cp, gpointer data)
305
ProcData * const procdata = data;
306
change_gconf_color(procdata->client, "/apps/procman/bg_color", cp);
310
cb_frame_color_changed (GtkColorButton *cp, gpointer data)
312
ProcData * const procdata = data;
313
change_gconf_color(procdata->client, "/apps/procman/frame_color", cp);
318
get_last_selected (GtkTreeModel *model, GtkTreePath *path,
319
GtkTreeIter *iter, gpointer data)
321
ProcInfo **info = data;
323
gtk_tree_model_get (model, iter, COL_POINTER, info, -1);
328
cb_row_selected (GtkTreeSelection *selection, gpointer data)
330
ProcData * const procdata = data;
332
procdata->selection = selection;
334
/* get the most recent selected process and determine if there are
335
** no selected processes
337
gtk_tree_selection_selected_foreach (procdata->selection, get_last_selected,
338
&procdata->selected_process);
340
update_sensitivity(procdata);
345
cb_tree_button_pressed (GtkWidget *widget,
346
GdkEventButton *event,
349
ProcData * const procdata = data;
351
if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
352
do_popup_menu (procdata, event);
359
cb_tree_popup_menu (GtkWidget *widget, gpointer data)
361
ProcData * const procdata = data;
363
do_popup_menu (procdata, NULL);
370
cb_switch_page (GtkNotebook *nb, GtkNotebookPage *page,
371
gint num, gpointer data)
373
cb_change_current_page (nb, num, data);
377
cb_change_current_page (GtkNotebook *nb, gint num, gpointer data)
379
ProcData * const procdata = data;
381
procdata->config.current_tab = num;
384
if (num == PROCMAN_TAB_PROCESSES) {
386
cb_timeout (procdata);
388
if (!procdata->timeout)
389
procdata->timeout = g_timeout_add (
390
procdata->config.update_interval,
391
cb_timeout, procdata);
393
update_sensitivity(procdata);
396
if (procdata->timeout) {
397
g_source_remove (procdata->timeout);
398
procdata->timeout = 0;
401
update_sensitivity(procdata);
405
if (num == PROCMAN_TAB_RESOURCES) {
406
load_graph_start (procdata->cpu_graph);
407
load_graph_start (procdata->mem_graph);
408
load_graph_start (procdata->net_graph);
411
load_graph_stop (procdata->cpu_graph);
412
load_graph_stop (procdata->mem_graph);
413
load_graph_stop (procdata->net_graph);
417
if (num == PROCMAN_TAB_DISKS) {
419
cb_update_disks (procdata);
421
if(!procdata->disk_timeout) {
422
procdata->disk_timeout =
423
g_timeout_add (procdata->config.disks_update_interval,
429
if(procdata->disk_timeout) {
430
g_source_remove (procdata->disk_timeout);
431
procdata->disk_timeout = 0;
439
cb_volume_mounted_or_unmounted(GnomeVFSVolumeMonitor *vfsvolumemonitor,
443
cb_update_disks(procdata);
448
cb_timeout (gpointer data)
450
ProcData * const procdata = data;
453
proctable_update_all (procdata);
455
if(smooth_refresh_get(procdata->smooth_refresh, &new_interval))
457
procdata->timeout = g_timeout_add(new_interval,
468
cb_radio_processes(GtkAction *action, GtkRadioAction *current, gpointer data)
470
ProcData * const procdata = data;
472
procdata->config.whose_process = gtk_radio_action_get_current_value(current);
474
gconf_client_set_int (procdata->client, "/apps/procman/view_as",
475
procdata->config.whose_process, NULL);