- moved some functions to where they belong to

- renamed many things.
- code-cleanups



(Old svn revision: 1386)
This commit is contained in:
Johannes Zellner
2006-05-08 20:55:37 +00:00
parent d2a248ae96
commit da93cc9ce7
6 changed files with 270 additions and 266 deletions

View File

@@ -87,54 +87,60 @@ gboolean refresh_task_list(void)
#else #else
//sscanf(buffer_status, "%d %s %c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %lu %lu %ld %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %d %d", //sscanf(buffer_status, "%d %s %c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %lu %lu %ld %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %d %d",
sscanf(buffer_status, "%i %s %c %i %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %i %i %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", sscanf(buffer_status, "%i %s %c %i %i %i %i %i %s %s %s %s %s %s %s %i %i %i %i %i %i %i %i %i %s %s %s %i %s %s %s %s %s %s %s %s %s %s %i %s %s",
&task.pid, // processid &task.pid, // processid
&task.name, // processname &task.name, // processname
&task.state, // processstate &task.state, // processstate
&task.ppid, // parentid &task.ppid, // parentid
&dummy, // processs groupid &dummy, // processs groupid
&dummy, // session id &dummy, // session id
&dummy, // tty id &dummy, // tty id
&dummy, // tpgid: The process group ID of the process running on tty of the process &dummy, // tpgid: The process group ID of the process running on tty of the process
&dummy, // flags &dummy, // flags
&dummy, // minflt minor faults the process has maid &dummy, // minflt minor faults the process has maid
&dummy, // cminflt &dummy, // cminflt
&dummy, // majflt &dummy, // majflt
&dummy, // cmajflt &dummy, // cmajflt
&task.utime, // utime the number of jiffies that this process has scheduled in user mode &dummy, // utime the number of jiffies that this process has scheduled in user mode
&task.stime, // stime " kernel mode &dummy, // stime " kernel mode
&dummy, // cutime " waited for children in user &dummy, // cutime " waited for children in user
&dummy, // cstime " kernel mode &dummy, // cstime " kernel mode
&dummy, // priority (nice value + fifteen) &dummy, // priority (nice value + fifteen)
&dummy, // nice range from 19 to -19 &dummy, // nice range from 19 to -19
&dummy, // hardcoded 0 &dummy, // hardcoded 0
&dummy, // itrealvalue time in jiffies to next SIGALRM send to this process &dummy, // itrealvalue time in jiffies to next SIGALRM send to this process
&dummy, // starttime jiffies the process startet after system boot &dummy, // starttime jiffies the process startet after system boot
&task.size, // vsize in bytes &task.size, // vsize in bytes
&task.rss, // rss &task.rss, // rss
&dummy, // rlim limit in bytes for rss &dummy, // rlim limit in bytes for rss
&dummy, // startcode &dummy, // startcode
&dummy, // endcode &dummy, // endcode
&dummy, // startstack &dummy, // startstack
&dummy, // kstkesp value of esp (stack pointer) &dummy, // kstkesp value of esp (stack pointer)
&dummy, // kstkeip value of EIP (instruction pointer) &dummy, // kstkeip value of EIP (instruction pointer)
&dummy, // signal. bitmap of pending signals &dummy, // signal. bitmap of pending signals
&dummy, // blocked: bitmap of blocked signals &dummy, // blocked: bitmap of blocked signals
&dummy, // sigignore: bitmap of ignored signals &dummy, // sigignore: bitmap of ignored signals
&dummy, // sigcatch: bitmap of catched signals &dummy, // sigcatch: bitmap of catched signals
&dummy, // wchan &dummy, // wchan
&dummy, // nswap &dummy, // nswap
&dummy, // cnswap &dummy, // cnswap
&dummy, // exit_signal &dummy, // exit_signal
&task.cpuid, // CPU number last executed on &dummy, // CPU number last executed on
&dummy, &dummy,
&dummy &dummy
); );
#endif #endif
} }
//printf("%i - %i\n",task.utime,task.stime);
task.uid = status.st_uid; task.uid = status.st_uid;
passwdp = getpwuid(task.uid); passwdp = getpwuid(task.uid);
if(passwdp != NULL && passwdp->pw_name != NULL) if(passwdp != NULL && passwdp->pw_name != NULL)
@@ -153,15 +159,12 @@ gboolean refresh_task_list(void)
if((gint)data->pid == task.pid) if((gint)data->pid == task.pid)
{ {
if((gint)data->cpuid != task.cpuid || (gint)data->stime != task.stime || (gint)data->utime != task.utime || (gint)data->ppid != task.ppid || (gchar)data->state != task.state || (unsigned int)data->size != task.size || (unsigned int)data->rss != task.rss) if((gint)data->ppid != task.ppid || (gchar)data->state != task.state || (unsigned int)data->size != task.size || (unsigned int)data->rss != task.rss)
{ {
data->ppid = task.ppid; data->ppid = task.ppid;
data->state = task.state; data->state = task.state;
data->size = task.size; data->size = task.size;
data->rss = task.rss; data->rss = task.rss;
data->utime = task.utime;
data->stime = task.stime;
data->cpuid = task.cpuid;
refresh_list_item(i); refresh_list_item(i);
} }
@@ -199,175 +202,10 @@ gboolean refresh_task_list(void)
return TRUE; return TRUE;
} }
void fill_list_item(gint i, GtkTreeIter *iter)
{
if(iter != NULL)
{
struct task *task = &g_array_index(task_array, struct task, i);
gchar *pid = g_strdup_printf("%i", task->pid);
gchar *ppid = g_strdup_printf("%i", task->ppid);
gchar *state = g_strdup_printf("%c", task->state);
gchar *size = g_strdup_printf("%i kB", task->size);
gchar *rss = g_strdup_printf("%i kB", task->rss);
gchar *name = g_strdup_printf("%s", task->name);
gchar *uname = g_strdup_printf("%s", task->uname);
gchar *stime = g_strdup_printf("%i", task->stime);
gchar *utime = g_strdup_printf("%i", task->utime);
gchar *cpuid = g_strdup_printf("%i", task->cpuid);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, 0, name, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, 1, pid, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, 2, ppid, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, 3, state, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, 4, size, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, 5, rss, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, 6, uname, -1);
free(pid);
free(ppid);
free(state);
free(size);
free(rss);
free(name);
free(uname);
free(stime);
free(utime);
free(cpuid);
}
}
void add_new_list_item(gint i)
{
GtkTreeIter iter;
gtk_list_store_append(GTK_LIST_STORE(list_store), &iter);
fill_list_item(i, &iter);
}
void refresh_list_item(gint i)
{
GtkTreeIter iter;
gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
struct task task = g_array_index(task_array, struct task, i);
while(valid)
{
gchar *str_data = "";
gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, 1, &str_data, -1);
if(task.pid == atoi(str_data))
{
g_free(str_data);
fill_list_item(i, &iter);
break;
}
g_free(str_data);
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter);
}
}
void remove_list_item(gint pid)
{
GtkTreeIter iter;
gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
while(valid)
{
gchar *str_data = "";
gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, 1, &str_data, -1);
if(pid == atoi(str_data))
{
free(str_data);
gtk_list_store_remove(GTK_LIST_STORE(list_store), &iter);
break;
}
free(str_data);
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter);
}
}
gint compare_list_item(GtkTreeModel *model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer colnum)
{
gchar *s1 = "";
gchar *s2 = "";
gint ret = 0;
gtk_tree_model_get(model, iter1, colnum, &s1, -1);
gtk_tree_model_get(model, iter2, colnum, &s2, -1);
if((gint)colnum == 1 || (gint)colnum == 2 || (gint)colnum == 4 || (gint)colnum == 5)
{
gint i1 = 0;
gint i2 = 0;
if(s1 != NULL)
i1 = atoi(s1);
if(s2 != NULL)
i2 = atoi(s2);
if(i1 < i2)
ret = -1;
else
ret = 1;
}
else
{
if(s1 == NULL)
s1 = "";
if(s2 == NULL)
s2 = "";
ret = strcmp(s1, s2);
}
free(s1);
free(s2);
return ret;
}
/* function to send the signal to the current task */
void send_signal_to_task(gchar *task_id, gchar *signal)
{
if(task_id != "" && signal != NULL)
{
gchar command[64] = "kill -";
g_strlcat(command,signal, sizeof command);
g_strlcat(command," ", sizeof command);
g_strlcat(command,task_id, sizeof command);
if(system(command) != 0)
xfce_err("Couldn't %s the task with ID %s", signal, task_id);
}
}
/* change the task view (user, root, other) */
void change_task_view(void)
{
gtk_list_store_clear(GTK_LIST_STORE(list_store));
gint i = 0;
for(i = 0; i < tasks; i++)
{
struct task task = g_array_index(task_array, struct task, i);
if((task.uid == own_uid && show_user_tasks) || (task.uid == 0 && show_root_tasks) || (task.uid != own_uid && task.uid != 0 && show_other_tasks))
add_new_list_item(i);
}
refresh_task_list();
}
/*
* configurationfile support
*/
void load_config(void) void load_config(void)
{ {
XfceRc *rc_file = xfce_rc_simple_open(config_file, FALSE); XfceRc *rc_file = xfce_rc_simple_open(config_file, FALSE);
@@ -406,5 +244,4 @@ void save_config(void)
xfce_rc_flush(rc_file); xfce_rc_flush(rc_file);
xfce_rc_close(rc_file); xfce_rc_close(rc_file);
} }

