diff options
Diffstat (limited to 'kernel-shark.c')
-rw-r--r-- | kernel-shark.c | 77 |
1 files changed, 63 insertions, 14 deletions
diff --git a/kernel-shark.c b/kernel-shark.c index 9cbc45a..fbc5a5f 100644 --- a/kernel-shark.c +++ b/kernel-shark.c | |||
@@ -156,7 +156,7 @@ static void row_double_clicked(GtkTreeView *treeview, | |||
156 | } | 156 | } |
157 | 157 | ||
158 | static void | 158 | static void |
159 | filter_enable_clicked (gpointer data) | 159 | filter_graph_enable_clicked (gpointer data) |
160 | { | 160 | { |
161 | struct shark_info *info = data; | 161 | struct shark_info *info = data; |
162 | 162 | ||
@@ -164,11 +164,36 @@ filter_enable_clicked (gpointer data) | |||
164 | } | 164 | } |
165 | 165 | ||
166 | static void | 166 | static void |
167 | filter_list_enable_clicked (gpointer data) | ||
168 | { | ||
169 | struct shark_info *info = data; | ||
170 | |||
171 | info->list_filter_enabled ^= 1; | ||
172 | |||
173 | if (info->list_filter_enabled) | ||
174 | trace_view_update_task_filter(info->treeview, | ||
175 | info->ginfo->task_filter); | ||
176 | else | ||
177 | trace_view_update_task_filter(info->treeview, NULL); | ||
178 | } | ||
179 | |||
180 | static void | ||
167 | filter_add_task_clicked (gpointer data) | 181 | filter_add_task_clicked (gpointer data) |
168 | { | 182 | { |
169 | struct shark_info *info = data; | 183 | struct shark_info *info = data; |
170 | 184 | ||
171 | trace_graph_filter_add_remove_task(info->ginfo, info->selected_task); | 185 | trace_graph_filter_add_remove_task(info->ginfo, info->selected_task); |
186 | |||
187 | if (info->list_filter_enabled) { | ||
188 | if (filter_task_count(info->ginfo->task_filter)) | ||
189 | trace_view_update_task_filter(info->treeview, | ||
190 | info->ginfo->task_filter); | ||
191 | else | ||
192 | trace_view_update_task_filter(info->treeview, NULL); | ||
193 | } | ||
194 | |||
195 | if (!filter_task_count(info->ginfo->task_filter)) | ||
196 | info->list_filter_enabled = 0; | ||
172 | } | 197 | } |
173 | 198 | ||
174 | static void | 199 | static void |
@@ -177,6 +202,11 @@ filter_clear_tasks_clicked (gpointer data) | |||
177 | struct shark_info *info = data; | 202 | struct shark_info *info = data; |
178 | 203 | ||
179 | trace_graph_clear_tasks(info->ginfo); | 204 | trace_graph_clear_tasks(info->ginfo); |
205 | |||
206 | if (info->list_filter_enabled) | ||
207 | trace_view_update_task_filter(info->treeview, NULL); | ||
208 | |||
209 | info->list_filter_enabled = 0; | ||
180 | } | 210 | } |
181 | 211 | ||
182 | static gboolean | 212 | static gboolean |
@@ -185,7 +215,8 @@ do_tree_popup(GtkWidget *widget, GdkEventButton *event, gpointer data) | |||
185 | struct shark_info *info = data; | 215 | struct shark_info *info = data; |
186 | struct graph_info *ginfo = info->ginfo; | 216 | struct graph_info *ginfo = info->ginfo; |
187 | static GtkWidget *menu; | 217 | static GtkWidget *menu; |
188 | static GtkWidget *menu_filter_enable; | 218 | static GtkWidget *menu_filter_graph_enable; |
219 | static GtkWidget *menu_filter_list_enable; | ||
189 | static GtkWidget *menu_filter_add_task; | 220 | static GtkWidget *menu_filter_add_task; |
190 | static GtkWidget *menu_filter_clear_tasks; | 221 | static GtkWidget *menu_filter_clear_tasks; |
191 | struct record *record; | 222 | struct record *record; |
@@ -205,12 +236,20 @@ do_tree_popup(GtkWidget *widget, GdkEventButton *event, gpointer data) | |||
205 | 236 | ||
206 | if (!menu) { | 237 | if (!menu) { |
207 | menu = gtk_menu_new(); | 238 | menu = gtk_menu_new(); |
208 | menu_filter_enable = gtk_menu_item_new_with_label("Enable Filter"); | 239 | menu_filter_graph_enable = gtk_menu_item_new_with_label("Enable Graph Filter"); |
209 | gtk_widget_show(menu_filter_enable); | 240 | gtk_widget_show(menu_filter_graph_enable); |
210 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_filter_enable); | 241 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_filter_graph_enable); |
211 | 242 | ||
212 | g_signal_connect_swapped (G_OBJECT (menu_filter_enable), "activate", | 243 | g_signal_connect_swapped (G_OBJECT (menu_filter_graph_enable), "activate", |
213 | G_CALLBACK (filter_enable_clicked), | 244 | G_CALLBACK (filter_graph_enable_clicked), |
245 | data); | ||
246 | |||
247 | menu_filter_list_enable = gtk_menu_item_new_with_label("Enable List Filter"); | ||
248 | gtk_widget_show(menu_filter_list_enable); | ||
249 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_filter_list_enable); | ||
250 | |||
251 | g_signal_connect_swapped (G_OBJECT (menu_filter_list_enable), "activate", | ||
252 | G_CALLBACK (filter_list_enable_clicked), | ||
214 | data); | 253 | data); |
215 | 254 | ||
216 | menu_filter_add_task = gtk_menu_item_new_with_label("Add Task"); | 255 | menu_filter_add_task = gtk_menu_item_new_with_label("Add Task"); |
@@ -276,16 +315,26 @@ do_tree_popup(GtkWidget *widget, GdkEventButton *event, gpointer data) | |||
276 | gtk_widget_hide(menu_filter_add_task); | 315 | gtk_widget_hide(menu_filter_add_task); |
277 | 316 | ||
278 | if (ginfo->filter_enabled) | 317 | if (ginfo->filter_enabled) |
279 | gtk_menu_item_set_label(GTK_MENU_ITEM(menu_filter_enable), | 318 | gtk_menu_item_set_label(GTK_MENU_ITEM(menu_filter_graph_enable), |
280 | "Disable Filter"); | 319 | "Disable Graph Filter"); |
281 | else | 320 | else |
282 | gtk_menu_item_set_label(GTK_MENU_ITEM(menu_filter_enable), | 321 | gtk_menu_item_set_label(GTK_MENU_ITEM(menu_filter_graph_enable), |
283 | "Enable Filter"); | 322 | "Enable Graph Filter"); |
284 | 323 | ||
285 | if (ginfo->filter_available) | 324 | if (info->list_filter_enabled) |
286 | gtk_widget_set_sensitive(menu_filter_enable, TRUE); | 325 | gtk_menu_item_set_label(GTK_MENU_ITEM(menu_filter_list_enable), |
326 | "Disable List Filter"); | ||
287 | else | 327 | else |
288 | gtk_widget_set_sensitive(menu_filter_enable, FALSE); | 328 | gtk_menu_item_set_label(GTK_MENU_ITEM(menu_filter_list_enable), |
329 | "Enable List Filter"); | ||
330 | |||
331 | if (ginfo->filter_available) { | ||
332 | gtk_widget_set_sensitive(menu_filter_graph_enable, TRUE); | ||
333 | gtk_widget_set_sensitive(menu_filter_list_enable, TRUE); | ||
334 | } else { | ||
335 | gtk_widget_set_sensitive(menu_filter_graph_enable, FALSE); | ||
336 | gtk_widget_set_sensitive(menu_filter_list_enable, FALSE); | ||
337 | } | ||
289 | 338 | ||
290 | if (filter_task_count(ginfo->task_filter)) | 339 | if (filter_task_count(ginfo->task_filter)) |
291 | gtk_widget_set_sensitive(menu_filter_clear_tasks, TRUE); | 340 | gtk_widget_set_sensitive(menu_filter_clear_tasks, TRUE); |