[Glade-devel] auto connect signals

Xiao Yafeng xyf.xiao at gmail.com
Thu Aug 6 01:59:33 EDT 2009


Thanks for reply!
I modify the code as suggested and rerun:
hello.c:
#include <gtk/gtk.h>

void on_button_quit_clicked (GtkWidget *button, gpointer userdata){
    gtk_main_quit();
}

int main (int argc, char **argv){
    GtkBuilder *builder;
    GtkWidget *window;
    GtkWidget *button;
    gtk_init (&argc, &argv);
    builder = gtk_builder_new();
     window = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));
    gtk_builder_add_from_file(builder, "hello.glade", NULL);
    gtk_builder_connect_signals(builder, NULL);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

hello.glade:
<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window1">
    <child>
      <object class="GtkVPaned" id="vpaned1">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkLabel" id="label1">
            <property name="visible">True</property>
            <property name="label" translatable="yes">label</property>
          </object>
          <packing>
            <property name="resize">False</property>
            <property name="shrink">True</property>
          </packing>
        </child>
        <child>
          <object class="GtkHBox" id="hbox1">
            <property name="visible">True</property>
            <child>
              <placeholder/>
            </child>
            <child>
              <object class="GtkHButtonBox" id="hbuttonbox1">
                <property name="visible">True</property>
                <child>
                  <object class="GtkButton" id="button_quit">
                    <property name="label"
translatable="yes">quit</property>
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">True</property>
                    <signal name="clicked"
handler="on_button_quit_clicked"/>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">False</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkButton" id="button2">
                    <property name="label"
translatable="yes">button</property>
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">True</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">False</property>
                    <property name="position">1</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <placeholder/>
            </child>
          </object>
          <packing>
            <property name="resize">True</property>
            <property name="shrink">True</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>


error messages:
                (hello:12512): Gtk-WARNING **: Could not find signal handler
'on_button_quit_clicked'
Segmentation fault


new error message confuse me. It seems I do not pass the callback function
to button widget successfully.  I 've tried to connect signals explicit:
first, ERASE signal handler in hello.glade.
hello.c
          #include <gtk/gtk.h>

void on_button_quit_clicked (GtkWidget *button, gpointer userdata){
    gtk_main_quit();
}

int main (int argc, char **argv){
    GtkBuilder *builder;
    GtkWidget *window;
    GtkWidget *button;
    gtk_init (&argc, &argv);
    builder = gtk_builder_new();
    gtk_builder_add_from_file(builder, "hello.glade", NULL);
    window = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));

    button = GTK_WIDGET(gtk_builder_get_object(builder,"button_quit"));
    g_signal_connect( G_OBJECT(button), "clicked",
            G_CALLBACK(on_button_quit_clicked), NULL);
    gtk_builder_connect_signals(builder, NULL);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

Above code could be run correctly, but writing many g_signal_connect is very
tedious.
Is there a way to auto connect callback function to widget designed by glade
or I miss something?









On Thu, Aug 6, 2009 at 12:18 PM, Tristan Van Berkom <
tristan.van.berkom at gmail.com> wrote:

> On Wed, Aug 5, 2009 at 11:37 PM, Xiao Yafeng<xyf.xiao at gmail.com> wrote:
> > I'm new to glade programming. below is my first gtk+ snippet with glade.
> > hello.c:
> [...]
> > error message:
> >
> > (hello:8403): Gtk-WARNING **: Could not lookup object NULL on signal
> clicked
> > of object button_quit
> >
> > (hello:8403): Gtk-CRITICAL **: gtk_main_quit: assertion `main_loops !=
> NULL'
> > failed
> > Segmentation fault
> >
> >
> > It seems NULL is cause of failure, but who can post a correct code to
> prove
> > my guess?
> >
>
> The "object" parameter is a string to be set by the user in Glade - I have
> no
> idea how you ended up with the string NULL, it should just be empty if you
> dont want to specify an object.
>
> Note also when using the "object" (userdata) field, the specified object
> will
> be swapped with the emitting object and thus come first in the callback`s
> argument list (the string specified for "object" is a name of another
> object
> in the same Glade file).
>
> Cheers,
>           -Tristan
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/glade-devel/attachments/20090806/f768783a/attachment-0001.html 


More information about the Glade-devel mailing list