[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: seg fault while moving a event box



Wonder why the compiler did not catch it. 
Any ideas ? 

Also can someone point me to a link or explain what is
the difference between a signal and an event ?

Regards,
Abhijeet 
--- abhi <abhi_don_linux yahoo com> wrote:

> 
> Sorry folks,
>   the declaration of the move callback has to be 
> 
>  static void move( GtkWidget *widget,
>                   GdkEventButton *event,
>                          GtkWidget *layout )
> 
> I was missing the event parameter and that probably
> caused the casting errors.
> 
> Thanks for reading,
> Regards,
> Abhijeet 
> 
> 
> --- abhi <abhi_don_linux yahoo com> wrote:
> 
> > Hello List,
> > 
> >   This is my first GTK app and I want to move the
> > image when the user clicks on it. I created an
> > eventbox  and placed it on a GtkLayout. I catch
> the
> > mouse_pressed event but when I move the event_bx I
> > get
> > a segfault. I dont have the symbols from the
> > libraries
> > but gdb tells me this
> > 
> > 
> > Breakpoint 1, move (widget=0x94a10e8,
> > layout=0x94aef68) at g2.c:14
> > 14       
> g_print("button_press_event_received\n");
> > (gdb) step
> > button_press_event_received
> > 15        x = (x + 30) % 300;
> > (gdb) step
> > 16        y = (y + 50) % 300;
> > (gdb) step
> > 18        gtk_layout_get_size ( GTK_LAYOUT
> (layout)
> > ,
> > &width, &height);
> > (gdb) print width
> > $1 = -1073765136
> > (gdb) print height
> > $2 = 155848184
> > (gdb) step
> > 
> > Program received signal SIGSEGV, Segmentation
> fault.
> > 0x0017015c in g_type_check_instance_cast () from
> > /usr/lib/libgobject-2.0.so.0
> > (gdb) Quit
> >  
> > 
> > The source code is as follows
> > #include <gtk/gtk.h>
> > #include <stdlib.h>
> > gint x = 50;
> > gint y = 50;
> > GtkWidget *image = NULL;
> > /* This callback function moves the button to a
> new
> > position
> >  * in the layout container. */
> > static void move( GtkWidget *widget,
> >                          GtkWidget *layout )
> > {
> >   gint width,height;
> >   g_print("button_press_event_received\n");
> >   x = (x + 30) % 300;
> >   y = (y + 50) % 300;
> >   gtk_layout_get_size ( GTK_LAYOUT (layout) ,
> > &width,
> > &height);
> >   gtk_layout_move ( GTK_LAYOUT(layout), widget ,
> x,
> > y); 
> > }
> > void usage()
> > {
> >    g_print(" incorrect usage need a image
> > parameter\n");
> >    exit( EXIT_FAILURE );
> > }
> > int main( int   argc,
> >           char *argv[] )
> > {
> >   /* GtkWidget is the storage type for widgets */
> >   GtkWidget *window;
> >   GtkWidget *layout;
> >   GtkWidget *event_box;
> >   GtkWidget *button;
> >   GdkPixbuf *pixbuf;
> >   gint i;
> > 
> >   if (argc < 2)  usage();
> > 
> >   /* Initialise GTK */
> >   gtk_init (&argc, &argv);
> >     
> >   /* Create a new window */
> >   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
> >   gtk_window_set_title (GTK_WINDOW (window),
> "Layout
> > Container");
> > 
> >   /* Here we connect the "destroy" event to a
> signal
> > handler */ 
> >   g_signal_connect (G_OBJECT (window), "destroy",
> > 		    G_CALLBACK (gtk_main_quit), NULL);
> >  
> >   /* Sets the border width of the window. */
> >   gtk_container_set_border_width (GTK_CONTAINER
> > (window), 10);
> > 
> >   /* Create a Layout Container */
> >   layout = gtk_layout_new ( NULL, NULL);
> >   gtk_container_add (GTK_CONTAINER (window),
> > layout);
> >   gtk_widget_show (layout);
> >  
> >   /* Create an image widget form the pixbuf */
> >   pixbuf = gdk_pixbuf_new_from_file(argv[1],NULL);
> >   image = gtk_image_new_from_pixbuf (pixbuf);
> > 
> >   /* Create an event box and add image widget*/
> >   event_box = gtk_event_box_new ();
> >   gtk_container_add (GTK_CONTAINER (event_box),
> > image);
> >   gtk_widget_show (image);
> >    
> >   /*put the event box somewhere on the layout */
> >   gtk_layout_put (GTK_LAYOUT (layout), event_box,
> 50
> > ,
> > 50 );
> >   gtk_widget_show (event_box);
> > 
> >   /* And bind an action to it */
> >   gtk_widget_set_events (event_box,
> > GDK_BUTTON_PRESS_MASK);
> >   g_signal_connect (G_OBJECT (event_box),
> > "button_press_event",
> > 	              G_CALLBACK (move), layout);
> >   gtk_widget_realize (event_box);
> > 
> >   /* Display the window */
> >   gtk_widget_show (window);
> >     
> >   /* Enter the event loop */
> >   gtk_main ();
> >     
> >   return 0;
> > }
> > /*
> > gcc g2.c -o g2 `pkg-config --cflags --libs
> gtk+-2.0`
> > */
> > 
> > 
> > Any help educating me towards the cause of
> segfault
> > will be appreciated.
> > 
> > TIA,
> > Abhijeet 
> > 
> > 
> >      
> >
>
____________________________________________________________________________________
> > Be a better friend, newshound, and 
> > know-it-all with Yahoo! Mobile.  Try it now. 
> >
>
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
> > 
> > 
> > _______________________________________________
> > gtk-app-devel-list mailing list
> > gtk-app-devel-list gnome org
> >
>
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
> > 
> 
> 
> 
>      
>
____________________________________________________________________________________
> Be a better friend, newshound, and 
> know-it-all with Yahoo! Mobile.  Try it now. 
>
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
> 
> 
> 



      ____________________________________________________________________________________
Looking for last minute shopping deals?  
Find them fast with Yahoo! Search.  http://tools.search.yahoo.com/newsearch/category.php?category=shopping


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]