Spec-Zone.ru › GTK 4.0

GtkIMContext

GtkIMContext — Базовый класс для контекстов методов ввода

Функции

void gtk_im_context_get_preedit_string ()
gboolean gtk_im_context_filter_keypress ()
gboolean gtk_im_context_filter_key ()
void gtk_im_context_focus_in ()
void gtk_im_context_focus_out ()
void gtk_im_context_reset ()
void gtk_im_context_set_client_widget ()
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

Иерархия объектов

    GObject
    ╰── GtkIMContext
        ├── GtkIMContextSimple
        ╰── GtkIMMulticontext

Файлы заголовков

#include <gtk/gtk.h>
#include <gtk/gtkimmodule.h>

Описание

GtkIMContext определяет интерфейс для методов ввода GTK. Методы ввода используются виджетами GTK для ввода текста, например, GtkEntry, для преобразования событий нажатия клавиш в строки Юникода.

По умолчанию метод ввода можно задать программно через свойство “gtk-im-module” GtkSettings. Также можно установить переменную среды GTK_IM_MODULE, как описано в документации по запуску приложений GTK.

Свойства “im-module” GtkEntry и “im-module” GtkTextView также могут быть использованы для установки методов ввода для определённых виджетов. Например, для определённого поля ввода могут быть необходимы специфические символы, которые удобнее вводить с помощью определённого метода ввода.

Метод ввода может использовать несколько событий нажатия клавиш последовательно и в конечном итоге выдать составленный результат. Это называется предварительным редактированием, и метод ввода может предоставлять обратную связь об этом процессе, отображая промежуточные состояния композиции в виде текста предварительного редактирования. Например, стандартный метод ввода GTK реализует ввод произвольных кодов Юникода, удерживая нажатыми клавиши 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_get_preedit_string ()

void
gtk_im_context_get_preedit_string (GtkIMContext *context,
                                   char **str,
                                   PangoAttrList **attrs,
                                   int *cursor_pos);

Получить текущую строку предварительного редактирования для контекста ввода и список атрибутов для применения к строке. Эта строка должна быть отображена вставленной в точку вставки.

Параметры

context

a GtkIMContext

str

место для хранения полученной строки. Полученная строка должна быть освобождена с помощью g_free().

[out][transfer full]

attrs

место для хранения полученного списка атрибутов. После завершения работы со списком вы должны разыменовать его с помощью pango_attr_list_unref().

[out][transfer full]

cursor_pos

место для хранения позиции курсора (в символах) внутри строки предварительного редактирования.

[out]

gtk_im_context_filter_keypress ()

gboolean
gtk_im_context_filter_keypress (GtkIMContext *context,
                                GdkEvent *event);

Разрешить методу ввода внутренне обрабатывать события нажатия и отпускания клавиш. Если эта функция возвращает TRUE, дальнейшая обработка этого события нажатия клавиши не должна производиться.

Параметры

context

a GtkIMContext

event

событие нажатия клавиши

Возвращаемое значение

TRUE если метод ввода обработал событие нажатия клавиши.

gtk_im_context_filter_key ()

gboolean
gtk_im_context_filter_key (GtkIMContext *context,
                           gboolean press,
                           GdkSurface *surface,
                           GdkDevice *device,
                           guint32 time,
                           guint keycode,
                           GdkModifierType state,
                           int group);

Разрешить методу ввода пересылать события нажатия и отпускания клавиш другому методу ввода, не обязательно имея доступ к GdkEvent.

Параметры

context

a GtkIMContext

press

является ли событие событием нажатия или отпускания клавиши

surface

поверхность, для которой предназначено событие

device

устройство, для которого предназначено событие

time

временная метка события

keycode

код клавиши для события

state

состояние модификаторов для события

group

активная группа клавиатуры для события

Возвращаемое значение

TRUE если метод ввода обработал событие нажатия клавиши.

gtk_im_context_focus_in ()

void
gtk_im_context_focus_in (GtkIMContext *context);

