From 51705146eabfc882972ca6bc815dc78addcee896 Mon Sep 17 00:00:00 2001 From: compudj Date: Fri, 23 Jul 2004 23:30:06 +0000 Subject: [PATCH] enhancements and bugfixes git-svn-id: http://ltt.polymtl.ca/svn@629 04897980-b3bd-0310-b5e0-8ef037075253 --- .../modules/gui/controlflow/cfv-private.h | 2 +- .../poly/lttv/modules/gui/controlflow/cfv.c | 64 +++---- .../lttv/modules/gui/controlflow/drawing.c | 168 ++++++++++++++---- .../lttv/modules/gui/controlflow/drawing.h | 9 +- .../lttv/modules/gui/controlflow/eventhooks.c | 154 ++++++++-------- .../modules/gui/controlflow/processlist.c | 18 +- .../modules/gui/controlflow/processlist.h | 2 +- 7 files changed, 262 insertions(+), 155 deletions(-) diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv-private.h b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv-private.h index 19361699..ee3f6e4e 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv-private.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv-private.h @@ -22,7 +22,7 @@ struct _ControlFlowData { - GtkWidget *scrolled_window; + GtkWidget *top_widget; Tab *tab; GtkWidget *h_paned; diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c index 508eb23e..75fec21e 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c @@ -33,6 +33,9 @@ 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)); + //g_assert(GTK_WIDGET_CAN_FOCUS(widget)); + //gtk_widget_grab_focus(widget); + g_debug("FOCUS GRABBED"); } @@ -54,6 +57,14 @@ guicontrolflow(void) ControlFlowData* control_flow_data = g_new(ControlFlowData,1) ; + control_flow_data->v_adjust = + GTK_ADJUSTMENT(gtk_adjustment_new( 0.0, /* Value */ + 0.0, /* Lower */ + 0.0, /* Upper */ + 0.0, /* Step inc. */ + 0.0, /* Page inc. */ + 0.0)); /* page size */ + /* Create the drawing */ control_flow_data->drawing = drawing_construct(control_flow_data); @@ -71,33 +82,20 @@ guicontrolflow(void) process_list_widget = processlist_get_widget(control_flow_data->process_list); - //control_flow_data->Inside_HBox_V = gtk_hbox_new(0, 0); - control_flow_data->h_paned = gtk_hpaned_new(); - - gtk_paned_pack1(GTK_PANED(control_flow_data->h_paned), process_list_widget, FALSE, TRUE); - gtk_paned_pack2(GTK_PANED(control_flow_data->h_paned), drawing_widget, TRUE, TRUE); + gtk_tree_view_set_vadjustment(GTK_TREE_VIEW(process_list_widget), + GTK_ADJUSTMENT( + control_flow_data->v_adjust)); - control_flow_data->v_adjust = - GTK_ADJUSTMENT(gtk_adjustment_new( 0.0, /* Value */ - 0.0, /* Lower */ - 0.0, /* Upper */ - 0.0, /* Step inc. */ - 0.0, /* Page inc. */ - 0.0)); /* page size */ - - control_flow_data->scrolled_window = - gtk_scrolled_window_new (NULL, - control_flow_data->v_adjust); - - gtk_scrolled_window_set_policy( - GTK_SCROLLED_WINDOW(control_flow_data->scrolled_window) , - GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); - - gtk_scrolled_window_add_with_viewport( - GTK_SCROLLED_WINDOW(control_flow_data->scrolled_window), - control_flow_data->h_paned); + //control_flow_data->Inside_HBox_V = gtk_hbox_new(0, 0); + control_flow_data->top_widget = control_flow_data->h_paned = + gtk_hpaned_new(); + + gtk_paned_pack1(GTK_PANED(control_flow_data->h_paned), + process_list_widget, FALSE, TRUE); + gtk_paned_pack2(GTK_PANED(control_flow_data->h_paned), + drawing_widget, TRUE, TRUE); + /* Set the size of the drawing area */ //drawing_Resize(drawing, h, w); @@ -107,10 +105,9 @@ guicontrolflow(void) gtk_widget_show(drawing_widget); gtk_widget_show(process_list_widget); gtk_widget_show(control_flow_data->h_paned); - gtk_widget_show(control_flow_data->scrolled_window); g_object_set_data_full( - G_OBJECT(control_flow_data->scrolled_window), + G_OBJECT(control_flow_data->top_widget), "control_flow_data", control_flow_data, (GDestroyNotify)guicontrolflow_destructor); @@ -129,10 +126,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); - + //g_signal_connect (G_OBJECT (process_list_widget), "grab-focus", + //g_signal_connect (G_OBJECT (control_flow_data->scrolled_window), + // "button-press-event", + // G_CALLBACK (control_flow_grab_focus), + // control_flow_data); return control_flow_data; @@ -186,6 +184,8 @@ guicontrolflow_destructor(ControlFlowData *control_flow_data) lttvwindow_events_request_remove_all(control_flow_data->tab, control_flow_data); + + lttvwindowtraces_background_notify_remove(control_flow_data); } g_control_flow_data_list = g_slist_remove(g_control_flow_data_list,control_flow_data); @@ -197,7 +197,7 @@ guicontrolflow_destructor(ControlFlowData *control_flow_data) GtkWidget *guicontrolflow_get_widget(ControlFlowData *control_flow_data) { - return control_flow_data->scrolled_window ; + return control_flow_data->top_widget ; } ProcessList *guicontrolflow_get_process_list diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c index 091bcb8a..2c5ab83b 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c @@ -80,6 +80,13 @@ void drawing_data_request(Drawing_t *drawing, if(width < 0) return ; if(height < 0) return ; + if(drawing->gc == NULL) { + drawing->gc = gdk_gc_new(drawing->drawing_area->window); + gdk_gc_copy(drawing->gc, drawing->drawing_area->style->black_gc); + } + + + TimeWindow time_window = lttvwindow_get_time_window(drawing->control_flow_data->tab); @@ -103,12 +110,12 @@ void drawing_data_request(Drawing_t *drawing, g_debug("x is : %i, x+width is : %i", x, x+width); - convert_pixels_to_time(drawing->drawing_area->allocation.width, x, + convert_pixels_to_time(drawing->width, x, time_window.start_time, window_end, &start); - convert_pixels_to_time(drawing->drawing_area->allocation.width, x+width, + convert_pixels_to_time(drawing->width, x+width, time_window.start_time, window_end, &time_end); @@ -221,9 +228,17 @@ void drawing_data_request_end(EventsRequest *events_request, LttvTracesetState * //drawing->damage_end = drawing->width; /* ask for the buffer to be redrawn */ + gtk_widget_queue_draw_area ( drawing->drawing_area, - x, 0, - width, drawing->height); + 0, 0, + drawing->width, drawing->height); + + /* FIXME + * will need more precise pixel_to_time and time_to_pixel conversion + * functions to redraw only the needed area. */ + //gtk_widget_queue_draw_area ( drawing->drawing_area, + // x, 0, + // width, drawing->height); } @@ -261,22 +276,22 @@ configure_event( GtkWidget *widget, GdkEventConfigure *event, if(widget->allocation.width != drawing->width) { g_debug("drawing configure event"); - g_debug("New draw size : %i by %i",widget->allocation.width, + g_debug("New alloc draw size : %i by %i",widget->allocation.width, widget->allocation.height); if (drawing->pixmap) gdk_pixmap_unref(drawing->pixmap); - drawing->pixmap = gdk_pixmap_new( - widget->window, - widget->allocation.width + SAFETY, - widget->allocation.height + SAFETY, + drawing->width = widget->allocation.width; + //drawing->height = widget->allocation.height; + + drawing->pixmap = gdk_pixmap_new(widget->window, + drawing->width + SAFETY, + drawing->height, + -1); //ProcessList_get_height // (GuiControlFlow_get_process_list(drawing->control_flow_data)), - -1); - drawing->width = widget->allocation.width; - drawing->height = widget->allocation.height; // Clear the image @@ -284,8 +299,8 @@ configure_event( GtkWidget *widget, GdkEventConfigure *event, widget->style->black_gc, TRUE, 0, 0, - widget->allocation.width+SAFETY, - widget->allocation.height+SAFETY); + drawing->width+SAFETY, + drawing->height); //g_info("init data request"); @@ -298,8 +313,8 @@ configure_event( GtkWidget *widget, GdkEventConfigure *event, // widget->allocation.width, // widget->allocation.height); - drawing->width = widget->allocation.width; - drawing->height = widget->allocation.height; + //drawing->width = widget->allocation.width; + //drawing->height = widget->allocation.height; drawing->damage_begin = 0; drawing->damage_end = widget->allocation.width; @@ -311,7 +326,7 @@ configure_event( GtkWidget *widget, GdkEventConfigure *event, drawing->damage_begin, 0, drawing->damage_end - drawing->damage_begin, - widget->allocation.height); + drawing->height); } } return TRUE; @@ -343,7 +358,7 @@ expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer user_data ) time_window.start_time, window_end, current_time, - widget->allocation.width, + drawing->width, &cursor_x); @@ -373,11 +388,12 @@ expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer user_data ) 0, dash_list, 2); - drawing_draw_line(NULL, widget->window, - cursor_x, 0, - cursor_x, drawing->height, - drawing->dotted_gc); } + + drawing_draw_line(NULL, widget->window, + cursor_x, 0, + cursor_x, drawing->height, + drawing->dotted_gc); return FALSE; } @@ -385,7 +401,7 @@ static gboolean after_expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer user_data ) { //g_assert(0); - g_critical("AFTER EXPOSE"); + g_debug("AFTER EXPOSE"); return FALSE; @@ -417,7 +433,7 @@ button_press_event( GtkWidget *widget, GdkEventButton *event, gpointer user_data /* left mouse button click */ g_debug("x click is : %f", event->x); - convert_pixels_to_time(widget->allocation.width, (guint)event->x, + convert_pixels_to_time(drawing->width, (guint)event->x, time_window.start_time, window_end, &time); @@ -432,6 +448,19 @@ button_press_event( GtkWidget *widget, GdkEventButton *event, gpointer user_data return FALSE; } +static gboolean +scrollbar_size_request(GtkWidget *widget, + GtkRequisition *requisition, + gpointer user_data) +{ + Drawing_t *drawing = (Drawing_t*)user_data; + + gtk_widget_set_size_request(drawing->padding, requisition->width, -1); + //gtk_widget_queue_resize(drawing->padding); + //gtk_widget_queue_resize(drawing->ruler); + gtk_container_check_resize(GTK_CONTAINER(drawing->ruler_hbox)); + return 0; +} @@ -442,14 +471,53 @@ Drawing_t *drawing_construct(ControlFlowData *control_flow_data) drawing->control_flow_data = control_flow_data; drawing->vbox = gtk_vbox_new(FALSE, 1); + + + drawing->ruler_hbox = gtk_hbox_new(FALSE, 1); drawing->ruler = gtk_drawing_area_new (); + gtk_widget_add_events(drawing->ruler, GDK_BUTTON_PRESS_MASK); gtk_widget_set_size_request(drawing->ruler, -1, 27); + drawing->padding = gtk_drawing_area_new (); + gtk_widget_add_events(drawing->padding, GDK_BUTTON_PRESS_MASK); + //gtk_widget_set_size_request(drawing->padding, -1, 27); + gtk_box_pack_start(GTK_BOX(drawing->ruler_hbox), drawing->ruler, + TRUE, TRUE, 0); + gtk_box_pack_end(GTK_BOX(drawing->ruler_hbox), drawing->padding, + FALSE, FALSE, 0); + + + drawing->drawing_area = gtk_drawing_area_new (); + + drawing->gc = NULL; + + drawing->hbox = gtk_hbox_new(FALSE, 1); + drawing->viewport = gtk_viewport_new(NULL, control_flow_data->v_adjust); + drawing->scrollbar = gtk_vscrollbar_new(control_flow_data->v_adjust); + gtk_box_pack_start(GTK_BOX(drawing->hbox), drawing->viewport, + TRUE, TRUE, 0); + gtk_box_pack_end(GTK_BOX(drawing->hbox), drawing->scrollbar, + FALSE, FALSE, 0); + + //drawing->scrolled_window = + // gtk_scrolled_window_new (NULL, + // control_flow_data->v_adjust); + + //gtk_scrolled_window_set_policy( + // GTK_SCROLLED_WINDOW(drawing->scrolled_window), + // GTK_POLICY_NEVER, + // GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(drawing->vbox), drawing->ruler, + gtk_container_add(GTK_CONTAINER(drawing->viewport), + drawing->drawing_area); + //gtk_scrolled_window_add_with_viewport( + // GTK_SCROLLED_WINDOW(drawing->scrolled_window), + // drawing->drawing_area); + + gtk_box_pack_start(GTK_BOX(drawing->vbox), drawing->ruler_hbox, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(drawing->vbox), drawing->drawing_area, + gtk_box_pack_end(GTK_BOX(drawing->vbox), drawing->hbox, TRUE, TRUE, 0); drawing->pango_layout = @@ -457,8 +525,8 @@ Drawing_t *drawing_construct(ControlFlowData *control_flow_data) drawing->dotted_gc = NULL; - drawing->height = 0; - drawing->width = 0; + drawing->height = 1; + drawing->width = 1; drawing->depth = 0; drawing->damage_begin = 0; @@ -520,6 +588,13 @@ Drawing_t *drawing_construct(ControlFlowData *control_flow_data) (gpointer)drawing); + g_signal_connect (G_OBJECT(drawing->scrollbar), + "size-request", + G_CALLBACK(scrollbar_size_request), + (gpointer)drawing); + + + g_signal_connect (G_OBJECT(drawing->drawing_area), "expose_event", G_CALLBACK (expose_event), @@ -536,8 +611,15 @@ Drawing_t *drawing_construct(ControlFlowData *control_flow_data) (gpointer)drawing); gtk_widget_show(drawing->ruler); + gtk_widget_show(drawing->padding); + gtk_widget_show(drawing->ruler_hbox); + gtk_widget_show(drawing->drawing_area); - + //gtk_widget_show(drawing->scrolled_window); + gtk_widget_show(drawing->viewport); + gtk_widget_show(drawing->scrollbar); + gtk_widget_show(drawing->hbox); + return drawing; } @@ -547,7 +629,9 @@ void drawing_destroy(Drawing_t *drawing) g_info("drawing_destroy %p", drawing); // Do not unref here, Drawing_t destroyed by it's widget. //g_object_unref( G_OBJECT(drawing->drawing_area)); - + if(drawing->gc != NULL) + gdk_gc_unref(drawing->gc); + g_free(drawing->pango_layout); if(!drawing->dotted_gc) gdk_gc_unref(drawing->dotted_gc); g_free(drawing); @@ -632,7 +716,7 @@ void drawing_insert_square(Drawing_t *drawing, /* Allocate a new pixmap with new height */ GdkPixmap *pixmap = gdk_pixmap_new(drawing->drawing_area->window, drawing->width + SAFETY, - drawing->height + height + SAFETY, + drawing->height + height, -1); /* Copy the high region */ @@ -662,9 +746,7 @@ void drawing_insert_square(Drawing_t *drawing, drawing->pixmap, 0, y, 0, y + height, - drawing->width+SAFETY, drawing->height - y + SAFETY); - - + drawing->width+SAFETY, drawing->height - y); if (drawing->pixmap) @@ -672,8 +754,14 @@ void drawing_insert_square(Drawing_t *drawing, drawing->pixmap = pixmap; - drawing->height+=height; - + if(drawing->height==1) drawing->height = height; + else drawing->height += height; + + gtk_widget_set_size_request(drawing->drawing_area, + -1, + drawing->height); + gtk_widget_queue_resize_no_redraw(drawing->drawing_area); + /* ask for the buffer to be redrawn */ gtk_widget_queue_draw_area ( drawing->drawing_area, 0, y, @@ -693,7 +781,7 @@ void drawing_remove_square(Drawing_t *drawing, GdkPixmap *pixmap = gdk_pixmap_new( drawing->drawing_area->window, drawing->width + SAFETY, - drawing->height - height + SAFETY, + drawing->height - height, -1); /* Copy the high region */ @@ -712,7 +800,7 @@ void drawing_remove_square(Drawing_t *drawing, drawing->pixmap, 0, y + height, 0, y, - drawing->width, drawing->height - y - height + SAFETY); + drawing->width, drawing->height - y - height); if (drawing->pixmap) @@ -722,6 +810,10 @@ void drawing_remove_square(Drawing_t *drawing, drawing->height-=height; + gtk_widget_set_size_request(drawing->drawing_area, + -1, + drawing->height); + gtk_widget_queue_resize_no_redraw(drawing->drawing_area); /* ask for the buffer to be redrawn */ gtk_widget_queue_draw_area ( drawing->drawing_area, 0, y, diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h index a36fdf49..37dfc838 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.h @@ -60,7 +60,14 @@ typedef struct _Drawing_t Drawing_t; struct _Drawing_t { GtkWidget *vbox; GtkWidget *drawing_area; + //GtkWidget *scrolled_window; + GtkWidget *hbox; + GtkWidget *viewport; + GtkWidget *scrollbar; + + GtkWidget *ruler_hbox; GtkWidget *ruler; + GtkWidget *padding; GdkPixmap *pixmap; ControlFlowData *control_flow_data; @@ -72,6 +79,7 @@ struct _Drawing_t { gint damage_begin, damage_end; LttTime last_start; GdkGC *dotted_gc; + GdkGC *gc; }; Drawing_t *drawing_construct(ControlFlowData *control_flow_data); @@ -120,5 +128,4 @@ void drawing_update_ruler(Drawing_t *drawing, TimeWindow *time_window); void drawing_data_request_end(EventsRequest *events_request, LttvTracesetState *tss); - #endif // _DRAWING_H diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c index 5ac72454..98b13d27 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c @@ -270,7 +270,7 @@ int draw_event_hook(void *hook_data, void *call_data) g_debug("out : %s",g_quark_to_string(process_out->state->s)); birth = process_out->creation_time; - gchar *name = strdup(g_quark_to_string(process_out->name)); + const gchar *name = g_quark_to_string(process_out->name); HashedProcessData *hashed_process_data_out = NULL; if(processlist_get_process_pixels(process_list, @@ -281,25 +281,24 @@ int draw_event_hook(void *hook_data, void *call_data) &height, &hashed_process_data_out) == 1) { - /* Process not present */ - processlist_add(process_list, - pid_out, - &birth, - tfc->t_context->index, - name, - &pl_height, - &hashed_process_data_out); - processlist_get_process_pixels(process_list, - pid_out, - &birth, - tfc->t_context->index, - &y_out, - &height, - &hashed_process_data_out); - drawing_insert_square( control_flow_data->drawing, y_out, height); + /* Process not present */ + processlist_add(process_list, + pid_out, + &birth, + tfc->t_context->index, + name, + &pl_height, + &hashed_process_data_out); + g_assert(processlist_get_process_pixels(process_list, + pid_out, + &birth, + tfc->t_context->index, + &y_out, + &height, + &hashed_process_data_out)==0); + drawing_insert_square( control_flow_data->drawing, y_out, height); } - - g_free(name); + //g_free(name); /* Find process pid_in in the list... */ process_in = lttv_state_find_process(tfs, pid_in); @@ -307,7 +306,7 @@ int draw_event_hook(void *hook_data, void *call_data) g_debug("in : %s",g_quark_to_string(process_in->state->s)); birth = process_in->creation_time; - name = strdup(g_quark_to_string(process_in->name)); + name = g_quark_to_string(process_in->name); HashedProcessData *hashed_process_data_in = NULL; if(processlist_get_process_pixels(process_list, @@ -318,7 +317,7 @@ int draw_event_hook(void *hook_data, void *call_data) &height, &hashed_process_data_in) == 1) { - /* Process not present */ + /* Process not present */ processlist_add(process_list, pid_in, &birth, @@ -336,13 +335,13 @@ int draw_event_hook(void *hook_data, void *call_data) drawing_insert_square( control_flow_data->drawing, y_in, height); } - g_free(name); + //g_free(name); /* Find pixels corresponding to time of the event. If the time does * not fit in the window, show a warning, not supposed to happend. */ guint x = 0; - guint width = control_flow_data->drawing->drawing_area->allocation.width; + guint width = control_flow_data->drawing->width; LttTime time = ltt_event_time(e); @@ -357,7 +356,7 @@ int draw_event_hook(void *hook_data, void *call_data) width, &x); //assert(x <= width); - + // /* draw what represents the event for outgoing process. */ DrawContext *draw_context_out = hashed_process_data_out->draw_context; @@ -404,8 +403,9 @@ int draw_event_hook(void *hook_data, void *call_data) if(process_out->state->s == LTTV_STATE_RUN) { - draw_context_out->gc = gdk_gc_new(control_flow_data->drawing->pixmap); - gdk_gc_copy(draw_context_out->gc, widget->style->black_gc); + //draw_context_out->gc = gdk_gc_new(control_flow_data->drawing->pixmap); + //gdk_gc_copy(draw_context_out->gc, widget->style->black_gc); + draw_context_out->gc = control_flow_data->drawing->gc; PropertiesBG prop_bg; prop_bg.color = g_new(GdkColor,1); @@ -440,7 +440,7 @@ int draw_event_hook(void *hook_data, void *call_data) g_debug("calling from draw_event"); draw_bg((void*)&prop_bg, (void*)draw_context_out); g_free(prop_bg.color); - gdk_gc_unref(draw_context_out->gc); + //gdk_gc_unref(draw_context_out->gc); } draw_context_out->gc = widget->style->black_gc; @@ -517,8 +517,9 @@ int draw_event_hook(void *hook_data, void *call_data) draw_text((void*)&prop_text_out, (void*)draw_context_out); //gdk_gc_unref(draw_context_out->gc); - draw_context_out->gc = gdk_gc_new(control_flow_data->drawing->pixmap); - gdk_gc_copy(draw_context_out->gc, widget->style->black_gc); + //draw_context_out->gc = gdk_gc_new(control_flow_data->drawing->pixmap); + //gdk_gc_copy(draw_context_out->gc, widget->style->black_gc); + draw_context_out->gc = control_flow_data->drawing->gc; PropertiesLine prop_line_out; prop_line_out.color = g_new(GdkColor,1); @@ -574,7 +575,7 @@ int draw_event_hook(void *hook_data, void *call_data) draw_line((void*)&prop_line_out, (void*)draw_context_out); g_free(prop_line_out.color); - gdk_gc_unref(draw_context_out->gc); + //gdk_gc_unref(draw_context_out->gc); /* Note : finishing line will have to be added when trace read over. */ /* Finally, update the drawing context of the pid_in. */ @@ -625,8 +626,9 @@ int draw_event_hook(void *hook_data, void *call_data) if(process_in->state->s == LTTV_STATE_RUN) { - draw_context_in->gc = gdk_gc_new(control_flow_data->drawing->pixmap); - gdk_gc_copy(draw_context_in->gc, widget->style->black_gc); + //draw_context_in->gc = gdk_gc_new(control_flow_data->drawing->pixmap); + //gdk_gc_copy(draw_context_in->gc, widget->style->black_gc); + draw_context_in->gc = control_flow_data->drawing->gc; PropertiesBG prop_bg; prop_bg.color = g_new(GdkColor,1); @@ -661,7 +663,7 @@ int draw_event_hook(void *hook_data, void *call_data) draw_bg((void*)&prop_bg, (void*)draw_context_in); g_free(prop_bg.color); - gdk_gc_unref(draw_context_in->gc); + //gdk_gc_unref(draw_context_in->gc); } draw_context_in->gc = widget->style->black_gc; @@ -740,8 +742,9 @@ int draw_event_hook(void *hook_data, void *call_data) draw_text((void*)&prop_text_in, (void*)draw_context_in); //gdk_gc_unref(draw_context_in->gc); - draw_context_in->gc = gdk_gc_new(control_flow_data->drawing->pixmap); - gdk_gc_copy(draw_context_in->gc, widget->style->black_gc); + //draw_context_in->gc = gdk_gc_new(control_flow_data->drawing->pixmap); + //gdk_gc_copy(draw_context_in->gc, widget->style->black_gc); + draw_context_in->gc = control_flow_data->drawing->gc; PropertiesLine prop_line_in; prop_line_in.color = g_new(GdkColor,1); @@ -795,12 +798,12 @@ int draw_event_hook(void *hook_data, void *call_data) draw_line((void*)&prop_line_in, (void*)draw_context_in); g_free(prop_line_in.color); - gdk_gc_unref(draw_context_in->gc); + //gdk_gc_unref(draw_context_in->gc); } return 0; - /* Temp dump */ + /* Text dump */ #ifdef DONTSHOW GString *string = g_string_new("");; gboolean field_names = TRUE, state = TRUE; @@ -890,22 +893,22 @@ int draw_after_hook(void *hook_data, void *call_data) &height, &hashed_process_data_out) == 1) { - /* Process not present */ - processlist_add(process_list, - pid_out, - &birth, - tfc->t_context->index, - name, - &pl_height, - &hashed_process_data_out); - processlist_get_process_pixels(process_list, - pid_out, - &birth, - tfc->t_context->index, - &y_out, - &height, - &hashed_process_data_out); - drawing_insert_square( control_flow_data->drawing, y_out, height); + /* Process not present */ + processlist_add(process_list, + pid_out, + &birth, + tfc->t_context->index, + name, + &pl_height, + &hashed_process_data_out); + processlist_get_process_pixels(process_list, + pid_out, + &birth, + tfc->t_context->index, + &y_out, + &height, + &hashed_process_data_out); + drawing_insert_square( control_flow_data->drawing, y_out, height); } g_free(name); @@ -1336,7 +1339,7 @@ gint update_time_window_hook(void *hook_data, void *call_data) g_info("scrolling near right"); /* Scroll right, keep right part of the screen */ guint x = 0; - guint width = control_flow_data->drawing->drawing_area->allocation.width; + guint width = control_flow_data->drawing->width; convert_time_to_pixels( *os, old_end, @@ -1366,9 +1369,9 @@ gint update_time_window_hook(void *hook_data, void *call_data) TRUE, drawing->damage_begin+SAFETY, 0, drawing->damage_end - drawing->damage_begin, // do not overlap - control_flow_data->drawing->height+SAFETY); + control_flow_data->drawing->height); - gtk_widget_queue_draw_area (drawing->drawing_area, + gtk_widget_queue_draw_area (drawing->drawing_area, 0,0, control_flow_data->drawing->width, control_flow_data->drawing->height); @@ -1389,7 +1392,7 @@ gint update_time_window_hook(void *hook_data, void *call_data) g_info("scrolling near left"); /* Scroll left, keep left part of the screen */ guint x = 0; - guint width = control_flow_data->drawing->drawing_area->allocation.width; + guint width = control_flow_data->drawing->width; convert_time_to_pixels( *ns, new_end, @@ -1406,13 +1409,11 @@ gint update_time_window_hook(void *hook_data, void *call_data) x, 0, -1, -1); - *old_time_window = *new_time_window; - if(drawing->damage_begin == drawing->damage_end) drawing->damage_end = x; else drawing->damage_end = - control_flow_data->drawing->drawing_area->allocation.width; + control_flow_data->drawing->width; drawing->damage_begin = 0; @@ -1421,7 +1422,7 @@ gint update_time_window_hook(void *hook_data, void *call_data) TRUE, drawing->damage_begin, 0, drawing->damage_end - drawing->damage_begin, // do not overlap - control_flow_data->drawing->height+SAFETY); + control_flow_data->drawing->height); gtk_widget_queue_draw_area (drawing->drawing_area, 0,0, @@ -1450,7 +1451,7 @@ gint update_time_window_hook(void *hook_data, void *call_data) TRUE, 0, 0, control_flow_data->drawing->width+SAFETY, // do not overlap - control_flow_data->drawing->height+SAFETY); + control_flow_data->drawing->height); gtk_widget_queue_draw_area (drawing->drawing_area, 0,0, @@ -1478,7 +1479,7 @@ gint update_time_window_hook(void *hook_data, void *call_data) TRUE, 0, 0, control_flow_data->drawing->width+SAFETY, // do not overlap - control_flow_data->drawing->height+SAFETY); + control_flow_data->drawing->height); gtk_widget_queue_draw_area (drawing->drawing_area, 0,0, @@ -1507,7 +1508,7 @@ gint traceset_notify(void *hook_data, void *call_data) GtkWidget *widget = drawing->drawing_area; drawing->damage_begin = 0; - drawing->damage_end = widget->allocation.width; + drawing->damage_end = drawing->width; // Clear the image @@ -1515,8 +1516,8 @@ gint traceset_notify(void *hook_data, void *call_data) widget->style->black_gc, TRUE, 0, 0, - widget->allocation.width+SAFETY, - widget->allocation.height+SAFETY); + drawing->width+SAFETY, + drawing->height); if(drawing->damage_begin < drawing->damage_end) @@ -1526,7 +1527,7 @@ gint traceset_notify(void *hook_data, void *call_data) drawing->damage_begin, 0, drawing->damage_end-drawing->damage_begin, - widget->allocation.height); + drawing->height); } gtk_widget_queue_draw_area(drawing->drawing_area, @@ -1546,7 +1547,7 @@ gint redraw_notify(void *hook_data, void *call_data) GtkWidget *widget = drawing->drawing_area; drawing->damage_begin = 0; - drawing->damage_end = widget->allocation.width; + drawing->damage_end = drawing->width; // Clear the image @@ -1554,8 +1555,8 @@ gint redraw_notify(void *hook_data, void *call_data) widget->style->black_gc, TRUE, 0, 0, - widget->allocation.width+SAFETY, - widget->allocation.height+SAFETY); + drawing->width+SAFETY, + drawing->height); if(drawing->damage_begin < drawing->damage_end) @@ -1565,7 +1566,7 @@ gint redraw_notify(void *hook_data, void *call_data) drawing->damage_begin, 0, drawing->damage_end-drawing->damage_begin, - widget->allocation.height); + drawing->height); } gtk_widget_queue_draw_area(drawing->drawing_area, @@ -1593,7 +1594,7 @@ gint continue_notify(void *hook_data, void *call_data) drawing->damage_begin, 0, drawing->damage_end-drawing->damage_begin, - widget->allocation.height); + drawing->height); } return FALSE; @@ -1745,7 +1746,7 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) /* Find pixels corresponding to current time . If the time does * not fit in the window, show a warning, not supposed to happend. */ guint x = 0; - guint width = control_flow_data->drawing->drawing_area->allocation.width; + guint width = control_flow_data->drawing->width; TimeWindow time_window = lttvwindow_get_time_window(control_flow_data->tab); @@ -1774,8 +1775,9 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) draw_context->drawable = control_flow_data->drawing->pixmap; draw_context->pango_layout = control_flow_data->drawing->pango_layout; //draw_context->gc = widget->style->black_gc; - draw_context->gc = gdk_gc_new(control_flow_data->drawing->pixmap); - gdk_gc_copy(draw_context->gc, widget->style->black_gc); + //draw_context->gc = gdk_gc_new(control_flow_data->drawing->pixmap); + //gdk_gc_copy(draw_context->gc, widget->style->black_gc); + draw_context->gc = control_flow_data->drawing->gc; if(process != NULL && process->state->s == LTTV_STATE_RUN) { @@ -1879,7 +1881,7 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) draw_line((void*)&prop_line, (void*)draw_context); g_free(prop_line.color); - gdk_gc_unref(draw_context->gc); + //gdk_gc_unref(draw_context->gc); /* Reset draw_context of the process for next request */ diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c index 7b5885b1..6c450afe 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c @@ -238,7 +238,6 @@ ProcessList *processlist_construct(void) process_list->process_list_widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (process_list->list_store)); - g_object_unref (G_OBJECT (process_list->list_store)); gtk_tree_sortable_set_sort_func( @@ -367,7 +366,7 @@ int processlist_add( ProcessList *process_list, guint pid, LttTime *birth, guint trace_num, - gchar *name, + const gchar *name, guint *height, HashedProcessData **pm_hashed_process_data) { @@ -481,12 +480,16 @@ int processlist_remove( ProcessList *process_list, process_list->process_hash, &Process_Info)) { + GtkTreePath *tree_path; + + tree_path = gtk_tree_row_reference_get_path( + hashed_process_data->row_ref); + gtk_tree_model_get_iter ( GTK_TREE_MODEL(process_list->list_store), - &iter, - gtk_tree_row_reference_get_path( - (GtkTreeRowReference*)hashed_process_data->row_ref) - ); + &iter, tree_path); + + gtk_tree_path_free(tree_path); gtk_list_store_remove (process_list->list_store, &iter); @@ -554,6 +557,8 @@ gint processlist_get_process_pixels( ProcessList *process_list, GTK_TREE_VIEW(process_list->process_list_widget)); *y = *height * path_indices[0]; *pm_hashed_process_data = hashed_process_data; + gtk_tree_path_free(tree_path); + return 0; } else { *pm_hashed_process_data = hashed_process_data; @@ -579,6 +584,7 @@ gint processlist_get_pixels_from_data( ProcessList *process_list, *height = get_cell_height( GTK_TREE_VIEW(process_list->process_list_widget)); *y = *height * path_indices[0]; + gtk_tree_path_free(tree_path); return 0; diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h index 20d39b9b..11233789 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h @@ -76,7 +76,7 @@ GtkWidget *processlist_get_widget(ProcessList *process_list); // out : success (0) and height int processlist_add(ProcessList *process_list, guint pid, LttTime *birth, - guint trace_num, gchar *name, guint *height, + guint trace_num, const gchar *name, guint *height, HashedProcessData **hashed_process_data); // out : success (0) and height int processlist_remove(ProcessList *process_list, guint pid, LttTime *birth, -- 2.34.1