diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-02-03 22:51:28 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-02-03 22:51:28 -0500 |
commit | 5f41599c1cdfd567d4147d21305c4162e836538b (patch) | |
tree | 0ff6d35b24aaa10b0221d5900c386880c096ca5e | |
parent | b0a475dbb01e802600e23a0d0695f7ebafe7105d (diff) |
kernelshark: Create and use trace_view_store_get_visible_row()
The gtk_tree_selection_get_selected_rows returns the row of the
entire list, no the visible row. The current trace_view_store_get_row()
returns the record of the row passed in compared to the visible row.
But the row that is passed in is the absolute row, and this causes
us to index incorrectly.
This patch creates trace_view_store_get_visible_row() for use when
the row passed in is the visible row, and changes
trace_view_store_get_row() to return record based off of the
absolute row.
Reported-by: Darren Hart <dvhltc@us.ibm.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | kernel-shark.c | 2 | ||||
-rw-r--r-- | trace-view-store.c | 32 | ||||
-rw-r--r-- | trace-view-store.h | 2 |
3 files changed, 27 insertions, 9 deletions
diff --git a/kernel-shark.c b/kernel-shark.c index 9820ac3..1caedf2 100644 --- a/kernel-shark.c +++ b/kernel-shark.c | |||
@@ -315,7 +315,7 @@ static void row_double_clicked(GtkTreeView *treeview, | |||
315 | row = atoi(spath); | 315 | row = atoi(spath); |
316 | g_free(spath); | 316 | g_free(spath); |
317 | 317 | ||
318 | rec = trace_view_store_get_row(TRACE_VIEW_STORE(model), row); | 318 | rec = trace_view_store_get_visible_row(TRACE_VIEW_STORE(model), row); |
319 | time = rec->timestamp; | 319 | time = rec->timestamp; |
320 | trace_graph_select_by_time(info->ginfo, time); | 320 | trace_graph_select_by_time(info->ginfo, time); |
321 | } | 321 | } |
diff --git a/trace-view-store.c b/trace-view-store.c index 13da4ea..9e36493 100644 --- a/trace-view-store.c +++ b/trace-view-store.c | |||
@@ -336,7 +336,7 @@ trace_view_store_get_iter (GtkTreeModel *tree_model, | |||
336 | 336 | ||
337 | n = indices[0]; /* the n-th top level row */ | 337 | n = indices[0]; /* the n-th top level row */ |
338 | 338 | ||
339 | record = trace_view_store_get_row(trace_view_store, n); | 339 | record = trace_view_store_get_visible_row(trace_view_store, n); |
340 | if (!record) | 340 | if (!record) |
341 | return FALSE; | 341 | return FALSE; |
342 | 342 | ||
@@ -1222,10 +1222,31 @@ gint trace_view_store_get_timestamp_page(TraceViewStore *store, guint64 ts) | |||
1222 | return rec->pos / store->rows_per_page + 1; | 1222 | return rec->pos / store->rows_per_page + 1; |
1223 | } | 1223 | } |
1224 | 1224 | ||
1225 | static TraceViewRecord *get_row(TraceViewStore *store, gint row) | ||
1226 | { | ||
1227 | TraceViewRecord *record; | ||
1228 | |||
1229 | g_return_val_if_fail(row >= store->start_row && row < store->visible_rows, NULL); | ||
1230 | |||
1231 | record = store->rows[row]; | ||
1232 | g_assert(record != NULL); | ||
1233 | g_assert(record->pos == row); | ||
1234 | return record; | ||
1235 | } | ||
1236 | |||
1237 | |||
1225 | TraceViewRecord * | 1238 | TraceViewRecord * |
1226 | trace_view_store_get_row(TraceViewStore *store, gint row) | 1239 | trace_view_store_get_row(TraceViewStore *store, gint row) |
1227 | { | 1240 | { |
1228 | TraceViewRecord *record; | 1241 | g_return_val_if_fail(TRACE_VIEW_IS_LIST(store), NULL); |
1242 | |||
1243 | return get_row(store, row); | ||
1244 | } | ||
1245 | |||
1246 | |||
1247 | TraceViewRecord * | ||
1248 | trace_view_store_get_visible_row(TraceViewStore *store, gint row) | ||
1249 | { | ||
1229 | g_return_val_if_fail(TRACE_VIEW_IS_LIST(store), NULL); | 1250 | g_return_val_if_fail(TRACE_VIEW_IS_LIST(store), NULL); |
1230 | 1251 | ||
1231 | /* If we don't have any visible rows, return NULL */ | 1252 | /* If we don't have any visible rows, return NULL */ |
@@ -1234,12 +1255,7 @@ trace_view_store_get_row(TraceViewStore *store, gint row) | |||
1234 | 1255 | ||
1235 | row += store->start_row; | 1256 | row += store->start_row; |
1236 | 1257 | ||
1237 | g_return_val_if_fail(row >= store->start_row && row < store->visible_rows, NULL); | 1258 | return get_row(store, row); |
1238 | |||
1239 | record = store->rows[row]; | ||
1240 | g_assert(record != NULL); | ||
1241 | g_assert(record->pos == row); | ||
1242 | return record; | ||
1243 | } | 1259 | } |
1244 | 1260 | ||
1245 | gint get_next_pid(TraceViewStore *store, struct pevent *pevent, struct record *record) | 1261 | gint get_next_pid(TraceViewStore *store, struct pevent *pevent, struct record *record) |
diff --git a/trace-view-store.h b/trace-view-store.h index 5a9a7a7..8f660ff 100644 --- a/trace-view-store.h +++ b/trace-view-store.h | |||
@@ -135,6 +135,8 @@ void trace_view_store_assign_filters(TraceViewStore *store, | |||
135 | 135 | ||
136 | TraceViewRecord *trace_view_store_get_row(TraceViewStore *store, gint row); | 136 | TraceViewRecord *trace_view_store_get_row(TraceViewStore *store, gint row); |
137 | 137 | ||
138 | TraceViewRecord *trace_view_store_get_visible_row(TraceViewStore *store, gint row); | ||
139 | |||
138 | gboolean trace_view_store_system_enabled(TraceViewStore *store, const gchar *system); | 140 | gboolean trace_view_store_system_enabled(TraceViewStore *store, const gchar *system); |
139 | 141 | ||
140 | gboolean trace_view_store_event_enabled(TraceViewStore *store, gint event_id); | 142 | gboolean trace_view_store_event_enabled(TraceViewStore *store, gint event_id); |