Уведомить метод ввода, что виджет, которому соответствует этот контекст ввода, получил фокус. Метод ввода может, например, изменить отображаемую обратную связь, чтобы отразить это изменение.

Параметры

context

a GtkIMContext

gtk_im_context_focus_out ()

void
gtk_im_context_focus_out (GtkIMContext *context);

Уведомить метод ввода, что виджет, которому соответствует этот контекст ввода, потерял фокус. Метод ввода может, например, изменить отображаемую обратную связь или сбросить состояние контекстов, чтобы отразить это изменение.

Параметры

context

a GtkIMContext

gtk_im_context_reset ()

void
gtk_im_context_reset (GtkIMContext *context);

Уведомить метод ввода о том, что было внесено изменение, например, изменение позиции курсора. Это обычно заставит метод ввода очистить состояние предварительного редактирования.

Параметры

context

a GtkIMContext

gtk_im_context_set_client_widget ()

void
gtk_im_context_set_client_widget (GtkIMContext *context,
                                  GtkWidget *widget);

Установить клиентское окно для контекста ввода; это GtkWidget, удерживающий фокус ввода. Этот виджет используется для правильного позиционирования окон состояния и может также использоваться для целей, внутренних для метода ввода.

Параметры

context

a GtkIMContext

widget

клиентский виджет. Может быть NULL для указания того, что предыдущий клиентский виджет больше не существует.

[allow-none]

gtk_im_context_set_cursor_location ()

void
gtk_im_context_set_cursor_location (GtkIMContext *context,
                                    const GdkRectangle *area);

Уведомить метод ввода о том, что было произведено изменение позиции курсора. Положение относительно клиентского окна.

Параметры

context

a GtkIMContext

area

новое положение

gtk_im_context_set_use_preedit ()

void
gtk_im_context_set_use_preedit (GtkIMContext *context,
                                gboolean use_preedit);

Устанавливает, должен ли контекст метода ввода использовать строку предварительного редактирования для отображения обратной связи. Если use_preedit имеет значение FALSE (по умолчанию TRUE), контекст метода ввода может использовать другой способ отображения обратной связи, например, отображая её в дочернем элементе корневого окна.

Параметры

context

a GtkIMContext

use_preedit

должен ли контекст метода ввода использовать строку предварительного редактирования.

gtk_im_context_set_surrounding ()

void
gtk_im_context_set_surrounding (GtkIMContext *context,
                                const char *text,
                                int len,
                                int cursor_index);

Устанавливает контекст, окружающий точку вставки и строку предварительного редактирования. Ожидается, что эта функция будет вызвана в ответ на сигнал GtkIMContext::retrieve_surrounding, и, вероятно, не будет иметь эффекта, если вызвана в другое время.

Параметры

context

a GtkIMContext

text

текст, окружающий точку вставки, в формате UTF-8. Строка предварительного редактирования не должна быть включена в text .

len

длина text или -1, если text имеет нулевой терминатор

cursor_index

байтовый индекс курсора вставки внутри text .

gtk_im_context_get_surrounding ()

gboolean
gtk_im_context_get_surrounding (GtkIMContext *context,
                                char **text,
                                int *cursor_index);

Получает контекст вокруг точки вставки. Методы ввода обычно нуждаются в контексте, чтобы ограничить ввод текста на основе уже существующего текста; это важно для языков, таких как тайский, где допускаются только некоторые последовательности символов.

Эта функция реализуется путём отправки сигнала GtkIMContext::retrieve_surrounding методу ввода; в ответ на этот сигнал виджет должен предоставить как можно больше контекста, до целого абзаца, вызвав gtk_im_context_set_surrounding(). Обратите внимание, что виджет не обязан реагировать на сигнал ::retrieve_surrounding, поэтому методы ввода должны быть готовы функционировать без контекста.

Параметры

context

объект GtkIMContext

text

место для хранения закодированной в UTF-8 строки текста, содержащей контекст вокруг точки вставки. Если функция возвращает TRUE, необходимо освободить результат, сохранённый в этом месте, с помощью g_free().

[out][transfer full]

cursor_index

