[Xfce4-commits] <xfce4-taskmanager:master> Display window icons/names

Mike Massonnet noreply at xfce.org
Fri Jun 4 15:56:01 CEST 2010


Updating branch refs/heads/master
         to 2f995e82260dc4478b7eb53f955fd747e74b373d (commit)
       from d4b63cac192b8fada9e027fffc196a35c6c0b858 (commit)

commit 2f995e82260dc4478b7eb53f955fd747e74b373d
Author: Mike Massonnet <mmassonnet at xfce.org>
Date:   Fri Jun 4 14:41:28 2010 +0200

    Display window icons/names
    
    Add optional link on libwnck (default=yes) and build a new object from
    app-manager.c to keep an up to date list of applications with their name
    and icon. Use it inside the task manager object to display inside the
    tree view.

 configure.ac.in         |    7 ++
 src/Makefile.am         |   14 +++-
 src/app-manager.c       |  196 +++++++++++++++++++++++++++++++++++++++++++++++
 src/app-manager.h       |   45 +++++++++++
 src/process-tree-view.c |   18 ++++-
 src/process-tree-view.h |    3 +
 src/task-manager.c      |  108 ++++++++++++++++++++++++--
 7 files changed, 380 insertions(+), 11 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index 98ca9d6..666d6bc 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -65,6 +65,12 @@ dnl *** Check for required packages ***
 dnl ***********************************
 XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.12.0])
 
+dnl ******************************************
+dnl *** Check for optional package libwnck ***
+dnl ******************************************
+XDT_CHECK_OPTIONAL_PACKAGE([WNCK], [libwnck-1.0], [2.0], [wnck], [building with libwnck for window icons/names], [yes])
+AM_CONDITIONAL([HAVE_WNCK], [test x"$WNCK_FOUND" = x"yes"])
+
 dnl ***********************************
 dnl ********** Check for skel *********
 dnl ***********************************
@@ -137,6 +143,7 @@ dnl ***************************
 echo
 echo "Build Configuration:"
 echo
+echo "* Wnck:          ${WNCK_FOUND:-no} ${WNCK_VERSION:+(libwnck $WNCK_VERSION)}"
 echo "* Target OS:     $target_os ($ac_os_implementation)"
 echo "* Debug Support: $enable_debug"
 echo
diff --git a/src/Makefile.am b/src/Makefile.am
index 386adee..9fc671a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -9,10 +9,14 @@ bin_PROGRAMS =								\
 	xfce4-taskmanager
 
 xfce4_taskmanager_CFLAGS =						\
-	$(GTK_CFLAGS)
-	
+	$(GTK_CFLAGS)							\
+	$(WNCK_CFLAGS)							\
+	$(NULL)
+
 xfce4_taskmanager_LDADD = 						\
-	$(GTK_LIBS)
+	$(GTK_LIBS)							\
+	$(WNCK_LIBS)							\
+	$(NULL)
 
 xfce4_taskmanager_SOURCES =						\
 	main.c								\
@@ -24,6 +28,10 @@ xfce4_taskmanager_SOURCES =						\
 	settings.c			settings.h			\
 	$(NULL)
 
+if HAVE_WNCK
+xfce4_taskmanager_SOURCES += app-manager.c app-manager.h
+endif
+
 if OS_FREEBSD
 xfce4_taskmanager_SOURCES += task-manager-freebsd.c
 endif
