Thanks Kevin! I'm trying out your suggestion and I've got the GtkWindow
hooking up to the foreign GdkWindow properly, but it looks like I still get
the same X server error when trying to draw after the browser destroys the
GtkSocket's window, and I still can't find a signal/event that gets
dispatched when that happens. :( e.g., delete, destroy, reparent, unmap, and
unrealize are not dispatched. Do you remember if there was a particular
event that you listened for to handle this case?

On 15 January 2010 16:08, Kevin DeKorte <kdeko...@gmail.com> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 01/15/10 16:51, Tristan Schmelcher wrote:
> > Hello,
> >
> > I'm a novice Gtk app developer writing a plugin for Firefox and I'm
> > having trouble getting the callbacks that I need from Gtk/Gdk. The way
> > the plugin architecture works is that Firefox creates a GtkSocket and
> > my plugin gets passed its XID and creates the corresponding GtkPlug
> > (in the same process). By and large everything works, except at
> > shutdown. In some cases, Firefox happens to do a gdk_window_destroy()
> > on one of the parent windows of the GtkSocket before unloading my
> > plugin (for example, when closing a tab with the 'X'). That
> > recursively destroys everything down to the GtkSocket and also the
> > GtkPlug in _gdk_window_destroy_hierarchy(
> > ). So when I try to access the underlying X11 Window handle after this
> > I get an error from the X server and the program aborts. :(
> >
> > What I'd like to do is receive a signal from Gtk/Gdk when the
> > GdkWindow inside my GtkPlug is destroyed like this so that I can
> > cancel any further rendering actions. But I can't figure out how to
> > receive a signal when this happens! AFAICT none of the GtkPlug signals
> > or its inherited GtkWidget signals are dispatched when this happens.
> >
> > Any ideas?
>
> Tristan,
>
> I've had this same problem when developing
> gecko-mediaplayer/gnome-mplayer and mplayerplug-in. I was never able to
> fully use the GtkPlug interface. It just didn't work the way I needed it
> to.
>
> What I ended up doing is creating a normal toplevel window and then
> embedding it in the window that firefox gave me..
>
> Something like this where windowid is the xid I get from firefox.
>
>
>
>    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
>
>    if (windowid > 0 && embedding_disabled == FALSE) {
>        gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
>        GTK_WIDGET_SET_FLAGS(window, GTK_CAN_FOCUS);
>    }
>
>
>   if (windowid != 0 && embedding_disabled == FALSE) {
>        while (gtk_events_pending())
>            gtk_main_iteration();
>
>        window_container = gdk_window_foreign_new(windowid);
>        if (GTK_WIDGET_MAPPED(window))
>            gtk_widget_unmap(window);
>
>        gdk_window_reparent(window->window, window_container, 0, 0);
>    }
>
>
> Hope that helps.
>
> Kevin
> - --
> Get my public GnuPG key from
> http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x7D0BD5D1
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
> Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
>
> iEYEARECAAYFAktRA4AACgkQ6w2kMH0L1dFb0ACfdc7jssfzEnillFHhrUFOjDbW
> nsQAnj4Q6GCxg8H1zeoC9/NTx8kuRtDV
> =iMWg
> -----END PGP SIGNATURE-----
>
_______________________________________________
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