X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fcontrolflow%2Fprocesslist.c;h=33c497f8e1a006d2c1f75c178b7c1068e0cd0363;hb=a2aab3a3417958dbbb2dff69c15d1206ec7d28b1;hp=e56911e94d6e4d330ecb4929e705805b2befd3fd;hpb=b27439533c5620fe06b9800fce0bc3592ed2088b;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c index e56911e9..33c497f8 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c @@ -279,6 +279,9 @@ ProcessList *processlist_construct(void) process_list->number_of_process = 0; process_list->cell_height_cache = -1; + process_list->current_process_info = NULL; + process_list->current_hash_data = NULL; + /* Create the Process list */ process_list->list_store = gtk_list_store_new ( N_COLUMNS, G_TYPE_STRING, @@ -414,6 +417,11 @@ static gboolean remove_hash_item(ProcessInfo *process_info, gtk_list_store_remove (process_list->list_store, &iter); + if(process_info == process_list->current_process_info) + process_list->current_process_info = NULL; + if(hashed_process_data == process_list->current_hash_data) + process_list->current_hash_data = NULL; + return TRUE; /* remove the element from the hash table */ } @@ -468,11 +476,13 @@ int processlist_add( ProcessList *process_list, guint trace_num, const gchar *name, guint *height, + ProcessInfo **pm_process_info, HashedProcessData **pm_hashed_process_data) { ProcessInfo *Process_Info = g_new(ProcessInfo, 1); HashedProcessData *hashed_process_data = g_new(HashedProcessData, 1); *pm_hashed_process_data = hashed_process_data; + *pm_process_info = Process_Info; Process_Info->pid = pid; if(pid == 0) @@ -543,32 +553,37 @@ int processlist_remove( ProcessList *process_list, LttTime *birth, guint trace_num) { - ProcessInfo Process_Info; + ProcessInfo process_info; gint *path_indices; HashedProcessData *hashed_process_data; GtkTreeIter iter; - Process_Info.pid = pid; + process_info.pid = pid; if(pid == 0) - Process_Info.cpu = cpu; + process_info.cpu = cpu; else - Process_Info.cpu = 0; - Process_Info.birth = *birth; - Process_Info.trace_num = trace_num; + process_info.cpu = 0; + process_info.birth = *birth; + process_info.trace_num = trace_num; if(hashed_process_data = (HashedProcessData*)g_hash_table_lookup( process_list->process_hash, - &Process_Info)) + &process_info)) { iter = hashed_process_data->y_iter; gtk_list_store_remove (process_list->list_store, &iter); g_hash_table_remove(process_list->process_hash, - &Process_Info); - + &process_info); + + if(hashed_process_data == process_list->current_hash_data) { + process_list->current_process_info = NULL; + process_list->current_hash_data = NULL; + } + process_list->number_of_process--; return 0; @@ -581,7 +596,7 @@ int processlist_remove( ProcessList *process_list, guint processlist_get_height(ProcessList *process_list) { return get_cell_height(process_list, - GTK_TREE_VIEW(process_list->process_list_widget)) + (GtkTreeView*)process_list->process_list_widget) * process_list->number_of_process ; } @@ -592,31 +607,31 @@ __inline gint processlist_get_process_pixels( ProcessList *process_list, guint *height, HashedProcessData **pm_hashed_process_data) { - ProcessInfo Process_Info; + ProcessInfo process_info; gint *path_indices; GtkTreePath *tree_path; HashedProcessData *hashed_process_data = NULL; - Process_Info.pid = pid; + process_info.pid = pid; if(pid == 0) - Process_Info.cpu = cpu; + process_info.cpu = cpu; else - Process_Info.cpu = 0; - Process_Info.birth = *birth; - Process_Info.trace_num = trace_num; + process_info.cpu = 0; + process_info.birth = *birth; + process_info.trace_num = trace_num; if(hashed_process_data = (HashedProcessData*)g_hash_table_lookup( process_list->process_hash, - &Process_Info)) + &process_info)) { tree_path = gtk_tree_model_get_path( - GTK_TREE_MODEL(process_list->list_store), + (GtkTreeModel*)process_list->list_store, &hashed_process_data->y_iter); path_indices = gtk_tree_path_get_indices (tree_path); *height = get_cell_height(process_list, - GTK_TREE_VIEW(process_list->process_list_widget)); + (GtkTreeView*)process_list->process_list_widget); *y = *height * path_indices[0]; *pm_hashed_process_data = hashed_process_data; gtk_tree_path_free(tree_path); @@ -639,12 +654,12 @@ __inline gint processlist_get_pixels_from_data( ProcessList *process_list, gint *path_indices; GtkTreePath *tree_path; - tree_path = gtk_tree_model_get_path(GTK_TREE_MODEL(process_list->list_store), + tree_path = gtk_tree_model_get_path((GtkTreeModel*)process_list->list_store, &hashed_process_data->y_iter); path_indices = gtk_tree_path_get_indices (tree_path); *height = get_cell_height(process_list, - GTK_TREE_VIEW(process_list->process_list_widget)); + (GtkTreeView*)process_list->process_list_widget); *y = *height * path_indices[0]; gtk_tree_path_free(tree_path);