Буферы обмена
Буферы обмена — Хранение данных в буферах обмена
Функции
Сигналы
Типы и значения
Иерархия объектов
GObject ╰── GtkClipboard
Файлы заголовков
#include <gtk/gtk.h>
Описание
Объект GtkClipboard представляет буфер обмена данными, общими для разных процессов или разных виджетов в одном процессе. Каждый буфер обмена идентифицируется именем, закодированным как GdkAtom. (Преобразование в строки и из строк можно выполнить с помощью gdk_atom_intern() и gdk_atom_name().) Стандартный буфер обмена соответствует атому “CLIPBOARD”; другой часто используемый буфер обмена — “PRIMARY”, который в X традиционно содержит выбранный текст.
Для поддержки нескольких форматов в одном буфере обмена механизм буфера обмена позволяет использовать обратные вызовы вместо самих данных. При установке содержимого буфера обмена вы можете либо указать данные напрямую (через функции, такие как gtk_clipboard_set_text()), либо указать обратный вызов, который будет вызван позже, когда данные понадобятся (через gtk_clipboard_set_with_data() или gtk_clipboard_set_with_owner().) Использование обратного вызова также предотвращает копирование данных, когда они не нужны.
gtk_clipboard_set_with_data() и gtk_clipboard_set_with_owner() довольно похожи; выбор между ними в основном зависит от удобства в конкретной ситуации. Первый вариант наиболее полезен, когда вы хотите иметь массив данных с обратными вызовами для его преобразования в различные типы данных, которые вы рекламируете. Когда вызывается предоставленный вами clear_func, вы просто освобождаете массив данных. Второй вариант более полезен, когда содержимое буфера обмена отражает внутреннее состояние объекта GObject (Например, для буфера обмена PRIMARY, когда виджет ввода предоставляет содержимое буфера обмена, содержимое просто представляет собой текст в выделенной области.) Если содержимое меняется, виджет ввода может вызвать gtk_clipboard_set_with_owner() для обновления отметки времени владения буфером обмена без необходимости беспокоиться о вызове clear_func.
Запрос данных из буфера обмена по своей сути асинхронный. Если содержимое буфера обмена предоставляется в рамках одного процесса, то для получения данных будет выполнен прямой вызов функции, но если оно предоставляется другим процессом, то данные необходимо получить из другого процесса, что может занять некоторое время. Чтобы избежать блокировки пользовательского интерфейса, вызов для запроса выделения, gtk_clipboard_request_contents(), принимает обратный вызов, который будет вызван при получении содержимого (или при сбое запроса). Если вы не хотите иметь дело с предоставлением отдельного обратного вызова, вы также можете использовать gtk_clipboard_wait_for_contents(). Это запустит цикл событий GLib рекурсивно, ожидая содержимого. Это может упростить поток кода, но вам все равно необходимо учитывать, что другие обратные вызовы в вашей программе могут быть вызваны во время выполнения этого рекурсивного цикла.
Наряду с функциями получения содержимого буфера обмена в виде произвочного набора данных, также существуют функции для получения его как текста, gtk_clipboard_request_text() и gtk_clipboard_wait_for_text(). Эти функции занимаются определением форматов, рекламируемых поставщиком буфера обмена, запросом буфера обмена в лучшем доступном формате и преобразованием результатов в кодировку UTF-8. (Стандартная форма представления строк в GTK+.)
Функции
GtkClipboardReceivedFunc ()
void (*GtkClipboardReceivedFunc) (GtkClipboard *clipboard,GtkSelectionData *selection_data,gpointer data);
Функция, вызываемая при получении результатов gtk_clipboard_request_contents(), или при ошибке запроса.
Параметры
clipboard | объект GtkClipboard | |
selection_data | объект GtkSelectionData, содержащий полученные данные. Если получение данных завершилось ошибкой, то поле длины | |
data | значение | [closure] |
GtkClipboardTextReceivedFunc ()
void (*GtkClipboardTextReceivedFunc) (GtkClipboard *clipboard,const gchar *text,gpointer data);
Функция, вызываемая при получении результатов gtk_clipboard_request_text(), или при ошибке запроса.
Параметры
clipboard | объект GtkClipboard | |
text | полученный текст, закодированный в UTF-8, или | [nullable] |
data | значение | [closure] |
GtkClipboardImageReceivedFunc ()
void (*GtkClipboardImageReceivedFunc) (GtkClipboard *clipboard,GdkPixbuf *pixbuf,gpointer data);
Функция, вызываемая при получении результатов gtk_clipboard_request_image(), или при ошибке запроса.
Параметры
clipboard | объект GtkClipboard | |
pixbuf | полученный образ | |
data | значение | [closure] |
С: 2.6
GtkClipboardTargetsReceivedFunc ()
void (*GtkClipboardTargetsReceivedFunc) (GtkClipboard *clipboard,GdkAtom *atoms,gint n_atoms,gpointer data);
Функция, вызываемая при получении результатов gtk_clipboard_request_targets(), или при ошибке запроса.
Параметры
clipboard | объект GtkClipboard | |
atoms | поддерживаемые целевые атомы, массив GdkAtom, или | [nullable][array length=n_atoms] |
n_atoms | длина массива | |
data | значение | [closure] |
С: 2.4
GtkClipboardRichTextReceivedFunc ()
void (*GtkClipboardRichTextReceivedFunc) (GtkClipboard *clipboard,GdkAtom format,const guint8 *text,gsize length,gpointer data);
Функция, вызываемая при получении результатов gtk_clipboard_request_rich_text(), или при ошибке запроса.
Параметры
clipboard | объект GtkClipboard | |
format | Формат форматированного текста. | |
text | полученный форматированный текст, закодированный в UTF-8, или | [nullable][type utf8] |
length | Длина текста. | |
data | значение | [closure] |
С: 2.10
GtkClipboardURIReceivedFunc ()
void (*GtkClipboardURIReceivedFunc) (GtkClipboard *clipboard,gchar **uris,gpointer data);
Функция, вызываемая при получении результатов gtk_clipboard_request_uris(), или при ошибке запроса.
Параметры
clipboard | объект GtkClipboard | |
uris | полученные URI. | [array zero-terminated=1] |
data | значение | [closure] |
С: 2.14
GtkClipboardGetFunc ()
void (*GtkClipboardGetFunc) (GtkClipboard *clipboard,GtkSelectionData *selection_data,guint info,gpointer user_data_or_owner);
Функция, которая будет вызвана для предоставления содержимого выделенного текста. Если было объявлено несколько типов данных, запрашиваемый тип можно определить по параметру info или проверив целевое поле параметра selection_data . Если данные могут быть успешно преобразованы, то они должны быть сохранены в объекте selection_data, вызвав gtk_selection_data_set() (или связанные функции, такие как gtk_selection_data_set_text()). Если данные не установлены, запрашивающему будет сообщено об ошибке получения данных.
Параметры
clipboard | объект GtkClipboard | |
selection_data | аргумент GtkSelectionData, в котором должны быть сохранены запрашиваемые данные. | |
info | поле info, соответствующее запрошенному целевому значению из массива GtkTargetEntry, переданного в | |
user_data_or_owner | аргумент |
GtkClipboardClearFunc ()
void (*GtkClipboardClearFunc) (GtkClipboard *clipboard,gpointer user_data_or_owner);
Функция, которая будет вызвана при изменении или очистке содержимого буфера обмена. После этого вызова аргумент user_data_or_owner больше не будет использоваться.
Параметры
clipboard | объект GtkClipboard | |
user_data_or_owner | аргумент |
gtk_clipboard_get ()
GtkClipboard *
gtk_clipboard_get (GdkAtom selection); Возвращает
.
[transfer none]
gtk_clipboard_get_for_display ()
GtkClipboard * gtk_clipboard_get_for_display (GdkDisplay *display,GdkAtom selection);
Возвращает
.
[transfer none]
С версии: 2.2
gtk_clipboard_get_display ()
GdkDisplay *
gtk_clipboard_get_display (GtkClipboard *clipboard); Возвращает
.
[transfer none]
С версии: 2.2
gtk_clipboard_get_default ()
GtkClipboard *
gtk_clipboard_get_default (GdkDisplay *display); Возвращает объект буфера обмена по умолчанию для использования с элементами меню «Вырезать/Копировать/Вставить» и сочетаниями клавиш.
Параметры
display | объект GdkDisplay для которого нужно получить буфер обмена. |
Возвращает
объект буфера обмена по умолчанию.
[transfer none]
С версии: 3.16
gtk_clipboard_set_with_data ()
gboolean gtk_clipboard_set_with_data (GtkClipboard *clipboard,const GtkTargetEntry *targets,guint n_targets,GtkClipboardGetFunc get_func,GtkClipboardClearFunc clear_func,gpointer user_data);
[skip]
Параметры
targets | . | [array length=n_targets] |
get_func | . | [scope async] |
clear_func | . | [scope async] |
gtk_clipboard_set_with_owner ()
gboolean gtk_clipboard_set_with_owner (GtkClipboard *clipboard,const GtkTargetEntry *targets,guint n_targets,GtkClipboardGetFunc get_func,GtkClipboardClearFunc clear_func,GObject *owner);
[skip]
Параметры
targets | . | [array length=n_targets] |
get_func | . | [scope async] |
clear_func | . | [scope async] |
gtk_clipboard_get_owner ()
GObject *
gtk_clipboard_get_owner (GtkClipboard *clipboard); Возвращает
.
[transfer none]
gtk_clipboard_clear ()
void
gtk_clipboard_clear (GtkClipboard *clipboard); Очищает содержимое буфера обмена. Обычно это следует делать только между вызовом gtk_clipboard_set_with_owner() или gtk_clipboard_set_with_data() и вызовом обработчика clear_func, который был вами предоставлен. В противном случае буфер обмена может принадлежать другому элементу.
Параметры
clipboard | объект GtkClipboard |
gtk_clipboard_set_text ()
void gtk_clipboard_set_text (GtkClipboard *clipboard,const gchar *text,gint len);
Устанавливает содержимое буфера обмена на указанную строку UTF-8. GTK+ сделает копию текста и возьмет на себя ответственность за обработку запросов на текст и за преобразование текста в требуемый формат.
Параметры
clipboard | объект GtkClipboard | |
text | строка UTF-8. | |
len | длина |
gtk_clipboard_set_image ()
void gtk_clipboard_set_image (GtkClipboard *clipboard,GdkPixbuf *pixbuf);
Устанавливает содержимое буфера обмена на заданный GdkPixbuf. GTK+ возьмёт на себя ответственность за обработку запросов изображения и преобразование изображения в требуемый формат.
Параметры
clipboard | объект GtkClipboard | |
pixbuf | объект GdkPixbuf |
С: 2.6
gtk_clipboard_request_contents ()
void gtk_clipboard_request_contents (GtkClipboard *clipboard,GdkAtom target,GtkClipboardReceivedFunc callback,gpointer user_data);
Параметры
callback | . | [scope async] |
gtk_clipboard_request_text ()
void gtk_clipboard_request_text (GtkClipboard *clipboard,GtkClipboardTextReceivedFunc callback,gpointer user_data);
Параметры
callback | . | [scope async] |
gtk_clipboard_request_image ()
void gtk_clipboard_request_image (GtkClipboard *clipboard,GtkClipboardImageReceivedFunc callback,gpointer user_data);
Параметры
callback | . | [scope async] |
С: 2.6
gtk_clipboard_request_targets ()
void gtk_clipboard_request_targets (GtkClipboard *clipboard,GtkClipboardTargetsReceivedFunc callback,gpointer user_data);
Параметры
callback | . | [scope async] |
С: 2.4
gtk_clipboard_request_rich_text ()
void gtk_clipboard_request_rich_text (GtkClipboard *clipboard,GtkTextBuffer *buffer,GtkClipboardRichTextReceivedFunc callback,gpointer user_data);
Параметры
callback | . | [scope async] |
С: 2.10
gtk_clipboard_request_uris ()
void gtk_clipboard_request_uris (GtkClipboard *clipboard,GtkClipboardURIReceivedFunc callback,gpointer user_data);
Параметры
callback | . | [scope async] |
С: 2.14
gtk_clipboard_wait_for_contents ()
GtkSelectionData * gtk_clipboard_wait_for_contents (GtkClipboard *clipboard,GdkAtom target);
Возвращаемое значение
.
[nullable]
gtk_clipboard_wait_for_text ()
gchar *
gtk_clipboard_wait_for_text (GtkClipboard *clipboard); Возвращаемое значение
.
[nullable]
gtk_clipboard_wait_for_image ()
GdkPixbuf *
gtk_clipboard_wait_for_image (GtkClipboard *clipboard); Возвращаемое значение
.
[nullable][transfer full]
С: 2.6
gtk_clipboard_wait_for_rich_text ()
guint8 * gtk_clipboard_wait_for_rich_text (GtkClipboard *clipboard,GtkTextBuffer *buffer,GdkAtom *format,gsize *length);
Параметры
format | . | [out] |
length | . | [out] |
Возвращаемое значение
.
[nullable]
С: 2.10
gtk_clipboard_wait_for_uris ()
gchar **
gtk_clipboard_wait_for_uris (GtkClipboard *clipboard); Возвращаемое значение
.
[nullable][array zero-terminated=1]
С: 2.14
gtk_clipboard_wait_is_text_available ()
gboolean
gtk_clipboard_wait_is_text_available (GtkClipboard *clipboard); Проверяет наличие доступного текста для вставки. Это делается с помощью запроса атома TARGETS и проверки, содержит ли он какой-либо из поддерживаемых текстовых целевых значений. Эта функция ожидает получения данных, используя главный цикл, поэтому события, таймауты и т. д. могут быть обработаны во время ожидания.
Эта функция немного быстрее, чем вызов gtk_clipboard_wait_for_text(), так как ей не нужно извлекать фактический текст.
Параметры
clipboard | объект GtkClipboard |
gtk_clipboard_wait_is_image_available ()
gboolean
gtk_clipboard_wait_is_image_available (GtkClipboard *clipboard); Проверяет наличие доступного изображения для вставки. Это делается с помощью запроса атома TARGETS и проверки, содержит ли он какой-либо из поддерживаемых целевых значений изображений. Эта функция ожидает получения данных, используя главный цикл, поэтому события, таймауты и т. д. могут быть обработаны во время ожидания.
Эта функция немного быстрее, чем вызов gtk_clipboard_wait_for_image(), так как ей не нужно извлекать фактические данные изображения.
Параметры
clipboard | объект GtkClipboard |
С: 2.6
gtk_clipboard_wait_is_rich_text_available ()
gboolean gtk_clipboard_wait_is_rich_text_available (GtkClipboard *clipboard,GtkTextBuffer *buffer);
Проверяет наличие доступного форматированного текста для вставки. Это делается с помощью запроса атома TARGETS и проверки, содержит ли он какой-либо из поддерживаемых целевых значений форматированного текста. Эта функция ожидает получения данных, используя главный цикл, поэтому события, таймауты и т. д. могут быть обработаны во время ожидания.
Эта функция немного быстрее, чем вызов gtk_clipboard_wait_for_rich_text(), так как ей не нужно извлекать фактический текст.
Параметры
clipboard | объект GtkClipboard | |
buffer | объект GtkTextBuffer |
С: 2.10
gtk_clipboard_wait_is_uris_available ()
gboolean
gtk_clipboard_wait_is_uris_available (GtkClipboard *clipboard); Проверка наличия списка URI, доступного для вставки. Это выполняется путем запроса атома TARGETS и проверки, содержит ли он целевые URI. Эта функция ожидает получения данных, используя основной цикл, поэтому в ожидании могут быть обработаны события, таймауты и т. д.
Эта функция немного быстрее, чем вызов gtk_clipboard_wait_for_uris(), поскольку ей не нужно получать фактические данные URI.
Параметры
clipboard |
С версии: 2.14
gtk_clipboard_wait_for_targets ()
gboolean gtk_clipboard_wait_for_targets (GtkClipboard *clipboard,GdkAtom **targets,gint *n_targets);
Параметры
targets | . | [out][array length=n_targets] |
n_targets | . | [out] |
С версии: 2.4
gtk_clipboard_wait_is_target_available ()
gboolean gtk_clipboard_wait_is_target_available (GtkClipboard *clipboard,GdkAtom target);
Проверяет, поддерживает ли буфер обмена вставку данных заданного типа. Эта функция может использоваться для определения, должно ли быть отмечено меню «Вставить» как неактивное или нет.
Если вы хотите узнать, есть ли текст в буфере обмена, используйте gtk_clipboard_wait_is_text_available() вместо этого.
Параметры
clipboard | ||
target | A GdkAtom указывающий целевой тип данных. |
С версии: 2.6
gtk_clipboard_set_can_store ()
void gtk_clipboard_set_can_store (GtkClipboard *clipboard,const GtkTargetEntry *targets,gint n_targets);
Параметры
targets | . | [allow-none][array length=n_targets] |
С версии: 2.6
gtk_clipboard_store ()
void
gtk_clipboard_store (GtkClipboard *clipboard); Сохраняет текущие данные буфера обмена где-то, чтобы они сохранились после выхода приложения.
Параметры
clipboard |
С версии: 2.6
gtk_clipboard_get_selection ()
GdkAtom
gtk_clipboard_get_selection (GtkClipboard *clipboard); Получает выбор, к которому относится этот буфер обмена.
Параметры
clipboard |
Возвращаемое значение
Выбранное значение
С версии: 3.22
Типы и значения
GtkClipboard
typedef struct _GtkClipboard GtkClipboard;
Подробности сигналов
Сигнал “owner-change”
void user_function (GtkClipboard *clipboard, GdkEvent *event, gpointer user_data)
Параметры
event | . | [type GdkEventOwnerChange] |
user_data | данные пользователя, установленные при подключении обработчика сигнала. |
Флаги: Run First
С версии: 2.6
См. также
© 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/gtk3-Clipboards.html