Re: using foreign windows



vishnu pobox com writes:
i'm using Gtk 1.3.x and i'm curious if someone knows the correct
way to embed foreign windows in my app.

The gstreamer library does XOpenDisplay, creates a window, and uses
this window for XPutImage (or the Xv equivalent).  My app creates
a GtkSocket and stuffs the foreign window inside with gtk_socket_steal.
It works, somewhat, but it is easy to crash the app with:

Xlib: unexpected async reply (sequence 0x12d7)!

i believe this error indicates that two separate threads are using
the same X connection (not sure though).  Certainly the app has
multiple threads, but i call gdk_threads_enter() before entering
the main loop.

I believe you're supposed to call gdk_threads_leave() before entering
the main loop, but I could be wrong. See the FAQ on this topic.

 So the problem must be caused by directly accessing
Xlib (not by gdk/gtk).  This makes sense, because gstreamer calls
Xlib directly.

So, what is the correct way to make these two processes work
together?  How do panel applets solve this problem?

GtkSocket doesn't embed arbitrary X windows, it embeds X windows that
support the plug side of the XEMBED protocol. (see www.freedesktop.org
for the protocol.) In GTK 1.2 it embeds X windows that support the
plug side of a custom GTK protocol.

Panel applets use plug on the applet side. Panel also has a feature to
swallow arbitrary X windows, but it doesn't work worth a damn, because
you need a protocol to make it work.

Havoc




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]