X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2FguiEvents.c;h=0d3b9bc9f1f2a7193d0877c9f25353d0aa6b9132;hb=8af8e4c5fec518b63c7877b49b228acc2b947177;hp=64c392690fe7f5031c621c97a039a73468671d10;hpb=c46519c856ab26d16378a3984814cda3b86af160;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/guiEvents.c b/ltt/branches/poly/lttv/modules/guiEvents.c index 64c39269..0d3b9bc9 100644 --- a/ltt/branches/poly/lttv/modules/guiEvents.c +++ b/ltt/branches/poly/lttv/modules/guiEvents.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -60,7 +59,6 @@ gboolean updateTimeInterval(void * hook_data, void * call_data); gboolean updateCurrentTime(void * hook_data, void * call_data); void remove_item_from_queue(GQueue * q, gboolean fromHead); void remove_all_items_from_queue(GQueue * q); -void remove_instance(GtkCustomHBox * box); typedef struct _RawTraceData{ unsigned cpu_id; @@ -100,7 +98,6 @@ typedef struct _EventViewerData { LttTime trace_end; unsigned start_event_index; //the first event shown in the window unsigned end_event_index; //the last event shown in the window - GtkWidget * instance_container; //box to contain all widgets //scroll window containing Tree View GtkWidget * Scroll_Win; @@ -137,6 +134,7 @@ GtkWidget *hGuiEvents(mainWindow *pmParentWindow); EventViewerData *GuiEvents(mainWindow *pmParentWindow); //! Event Viewer's destructor void GuiEvents_Destructor(EventViewerData *Event_Viewer_Data); +void GuiEvents_free(EventViewerData *Event_Viewer_Data); static int Event_Selected_Hook(void *hook_data, void *call_data); @@ -162,13 +160,24 @@ static void get_events(EventViewerData* Event_Viewer_Data, LttTime start, LttTime end, unsigned maxNumEvents, unsigned * realNumEvent); static gboolean parse_event(void *hook_data, void *call_data); +static LttvModule *Main_Win_Module; + /** * plugin's init function * * This function initializes the Event Viewer functionnality through the * gtkTraceSet API. */ -G_MODULE_EXPORT void init() { +G_MODULE_EXPORT void init(LttvModule *self, int argc, char *argv[]) { + + Main_Win_Module = lttv_module_require(self, "mainwin", argc, argv); + + if(Main_Win_Module == NULL) + { + g_critical("Can't load Control Flow Viewer : missing mainwin\n"); + return; + } + g_critical("GUI Event Viewer init()"); @@ -236,7 +245,7 @@ hGuiEvents(mainWindow * pmParentWindow) EventViewerData* Event_Viewer_Data = GuiEvents(pmParentWindow) ; if(Event_Viewer_Data) - return Event_Viewer_Data->instance_container; + return Event_Viewer_Data->HBox_V; else return NULL; } @@ -281,13 +290,14 @@ GuiEvents(mainWindow *pmParentWindow) Event_Viewer_Data->Selected_Event = 0; /* Create a model for storing the data list */ - Event_Viewer_Data->Store_M = gtk_list_store_new (N_COLUMNS, /* Total number of columns */ - G_TYPE_INT, /* CPUID */ - G_TYPE_STRING, /* Event */ - G_TYPE_UINT64, /* Time */ - G_TYPE_INT, /* PID */ - G_TYPE_INT, /* Entry length */ - G_TYPE_STRING); /* Event's description */ + Event_Viewer_Data->Store_M = gtk_list_store_new ( + N_COLUMNS, /* Total number of columns */ + G_TYPE_INT, /* CPUID */ + G_TYPE_STRING, /* Event */ + G_TYPE_UINT64, /* Time */ + G_TYPE_INT, /* PID */ + G_TYPE_INT, /* Entry length */ + G_TYPE_STRING); /* Event's description */ /* Create the viewer widget for the columned list */ Event_Viewer_Data->Tree_V = gtk_tree_view_new_with_model (GTK_TREE_MODEL (Event_Viewer_Data->Store_M)); @@ -385,10 +395,8 @@ GuiEvents(mainWindow *pmParentWindow) gtk_container_add (GTK_CONTAINER (Event_Viewer_Data->Scroll_Win), Event_Viewer_Data->Tree_V); - Event_Viewer_Data->instance_container = gtk_custom_hbox_new(0, 0, remove_instance); Event_Viewer_Data->HBox_V = gtk_hbox_new(0, 0); gtk_box_pack_start(GTK_BOX(Event_Viewer_Data->HBox_V), Event_Viewer_Data->Scroll_Win, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(Event_Viewer_Data->instance_container), Event_Viewer_Data->HBox_V, TRUE, TRUE, 0); /* Create vertical scrollbar and pack it */ Event_Viewer_Data->VScroll_VC = gtk_vscrollbar_new(NULL); @@ -414,7 +422,6 @@ GuiEvents(mainWindow *pmParentWindow) // Event_Viewer_Data->VTree_Adjust_C->upper; g_critical("value : %u",Event_Viewer_Data->VTree_Adjust_C->upper); /* Raw event trace */ - gtk_widget_show(Event_Viewer_Data->instance_container); gtk_widget_show(Event_Viewer_Data->HBox_V); gtk_widget_show(Event_Viewer_Data->Tree_V); gtk_widget_show(Event_Viewer_Data->VScroll_VC); @@ -454,6 +461,13 @@ GuiEvents(mainWindow *pmParentWindow) /* Set the Selected Event */ // Tree_V_set_cursor(Event_Viewer_Data); + + + g_object_set_data_full( + G_OBJECT(Event_Viewer_Data->HBox_V), + "Event_Viewer_Data", + Event_Viewer_Data, + (GDestroyNotify)GuiEvents_free); return Event_Viewer_Data; } @@ -1110,6 +1124,23 @@ void add_test_data(EventViewerData *Event_Viewer_Data) } +void +GuiEvents_free(EventViewerData *Event_Viewer_Data) +{ + lttv_hooks_remove(Event_Viewer_Data->before_event_hooks,parse_event); + lttv_hooks_destroy(Event_Viewer_Data->before_event_hooks); + + remove_all_items_from_queue (Event_Viewer_Data->raw_trace_data_queue); + g_queue_free(Event_Viewer_Data->raw_trace_data_queue); + g_queue_free(Event_Viewer_Data->raw_trace_data_queue_tmp); + + UnregUpdateTimeInterval(updateTimeInterval,Event_Viewer_Data, Event_Viewer_Data->mw); + UnregUpdateCurrentTime(updateCurrentTime,Event_Viewer_Data, Event_Viewer_Data->mw); + + sEvent_Viewer_Data_List = g_slist_remove(sEvent_Viewer_Data_List, Event_Viewer_Data); + g_warning("Delete Event data\n"); + g_free(Event_Viewer_Data); +} void GuiEvents_Destructor(EventViewerData *Event_Viewer_Data) @@ -1117,8 +1148,8 @@ GuiEvents_Destructor(EventViewerData *Event_Viewer_Data) guint index; /* May already been done by GTK window closing */ - if(GTK_IS_WIDGET(Event_Viewer_Data->instance_container)) - gtk_widget_destroy(Event_Viewer_Data->instance_container); + if(GTK_IS_WIDGET(Event_Viewer_Data->HBox_V)) + gtk_widget_destroy(Event_Viewer_Data->HBox_V); /* Destroy the Tree View */ //gtk_widget_destroy(Event_Viewer_Data->Tree_V); @@ -1127,17 +1158,8 @@ GuiEvents_Destructor(EventViewerData *Event_Viewer_Data) //gtk_list_store_clear(Event_Viewer_Data->Store_M); //gtk_widget_destroy(GTK_WIDGET(Event_Viewer_Data->Store_M)); - lttv_hooks_remove(Event_Viewer_Data->before_event_hooks,parse_event); - lttv_hooks_destroy(Event_Viewer_Data->before_event_hooks); - - remove_all_items_from_queue (Event_Viewer_Data->raw_trace_data_queue); - g_queue_free(Event_Viewer_Data->raw_trace_data_queue); - g_queue_free(Event_Viewer_Data->raw_trace_data_queue_tmp); - - UnregUpdateTimeInterval(updateTimeInterval,Event_Viewer_Data, Event_Viewer_Data->mw); - UnregUpdateCurrentTime(updateCurrentTime,Event_Viewer_Data, Event_Viewer_Data->mw); - - g_free(Event_Viewer_Data); + g_warning("Delete Event data from destroy\n"); + GuiEvents_free(Event_Viewer_Data); } //FIXME : call hGuiEvents_Destructor for corresponding data upon widget destroy @@ -1217,7 +1239,7 @@ gboolean updateCurrentTime(void * hook_data, void * call_data) void Tree_V_grab_focus(GtkWidget *widget, gpointer data){ EventViewerData *Event_Viewer_Data = (EventViewerData *)data; mainWindow * mw = Event_Viewer_Data->mw; - SetFocusedPane(mw, gtk_widget_get_parent(Event_Viewer_Data->instance_container)); + SetFocusedPane(mw, gtk_widget_get_parent(Event_Viewer_Data->HBox_V)); } void get_events(EventViewerData* Event_Viewer_Data, LttTime start, @@ -1482,19 +1504,6 @@ void remove_all_items_from_queue(GQueue *q) } } -void remove_instance(GtkCustomHBox * box){ - int i; - EventViewerData *Event_Viewer_Data ; - - for(i=0;iinstance_container){ - sEvent_Viewer_Data_List = g_slist_remove(sEvent_Viewer_Data_List, Event_Viewer_Data); - break; - } - } -} -