- moved some functions to where they belong to
- renamed many things. - code-cleanups (Old svn revision: 1386)
This commit is contained in:
195
src/functions.c
195
src/functions.c
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
297
src/interface.c
297
src/interface.c
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 ();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user