-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 01/19/10 20:09, Tristan Schmelcher 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?
> 

I think I am hooking see line 5982 in gui.c in gnome-mplayer

delete_signal_id =
        g_signal_connect(GTK_OBJECT(window), "delete_event",
G_CALLBACK(delete_callback), NULL);


and I also have function called from the class destructor that tells my
application to quit (calls "shut()"   line 382 in plugin.ccp).

The source code to gecko-mediaplayer (the browser plugin) is here:

http://code.google.com/p/gecko-mediaplayer/source/checkout

And the source to gnome-mplayer is here

http://code.google.com/p/gnome-mplayer/source/checkout


Kevin

> On 15 January 2010 16:08, Kevin DeKorte <kdeko...@gmail.com
> <mailto:kdeko...@gmail.com>> wrote:
> 
> 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/

iEYEARECAAYFAktWjEkACgkQ6w2kMH0L1dH8OwCcDrnft8U+m1vH9OkklpEHQX5T
QuYAmwehrYVDxtE7Wpxdycp7mtds1ozc
=DkC7
-----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