Spec-Zone.ru › GTK 4.0

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 Выполнить последним

Типы и значения

GtkDropTarget

Иерархия объектов

    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

Поддерживаемый тип или G_TYPE_INVALID

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

количество 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

TRUE для предварительной загрузки данных перетаскивания

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

Флаги: Чтение / Запись

Свойство “drop”

  “drop”                     GdkDrop *

Текущая операция GdkDrop.

Владелец: 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.

Флаги: Выполняется последним

См. также

GdkDrop, GtkDropTargetAsync

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API