X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Fcallbacks.c;h=c945e62f56b81d88f0a0d2e1ea52b2f8ab9f6807;hb=7d0aa40c0ca658e85876b06c7245292918588c13;hp=53681f48bb4dbb775b1509bd8307a15c982c2632;hpb=70407e861d8430dbe06cc52e6fe4ed5c9cd0872a;p=lttv.git diff --git a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index 53681f48..c945e62f 100644 --- a/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -39,7 +39,7 @@ #include #include #include -#include +#include #include #include #include @@ -418,10 +418,8 @@ insert_viewer_wrap(GtkWidget *menuitem, gpointer user_data) void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor) { GtkWidget * viewer_container; - MainWindow * mw_data = get_window_data_struct(widget); GtkWidget * notebook = lookup_widget(widget, "MNotebook"); GtkWidget * viewer; - TimeInterval * time_interval; GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook))); LttvPluginTab *ptab; @@ -436,7 +434,7 @@ void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor) viewer_container = tab->viewer_container; - viewer = (GtkWidget*)constructor(ptab); + viewer = (GtkWidget*)constructor(&ptab->parent); if(viewer) { //gtk_multivpaned_widget_add(GTK_MULTIVPANED(multivpaned), viewer); @@ -466,13 +464,66 @@ void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor) int SetTraceset(Tab * tab, LttvTraceset *traceset) { + guint i; + TimeInterval time_span; + TimeWindow new_time_window; + LttTime new_current_time; LttvTracesetContext *tsc = - LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); + LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - syncTraceset(tsc); - TimeInterval time_span = tsc->time_span; - TimeWindow new_time_window = tab->time_window; - LttTime new_current_time = tab->current_time; + // Perform time synchronization on the traces + if (syncTraceset(tsc)) + { + /* There is some time-dependant information that was calculated during + * context initialization. Destroy the old contexts and initialize new + * ones. + * Modified from lttvwindow_add_trace() + */ + // Keep a reference to the traces so they are not freed + for(i = 0; i < lttv_traceset_number(traceset); i++) + { + LttvTrace *trace = lttv_traceset_get(traceset, i); + lttv_trace_ref(trace); + } + + // Remove state update hooks + lttv_state_remove_event_hooks( + (LttvTracesetState*)tab->traceset_info->traceset_context); + + lttv_context_fini(LTTV_TRACESET_CONTEXT( + tab->traceset_info->traceset_context)); + g_object_unref(tab->traceset_info->traceset_context); + + for(i = 0; i < lttv_traceset_number(traceset); i++) + { + LttvTrace *trace = lttv_traceset_get(traceset, i); + lttvwindowtraces_remove_trace(trace); + lttvwindowtraces_add_trace(trace); + } + + // Create new context + tab->traceset_info->traceset_context = + g_object_new(LTTV_TRACESET_STATS_TYPE, NULL); + lttv_context_init(LTTV_TRACESET_CONTEXT(tab->traceset_info-> + traceset_context), traceset); + + // Add state update hooks + lttv_state_add_event_hooks( + (LttvTracesetState*)tab->traceset_info->traceset_context); + + // Remove local reference to the traces + for(i=0; itraceset_info->traceset_context); + } + + time_span = tsc->time_span; + new_time_window = tab->time_window; + new_current_time = tab->current_time; /* Set the tab's time window and current time if * out of bounds */ @@ -761,7 +812,6 @@ gint viewer_container_position(GtkWidget *container, GtkWidget *child) void move_down_viewer(GtkWidget * widget, gpointer user_data) { - MainWindow * mw = get_window_data_struct(widget); GtkWidget * notebook = lookup_widget(widget, "MNotebook"); GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), @@ -795,7 +845,6 @@ void move_down_viewer(GtkWidget * widget, gpointer user_data) void move_up_viewer(GtkWidget * widget, gpointer user_data) { - MainWindow * mw = get_window_data_struct(widget); GtkWidget * notebook = lookup_widget(widget, "MNotebook"); GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), @@ -836,7 +885,6 @@ void move_up_viewer(GtkWidget * widget, gpointer user_data) void delete_viewer(GtkWidget * widget, gpointer user_data) { - MainWindow * mw = get_window_data_struct(widget); GtkWidget * notebook = lookup_widget(widget, "MNotebook"); GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), @@ -930,7 +978,6 @@ void open_traceset(GtkWidget * widget, gpointer user_data) gboolean lttvwindow_process_pending_requests(Tab *tab) { - GtkWidget* widget; LttvTracesetContext *tsc; LttvTracefileContext *tfc; GSList *list_in = NULL; @@ -1792,25 +1839,29 @@ void add_trace(GtkWidget * widget, gpointer user_data) tab = ptab->tab; } - //GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select a trace"); - GtkFileSelection * file_selector = (GtkFileSelection *)gtk_file_selection_new("Select a trace"); - gtk_widget_hide( (file_selector)->file_list->parent) ; - gtk_file_selection_hide_fileop_buttons(file_selector); - gtk_window_set_transient_for(GTK_WINDOW(file_selector), - GTK_WINDOW(mw_data->mwindow)); - + /* File open dialog management */ + GtkFileChooser * file_chooser = + GTK_FILE_CHOOSER( + gtk_file_chooser_dialog_new ("Select a trace", + GTK_WINDOW(mw_data->mwindow), + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL)); + + gtk_file_chooser_set_show_hidden (file_chooser, TRUE); if(remember_trace_dir[0] != '\0') - gtk_file_selection_set_filename(file_selector, remember_trace_dir); - - id = gtk_dialog_run(GTK_DIALOG(file_selector)); + gtk_file_chooser_set_filename(file_chooser, remember_trace_dir); + + id = gtk_dialog_run(GTK_DIALOG(file_chooser)); + switch(id){ case GTK_RESPONSE_ACCEPT: case GTK_RESPONSE_OK: - dir = gtk_file_selection_get_filename (file_selector); + dir = gtk_file_chooser_get_filename (file_chooser); strncpy(remember_trace_dir, dir, PATH_MAX); strncat(remember_trace_dir, "/", PATH_MAX); if(!dir || strlen(dir) == 0){ - gtk_widget_destroy((GtkWidget*)file_selector); break; } get_absolute_pathname(dir, abs_path); @@ -1840,7 +1891,6 @@ void add_trace(GtkWidget * widget, gpointer user_data) lttvwindow_add_trace(tab, trace_v); } - gtk_widget_destroy((GtkWidget*)file_selector); //update current tab //update_traceset(mw_data); @@ -1856,9 +1906,10 @@ void add_trace(GtkWidget * widget, gpointer user_data) case GTK_RESPONSE_REJECT: case GTK_RESPONSE_CANCEL: default: - gtk_widget_destroy((GtkWidget*)file_selector); - break; + break; } + gtk_widget_destroy((GtkWidget*)file_chooser); + } /* remove_trace removes a trace from the current traceset if all viewers in @@ -1900,7 +1951,7 @@ void remove_trace(GtkWidget *widget, gpointer user_data) for(i = 0; i < nb_trace; i++){ trace_v = lttv_traceset_get(tab->traceset_info->traceset, i); trace = lttv_trace(trace_v); - name[i] = g_quark_to_string(ltt_trace_name(trace)); + name[i] = (char *) g_quark_to_string(ltt_trace_name(trace)); } remove_trace_name = get_remove_trace(mw_data, name, nb_trace); @@ -2218,7 +2269,6 @@ void zoom(GtkWidget * widget, double size) TimeInterval time_span; TimeWindow new_time_window; LttTime current_time, time_delta; - MainWindow * mw_data = get_window_data_struct(widget); LttvTracesetContext *tsc; GtkWidget * notebook = lookup_widget(widget, "MNotebook"); @@ -2421,8 +2471,6 @@ on_close_tab_activate (GtkWidget *widget, { gint page_num; GtkWidget * notebook; - GtkWidget * page; - MainWindow * mw_data = get_window_data_struct(widget); notebook = lookup_widget(widget, "MNotebook"); if(notebook == NULL){ g_info("Notebook does not exist\n"); @@ -2909,7 +2957,6 @@ void on_unload_module_activate (GtkMenuItem *menuitem, gpointer user_data) { - GError *error = NULL; MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem); LttvLibrary *library = NULL; @@ -3039,7 +3086,6 @@ on_remove_library_search_path_activate (GtkMenuItem *menuitem, { GPtrArray *name; guint nb,i; - gchar *lib_name; name = g_ptr_array_new(); nb = lttv_library_path_number(); /* ask for the library name */ @@ -3350,8 +3396,6 @@ on_MWindow_configure (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { - MainWindow * mw_data = get_window_data_struct((GtkWidget*)widget); - // MD : removed time width modification upon resizing of the main window. // The viewers will redraw themselves completely, without time interval // modification. @@ -3930,7 +3974,6 @@ void current_position_change_manager(Tab *tab, { LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); - TimeInterval time_span = tsc->time_span; int retval; retval= lttv_process_traceset_seek_position(tsc, pos);