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 | Чтение / Запись |
Сигналы
Типы и значения
| struct | GtkIMContext |
| struct | GtkIMContextClass |
| struct | GtkIMContextInfo |
Иерархия объектов
GObject ╰── GtkIMContext ├── GtkIMContextSimple ╰── GtkIMMulticontext
Включаемые файлы
#include <gtk/gtk.h> #include <gtk/gtkimmodule.h>
Описание
GtkIMContext определяет интерфейс для методов ввода GTK+. Метод ввода используется виджетами ввода текста GTK+, например, GtkEntry, для сопоставления событий нажатия клавиш со строками символов Юникода.
Значение по умолчанию для метода ввода можно задать программно через свойство “gtk-im-module” GtkSettings. Кроме того, вы можете установить переменную среды GTK_IM_MODULE, как описано в Разделе «Запуск приложений GTK+».
Свойства GtkEntry “im-module” и GtkTextView “im-module” также можно использовать для установки методов ввода для конкретных экземпляров виджетов. Например, для определённого виджета ввода может потребоваться ввод определённых символов, которые проще вводить с помощью определённого метода ввода.
Метод ввода может потреблять несколько событий нажатия клавиш последовательно и, в конечном итоге, выводить составленный результат. Это называется предварительным редактированием, и метод ввода может предоставлять обратную связь об этом процессе, отображая промежуточные состояния составления в виде текста предварительного редактирования. Например, стандартный метод ввода GTK+ реализует ввод произвольных кодовых точек Юникода, удерживая клавиши «Control» и «Shift», а затем набирая «U» и шестнадцатеричные цифры кодовой точки. При отпускании клавиш «Control» и «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 равно FALSE (по умолчанию TRUE), то контекст метода ввода может использовать другой метод отображения обратной связи, например, отображая её в дочернем элементе корневого окна.
Параметры
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, если сигнал был обработан.
Типы и значения
struct GtkIMContext
struct GtkIMContext;
struct 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” по умолчанию. | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через | |
| Вызывается через |
struct 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
Подсказки для поведения текстового поля.
Флаги: Чтение / Запись
Свойство “input-purpose”
“input-purpose” GtkInputPurpose
Назначение текстового поля.
Флаги: Чтение / Запись
Значение по умолчанию: GTK_INPUT_PURPOSE_FREE_FORM
Подробное описание сигналов
Сигнал “commit”
void user_function (GtkIMContext *context, gchar *str, gpointer user_data)
Сигнал ::commit генерируется, когда пользователь ввёл полную последовательность ввода. Это может быть один символ сразу после нажатия клавиши или окончательный результат предварительного редактирования.
Параметры
context | объект, на котором генерируется сигнал | |
str | введённый пользователем завершённый символ(ы) | |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Выполнять последним
Сигнал “delete-surrounding”
gboolean user_function (GtkIMContext *context, gint offset, gint 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.22/GtkIMContext.html