GtkDropTarget
GtkDropTarget — Контроллер событий для получения падения DND
Функции
| GtkDropTarget * | gtk_drop_target_new () |
| void | gtk_drop_target_set_gtypes () |
| const GType * | gtk_drop_target_get_gtypes () |
| GdkContentFormats * | gtk_drop_target_get_formats () |
| void | gtk_drop_target_set_actions () |
| GdkDragAction | gtk_drop_target-get-actions () |
| void | gtk_drop_target_set_preload () |
| gboolean | gtk_drop_target_get_preload () |
| GdkDrop * | gtk_drop_target_get_drop () |
| const GValue * | gtk_drop_target_get_value () |
| void | gtk_drop_target_reject () |
Свойства
| GdkDragAction | actions | Чтение / Запись |
| GdkDrop * | drop | Чтение |
| GdkContentFormats * | formats | Чтение |
| gboolean | preload | Чтение / Запись |
| GValue * | value | Чтение |
Сигналы
| gboolean | accept | Выполнить последним |
| gboolean | drop | Выполнить последним |
| GdkDragAction | enter | Выполнить последним |
| void | leave | Выполнить последним |
| GdkDragAction | motion | Выполнить последним |
Типы и значения
Иерархия объектов
GObject
╰── GtkEventController
╰── GtkDropTarget
Подключаемые файлы
#include <gtk/gtk.h>
Описание
GtkDropTarget — это контроллер событий, реализующий простой способ получения операций перетаскивания Drag-and-Drop.
Самый простой способ использования GtkDropTarget для получения падений на виджете — создать его с помощью gtk_drop_target_new(), передавая GType данных, которые вы хотите получить, и подключиться к сигналу “drop” для получения данных:
static gboolean
on_drop (GtkDropTarget *target,
const GValue *value,
double x,
double y,
gpointer data)
{
MyWidget *self = data;
// Call the appropriate setter depending on the type of data
// that we received
if (G_VALUE_HOLDS (value, G_TYPE_FILE))
my_widget_set_file (self, g_value_get_object (value));
else if (G_VALUE_HOLDS (value, GDK_TYPE_PIXBUF))
my_widget_set_pixbuf (self, g_value_get_object (value));
else
return FALSE;
return TRUE;
}
static void
my_widget_init (MyWidget *self)
{
GtkDropTarget *target =
gtk_drop_target_new (G_TYPE_INVALID, GDK_ACTION_COPY);
// This widget accepts two types of drop types: GFile objects
// and GdkPixbuf objects
gtk_drop_target_set_gtypes (target, (GTypes [2]) {
G_TYPE_FILE,
GDK_TYPE_PIXBUF,
}, 2);
gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (target));
}GtkDropTarget поддерживает больше вариантов, такие как:
отклонение потенциальных падений через сигнал “accept” и функцию
gtk_drop_target_reject()для того, чтобы другие целевые объекты перетаскивания обработать падениеотслеживание текущей операции перетаскивания перед падением через сигналы “enter”, “motion” и “leave”
настройка приема данных, настройка свойства “preload” и прослушивание его доступности через свойство “value”
Однако, GtkDropTarget в конечном итоге моделируется синхронным способом и поддерживает только данные, передаваемые через GType. Если вы хотите полностью контролировать текущее падение, объект GtkDropTargetAsync предоставляет вам эту возможность.
Пока указатель перетаскивается над виджетом целевого объекта перетаскивания, а падение не было отклонено, этот виджет получит состояние GTK_STATE_FLAG_DROP_ACTIVE, которое можно использовать для стилизации виджета.
Функции
gtk_drop_target_new ()
GtkDropTarget * gtk_drop_target_new (GType type,GdkDragAction actions);
Создаёт новый объект GtkDropTarget.
Если целевой объект перетаскивания должен поддерживать более 1 типа, передайте G_TYPE_INVALID для type, а затем вызовите gtk_drop_target_set_gtypes().
Параметры
type | Поддерживаемый тип или | |
actions | поддерживаемые действия |
Возвращаемое значение
новый объект GtkDropTarget
gtk_drop_target_set_gtypes ()
void gtk_drop_target_set_gtypes (GtkDropTarget *self,GType *types,gsize n_types);
Устанавливает поддерживаемые GTypes для этой цели перетаскивания.
Параметры
self | объект GtkDropTarget | |
types | все поддерживаемые GTypes, которые можно перетащить. | [nullable][transfer none][array length=n_types] |
n_types | количество |
gtk_drop_target_get_gtypes ()
const GType * gtk_drop_target_get_gtypes (GtkDropTarget *self,gsize *n_types);
Получает список поддерживаемых GTypes для self . Если ни один тип не был задан, будет возвращено NULL.
Параметры
self | объект GtkDropTarget | |
n_types | необязательный указатель для получения количества GTypes , содержащихся в возвращаемом значении. | [out][optional] |
Возвращаемое значение
G_TYPE_INVALID-завершённый массив типов, включённых в formats или NULL, если нет ни одного.
[transfer none][nullable][array length=n_types]
gtk_drop_target_get_formats ()
GdkContentFormats *
gtk_drop_target_get_formats (GtkDropTarget *self); Получает форматы данных, которые принимает эта цель перетаскивания.
Если результат NULL, ожидается, что все форматы будут поддерживаться.
Параметры
self | объект GtkDropTarget |
Возвращаемое значение
поддерживаемые форматы данных.
[nullable]
gtk_drop_target_set_actions ()
void gtk_drop_target_set_actions (GtkDropTarget *self,GdkDragAction actions);
Устанавливает действия, которые поддерживает эта цель перетаскивания.
Параметры
self | объект GtkDropTarget | |
actions | поддерживаемые действия |
gtk_drop_target_get_actions ()
GdkDragAction
gtk_drop_target_get_actions (GtkDropTarget *self); Получает действия, которые поддерживает эта цель перетаскивания.
Параметры
self | объект GtkDropTarget |
Возвращаемое значение
действия, которые поддерживает эта цель перетаскивания
gtk_drop_target_set_preload ()
void gtk_drop_target_set_preload (GtkDropTarget *self,gboolean preload);
Устанавливает свойство GtkDropTarget:preload.
Параметры
self | объект GtkDropTarget | |
preload |
|
gtk_drop_target_get_preload ()
gboolean
gtk_drop_target_get_preload (GtkDropTarget *self); Получает значение свойства GtkDropTarget:preload.
Параметры
self | объект GtkDropTarget |
Возвращаемое значение
TRUE если данные перетаскивания должны быть предварительно загружены
gtk_drop_target_get_drop ()
GdkDrop *
gtk_drop_target_get_drop (GtkDropTarget *self); Получает текущую обрабатываемую операцию перетаскивания.
Если операция перетаскивания не выполняется, возвращается NULL.
Параметры
self | объект GtkDropTarget |
Возвращаемое значение
Текущая операция перетаскивания.
[nullable][transfer none]
gtk_drop_target_get_value ()
const GValue *
gtk_drop_target_get_value (GtkDropTarget *self); Получает значение свойства GtkDropTarget:value.
Параметры
self | объект GtkDropTarget |
Возвращаемое значение
Текущие данные перетаскивания.
[nullable][transfer none]
gtk_drop_target_reject ()
void
gtk_drop_target_reject (GtkDropTarget *self); Отклоняет текущую операцию перетаскивания.
Если операция перетаскивания не выполняется - когда GdkDropTarget:drop возвращает NULL, - эта функция ничего не делает.
Эта функция должна использоваться, когда необходимо отложить решение о принятии перетаскивания до после прочтения данных.
Параметры
self | объект GtkDropTarget |
Типы и значения
GtkDropTarget
typedef struct _GtkDropTarget GtkDropTarget;
Подробное описание свойств
Свойство “actions”
“actions” GdkDragAction
Поддерживаемые GdkDragActions для этой цели.
Владелец: GtkDropTarget
Флаги: Чтение / Запись
Свойство “formats”
“formats” GdkContentFormats *
GdkContentFormats, определяющие поддерживаемые форматы данных.
Владелец: GtkDropTarget
Флаги: Чтение
Свойство “preload”
“preload” gboolean
Загружать ли данные при наведении курсора на виджет, но до его отпуска.
Настройка этого свойства позволяет более тонко реагировать на операцию переноса, но потребует больше данных.
По умолчанию это свойство установлено в FALSE, чтобы избежать случайной загрузки больших объёмов данных. Например, если пользователь перетаскивает весь документ размером в гигабайты из текстового редактора на виджет с предварительной загрузкой, эти данные будут загружены, даже если данные в конечном итоге будут переброшены в другое место.
Для многих форматов данных объём данных невелик (например, GDK_TYPE_RGBA), поэтому включение этого свойства не повлияет на производительность. При локальных операциях drag-and-drop вообще не происходит передачи данных, поэтому его включение не затратно.
Владелец: GtkDropTarget
Флаги: Чтение / Запись
Значение по умолчанию: FALSE
Свойство “value”
“value” GValue *
Значение для этой операции переноса или NULL, если данные ещё не загружены или операция переноса не выполняется.
Данные могут быть доступны до вызова сигнала “drop” — например, когда свойство “preload” установлено. Вы можете использовать сигнал “notify” для получения уведомления о доступных данных.
Владелец: GtkDropTarget
Флаги: Чтение
Подробное описание сигналов
Сигнал “accept”
gboolean user_function (GtkDropTarget *self, GdkDrop *drop, gpointer user_data)
Сигнал ::accept генерируется на целевом объекте при начале операции переноса. Если перенос не принят, возвращается FALSE, и целевой объект проигнорирует перенос. Если возвращается TRUE, перенос принят временно, но может быть отклонен позднее вызовом gtk_drop_target_reject() или в конечном итоге возвращением FALSE из сигнала “drop”.
Обработчик по умолчанию для этого сигнала определяет, принимать ли перенос, основываясь на форматах, предоставленных drop.
Если решение о принятии или отклонении переноса зависит от данных, эта функция должна возвращать TRUE, свойство “preload” должно быть установлено, и значение должно быть проверено через сигнал “value”, вызывая gtk_drop_target_reject() при необходимости.
Параметры
self | объект GtkDropTarget | |
drop | объект GdkDrop | |
user_data | пользовательские данные, заданные при подключении обработчика сигнала. |
Возвращаемое значение
TRUE если drop принят
Флаги: Выполняется последним
Сигнал “drop”
gboolean user_function (GtkDropTarget *self, GValue *value, double x, double y, gpointer user_data)
Сигнал ::drop генерируется на целевом объекте при падении данных на виджет. Обработчик сигнала должен определить, находится ли курсор в зоне переноса. Если нет, он возвращает FALSE, и дальнейшая обработка не требуется.
В противном случае обработчик возвращает TRUE. В этом случае обработчик примет перенос. Обработчик отвечает за чтение переданных value и выполнение операции переноса.
Параметры
self | объект GtkDropTarget | |
value | переносимое значение GValue | |
x | координата x текущего положения курсора | |
y | координата y текущего положения курсора | |
user_data | пользовательские данные, заданные при подключении обработчика сигнала. |
Возвращаемое значение
принято ли падение в текущей позиции курсора
Флаги: Выполняется последним
Сигнал “enter”
GdkDragAction user_function (GtkDropTarget *self, double x, double y, gpointer user_data)
Сигнал ::enter генерируется на целевом объекте, когда курсор входит в виджет. Он может использоваться для настройки пользовательской подсветки.
Параметры
self | объект GtkDropTarget | |
x | координата x текущего положения курсора | |
y | координата y текущего положения курсора | |
user_data | пользовательские данные, заданные при подключении обработчика сигнала. |
Возвращаемое значение
Предпочтительное действие для этой операции перетаскивания или 0, если падение не поддерживается в текущей позиции курсора, в текущем расположении x, y.
Флаги: Выполняется последним
Сигнал “leave”
void user_function (GtkDropTarget *self, gpointer user_data)
Сигнал ::leave генерируется на целевом объекте, когда курсор выходит из виджета. Его основное назначение — отменить действия, выполненные в сигнале “enter”.
Параметры
self | объект GtkDropTarget | |
user_data | пользовательские данные, заданные при подключении обработчика сигнала. |
Флаги: Выполняется последним
Сигнал “motion”
GdkDragAction user_function (GtkDropTarget *self, double x, double y, gpointer user_data)
Сигнал ::motion генерируется, пока курсор перемещается над целевым объектом.
Параметры
self | объект GtkDropTarget | |
x | координата x текущего положения курсора | |
y | координата y текущего положения курсора | |
user_data | пользовательские данные, заданные при подключении обработчика сигнала. |
Возвращаемое значение
Предпочтительное действие для этой операции перетаскивания или 0, если падение не поддерживается в текущей позиции курсора, в текущем расположении x, y.
Флаги: Выполняется последним
См. также
© 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/GtkDropTarget.html