diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-06-18 12:04:35 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-06-18 12:04:35 -0400 |
commit | cfdae546c3f2532e4d339231571160777748967c (patch) | |
tree | dbbfd9880267862f6c7abbe183637f9e375f6697 | |
parent | 198961dd9882313f99823d79833e4952e68e0849 (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.c | 72 | ||||
-rw-r--r-- | trace-filter.h | 4 |
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 | ||
1479 | static gint update_system_events(GtkTreeModel *model, | 1479 | static 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 | ||
1514 | static 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 | */ | ||
1521 | gint 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 | |||
1547 | static 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); |
170 | gint 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 | ||