Hello.
I'm am new to gtk+ and I try to write a simple application, I need to
read a double from an entry, I've already written a parsing
*char->double function but I can't even read from the entry using
gtk_editable_get_chars because I get Segmentation Fault. I don't know
what is the reason for this, so I'll post parts of the code so that
you could help me in finding the bug:


calculate.c
===================

#include <glib.h>
#include <gtk/gtkwidget.h>
#include <gtk/gtkentry.h>

#include <stdio.h>

#include "calculate.h"
#include "main_window.h"

/* ... */

void calculate_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
{
        double a = 0;
        gchar *s = NULL;
        MainWindow *main_window = (MainWindow *)data;

        /*
         *   segmentation fault here
         */
        s = gtk_editable_get_chars(GTK_EDITABLE(main_window->a_entry),
0, -1);

        if (parse_double(s, &a)) {
                DO_SOME_STUFF_WITH_IT(a);

        g_free((gpointer)s);
}

=====================
main_window.c
=====================

#include <glib.h>
/* ... */
#include <gtk/gtkmain.h>

#include "main_window.h"
#include "calculate.h"

/* ... */

MainWindow *main_window_create(void)
{
        MainWindow *main_window;

        main_window = g_malloc(sizeof(MainWindow));

        main_window->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

      /* ...... oter widgets, callbacks ................ */

        main_window->calc_btn = gtk_button_new_with_label("calculate");
        g_signal_connect(G_OBJECT(main_window->calc_btn), "clicked",
                G_CALLBACK(calculate_cb), main_window);

        main_window->a_entry = gtk_entry_new();
        gtk_entry_set_max_length(GTK_ENTRY(main_window->a_entry),
ENTRY_MAX_LEN);

       /* doesn't show main_window->window */
       show_all_widgets(&main_window);

       /* ..... putting in a table ............ */

        gtk_widget_show(main_window->window);

        return main_window;
}

================
main.c
================
#include <stdio.h>

#include <glib.h>
#include <gtk/gtkmain.h>

#include "main_window.h"

int main(int argc, char *argv[])
{
        MainWindow *main_window;
        gtk_init(&argc, &argv);
        main_window = main_window_create();
        gtk_main();
        return 0;
}
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to