Prev

Up

Home

GTK+ Reference Manual

Next

Top  |  Description

Drag and Drop

Drag and Drop Функции контролирующие drag and drop обработку

Краткий обзор

#include <gtk/gtk.h> enum GtkDestDefaults; enum GtkTargetFlags; void gtk_drag_dest_set (GtkWidget *widget, GtkDestDefaults flags, const GtkTargetEntry *targets, gint n_targets, GdkDragAction actions); void gtk_drag_dest_set_proxy (GtkWidget *widget, GdkWindow *proxy_window, GdkDragProtocol protocol, gboolean use_coordinates); void gtk_drag_dest_unset (GtkWidget *widget); GdkAtom gtk_drag_dest_find_target (GtkWidget *widget, GdkDragContext *context, GtkTargetList *target_list); GtkTargetList* gtk_drag_dest_get_target_list (GtkWidget *widget); void gtk_drag_dest_set_target_list (GtkWidget *widget, GtkTargetList *target_list); void gtk_drag_dest_add_text_targets (GtkWidget *widget); void gtk_drag_dest_add_image_targets (GtkWidget *widget); void gtk_drag_dest_add_uri_targets (GtkWidget *widget); void gtk_drag_finish (GdkDragContext *context, gboolean success, gboolean del, guint32 time_); void gtk_drag_get_data (GtkWidget *widget, GdkDragContext *context, GdkAtom target, guint32 time_); GtkWidget* gtk_drag_get_source_widget (GdkDragContext *context); void gtk_drag_highlight (GtkWidget *widget); void gtk_drag_unhighlight (GtkWidget *widget); GdkDragContext* gtk_drag_begin (GtkWidget *widget, GtkTargetList *targets, GdkDragAction actions, gint button, GdkEvent *event); void gtk_drag_set_icon_widget (GdkDragContext *context, GtkWidget *widget, gint hot_x, gint hot_y); void gtk_drag_set_icon_pixmap (GdkDragContext *context, GdkColormap *colormap, GdkPixmap *pixmap, GdkBitmap *mask, gint hot_x, gint hot_y); void gtk_drag_set_icon_pixbuf (GdkDragContext *context, GdkPixbuf *pixbuf, gint hot_x, gint hot_y); void gtk_drag_set_icon_stock (GdkDragContext *context, const gchar *stock_id, gint hot_x, gint hot_y); void gtk_drag_set_icon_name (GdkDragContext *context, const gchar *icon_name, gint hot_x, gint hot_y); void gtk_drag_set_icon_default (GdkDragContext *context); void gtk_drag_set_default_icon (GdkColormap *colormap, GdkPixmap *pixmap, GdkBitmap *mask, gint hot_x, gint hot_y); gboolean gtk_drag_check_threshold (GtkWidget *widget, gint start_x, gint start_y, gint current_x, gint current_y); void gtk_drag_source_set (GtkWidget *widget, GdkModifierType start_button_mask, const GtkTargetEntry *targets, gint n_targets, GdkDragAction actions); void gtk_drag_source_set_icon (GtkWidget *widget, GdkColormap *colormap, GdkPixmap *pixmap, GdkBitmap *mask); void gtk_drag_source_set_icon_pixbuf (GtkWidget *widget, GdkPixbuf *pixbuf); void gtk_drag_source_set_icon_stock (GtkWidget *widget, const gchar *stock_id); void gtk_drag_source_set_icon_name (GtkWidget *widget, const gchar *icon_name); void gtk_drag_source_unset (GtkWidget *widget); void gtk_drag_source_set_target_list (GtkWidget *widget, GtkTargetList *target_list); GtkTargetList* gtk_drag_source_get_target_list (GtkWidget *widget); void gtk_drag_source_add_text_targets (GtkWidget *widget); void gtk_drag_source_add_image_targets (GtkWidget *widget); void gtk_drag_source_add_uri_targets (GtkWidget *widget);

Описание

GTK+ имеет богатый набор функций для обеспечения взаимодействия процессов методом drag-and-drop (технология перемещения объектов интерфейса, дословно означает - перетащить и бросить). GTK+ может выполнять drag-and-drop (DND) через множество протоколов. В настоящее время поддерживаются протоколы Xdnd и Motif. Также как функциями перечисленными здесь, приложения могут нуждаться в использовании некоторых средств предусмотренных Selections. Кроме того, Drag and Drop API использует сигналы класса GtkWidget.

Детали

enum GtkDestDefaults

