aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--trace-filter.c72
1 files changed, 70 insertions, 2 deletions
diff --git a/trace-filter.c b/trace-filter.c
index ab30b1f..4d75fb5 100644
--- a/trace-filter.c
+++ b/trace-filter.c
@@ -280,6 +280,74 @@ static void event_cursor_changed(GtkTreeView *treeview, gpointer data)
280 gtk_tree_path_free(path); 280 gtk_tree_path_free(path);
281} 281}
282 282
283static gboolean child_set(GtkTreeModel *model, GtkTreeIter *parent)
284{
285 GtkTreeIter iter;
286 gboolean active;
287
288 if (!gtk_tree_model_iter_children(model, &iter, parent))
289 return FALSE;
290
291 for (;;) {
292
293 gtk_tree_model_get(model, &iter,
294 COL_ACTIVE, &active,
295 -1);
296
297 if (active)
298 return TRUE;
299
300 if (!gtk_tree_model_iter_next(model, &iter))
301 break;
302 }
303
304 return FALSE;
305}
306
307static void expand_rows(GtkTreeView *tree, GtkTreeModel *model,
308 gboolean all_events,
309 gchar **systems, gint *events)
310{
311 GtkTreePath *path;
312 GtkTreeIter all;
313 GtkTreeIter sys;
314 gboolean active;
315
316 /* Expand the "All Events" row */
317 path = gtk_tree_path_new_from_string("0");
318
319 gtk_tree_view_expand_row(tree, path, FALSE);
320
321 gtk_tree_path_free(path);
322
323 if (all_events)
324 return;
325
326 /* Expand the system rows that are not full or empty */
327
328 if (!gtk_tree_model_get_iter_first(model, &all))
329 return;
330
331 if (!gtk_tree_model_iter_children(model, &sys, &all))
332 return;
333
334 for (;;) {
335
336 gtk_tree_model_get(model, &sys,
337 COL_ACTIVE, &active,
338 -1);
339
340 if (!active && child_set(model, &sys)) {
341 path = gtk_tree_model_get_path(model, &sys);
342 gtk_tree_view_expand_row(tree, path, FALSE);
343 gtk_tree_path_free(path);
344 }
345
346 if (!gtk_tree_model_iter_next(model, &sys))
347 break;
348 }
349}
350
283static GtkWidget * 351static GtkWidget *
284create_event_list_view(struct tracecmd_input *handle, 352create_event_list_view(struct tracecmd_input *handle,
285 gboolean all_events, gchar **systems, 353 gboolean all_events, gchar **systems,
@@ -319,8 +387,8 @@ create_event_list_view(struct tracecmd_input *handle,
319 387
320 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), 388 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)),
321 GTK_SELECTION_NONE); 389 GTK_SELECTION_NONE);
322 390
323 gtk_tree_view_expand_all(GTK_TREE_VIEW(view)); 391 expand_rows(GTK_TREE_VIEW(view), model, all_events, systems, events);
324 392
325 g_signal_connect_swapped (view, "cursor-changed", 393 g_signal_connect_swapped (view, "cursor-changed",
326 G_CALLBACK (event_cursor_changed), 394 G_CALLBACK (event_cursor_changed),