diff --git a/src/app-manager.c b/src/app-manager.c
new file mode 100644
index 0000000..07bbf82
--- /dev/null
+++ b/src/app-manager.c
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2010 Mike Massonnet, <mmassonnet at xfce.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#define WNCK_I_KNOW_THIS_IS_UNSTABLE
+#include <libwnck/libwnck.h>
+
+#include "app-manager.h"
+
+
+
+typedef struct _XtmAppManagerClass XtmAppManagerClass;
+struct _XtmAppManagerClass
+{
+	GObjectClass		parent_class;
+};
+struct _XtmAppManager
+{
+	GObject			parent;
+	/*<private>*/
+	GArray *		apps;
+};
+G_DEFINE_TYPE (XtmAppManager, xtm_app_manager, G_TYPE_OBJECT)
+
+static void	xtm_app_manager_finalize			(GObject *object);
+
+static void	apps_add_application				(GArray *apps, WnckApplication *application);
+static void	apps_remove_application				(GArray *apps, WnckApplication *application);
+static App *	apps_lookup_pid					(GArray *apps, gint pid);
+static void	application_opened				(WnckScreen *screen, WnckApplication *application, XtmAppManager *manager);
+static void	application_closed				(WnckScreen *screen, WnckApplication *application, XtmAppManager *manager);
+
+
+
+static void
+xtm_app_manager_class_init (XtmAppManagerClass *klass)
+{
+	GObjectClass *class = G_OBJECT_CLASS (klass);
+	xtm_app_manager_parent_class = g_type_class_peek_parent (klass);
+	class->finalize = xtm_app_manager_finalize;
+}
+
+static void
+xtm_app_manager_init (XtmAppManager *manager)
+{
+	WnckScreen *screen = wnck_screen_get_default ();
+	GList *windows, *l;
+	gint i;
+	App app;
+
+	/* Retrieve initial applications */
+	while (gtk_events_pending ())
+		gtk_main_iteration ();
+
+	manager->apps = g_array_new (FALSE, FALSE, sizeof (App));
+	windows = wnck_screen_get_windows (screen);
+	for (l = windows; l != NULL; l = l->next)
+	{
+		WnckWindow *window = WNCK_WINDOW (l->data);
+		WnckApplication *application = wnck_window_get_application (window);
+		gint pid = wnck_application_get_pid (application);
+
+		if (wnck_window_get_window_type (window) != WNCK_WINDOW_NORMAL)
+			continue;
+
+		if (apps_lookup_pid (manager->apps, pid) != NULL)
+			continue;
+
+		apps_add_application (manager->apps, application);
+	}
+
+#if DEBUG
+	g_debug ("Initial applications: %d", manager->apps->len);
+#endif
+
+	/* Connect signals */
+	g_signal_connect (screen, "application-opened", G_CALLBACK (application_opened), manager);
+	g_signal_connect (screen, "application-closed", G_CALLBACK (application_closed), manager);
+}
+
+static void
+xtm_app_manager_finalize (GObject *object)
+{
+	g_array_free (XTM_APP_MANAGER (object)->apps, TRUE);
+}
+
+static void
+apps_add_application (GArray *apps, WnckApplication *application)
+{
+	App app;
+	gint pid;
+
+	pid = wnck_application_get_pid (application);
+	if (pid == 0)
+	{
+		WnckWindow *window = WNCK_WINDOW (wnck_application_get_windows (application)->data);
+		pid = wnck_window_get_pid (window);
+	}
+
+	if (apps_lookup_pid (apps, pid))
+		return;
+
+	app.application = application;
+	app.pid = pid;
+	g_snprintf (app.name, 1024, "%s", wnck_application_get_name (application));
+	app.icon = wnck_application_get_mini_icon (application);
+	g_object_ref (app.icon);
+
+	g_array_append_val (apps, app);
+}
+
+static void
+apps_remove_application (GArray *apps, WnckApplication *application)
+{
+	App *app;
+	gint pid;
+	gint i;
+
+	for (i = 0; i < apps->len; i++)
+	{
+		app = &g_array_index (apps, App, i);
+		if (app->application == application)
+			break;
+	}
+
+	g_object_unref (app->icon);
+	g_array_remove_index (apps, i);
+}
+
+static App *
+apps_lookup_pid (GArray *apps, gint pid)
+{
+	App *app;
+	gint i;
+
+	for (app = NULL, i = 0; i < apps->len; i++)
+	{
+		app = &g_array_index (apps, App, i);
+		if (app->pid == pid)
+			break;
+		app = NULL;
+	}
+
+	return app;
+}
+
+static void
+application_opened (WnckScreen *screen, WnckApplication *application, XtmAppManager *manager)
+{
+#if DEBUG
+	g_debug ("Application opened %p %d", application, wnck_application_get_pid (application));
+#endif
+	apps_add_application (manager->apps, application);
+}
+
+static void
+application_closed (WnckScreen *screen, WnckApplication *application, XtmAppManager *manager)
+{
+#if DEBUG
+	g_debug ("Application closed %p", application);
+#endif
+	apps_remove_application (manager->apps, application);
+}
+
+
+
+XtmAppManager *
+xtm_app_manager_new ()
+{
+	return g_object_new (XTM_TYPE_APP_MANAGER, NULL);
+}
+
+const GArray *
+xtm_app_manager_get_app_list (XtmAppManager *manager)
+{
+	g_return_val_if_fail (XTM_IS_APP_MANAGER (manager), NULL);
+	return manager->apps;
+}
+
+App *
+xtm_app_manager_get_app_from_pid (XtmAppManager *manager, gint pid)
+{
+	return apps_lookup_pid (manager->apps, pid);
+}
+
diff --git a/src/app-manager.h b/src/app-manager.h
new file mode 100644
index 0000000..ebded9a
--- /dev/null
+++ b/src/app-manager.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2010 Mike Massonnet, <mmassonnet at xfce.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef APP_MANAGER_H
+#define APP_MANAGER_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib-object.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#define WNCK_I_KNOW_THIS_IS_UNSTABLE
+#include <libwnck/libwnck.h>
+
+typedef struct _App App;
+struct _App
+{
+	WnckApplication *	application;
+	guint			pid;
+	gchar			name[1024];
+	GdkPixbuf *		icon;
+};
+
+#define XTM_TYPE_APP_MANAGER			(xtm_app_manager_get_type ())
+#define XTM_APP_MANAGER(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), XTM_TYPE_APP_MANAGER, XtmAppManager))
+#define XTM_APP_MANAGER_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST ((klass), XTM_TYPE_APP_MANAGER, XtmAppManagerClass))
+#define XTM_IS_APP_MANAGER(obj)			(G_TYPE_CHECK_INSTANCE_TYPE ((obj), XTM_TYPE_APP_MANAGER))
+#define XTM_IS_APP_MANAGER_CLASS(klass)		(G_TYPE_CHECK_CLASS_TYPE ((klass), XTM_TYPE_APP_MANAGER))
+#define XTM_APP_MANAGER_GET_CLASS(obj)		(G_TYPE_INSTANCE_GET_CLASS ((obj), XTM_TYPE_APP_MANAGER, XtmAppManagerClass))
+
+typedef struct _XtmAppManager XtmAppManager;
+
+GType			xtm_app_manager_get_type			(void);
+XtmAppManager *		xtm_app_manager_new				();
+const GArray *		xtm_app_manager_get_app_list			(XtmAppManager *manager);
+App *			xtm_app_manager_get_app_from_pid		(XtmAppManager *manager, gint pid);
+
+#endif /* !APP_MANAGER_H */
diff --git a/src/process-tree-view.c b/src/process-tree-view.c
index 480fc68..d7ee2f7 100644
--- a/src/process-tree-view.c
+++ b/src/process-tree-view.c
@@ -79,7 +79,11 @@ xtm_process_tree_view_class_init (XtmProcessTreeViewClass *klass)
 static void
 xtm_process_tree_view_init (XtmProcessTreeView *treeview)
 {
+#ifdef HAVE_WNCK
+	GtkCellRenderer *cell_text, *cell_right_aligned, *cell_icon, *cell_cmdline;
+#else
 	GtkCellRenderer *cell_text, *cell_right_aligned, *cell_cmdline;
+#endif
 	GtkTreeViewColumn *column;
 	gboolean visible;
 
@@ -94,7 +98,11 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
 	}
 
 	/* Create tree view model */
