X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fmain%2Fsrc%2Fcallbacks.c;h=76cd18c208d98ad53479cdf36365ca42349e893e;hb=912be9a5bd895c20a2721f7d9799917c4517e0e4;hp=b198bf28de3a8fbef678eda965f77f367a6ebd70;hpb=f2d17b4d7f558420e9ead5f2d0062ec8b918015b;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/main/src/callbacks.c b/ltt/branches/poly/lttv/modules/gui/main/src/callbacks.c index b198bf28..76cd18c2 100644 --- a/ltt/branches/poly/lttv/modules/gui/main/src/callbacks.c +++ b/ltt/branches/poly/lttv/modules/gui/main/src/callbacks.c @@ -1,3 +1,21 @@ +/* This file is part of the Linux Trace Toolkit viewer + * Copyright (C) 2003-2004 XangXiu Yang + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License Version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + #ifdef HAVE_CONFIG_H # include #endif @@ -8,10 +26,10 @@ #include "callbacks.h" #include "interface.h" #include "support.h" -#include +#include #include #include -#include +#include #include #include #include @@ -171,7 +189,7 @@ void get_label_string (GtkWidget * text, gchar * label) strcpy(label,gtk_entry_get_text(entry)); } -void get_label(MainWindow * mw, gchar * str, gchar* dialogue_title, gchar * label_str) +gboolean get_label(MainWindow * mw, gchar * str, gchar* dialogue_title, gchar * label_str) { GtkWidget * dialogue; GtkWidget * text; @@ -202,8 +220,9 @@ void get_label(MainWindow * mw, gchar * str, gchar* dialogue_title, gchar * labe case GTK_RESPONSE_REJECT: default: gtk_widget_destroy(dialogue); - break; + return FALSE; } + return TRUE; } MainWindow * get_window_data_struct(GtkWidget * widget) @@ -391,7 +410,7 @@ void add_trace(GtkWidget * widget, gpointer user_data) LttTrace *trace; LttvTrace * trace_v; LttvTraceset * traceset; - char * dir; + const char * dir; gint id; MainWindow * mw_data = get_window_data_struct(widget); GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select a trace"); @@ -479,19 +498,21 @@ void remove_trace(GtkWidget * widget, gpointer user_data) if(strcmp(remove_trace_name,name[i]) == 0){ //unselect the trace from the current viewer w = gtk_multi_vpaned_get_widget(mw_data->current_tab->multi_vpaned); - s = g_object_get_data(G_OBJECT(w), "Traceset_Selector"); - t = lttv_traceset_selector_trace_get(s,i); - lttv_trace_selector_set_selected(t, FALSE); - - //check if other viewers select the trace - w = gtk_multi_vpaned_get_first_widget(mw_data->current_tab->multi_vpaned); - while(w){ + if(w){ s = g_object_get_data(G_OBJECT(w), "Traceset_Selector"); t = lttv_traceset_selector_trace_get(s,i); - selected = lttv_trace_selector_get_selected(t); - if(selected)break; - w = gtk_multi_vpaned_get_next_widget(mw_data->current_tab->multi_vpaned); - } + lttv_trace_selector_set_selected(t, FALSE); + + //check if other viewers select the trace + w = gtk_multi_vpaned_get_first_widget(mw_data->current_tab->multi_vpaned); + while(w){ + s = g_object_get_data(G_OBJECT(w), "Traceset_Selector"); + t = lttv_traceset_selector_trace_get(s,i); + selected = lttv_trace_selector_get_selected(t); + if(selected)break; + w = gtk_multi_vpaned_get_next_widget(mw_data->current_tab->multi_vpaned); + } + }else selected = FALSE; //if no viewer selects the trace, remove it if(!selected){ @@ -508,7 +529,8 @@ void remove_trace(GtkWidget * widget, gpointer user_data) g_object_unref(mw_data->current_tab->traceset_info->traceset_context); } lttv_traceset_remove(traceset, i); - lttv_trace_destroy(trace_v); + if(!lttv_trace_get_ref_number(trace_v)) + lttv_trace_destroy(trace_v); mw_data->current_tab->traceset_info->traceset_context = g_object_new(LTTV_TRACESET_STATS_TYPE, NULL); lttv_context_init( @@ -516,8 +538,16 @@ void remove_trace(GtkWidget * widget, gpointer user_data) traceset_info->traceset_context),traceset); //update current tab update_traceset(mw_data); - redraw_viewer(mw_data, &(mw_data->current_tab->time_window)); - set_current_time(mw_data,&(mw_data->current_tab->current_time)); + if(nb_trace > 1){ + redraw_viewer(mw_data, &(mw_data->current_tab->time_window)); + set_current_time(mw_data,&(mw_data->current_tab->current_time)); + }else{ + if(mw_data->current_tab){ + while(mw_data->current_tab->multi_vpaned->num_children){ + gtk_multi_vpaned_widget_delete(mw_data->current_tab->multi_vpaned); + } + } + } } break; } @@ -623,23 +653,25 @@ on_clone_traceset_activate (GtkMenuItem *menuitem, create_new_window((GtkWidget*)menuitem, user_data, TRUE); } - -void -on_tab_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ +void create_new_tab(GtkWidget* widget, gpointer user_data){ gchar label[PATH_LENGTH]; - MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem); - GtkNotebook * notebook = (GtkNotebook *)lookup_widget((GtkWidget*)menuitem, "MNotebook"); + MainWindow * mw_data = get_window_data_struct(widget); + GtkNotebook * notebook = (GtkNotebook *)lookup_widget(widget, "MNotebook"); if(notebook == NULL){ g_printf("Notebook does not exist\n"); return; } strcpy(label,"Page"); - get_label(mw_data, label,"Get the name of the tab","Please input tab's name"); + if(get_label(mw_data, label,"Get the name of the tab","Please input tab's name")) + create_tab (mw_data, mw_data, notebook, label); +} - create_tab (mw_data, mw_data, notebook, label); +void +on_tab_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + create_new_tab((GtkWidget*)menuitem, user_data); } @@ -931,7 +963,7 @@ on_add_module_search_path_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select module path"); - char * dir; + const char * dir; gint id; MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem); @@ -995,9 +1027,15 @@ void on_button_new_clicked (GtkButton *button, gpointer user_data) { - create_new_window((GtkWidget*)button, user_data, FALSE); + create_new_window((GtkWidget*)button, user_data, TRUE); } +void +on_button_new_tab_clicked (GtkButton *button, + gpointer user_data) +{ + create_new_tab((GtkWidget*)button, user_data); +} void on_button_open_clicked (GtkButton *button, @@ -1106,10 +1144,19 @@ void on_MWindow_destroy (GtkObject *object, gpointer user_data) { - MainWindow *Main_Window = (MainWindow*)user_data; - + MainWindow *Main_Window = get_window_data_struct((GtkWidget*)object); + GtkWidget *widget; + Tab *tab = Main_Window->tab; + g_printf("There are : %d windows\n",g_slist_length(g_main_window_list)); + while(tab){ + while(tab->multi_vpaned->num_children){ + gtk_multi_vpaned_widget_delete(tab->multi_vpaned); + } + tab = tab->next; + } + g_win_count--; if(g_win_count == 0) gtk_main_quit (); @@ -1589,7 +1636,7 @@ void construct_main_window(MainWindow * parent, WindowCreationData * win_creatio } //for now there is no name field in LttvTraceset structure //Use "Traceset" as the label for the default tab - create_tab(NULL, new_m_window, notebook,"Traceset"); + create_tab(parent, new_m_window, notebook,"Traceset"); g_object_set_data_full( G_OBJECT(new_m_window->mwindow), @@ -1631,8 +1678,9 @@ void tab_destructor(Tab * tab_instance) ref_count = lttv_trace_get_ref_number(trace); if(ref_count <= 1){ ltt_trace_close(lttv_trace(trace)); + lttv_trace_destroy(trace); } - lttv_trace_destroy(trace); + // lttv_trace_destroy(trace); } } lttv_traceset_destroy(tab_instance->traceset_info->traceset);