[Xfce4-commits] <xfce4-taskmanager:master> Show started tasks with a green background
Mike Massonnet
noreply at xfce.org
Thu May 27 01:24:01 CEST 2010
Updating branch refs/heads/master
to e3d3aa2e18644436a459a15cb20f65eeef63e537 (commit)
from 1974a2fbcd66878ed554d911d277e923a9aec11b (commit)
commit e3d3aa2e18644436a459a15cb20f65eeef63e537
Author: Mike Massonnet <mmassonnet at xfce.org>
Date: Wed May 26 22:33:13 2010 +0200
Show started tasks with a green background
src/process-tree-view.c | 21 ++++++------
src/process-tree-view.h | 3 ++
src/task-manager.c | 79 ++++++++++++++++++++++++++++++++++++-----------
3 files changed, 75 insertions(+), 28 deletions(-)
diff --git a/src/process-tree-view.c b/src/process-tree-view.c
index 22a5fa5..8e1dc19 100644
--- a/src/process-tree-view.c
+++ b/src/process-tree-view.c
@@ -86,7 +86,8 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
/* Create tree view model */
treeview->model = gtk_list_store_new (XTM_PTV_N_COLUMNS, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_UINT64,
- G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_STRING, G_TYPE_INT);
+ G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_STRING, G_TYPE_INT,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_LONG);
treeview->model_filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (treeview->model), NULL);
gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (treeview->model_filter), (GtkTreeModelFilterVisibleFunc)visible_func, treeview, NULL);
@@ -104,7 +105,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
/* Create tree view columns */
#define COLUMN_PROPERTIES "expand", TRUE, "clickable", TRUE, "reorderable", FALSE, "resizable", TRUE, "visible", TRUE
- column = gtk_tree_view_column_new_with_attributes (_("Task"), cell_cmdline, "text", XTM_PTV_COLUMN_COMMAND, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("Task"), cell_cmdline, "text", XTM_PTV_COLUMN_COMMAND, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_COMMAND));
g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_COMMAND));
@@ -114,7 +115,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
#undef COLUMN_PROPERTIES
#define COLUMN_PROPERTIES "expand", FALSE, "clickable", TRUE, "reorderable", FALSE, "resizable", TRUE, "visible", visible
g_object_get (treeview->settings, "column-pid", &visible, NULL);
- column = gtk_tree_view_column_new_with_attributes (_("PID"), cell_right_aligned, "text", XTM_PTV_COLUMN_PID, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("PID"), cell_right_aligned, "text", XTM_PTV_COLUMN_PID, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_PID));
g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_PID));
@@ -122,7 +123,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
g_object_get (treeview->settings, "column-ppid", &visible, NULL);
- column = gtk_tree_view_column_new_with_attributes (_("PPID"), cell_right_aligned, "text", XTM_PTV_COLUMN_PPID, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("PPID"), cell_right_aligned, "text", XTM_PTV_COLUMN_PPID, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_PPID));
g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_PPID));
@@ -130,7 +131,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
g_object_get (treeview->settings, "column-state", &visible, NULL);
- column = gtk_tree_view_column_new_with_attributes (_("State"), cell_text, "text", XTM_PTV_COLUMN_STATE, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("State"), cell_text, "text", XTM_PTV_COLUMN_STATE, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
gtk_tree_view_column_set_min_width (GTK_TREE_VIEW_COLUMN (column), 32);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_STATE));
@@ -139,7 +140,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
g_object_get (treeview->settings, "column-vsz", &visible, NULL);
- column = gtk_tree_view_column_new_with_attributes (_("VSZ"), cell_right_aligned, "text", XTM_PTV_COLUMN_VSZ_STR, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("VSZ"), cell_right_aligned, "text", XTM_PTV_COLUMN_VSZ_STR, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_VSZ));
g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_VSZ));
@@ -147,7 +148,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
g_object_get (treeview->settings, "column-rss", &visible, NULL);
- column = gtk_tree_view_column_new_with_attributes (_("RSS"), cell_right_aligned, "text", XTM_PTV_COLUMN_RSS_STR, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("RSS"), cell_right_aligned, "text", XTM_PTV_COLUMN_RSS_STR, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_RSS));
g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_RSS));
@@ -155,7 +156,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
g_object_get (treeview->settings, "column-uid", &visible, NULL);
- column = gtk_tree_view_column_new_with_attributes (_("UID"), cell_text, "text", XTM_PTV_COLUMN_UID_STR, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("UID"), cell_text, "text", XTM_PTV_COLUMN_UID_STR, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_UID));
g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_UID));
@@ -163,7 +164,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
g_object_get (treeview->settings, "column-cpu", &visible, NULL);
- column = gtk_tree_view_column_new_with_attributes (_("CPU"), cell_right_aligned, "text", XTM_PTV_COLUMN_CPU_STR, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("CPU"), cell_right_aligned, "text", XTM_PTV_COLUMN_CPU_STR, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_CPU));
g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_CPU));
@@ -172,7 +173,7 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
g_object_get (treeview->settings, "column-priority", &visible, NULL);
/* TRANSLATORS: “Prio.” is short for Priority, it appears in the tree view header. */
- column = gtk_tree_view_column_new_with_attributes (_("Prio."), cell_right_aligned, "text", XTM_PTV_COLUMN_PRIORITY, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("Prio."), cell_right_aligned, "text", XTM_PTV_COLUMN_PRIORITY, "cell-background", XTM_PTV_COLUMN_BACKGROUND, "foreground", XTM_PTV_COLUMN_FOREGROUND, NULL);
g_object_set (column, COLUMN_PROPERTIES, NULL);
g_object_set_data (G_OBJECT (column), "sort-column-id", GINT_TO_POINTER (XTM_PTV_COLUMN_PRIORITY));
g_object_set_data (G_OBJECT (column), "column-id", GINT_TO_POINTER (COLUMN_PRIORITY));
diff --git a/src/process-tree-view.h b/src/process-tree-view.h
index c357766..2ab6da5 100644
--- a/src/process-tree-view.h
+++ b/src/process-tree-view.h
@@ -31,6 +31,9 @@ enum
XTM_PTV_COLUMN_CPU,
XTM_PTV_COLUMN_CPU_STR,
XTM_PTV_COLUMN_PRIORITY,
+ XTM_PTV_COLUMN_BACKGROUND,
+ XTM_PTV_COLUMN_FOREGROUND,
+ XTM_PTV_COLUMN_TIMESTAMP,
XTM_PTV_N_COLUMNS,
};
diff --git a/src/task-manager.c b/src/task-manager.c
index bb55af9..41c13c7 100644
--- a/src/task-manager.c
+++ b/src/task-manager.c
@@ -25,6 +25,8 @@
#include "process-tree-view.h" /* for the columns of the model */
#include "settings.h"
+#define TIMESTAMP_DELTA 4
+
static XtmSettings *settings = NULL;
@@ -63,10 +65,12 @@ G_DEFINE_TYPE (XtmTaskManager, xtm_task_manager, G_TYPE_OBJECT)
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);
+static void model_add_task (GtkTreeModel *model, Task *task, glong timestamp);
+static void model_remove_task (GtkTreeModel *model, Task *task);
static void model_update_tree_iter (GtkTreeModel *model, GtkTreeIter *iter, Task *task);
static void model_update_task (GtkTreeModel *model, Task *task);
-static void model_remove_task (GtkTreeModel *model, Task *task);
+static void model_find_tree_iter_for_pid (GtkTreeModel *model, guint pid, GtkTreeIter *iter);
+static glong __current_timestamp ();
@@ -138,7 +142,7 @@ _xtm_task_manager_set_model (XtmTaskManager *manager, GtkTreeModel *model)
}
static void
-model_add_task (GtkTreeModel *model, Task *task)
+model_add_task (GtkTreeModel *model, Task *task, glong timestamp)
{
GtkTreeIter iter;
gchar *cmdline = pretty_cmdline (task->cmdline, task->name);
@@ -149,12 +153,23 @@ model_add_task (GtkTreeModel *model, Task *task)
XTM_PTV_COLUMN_STATE, task->state,
XTM_PTV_COLUMN_UID, task->uid,
XTM_PTV_COLUMN_UID_STR, task->uid_name,
+ XTM_PTV_COLUMN_BACKGROUND, NULL,
+ XTM_PTV_COLUMN_FOREGROUND, NULL,
+ XTM_PTV_COLUMN_TIMESTAMP, timestamp,
-1);
model_update_tree_iter (model, &iter, task);
g_free (cmdline);
}
static void
+model_remove_task (GtkTreeModel *model, Task *task)
+{
+ GtkTreeIter iter;
+ model_find_tree_iter_for_pid (model, task->pid, &iter);
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+}
+
+static void
memory_human_size (guint64 mem, gchar *mem_str)
{
guint64 mem_tmp;
@@ -181,6 +196,8 @@ 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;
memory_human_size (task->vsz, vsz);
memory_human_size (task->rss, rss);
@@ -195,6 +212,13 @@ 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);
+ if (__current_timestamp () - old_timestamp <= TIMESTAMP_DELTA)
+ {
+ background = "#73d216";
+ foreground = "#000000";
+ }
+
gtk_list_store_set (GTK_LIST_STORE (model), iter,
XTM_PTV_COLUMN_PPID, task->ppid,
XTM_PTV_COLUMN_STATE, task->state,
@@ -205,10 +229,20 @@ model_update_tree_iter (GtkTreeModel *model, GtkTreeIter *iter, Task *task)
XTM_PTV_COLUMN_CPU, task->cpu_user + task->cpu_system,
XTM_PTV_COLUMN_CPU_STR, cpu,
XTM_PTV_COLUMN_PRIORITY, task->prio,
+ XTM_PTV_COLUMN_BACKGROUND, background,
+ XTM_PTV_COLUMN_FOREGROUND, foreground,
-1);
}
static void
+model_update_task (GtkTreeModel *model, Task *task)
+{
+ GtkTreeIter iter;
+ model_find_tree_iter_for_pid (model, task->pid, &iter);
+ model_update_tree_iter (model, &iter, task);
+}
+
+static void
model_find_tree_iter_for_pid (GtkTreeModel *model, guint pid, GtkTreeIter *iter)
{
gboolean valid;
@@ -224,20 +258,12 @@ model_find_tree_iter_for_pid (GtkTreeModel *model, guint pid, GtkTreeIter *iter)
}
}
-static void
-model_update_task (GtkTreeModel *model, Task *task)
-{
- GtkTreeIter iter;
- model_find_tree_iter_for_pid (model, task->pid, &iter);
- model_update_tree_iter (model, &iter, task);
-}
-
-static void
-model_remove_task (GtkTreeModel *model, Task *task)
+static glong
+__current_timestamp ()
{
- GtkTreeIter iter;
- model_find_tree_iter_for_pid (model, task->pid, &iter);
- gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ GTimeVal time;
+ g_get_current_time (&time);
+ return time.tv_sec;
}
@@ -320,7 +346,7 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
for (i = 0; i < manager->tasks->len; i++)
{
Task *task = &g_array_index (manager->tasks, Task, i);
- model_add_task (manager->model, task);
+ model_add_task (manager->model, task, 0);
#if DEBUG
g_print ("%5d %5s %15s %.50s\n", task->pid, task->uid_name, task->name, task->cmdline);
#endif
@@ -394,6 +420,23 @@ 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 */
+ {
+ GtkTreeIter iter;
+ 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)
+ {
+#if DEBUG
+ g_debug ("Remove color from running PID %d", task->pid);
+#endif
+ model_update_task (manager->model, tasktmp);
+ }
+ g_free (color);
+ }
+
break;
}
@@ -402,7 +445,7 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
#if DEBUG
g_debug ("Add new task %d %s", tasktmp->pid, tasktmp->name);
#endif
- model_add_task (manager->model, tasktmp);
+ model_add_task (manager->model, tasktmp, __current_timestamp ());
g_array_append_val (manager->tasks, *tasktmp);
}
}
More information about the Xfce4-commits
mailing list