typedef enum { GTK_DEST_DEFAULT_MOTION = 1 << 0, /* отвечает на "drag_motion" */ GTK_DEST_DEFAULT_HIGHLIGHT = 1 << 1, /* авто-подсвечивание (auto-highlight) */ GTK_DEST_DEFAULT_DROP = 1 << 2, /* отвечает на "drag_drop" */ GTK_DEST_DEFAULT_ALL = 0x07 } GtkDestDefaults;

Перечисление GtkDestDefaults определяет различные типы действий, которые будут предприняты пользователем для перетаскивания на место назначения.

GTK_DEST_DEFAULT_MOTION

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

GTK_DEST_DEFAULT_HIGHLIGHT

Если установлено для виджета, GTK+ будет подсвечивать этот виджет в течении перетаскивания по этому виджету, пока действия и формат перетаскивания действительны.

GTK_DEST_DEFAULT_DROP

Если установлено для виджета, когда произойдет доставка, GTK+ будет контролировать возможный список действий и целей для перетаскивания и вызовет gtk_drag_get_data(). В независимости, выполнена доставка или нет, GTK+ вызовет gtk_drag_finish(). Если действие было перемещением, при успешной доставке будет передано TRUE в параметр delete для gtk_drag_finish().

GTK_DEST_DEFAULT_ALL

Если установлено, определяет что все действия по умолчанию должны быть выполнены.


enum GtkTargetFlags

typedef enum { GTK_TARGET_SAME_APP = 1 << 0, /*< nick=same-app >*/ GTK_TARGET_SAME_WIDGET = 1 << 1 /*< nick=same-widget >*/ } GtkTargetFlags;

Перечисление GtkTargetFlags используется, чтобы определить ограничения на вход в GtkTargetTable.

GTK_TARGET_SAME_APP

Если установлено, цель будет выделена для перетаскивания в пределах одного приложения.

GTK_TARGET_SAME_WIDGET

Если установлено, цель будет выделена только для перетаскивания в пределах одного виджета.


gtk_drag_dest_set ()

void gtk_drag_dest_set (GtkWidget *widget, GtkDestDefaults flags, const GtkTargetEntry *targets, gint n_targets, GdkDragAction actions);

Устанавливает виджет как потенциальное место для доставки1 при перетаскивании2.

widget :

GtkWidget

flags :

Флаги определяют какие действия GTK+ должен предпринять от имени виджета для доставки на тот виджет. Поля targets и actions используются только если GTK_DEST_DEFAULT_MOTION или GTK_DEST_DEFAULT_DROP получены.

targets :

Указатель массива GtkTargetEntrys указывающий тип доставки допустимый для этого виджета.

n_targets :

Число записей в targets.

actions :

Битовая маска возможных действий для доставки в этот виджет.


gtk_drag_dest_set_proxy ()

void gtk_drag_dest_set_proxy (GtkWidget *widget, GdkWindow *proxy_window, GdkDragProtocol protocol, gboolean use_coordinates);

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

widget :

GtkWidget

proxy_window :

Окно отправления событий перетаскивания

protocol :

Протокол перетаскивания принятый proxy_window (для определения протокола используйте gdk_drag_get_protocol())

use_coordinates :

Если TRUE, отправляются координаты места назначения, потому что это встроенное суб-окно.


gtk_drag_dest_unset ()

void        gtk_drag_dest_unset             (GtkWidget *widget);

Очищает информацию о месте перетаскивания установленную с помощью gtk_drag_dest_set(). Виджет не будет больше получать события перемещения.

widget :

GtkWidget


gtk_drag_dest_find_target ()

GdkAtom gtk_drag_dest_find_target (GtkWidget *widget, GdkDragContext *context, GtkTargetList *target_list);

Ищет соответствие между context->targets и dest_target_list, возвращает первый соответствующий цели, иначе возвращает GDK_NONE. dest_target_list - обычно возвращаемое значение gtk_drag_dest_get_target_list(), но некоторые виджеты могут иметь различия допустимых целей для различных виджетов; на этот случай, они имеют обработчик drag_motion помещающий правильный список целей в эту функцию.

widget :

Целевой виджет перетаскивания

context :

Содержимое перетаскивания

target_list :

Список допустимых для перетаскивания целей, или NULL для использования gtk_drag_dest_get_target_list (widget).

Возвращает :

Первую цель, которую исходное предложение и место доставки смогут принять, или GDK_NONE


gtk_drag_dest_get_target_list ()

GtkTargetList* gtk_drag_dest_get_target_list (GtkWidget *widget);

Возвращает список целей допустимых для операции drag-and-drop определённым виджетом.

