extern GSList * g_main_window_list;
-/**
- * Function to set/update traceset for the viewers
- * @param tab viewer's tab
- * @param traceset traceset of the main window.
- * return value :
- * -1 : error
- * 0 : traceset updated
- * 1 : no traceset hooks to update; not an error.
- */
-
-int SetTraceset(Tab * tab, LttvTraceset *traceset)
-{
- LttvHooks * tmp;
- LttvAttributeValue value;
-
- if( lttv_iattribute_find_by_path(tab->attributes,
- "hooks/updatetraceset", LTTV_POINTER, &value) != 0)
- return -1;
-
- tmp = (LttvHooks*)*(value.v_pointer);
- if(tmp == NULL) return 1;
-
-
- lttv_hooks_call(tmp,traceset);
-
- return 0;
-}
-
-
-/**
- * Function to set/update filter for the viewers
- * @param tab viewer's tab
- * @param filter filter of the main window.
- * return value :
- * -1 : error
- * 0 : filters updated
- * 1 : no filter hooks to update; not an error.
- */
-
-int SetFilter(Tab * tab, gpointer filter)
-{
- LttvHooks * tmp;
- LttvAttributeValue value;
-
- if(lttv_iattribute_find_by_path(tab->attributes,
- "hooks/updatefilter", LTTV_POINTER, &value) != 0)
- return -1;
-
- tmp = (LttvHooks*)*(value.v_pointer);
-
- if(tmp == NULL) return 1;
- lttv_hooks_call(tmp,filter);
-
- return 0;
-}
-
-/**
- * Function to redraw each viewer belonging to the current tab
- * @param tab viewer's tab
- */
-
-void update_traceset(Tab *tab)
-{
- LttvAttributeValue value;
- LttvHooks * tmp;
- g_assert(lttv_iattribute_find_by_path(tab->attributes,
- "hooks/updatetraceset", LTTV_POINTER, &value));
- tmp = (LttvHooks*)*(value.v_pointer);
- if(tmp == NULL) return;
- lttv_hooks_call(tmp, NULL);
-}
-
void set_time_window_adjustment(Tab *tab, const TimeWindow* new_time_window)
{
gtk_multi_vpaned_set_adjust(tab->multi_vpaned, new_time_window, FALSE);
lttv_hooks_remove_data(tmp, hook, hook_data);
}
+/**
+ * Function to register a hook function for a viewer be completely redrawn.
+ *
+ * @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_redraw_notify(Tab *tab,
+ LttvHook hook, gpointer hook_data)
+{
+ LttvAttributeValue value;
+ LttvHooks * tmp;
+ g_assert(lttv_iattribute_find_by_path(tab->attributes,
+ "hooks/redraw", 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 hook function for a viewer be completely redrawn.
+ *
+ * @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_redraw_notify(Tab *tab,
+ LttvHook hook, gpointer hook_data)
+{
+ LttvAttributeValue value;
+ LttvHooks * tmp;
+ g_assert(lttv_iattribute_find_by_path(tab->attributes,
+ "hooks/redraw", 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 re-do the events
+ * requests for the needed interval.
+ *
+ * This action is typically done after a "stop".
+ *
+ * The typical hook will remove all current requests for the viewer
+ * and make requests for missing information.
+ *
+ * @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_continue_notify(Tab *tab,
+ LttvHook hook, gpointer hook_data)
+{
+ LttvAttributeValue value;
+ LttvHooks * tmp;
+ g_assert(lttv_iattribute_find_by_path(tab->attributes,
+ "hooks/continue", 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 hook function for a viewer to re-do the events
+ * requests for the needed interval.
+ *
+ * @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_continue_notify(Tab *tab,
+ LttvHook hook, gpointer hook_data)
+{
+ LttvAttributeValue value;
+ LttvHooks * tmp;
+ g_assert(lttv_iattribute_find_by_path(tab->attributes,
+ "hooks/continue", 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 set/update its
* filter.
*/
void lttvwindow_events_request(Tab *tab,
- const EventsRequest *events_request)
+ EventsRequest *events_request)
{
- EventsRequest *alloc = g_new(EventsRequest,1);
- *alloc = *events_request;
-
- tab->events_requests = g_slist_append(tab->events_requests, alloc);
+ tab->events_requests = g_slist_append(tab->events_requests, events_request);
if(!tab->events_request_pending)
{
- /* Redraw has +20 priority. We want a prio higher than that, so +19 */
- g_idle_add_full((G_PRIORITY_HIGH_IDLE + 19),
+ /* Redraw has +20 priority. We want to let the redraw be done while we do
+ * our job. */
+ g_idle_add_full((G_PRIORITY_HIGH_IDLE + 21),
(GSourceFunc)execute_events_requests,
tab,
NULL);
* shown time interval of the viewer and also be called by the constructor
* of the viewer.
* @param tab viewer's tab
- * @param time_interval a pointer where time interval will be stored.
+ * @return time window.
*/
-const TimeWindow *lttvwindow_get_time_window(Tab *tab)
+TimeWindow lttvwindow_get_time_window(Tab *tab)
{
- return &(tab->time_window);
+ return tab->time_window;
}
* It will be called by a viewer's hook function to update the
* current time/event of the viewer.
* @param tab viewer's tab
- * @param time a pointer where time will be stored.
+ * @return time
*/
-const LttTime *lttvwindow_get_current_time(Tab *tab)
+LttTime lttvwindow_get_current_time(Tab *tab)
{
- return &(tab->current_time);
+ return tab->current_time;
}