место для хранения индекса байта курсора вставки в text .

[out]

Возвращаемое значение

TRUE если окружение текста было предоставлено; в этом случае необходимо освободить результат, сохранённый в *text.

gtk_im_context_delete_surrounding ()

gboolean
gtk_im_context_delete_surrounding (GtkIMContext *context,
                                   int offset,
                                   int n_chars);

Запрашивает у виджета, к которому прикреплён контекст ввода, удалить символы вокруг позиции курсора, отправив сигнал GtkIMContext::delete_surrounding. Обратите внимание, что offset и n_chars указаны в символах, а не байтах, что отличается от использования в других местах в GtkIMContext.

Для использования этой функции сначала необходимо вызвать gtk_im_context_get_surrounding() для получения текущего контекста и сразу после этого вызвать эту функцию, чтобы убедиться, что известно, что удаляется. Также необходимо учитывать, что даже если сигнал был обработан, контекст ввода может не удалить все запрошенные символы.

Эта функция используется методом ввода, который хочет заменить существующий текст новым вводом. Она не полезна для приложений.

Параметры

context

объект GtkIMContext

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 char *str);
  gboolean (*retrieve_surrounding) (GtkIMContext *context);
  gboolean (*delete_surrounding)   (GtkIMContext *context,
				    int           offset,
				    int           n_chars);

  /* Virtual functions */
  void     (*set_client_widget)   (GtkIMContext   *context,
				   GtkWidget      *widget);
  void     (*get_preedit_string)  (GtkIMContext   *context,
				   char          **str,
				   PangoAttrList **attrs,
				   int            *cursor_pos);
  gboolean (*filter_keypress)     (GtkIMContext   *context,
			           GdkEvent       *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 char     *text,
				   int             len,
				   int             cursor_index);
  gboolean (*get_surrounding)     (GtkIMContext   *context,
				   char          **text,
				   int            *cursor_index);
};

Члены

preedit_start ()

Обработчик по умолчанию сигнала «preedit-start».

preedit_end ()

Обработчик по умолчанию сигнала «preedit-end».

preedit_changed ()

Обработчик по умолчанию сигнала «preedit-changed».

commit ()

Обработчик по умолчанию сигнала «commit».

retrieve_surrounding ()

Обработчик по умолчанию сигнала «retrieve-surrounding».

delete_surrounding ()

Обработчик по умолчанию сигнала «delete-surrounding».

set_client_widget ()

Вызывается через gtk_im_context_set_client_widget() при изменении окна ввода, где будет отображаться введённый текст. Переопределите этот метод, чтобы отслеживать текущее окно ввода, например, для позиционирования индикатора состояния вашего метода ввода.

get_preedit_string ()

Вызывается через gtk_im_context_get_preedit_string() для получения текста, который в данный момент редактируется, для отображения в позиции курсора. Любой метод ввода, который компонует сложные символы или любые другие композиции из нескольких последовательных нажатий клавиш, должен переопределить этот метод, чтобы обеспечить обратную связь.

filter_keypress ()

Вызывается через gtk_im_context_filter_keypress() при каждом нажатии или отпускании клавиши. Каждый нетривиальный метод ввода должен переопределить этот метод, чтобы реализовать отображение соответствия между событиями нажатия клавиш и текстом. Возвращаемое значение TRUE указывает вызывающей стороне, что событие было обработано методом ввода. В этом случае сигнал «commit» должен быть выпущен по завершении последовательности нажатий клавиш, чтобы вернуть полученный текст обратно в виджет ввода. В качестве альтернативы, может быть возвращено FALSE, чтобы указать, что событие не было обработано методом ввода. Если для клавиши существует встроенное отображение, используется это отображение для создания символа.

focus_in ()

Вызывается через gtk_im_context_focus_in() при получении фокуса виджетом ввода. Может быть переопределён для отслеживания текущего фокуса.

focus_out ()

Вызывается через gtk_im_context_focus_out() при потере фокуса виджетом ввода. Может быть переопределён для отслеживания текущего фокуса.

reset ()

