diff options
author | Patrick Bernaud <patrickb@chez.com> | 2010-03-05 22:58:13 +0100 |
---|---|---|
committer | Javier Jardón <jjardon@gnome.org> | 2010-04-18 02:36:04 +0200 |
commit | 6a9b72525ac5324897693d564dd283e50b58c222 (patch) | |
tree | f2ce4ea5a6deb83b19f71d2eded5c93883b3d456 /gtk/gtksocket.c | |
parent | d4a159d488344e4087eaa1dae5c4a0aa4b633173 (diff) | |
download | gtk+-6a9b72525ac5324897693d564dd283e50b58c222.tar.gz |
[docs] Move documentation to inline comments: GtkSocket
https://bugzilla.gnome.org/show_bug.cgi?id=611707
Diffstat (limited to 'gtk/gtksocket.c')
-rw-r--r-- | gtk/gtksocket.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/gtk/gtksocket.c b/gtk/gtksocket.c index 847ee9ff01..3531af47fc 100644 --- a/gtk/gtksocket.c +++ b/gtk/gtksocket.c @@ -41,6 +41,77 @@ #include "gtkalias.h" +/** + * SECTION:gtksocket + * @Short_description: Container for widgets from other processes + * @Title: GtkSocket + * @See_also: #GtkPlug, <ulink url="http://www.freedesktop.org/Standards/xembed-spec">XEmbed</ulink> + * + * Together with #GtkPlug, #GtkSocket provides the ability + * to embed widgets from one process into another process + * in a fashion that is transparent to the user. One + * process creates a #GtkSocket widget and passes + * that widget's window ID to the other process, + * which then creates a #GtkPlug with that window ID. + * Any widgets contained in the #GtkPlug then will appear + * inside the first application's window. + * + * The socket's window ID is obtained by using + * gtk_socket_get_id(). Before using this function, + * the socket must have been realized, and for hence, + * have been added to its parent. + * + * <example> + * <title>Obtaining the window ID of a socket.</title> + * <programlisting> + * GtkWidget *socket = gtk_socket_new (<!-- -->); + * gtk_widget_show (socket); + * gtk_container_add (GTK_CONTAINER (parent), socket); + * + * /<!---->* The following call is only necessary if one of + * * the ancestors of the socket is not yet visible. + * *<!---->/ + * gtk_widget_realize (socket); + * g_print ("The ID of the sockets window is %#x\n", + * gtk_socket_get_id (socket)); + * </programlisting> + * </example> + * + * Note that if you pass the window ID of the socket to another + * process that will create a plug in the socket, you + * must make sure that the socket widget is not destroyed + * until that plug is created. Violating this rule will + * cause unpredictable consequences, the most likely + * consequence being that the plug will appear as a + * separate toplevel window. You can check if the plug + * has been created by using gtk_socket_get_plug_window(). If + * it returns a non-%NULL value, then the plug has been + * successfully created inside of the socket. + * + * When GTK+ is notified that the embedded window has been + * destroyed, then it will destroy the socket as well. You + * should always, therefore, be prepared for your sockets + * to be destroyed at any time when the main event loop + * is running. To prevent this from happening, you can + * connect to the #GtkSocket::plug-removed signal. + * + * The communication between a #GtkSocket and a #GtkPlug follows the + * <ulink url="http://www.freedesktop.org/Standards/xembed-spec">XEmbed</ulink> + * protocol. This protocol has also been implemented in other toolkits, e.g. + * <application>Qt</application>, allowing the same level of integration + * when embedding a <application>Qt</application> widget in GTK or vice versa. + * + * A socket can also be used to swallow arbitrary + * pre-existing top-level windows using gtk_socket_steal(), + * though the integration when this is done will not be as close + * as between a #GtkPlug and a #GtkSocket. + * + * <note> + * The #GtkPlug and #GtkSocket widgets are currently not available + * on all platforms supported by GTK+. + * </note> + */ + /* Forward declararations */ static void gtk_socket_finalize (GObject *object); |