aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-06-18 12:04:35 -0400
committerSteven Rostedt <rostedt@goodmis.org>2010-06-18 12:04:35 -0400
commitcfdae546c3f2532e4d339231571160777748967c (patch)
treedbbfd9880267862f6c7abbe183637f9e375f6697
parent198961dd9882313f99823d79833e4952e68e0849 (diff)
kernelshark: Add trace_extract_event_list_view() to extract events
Add function trace_extract_event_list_view() to extract events from the event list view created with: trace_create_event_list_view(). Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--trace-filter.c72
-rw-r--r--trace-filter.h4
2 files changed, 50 insertions, 26 deletions
diff --git a/trace-filter.c b/trace-filter.c
index 91cd0a8..412f91d 100644
--- a/trace-filter.c
+++ b/trace-filter.c
@@ -1476,19 +1476,19 @@ static gint update_events(GtkTreeModel *model,
1476 return size; 1476 return size;
1477} 1477}
1478 1478
1479static gint update_system_events(GtkTreeModel *model, 1479static void update_system_events(GtkTreeModel *model,
1480 GtkTreeIter *parent, 1480 GtkTreeIter *parent,
1481 gchar ***systems, 1481 gchar ***systems,
1482 gint size, 1482 gint **events)
1483 gint **events,
1484 gint *events_size)
1485{ 1483{
1486 GtkTreeIter sys; 1484 GtkTreeIter sys;
1487 gboolean active; 1485 gboolean active;
1488 gchar *system; 1486 gchar *system;
1487 gint sys_size = 0;
1488 gint event_size = 0;
1489 1489
1490 if (!gtk_tree_model_iter_children(model, &sys, parent)) 1490 if (!gtk_tree_model_iter_children(model, &sys, parent))
1491 return size; 1491 return;
1492 1492
1493 for (;;) { 1493 for (;;) {
1494 1494
@@ -1498,48 +1498,68 @@ static gint update_system_events(GtkTreeModel *model,
1498 -1); 1498 -1);
1499 1499
1500 if (active) 1500 if (active)
1501 *systems = add_system(*systems, size++, system); 1501 *systems = add_system(*systems, sys_size++, system);
1502 else 1502 else
1503 *events_size = update_events(model, &sys, events, *events_size); 1503 event_size = update_events(model, &sys, events, event_size);
1504 1504
1505 g_free(system); 1505 g_free(system);
1506 1506
1507 if (!gtk_tree_model_iter_next(model, &sys)) 1507 if (!gtk_tree_model_iter_next(model, &sys))
1508 break; 1508 break;
1509 } 1509 }
1510
1511 return size;
1512} 1510}
1513 1511
1514static void accept_events(GtkTreeView *view, 1512/**
1515 trace_filter_event_cb_func func, gpointer data) 1513 * trace_extract_event_list_view - extract selected events from event view
1514 * @event_view: the event list view widget to extract from
1515 * @all_events: Set if all events are set (@systems and @events are left as is)
1516 * @systems: Set to the selected systems (if @all_events is FALSE)
1517 * @events: Set to the selected events (not in selected systems and if @all_events is FALSE)
1518 *
1519 * Returns 0 on success, -1 otherwise.
1520 */
1521gint trace_extract_event_list_view(GtkWidget *event_view,
1522 gboolean *all_events,
1523 gchar ***systems,
1524 gint **events)
1516{ 1525{
1526 GtkTreeView *view = GTK_TREE_VIEW(event_view);
1517 GtkTreeModel *model; 1527 GtkTreeModel *model;
1518 GtkTreeIter iter; 1528 GtkTreeIter iter;
1519 gboolean active;
1520 gchar **systems = NULL;
1521 gint *events = NULL;
1522 gint events_size = 0;
1523 gint systems_size = 0;
1524 gint i;
1525 1529
1526 model = gtk_tree_view_get_model(view); 1530 model = gtk_tree_view_get_model(view);
1527 if (!model) 1531 if (!model)
1528 return; 1532 return -1;
1529 1533
1530 if (!gtk_tree_model_get_iter_first(model, &iter)) 1534 if (!gtk_tree_model_get_iter_first(model, &iter))
1531 return; 1535 return -1;
1532 1536
1533 gtk_tree_model_get(model, &iter, 1537 gtk_tree_model_get(model, &iter,
1534 COL_ACTIVE, &active, 1538 COL_ACTIVE, all_events,
1535 -1); 1539 -1);
1536 1540
1537 if (!active) 1541 if (!*all_events)
1538 update_system_events(model, &iter, 1542 update_system_events(model, &iter, systems, events);
1539 &systems, systems_size, 1543
1540 &events, &events_size); 1544 return 0;
1545}
1546
1547static void accept_events(GtkWidget *view,
1548 trace_filter_event_cb_func func, gpointer data)
1549{
1550 gboolean all_events;
1551 gchar **systems = NULL;
1552 gint *events = NULL;
1553 gint i;
1554
1555 if (trace_extract_event_list_view(view, &all_events,
1556 &systems, &events) < 0) {
1557 /* Failed to extract ? */
1558 func(FALSE, FALSE, NULL, NULL, data);
1559 return;
1560 }
1541 1561
1542 func(TRUE, active, systems, events, data); 1562 func(TRUE, all_events, systems, events, data);
1543 1563
1544 if (systems) { 1564 if (systems) {
1545 for (i = 0; systems[i]; i++) 1565 for (i = 0; systems[i]; i++)
@@ -1590,7 +1610,7 @@ static void filter_event_dialog(struct pevent *pevent,
1590 result = gtk_dialog_run(GTK_DIALOG(dialog)); 1610 result = gtk_dialog_run(GTK_DIALOG(dialog));
1591 switch (result) { 1611 switch (result) {
1592 case GTK_RESPONSE_ACCEPT: 1612 case GTK_RESPONSE_ACCEPT:
1593 accept_events(GTK_TREE_VIEW(view), func, data); 1613 accept_events(view, func, data);
1594 break; 1614 break;
1595 case GTK_RESPONSE_REJECT: 1615 case GTK_RESPONSE_REJECT:
1596 func(FALSE, FALSE, NULL, NULL, data); 1616 func(FALSE, FALSE, NULL, NULL, data);
diff --git a/trace-filter.h b/trace-filter.h
index 8a427f1..5188346 100644
--- a/trace-filter.h
+++ b/trace-filter.h
@@ -167,6 +167,10 @@ GtkWidget *trace_create_event_list_view(struct pevent *pevent,
167 struct event_filter *filter, 167 struct event_filter *filter,
168 gboolean all_events, gchar **systems, 168 gboolean all_events, gchar **systems,
169 gint *events); 169 gint *events);
170gint trace_extract_event_list_view(GtkWidget *event_view,
171 gboolean *all_events,
172 gchar ***systems,
173 gint **events);
170 174
171/* put here because there's no other place */ 175/* put here because there's no other place */
172 176