X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fcontrolflow%2Fcfv.c;h=64254f24f87361324e941e5bfdfbf6f220328364;hb=ca0f8a8e5907fe8aa588324b1b268d3089b46160;hp=94a4c08b19bbf0ad98e9f78790b767ac5f6450ba;hpb=88feb618dc79481733516a77f285bb6514bb1d17;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c index 94a4c08b..64254f24 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c @@ -1,3 +1,20 @@ +/* This file is part of the Linux Trace Toolkit viewer + * Copyright (C) 2003-2004 Mathieu Desnoyers + * + * 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. + */ #include #include @@ -8,12 +25,16 @@ #include "processlist.h" #include "eventhooks.h" #include "cfv-private.h" +#include +extern GSList *g_control_flow_data_list; -#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format) -#define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format) +static void control_flow_grab_focus(GtkWidget *widget, gpointer data){ + ControlFlowData * control_flow_data = (ControlFlowData *)data; + Tab * tab = control_flow_data->tab; + lttvwindow_report_focus(tab, guicontrolflow_get_widget(control_flow_data)); +} -extern GSList *g_control_flow_data_list; /***************************************************************************** * Control Flow Viewer class implementation * @@ -29,7 +50,7 @@ extern GSList *g_control_flow_data_list; ControlFlowData * guicontrolflow(void) { - GtkWidget *process_list_widget, *drawing_widget; + GtkWidget *process_list_widget, *drawing_widget, *drawing_area; ControlFlowData* control_flow_data = g_new(ControlFlowData,1) ; @@ -39,6 +60,9 @@ guicontrolflow(void) drawing_widget = drawing_get_widget(control_flow_data->drawing); + drawing_area = + drawing_get_drawing_area(control_flow_data->drawing); + control_flow_data->number_of_process = 0; /* Create the Process list */ @@ -80,7 +104,6 @@ guicontrolflow(void) /* Get trace statistics */ //control_flow_data->Trace_Statistics = get_trace_statistics(Trace); - gtk_widget_show(drawing_widget); gtk_widget_show(process_list_widget); gtk_widget_show(control_flow_data->h_paned); @@ -93,7 +116,7 @@ guicontrolflow(void) (GDestroyNotify)guicontrolflow_destructor); g_object_set_data( - G_OBJECT(drawing_widget), + G_OBJECT(drawing_area), "control_flow_data", control_flow_data); @@ -106,6 +129,11 @@ guicontrolflow(void) //can be configured (and this must happend bedore sending //data) + g_signal_connect (G_OBJECT (process_list_widget), "grab-focus", + G_CALLBACK (control_flow_grab_focus), + control_flow_data); + + return control_flow_data; } @@ -116,8 +144,8 @@ guicontrolflow_destructor_full(ControlFlowData *control_flow_data) { g_info("CFV.c : guicontrolflow_destructor_full, %p", control_flow_data); /* May already have been done by GTK window closing */ - if(GTK_IS_WIDGET(control_flow_data->scrolled_window)) - gtk_widget_destroy(control_flow_data->scrolled_window); + if(GTK_IS_WIDGET(guicontrolflow_get_widget(control_flow_data))) + gtk_widget_destroy(guicontrolflow_get_widget(control_flow_data)); //control_flow_data->mw = NULL; //FIXME guicontrolflow_destructor(control_flow_data); } @@ -127,27 +155,40 @@ void guicontrolflow_destructor(ControlFlowData *control_flow_data) { guint index; + Tab *tab = control_flow_data->tab; g_info("CFV.c : guicontrolflow_destructor, %p", control_flow_data); - g_info("%p, %p, %p", update_time_window_hook, control_flow_data, control_flow_data->mw); - if(GTK_IS_WIDGET(control_flow_data->scrolled_window)) + g_info("%p, %p, %p", update_time_window_hook, control_flow_data, tab); + if(GTK_IS_WIDGET(guicontrolflow_get_widget(control_flow_data))) g_info("widget still exists"); /* Process List is removed with it's widget */ //ProcessList_destroy(control_flow_data->process_list); - if(control_flow_data->mw != NULL) + if(tab != NULL) { - unreg_update_time_window(update_time_window_hook, - control_flow_data, - control_flow_data->mw); + /* Delete reading hooks */ + lttvwindow_unregister_time_window_notify(tab, + update_time_window_hook, + control_flow_data); - unreg_update_current_time(update_current_time_hook, - control_flow_data, - control_flow_data->mw); + lttvwindow_unregister_current_time_notify(tab, + update_current_time_hook, + control_flow_data); + + lttvwindow_unregister_redraw_notify(tab, redraw_notify, control_flow_data); + lttvwindow_unregister_continue_notify(tab, + continue_notify, + control_flow_data); + + lttvwindow_events_request_remove_all(control_flow_data->tab, + control_flow_data); } - g_info("CFV.c : guicontrolflow_destructor, %p", control_flow_data); - g_slist_remove(g_control_flow_data_list,control_flow_data); + g_control_flow_data_list = + g_slist_remove(g_control_flow_data_list,control_flow_data); + + g_info("CFV.c : guicontrolflow_destructor end, %p", control_flow_data); g_free(control_flow_data); + } GtkWidget *guicontrolflow_get_widget(ControlFlowData *control_flow_data) @@ -161,13 +202,4 @@ ProcessList *guicontrolflow_get_process_list return control_flow_data->process_list ; } -TimeWindow *guicontrolflow_get_time_window(ControlFlowData *control_flow_data) -{ - return &control_flow_data->time_window; -} -LttTime *guicontrolflow_get_current_time(ControlFlowData *control_flow_data) -{ - return &control_flow_data->current_time; -} -