Spec-Zone.ru › GTK 3.22

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. Этот протокол также реализован в других наборах инструментов, например, в 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_

a GtkSocket

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 для остановки вызова других обработчиков.

Флаги: Выполнить последним

См. также

GtkPlug, Протокол XEmbed

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API