Re: GPtrArray
- From: Diego Jacobi <jacobidiego gmail com>
- To: gtk-list gnome org
- Subject: Re: GPtrArray
- Date: Sat, 21 Mar 2009 22:12:37 +0100
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 gmail com>:
> 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 gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-list
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]