+#ifdef HAVE_WNCK
+	treeview->model = gtk_list_store_new (XTM_PTV_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_UINT64,
+#else
 	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,
+#endif
 		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);
 
@@ -117,7 +125,15 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
 
 	/* Create tree view columns */
 #define COLUMN_PROPERTIES "expand", TRUE, "clickable", TRUE, "reorderable", TRUE, "resizable", TRUE, "visible", TRUE
-	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);
+	column = gtk_tree_view_column_new ();
+	gtk_tree_view_column_set_title (GTK_TREE_VIEW_COLUMN (column), _("Task"));
+#ifdef HAVE_WNCK
+	cell_icon = gtk_cell_renderer_pixbuf_new ();
+	gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), cell_icon, FALSE);
+	gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), cell_icon, "pixbuf", XTM_PTV_COLUMN_ICON, "cell-background", XTM_PTV_COLUMN_BACKGROUND, NULL);
+#endif
+	gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), cell_cmdline, TRUE);
+	gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), 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));
diff --git a/src/process-tree-view.h b/src/process-tree-view.h
index 2ab6da5..3082806 100644
--- a/src/process-tree-view.h
+++ b/src/process-tree-view.h
@@ -18,6 +18,9 @@
 
 enum
 {
+#ifdef HAVE_WNCK
+	XTM_PTV_COLUMN_ICON,
+#endif
 	XTM_PTV_COLUMN_COMMAND,
 	XTM_PTV_COLUMN_PID,
 	XTM_PTV_COLUMN_PPID,
diff --git a/src/task-manager.c b/src/task-manager.c
index cba8a73..5b13ebf 100644
--- a/src/task-manager.c
+++ b/src/task-manager.c
@@ -22,6 +22,9 @@
 #include <gtk/gtk.h>
 
 #include "task-manager.h"
+#ifdef HAVE_WNCK
+#include "app-manager.h"
+#endif
 #include "process-tree-view.h" /* for the columns of the model */
 #include "settings.h"
 
@@ -45,6 +48,9 @@ struct _XtmTaskManager
 {
 	GObject			parent;
 	/*<private>*/
+#ifdef HAVE_WNCK
+	XtmAppManager *		app_manager;
+#endif
 	GtkTreeModel *		model;
 	GArray *		tasks;
 	guint			owner_uid;
@@ -65,11 +71,17 @@ 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);
+#ifdef HAVE_WNCK
+static void	model_add_task					(GtkTreeModel *model, Task *task, App *app, glong timestamp);
+static void	model_update_tree_iter				(GtkTreeModel *model, GtkTreeIter *iter, Task *task, App *app);
+static void	model_update_task				(GtkTreeModel *model, Task *task, App *app);
+#else
 static void	model_add_task					(GtkTreeModel *model, Task *task, glong timestamp);
-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);
+#endif
+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_find_tree_iter_for_pid			(GtkTreeModel *model, guint pid, GtkTreeIter *iter);
 static glong	__current_timestamp				();
 
