Actually, after debugging and looking at the code, it seems that
gdk_window_foreign_new() first looks up if there is already a GdkWindow for
that XID and re-uses it if so (gdk/x11/gdkwindow-x11.c:1008). So I don't
think this approach will work. :(

On 19 January 2010 19:09, Tristan Schmelcher <tschmelc...@google.com> wrote:

> 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