From 2cb26711cd0bc74d763db72e45307b0f9c93b655 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Tue, 5 Jan 2010 22:56:03 -0500 Subject: trace-view: Have deselecting an event system clear all If the event filter system or all-events is deselected, have it deselect all its siblings. This is useful if you only want to see a few events. Signed-off-by: Steven Rostedt --- trace-filter.c | 22 ++++++++++------------ trace-view-store.c | 35 +++++++++++++++++++++++++++++------ trace-view-store.h | 2 ++ 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/trace-filter.c b/trace-filter.c index ba3b0fd..fd456aa 100644 --- a/trace-filter.c +++ b/trace-filter.c @@ -195,22 +195,18 @@ static void event_cursor_changed(GtkTreeView *treeview, gpointer data) if (depth == 1) { - if (active) - /* Set all rows */ - update_active_systems(model, &iter, TRUE); + /* Set all rows */ + update_active_systems(model, &iter, active); } else if (depth == 2) { - if (active) { - /* set this system */ - update_active_events(model, &iter, TRUE); - } else { + + /* set this system */ + update_active_events(model, &iter, active); + + if (!active) /* disable the all events toggle */ gtk_tree_model_iter_parent(model, &parent, &iter); - gtk_tree_store_set(GTK_TREE_STORE(model), &parent, - COL_ACTIVE, FALSE, - -1); - } - + } else { if (!active) { /* disable system and all events toggles */ @@ -312,6 +308,8 @@ static void update_system_events(TraceViewStore *store, if (!gtk_tree_model_iter_children(model, &sys, parent)) return; + trace_view_store_clear_all_events_enabled(store); + for (;;) { gtk_tree_model_get(model, &sys, diff --git a/trace-view-store.c b/trace-view-store.c index 9ad2073..b61b249 100644 --- a/trace-view-store.c +++ b/trace-view-store.c @@ -552,15 +552,10 @@ gboolean trace_view_store_event_enabled(TraceViewStore *store, gint event_id) return ret != NULL; } -void trace_view_store_set_all_events_enabled(TraceViewStore *store) +static void clear_all_events(TraceViewStore *store) { gint i; - g_return_if_fail (TRACE_VIEW_IS_LIST (store)); - - if (store->all_events) - return; - if (store->systems_size) { for (i = 0; i < store->systems_size; i++) g_free(store->systems[i]); @@ -573,6 +568,29 @@ void trace_view_store_set_all_events_enabled(TraceViewStore *store) g_free(store->event_types); store->event_types = NULL; store->event_types_size = 0; +} + +void trace_view_store_clear_all_events_enabled(TraceViewStore *store) +{ + g_return_if_fail (TRACE_VIEW_IS_LIST (store)); + + clear_all_events(store); + + store->all_events = 0; +} + +void trace_view_store_set_all_events_enabled(TraceViewStore *store) +{ + g_return_if_fail (TRACE_VIEW_IS_LIST (store)); + + if (store->all_events) + return; + + /* + * All enabled means that we don't need to look at + * the system events, so free those arrays. + */ + clear_all_events(store); store->all_events = 1; } @@ -1225,7 +1243,12 @@ trace_view_store_get_row(TraceViewStore *store, gint row) TraceViewRecord *record; g_return_val_if_fail(TRACE_VIEW_IS_LIST(store), NULL); + /* If we don't have any visible rows, return NULL */ + if (!store->visible_rows) + return NULL; + row += store->start_row; + g_return_val_if_fail(row >= store->start_row && row < store->visible_rows, NULL); record = store->rows[row]; diff --git a/trace-view-store.h b/trace-view-store.h index 60f90a5..07c3a24 100644 --- a/trace-view-store.h +++ b/trace-view-store.h @@ -134,6 +134,8 @@ void trace_view_store_set_system_enabled(TraceViewStore *store, const gchar *sys void trace_view_store_set_event_enabled(TraceViewStore *store, gint event_id); +void trace_view_store_clear_all_events_enabled(TraceViewStore *store); + void trace_view_store_update_filter(TraceViewStore *store); /* TraceViewStore methods */ -- cgit v1.2.2