Re: GtkDrawingArea realize event not connected when using libglade?
- From: Ivan Baldo <ibaldo adinet com uy>
- To: gtk-app-devel-list gnome org, gtk-list gnome org
- Cc:
- Subject: Re: GtkDrawingArea realize event not connected when using libglade?
- Date: Tue, 13 Jun 2006 19:46:36 -0300
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]