Re: Segmentation fault in creating basic app using GTK+ (with C)

2014-07-14 Thread David Nečas
On Tue, Jul 01, 2014 at 01:39:03AM -0700, Anoop Neem wrote:
   p-one = textEntry;
   p-two = label;

Here the unititialised textEntry and label pointers are assigned to the
struct fields.

   textEntry = gtk_entry_new();
   calButton = gtk_button_new_with_label(Calculate);

And here, much laters, they are actually initialised.

Regards,

Yeti

___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


Re: Segmentation fault in creating basic app using GTK+ (with C)

2014-07-14 Thread zz
On Tuesday 01 July 2014 10:39:03 Anoop Neem wrote:

Hi,
try:
p-two = label = gtk_label_new(a);
p-one = textEntry = gtk_entry_new()

hope this helps,
zz
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


Re: Segmentation fault in creating basic app using GTK+ (with C)

2014-07-14 Thread Marcus Karlsson
On Tue, Jul 01, 2014 at 01:39:03AM -0700, Anoop Neem wrote:
 This application is intended to convert value entered in Text entry
 field (in Celcius) to Farenheit in label. I was having hard time in
 altering the properties of two widgets (other than calling widget) in
 the same callback, hence created a structure 'struct mulptr' for passing
 two widgets. But when i click on the button application closes giving me
 some error:
 
 
 xxx@ubuntu:~/gtk$ gcc `pkg-config --cflags gtk+-3.0` -o 4 4.c
 `pkg-config --libs gtk+-3.0`
 xxx@ubuntu:~/gtk$ ./4
 
 (4:4221): Gtk-CRITICAL **: gtk_entry_get_text: assertion 'GTK_IS_ENTRY
 (entry)' failed
 Segmentation fault (core dumped)

This basically means that the pointer that you passed to
gtk_entry_get_text was not pointing to a GtkEntry.

 -
 #includegtk/gtk.h
 #includestring.h
 #includestdlib.h
 
 char a[15] = Result here;
 
 struct mulptr
 {
   GtkWidget *one;
   GtkWidget *two;
 };
 
 int tofarenheit(int c)
 {
   return (c*1.8 + 32);
 }
 
 void calculate(GtkWidget *widget, gpointer data)
 {
   GtkWidget *textEntry = ((struct mulptr *)data)-one;
   GtkWidget *label = ((struct mulptr *)data)-two;
   int res = 0, F;
 
   res = atoi(gtk_entry_get_text(GTK_ENTRY(textEntry)));
   if(res)
   {   
   F = tofarenheit(res);
   sprintf(a, %d, F);
   }
   else
   strcpy(a, Invalid Input!);
   gtk_label_set_text(GTK_LABEL(label), a);
 }
 
 int main(int argc, char *argv[])
 {
   //Decleration
   GtkWidget *window;
   GtkWidget *calButton;
   GtkWidget *textEntry;
   GtkWidget *label;
   GtkWidget *grid;
   struct mulptr *p = (struct mulptr *)malloc(sizeof(struct mulptr));  
   p-one = textEntry;

At this point textEntry is still not initialized, so all this did was
copy the uninitialized value from textEntry to p-one.

   p-two = label;
   
   //Initilization
   gtk_init(argc, argv);
 
   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   //gtk_window_set_default_size(GTK_WINDOW(window), 480, 320);
   gtk_window_set_title(GTK_WINDOW(window), Celcius to Ferenheit
 Converter);
   gtk_container_set_border_width(GTK_CONTAINER(window), 10);
   grid = gtk_grid_new();
   
   label = gtk_label_new(a);
   textEntry = gtk_entry_new();

And here you assign textEntry with the pointer to your new GtkEntry, but
p-one is not updated and sill contains the old value which is used in
calculate.

   calButton = gtk_button_new_with_label(Calculate);
 
   //Adding widget to frame
   gtk_container_add(GTK_CONTAINER(window), grid);
   gtk_grid_attach(GTK_GRID(grid), textEntry, 0, 0, 1, 1);
   gtk_grid_attach(GTK_GRID(grid), label, 1, 0, 1, 1);
   gtk_grid_attach(GTK_GRID(grid), calButton, 0, 1, 1, 1);
 
   
   //Signal Handlers
   g_signal_connect (window, delete-event, G_CALLBACK (gtk_main_quit),
 NULL);
   g_signal_connect (calButton, clicked, G_CALLBACK(calculate), p);  
   
 
   //Essentials
   gtk_widget_show_all(window);
   gtk_main();
   return 0;
 }
 -
 
 Please help me with this piece of code?? Is it all right to use this
 kind of struct??

In a large application sure, it makes sense to bundle related things
together as a struct and passit around; but that's not really necessary
in a small application like this. Since you're using Gtk you might just
as well want to check out GObject which formalizes a lot of this stuff.

Marcus
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list