widget :

GtkWidget

Возвращает :

GtkTargetList, или NULL если не существует


gtk_drag_dest_set_target_list ()

void gtk_drag_dest_set_target_list (GtkWidget *widget, GtkTargetList *target_list);

Устанавливает типы целей допустимые данным виджетом для операции drag-and-drop. Сначала виджет должен быть сделан местоположением для перетаскивания с помощью gtk_drag_dest_set().

widget :

GtkWidget местоположение перетаскивания

target_list :

Список доступных для перетаскивания целей, или NULL для несуществующих


gtk_drag_dest_add_text_targets ()

void        gtk_drag_dest_add_text_targets  (GtkWidget *widget);

Добавляет поддержку текстовых целей GtkSelection в список целей местоположения для перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_text_targets() и gtk_drag_dest_set_target_list().

widget :

GtkWidget местоположение перетаскивания

Начиная с версии 2.6


gtk_drag_dest_add_image_targets ()

void        gtk_drag_dest_add_image_targets (GtkWidget *widget);

Добавляет поддержку целевых изображений GtkSelection в список целей местоположения для перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_image_targets() и gtk_drag_dest_set_target_list().

widget :

GtkWidget местоположение перетаскивания

Начиная с версии 2.6


gtk_drag_dest_add_uri_targets ()

void        gtk_drag_dest_add_uri_targets   (GtkWidget *widget);

Добавляет целевую поддержку URI GtkSelection в список целей местоположения для перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_uri_targets() и gtk_drag_dest_set_target_list().

widget :

GtkWidget местоположение перетаскивания

Начиная с версии 2.6


gtk_drag_finish ()

void gtk_drag_finish (GdkDragContext *context, gboolean success, gboolean del, guint32 time_);

Сообщает источнику перетаскивания об окончании операции доставки, поэтому данные больше не требуются.

context :

Содержимое перетаскивания.

success :

Флаг информирующий об успешном или нет завершении доставки.

del :

Флаг информирующий, должен ли источник удалять оригинальные данные. (т.е. Выполнить перемещение а не копирование)

time_ :

Метка временем для сигнала "drag_data_drop".


gtk_drag_get_data ()

void gtk_drag_get_data (GtkWidget *widget, GdkDragContext *context, GdkAtom target, guint32 time_);

Получает данные связанные с перетаскиванием. Когда данные получены, или поиск заканчивается неудачей, GTK+ будет производить сигнал "drag_data_received". Неудачный поиск информируется отрицательной длиной поля selection_data параметра сигнала. Однако, когда вызвана gtk_drag_get_data(), потому что было установлено GTK_DEST_DEFAULT_DROP, то когда виджет не будет получать уведомления о не удавшемся броске.

widget :

Виджет который получит сигнал "drag_data_received".

context :

Содержимое перетаскивания

target :

Цель (форма данных) поиска.

time_ :

Временная метка для поиска данных. Это будет в основном время поиска в "drag_data_motion" или "drag_data_drop" signal.


gtk_drag_get_source_widget ()

GtkWidget*  gtk_drag_get_source_widget      (GdkDragContext *context);

Определяет исходный виджет для перетаскивания.

context :

(сторона получателя) содержимое перетаскивания.

Возвращает :

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


gtk_drag_highlight ()

void        gtk_drag_highlight              (GtkWidget *widget);

Подсвечивает виджет. Прикрепляет обработчики к "expose_event" и "draw", таким образом подсветка будет продолжит отображаться, до тех пор пока не вызвана gtk_drag_unhighlight().

widget :

Подсвечиваемый виджет


gtk_drag_unhighlight ()

void        gtk_drag_unhighlight            (GtkWidget *widget);

Удаляет подсветку установленную gtk_drag_highlight() для виджета.

widget :

Виджет с которого удаляется подсветка.


gtk_drag_begin ()

GdkDragContext* gtk_drag_begin (GtkWidget *widget, GtkTargetList *targets, GdkDragAction actions, gint button, GdkEvent *event);

Инициализирует перетаскивание на исходной стороне. Функцию нужно использовать только когда приложение запустило перетаскивание самостоятельно, и не нужно использовать когда используется gtk_drag_source_set().

widget :

Исходный виджет.

targets :

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

actions :

Битовая-маска (bitmask) допустимого действия перетаскивания.

button :

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

event :

Событие вызвавшее начало перетаскивания.

Возвращает :

Содержимое перетаскивания.


gtk_drag_set_icon_widget ()