View File

@@ -18,8 +18,8 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifndef __FUNCTIONS_H_ #ifndef FUNCTIONS_H
#define __FUNCTIONS_H_ #define FUNCTIONS_H
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <dirent.h> #include <dirent.h>
@@ -37,14 +37,9 @@
#define PROC_DIR_3 "/proc" #define PROC_DIR_3 "/proc"
gboolean refresh_task_list(void); gboolean refresh_task_list(void);
void fill_list_item(gint i, GtkTreeIter *iter);
void add_new_list_item(gint i);
gint compare_list_item(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
void remove_list_item(gint i);
void refresh_list_item(gint i);
void send_signal_to_task(gchar *task_id, gchar *signal); void send_signal_to_task(gchar *task_id, gchar *signal);
void change_task_view(void);
/* Configurationfile support */
void load_config(void); void load_config(void);
void save_config(void); void save_config(void);

View File

@@ -29,7 +29,7 @@
GtkWidget* create_main_window (void) GtkWidget* create_main_window (void)
{ {
GtkWidget *window1; GtkWidget *window;
GtkWidget *vbox1; GtkWidget *vbox1;
GtkWidget *bbox1; GtkWidget *bbox1;
GtkWidget *scrolledwindow1; GtkWidget *scrolledwindow1;
@@ -37,13 +37,13 @@ GtkWidget* create_main_window (void)
GtkWidget *button2; GtkWidget *button2;
GtkWidget *button3; GtkWidget *button3;
window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window1), _("xfce4-taskmanager")); gtk_window_set_title (GTK_WINDOW (window), _("xfce4-taskmanager"));
gtk_window_set_default_size (GTK_WINDOW (window1), win_width, win_height); gtk_window_set_default_size (GTK_WINDOW (window), win_width, win_height);
vbox1 = gtk_vbox_new (FALSE, 10); vbox1 = gtk_vbox_new (FALSE, 10);
gtk_widget_show (vbox1); gtk_widget_show (vbox1);
gtk_container_add (GTK_CONTAINER (window1), vbox1); gtk_container_add (GTK_CONTAINER (window), vbox1);
gtk_container_set_border_width (GTK_CONTAINER (vbox1), 10); gtk_container_set_border_width (GTK_CONTAINER (vbox1), 10);
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
@@ -52,15 +52,15 @@ GtkWidget* create_main_window (void)
gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow1, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow1, TRUE, TRUE, 0);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN);
treeview1 = gtk_tree_view_new (); treeview = gtk_tree_view_new ();
gtk_widget_show (treeview1); gtk_widget_show (treeview);
gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview1); gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview);
create_list_store(); create_list_store();
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview1)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
gtk_tree_view_set_model(GTK_TREE_VIEW(treeview1), GTK_TREE_MODEL(list_store)); gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(list_store));
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(list_store), 1, GTK_SORT_ASCENDING); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(list_store), 1, GTK_SORT_ASCENDING);
@@ -81,20 +81,13 @@ GtkWidget* create_main_window (void)
gtk_widget_show (button1); gtk_widget_show (button1);
gtk_box_pack_start (GTK_BOX (bbox1), button1, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (bbox1), button1, FALSE, FALSE, 0);
g_signal_connect ((gpointer) window1, "destroy", G_CALLBACK (on_quit), NULL); g_signal_connect ((gpointer) window, "destroy", G_CALLBACK (on_quit), NULL);
g_signal_connect_swapped ((gpointer) treeview1, "button-press-event", G_CALLBACK(on_treeview1_button_press_event), NULL); g_signal_connect_swapped ((gpointer) treeview, "button-press-event", G_CALLBACK(on_treeview1_button_press_event), NULL);
g_signal_connect ((gpointer) button1, "clicked", G_CALLBACK (on_quit), NULL); g_signal_connect ((gpointer) button1, "clicked", G_CALLBACK (on_quit), NULL);
g_signal_connect ((gpointer) button2, "button_release_event", G_CALLBACK (on_button1_button_press_event), NULL); g_signal_connect ((gpointer) button2, "button_release_event", G_CALLBACK (on_button1_button_press_event), NULL);
g_signal_connect ((gpointer) button3, "toggled", G_CALLBACK (on_button3_toggled_event), NULL); g_signal_connect ((gpointer) button3, "toggled", G_CALLBACK (on_button3_toggled_event), NULL);
return window1; return window;
}
void change_list_store_view(void)
{
gtk_tree_view_column_set_visible (column4, full_view);
gtk_tree_view_column_set_visible (column5, full_view);
gtk_tree_view_column_set_visible (column6, full_view);
} }
void create_list_store(void) void create_list_store(void)
@@ -105,47 +98,47 @@ void create_list_store(void)
cell_renderer = gtk_cell_renderer_text_new(); cell_renderer = gtk_cell_renderer_text_new();
column1 = gtk_tree_view_column_new_with_attributes(_("Command"), cell_renderer, "text", 0, NULL); column = gtk_tree_view_column_new_with_attributes(_("Command"), cell_renderer, "text", 0, NULL);
gtk_tree_view_column_set_resizable(column1, TRUE); gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column1, 0); gtk_tree_view_column_set_sort_column_id(column, 0);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 0, compare_list_item, (void *)0, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 0, compare_list_item, (void *)0, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview1), column1); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
column2 = gtk_tree_view_column_new_with_attributes(_("PID"), cell_renderer, "text", 1, NULL); column = gtk_tree_view_column_new_with_attributes(_("PID"), cell_renderer, "text", 1, NULL);
gtk_tree_view_column_set_resizable(column2, TRUE); gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column2, 1); gtk_tree_view_column_set_sort_column_id(column, 1);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 1, compare_list_item, (void *)1, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 1, compare_list_item, (void *)1, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview1), column2); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
column3 = gtk_tree_view_column_new_with_attributes(_("PPID"), cell_renderer, "text", 2, NULL); column = gtk_tree_view_column_new_with_attributes(_("PPID"), cell_renderer, "text", 2, NULL);
gtk_tree_view_column_set_resizable(column3, TRUE); gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column3, 2); gtk_tree_view_column_set_sort_column_id(column, 2);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 2, compare_list_item, (void *)2, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 2, compare_list_item, (void *)2, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview1), column3); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
column4 = gtk_tree_view_column_new_with_attributes(_("State"), cell_renderer, "text", 3, NULL); column = gtk_tree_view_column_new_with_attributes(_("State"), cell_renderer, "text", 3, NULL);
gtk_tree_view_column_set_resizable(column4, TRUE); gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column4, 3); gtk_tree_view_column_set_sort_column_id(column, 3);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 3, compare_list_item, (void *)3, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 3, compare_list_item, (void *)3, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview1), column4); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
column5 = gtk_tree_view_column_new_with_attributes(_("VM-Size"), cell_renderer, "text", 4, NULL); column = gtk_tree_view_column_new_with_attributes(_("VM-Size"), cell_renderer, "text", 4, NULL);
gtk_tree_view_column_set_resizable(column5, TRUE); gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column5, 4); gtk_tree_view_column_set_sort_column_id(column, 4);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 4, compare_list_item, (void *)4, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 4, compare_list_item, (void *)4, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview1), column5); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
column6 = gtk_tree_view_column_new_with_attributes(_("RSS"), cell_renderer, "text", 5, NULL); column = gtk_tree_view_column_new_with_attributes(_("RSS"), cell_renderer, "text", 5, NULL);
gtk_tree_view_column_set_resizable(column6, TRUE); gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column6, 5); gtk_tree_view_column_set_sort_column_id(column, 5);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 5, compare_list_item, (void *)5, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 5, compare_list_item, (void *)5, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview1), column6); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
column7 = gtk_tree_view_column_new_with_attributes(_("User"), cell_renderer, "text", 6, NULL); column = gtk_tree_view_column_new_with_attributes(_("User"), cell_renderer, "text", 6, NULL);
gtk_tree_view_column_set_resizable(column7, TRUE); gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column7, 6); gtk_tree_view_column_set_sort_column_id(column, 6);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 6, compare_list_item, (void *)6, NULL); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_store), 6, compare_list_item, (void *)6, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview1), column7); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
change_list_store_view(); change_list_store_view();
} }
@@ -153,33 +146,29 @@ void create_list_store(void)
GtkWidget* create_taskpopup (void) GtkWidget* create_taskpopup (void)
{ {
GtkWidget *taskpopup; GtkWidget *taskpopup;
GtkWidget *stop1; GtkWidget *menu_item;
GtkWidget *continue1;
GtkWidget *term1;
GtkWidget *kill1;
taskpopup = gtk_menu_new (); taskpopup = gtk_menu_new ();
stop1 = gtk_menu_item_new_with_mnemonic (_("Stop")); menu_item = gtk_menu_item_new_with_mnemonic (_("Stop"));
gtk_widget_show (stop1); gtk_widget_show (menu_item);
gtk_container_add (GTK_CONTAINER (taskpopup), stop1); gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "STOP");
continue1 = gtk_menu_item_new_with_mnemonic (_("Continue")); menu_item = gtk_menu_item_new_with_mnemonic (_("Continue"));
gtk_widget_show (continue1); gtk_widget_show (menu_item);
gtk_container_add (GTK_CONTAINER (taskpopup), continue1); gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "CONT");
term1 = gtk_menu_item_new_with_mnemonic (_("Term")); menu_item = gtk_menu_item_new_with_mnemonic (_("Term"));
gtk_widget_show (term1); gtk_widget_show (menu_item);
gtk_container_add (GTK_CONTAINER (taskpopup), term1); gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "TERM");
kill1 = gtk_menu_item_new_with_mnemonic (_("Kill")); menu_item = gtk_menu_item_new_with_mnemonic (_("Kill"));
gtk_widget_show (kill1); gtk_widget_show (menu_item);
gtk_container_add (GTK_CONTAINER (taskpopup), kill1); gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "KILL");
g_signal_connect ((gpointer) stop1, "activate", G_CALLBACK (handle_task_menu), "STOP");
g_signal_connect ((gpointer) continue1, "activate", G_CALLBACK (handle_task_menu), "CONT");
g_signal_connect ((gpointer) term1, "activate", G_CALLBACK (handle_task_menu), "TERM");
g_signal_connect ((gpointer) kill1, "activate", G_CALLBACK (handle_task_menu), "KILL");
return taskpopup; return taskpopup;
} }
@@ -249,5 +238,175 @@ void show_about_dialog(void)
xfce_about_info_free(about_info); xfce_about_info_free(about_info);
} }
void change_list_store_view(void)
{
gtk_tree_view_column_set_visible (gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_PPID), full_view);
gtk_tree_view_column_set_visible (gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_MEM), full_view);
gtk_tree_view_column_set_visible (gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_RSS), full_view);
}
void fill_list_item(gint i, GtkTreeIter *iter)
{
if(iter != NULL)
{
struct task *task = &g_array_index(task_array, struct task, i);
gchar *pid = g_strdup_printf("%i", task->pid);
gchar *ppid = g_strdup_printf("%i", task->ppid);
gchar *state = g_strdup_printf("%c", task->state);
gchar *size = g_strdup_printf("%i kB", task->size);
gchar *rss = g_strdup_printf("%i kB", task->rss);
gchar *name = g_strdup_printf("%s", task->name);
gchar *uname = g_strdup_printf("%s", task->uname);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, COLUMN_NAME, name, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, COLUMN_PID, pid, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, COLUMN_PPID, ppid, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, COLUMN_STATE, state, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, COLUMN_MEM, size, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, COLUMN_RSS, rss, -1);
gtk_list_store_set(GTK_LIST_STORE(list_store), iter, COLUMN_UNAME, uname, -1);
free(pid);
free(ppid);
free(state);
free(size);
free(rss);
free(name);
free(uname);
}
}
void send_signal_to_task(gchar *task_id, gchar *signal)
{
if(task_id != "" && signal != NULL)
{
gchar command[64] = "kill -";
g_strlcat(command,signal, sizeof command);
g_strlcat(command," ", sizeof command);
g_strlcat(command,task_id, sizeof command);
if(system(command) != 0)
xfce_err("Couldn't %s the task with ID %s", signal, task_id);
}
}
void add_new_list_item(gint i)
{
GtkTreeIter iter;
gtk_list_store_append(GTK_LIST_STORE(list_store), &iter);
fill_list_item(i, &iter);
}
void refresh_list_item(gint i)
{
GtkTreeIter iter;
gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
struct task task = g_array_index(task_array, struct task, i);
while(valid)
{
gchar *str_data = "";
gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, 1, &str_data, -1);
if(task.pid == atoi(str_data))
{
g_free(str_data);
fill_list_item(i, &iter);
break;
}
g_free(str_data);
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter);
}
}
void remove_list_item(gint pid)
{
GtkTreeIter iter;
gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
while(valid)
{
gchar *str_data = "";
gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, 1, &str_data, -1);
if(pid == atoi(str_data))
{
free(str_data);
gtk_list_store_remove(GTK_LIST_STORE(list_store), &iter);
break;
}
free(str_data);
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter);
}
}
gint compare_list_item(GtkTreeModel *model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer colnum)
{
gchar *s1 = "";
gchar *s2 = "";
gint ret = 0;
gtk_tree_model_get(model, iter1, colnum, &s1, -1);
gtk_tree_model_get(model, iter2, colnum, &s2, -1);
if(GPOINTER_TO_INT(colnum) == 1 || GPOINTER_TO_INT(colnum) == 2 || GPOINTER_TO_INT(colnum) == 4 || GPOINTER_TO_INT(colnum) == 5)
{
gint i1 = 0;
gint i2 = 0;
if(s1 != NULL)
i1 = atoi(s1);
if(s2 != NULL)
i2 = atoi(s2);
if(i1 < i2)
ret = -1;
else
ret = 1;
}
else
{
if(s1 == NULL)
s1 = "";
if(s2 == NULL)
s2 = "";
ret = strcmp(s1, s2);
}
free(s1);
free(s2);
return ret;
}
/* change the task view (user, root, other) */
void change_task_view(void)
{
gtk_list_store_clear(GTK_LIST_STORE(list_store));
gint i = 0;
for(i = 0; i < tasks; i++)
{
struct task task = g_array_index(task_array, struct task, i);
if((task.uid == own_uid && show_user_tasks) || (task.uid == 0 && show_root_tasks) || (task.uid != own_uid && task.uid != 0 && show_other_tasks))
add_new_list_item(i);
}
refresh_task_list();
}

