Updating branch refs/heads/master
         to ad3391bb951971253a14d4f3746e59d121bc6aaf (commit)
       from 58b85e2a739ffc11575b53173392c1909c9d323d (commit)

commit ad3391bb951971253a14d4f3746e59d121bc6aaf
Author: Mike Massonnet <[email protected]>
Date:   Fri May 28 01:19:17 2010 +0200

    Show tasks with changed status with a yellow background

 src/task-manager.c |   46 ++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/src/task-manager.c b/src/task-manager.c
index 011ece2..3475bd7 100644
--- a/src/task-manager.c
+++ b/src/task-manager.c
@@ -207,8 +207,9 @@ model_update_tree_iter (GtkTreeModel *model, GtkTreeIter 
*iter, Task *task)
 {
        gchar vsz[64], rss[64], cpu[16];
        gchar value[14];
-       gchar *background = NULL, *foreground = NULL;
        glong old_timestamp;
+       gchar *old_state;
+       gchar *background, *foreground;
 
        memory_human_size (task->vsz, vsz);
        memory_human_size (task->rss, rss);
@@ -223,11 +224,29 @@ model_update_tree_iter (GtkTreeModel *model, GtkTreeIter 
*iter, Task *task)
                g_free (cmdline);
        }
 
-       gtk_tree_model_get (model, iter, XTM_PTV_COLUMN_TIMESTAMP, 
&old_timestamp, -1);
+       /* Retrieve values needed for tweaking background/foreground color */
+       gtk_tree_model_get (model, iter, XTM_PTV_COLUMN_TIMESTAMP, 
&old_timestamp, XTM_PTV_COLUMN_STATE, &old_state,
+                       XTM_PTV_COLUMN_BACKGROUND, &background, 
XTM_PTV_COLUMN_FOREGROUND, &foreground, -1);
+
+       if (g_strcmp0 (task->state, old_state) != 0 && background == NULL)
+       {
+               /* Set yellow color for changing state */
+               background = g_strdup ("#edd400");
+               foreground = g_strdup ("#000000");
+               old_timestamp = __current_timestamp () - TIMESTAMP_DELTA + 3;
+       }
+
        if (__current_timestamp () - old_timestamp <= TIMESTAMP_DELTA)
        {
-               background = "#73d216";
-               foreground = "#000000";
+               /* Set green color for started task */
+               background = (background == NULL) ? g_strdup ("#73d216") : 
background;
+               foreground = (foreground == NULL) ? g_strdup ("#000000") : 
foreground;
+       }
+       else
+       {
+               /* Reset color */
+               background = NULL;
+               foreground = NULL;
        }
 
        gtk_list_store_set (GTK_LIST_STORE (model), iter,
@@ -242,7 +261,11 @@ model_update_tree_iter (GtkTreeModel *model, GtkTreeIter 
*iter, Task *task)
                XTM_PTV_COLUMN_PRIORITY, task->prio,
                XTM_PTV_COLUMN_BACKGROUND, background,
                XTM_PTV_COLUMN_FOREGROUND, foreground,
+               XTM_PTV_COLUMN_TIMESTAMP, old_timestamp,
                -1);
+
+       g_free (background);
+       g_free (foreground);
 }
 
 static void
@@ -430,6 +453,8 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
                for (j = 0; j < manager->tasks->len; j++)
                {
                        Task *task = &g_array_index (manager->tasks, Task, j);
+                       gboolean updated = FALSE;
+
                        if (task->pid != tasktmp->pid)
                                continue;
 
@@ -445,6 +470,7 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
                                || task->vsz != tasktmp->vsz
                                || task->prio != tasktmp->prio)
                        {
+                               updated = TRUE;
                                task->ppid = tasktmp->ppid;
                                g_strlcpy (task->state, tasktmp->state, sizeof 
(task->state));
                                task->cpu_user = tasktmp->cpu_user;
@@ -455,20 +481,24 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
                                model_update_task (manager->model, tasktmp);
                        }
 
-                       /* Update colors when timestamp is overlapped but the 
iter wasn't updated because of previous condition */
+                       /* Update color if needed */
+                       if (updated == FALSE)
                        {
                                GtkTreeIter iter;
+                               gchar *color;
                                glong old_timestamp;
-                               gchar *color = NULL;
+
                                model_find_tree_iter_for_pid (manager->model, 
task->pid, &iter);
-                               gtk_tree_model_get (manager->model, &iter, 
XTM_PTV_COLUMN_TIMESTAMP, &old_timestamp, XTM_PTV_COLUMN_BACKGROUND, &color, 
-1);
-                               if (__current_timestamp () - old_timestamp > 
TIMESTAMP_DELTA && color != NULL)
+                               gtk_tree_model_get (manager->model, &iter, 
XTM_PTV_COLUMN_BACKGROUND, &color, XTM_PTV_COLUMN_TIMESTAMP, &old_timestamp, 
-1);
+
+                               if (color != NULL && __current_timestamp () - 
old_timestamp > TIMESTAMP_DELTA)
                                {
 #if DEBUG
                                        g_debug ("Remove color from running PID 
%d", task->pid);
 #endif
                                        model_update_task (manager->model, 
tasktmp);
                                }
+
                                g_free (color);
                        }
 
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to