void gtk_drag_set_icon_widget (GdkDragContext *context, GtkWidget *widget, gint hot_x, gint hot_y);

Изменяет значок для виджета к данному виджету. GTK+ не будет удалять значок, поэтому, если вы не хотите его сохранять, вы должны подключить сигнал "drag_end" и удалить его самостоятельно.

context :

Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания)

widget :

Окно верхнего уровня используемое как значок.

hot_x :

Смещение X, в пределах widget , «горячей» точки.

hot_y :

Смещение Y, в пределах widget , «горячей» точки.


gtk_drag_set_icon_pixmap ()

void gtk_drag_set_icon_pixmap (GdkDragContext *context, GdkColormap *colormap, GdkPixmap *pixmap, GdkBitmap *mask, gint hot_x, gint hot_y);

Устанавливает pixmap как значок для данного перетаскивания. GTK+ сохраняет справочную информацию для параметров и освобождает их когда они больше не нужны. Вообще, gtk_drag_set_icon_pixbuf() будет более удобной для использования.

context :

Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания)

colormap :

Карта цвета для значка

pixmap :

Данные изображения для значка

mask :

Маска прозрачности для значка

hot_x :

Смещение X, относительно пределов pixmap , «горячей» точки.

hot_y :

Смещение Y, относительно пределов pixmap , «горячей» точки.


gtk_drag_set_icon_pixbuf ()

void gtk_drag_set_icon_pixbuf (GdkDragContext *context, GdkPixbuf *pixbuf, gint hot_x, gint hot_y);

Устанавливает pixbuf как значок для данного перетаскивания.

context :

Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания)

pixbuf :

the GdkPixbuf to use as the drag icon.

hot_x :

Смещение X, относительно пределов widget , «горячей» точки.

hot_y :

Смещение Y, относительно пределов widget , «горячей» точки.


gtk_drag_set_icon_stock ()

void gtk_drag_set_icon_stock (GdkDragContext *context, const gchar *stock_id, gint hot_x, gint hot_y);

Устанавливает значок для данного перетаскивания с исходным ID.

context :

Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания)

stock_id :

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

hot_x :

Смещение X, относительно пределов значка , «горячей» точки.

hot_y :

Смещение Y, относительно пределов значка , «горячей» точки.


gtk_drag_set_icon_name ()

void gtk_drag_set_icon_name (GdkDragContext *context, const gchar *icon_name, gint hot_x, gint hot_y);

Устанавливает значок для данного перетаскивания из именной темы значков. Смотрите документацию GtkIconTheme, для подробного изучения деталей. Отметьте, размер значка зависит от темы значков (значок загружается в символическом размере GTK_ICON_SIZE_DND), таким образом hot_x и hot_y должны использоваться осторожно.

context :

Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания)

icon_name :

Имя используемого значка

hot_x :

смещение X горячей точки в пределах значка

hot_y :

смещение Y горячей точки в пределах значка

Начиная с версии 2.8


gtk_drag_set_icon_default ()

void        gtk_drag_set_icon_default       (GdkDragContext *context);

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

context :

Содержимое перетаскивания. (должно вызываться с содержимым для исходной стороны перетаскивания)


gtk_drag_set_default_icon ()

void gtk_drag_set_default_icon (GdkColormap *colormap, GdkPixmap *pixmap, GdkBitmap *mask, gint hot_x, gint hot_y);

Внимание!

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

Изменяет значок по умолчанию для перетаскивания. GTK+ сохраняет справочную информацию для параметров и освобождает их когда они больше не нужны. Функция является устаревшей. Значок по умолчанию должен теперь изменяться через систему заготовок, изменяя заготовку pixbuf для GTK_STOCK_DND.

colormap :

Цветовая карта для значка.

pixmap :

Данные изображения для значка.

mask :

Маска прозрачности для изображения.

hot_x :

Смещение X, относительно пределов widget , «горячей» точки.

hot_y :

Смещение Y, относительно пределов widget , «горячей» точки.


gtk_drag_check_threshold ()

gboolean gtk_drag_check_threshold (GtkWidget *widget, gint start_x, gint start_y, gint current_x, gint current_y);

Выясняет, если перемещение мышки началось в (start_x, start_y) и закончилось в (current_x, current_y) имея помещаемый GTK+ порог перетаскивания, начинается операция drag-and-drop.

widget :

GtkWidget

start_x :

X координаты начала перемещения

start_y :

Y координаты начала перемещения

current_x :

Текущие X координаты

current_y :

Текущие Y координаты

Возвращает :

TRUE если порог перемещения помещен.


