diff -ur xfce4-taskmanager.orig/src/Makefile.am xfce4-taskmanager/src/Makefile.am --- xfce4-taskmanager.orig/src/Makefile.am Thu Sep 3 22:18:53 2009 +++ xfce4-taskmanager/src/Makefile.am Fri Sep 4 19:26:43 2009 @@ -25,7 +25,7 @@ xfce4_taskmanager_SOURCES += taskmanager-bsd.c endif if OS_SOLARIS -xfce4_taskmanager_SOURCES += taskmanager-linux.c +xfce4_taskmanager_SOURCES += taskmanager-solaris.c endif if OS_LINUX xfce4_taskmanager_SOURCES += taskmanager-linux.c @@ -41,4 +41,8 @@ $(LIBXFCE4UTIL_LIBS) \ $(GTK_LIBS) +if OS_SOLARIS +xfce4_taskmanager_LDADD += -lkstat +endif + # vi:set ts=8 sw=8 noet ai nocindent syntax=automake: diff -ur xfce4-taskmanager.orig/src/functions.c xfce4-taskmanager/src/functions.c --- xfce4-taskmanager.orig/src/functions.c Thu Sep 3 22:18:53 2009 +++ xfce4-taskmanager/src/functions.c Fri Sep 4 18:39:59 2009 @@ -59,6 +59,13 @@ tmp->old_time_percentage = tmp->time_percentage; tmp->time_percentage = (gdouble)(tmp->time - tmp->old_time) * (1.0/num_cpus); #endif +#ifdef __sun + tmp->old_time = tmp->time; + tmp->time = new_tmp->time; + + tmp->old_time_percentage = tmp->time_percentage; + tmp->time_percentage = (gdouble)(tmp->time - tmp->old_time) / (100.0*num_cpus); +#endif if( tmp->ppid != new_tmp->ppid || strcmp(tmp->state,new_tmp->state) || @@ -67,6 +74,9 @@ #ifdef __linux tmp->time_percentage != tmp->old_time_percentage || #endif +#ifdef __sun + tmp->time_percentage != tmp->old_time_percentage || +#endif tmp->prio != new_tmp->prio ) { diff -ur xfce4-taskmanager.orig/src/interface.c xfce4-taskmanager/src/interface.c --- xfce4-taskmanager.orig/src/interface.c Thu Sep 3 22:18:53 2009 +++ xfce4-taskmanager/src/interface.c Fri Sep 4 19:17:38 2009 @@ -238,11 +238,42 @@ GtkWidget *prio_submenu = gtk_menu_new (); GtkWidget *menu_item; +#ifdef __sun + menu_item = gtk_menu_item_new_with_label ("0"); + gtk_misc_set_alignment (GTK_MISC (GTK_BIN (menu_item)->child), 1.0, 0.5); + gtk_widget_show (menu_item); + gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item); + g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "0"); + + menu_item = gtk_menu_item_new_with_label ("-5"); + gtk_misc_set_alignment (GTK_MISC (GTK_BIN (menu_item)->child), 1.0, 0.5); + gtk_widget_show (menu_item); + gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item); + g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "-5"); + menu_item = gtk_menu_item_new_with_label ("-10"); gtk_misc_set_alignment (GTK_MISC (GTK_BIN (menu_item)->child), 1.0, 0.5); gtk_widget_show (menu_item); gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item); g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "-10"); + + menu_item = gtk_menu_item_new_with_label ("-15"); + gtk_misc_set_alignment (GTK_MISC (GTK_BIN (menu_item)->child), 1.0, 0.5); + gtk_widget_show (menu_item); + gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item); + g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "-15"); + + menu_item = gtk_menu_item_new_with_label ("-20"); + gtk_misc_set_alignment (GTK_MISC (GTK_BIN (menu_item)->child), 1.0, 0.5); + gtk_widget_show (menu_item); + gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item); + g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "-20"); +#else + menu_item = gtk_menu_item_new_with_label ("-10"); + gtk_misc_set_alignment (GTK_MISC (GTK_BIN (menu_item)->child), 1.0, 0.5); + gtk_widget_show (menu_item); + gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item); + g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "-10"); menu_item = gtk_menu_item_new_with_label ("-5"); gtk_misc_set_alignment (GTK_MISC (GTK_BIN (menu_item)->child), 1.0, 0.5); @@ -267,6 +298,7 @@ gtk_widget_show (menu_item); gtk_container_add (GTK_CONTAINER (prio_submenu), menu_item); g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_prio_menu), "10"); +#endif return prio_submenu; } @@ -451,7 +483,7 @@ (gdouble)(task->rss)/1024/1024); name = g_strdup_printf("%s", task->name); uname = g_strdup_printf("%s", task->uname); - time = g_strdup_printf("%0d%%", (guint)task->time_percentage); + time = g_strdup_printf("%.2f%%", task->time_percentage); prio = g_strdup_printf("%i", task->prio); /* my change */ gtk_tree_store_set(GTK_TREE_STORE(list_store), iter, COLUMN_NAME, name, -1); diff -ur xfce4-taskmanager.orig/src/taskmanager-bsd.c xfce4-taskmanager/src/taskmanager-bsd.c --- xfce4-taskmanager.orig/src/taskmanager-bsd.c Thu Sep 3 22:18:53 2009 +++ xfce4-taskmanager/src/taskmanager-bsd.c Fri Sep 4 18:48:22 2009 @@ -149,7 +149,7 @@ ret = kill(task_id, signal); if(ret != 0) - xfce_err(_("Couldn't send signal to the task with ID %d"), signal, task_id); + xfce_err(_("Couldn't send signal %d to the task with ID %d"), signal, task_id); } } diff -ur xfce4-taskmanager.orig/src/taskmanager-linux.c xfce4-taskmanager/src/taskmanager-linux.c --- xfce4-taskmanager.orig/src/taskmanager-linux.c Thu Sep 3 22:18:53 2009 +++ xfce4-taskmanager/src/taskmanager-linux.c Thu Sep 3 23:16:32 2009 @@ -371,7 +371,7 @@ ret = kill(task_id, signal); if(ret != 0) - xfce_err(_("Couldn't send signal to the task with ID %d"), signal, task_id); + xfce_err(_("Couldn't send signal %d to the task with ID %d"), signal, task_id); } } diff -ur xfce4-taskmanager.orig/src/taskmanager-solaris.c xfce4-taskmanager/src/taskmanager-solaris.c --- xfce4-taskmanager.orig/src/taskmanager-solaris.c Thu Sep 3 22:18:53 2009 +++ xfce4-taskmanager/src/taskmanager-solaris.c Fri Sep 4 19:14:29 2009 @@ -18,6 +18,19 @@ #include "taskmanager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +kstat_ctl_t *kc; + static void init_stats() { kc = kstat_open(); @@ -45,8 +58,9 @@ sprintf(pstate, "%c", thisproc.pr_lwp.pr_sname); g_strlcpy(task.state, pstate, 16); task.ppid = (gint) thisproc.pr_ppid; - task.size = (gint) thisproc.pr_size; - task.rss = (gint) thisproc.pr_rssize; + task.prio = (gint) thisproc.pr_lwp.pr_pri; + task.vsize = (gint) thisproc.pr_size*1024; + task.rss = (gint) thisproc.pr_rssize*1024; task.uid = (gint) thisproc.pr_uid; passwdp = getpwuid(thisproc.pr_uid); if(passwdp != NULL && passwdp->pw_name != NULL) @@ -55,8 +69,8 @@ * To get the appropriate precision we need to multiply up by 10000 * so that when we convert to a percentage we can represent 0.01%. */ - task.time = 10000*thisproc.pr_time.tv_sec + thisproc.pr_time.tv_nsec/100000; task.old_time = task.time; + task.time = 10000*thisproc.pr_time.tv_sec + thisproc.pr_time.tv_nsec/100000; task.time_percentage = 0; } close(fd); @@ -188,7 +202,7 @@ ret = kill(task_id, signal); if(ret != 0) - xfce_err(_("Couldn't send signal to the task with ID %d"), signal, task_id); + xfce_err(_("Couldn't send signal %d to the task with ID %d"), signal, task_id); } } @@ -198,8 +212,11 @@ if(task_id > 0) { gchar command[128] = ""; - g_sprintf(command, "renice %d %d > /dev/null", prio, task_id); - + g_sprintf(command, "/usr/bin/priocntl -s -p %d -i pid %d > /dev/null", prio, task_id); + /* + * priocntl always returns 0, so this test is useless until + * priocntl gets fixed + */ if(system(command) != 0) xfce_err(_("Couldn't set priority %d to the task with ID %d"), prio, task_id); }