краткий обзор#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 gtkdestdefaultstypedef 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 определяет различные типы действий, которые будут предприняты пользователем для перетаскивания на место назначения.
enum gtktargetflagstypedef enum {
gtk_target_same_app = 1 << 0, /*< nick=same-app >*/
gtk_target_same_widget = 1 << 1 /*< nick=same-widget >*/
} gtktargetflags; перечисление gtktargetflags используется, чтобы определить ограничения на вход в gtktargettable.
gtk_drag_dest_set ()void gtk_drag_dest_set (gtkwidget *widget, gtkdestdefaults flags, const gtktargetentry *targets, gint n_targets, gdkdragaction actions); устанавливает виджет как потенциальное место для доставки1 при перетаскивании2.
gtk_drag_dest_set_proxy ()void gtk_drag_dest_set_proxy (gtkwidget *widget, gdkwindow *proxy_window, gdkdragprotocol protocol, gboolean use_coordinates); устанавливает этот виджет как вспомогательный для доставки в другие окна.
gtk_drag_dest_unset ()void gtk_drag_dest_unset (gtkwidget *widget); очищает информацию о месте перетаскивания установленную с помощью gtk_drag_dest_set(). виджет не будет больше получать события перемещения.
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 помещающий правильный список целей в эту функцию.
gtk_drag_dest_get_target_list ()gtktargetlist* gtk_drag_dest_get_target_list (gtkwidget *widget); возвращает список целей допустимых для операции drag-and-drop определённым виджетом.
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().
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().
начиная с версии 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().
начиная с версии 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().
начиная с версии 2.6 gtk_drag_finish ()void gtk_drag_finish (gdkdragcontext *context, gboolean success, gboolean del, guint32 time_); сообщает источнику перетаскивания об окончании операции доставки, поэтому данные больше не требуются.
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, то когда виджет не будет получать уведомления о не удавшемся броске.
gtk_drag_get_source_widget ()gtkwidget* gtk_drag_get_source_widget (gdkdragcontext *context); определяет исходный виджет для перетаскивания.
gtk_drag_highlight ()void gtk_drag_highlight (gtkwidget *widget); подсвечивает виджет. прикрепляет обработчики к "expose_event" и "draw", таким образом подсветка будет продолжит отображаться, до тех пор пока не вызвана gtk_drag_unhighlight().
gtk_drag_unhighlight ()void gtk_drag_unhighlight (gtkwidget *widget); удаляет подсветку установленную gtk_drag_highlight() для виджета.
gtk_drag_begin ()gdkdragcontext* gtk_drag_begin (gtkwidget *widget, gtktargetlist *targets, gdkdragaction actions, gint button, gdkevent *event); инициализирует перетаскивание на исходной стороне. функцию нужно использовать только когда приложение запустило перетаскивание самостоятельно, и не нужно использовать когда используется gtk_drag_source_set().
gtk_drag_set_icon_widget ()void gtk_drag_set_icon_widget (gdkdragcontext *context, gtkwidget *widget, gint hot_x, gint hot_y); изменяет значок для виджета к данному виджету. gtk+ не будет удалять значок, поэтому, если вы не хотите его сохранять, вы должны подключить сигнал "drag_end" и удалить его самостоятельно.
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() будет более удобной для использования.
gtk_drag_set_icon_pixbuf ()void gtk_drag_set_icon_pixbuf (gdkdragcontext *context, gdkpixbuf *pixbuf, gint hot_x, gint hot_y); устанавливает pixbuf как значок для данного перетаскивания.
gtk_drag_set_icon_stock ()void gtk_drag_set_icon_stock (gdkdragcontext *context, const gchar *stock_id, gint hot_x, gint hot_y); устанавливает значок для данного перетаскивания с исходным id.
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 должны использоваться осторожно.
начиная с версии 2.8 gtk_drag_set_icon_default ()void gtk_drag_set_icon_default (gdkdragcontext *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.
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.
gtk_drag_source_set ()void gtk_drag_source_set (gtkwidget *widget, gdkmodifiertype start_button_mask, const gtktargetentry *targets, gint n_targets, gdkdragaction actions); устанавливает виджет так, что gtk+ будет начинать операцию перетаскивания, когда пользователь нажимает и перемещает виджет. виджет должен иметь окно.
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().
gtk_drag_source_set_icon_pixbuf ()void gtk_drag_source_set_icon_pixbuf (gtkwidget *widget, gdkpixbuf *pixbuf); устанавливает значок, который будет использоваться для перетаскивания из специального виджета gdkpixbuf. gtk+ сохраняет справочную информацию для pixbuf и освобождает когда она больше не нужна
gtk_drag_source_set_icon_stock ()void gtk_drag_source_set_icon_stock (gtkwidget *widget, const gchar *stock_id); устанавливает значок, который будет использоваться для перетаскивания, специальной исходной заготовки.
gtk_drag_source_set_icon_name ()void gtk_drag_source_set_icon_name (gtkwidget *widget, const gchar *icon_name); устанавливает значок, который будет использоваться для перетаскивания, специальной исходной темой значков. смотрите документацию для gtkicontheme.
начиная с версии 2.8 gtk_drag_source_unset ()void gtk_drag_source_unset (gtkwidget *widget); отменяет действия gtk_drag_source_set().
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().
начиная с версии 2.4 gtk_drag_source_get_target_list ()gtktargetlist* gtk_drag_source_get_target_list (gtkwidget *widget); получает список целей, которые виджет может предоставить для drag-and-drop.
начиная с версии 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().
начиная с версии 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().
начиная с версии 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().
начиная с версии 2.6
1доставка – действие завершающее операцию drag-and-drop. 2перетаскивание – составное действие операции перемещения drag-and-drop. |