gtk_drag_source_set ()

void gtk_drag_source_set (GtkWidget *widget, GdkModifierType start_button_mask, const GtkTargetEntry *targets, gint n_targets, GdkDragAction actions);

Устанавливает виджет так, что GTK+ будет начинать операцию перетаскивания, когда пользователь нажимает и перемещает виджет. Виджет должен иметь окно.

widget :

GtkWidget

start_button_mask :

Битовая маска кнопки которая может начать перетаскивание

targets :

Таблица целей которые будут поддерживаться перетаскиванием

n_targets :

Число пунктов в targets

actions :

Битовая маска возможных действий для перетаскивания из этого виджета.


gtk_drag_source_set_icon ()

void gtk_drag_source_set_icon (GtkWidget *widget, GdkColormap *colormap, GdkPixmap *pixmap, GdkBitmap *mask);

Устанавливает значок, который будет использоваться для перетаскивания из специального виджета pixmap/mask. GTK+ сохраняет справочную информацию для аргументов и освобождает когда она больше не нужна. Используйте вместо этого gtk_drag_source_set_icon_pixbuf().

widget :

GtkWidget

colormap :

Цветовая карта значка

pixmap :

Данные изображения для значка

mask :

Прозрачная маска для изображения.


gtk_drag_source_set_icon_pixbuf ()

void gtk_drag_source_set_icon_pixbuf (GtkWidget *widget, GdkPixbuf *pixbuf);

Устанавливает значок, который будет использоваться для перетаскивания из специального виджета GdkPixbuf. GTK+ сохраняет справочную информацию для pixbuf и освобождает когда она больше не нужна

widget :

GtkWidget

pixbuf :

GdkPixbuf для значка перетаскивания


gtk_drag_source_set_icon_stock ()

void gtk_drag_source_set_icon_stock (GtkWidget *widget, const gchar *stock_id);

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

widget :

GtkWidget

stock_id :

ID заготовленного для использования значка


gtk_drag_source_set_icon_name ()

void gtk_drag_source_set_icon_name (GtkWidget *widget, const gchar *icon_name);

Устанавливает значок, который будет использоваться для перетаскивания, специальной исходной темой значков. Смотрите документацию для GtkIconTheme.

widget :

GtkWidget

icon_name :

Имя используемого значка

Начиная с версии 2.8


gtk_drag_source_unset ()

void        gtk_drag_source_unset           (GtkWidget *widget);

Отменяет действия gtk_drag_source_set().

widget :

GtkWidget


gtk_drag_source_set_target_list ()

void gtk_drag_source_set_target_list (GtkWidget *widget, GtkTargetList *target_list);

Изменяет типовую цель которую этот виджет предлагает для drag-and-drop. Сначала виджет должен быть сделан источником перетаскивания при помощи gtk_drag_source_set().

widget :

GtkWidget это источник перетаскивания

target_list :

Список доступных для перетаскивания целей, или NULL если недоступны

Начиная с версии 2.4


gtk_drag_source_get_target_list ()

GtkTargetList* gtk_drag_source_get_target_list (GtkWidget *widget);

Получает список целей, которые виджет может предоставить для drag-and-drop.

widget :

GtkWidget

Возвращает :

GtkTargetList, или NULL если не существует

Начиная с версии 2.4


gtk_drag_source_add_text_targets ()

void gtk_drag_source_add_text_targets (GtkWidget *widget);

Добавляет текстовую цель, поддерживаемый GtkSelection список целей источника перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_text_targets() и gtk_drag_source_set_target_list().

widget :

GtkWidget это источник перемещения

Начиная с версии 2.6


gtk_drag_source_add_image_targets ()

void gtk_drag_source_add_image_targets (GtkWidget *widget);

Добавляет перезаписываемые цели изображения, поддерживаемые GtkSelection в списке целей источника перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_image_targets() и gtk_drag_source_set_target_list().

widget :

GtkWidget это источник перемещения

Начиная с версии 2.6


gtk_drag_source_add_uri_targets ()

void        gtk_drag_source_add_uri_targets (GtkWidget *widget);

Добавляет URI целей , поддерживаемые GtkSelection в списке целей источника перемещения. Цели добавляются с info = 0. Если вам нужно другое значение, используйте gtk_target_list_add_uri_targets() и gtk_drag_source_set_target_list().

widget :

GtkWidget это источник перемещения

Начиная с версии 2.6



1Доставка действие завершающее операцию drag-and-drop.

2Перетаскивание составное действие операции перемещения drag-and-drop.