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.
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user