GtkDragSource
GtkDragSource — Контроллер событий для инициации операций перетаскивания
Функции
| GtkDragSource * | gtk_drag_source_new () |
| void | gtk_drag_source_set_content () |
| GdkContentProvider * | gtk_drag_source_get_content () |
| void | gtk_drag_source_set_actions () |
| GdkDragAction | gtk_drag_source_get_actions () |
| void | gtk_drag_source_set_icon () |
| void | gtk_drag_source_drag_cancel () |
| GdkDrag * | gtk_drag_source_get_drag () |
| gboolean | gtk_drag_check_threshold () |
Свойства
| GdkDragAction | actions | Чтение / Запись |
| GdkContentProvider * | content | Чтение / Запись |
Сигналы
| void | drag-begin | Выполнять последним |
| gboolean | drag-cancel | Выполнять последним |
| void | drag-end | Выполнять последним |
| GdkContentProvider* | prepare | Выполнять последним |
Типы и Значения
Иерархия объектов
GObject
╰── GtkEventController
╰── GtkGesture
╰── GtkGestureSingle
╰── GtkDragSource
Файлы заголовков
#include <gtk/gtk.h>
Описание
GtkDragSource — вспомогательный объект, используемый для инициирования операций перетаскивания. Он может быть настроен с необходимыми компонентами для операции перетаскивания заранее. Это включает в себя источник передаваемых данных в виде GdkContentProvider, желаемое действие и иконку, используемую во время операции перетаскивания. После настройки источник перетаскивания должен быть добавлен в виджет в качестве контроллера событий с помощью gtk_widget_add_controller().
Настройка поставщика контента и иконки заранее имеет смысл только тогда, когда данные не изменяются. Чаще всего вы захотите настроить их непосредственно перед необходимостью. Для этого у GtkDragSource есть сигналы “prepare” и “drag-begin”.
Сигнал ::prepare генерируется перед началом перетаскивания и может быть использован для установки поставщика контента и действий, с которыми должно начаться перетаскивание.
Сигнал ::drag-begin генерируется после создания объекта GdkDrag и может быть использован для настройки иконки перетаскивания.
static void
my_widget_init (MyWidget *self)
{
GtkDragSource *drag_source = gtk_drag_source_new ();
g_signal_connect (drag_source, "prepare", G_CALLBACK (on_drag_prepare), self);
g_signal_connect (drag_source, "drag-begin", G_CALLBACK (on_drag_begin), self);
gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (drag_source));
}Во время операции перетаскивания GtkDragSource генерирует сигналы, которые можно использовать для получения обновлений о состоянии операции, но обычно нет необходимости подключаться к каким-либо сигналам, кроме одного случая: когда поддерживаемые действия включают GDK_ACTION_MOVE, вам нужно прослушивать сигнал “drag-end” и удалять данные после их передачи.
Функции
gtk_drag_source_new ()
GtkDragSource *
gtk_drag_source_new (void); Создаёт новый объект GtkDragSource.
Возвращает
новый объект GtkDragSource
gtk_drag_source_set_content ()
void gtk_drag_source_set_content (GtkDragSource *source,GdkContentProvider *content);
Устанавливает поставщик содержимого для объекта GtkDragSource.
При запросе данных в ходе операции перетаскивания данные будут получены от поставщика содержимого.
Эта функция может быть вызвана до начала перетаскивания или в обработчике сигнала “prepare”.
Можно рассмотреть установку поставщика содержимого обратно в значение NULL в обработчике сигнала “drag-end”.
Параметры
source | объект GtkDragSource | |
content | объект GdkContentProvider или | [nullable] |
gtk_drag_source_get_content ()
GdkContentProvider *
gtk_drag_source_get_content (GtkDragSource *source); Возвращает текущего поставщика содержимого объекта GtkDragSource.
Параметры
source | объект GtkDragSource |
gtk_drag_source_set_actions ()
void gtk_drag_source_set_actions (GtkDragSource *source,GdkDragAction actions);
Устанавливает действия для объекта GtkDragSource.
Во время операции перетаскивания действия предлагаются потенциальным целевым объектам. Если actions включают GDK_ACTION_MOVE, необходимо прослушивать сигнал “drag-end” и обрабатывать delete_data как TRUE.
Эта функция может быть вызвана до начала перетаскивания или в обработчике сигнала “prepare”.
Параметры
source | объект GtkDragSource | |
actions | предлагаемые действия |
gtk_drag_source_get_actions ()
GdkDragAction
gtk_drag_source_get_actions (GtkDragSource *source); Получает действия, установленные для объекта GtkDragSource.
Параметры
source | объект GtkDragSource |
Возвращает
установленные действия для source
gtk_drag_source_set_icon ()
void gtk_drag_source_set_icon (GtkDragSource *source,GdkPaintable *paintable,int hot_x,int hot_y);
Устанавливает элемент отрисовки для использования в качестве значка во время операции перетаскивания.
Координаты точки привязки определяют точку на значке, которая выравнивается с точкой привязки курсора.
Если paintable равно NULL, используется значок по умолчанию.
Эта функция может быть вызвана до начала перетаскивания, или в обработчике сигналов “prepare” или “drag-begin”.
Параметры
source | объект GtkDragSource | |
paintable | элемент отрисовки GdkPaintable для использования в качестве значка, или | [nullable] |
hot_x | координата X точки привязки на значке | |
hot_y | координата Y точки привязки на значке |
gtk_drag_source_drag_cancel ()
void
gtk_drag_source_drag_cancel (GtkDragSource *source); Отменяет текущую операцию перетаскивания.
Параметры
source | объект GtkDragSource |
gtk_drag_source_get_drag ()
GdkDrag *
gtk_drag_source_get_drag (GtkDragSource *source); Возвращает базовый объект GdkDrag для текущей операции перетаскивания.
Параметры
source | объект GtkDragSource |
gtk_drag_check_threshold ()
gboolean gtk_drag_check_threshold (GtkWidget *widget,int start_x,int start_y,int current_x,int current_y);
Проверяет, прошла ли операция перетаскивания порог GTK, начавшаяся в точке (start_x , start_y ) и завершившаяся в точке (current_x , current_y ), и, следовательно, должна ли начаться операция перетаскивания и перекладывания.
[method]
Параметры
widget | объект GtkWidget | |
start_x | координата X начала перетаскивания | |
start_y | координата Y начала перетаскивания | |
current_x | текущая координата X | |
current_y | текущая координата Y |
Возвращает
TRUE , если порог перетаскивания пройден.
Типы и значения
GtkDragSource
typedef struct _GtkDragSource GtkDragSource;
Подробности свойств
Свойство “actions”
“actions” GdkDragAction
Действия, поддерживаемые операциями перетаскивания из источника.
Обратите внимание, что вам необходимо обработать сигнал “drag-end”, если действия включают GDK_ACTION_MOVE.
Владелец: GtkDragSource
Флаги: Чтение / Запись
Значение по умолчанию: GDK_ACTION_COPY
Свойство “content”
“content” GdkContentProvider *
Данные, предлагаемые операциями перетаскивания из этого источника в виде GdkContentProvider.
Владелец: GtkDragSource
Флаги: Чтение / Запись
Подробности сигналов
Сигнал “drag-begin”
void user_function (GtkDragSource *source, GdkDrag *drag, gpointer user_data)
Сигнал ::drag-begin испускается в источнике перетаскивания при начале перетаскивания. Он может быть использован для, например, установки пользовательского значка перетаскивания с помощью gtk_drag_source_set_icon().
Параметры
source | объект GtkDragSource | |
drag | объект GdkDrag | |
user_data | пользовательские данные, установленные при подключении обработчика сигнала. |
Флаги: Выполнять последним
Сигнал “drag-cancel”
gboolean user_function (GtkDragSource *source, GdkDrag *drag, GdkDragCancelReason reason, gpointer user_data)
Сигнал ::drag-cancel испускается в источнике перетаскивания, когда перетаскивание завершилось неудачно. Обработчик сигнала может обработать неудачную операцию перетаскивания в зависимости от типа ошибки. Он должен вернуть TRUE если ошибка обработана, и анимация по умолчанию «операция перетаскивания завершилась неудачно» не должна отображаться.
Параметры
source | объект GtkDragSource | |
drag | объект GdkDrag | |
reason | информация о причинах неудачи перетаскивания | |
user_data | пользовательские данные, установленные при подключении обработчика сигнала. |
Возвращаемое значение
TRUE если неудачная операция перетаскивания уже обработана
Флаги: Выполнять последним
Сигнал “drag-end”
void user_function (GtkDragSource *source, GdkDrag *drag, gboolean delete_data, gpointer user_data)
Сигнал ::drag-end испускается в источнике перетаскивания по завершении перетаскивания. Типичная причина подключения к этому сигналу — отмена действий, выполненных в “prepare” или “drag-begin”.
Параметры
source | объект GtkDragSource | |
drag | объект GdkDrag | |
delete_data |
| |
user_data | пользовательские данные, установленные при подключении обработчика сигнала. |
Флаги: Выполнять последним
Сигнал “prepare”
GdkContentProvider* user_function (GtkDragSource *source, double x, double y, gpointer user_data)
Сигнал ::prepare испускается, когда операция перетаскивания собирается инициировать. Он возвращает * GdkContentProvider для использования при перетаскивании, которое собирается начать. Обработчик по умолчанию для этого сигнала возвращает значение свойства “content”, поэтому если вы настроили это свойство заранее, вам не нужно подключаться к этому сигналу.
Параметры
source | объект GtkDragSource | |
x | координата X точки начала перетаскивания | |
y | координата Y точки начала перетаскивания | |
user_data | пользовательские данные, установленные при подключении обработчика сигнала. |
Флаги: Выполнять последним
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkDragSource.html