View File

@@ -18,11 +18,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifndef __INTERFACE_H_ #ifndef INTERFACE_H
#define __INTERFACE_H_ #define INTERFACE_H
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
# include <config.h> #include <config.h>
#endif #endif
#include <sys/types.h> #include <sys/types.h>
@@ -33,6 +33,7 @@
#include <gdk/gdkkeysyms.h> #include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <libxfcegui4/libxfcegui4.h> #include <libxfcegui4/libxfcegui4.h>
#include "functions.h" #include "functions.h"
@@ -40,11 +41,19 @@
#include "types.h" #include "types.h"
GtkTreeSelection *selection; GtkTreeSelection *selection;
GtkWidget *treeview1; GtkWidget *treeview;
GtkWidget *mainmenu; GtkWidget *mainmenu;
GtkWidget *taskpopup; GtkWidget *taskpopup;
GtkTreeViewColumn *column1, *column2, *column3, *column4, *column5, *column_sleep, *column6, *column7; #define COLUMN_NAME 0
#define COLUMN_PID 1
#define COLUMN_PPID 2
#define COLUMN_STATE 3
#define COLUMN_MEM 4
#define COLUMN_RSS 5
#define COLUMN_UNAME 6
GtkTreeViewColumn *column;
void change_list_store_view(void); void change_list_store_view(void);
void create_list_store(void); void create_list_store(void);
@@ -55,4 +64,12 @@ GtkWidget* create_mainmenu (void);
void show_about_dialog(void); void show_about_dialog(void);
void fill_list_item(gint i, GtkTreeIter *iter);
void add_new_list_item(gint i);
gint compare_list_item(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
void remove_list_item(gint i);
void refresh_list_item(gint i);
void change_task_view(void);
#endif #endif

View File

@@ -29,7 +29,6 @@
#include <libxfce4util/libxfce4util.h> #include <libxfce4util/libxfce4util.h>
#include "types.h" #include "types.h"
#include "interface.h" #include "interface.h"
#include "functions.h" #include "functions.h"
@@ -58,7 +57,7 @@ int main (int argc, char *argv[])
if(!refresh_task_list()) if(!refresh_task_list())
return 0; return 0;
g_timeout_add(REFRESH_INTERVAL, refresh_task_list, NULL); g_timeout_add(REFRESH_INTERVAL, (gpointer) refresh_task_list, NULL);
gtk_main (); gtk_main ();

View File

@@ -33,9 +33,6 @@ struct task
gchar state; gchar state;
gint size; gint size;
gint rss; gint rss;
gint utime;
gint stime;
gint cpuid;
gboolean checked; gboolean checked;
}; };