You are trying to remove N+1 elements of an array of N elements. ^^ Change this: g_ptr_array_remove_range(desenho->parray, 0, desenho->parray->len); for this: g_ptr_array_remove_range(desenho->parray, 0, desenho->parray->len-1); But i am sure that there is a simpler way to clear an array. 2009/3/21 frederico schardong <frede.sch@xxxxxxxxx>: > Hi list, > > I do a simples struct: > > typedef struct > { > GtkWidget *window; > GtkWidget *drawingArea; > GPtrArray *parray; > gint a; > } GtkDesenho; > > In main(): > > GtkDesenho *desenho; > > desenho = g_slice_new(GtkDesenho); > desenho->window = glade_xml_get_widget(xml, "window2"); > desenho->drawingArea= glade_xml_get_widget(xml, "drawing_area"); > > > gtk_window_set_title(GTK_WINDOW(desenho->window), "Drawing Areas"); > > gtk_widget_set_size_request(desenho->window, 400, 300); > > > > /* Create a pointer array to hold image data. Then, add event masks to the new > * drawing area widget. */ > desenho->parray = g_ptr_array_sized_new(500); > g_print("\n tamanho do array: %d", desenho->parray->len); > GTK_WIDGET_SET_FLAGS (desenho->drawingArea, GTK_CAN_FOCUS); > > gtk_widget_add_events (desenho->drawingArea, GDK_BUTTON_PRESS_MASK | > > GDK_BUTTON_MOTION_MASK | > > GDK_KEY_PRESS_MASK); > > > > > > > > gtk_container_add (GTK_CONTAINER (desenho->window), desenho->drawingArea); > > > // and call the events to the callbacks > > g_signal_connect(G_OBJECT(desenho->drawingArea), > "button_press_event", G_CALLBACK(button_pressed), desenho); > g_signal_connect(G_OBJECT(desenho->drawingArea), > "motion_notify_event", G_CALLBACK(button_pressed), desenho); > g_signal_connect(G_OBJECT(desenho->drawingArea), "expose_event", > G_CALLBACK(expose_event), desenho); > > //the button6 must clear the drawing area > > g_signal_connect(G_OBJECT(button6), "clicked", > G_CALLBACK(limpaDrawingArea), desenho); > > // out of main, here is my g_callback limpaDrawingArea > > static gboolean limpaDrawingArea(GtkWidget *a, GdkEventButton *event, > GtkDesenho *desenho) > > { > > gdk_window_clear(desenho->drawingArea->window); > g_ptr_array_remove_range(desenho->parray, 0, desenho->parray->len); > > return FALSE; > } > > It must clear my drawing area, or not? > > When I press the button6, this messages are showed: > > (main:10566): Gdk-CRITICAL **: gdk_window_clear: assertion `window != > NULL' failed > > (main:10566): GLib-CRITICAL **: g_ptr_array_remove_range: assertion > `index_ < array->len' failed > > What's happen? The callbacks button_press and expose_event are working > fine, and them use desenho->drawingArea->window, and > desenho->parray->len too, without showing anyone problem! > > Thank you! > -- > Abraço, > Frederico Schardong, > SOLIS - O lado livre da tecnologia > www.solis.coop.br > _______________________________________________ > gtk-list mailing list > gtk-list@xxxxxxxxx > http://mail.gnome.org/mailman/listinfo/gtk-list > _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list