-----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