aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-06-09 16:05:23 -0400
committerSteven Rostedt <rostedt@goodmis.org>2010-06-09 16:05:23 -0400
commitddc46835affecefd9460f4f55ea14dac5dbdf8df (patch)
tree1d873aa3165746dc7eed864e4d39d1629f77c880
parent19c146cbf37c95cf77319569d1beff35fd8d544b (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.c89
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
102struct 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
110static GtkTreeModel *create_event_combo_model(struct pevent *pevent) 103static GtkTreeModel *create_event_combo_model(struct pevent *pevent)
@@ -319,7 +312,6 @@ static void event_combo_changed(GtkComboBox *combo, gpointer data)
319static void insert_combo_text(struct event_combo_info *info, 312static 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 */
510static void
511adv_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
538static GtkTreeModel * 500static GtkTreeModel *
539create_tree_filter_model(struct tracecmd_input *handle, 501create_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 --- */