| |
GTK+ Reference Manual |
||||
---|---|---|---|---|
GtkSocketGtkSocket Контейнер для виджетов из другого процесса |
#include <gtk/gtk.h> GtkSocket; GtkWidget* gtk_socket_new (void); void gtk_socket_steal (GtkSocket *socket_, GdkNativeWindow wid); void gtk_socket_add_id (GtkSocket *socket_, GdkNativeWindow window_id); GdkNativeWindow gtk_socket_get_id (GtkSocket *socket_);
GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkSocket
GtkSocket осуществляет AtkImplementorIface.
"plug-added" void user_function (GtkSocket *socket, gpointer user_data) : Run last "plug-removed" gboolean user_function (GtkSocket *socket, gpointer user_data) : Run last
Вместе с GtkPlug, GtkSocket обеспечивает встраивание виджетов из одного процесса в другой, в форме прозрачной для пользователя. Один процесс создаёт GtkSocket виджет и передаёт этот ID окна виджета в другой процесс, который создаёт GtkPlug с этим ID окна. Любые виджеты содержащиеся в GtkPlug появятся в окне первого приложения.
ID окна сокета определяется с помощью gtk_socket_get_id(). Перед использованием этой функции сокеты должны быть реализованы и соответственно добавлены к их родителям.
Пример 1. Определение ID окна сокета.
GtkWidget *socket = gtk_socket_new (); gtk_widget_show (socket); gtk_container_add (GTK_CONTAINER (parent), socket); /* Следующий вызов необходим только если один * предок сокета не видим. */ gtk_widget_realize (socket); g_print ("ID сокета окна %x\n", gtk_socket_get_id (socket));
Помните, если вы создаёте ID окна сокета для другого процесса который создает вставку для сокета, вы должны убедиться в том что виджет сокета не разрушен в течении создания подключения. Нарушение этого правила вызовет не предсказуемые последствия, наиболее вероятным из которых будет появление вставляемого виджета как отдельного окна верхнего уровня. Вы можете контролировать создание вставки (plug) проверяя plug_window поле в структуре GtkSocket. Если поле не-NULL, то когда вставка была полностью выполнена внутри сокета.
Когда GTK+ извещён о разрушении встроенного окна, то когда происходит разрушение сокета. Поэтому вы всегда должны быть готовы к разрушению вашего сокета в течении выполнения основного цикла событий.
Общение между GtkSocket и GtkPlug происходит по протоколу XEmbed. Этот протокол, также задействованный в других инструментариях, например Qt, позволяет некоторый уровень интеграции встраивания виджетов Qt в GTK или наоборот.
Сокет может также использоваться для поглощения произвольных предварительно созданных окон верхнего уровня используя gtk_socket_steal(), хотя при этом интеграция не будет такой же законченной как между GtkPlug и GtkSocket.
GtkPlug и GtkSocket виджеты в текущий момент доступны не на всех платформах поддерживаемых GTK+.
typedef struct _GtkSocket GtkSocket;
GtkSocket структура содержит plug_window поле. (Это поле должно рассматриваться только для чтения. Оно никогда не должно устанавливаться приложением.)
GtkWidget* gtk_socket_new (void);
Создаёт новый пустой GtkSocket.
Возвращает : |
новый GtkSocket. |
void gtk_socket_steal (GtkSocket *socket_, GdkNativeWindow wid);
gtk_socket_steal устарела и не должна использоваться во вновь создаваемом коде.
Помещает предварительно созданное окно верхнего уровня в GtkSocket. Это нужно для внедрения клиентов которые не знают о встраивании в GtkSocket, однако выполнение ненадёжно, поэтому не стоит использовать эту функцию.
GtkSocket уже должен быть добавлен в окно верхнего уровня перед использованием этого вызова.
socket_ : |
|
wid : |
ID существующего окна верхнего уровня. |
void gtk_socket_add_id (GtkSocket *socket_, GdkNativeWindow window_id);
Добавляет XEMBED клиент, такой как GtkPlug, для GtkSocket. Клиент может быть в том же самом процессе или в другом.
Для внедрения GtkPlug в GtkSocket, вы можете или создать GtkPlug с помощью gtk_plug_new (0), вызвать gtk_plug_get_id() для получения ID окна вставки, а затем передать его в gtk_socket_add_id(), или вы можете вызвать gtk_socket_get_id() для получения ID окна для сокета, и вызвать gtk_plug_new() поместив этот ID.
GtkSocket должен быть добавлен в окно верхнего уровня перед этим вызовом.
socket_ : |
|
window_id : |
ID окна клиента участвующего в XEMBED протоколе. |
GdkNativeWindow gtk_socket_get_id (GtkSocket *socket_);
Получает ID окна GtkSocket виджета, который может быть использован для создания клиента встроенного в сокет, например с помощью gtk_plug_new().
GtkSocket должен быть добавлен в окно верхнего уровня перед этим вызовом.
socket_ : |
|
Возвращает : |
ID окна для сокета |
void user_function (GtkSocket *socket, gpointer user_data) : Run last
Этот сигнал издаётся когда клиент полностью добавлен в сокет.
socket : |
Объект который получает сигнал. |
user_data : |
Пользовательские данные устанавливаемые при подключении обработчика сигнала. |
gboolean user_function (GtkSocket *socket, gpointer user_data) : Run last
Этот сигнал издаётся когда клиент удаляется из сокета. Действие по умолчанию разрушает виджет GtkSocket, поэтому если вы хотите многократно использовать это, вы должны добавить обработчик сигнала возвращающий TRUE.
socket : |
Объект который получает сигнал. |
user_data : |
Пользовательские данные устанавливаемые при подключении обработчика сигнала. |
Возвращает : |
Виджет который встраивается в GtkSocket. |
|
Спецификация протокола XEmbed. |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |