diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2010-06-09 16:05:23 -0400 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2010-06-09 16:05:23 -0400 |
| commit | ddc46835affecefd9460f4f55ea14dac5dbdf8df (patch) | |
| tree | 1d873aa3165746dc7eed864e4d39d1629f77c880 | |
| parent | 19c146cbf37c95cf77319569d1beff35fd8d544b (diff) | |
kernelshark: Clean up advance filter dialog code
Use gtk_dialog_run() and examine the results instead of having
to create a helper structure that is allocated and passed back to
signals.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
| -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 --- */ |
