краткий обзор#include <gtk/gtk.h> gtkclipboard; void (*gtkclipboardreceivedfunc) (gtkclipboard *clipboard, gtkselectiondata *selection_data, gpointer data); void (*gtkclipboardtextreceivedfunc) (gtkclipboard *clipboard, const gchar *text, gpointer data); void (*gtkclipboardimagereceivedfunc) (gtkclipboard *clipboard, gdkpixbuf *pixbuf, gpointer data); void (*gtkclipboardtargetsreceivedfunc) (gtkclipboard *clipboard, gdkatom *atoms, gint n_atoms, gpointer data); void (*gtkclipboardrichtextreceivedfunc) (gtkclipboard *clipboard, gdkatom format, const guint8 *text, gsize length, gpointer data); void (*gtkclipboardgetfunc) (gtkclipboard *clipboard, gtkselectiondata *selection_data, guint info, gpointer user_data_or_owner); void (*gtkclipboardclearfunc) (gtkclipboard *clipboard, gpointer user_data_or_owner); gtkclipboard* gtk_clipboard_get (gdkatom selection); gtkclipboard* gtk_clipboard_get_for_display (gdkdisplay *display, gdkatom selection); gdkdisplay* gtk_clipboard_get_display (gtkclipboard *clipboard); gboolean gtk_clipboard_set_with_data (gtkclipboard *clipboard, const gtktargetentry *targets, guint n_targets, gtkclipboardgetfunc get_func, gtkclipboardclearfunc clear_func, gpointer user_data); gboolean gtk_clipboard_set_with_owner (gtkclipboard *clipboard, const gtktargetentry *targets, guint n_targets, gtkclipboardgetfunc get_func, gtkclipboardclearfunc clear_func, gobject *owner); gobject* gtk_clipboard_get_owner (gtkclipboard *clipboard); void gtk_clipboard_clear (gtkclipboard *clipboard); void gtk_clipboard_set_text (gtkclipboard *clipboard, const gchar *text, gint len); void gtk_clipboard_set_image (gtkclipboard *clipboard, gdkpixbuf *pixbuf); void gtk_clipboard_request_contents (gtkclipboard *clipboard, gdkatom target, gtkclipboardreceivedfunc callback, gpointer user_data); void gtk_clipboard_request_text (gtkclipboard *clipboard, gtkclipboardtextreceivedfunc callback, gpointer user_data); void gtk_clipboard_request_image (gtkclipboard *clipboard, gtkclipboardimagereceivedfunc callback, gpointer user_data); void gtk_clipboard_request_targets (gtkclipboard *clipboard, gtkclipboardtargetsreceivedfunc callback, gpointer user_data); void gtk_clipboard_request_rich_text (gtkclipboard *clipboard, gtktextbuffer *buffer, gtkclipboardrichtextreceivedfunc callback, gpointer user_data); gtkselectiondata* gtk_clipboard_wait_for_contents (gtkclipboard *clipboard, gdkatom target); gchar* gtk_clipboard_wait_for_text (gtkclipboard *clipboard); gdkpixbuf* gtk_clipboard_wait_for_image (gtkclipboard *clipboard); guint8* gtk_clipboard_wait_for_rich_text (gtkclipboard *clipboard, gtktextbuffer *buffer, gdkatom *format, gsize *length); gboolean gtk_clipboard_wait_is_text_available (gtkclipboard *clipboard); gboolean gtk_clipboard_wait_is_image_available (gtkclipboard *clipboard); gboolean gtk_clipboard_wait_is_rich_text_available (gtkclipboard *clipboard, gtktextbuffer *buffer); gboolean gtk_clipboard_wait_for_targets (gtkclipboard *clipboard, gdkatom **targets, gint *n_targets); gboolean gtk_clipboard_wait_is_target_available (gtkclipboard *clipboard, gdkatom target); void gtk_clipboard_set_can_store (gtkclipboard *clipboard, const gtktargetentry *targets, gint n_targets); void gtk_clipboard_store (gtkclipboard *clipboard); иерархия объектовgobject +----gtkclipboard сигналы"owner-change" void user_function (gtkclipboard *clipboard, gdkevent *event, gpointer user_data) : run first описаниеобъект 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(), чтобы обновить временную метку (timestamp) для собственности буфера обмена, не заботясь о вызове clear_func. требование данных из буфера обмена черезвычайно асинхронно. если содержимое буфера обмена обеспечивается в пределах одного и того же процесса, то непосредственный вызов функции восстановит данные, но если содержимое обеспечивает другой процесс, то данные нуждаются в восстановлении другим процессом, что требует некоторого времени. чтобы избежать блокирования пользовательского интерфейса, вызов запрашивает выделение, gtk_clipboard_request_contents() имеет обратный вызов который будет вызван, когда запрошено содержимое (или когда запрос не удался.) если вы не хотите иметь дело с обеспечением отдельного обратного вызова, вы можете использовать gtk_clipboard_wait_for_contents(). она выполняет основной цикл glib, рекурсивно ожидая содержимое. это довольно упрощает код, и вы всё ещё можете вызвать другие обратные вызовы вашей программы не смотря на рекурсивное выполнение в основном цикле. на ряду с этими функциями получения содержимого буфера обмена как произвольный кусок данных, есть ещё также функции обеспечивающие эти данные как просто текст, gtk_clipboard_request_text() и gtk_clipboard_wait_for_text(). эти функции имеют осторожность проверять в каком формате помещается содержимое буфера обмена, запрашивают буфер обмена о лучшем допустимом формате и преобразуют результат в кодировку utf-8. (это стандарт представления в gtk+.) деталиgtkclipboardtypedef struct _gtkclipboard gtkclipboard; gtkclipboardreceivedfunc ()void (*gtkclipboardreceivedfunc) (gtkclipboard *clipboard, gtkselectiondata *selection_data, gpointer data); функция вызывается, когда получен результат gtk_clipboard_request_contents(), или когда запрос не удался.
gtkclipboardtextreceivedfunc ()void (*gtkclipboardtextreceivedfunc) (gtkclipboard *clipboard, const gchar *text, gpointer data); функция вызывается, когда получен результат gtk_clipboard_request_text() , или когда запрос не удался.
gtkclipboardimagereceivedfunc ()void (*gtkclipboardimagereceivedfunc) (gtkclipboard *clipboard, gdkpixbuf *pixbuf, gpointer data); функция вызывается, когда получен результат gtk_clipboard_request_image() , или когда запрос не удался.
начиная с версии 2.6 gtkclipboardtargetsreceivedfunc ()void (*gtkclipboardtargetsreceivedfunc) (gtkclipboard *clipboard, gdkatom *atoms, gint n_atoms, gpointer data); функция вызывается, когда получен результат gtk_clipboard_request_targets() , или когда запрос не удался.
начиная с версии 2.4 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()). если нет установленных данных, запрашивающий будет информирован о том, что получение данных не удалось.
gtkclipboardclearfunc ()void (*gtkclipboardclearfunc) (gtkclipboard *clipboard, gpointer user_data_or_owner); функция вызывается когда содержимое буфера обмена изменено или очищено. как только она вызвана, аргумент user_data_or_owner не будет больше использован.
gtk_clipboard_get ()gtkclipboard* gtk_clipboard_get (gdkatom selection); возвращает объект буфера обмена для данного выделения. смотрите gtk_clipboard_get_for_display() для полного понимания.
gtk_clipboard_get_for_display ()gtkclipboard* gtk_clipboard_get_for_display (gdkdisplay *display, gdkatom selection); возвращает объект буфера обмена для данного выделения. пункты меню cut/copy/paste и горячие клавиши клавиатуры должны использовать по умолчанию буфер обмена, возвращённый помещённым gdk_selection_clipboard в selection. (gdk_none поддерживается как синоним для gdk_selection_clipboard по причине обратной совместимости.) объект текущемго выделения или текст должен быть обеспечен буфером обмена идентифицированным gdk_selection_primary. пункты меню cut/copy/paste концептуально копируют содержимое буфера обмена gdk_selection_primary в буфер обмена по умолчанию, то есть они копируют выделение в то, что пользователь видит как буфер обмена. (передавать gdk_none - тоже самое, что использовать gdk_atom_intern ("clipboard", false). смотрите http://www.freedesktop.org/standards/clipboards-spec для детального обсуждения "clipboard" против "primary" выбор для x window system. в win32 gdk_selection_primary буфер обмена по существу игнорируется.) возможно иметь произвольные названия буферов обмена; если вы создаёте новый буфер обмена, вы должны использовать название начинающееся с символа подчёркивания (потому, что icccm требует чтобы не стандартные атомы (atoms) имели префикс нижнего подчёркивания (underscore-prefixed)). например, если ваше приложение называется "foo" и имеет специальный буфер обмена (special-purpose clipboard), вы можете назвать его "_foo_special_clipboard".
начиная с версии 2.2 gtk_clipboard_get_display ()gdkdisplay* gtk_clipboard_get_display (gtkclipboard *clipboard); определяет gdkdisplay связанный с clipboard
начиная с версии 2.2 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); фактически устанавливает содержимое специального буфера обмена обеспечивая список поддерживаемых форматов для данных буфера обмена и вызывает функцию получения фактических данных, когда это требуется.
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); фактически устанавливает содержимое специального буфера обмена обеспечивая список поддерживаемых форматов для данных буфера обмена и вызывает функцию получения фактических данных, когда это требуется. различия между этой функцией и gtk_clipboard_set_with_data(), в том, что эта вместо основного указателя user_data, передаёт gobject.
gtk_clipboard_get_owner ()gobject* gtk_clipboard_get_owner (gtkclipboard *clipboard); если содержимое буфера обмена установлено gtk_clipboard_set_with_owner(), а gtk_clipboard_set_with_data() или gtk_clipboard_clear() не будут в последствии вызваны, возвращается владелец установленный gtk_clipboard_set_with_owner().
gtk_clipboard_clear ()void gtk_clipboard_clear (gtkclipboard *clipboard); очищает содержимое буфера обмена. в основном она должна вызываться только между вашими вызовами gtk_clipboard_set_with_owner() или gtk_clipboard_set_with_data(), и когда clear_func , подставленная вами, вызвана. иначе буфер обмена сможет принадлежать кому-нибудь ещё.
gtk_clipboard_set_text ()void gtk_clipboard_set_text (gtkclipboard *clipboard, const gchar *text, gint len); устанавливает содержимое буфера обмена в данную строку utf-8. gtk+ сделает копию текста и будет отвечать на запросы о тексте, а также преобразует текст в требуемый формат.
gtk_clipboard_set_image ()void gtk_clipboard_set_image (gtkclipboard *clipboard, gdkpixbuf *pixbuf); устанавливает содержимое буфера обмена в полученный gdkpixbuf. gtk+ возьмёт ответственность отвечать на запросы об изображении, а также преобразует изображение в требуемый формат.
начиная с версии 2.6 gtk_clipboard_request_contents ()void gtk_clipboard_request_contents (gtkclipboard *clipboard, gdkatom target, gtkclipboardreceivedfunc callback, gpointer user_data); запрашивает содержимое буфера обмена как полученную цель (target). когда результаты получены, позже будет вызван получаемый обратный вызов.
gtk_clipboard_request_text ()void gtk_clipboard_request_text (gtkclipboard *clipboard, gtkclipboardtextreceivedfunc callback, gpointer user_data); запрашивает содержимое буфера обмена как текст. когда текст получен, позже он будет преобразован в случае необходимости в utf-8 и будет вызван callback. параметр text в callback будет содержать результирующий текст, если запрос успешен, или null если неудачен. это может случиться по различным причинам, в особенности если буфер обмена был пуст или содержимое не может быть конвертировано в текстовый формат.
gtk_clipboard_request_image ()void gtk_clipboard_request_image (gtkclipboard *clipboard, gtkclipboardimagereceivedfunc callback, gpointer user_data); запрашивает содержимое буфера обмена как изображение. когда изображение получено, оно будет конвертировано в gdkpixbuf, и вызывается callback. параметр pixbuf в callback будет содержать результирующий gdkpixbuf, если запрос успешен, или null если неудачен. это может случиться по различным причинам, в особенности если буфер обмена был пуст или содержимое не может быть конвертировано в изображение.
начиная с версии 2.6 gtk_clipboard_request_rich_text ()void gtk_clipboard_request_rich_text (gtkclipboard *clipboard, gtktextbuffer *buffer, gtkclipboardrichtextreceivedfunc callback, gpointer user_data);
запрашивает содержимое буфера
обмена как rich text. когда rich text получен,
вызывается параметр
начиная с версии 2.10 gtk_clipboard_request_targets ()void gtk_clipboard_request_targets (gtkclipboard *clipboard, gtkclipboardtargetsreceivedfunc callback, gpointer user_data); запрашивает содержимое буфера обмена, как список поддерживаемых целей. когда список позже получен, вызывается callback. параметр targets в callback будет содержать результирующие цели если запрос удачен, или null если неудачен.
начиная с версии 2.4 gtk_clipboard_wait_for_contents ()gtkselectiondata* gtk_clipboard_wait_for_contents (gtkclipboard *clipboard, gdkatom target); запрос содержимого буфера обмена используя полученную цель (target). эта функция ждёт данных, которые будут получены, используя основной цикл, таким образом события, паузы, и т.д., могут быть отправлены во время ожидания.
gtk_clipboard_wait_for_text ()gchar* gtk_clipboard_wait_for_text (gtkclipboard *clipboard); запрашивает содержимое буфера обмена как текст и преобразует результат в кодировку utf-8, если необходимо. эта функция ждет получения данных используя основной цикл, таким образом события, паузы, и т.д., могут отсылаться в течении ожидания.
gtk_clipboard_wait_for_image ()gdkpixbuf* gtk_clipboard_wait_for_image (gtkclipboard *clipboard); запрашивает содержимое буфера обмена как изображение и преобразует результат в gdkpixbuf. эта функция ожидает получения данных используя основной цикл, таким образом события, паузы, и т.д., могут отсылаться в течении ожидания.
начиная с версии 2.6 gtk_clipboard_wait_for_rich_text ()guint8* gtk_clipboard_wait_for_rich_text (gtkclipboard *clipboard, gtktextbuffer *buffer, gdkatom *format, gsize *length); запрашивает содержимое буфера обмена как rich text. эта функция ожидает получения данных используя основной цикл, таким образом события, паузы, и т.д., могут отсылаться в течении ожидания.
начиная с версии 2.10 gtk_clipboard_wait_is_text_available ()gboolean gtk_clipboard_wait_is_text_available (gtkclipboard *clipboard); проверка доступности текста для вставки. это делается запросом targets проверяя содержимое на любые поддерживаемые текстовые цели. эта функция ожидает получения данных используя основной цикл, таким образом события, паузы, и т.д., могут отсылаться в течении ожидания. эта функция немного быстрее, чем вызов gtk_clipboard_wait_for_text(), так как не ищет фактический текст.
gtk_clipboard_wait_is_image_available ()gboolean gtk_clipboard_wait_is_image_available (gtkclipboard *clipboard); проверка доступности изображения для вставки. это делается запросом targets проверяя содержимое на любые поддерживаемые изображения. эта функция ожидает получения данных используя основной цикл, таким образом события, паузы, и т.д., могут отсылаться в течении ожидания. эта функция немного быстрее, чем вызов gtk_clipboard_wait_for_image() так как не ищет фактическое изображение.
начиная с версии 2.6 gtk_clipboard_wait_is_rich_text_available ()gboolean gtk_clipboard_wait_is_rich_text_available (gtkclipboard *clipboard, gtktextbuffer *buffer); проверяет доступность rich text для вставки. это выполняется запросом атома targets и проверкой содержит ли он любой поддерживаемый rich text. эта функция ожидает получения данных используя основной цикл, таким образом события, паузы, и т.д., могут отсылаться в течении ожидания. эта функция немного быстрее,
чем вызов
начина с версии 2.10 gtk_clipboard_wait_for_targets ()gboolean gtk_clipboard_wait_for_targets (gtkclipboard *clipboard, gdkatom **targets, gint *n_targets); возвращает список целей присутствующих в буфере обмена, или null если нет доступных целей. возвращаемый список может быть освобожден вызовом g_free(). функция ожидает получения данных используя основной цикл, таким образом события, паузы, и т.д., могут отсылаться в течении ожидания.
начиная с версии 2.4 gtk_clipboard_wait_is_target_available ()gboolean gtk_clipboard_wait_is_target_available (gtkclipboard *clipboard, gdkatom target); контролирует поддержку буфером обмена вставку данных определённого типа. эта функция может использоваться для определения должен ли пункт "paste" в меню быть чувствительным или нет. вместо этого, если вы хотите узнать, есть ли доступный текст в буфере обмена, используйте gtk_clipboard_wait_is_text_available().
начиная с версии 2.6 gtk_clipboard_set_can_store ()void gtk_clipboard_set_can_store (gtkclipboard *clipboard, const gtktargetentry *targets, gint n_targets); сообщает, что данные буфера обмена должны быть сохранены где-нибудь ещё после завершения программы, или использования gtk_clipboard_store(). это значение сбрасывается, когда изменяется владелец буфера обмена. то, где будут сохранены данные буфера обмена зависит от платформы, смотрите gdk_display_store_clipboard() для более полной информации.
начиная с версии 2.6 gtk_clipboard_store ()void gtk_clipboard_store (gtkclipboard *clipboard); хранит текущие данные буфера обмена где-нибудь, после того как произошёл выход из приложения.
начиная с версии 2.6 детали сигналовсигнал "owner-change"void user_function (gtkclipboard *clipboard, gdkevent *event, gpointer user_data) : run first
смотрите также
|