Spec-Zone.ru › GTK 3.20

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 путём удержания клавиш «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

a GtkIMContext

window

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

[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

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,
                                GdkEventKey *event);

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

Параметры

context

a GtkIMContext

event

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

Возвращает

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_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 ложно (по умолчанию истинно), то контекст метода ввода может использовать другой метод отображения обратной связи, например, отображая его в дочернем окне корневого окна.

Параметры

context

a GtkIMContext

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

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,
                                gchar **text,
                                gint *cursor_index);

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

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

Параметры

context

a 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,
                                   gint offset,
                                   gint n_chars);

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

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

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

Параметры

context

a 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 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-start”.

preedit_end ()

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

preedit_changed ()

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

commit ()

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

retrieve_surrounding ()

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

delete_surrounding ()

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

set_client_window ()

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

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 .

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 *context_id;

Уникальная строка идентификации метода ввода.

const gchar *context_name;

Имя метода ввода, понятное пользователю.

const gchar *domain;

Домен перевода, используемый с dgettext()

const gchar *domain_dirname;

Имя каталога локалей для использования с bindtextdomain()

const gchar *default_locales;

Список локалей, разделённых двоеточием, где этот метод ввода должен быть по умолчанию. Звёздочка «*» устанавливает значение по умолчанию для всех локалей.

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

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

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

Флаги: Run Last

Сигнал “delete-surrounding”

gboolean
user_function (GtkIMContext *context,
               gint          offset,
               gint          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.gnome.org/gtk3/3.20/GtkIMContext.html

Spec-Zone.ru

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