GtkSocket
GtkSocket — Контейнер для виджетов из других процессов
Функции
| GtkWidget * | gtk_socket_new () |
| void | gtk_socket_add_id () |
| Window | gtk_socket_get_id () |
| GdkWindow * | gtk_socket_get_plug_window () |
Сигналы
| void | plug-added | Run Last |
| gboolean | plug-removed | Run Last |
Типы и значения
| struct | GtkSocket |
Иерархия объектов
GObject
╰── GInitiallyUnowned
╰── GtkWidget
╰── GtkContainer
╰── GtkSocket
Реализованные интерфейсы
GtkSocket реализует AtkImplementorIface и GtkBuildable.
Файлы заголовков
#include <gtk/gtkx.h>
Описание
Вместе с GtkPlug, GtkSocket обеспечивает возможность встраивания виджетов из одного процесса в другой процесс способом, прозрачным для пользователя. Один процесс создаёт виджет GtkSocket и передаёт идентификатор окна этого виджета другому процессу, который затем создаёт GtkPlug с этим идентификатором окна. Любые виджеты, содержащиеся в GtkPlug, затем будут отображаться внутри окна первого приложения.
Идентификатор окна сокета получается с помощью gtk_socket_get_id(). Перед использованием этой функции сокет должен быть реализован и, следовательно, добавлен в своего родителя.
Получение идентификатора окна сокета.
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));Обратите внимание, что если вы передаёте идентификатор окна сокета другому процессу, который создаст плагин в сокете, вы должны убедиться, что виджет сокета не уничтожается до тех пор, пока этот плагин не будет создан. Нарушение этого правила приведёт к непредсказуемым последствиям, наиболее вероятным из которых является то, что плагин отобразится как отдельное окно верхнего уровня. Вы можете проверить, был ли плагин создан, используя gtk_socket_get_plug_window(). Если он возвращает значение, отличное от NULL, то плагин был успешно создан внутри сокета.
Когда GTK+ получает уведомление о том, что встроенное окно было уничтожено, он также уничтожает сокет. Поэтому вы всегда должны быть готовы к тому, что ваши сокеты будут уничтожены в любой момент, когда работает основной цикл обработки событий. Чтобы этого не произошло, вы можете подключиться к сигналу «plug-removed».
Взаимодействие между GtkSocket и GtkPlug происходит по протоколу XEmbed Protocol. Этот протокол также был реализован в других инструментальных наборах, например, в Qt, что позволяет достичь той же степени интеграции при встраивании виджета Qt в GTK или наоборот.
Виджеты GtkPlug и GtkSocket доступны только при компиляции GTK+ для платформы X11 и определении GDK_WINDOWING_X11. Они могут использоваться только с GdkX11Display. Чтобы использовать GtkPlug и GtkSocket, вам необходимо включить заголовок gtk/gtkx.h.
Функции
gtk_socket_new ()
GtkWidget *
gtk_socket_new (void); Создаёт новый пустой GtkSocket.
Возвращает
новый GtkSocket.
gtk_socket_add_id ()
void gtk_socket_add_id (GtkSocket *socket_,Window window);
Добавляет XEMBED-клиент, например, GtkPlug, в GtkSocket. Клиент может находиться в том же процессе или в другом.
Чтобы встроить GtkPlug в GtkSocket, вы можете создать GtkPlug с gtk_plug_new (0), вызвать gtk_plug_get_id() для получения идентификатора окна плагина, а затем передать его в gtk_socket_add_id(), или вызвать gtk_socket_get_id() для получения идентификатора окна сокета и вызвать gtk_plug_new(), передав этот идентификатор.
GtkSocket должен быть уже добавлен в окно верхнего уровня, прежде чем вы сможете сделать этот вызов.
Параметры
socket_ | ||
window | окно клиента, участвующего в протоколе XEMBED. |
gtk_socket_get_id ()
Window
gtk_socket_get_id (GtkSocket *socket_); Получает идентификатор окна виджета GtkSocket, который затем можно использовать для создания клиента, встроенного в сокет, например, с помощью gtk_plug_new().
GtkSocket должен быть уже добавлен в окно верхнего уровня, прежде чем вы сможете сделать этот вызов.
Параметры
socket_ | a GtkSocket. |
Возвращает
идентификатор окна сокета
gtk_socket_get_plug_window ()
GdkWindow *
gtk_socket_get_plug_window (GtkSocket *socket_); Возвращает окно плагина. Используйте это для проверки, был ли плагин создан внутри сокета.
Параметры
socket_ | a GtkSocket. |
Возвращает
окно плагина, если оно доступно, или NULL.
[nullable][transfer none]
С: 2.14
Типы и значения
struct GtkSocket
struct GtkSocket;
Подробные сведения о сигналах
Сигнал “plug-added”
void user_function (GtkSocket *socket_, gpointer user_data)
Этот сигнал генерируется, когда клиент успешно добавляется в сокет.
Параметры
socket_ | объект, получивший сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполняется последним
Сигнал “plug-removed”
gboolean user_function (GtkSocket *socket_, gpointer user_data)
Этот сигнал генерируется, когда клиент удаляется из сокета. По умолчанию это действие приводит к уничтожению виджета GtkSocket, поэтому, если вы хотите его повторно использовать, необходимо добавить обработчик сигнала, который возвращает TRUE.
Параметры
socket_ | объект, получивший сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Возвращаемое значение
TRUE для остановки вызова других обработчиков.
Флаги: Выполняется последним
См. также
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.24/GtkSocket.html