Spec-Zone.ru › GTK 3.20

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(). Если он возвращает ненулевое значение, то разъем был успешно создан внутри сокета.

Когда 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]

Since: 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.20/GtkSocket.html

Spec-Zone.ru

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