forked from AuroraMiddleware/gtk
7bb0ea6241
* gtk/gtktextview.c (gtk_text_view_buffer_to_window_coords): (gtk_text_view_window_to_buffer_coords): Improve docs. (#62359) * gdk-pixbuf/tmpl/gdk-pixbuf-loader.sgml: Updates. (#79001) * gtk/tmpl/gtksocket.sgml: Add link to XEmbed draft. (#67818) * gtk/tmpl/gtkdrawingarea.sgml: Fix a typo. * gtk/text_widget.sgml: Complete the fix for #79080.
155 lines
3.9 KiB
Plaintext
155 lines
3.9 KiB
Plaintext
<!-- ##### SECTION Title ##### -->
|
|
GtkSocket
|
|
|
|
<!-- ##### SECTION Short_Description ##### -->
|
|
Container for widgets from other processes.
|
|
|
|
<!-- ##### SECTION Long_Description ##### -->
|
|
<para>
|
|
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 the
|
|
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 applications window.
|
|
</para>
|
|
|
|
<para>
|
|
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>
|
|
</para>
|
|
|
|
<para>
|
|
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 examining the
|
|
<StructField>plug_window</StructField> field of the
|
|
#GtkSocket structure. If this field is non-%NULL,
|
|
then the plug has been successfully created inside
|
|
of the socket.
|
|
</para>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
The communication between a #GtkSocket and a #GtkPlug follows the
|
|
<ulink url="http://www.freedesktop.org/standards/xembed.html">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.</para>
|
|
|
|
<para>
|
|
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.</para>
|
|
|
|
</para>
|
|
|
|
<!-- ##### SECTION See_Also ##### -->
|
|
<para>
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
<term>#GtkPlug</term>
|
|
<listitem><para>the widget that plugs into a #GtkSocket.</para></listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><ulink url="http://www.freedesktop.org/standards/xembed.html">XEmbed</ulink></term>
|
|
<listitem><para>the XEmbed Protocol Specification.</para></listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
</para>
|
|
|
|
<!-- ##### STRUCT GtkSocket ##### -->
|
|
<para>
|
|
The #GtkSocket structure contains the <structfield>plug_window</structfield>
|
|
field. (This field should be considered read-only. It should
|
|
never be set by an application.)
|
|
</para>
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_socket_new ##### -->
|
|
<para>
|
|
</para>
|
|
|
|
@Returns:
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_socket_steal ##### -->
|
|
<para>
|
|
</para>
|
|
|
|
@socket: a #GtkSocket.
|
|
@wid:
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_socket_add_id ##### -->
|
|
<para>
|
|
|
|
</para>
|
|
|
|
@socket:
|
|
@window_id:
|
|
<!-- # Unused Parameters # -->
|
|
@id:
|
|
|
|
|
|
<!-- ##### FUNCTION gtk_socket_get_id ##### -->
|
|
<para>
|
|
|
|
</para>
|
|
|
|
@socket:
|
|
@Returns:
|
|
|
|
|
|
<!-- ##### SIGNAL GtkSocket::plug-added ##### -->
|
|
<para>
|
|
|
|
</para>
|
|
|
|
@socket: the object which received the signal.
|
|
|
|
<!-- ##### SIGNAL GtkSocket::plug-removed ##### -->
|
|
<para>
|
|
|
|
</para>
|
|
|
|
@socket: the object which received the signal.
|
|
@Returns:
|
|
|