[Xfce4-commits] <xfce4-taskmanager:master> Show terminated tasks with a red background

Mike Massonnet noreply at xfce.org
Thu May 27 01:24:02 CEST 2010


Updating branch refs/heads/master
         to fe31827852a4cfb325836fdb4a54be7cf78fc579 (commit)
       from e3d3aa2e18644436a459a15cb20f65eeef63e537 (commit)

commit fe31827852a4cfb325836fdb4a54be7cf78fc579
Author: Mike Massonnet <mmassonnet at xfce.org>
Date:   Thu May 27 01:21:26 2010 +0200

    Show terminated tasks with a red background

 src/task-manager.c |   49 ++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/src/task-manager.c b/src/task-manager.c
index 41c13c7..011ece2 100644
--- a/src/task-manager.c
+++ b/src/task-manager.c
@@ -66,7 +66,8 @@ static void	xtm_task_manager_finalize			(GObject *object);
 
 static void	setting_changed					(GObject *object, GParamSpec *pspec, XtmTaskManager *manager);
 static void	model_add_task					(GtkTreeModel *model, Task *task, glong timestamp);
-static void	model_remove_task				(GtkTreeModel *model, Task *task);
+static void	model_mark_tree_iter_as_removed			(GtkTreeModel *model, GtkTreeIter *iter);
+static void	model_remove_tree_iter				(GtkTreeModel *model, GtkTreeIter *iter);
 static void	model_update_tree_iter				(GtkTreeModel *model, GtkTreeIter *iter, Task *task);
 static void	model_update_task				(GtkTreeModel *model, Task *task);
 static void	model_find_tree_iter_for_pid			(GtkTreeModel *model, guint pid, GtkTreeIter *iter);
@@ -162,11 +163,21 @@ model_add_task (GtkTreeModel *model, Task *task, glong timestamp)
 }
 
 static void
-model_remove_task (GtkTreeModel *model, Task *task)
+model_mark_tree_iter_as_removed (GtkTreeModel *model, GtkTreeIter *iter)
 {
-	GtkTreeIter iter;
-	model_find_tree_iter_for_pid (model, task->pid, &iter);
-	gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+	gtk_list_store_set (GTK_LIST_STORE (model), iter,
+		XTM_PTV_COLUMN_CPU, 0.0,
+		XTM_PTV_COLUMN_CPU_STR, "-",
+		XTM_PTV_COLUMN_BACKGROUND, "#a40000",
+		XTM_PTV_COLUMN_FOREGROUND, "#ffffff",
+		XTM_PTV_COLUMN_TIMESTAMP, __current_timestamp (),
+		-1);
+}
+
+static void
+model_remove_tree_iter (GtkTreeModel *model, GtkTreeIter *iter)
+{
+	gtk_list_store_remove (GTK_LIST_STORE (model), iter);
 }
 
 static void
@@ -334,11 +345,15 @@ xtm_task_manager_get_task_list (XtmTaskManager *manager)
 void
 xtm_task_manager_update_model (XtmTaskManager *manager)
 {
+	static GArray *removed_tasks = NULL;
 	GArray *array;
 	guint i;
 
 	g_return_if_fail (XTM_IS_TASK_MANAGER (manager));
 
+	if (removed_tasks == NULL)
+		removed_tasks = g_array_new (FALSE, FALSE, sizeof (GtkTreeIter));
+
 	/* Retrieve initial task list and return */
 	if (manager->tasks->len == 0)
 	{
@@ -359,6 +374,23 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
 	get_task_list (array);
 
 	/* Remove terminated tasks */
+	for (i = 0; i < removed_tasks->len; i++)
+	{
+		GtkTreeIter *iter = &g_array_index (removed_tasks, GtkTreeIter, i);
+		glong old_timestamp;
+		gtk_tree_model_get (manager->model, iter, XTM_PTV_COLUMN_TIMESTAMP, &old_timestamp, -1);
+		if (__current_timestamp () - old_timestamp > TIMESTAMP_DELTA)
+		{
+#if DEBUG
+			gint pid;
+			gtk_tree_model_get (manager->model, iter, XTM_PTV_COLUMN_PID, &pid, -1);
+			g_debug ("Remove old task %d", pid);
+#endif
+			model_remove_tree_iter (manager->model, iter);
+			g_array_remove_index (removed_tasks, i);
+		}
+	}
+
 	for (i = 0; i < manager->tasks->len; i++)
 	{
 		guint j;
@@ -377,10 +409,13 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
 
 		if (found == FALSE)
 		{
+			GtkTreeIter iter;
 #if DEBUG
-			g_debug ("Remove old task %d %s", task->pid, task->name);
+			g_debug ("Task %d '%s' terminated, marking as removed", task->pid, task->name);
 #endif
-			model_remove_task (manager->model, task);
+			model_find_tree_iter_for_pid (manager->model, task->pid, &iter);
+			model_mark_tree_iter_as_removed (manager->model, &iter);
+			g_array_append_val (removed_tasks, iter);
 			g_array_remove_index (manager->tasks, i);
 		}
 	}



More information about the Xfce4-commits mailing list