GtkIMContext
GtkIMContext — Базовый класс для контекстов методов ввода
Функции
| void | gtk_im_context_set_client_window () |
| void | gtk_im_context_get_preedit_string () |
| gboolean | gtk_im_context_filter_keypress () |
| void | gtk_im_context_focus_in () |
| void | gtk_im_context_focus_out () |
| void | gtk_im_context_reset () |
| void | gtk_im_context_set_cursor_location () |
| void | gtk_im_context_set_use_preedit () |
| void | gtk_im_context_set_surrounding () |
| gboolean | gtk_im_context_get_surrounding () |
| gboolean | gtk_im_context_delete_surrounding () |
Свойства
| GtkInputHints | input-hints | Чтение/Запись |
| GtkInputPurpose | input-purpose | Чтение/Запись |
Сигналы
| void | commit | Выполняется последним |
| gboolean | delete-surrounding | Выполняется последним |
| void | preedit-changed | Выполняется последним |
| void | preedit-end | Выполняется последним |
| void | preedit-start | Выполняется последним |
| gboolean | retrieve-surrounding | Выполняется последним |
Типы и значения
| struct | GtkIMContext |
| struct | GtkIMContextClass |
| struct | GtkIMContextInfo |
Иерархия объектов
GObject
╰── GtkIMContext
├── GtkIMContextSimple
╰── GtkIMMulticontext
Файлы заголовков
#include <gtk/gtk.h> #include <gtk/gtkimmodule.h>
Описание
GtkIMContext определяет интерфейс для методов ввода GTK+. Методы ввода используются виджетами ввода текста GTK+, такими как GtkEntry, для преобразования событий нажатия клавиш в строки Unicode.
По умолчанию метод ввода можно установить программно через свойство «gtk-im-module» GtkSettings. В качестве альтернативы можно установить переменную среды GTK_IM_MODULE, как описано в Документации по запуску приложений GTK+.
Свойства GtkEntry «im-module» и GtkTextView «im-module» также могут использоваться для установки методов ввода для конкретных виджетов. Например, для определённого виджета ввода может потребоваться использовать определённый метод ввода для ввода определённых символов.
Метод ввода может использовать несколько событий нажатия клавиш последовательно и в итоге выдать составленный результат. Это называется предварительным редактированием, и метод ввода может предоставить обратную связь об этом процессе, отобразив промежуточные состояния составления в виде текста предварительного редактирования. Например, стандартный метод ввода GTK+ реализует ввод произвольных кодов Unicode, удерживая клавиши Ctrl и Shift, а затем печатая «U» и шестнадцатеричные цифры кода. При отпускании клавиш Ctrl и Shift предварительное редактирование завершается, и символ вставляется как текст. Например, Ctrl+Shift+u20AC приводит к символу €.
Дополнительные методы ввода могут быть доступны для использования виджетами GTK+ в качестве загружаемых модулей. Модуль метода ввода — это небольшая общая библиотека, которая реализует подкласс GtkIMContext или GtkIMContextSimple и экспортирует эти четыре функции:
Эта функция должна регистрировать GType подкласса GtkIMContext, реализующего метод ввода с помощью g_type_module_register_type(). Обратите внимание, что g_type_register_static() не может использоваться, так как тип нужно регистрировать динамически.
Здесь идет любой код очистки, который может потребоваться вашему методу ввода при выгрузке модуля.
Эта функция возвращает список методов ввода, предоставляемых модулем. Приведённый выше пример показывает общее решение и просто возвращает указатель на статически определённый массив элементов GtkIMContextInfo для каждого предоставленного метода ввода.
void im_module_init(GTypeModule *module);
Эта функция должна вернуть указатель на недавно созданный экземпляр подкласса GtkIMContext, идентифицируемый по context_id. Идентификатор контекста совпадает с указанным в массиве GtkIMContextInfo, возвращённом функцией im_module_list().
После установки нового загружаемого модуля метода ввода в системе, файл конфигурации gtk.immodules должен быть сгенерирован с помощью gtk-query-immodules-3.0, чтобы новый метод ввода стал доступен приложениям GTK+.
Функции
gtk_im_context_set_client_window ()
void gtk_im_context_set_client_window (GtkIMContext *context,GdkWindow *window);
Установите окно клиента для контекста ввода; это GdkWindow, в котором появляется ввод. Это окно используется для правильного позиционирования окон состояния и может также использоваться для целей, внутренних для метода ввода.
Параметры
context | ||
window | окно клиента. Это может быть | [allow-none] |
gtk_im_context_get_preedit_string ()
void gtk_im_context_get_preedit_string (GtkIMContext *context,gchar **str,PangoAttrList **attrs,gint *cursor_pos);
Получить текущую строку предварительного редактирования для контекста ввода и список атрибутов, которые необходимо применить к строке. Эта строка должна быть отображена, вставленной в точку вставки.
Параметры
context | ||
str | место для хранения полученной строки. Строка, полученная с помощью | [out][transfer full] |
attrs | место для хранения полученного списка атрибутов. Когда вы закончите с этим списком, вы должны снять ссылку с помощью | [out][transfer full] |
cursor_pos | место для хранения позиции курсора (в символах) внутри строки предварительного редактирования. | [out] |
gtk_im_context_filter_keypress ()
gboolean gtk_im_context_filter_keypress (GtkIMContext *context,GdkEventKey *event);
Разрешить методу ввода внутренне обрабатывать события нажатия и отпускания клавиш. Если эта функция возвращает TRUE, то для этого события нажатия клавиши не следует выполнять дальнейшую обработку.
Параметры
context | ||
event | событие нажатия клавиши |
Возвращает
TRUE если метод ввода обработает событие нажатия клавиши.
gtk_im_context_focus_in ()
void
gtk_im_context_focus_in (GtkIMContext *context); Уведомить метод ввода о том, что виджет, которому соответствует этот контекст ввода, получил фокус. Метод ввода может, например, изменить отображаемую обратную связь, чтобы отразить это изменение.
Параметры
context |
gtk_im_context_focus_out ()
void
gtk_im_context_focus_out (GtkIMContext *context); Уведомить метод ввода о том, что виджет, которому соответствует этот контекст ввода, потерял фокус. Метод ввода может, например, изменить отображаемую обратную связь или сбросить состояние контекстов, чтобы отразить это изменение.
Параметры
context |
gtk_im_context_reset ()
void
gtk_im_context_reset (GtkIMContext *context); Уведомить метод ввода о том, что внесены изменения, такие как изменение позиции курсора. Это обычно приводит к тому, что метод ввода очистит состояние предварительного редактирования.
Параметры
context |
gtk_im_context_set_cursor_location ()
void gtk_im_context_set_cursor_location (GtkIMContext *context,const GdkRectangle *area);
Уведомить метод ввода о том, что изменена позиция курсора. Положение относительно окна клиента.
Параметры
context | ||
area | новое расположение |
gtk_im_context_set_use_preedit ()
void gtk_im_context_set_use_preedit (GtkIMContext *context,gboolean use_preedit);
Устанавливает, должен ли контекст метода ввода использовать строку предварительного редактирования для отображения обратной связи. Если use_preedit ложно (по умолчанию истинно), то контекст метода ввода может использовать какой-либо другой метод для отображения обратной связи, например, отобразить её в дочернем элементе корневого окна.
Параметры
context | ||
use_preedit | должен ли контекст метода ввода использовать строку предварительного редактирования. |
gtk_im_context_set_surrounding ()
void gtk_im_context_set_surrounding (GtkIMContext *context,const gchar *text,gint len,gint cursor_index);
Устанавливает контекст, окружающий точку вставки и строку предварительного редактирования. Ожидается, что эта функция будет вызвана в ответ на сигнал GtkIMContext::retrieve_surrounding, и, вероятно, не будет иметь эффекта, если вызвана в другое время.
Параметры
context | ||
text | текст, окружающий точку вставки, в формате UTF-8. Строка предварительного редактирования не должна быть включена в | |
len | длина | |
cursor_index | индекс байта курсора вставки внутри |
gtk_im_context_get_surrounding ()
gboolean gtk_im_context_get_surrounding (GtkIMContext *context,gchar **text,gint *cursor_index);
Получает контекст вокруг точки вставки. Методы ввода обычно требуют контекст, чтобы ограничить вводимый текст на основе существующего текста; это важно для языков, таких как тайский, где допускаются только некоторые последовательности символов.
Эта функция реализуется путём отправки сигнала GtkIMContext::retrieve_surrounding методу ввода; в ответ на этот сигнал виджет должен предоставить как можно больше контекста, до целого абзаца, вызвав gtk_im_context_set_surrounding(). Обратите внимание, что виджет не обязан реагировать на сигнал ::retrieve_surrounding, поэтому методы ввода должны быть готовы работать без контекста.
Параметры
context | ||
text | место для хранения закодированной в UTF-8 строки текста, содержащей контекст вокруг точки вставки. Если функция возвращает | [out][transfer full] |
cursor_index | место для хранения байтового индекса курсора вставки в | [out] |
Возвращаемое значение
TRUE если окружающий текст был предоставлен; в этом случае вы должны освободить результат, сохранённый в *text.
gtk_im_context_delete_surrounding ()
gboolean gtk_im_context_delete_surrounding (GtkIMContext *context,gint offset,gint n_chars);
Просит виджет, к которому привязан контекст ввода, удалить символы вокруг позиции курсора, отправив сигнал GtkIMContext::delete_surrounding. Обратите внимание, что offset и n_chars указаны в символах, а не в байтах, что отличается от использования в других местах в GtkIMContext.
Для использования этой функции сначала необходимо вызвать gtk_im_context_get_surrounding() для получения текущего контекста и немедленно после этого вызвать эту функцию, чтобы убедиться, что вы знаете, что удаляете. Также следует учесть, что даже если сигнал был обработан, контекст ввода может не удалить все символы, которые было запрошено удалить.
Эта функция используется методом ввода, который хочет выполнить подстановки в существующий текст в ответ на новый ввод. Она не полезна для приложений.
Параметры
context | ||
offset | смещение от позиции курсора в символах; отрицательное значение означает начало перед курсором. | |
n_chars | количество символов для удаления. |
Возвращаемое значение
TRUE если сигнал был обработан.
Типы и значения
Структура GtkIMContext
struct GtkIMContext;
Структура GtkIMContextClass
struct GtkIMContextClass {
/* Signals */
void (*preedit_start) (GtkIMContext *context);
void (*preedit_end) (GtkIMContext *context);
void (*preedit_changed) (GtkIMContext *context);
void (*commit) (GtkIMContext *context, const gchar *str);
gboolean (*retrieve_surrounding) (GtkIMContext *context);
gboolean (*delete_surrounding) (GtkIMContext *context,
gint offset,
gint n_chars);
/* Virtual functions */
void (*set_client_window) (GtkIMContext *context,
GdkWindow *window);
void (*get_preedit_string) (GtkIMContext *context,
gchar **str,
PangoAttrList **attrs,
gint *cursor_pos);
gboolean (*filter_keypress) (GtkIMContext *context,
GdkEventKey *event);
void (*focus_in) (GtkIMContext *context);
void (*focus_out) (GtkIMContext *context);
void (*reset) (GtkIMContext *context);
void (*set_cursor_location) (GtkIMContext *context,
GdkRectangle *area);
void (*set_use_preedit) (GtkIMContext *context,
gboolean use_preedit);
void (*set_surrounding) (GtkIMContext *context,
const gchar *text,
gint len,
gint cursor_index);
gboolean (*get_surrounding) (GtkIMContext *context,
gchar **text,
gint *cursor_index);
};
Члены
| Обработчик сигнала «preedit-start» по умолчанию. | |
| Обработчик сигнала «preedit-end» по умолчанию. | |
| Обработчик сигнала «preedit-changed» по умолчанию. | |
| Обработчик сигнала «commit» по умолчанию. | |
| Обработчик сигнала «retrieve-surrounding» по умолчанию. | |
| Обработчик сигнала «delete-surrounding» по умолчанию. | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через |
Структура GtkIMContextInfo
struct GtkIMContextInfo {
const gchar *context_id;
const gchar *context_name;
const gchar *domain;
const gchar *domain_dirname;
const gchar *default_locales;
};
Данные для ведения учета загружаемого метода ввода.
Члены
const gchar * | Уникальная строка идентификации метода ввода. | |
const gchar * | Имя метода ввода, читаемое человеком. | |
const gchar * | Домен перевода, используемый с | |
const gchar * | Имя каталога локали для использования с | |
const gchar * | Список локалей, разделённых двоеточием, где этот метод ввода должен быть по умолчанию. Звёздочка «*» устанавливает значение по умолчанию для всех локалей. |
Подробное описание свойств
Свойство “input-hints”
“input-hints” GtkInputHints
Подсказки для поведения текстового поля.
Владелец: GtkIMContext
Флаги: Чтение / Запись
Свойство “input-purpose”
“input-purpose” GtkInputPurpose
Назначение текстового поля.
Владелец: GtkIMContext
Флаги: Чтение / Запись
Значение по умолчанию: GTK_INPUT_PURPOSE_FREE_FORM
Подробное описание сигналов
Сигнал “commit”
void user_function (GtkIMContext *context, char *str, gpointer user_data)
Сигнал ::commit генерируется, когда пользователь ввёл полную последовательность ввода. Это может быть один символ сразу после нажатия клавиши или окончательный результат предварительного редактирования.
Параметры
context | объект, на котором генерируется сигнал | |
str | введённые пользователем завершённые символы | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполняется последним
Сигнал “delete-surrounding”
gboolean user_function (GtkIMContext *context, int offset, int n_chars, gpointer user_data)
Сигнал ::delete-surrounding генерируется, когда методу ввода требуется удалить весь или часть контекста, окружающего курсор.
Параметры
context | объект, на котором генерируется сигнал | |
offset | смещение символа от позиции курсора текста, который нужно удалить. Отрицательное значение указывает на позицию перед курсором. | |
n_chars | количество символов для удаления | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Возвращает
TRUE если сигнал был обработан.
Флаги: Выполняется последним
Сигнал “preedit-changed”
void user_function (GtkIMContext *context, gpointer user_data)
Сигнал ::preedit-changed генерируется всякий раз, когда изменяется последовательность предварительного редактирования, вводимая в данный момент. Он также генерируется в конце последовательности предварительного редактирования, в этом случае gtk_im_context_get_preedit_string() возвращает пустую строку.
Параметры
context | объект, на котором генерируется сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполняется последним
Сигнал “preedit-end”
void user_function (GtkIMContext *context, gpointer user_data)
Сигнал ::preedit-end генерируется, когда последовательность предварительного редактирования завершается или отменяется.
Параметры
context | объект, на котором генерируется сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполняется последним
Сигнал “preedit-start”
void user_function (GtkIMContext *context, gpointer user_data)
Сигнал ::preedit-start генерируется, когда начинается новая последовательность предварительного редактирования.
Параметры
context | объект, на котором генерируется сигнал | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполняется последним
Сигнал “retrieve-surrounding”
gboolean user_function (GtkIMContext *context, gpointer user_data)
Сигнал ::retrieve-surrounding генерируется, когда методу ввода требуется контекст, окружающий курсор. Обработчик должен установить контекст окружающей среды метода ввода, вызвав метод gtk_im_context_set_surrounding().
Параметры
context | объект, на котором генерируется сигнал | |
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.24/GtkIMContext.html