GtkDropTarget

说明 [src]

final class Gtk.DropTarget : Gtk.EventController
{
  /* No available fields */
}

GtkDropTarget 是一个事件控制器,用于接收拖拽操作。

使用 GtkDropTarget 接收小组件上的拖放的最基本方法是通过 gtk_drop_target_new() 创建它,传入你想要接收的数据的 GType,并连接到 GtkDropTarget::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, (GType [2]) {
    G_TYPE_FILE,
    GDK_TYPE_PIXBUF,
  }, 2);

  g_signal_connect (target, "drop", G_CALLBACK (on_drop), self);
  gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (target));
}

GtkDropTarget 支持更多选项,例如

然而,GtkDropTarget 归根结底是以同步的方式建模的,并且只支持通过 GType 传输的数据。如果你想要完全控制正在进行的拖放,则 GtkDropTargetAsync 对象可以赋予你这种能力。

当指针拖过拖放目标的小组件并且未拒绝拖放时,该小组件将收到 GTK_STATE_FLAG_DROP_ACTIVE 状态,该状态可用于设置小组件的样式。

如果你不想接收拖放,但只希望在拖拽操作期间更新 UI 状态(例如切换选项卡),则可以使用 GtkDropControllerMotion

层次结构

hierarchy this GtkDropTarget ancestor_0 GtkEventController ancestor_0--this ancestor_1 GObject ancestor_1--ancestor_0

构造方法

gtk_drop_target_new

创建一个新的 GtkDropTarget 对象。

实例方法

gtk_drop_target_get_actions

获取此拖放目标支持的操作。

gtk_drop_target_get_current_drop

获取当前处理的拖放操作。

自 4.4 起

gtk_drop_target_get_drop

获取当前处理的拖放操作。

已弃用: 4.4 

gtk_drop_target_get_formats

获取此拖放目标接受的数据格式。

gtk_drop_target_get_gtypes

获取可以在目标上拖放的受支持的 GType 列表。

gtk_drop_target_get_preload

获取在悬停时是否应预加载数据。

gtk_drop_target_get_value

获取当前拖放数据,作为 GValue

gtk_drop_target_reject

拒绝正在进行的拖放操作。

gtk_drop_target_set_actions

设置此拖放目标支持的操作。

gtk_drop_target_set_gtypes

为此拖放目标设置受支持的 GType

gtk_drop_target_set_preload

设置在悬停时是否应预加载数据。

GtkEventController 继承的方法 (13)
gtk_event_controller_get_current_event

返回控制器当前正在处理的事件。

gtk_event_controller_get_current_event_device

返回控制器当前正在处理的事件的设备。

gtk_event_controller_get_current_event_state

返回控制器当前正在处理的事件的修饰符状态。

gtk_event_controller_get_current_event_time

返回控制器当前正在处理的事件的时间戳。

gtk_event_controller_get_name

获取 controller 的名称。

gtk_event_controller_get_propagation_limit

获取事件控制器的传播限制。

gtk_event_controller_get_propagation_phase

获取 controller 处理事件的传播阶段。

gtk_event_controller_get_widget

返回此控制器相关的 GtkWidget

gtk_event_controller_reset

controller 重置为干净状态。

gtk_event_controller_set_name

为控制器设置一个名称,可用于调试。

gtk_event_controller_set_propagation_limit

在事件控制器上设置事件传播限制。

gtk_event_controller_set_propagation_phase

设置控制器处理事件的传播阶段。

gtk_event_controller_set_static_name

为控制器设置一个名称,可用于调试。

自 4.8 起

GObject 继承的方法 (43)

有关方法的完整列表,请参阅 GObject

属性

Gtk.DropTarget:actions

此拖放目标支持的 GdkDragActions

Gtk.DropTarget:current-drop

当前正在执行的 GdkDrop

自 4.4 起

Gtk.DropTarget:drop

当前正在执行的 GdkDrop

已弃用: 4.4 

Gtk.DropTarget:formats

确定受支持的数据格式的 GdkContentFormats

Gtk.DropTarget:preload

当指针仅悬停在小组件上但尚未释放时,是否应预加载拖放数据。

Gtk.DropTarget:value

此拖放操作的值。

GtkEventController 继承的属性 (4)
Gtk.EventController:name

此控制器的名称,通常用于调试目的。

Gtk.EventController:propagation-limit

此控制器将处理的事件限制。

Gtk.EventController:propagation-phase

此控制器将处理事件的传播阶段。

Gtk.EventController:widget

接收控制器将处理的 GdkEvents 的小组件。

信号

Gtk.DropTarget::accept

当一个拖放操作即将开始时,在拖放目标上发出。

Gtk.DropTarget::drop

当用户将数据拖放到部件上时,在拖放目标上发出。

Gtk.DropTarget::enter

当指针进入部件时,在拖放目标上发出。

Gtk.DropTarget::leave

当指针离开部件时,在拖放目标上发出。

Gtk.DropTarget::motion

当指针在拖放目标上移动时发出。

GObject 继承的信号 (1)
GObject::notify

当对象的某个属性值通过 g_object_set_property()、g_object_set() 等设为值时,会在对象上发出 notify 信号。

类结构

struct GtkDropTargetClass {
  /* no available fields */
}

暂无描述。