aboutsummaryrefslogtreecommitdiffstats
path: root/kernel-shark.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel-shark.c')
-rw-r--r--kernel-shark.c77
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
158static void 158static void
159filter_enable_clicked (gpointer data) 159filter_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
166static void 166static void
167filter_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
180static void
167filter_add_task_clicked (gpointer data) 181filter_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
174static void 199static 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
182static gboolean 212static 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);