Re: GtkDrawingArea realize event not connected when using libglade?



   Hello.
Sorry for the crosspost, I tought that gtk-app-devel-list wasn't working but what isn't working is my ISP, for some reason I don't receive the emails of this mailing lists so I have to watch the archives :-(, and since I sent this email to gtk-list too I think that it is apropiate to close this thread there as well since maybe someone answers it without knowing that I already discovered my problem. I will not disturb on gtk-list anymore. Well, now I get it! libglade first creates all widgets and *shows* them because that is what is told on the XML file, after that it autoconnects all the events, but it is already too late for the realize event since the widgets are already realized :-). Silly me... I couldn't figure it before. Solution: don't enable the visible attribute on widgets that you want to catch the realize event and show this widgets manually with your own code after all signals are autoconnected.
   Thank you and goodbye.

P.s.: now I need to figure out why the unrealize signal isn't emitted, but maybe because I use gtk_main_quit instead of destroying the main window...



El 12/06/06 19:36, Ivan Baldo escribió:

   Hello.
I must be doing something wrong but I don't know what is it, I can't believe that it is a bug in libglade since it should hit a lot of applications and people and I am not very experienced with GTK2 (I used GTK1 some long time ago though). It seems that libglade is not connecting the realize event of the drawing area but I can't believe it. Can someone tell what I am doing wrong or what I am missing? I googled for this, read a lot of documentation, invested like 4 hours and still don't get it. I know I can do some workarounds to what I am trying to do, but I think that it is better to learn. Your toughts are very appreciated.
   Here is my testglade.c file:

/*
   Compile with:
gcc -Wall -o testglade testglade.c $(pkg-config libglade-2.0 --cflags --libs) -export-dynamic
*/

#include <gtk/gtk.h>
#include <glade/glade.h>

void realize(GtkWidget *da, gpointer ud)
{
   g_print("realize_event of DrawingArea called!!!\n");
}

int main(int argc, char *argv[])
{
   GladeXML *gxml;
   gtk_init(&argc, &argv);
   gxml = glade_xml_new("test.glade", NULL, NULL);
   glade_xml_signal_autoconnect(gxml);
   gtk_main();
   return 0;
}


   Here is my test.glade file:

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd";>

<glade-interface>

<widget class="GtkWindow" id="window1">
 <property name="visible">True</property>
 <property name="title" translatable="yes">window1</property>
 <property name="type">GTK_WINDOW_TOPLEVEL</property>
 <property name="window_position">GTK_WIN_POS_NONE</property>
 <property name="modal">False</property>
 <property name="resizable">True</property>
 <property name="destroy_with_parent">False</property>
 <property name="decorated">True</property>
 <property name="skip_taskbar_hint">False</property>
 <property name="skip_pager_hint">False</property>
 <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
 <property name="focus_on_map">True</property>
 <property name="urgency_hint">False</property>

 <child>
   <widget class="GtkDrawingArea" id="drawingarea1">
     <property name="visible">True</property>
<signal name="realize" handler="realize" after="yes" last_modification_time="Mon, 12 Jun 2006 22:21:03 GMT"/>
   </widget>
 </child>
</widget>

</glade-interface>


I made a testgtk.c file too to see if I can get the realize event and this works (I used a notebook because thats what I am doing in my real application which uses libglade):
/*
   Compile with:
gcc -Wall -o testgtk testgtk.c $(pkg-config gtk+-2.0 --cflags --libs)
*/

#include <gtk/gtk.h>

void realize(GtkWidget *da, gpointer ud)
{
   g_print("realize_event of DrawingArea called!!!\n");
}

int main(int argc, char *argv[])
{
   GtkWidget *window, *nb, *lbl, *da;
   gtk_init(&argc, &argv);
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   da = gtk_drawing_area_new ();
   gtk_widget_set_size_request (da, 100, 100);
   g_signal_connect_after (da, "realize", G_CALLBACK (realize), NULL);
   lbl = gtk_label_new ("A notebook with a Drawing Area");
   nb = gtk_notebook_new ();
gtk_notebook_append_page(GTK_NOTEBOOK(nb), GTK_WIDGET(da), GTK_WIDGET(lbl));
   gtk_container_add (GTK_CONTAINER (window), nb);
   gtk_widget_show_all (window);
   gtk_main();
   return 0;
}

   Goodbye.
P.s.: I still don't know where to post this, I think the correct place is here iin gtk-app-devel-list but maybe it should be gtk-list?



--
Ivan Baldo - ibaldo adinet com uy - http://ibaldo.codigolibre.net/
ICQ 10215364 - Phone/FAX (598) (2) 613 3223.
Caldas 1781, Malvin, Montevideo, Uruguay, South America, planet Earth.
In favour of world peace and freedom, against U.S.A. and allies!!!
Alternatives: ibaldo codigolibre net - http://go.to/ibaldo





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