Spec-Zone.ru › GTK 3.24

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 Protocol. Этот протокол также был реализован в других инструментальных наборах, например, в 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.24/GtkSocket.html

Spec-Zone.ru

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