GtkSocket
GtkSocket — Контейнер для виджетов из других процессов
Функции
| GtkWidget * | gtk_socket_new () |
| void | gtk_socket_add_id () |
| Window | gtk_socket_get_id () |
| GdkWindow * | gtk_socket_get_plug_window () |
Сигналы
Типы и значения
| 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(). Если он возвращает ненулевое значение, то разъем был успешно создан внутри сокета.
Когда GTK+ получает уведомление о том, что встраиваемое окно было уничтожено, то он также уничтожает сокет. Поэтому вы всегда должны быть готовы к тому, что ваши сокеты могут быть уничтожены в любой момент во время работы основного цикла событий. Чтобы этого избежать, вы можете подключиться к сигналу «plug-removed».
Общение между GtkSocket и GtkPlug происходит по протоколу XEmbed. Этот протокол также реализован в других инструментальных наборах, например, в 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. |
Возвращает
Идентификатор окна сокета
Типы и значения
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.20/GtkSocket.html