Вызывается через gtk_im_context_reset() для сигнализации о событии, таком как изменение позиции курсора. Метод ввода, реализующий предварительный просмотр, должен переопределить этот метод, чтобы очистить состояние предварительного просмотра при сбросе.

set_cursor_location ()

Вызывается через gtk_im_context_set_cursor_location() для уведомления метода ввода о текущей позиции курсора относительно окна клиента. Может быть переопределён для реализации отображения всплывающих окон в позиции курсора.

set_use_preedit ()

Вызывается через gtk_im_context_set_use_preedit() для управления использованием строки предварительного просмотра. Переопределите этот метод, чтобы отображать обратную связь другими средствами, если он выключен.

set_surrounding ()

Вызывается через gtk_im_context_set_surrounding() в ответ на сигнал «retrieve-surrounding» для обновления представления метода ввода о контексте вокруг курсора. Нет необходимости переопределять этот метод, даже для методов ввода, которые реализуют контекстно-зависимое поведение. Базовая реализация достаточна для работы gtk_im_context_get_surrounding().

get_surrounding ()

Вызывается через gtk_im_context_get_surrounding() для обновления контекста вокруг позиции курсора. Нет необходимости переопределять этот метод, даже для методов ввода, которые реализуют контекстно-зависимое поведение. Базовая реализация отправляет сигнал «retrieve-surrounding» и записывает контекст, полученный последующим вызовом get_surrounding.

Подробное описание свойств

Свойство “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

данные пользователя, заданные при подключении обработчика сигнала.

Флаги: Run Last

Сигнал “delete-surrounding”

gboolean
user_function (GtkIMContext *context,
               int           offset,
               int           n_chars,
               gpointer      user_data)

Сигнал ::delete-surrounding генерируется, когда методу ввода необходимо удалить часть или все контекста, окружающего курсор.

Параметры

context

объект, на котором генерируется сигнал

offset

смещение символа от позиции курсора текста, который нужно удалить. Отрицательное значение указывает позицию перед курсором.

n_chars

количество символов, которые нужно удалить

user_data

данные пользователя, заданные при подключении обработчика сигнала.

Возвращаемое значение

TRUE если сигнал был обработан.

Флаги: Run Last

Сигнал “preedit-changed”

void
user_function (GtkIMContext *context,
               gpointer      user_data)

Сигнал ::preedit-changed генерируется всякий раз, когда изменяется последовательность предварительного редактирования, которая вводится в данный момент. Он также генерируется в конце последовательности предварительного редактирования, в этом случае gtk_im_context_get_preedit_string() возвращает пустую строку.

Параметры

context

объект, на котором генерируется сигнал

user_data

данные пользователя, заданные при подключении обработчика сигнала.

Флаги: Run Last

Сигнал “preedit-end”

void
user_function (GtkIMContext *context,
               gpointer      user_data)

Сигнал ::preedit-end генерируется, когда последовательность предварительного редактирования завершена или отменена.

Параметры

context

объект, на котором генерируется сигнал

user_data

данные пользователя, заданные при подключении обработчика сигнала.

Флаги: Run Last

Сигнал “preedit-start”

void
user_function (GtkIMContext *context,
               gpointer      user_data)

Сигнал ::preedit-start генерируется, когда начинается новая последовательность предварительного редактирования.

Параметры

context

объект, на котором генерируется сигнал

user_data

данные пользователя, заданные при подключении обработчика сигнала.

Флаги: Run Last

Сигнал “retrieve-surrounding”

gboolean
user_function (GtkIMContext *context,
               gpointer      user_data)

Сигнал ::retrieve-surrounding генерируется, когда методу ввода требуется контекст, окружающий курсор. Обработчик должен установить контекст окружающей области метода ввода, вызвав метод gtk_im_context_set_surrounding().

Параметры

context

объект, на котором генерируется сигнал

user_data

данные пользователя, заданные при подключении обработчика сигнала.

Возвращаемое значение

TRUE если сигнал был обработан.

Флаги: Run Last

© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkIMContext.html

Spec-Zone.ru

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