[Gtk-sharp-list] GtkMozEmbed binding issues

Mark Crichton crichton@gimp.org
Wed, 11 Dec 2002 15:06:19 -0500

Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

So, I've been working on trying to get gtk# to handle the gtkmozembed
widget that comes with mozilla.  So far, I have a GTK2 gtkmozembed
widget that is working with gtk#.

However, there is one major problem.  When I was writing Python
bindings for gtkmozembed, I ran into a nasty problem with one of the
signals.  The signal in question is the new_window signal.  For those
not familiar with Mozilla, here's the signal prototype:

void (* new_window) (GtkMozEmbed *embed, GtkMozEmbed **newEmbed,
                     guint chromemask);

Now, what happens that Mozilla will throw this signal when it needs a
new GtkMozEmbed widget.  Your callback creates it, and throws the
pointer into newEmbed.  This is, of course, a massive nightmare for
certain language bindings.  You also cannot get around NOT implementing
this signal, it's thrown for some simple things as form creation.

So, mozilla bug #120035 was filed, and a new signal was proposed
(new_window2) which looks like:

GtkMozEmbed *(* new_window2) (GtkMozEmbed *embed, guint chromemask);

Unfortunately, I can't figure out how to get either of those handler
forms to work with gtk#.  I know with new_window2, I've tried changing
the GtkMozEmbed type to GObject or gpointer, and that doesn't seem to
work well at all.

Does anyone have any ideas?  None of the signal handlers I could find
in GTK2 seem to have this (seemingly bizzare) structure (I even had to
code up my own marshaling function in C for this type of signal...)

There is also one other issue.  The guint chromemask is now an Enum.
However, I think that is easy to fix with metadata when parsing the
src/header files.

Mark Crichton

Content-Type: application/pgp-signature
Content-Disposition: inline

Version: GnuPG v1.2.1 (SunOS)