Updating branch refs/heads/master
         to 9a6cdd2ff3ac57746a56dbe19439838e7761210f (commit)
       from 99a4a680973c18bdfda62abd48fb379429010375 (commit)

commit 9a6cdd2ff3ac57746a56dbe19439838e7761210f
Author: Mike Massonnet <[email protected]>
Date:   Mon May 10 17:03:27 2010 +0200

    Filter tree view with show-all-processes
    
    Switched the get_hostname() get_owner_uid() public in task-manager.c,
    the owner uid is needed in the tree view class in order to filter out
    user processes from others.

 src/process-tree-view.c |   32 +++++++++++++++++++++++++++-----
 src/process-tree-view.h |    1 +
 src/task-manager.c      |    9 ++++-----
 src/task-manager.h      |    7 +++++++
 4 files changed, 39 insertions(+), 10 deletions(-)

diff --git a/src/process-tree-view.c b/src/process-tree-view.c
index 736c12a..bb5a258 100644
--- a/src/process-tree-view.c
+++ b/src/process-tree-view.c
@@ -49,11 +49,14 @@ struct _XtmProcessTreeView
        GtkTreeModel *          model_filter;
        GtkTreeViewColumn *     sort_column;
        XtmSettings *           settings;
+       guint                   owner_uid;
+       gboolean                show_all_processes_cached;
 };
 G_DEFINE_TYPE (XtmProcessTreeView, xtm_process_tree_view, GTK_TYPE_TREE_VIEW)
 
 static gboolean                treeview_clicked                                
(XtmProcessTreeView *treeview, GdkEventButton *event);
 static void            column_clicked                                  
(GtkTreeViewColumn *column, XtmProcessTreeView *treeview);
+static gboolean                visible_func                                    
(GtkTreeModel *model, GtkTreeIter *iter, XtmProcessTreeView *treeview);
 static void            settings_changed                                
(GObject *object, GParamSpec *pspec, XtmProcessTreeView *treeview);
 
 
@@ -74,12 +77,19 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview)
        treeview->settings = xtm_settings_get_default ();
        g_signal_connect (treeview->settings, "notify", G_CALLBACK 
(settings_changed), treeview);
 
+       {
+               gchar *uid_name;
+               get_owner_uid (&treeview->owner_uid, &uid_name);
+               g_object_get (treeview->settings, "show-all-processes", 
&treeview->show_all_processes_cached, NULL);
+               g_debug ("wtf all processes: %d", 
treeview->show_all_processes_cached);
+       }
+
        /* 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_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);
 
        treeview->model_filter = gtk_tree_model_filter_new (GTK_TREE_MODEL 
(treeview->model), NULL);
-       //gtk_tree_model_filter_set_visible_func (treeview->model_filter, ...);
+       gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER 
(treeview->model_filter), (GtkTreeModelFilterVisibleFunc)visible_func, 
treeview, NULL);
 
        g_object_set (treeview, "search-column", XTM_PTV_COLUMN_COMMAND, 
"model", treeview->model_filter, NULL);
 
@@ -145,7 +155,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, NULL);
+       column = gtk_tree_view_column_new_with_attributes (_("UID"), cell_text, 
"text", XTM_PTV_COLUMN_UID_STR, 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));
@@ -366,6 +376,18 @@ column_clicked (GtkTreeViewColumn *column, 
XtmProcessTreeView *treeview)
        treeview->sort_column = column;
 }
 
+static gboolean
+visible_func (GtkTreeModel *model, GtkTreeIter *iter, XtmProcessTreeView 
*treeview)
+{
+       guint uid;
+
+       if (treeview->show_all_processes_cached)
+               return TRUE;
+
+       gtk_tree_model_get (GTK_TREE_MODEL (treeview->model), iter, 
XTM_PTV_COLUMN_UID, &uid, -1);
+       return (treeview->owner_uid == uid) ? TRUE : FALSE;
+}
+
 static void
 settings_changed (GObject *object, GParamSpec *pspec, XtmProcessTreeView 
*treeview)
 {
@@ -396,9 +418,9 @@ settings_changed (GObject *object, GParamSpec *pspec, 
XtmProcessTreeView *treevi
        }
        else if (!g_strcmp0 (pspec->name, "show-all-processes"))
        {
-               gboolean visible;
-               g_object_get (object, pspec->name, &visible, NULL);
+               g_object_get (object, pspec->name, 
&treeview->show_all_processes_cached, NULL);
                // TODO show/hide system processes from treeview
+               gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER 
(treeview->model_filter));
        }
 }
 
diff --git a/src/process-tree-view.h b/src/process-tree-view.h
index 2619142..c357766 100644
--- a/src/process-tree-view.h
+++ b/src/process-tree-view.h
@@ -27,6 +27,7 @@ enum
        XTM_PTV_COLUMN_RSS,
        XTM_PTV_COLUMN_RSS_STR,
        XTM_PTV_COLUMN_UID,
+       XTM_PTV_COLUMN_UID_STR,
        XTM_PTV_COLUMN_CPU,
        XTM_PTV_COLUMN_CPU_STR,
        XTM_PTV_COLUMN_PRIORITY,
diff --git a/src/task-manager.c b/src/task-manager.c
index b481c83..4620c12 100644
--- a/src/task-manager.c
+++ b/src/task-manager.c
@@ -52,8 +52,6 @@ G_DEFINE_TYPE (XtmTaskManager, xtm_task_manager, 
G_TYPE_OBJECT)
 
 static void    xtm_task_manager_finalize                       (GObject 
*object);
 
-static void    get_owner_uid                                   (guint 
*owner_uid, gchar **owner_uid_name);
-static gchar * get_hostname                                    ();
 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);
@@ -94,7 +92,7 @@ _xtm_task_manager_set_model (XtmTaskManager *manager, 
GtkTreeModel *model)
        manager->model = model;
 }
 
-static void
+void
 get_owner_uid (guint *owner_uid, gchar **owner_uid_name)
 {
        uid_t uid;
@@ -110,7 +108,7 @@ get_owner_uid (guint *owner_uid, gchar **owner_uid_name)
        *owner_uid_name = username;
 }
 
-static gchar *
+gchar *
 get_hostname ()
 {
 #ifndef HOST_NAME_MAX
@@ -131,7 +129,8 @@ model_add_task (GtkTreeModel *model, Task *task)
                XTM_PTV_COLUMN_COMMAND, task->cmdline,
                XTM_PTV_COLUMN_PID, task->pid,
                XTM_PTV_COLUMN_STATE, task->state,
-               XTM_PTV_COLUMN_UID, task->uid_name,
+               XTM_PTV_COLUMN_UID, task->uid,
+               XTM_PTV_COLUMN_UID_STR, task->uid_name,
                -1);
        model_update_tree_iter (model, &iter, task);
 }
diff --git a/src/task-manager.h b/src/task-manager.h
index b82eaea..cfefe64 100644
--- a/src/task-manager.h
+++ b/src/task-manager.h
@@ -91,4 +91,11 @@ void                 xtm_task_manager_get_system_info        
        (XtmTaskManager *manager, guint *num_pr
 const GArray *         xtm_task_manager_get_task_list                  
(XtmTaskManager *manager);
 void                   xtm_task_manager_update_model                   
(XtmTaskManager *manager);
 
+/**
+ * Helper functions.
+ */
+
+void                   get_owner_uid                                   (guint 
*owner_uid, gchar **owner_uid_name);
+gchar *                        get_hostname                                    
();
+
 #endif /* !TASK_MANAGER_H */
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to