aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--trace-view.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/trace-view.c b/trace-view.c
index 140bfcd..59e7e1a 100644
--- a/trace-view.c
+++ b/trace-view.c
@@ -525,23 +525,41 @@ void trace_view_cpu_filter_callback(gboolean accept,
525 gpointer data) 525 gpointer data)
526{ 526{
527 GtkTreeView *trace_tree = data; 527 GtkTreeView *trace_tree = data;
528 TraceViewRecord *rec;
528 GtkTreeModel *model; 529 GtkTreeModel *model;
529 TraceViewStore *store; 530 TraceViewStore *store;
531 guint64 time = 0;
532 gint selected_row;
530 gint cpus; 533 gint cpus;
531 gint cpu; 534 gint cpu;
532 535
536 if (!accept)
537 return;
538
533 model = gtk_tree_view_get_model(trace_tree); 539 model = gtk_tree_view_get_model(trace_tree);
534 if (!model) 540 if (!model)
535 return; 541 return;
536 542
537 store = TRACE_VIEW_STORE(model); 543 store = TRACE_VIEW_STORE(model);
538 544
539 if (!accept) 545 selected_row = trace_view_get_selected_row(GTK_WIDGET(trace_tree));
540 return; 546 if (selected_row < 0)
547 selected_row = 0;
541 548
542 g_object_ref(store); 549 g_object_ref(store);
543 gtk_tree_view_set_model(trace_tree, NULL); 550 gtk_tree_view_set_model(trace_tree, NULL);
544 551
552 /*
553 * If the selected row is not part of one of the CPUs
554 * that are kept, then find one that is. Do nothing if
555 * the first row is selected.
556 */
557 if (selected_row) {
558 /* Save this timestamp */
559 rec = trace_view_store_get_visible_row(TRACE_VIEW_STORE(model), selected_row);
560 time = rec->timestamp;
561 }
562
545 if (all_cpus) { 563 if (all_cpus) {
546 trace_view_store_set_all_cpus(store); 564 trace_view_store_set_all_cpus(store);
547 goto set_model; 565 goto set_model;
@@ -559,6 +577,14 @@ void trace_view_cpu_filter_callback(gboolean accept,
559 set_model: 577 set_model:
560 gtk_tree_view_set_model(trace_tree, GTK_TREE_MODEL(store)); 578 gtk_tree_view_set_model(trace_tree, GTK_TREE_MODEL(store));
561 g_object_unref(store); 579 g_object_unref(store);
580
581 if (!time)
582 return;
583 /*
584 * Try to select the row that was near the selection
585 * before the change.
586 */
587 trace_view_select(GTK_WIDGET(trace_tree), time);
562} 588}
563 589
564static GtkTreeModel *create_col_model(GtkTreeView *treeview) 590static GtkTreeModel *create_col_model(GtkTreeView *treeview)