diff options
Diffstat (limited to 'trace-filter.c')
-rw-r--r-- | trace-filter.c | 89 |
1 files changed, 26 insertions, 63 deletions
diff --git a/trace-filter.c b/trace-filter.c index 7494ccc..2c6022d 100644 --- a/trace-filter.c +++ b/trace-filter.c | |||
@@ -97,14 +97,7 @@ struct event_combo_info { | |||
97 | GtkWidget *event_combo; | 97 | GtkWidget *event_combo; |
98 | GtkWidget *op_combo; | 98 | GtkWidget *op_combo; |
99 | GtkWidget *field_combo; | 99 | GtkWidget *field_combo; |
100 | }; | 100 | GtkWidget *entry; |
101 | |||
102 | struct adv_event_filter_helper { | ||
103 | trace_adv_filter_cb_func func; | ||
104 | GtkTreeView *view; | ||
105 | GtkWidget *entry; | ||
106 | struct event_combo_info combo_info; | ||
107 | gpointer data; | ||
108 | }; | 101 | }; |
109 | 102 | ||
110 | static GtkTreeModel *create_event_combo_model(struct pevent *pevent) | 103 | static GtkTreeModel *create_event_combo_model(struct pevent *pevent) |
@@ -319,7 +312,6 @@ static void event_combo_changed(GtkComboBox *combo, gpointer data) | |||
319 | static void insert_combo_text(struct event_combo_info *info, | 312 | static void insert_combo_text(struct event_combo_info *info, |
320 | GtkComboBox *combo) | 313 | GtkComboBox *combo) |
321 | { | 314 | { |
322 | struct adv_event_filter_helper *event_helper; | ||
323 | GtkTreeModel *model; | 315 | GtkTreeModel *model; |
324 | GtkTreeIter iter; | 316 | GtkTreeIter iter; |
325 | GtkWidget *entry; | 317 | GtkWidget *entry; |
@@ -337,8 +329,7 @@ static void insert_combo_text(struct event_combo_info *info, | |||
337 | 0, &text, | 329 | 0, &text, |
338 | -1); | 330 | -1); |
339 | 331 | ||
340 | event_helper = container_of(info, typeof(*event_helper), combo_info); | 332 | entry = info->entry; |
341 | entry = event_helper->entry; | ||
342 | 333 | ||
343 | pos = gtk_editable_get_position(GTK_EDITABLE(entry)); | 334 | pos = gtk_editable_get_position(GTK_EDITABLE(entry)); |
344 | gtk_editable_insert_text(GTK_EDITABLE(entry), text, strlen(text), &pos); | 335 | gtk_editable_insert_text(GTK_EDITABLE(entry), text, strlen(text), &pos); |
@@ -506,35 +497,6 @@ static gint *get_event_ids(GtkTreeView *treeview) | |||
506 | return ids; | 497 | return ids; |
507 | } | 498 | } |
508 | 499 | ||
509 | /* Callback for the clicked signal of the advanced filter button */ | ||
510 | static void | ||
511 | adv_filter_dialog_response (gpointer data, gint response_id) | ||
512 | { | ||
513 | struct dialog_helper *helper = data; | ||
514 | struct adv_event_filter_helper *event_helper = helper->data; | ||
515 | const gchar *text; | ||
516 | gint *event_ids; | ||
517 | |||
518 | switch (response_id) { | ||
519 | case GTK_RESPONSE_ACCEPT: | ||
520 | text = gtk_entry_get_text(GTK_ENTRY(event_helper->entry)); | ||
521 | event_ids = get_event_ids(event_helper->view); | ||
522 | event_helper->func(TRUE, text, event_ids, event_helper->data); | ||
523 | free(event_ids); | ||
524 | break; | ||
525 | case GTK_RESPONSE_REJECT: | ||
526 | event_helper->func(FALSE, NULL, NULL, event_helper->data); | ||
527 | break; | ||
528 | default: | ||
529 | break; | ||
530 | }; | ||
531 | |||
532 | gtk_widget_destroy(GTK_WIDGET(helper->dialog)); | ||
533 | |||
534 | g_free(event_helper); | ||
535 | g_free(helper); | ||
536 | } | ||
537 | |||
538 | static GtkTreeModel * | 500 | static GtkTreeModel * |
539 | create_tree_filter_model(struct tracecmd_input *handle, | 501 | create_tree_filter_model(struct tracecmd_input *handle, |
540 | struct event_filter *event_filter) | 502 | struct event_filter *event_filter) |
@@ -706,9 +668,8 @@ void trace_adv_filter_dialog(struct tracecmd_input *handle, | |||
706 | trace_adv_filter_cb_func func, | 668 | trace_adv_filter_cb_func func, |
707 | gpointer data) | 669 | gpointer data) |
708 | { | 670 | { |
671 | struct event_combo_info combo_info; | ||
709 | struct pevent *pevent; | 672 | struct pevent *pevent; |
710 | struct dialog_helper *helper; | ||
711 | struct adv_event_filter_helper *event_helper; | ||
712 | GtkWidget *dialog; | 673 | GtkWidget *dialog; |
713 | GtkWidget *hbox; | 674 | GtkWidget *hbox; |
714 | GtkWidget *label; | 675 | GtkWidget *label; |
@@ -716,13 +677,13 @@ void trace_adv_filter_dialog(struct tracecmd_input *handle, | |||
716 | GtkWidget *scrollwin; | 677 | GtkWidget *scrollwin; |
717 | GtkWidget *view; | 678 | GtkWidget *view; |
718 | GtkWidget *event_box; | 679 | GtkWidget *event_box; |
680 | const gchar *text; | ||
681 | gint *event_ids; | ||
682 | int result; | ||
719 | 683 | ||
720 | if (!handle) | 684 | if (!handle) |
721 | return; | 685 | return; |
722 | 686 | ||
723 | helper = g_malloc(sizeof(*helper)); | ||
724 | g_assert(helper); | ||
725 | |||
726 | /* --- Make dialog window --- */ | 687 | /* --- Make dialog window --- */ |
727 | 688 | ||
728 | dialog = gtk_dialog_new_with_buttons("Advanced Filters", | 689 | dialog = gtk_dialog_new_with_buttons("Advanced Filters", |
@@ -734,26 +695,11 @@ void trace_adv_filter_dialog(struct tracecmd_input *handle, | |||
734 | GTK_RESPONSE_REJECT, | 695 | GTK_RESPONSE_REJECT, |
735 | NULL); | 696 | NULL); |
736 | 697 | ||
737 | event_helper = g_new0(typeof(*event_helper), 1); | ||
738 | g_assert(event_helper); | ||
739 | |||
740 | helper->dialog = dialog; | ||
741 | helper->data = event_helper; | ||
742 | |||
743 | event_helper->func = func; | ||
744 | event_helper->data = data; | ||
745 | |||
746 | /* We can attach the Quit menu item to our exit function */ | ||
747 | g_signal_connect_swapped (dialog, "response", | ||
748 | G_CALLBACK (adv_filter_dialog_response), | ||
749 | (gpointer) helper); | ||
750 | |||
751 | scrollwin = gtk_scrolled_window_new(NULL, NULL); | 698 | scrollwin = gtk_scrolled_window_new(NULL, NULL); |
752 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), | 699 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), |
753 | GTK_POLICY_AUTOMATIC, | 700 | GTK_POLICY_AUTOMATIC, |
754 | GTK_POLICY_AUTOMATIC); | 701 | GTK_POLICY_AUTOMATIC); |
755 | view = create_adv_filter_view(handle, event_filter); | 702 | view = create_adv_filter_view(handle, event_filter); |
756 | event_helper->view = GTK_TREE_VIEW(view); | ||
757 | gtk_container_add(GTK_CONTAINER(scrollwin), view); | 703 | gtk_container_add(GTK_CONTAINER(scrollwin), view); |
758 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), scrollwin, TRUE, TRUE, 0); | 704 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), scrollwin, TRUE, TRUE, 0); |
759 | 705 | ||
@@ -769,9 +715,9 @@ void trace_adv_filter_dialog(struct tracecmd_input *handle, | |||
769 | 715 | ||
770 | pevent = tracecmd_get_pevent(handle); | 716 | pevent = tracecmd_get_pevent(handle); |
771 | 717 | ||
772 | event_helper->combo_info.pevent = pevent; | 718 | combo_info.pevent = pevent; |
773 | 719 | ||
774 | event_box = event_info_box(&event_helper->combo_info); | 720 | event_box = event_info_box(&combo_info); |
775 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), event_box, FALSE, FALSE, 0); | 721 | gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), event_box, FALSE, FALSE, 0); |
776 | gtk_widget_show(event_box); | 722 | gtk_widget_show(event_box); |
777 | 723 | ||
@@ -787,12 +733,29 @@ void trace_adv_filter_dialog(struct tracecmd_input *handle, | |||
787 | gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); | 733 | gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); |
788 | gtk_widget_show(entry); | 734 | gtk_widget_show(entry); |
789 | 735 | ||
790 | event_helper->entry = entry; | 736 | combo_info.entry = entry; |
791 | 737 | ||
792 | gtk_widget_set_size_request(GTK_WIDGET(dialog), | 738 | gtk_widget_set_size_request(GTK_WIDGET(dialog), |
793 | TEXT_DIALOG_WIDTH, TEXT_DIALOG_HEIGHT); | 739 | TEXT_DIALOG_WIDTH, TEXT_DIALOG_HEIGHT); |
794 | 740 | ||
795 | gtk_widget_show_all(dialog); | 741 | gtk_widget_show_all(dialog); |
742 | |||
743 | result = gtk_dialog_run(GTK_DIALOG(dialog)); | ||
744 | switch (result) { | ||
745 | case GTK_RESPONSE_ACCEPT: | ||
746 | text = gtk_entry_get_text(GTK_ENTRY(entry)); | ||
747 | event_ids = get_event_ids(GTK_TREE_VIEW(view)); | ||
748 | func(TRUE, text, event_ids, data); | ||
749 | free(event_ids); | ||
750 | break; | ||
751 | case GTK_RESPONSE_REJECT: | ||
752 | func(FALSE, NULL, NULL, data); | ||
753 | break; | ||
754 | default: | ||
755 | break; | ||
756 | }; | ||
757 | |||
758 | gtk_widget_destroy(dialog); | ||
796 | } | 759 | } |
797 | 760 | ||
798 | /* --- task list dialog --- */ | 761 | /* --- task list dialog --- */ |