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(). Если он возвращает значение, отличное от NULL, то подключаемый модуль был успешно создан внутри сокета.
Когда 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.22/GtkSocket.html