X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Flttvwindow.c;h=96a3a48b5388b103284167392874708cd6f0d846;hb=5290ec02dda002f243ef98cd018f31ee44e07843;hp=befe16694a596bb54d88b1f9f42e910fdba2c620;hpb=962e2228963dbdec5d1b92b8c7d85989b941516e;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c index befe1669..96a3a48b 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c @@ -28,6 +28,10 @@ * */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include @@ -97,6 +101,27 @@ void set_current_time(Tab *tab, const LttTime *current_time) if(tmp != NULL) lttv_hooks_call(tmp, &tab->current_time); } +/* set_current_position + * + * It updates the current time of the tab, then calls the updatetimewindow + * hooks of each viewer. + * + * This is called whenever the current time value changes. + */ + +void set_current_position(Tab *tab, const LttvTracesetContextPosition *pos) +{ + LttvAttributeValue value; + LttvHooks * tmp; + + tab->current_time = lttv_traceset_context_position_get_time(pos); + + g_assert(lttv_iattribute_find_by_path(tab->attributes, + "hooks/updatecurrentposition", LTTV_POINTER, &value)); + tmp = (LttvHooks*)*(value.v_pointer); + if(tmp != NULL) lttv_hooks_call(tmp, &pos); +} + void add_toolbar_constructor(MainWindow *mw, LttvToolbarClosure *toolbar_c) { LttvIAttribute *attributes = mw->attributes; @@ -596,7 +621,7 @@ void lttvwindow_unregister_filter_notify(Tab *tab, } /** - * Function to register a hook function for a viewer to set/update its + * function to register a hook function for a viewer to set/update its * current time. * @param tab viewer's tab * @param hook hook function of the viewer. @@ -620,7 +645,7 @@ void lttvwindow_register_current_time_notify(Tab *tab, /** - * Function to unregister a viewer's hook function which is used to + * function to unregister a viewer's hook function which is used to * set/update the current time of the viewer. * @param tab viewer's tab * @param hook hook function of the viewer. @@ -639,6 +664,50 @@ void lttvwindow_unregister_current_time_notify(Tab *tab, lttv_hooks_remove_data(tmp, hook, hook_data); } +/** + * function to register a hook function for a viewer to set/update its + * current position. + * @param tab viewer's tab + * @param hook hook function of the viewer. + * @param hook_data hook data associated with the hook function. + */ + +void lttvwindow_register_current_position_notify(Tab *tab, + LttvHook hook, gpointer hook_data) +{ + LttvAttributeValue value; + LttvHooks * tmp; + g_assert(lttv_iattribute_find_by_path(tab->attributes, + "hooks/updatecurrentposition", LTTV_POINTER, &value)); + tmp = (LttvHooks*)*(value.v_pointer); + if(tmp == NULL){ + tmp = lttv_hooks_new(); + *(value.v_pointer) = tmp; + } + lttv_hooks_add(tmp, hook, hook_data, LTTV_PRIO_DEFAULT); +} + + +/** + * function to unregister a viewer's hook function which is used to + * set/update the current position of the viewer. + * @param tab viewer's tab + * @param hook hook function of the viewer. + * @param hook_data hook data associated with the hook function. + */ + +void lttvwindow_unregister_current_position_notify(Tab *tab, + LttvHook hook, gpointer hook_data) +{ + LttvAttributeValue value; + LttvHooks * tmp; + g_assert(lttv_iattribute_find_by_path(tab->attributes, + "hooks/updatecurrentposition", LTTV_POINTER, &value)); + tmp = (LttvHooks*)*(value.v_pointer); + if(tmp == NULL) return; + lttv_hooks_remove_data(tmp, hook, hook_data); +} + /** * Function to register a hook function for a viewer to show @@ -790,7 +859,7 @@ void lttvwindow_report_time_window(Tab *tab, /** - * Function to set the current time/event of the current tab. + * Function to set the current time of the current tab. * It will be called by a viewer's signal handle associated with * the button-release-event signal * @param tab viewer's tab @@ -806,6 +875,24 @@ void lttvwindow_report_current_time(Tab *tab, current_time_change_manager(tab, time); } +/** + * Function to set the current event of the current tab. + * It will be called by a viewer's signal handle associated with + * the button-release-event signal + * @param tab viewer's tab + * @param time a pointer where time is stored. + */ + +void lttvwindow_report_current_position(Tab *tab, + LttvTracesetContextPosition *pos) +{ + LttvAttributeValue value; + LttvHooks * tmp; + + current_position_change_manager(tab, pos); +} + + /** * Function to set the position of the hpane's dividor (viewer). * It will be called by a viewer's signal handle associated with @@ -893,7 +980,8 @@ void lttvwindow_events_request_remove_all(Tab *tab, //if(events_request->servicing == TRUE) { // lttv_hooks_call(events_request->after_request, NULL); //} - g_free(events_request); + events_request_free(events_request); + //g_free(events_request); tab->events_requests = g_slist_remove_link(tab->events_requests, element); element = g_slist_next(element); if(element == NULL) break; /* end of list */ @@ -990,3 +1078,46 @@ LttvTracesetContext* lttvwindow_get_traceset_context(Tab *tab) { return (LttvTracesetContext*)tab->traceset_info->traceset_context; } + + +void events_request_free(EventsRequest *events_request) +{ + if(events_request == NULL) return; + + if(events_request->start_position != NULL) + lttv_traceset_context_position_destroy(events_request->start_position); + if(events_request->end_position != NULL) + lttv_traceset_context_position_destroy(events_request->end_position); + if(events_request->hooks != NULL) { + guint i; + GArray *hooks = events_request->hooks; + for(i=0;ilen;i++) { + lttv_trace_hook_destroy(&g_array_index(hooks, LttvTraceHook, i)); + } + g_array_free(events_request->hooks, TRUE); + } + if(events_request->before_chunk_traceset != NULL) + lttv_hooks_destroy(events_request->before_chunk_traceset); + if(events_request->before_chunk_trace != NULL) + lttv_hooks_destroy(events_request->before_chunk_trace); + if(events_request->before_chunk_tracefile != NULL) + lttv_hooks_destroy(events_request->before_chunk_tracefile); + if(events_request->event != NULL) + lttv_hooks_destroy(events_request->event); + if(events_request->event_by_id != NULL) + lttv_hooks_by_id_destroy(events_request->event_by_id); + if(events_request->after_chunk_tracefile != NULL) + lttv_hooks_destroy(events_request->after_chunk_tracefile); + if(events_request->after_chunk_trace != NULL) + lttv_hooks_destroy(events_request->after_chunk_trace); + if(events_request->after_chunk_traceset != NULL) + lttv_hooks_destroy(events_request->after_chunk_traceset); + if(events_request->before_request != NULL) + lttv_hooks_destroy(events_request->before_request); + if(events_request->after_request != NULL) + lttv_hooks_destroy(events_request->after_request); + + g_free(events_request); +} + +