[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