@@ -86,6 +98,9 @@ xtm_task_manager_class_init (XtmTaskManagerClass *klass)
 static void
 xtm_task_manager_init (XtmTaskManager *manager)
 {
+#ifdef HAVE_WNCK
+	manager->app_manager = xtm_app_manager_new ();
+#endif
 	manager->tasks = g_array_new (FALSE, FALSE, sizeof (Task));
 	get_owner_uid (&(manager->owner_uid), &(manager->owner_uid_name));
 	manager->hostname = get_hostname ();
@@ -105,6 +120,10 @@ xtm_task_manager_finalize (GObject *object)
 	g_array_free (manager->tasks, TRUE);
 	g_free (manager->owner_uid_name);
 	g_free (manager->hostname);
+#ifdef HAVE_WNCK
+	g_object_unref (manager->app_manager);
+#endif
+	g_object_unref (settings);
 }
 
 static void
@@ -143,10 +162,24 @@ _xtm_task_manager_set_model (XtmTaskManager *manager, GtkTreeModel *model)
 }
 
 static void
+#ifdef HAVE_WNCK
+model_add_task (GtkTreeModel *model, Task *task, App *app, glong timestamp)
+#else
 model_add_task (GtkTreeModel *model, Task *task, glong timestamp)
+#endif
 {
 	GtkTreeIter iter;
-	gchar *cmdline = pretty_cmdline (task->cmdline, task->name);
+	gchar *cmdline;
+
+#ifdef HAVE_WNCK
+	if (app != NULL && full_cmdline == FALSE)
+		cmdline = g_strdup (app->name);
+	else
+		cmdline = pretty_cmdline (task->cmdline, task->name);
+#else
+	cmdline = pretty_cmdline (task->cmdline, task->name);
+#endif
+
 	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
 	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
 		XTM_PTV_COLUMN_COMMAND, cmdline,
@@ -158,7 +191,12 @@ model_add_task (GtkTreeModel *model, Task *task, glong timestamp)
 		XTM_PTV_COLUMN_FOREGROUND, NULL,
 		XTM_PTV_COLUMN_TIMESTAMP, timestamp,
 		-1);
+#ifdef HAVE_WNCK
+	model_update_tree_iter (model, &iter, task, app);
+#else
 	model_update_tree_iter (model, &iter, task);
+#endif
+
 	g_free (cmdline);
 }
 
@@ -203,13 +241,20 @@ memory_human_size (guint64 mem, gchar *mem_str)
 }
 
 static void
+#ifdef HAVE_WNCK
+model_update_tree_iter (GtkTreeModel *model, GtkTreeIter *iter, Task *task, App *app)
+#else
 model_update_tree_iter (GtkTreeModel *model, GtkTreeIter *iter, Task *task)
