<xfce4-taskmanager:master> Implement option âFull command lineâ
Mike Massonnet
noreply at xfce.org
Sun May 23 20:58:04 CEST 2010
Updating branch refs/heads/master
to 9a26498a8b6f865e2417402d15c099b38a4d2fc2 (commit)
from f5e7344a8b152ab4f8762fbc8cf2979b44d5c757 (commit)
commit 9a26498a8b6f865e2417402d15c099b38a4d2fc2
Author: Mike Massonnet <mmassonnet at xfce.org>
Date: Sun May 23 13:08:45 2010 +0200
Implement option “Full command line”
src/main.c | 1 +
src/task-manager.c | 54 +++++++++++++++++++++++++++++++++++++++++----------
2 files changed, 44 insertions(+), 11 deletions(-)
diff --git a/src/main.c b/src/main.c
index 3efe9ad..79e0cb5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -84,6 +84,7 @@ int main (int argc, char *argv[])
init_timeout ();
g_signal_connect (settings, "notify::refresh-rate", G_CALLBACK (refresh_rate_changed), NULL);
g_signal_connect_after (settings, "notify::more-precision", G_CALLBACK (force_timeout_update), NULL);
+ g_signal_connect_after (settings, "notify::full-command-line", G_CALLBACK (force_timeout_update), NULL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
diff --git a/src/task-manager.c b/src/task-manager.c
index 5c1fad3..32fef58 100644
--- a/src/task-manager.c
+++ b/src/task-manager.c
@@ -23,12 +23,14 @@
#include "task-manager.h"
#include "process-tree-view.h" /* for the columns of the model */
-#include "settings.h" /* for the more-precision setting */
+#include "settings.h"
static XtmSettings *settings = NULL;
-static gboolean more_precision = FALSE;
+static gboolean model_update_forced = FALSE;
+static gboolean more_precision;
+static gboolean full_cmdline;
@@ -42,7 +44,6 @@ struct _XtmTaskManager
GObject parent;
/*<private>*/
GtkTreeModel * model;
- gboolean model_update_forced;
GArray * tasks;
guint owner_uid;
gchar * owner_uid_name;
@@ -61,7 +62,7 @@ G_DEFINE_TYPE (XtmTaskManager, xtm_task_manager, G_TYPE_OBJECT)
static void xtm_task_manager_finalize (GObject *object);
-static void setting_more_precision_changed (GObject *object, GParamSpec *pspec, XtmTaskManager *manager);
+static void setting_changed (GObject *object, GParamSpec *pspec, XtmTaskManager *manager);
static void model_add_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);
@@ -84,10 +85,12 @@ xtm_task_manager_init (XtmTaskManager *manager)
get_owner_uid (&(manager->owner_uid), &(manager->owner_uid_name));
manager->hostname = get_hostname ();
- /* Listen to changes on more-preicision and force an update on the whole model */
+ /* Listen to settings changes and force an update on the whole model */
settings = xtm_settings_get_default ();
g_object_get (settings, "more-precision", &more_precision, NULL);
- g_signal_connect (settings, "notify::more-precision", G_CALLBACK (setting_more_precision_changed), manager);
+ g_object_get (settings, "full-command-line", &full_cmdline, NULL);
+ g_signal_connect (settings, "notify::more-precision", G_CALLBACK (setting_changed), manager);
+ g_signal_connect (settings, "notify::full-command-line", G_CALLBACK (setting_changed), manager);
}
static void
@@ -100,10 +103,30 @@ xtm_task_manager_finalize (GObject *object)
}
static void
-setting_more_precision_changed (GObject *object, GParamSpec *pspec, XtmTaskManager *manager)
+setting_changed (GObject *object, GParamSpec *pspec, XtmTaskManager *manager)
{
g_object_get (object, "more-precision", &more_precision, NULL);
- manager->model_update_forced = TRUE;
+ g_object_get (object, "full-command-line", &full_cmdline, NULL);
+ model_update_forced = TRUE;
+}
+
+static gchar *
+pretty_cmdline (gchar *cmdline, gchar *comm)
+{
+ gchar *text = g_strchomp (g_strdup (cmdline));
+ if (!full_cmdline && sizeof (text) > 3)
+ {
+ /* Shorten full path to commands and wine applications */
+ if (text[0] == '/' || (g_ascii_isupper (text[0]) && text[1] == ':' && text[2] == '\\'))
+ {
+ gchar *p = g_strstr_len (text, -1, comm);
+ if (p != NULL)
+ {
+ g_snprintf (text, g_utf8_strlen (text, -1), p);
+ }
+ }
+ }
+ return text;
}
static void
@@ -118,15 +141,17 @@ static void
model_add_task (GtkTreeModel *model, Task *task)
{
GtkTreeIter iter;
+ gchar *cmdline = pretty_cmdline (task->cmdline, task->name);
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- XTM_PTV_COLUMN_COMMAND, task->cmdline,
+ XTM_PTV_COLUMN_COMMAND, cmdline,
XTM_PTV_COLUMN_PID, task->pid,
XTM_PTV_COLUMN_STATE, task->state,
XTM_PTV_COLUMN_UID, task->uid,
XTM_PTV_COLUMN_UID_STR, task->uid_name,
-1);
model_update_tree_iter (model, &iter, task);
+ g_free (cmdline);
}
static void
@@ -163,6 +188,13 @@ model_update_tree_iter (GtkTreeModel *model, GtkTreeIter *iter, Task *task)
g_snprintf (value, 14, (more_precision) ? "%.2f" : "%.0f", task->cpu_user + task->cpu_system);
g_snprintf (cpu, 16, _("%s%%"), value);
+ if (model_update_forced)
+ {
+ gchar *cmdline = pretty_cmdline (task->cmdline, task->name);
+ gtk_list_store_set (GTK_LIST_STORE (model), iter, XTM_PTV_COLUMN_COMMAND, cmdline, -1);
+ g_free (cmdline);
+ }
+
gtk_list_store_set (GTK_LIST_STORE (model), iter,
XTM_PTV_COLUMN_PPID, task->ppid,
XTM_PTV_COLUMN_STATE, task->state,
@@ -330,7 +362,7 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
found = TRUE;
/* Update the model (with the rest) only if needed, this keeps the CPU cool */
- if (manager->model_update_forced
+ if (model_update_forced
|| task->ppid != tasktmp->ppid
|| g_strcmp0 (task->state, tasktmp->state)
|| task->cpu_user != tasktmp->cpu_user
@@ -363,7 +395,7 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
}
g_array_free (array, TRUE);
- manager->model_update_forced = FALSE;
+ model_update_forced = FALSE;
return;
}
More information about the Xfce4-commits
mailing list