+#endif
 {
 	gchar vsz[64], rss[64], cpu[16];
 	gchar value[14];
 	glong old_timestamp;
 	gchar *old_state;
 	gchar *background, *foreground;
+#ifdef HAVE_WNCK
+	GdkPixbuf *icon;
+#endif
 
 	memory_human_size (task->vsz, vsz);
 	memory_human_size (task->rss, rss);
@@ -217,17 +262,34 @@ 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);
 
+	/* Retrieve values for tweaking background/foreground color and updating content as needed */
+	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,
+#ifdef HAVE_WNCK
+			XTM_PTV_COLUMN_ICON, &icon,
+#endif
+			-1);
+
+#ifdef HAVE_WNCK
+	if (app != NULL && icon == NULL)
+		gtk_list_store_set (GTK_LIST_STORE (model), iter, XTM_PTV_COLUMN_ICON, app->icon, -1);
+
+	if (app != NULL && full_cmdline == FALSE)
+	{
+		gchar *cmdline = g_strdup (app->name);
+		gtk_list_store_set (GTK_LIST_STORE (model), iter, XTM_PTV_COLUMN_COMMAND, cmdline, -1);
+		g_free (cmdline);
+	}
+	else if (model_update_forced)
+#else
 	if (model_update_forced)
+#endif
 	{
 		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);
 	}
 
-	/* Retrieve values 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 */
@@ -270,11 +332,19 @@ model_update_tree_iter (GtkTreeModel *model, GtkTreeIter *iter, Task *task)
 }
 
 static void
+#ifdef HAVE_WNCK
+model_update_task (GtkTreeModel *model, Task *task, App *app)
+#else
 model_update_task (GtkTreeModel *model, Task *task)
+#endif
 {
 	GtkTreeIter iter;
 	model_find_tree_iter_for_pid (model, task->pid, &iter);
+#ifdef HAVE_WNCK
+	model_update_tree_iter (model, &iter, task, app);
+#else
 	model_update_tree_iter (model, &iter, task);
+#endif
 }
 
 static void
@@ -385,7 +455,12 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
 		for (i = 0; i < manager->tasks->len; i++)
 		{
 			Task *task = &g_array_index (manager->tasks, Task, i);
+#ifdef HAVE_WNCK
+			App *app = xtm_app_manager_get_app_from_pid (manager->app_manager, task->pid);
+			model_add_task (manager->model, task, app, 0);
+#else
 			model_add_task (manager->model, task, 0);
+#endif
 #if DEBUG
 			g_print ("%5d %5s %15s %.50s\n", task->pid, task->uid_name, task->name, task->cmdline);
 #endif
@@ -454,11 +529,17 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
 		for (j = 0; j < manager->tasks->len; j++)
 		{
 			Task *task = &g_array_index (manager->tasks, Task, j);
+#ifdef HAVE_WNCK
+			App *app;
+#endif
 			gboolean updated = FALSE;
 
 			if (task->pid != tasktmp->pid)
 				continue;
 
+#ifdef HAVE_WNCK
+			app = xtm_app_manager_get_app_from_pid (manager->app_manager, task->pid);
+#endif
 			found = TRUE;
 
 			/* Update the model (with the rest) only if needed, this keeps the CPU cool */
@@ -479,7 +560,11 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
 				task->rss = tasktmp->rss;
 				task->vsz = tasktmp->vsz;
 				task->prio = tasktmp->prio;
+#ifdef HAVE_WNCK
+				model_update_task (manager->model, tasktmp, app);
+#else
 				model_update_task (manager->model, tasktmp);
+#endif
 			}
 
 			/* Update command name if needed (can happen) */
@@ -509,7 +594,11 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
 #if DEBUG
 					g_debug ("Remove color from running PID %d", task->pid);
 #endif
+#ifdef HAVE_WNCK
+					model_update_task (manager->model, tasktmp, app);
+#else
 					model_update_task (manager->model, tasktmp);
+#endif
 				}
 
 				g_free (color);
@@ -523,7 +612,12 @@ xtm_task_manager_update_model (XtmTaskManager *manager)
 #if DEBUG
 			g_debug ("Add new task %d %s", tasktmp->pid, tasktmp->name);
 #endif
+#ifdef HAVE_WNCK
+			App *app = xtm_app_manager_get_app_from_pid (manager->app_manager, tasktmp->pid);
+			model_add_task (manager->model, tasktmp, app, __current_timestamp ());
+#else
 			model_add_task (manager->model, tasktmp, __current_timestamp ());
+#endif
 			g_array_append_val (manager->tasks, *tasktmp);
 		}
 	}



More information about the Xfce4-commits mailing list