类
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::accept
信号和gtk_drop_target_reject()
函数拒绝潜在的拖放,以让其他拖放目标处理拖放 - 通过
GtkDropTarget::enter
、GtkDropTarget::motion
和GtkDropTarget::leave
信号跟踪正在进行的拖拽操作(在拖放之前) - 通过设置
GtkDropTarget:preload
属性和通过GtkDropTarget:value
属性监听其可用性来配置如何接收数据
然而,GtkDropTarget
归根结底是以同步的方式建模的,并且只支持通过 GType
传输的数据。如果你想要完全控制正在进行的拖放,则 GtkDropTargetAsync
对象可以赋予你这种能力。
当指针拖过拖放目标的小组件并且未拒绝拖放时,该小组件将收到 GTK_STATE_FLAG_DROP_ACTIVE
状态,该状态可用于设置小组件的样式。
如果你不想接收拖放,但只希望在拖拽操作期间更新 UI 状态(例如切换选项卡),则可以使用 GtkDropControllerMotion
。
实例方法
从 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 起
属性
从 GtkEventController 继承的属性 (4)
Gtk.EventController:name
此控制器的名称,通常用于调试目的。
Gtk.EventController:propagation-limit
此控制器将处理的事件限制。
Gtk.EventController:propagation-phase
此控制器将处理事件的传播阶段。
Gtk.EventController:widget
接收控制器将处理的 GdkEvents
的小组件。
信号
从 GObject 继承的信号 (1)
GObject::notify
当对象的某个属性值通过 g_object_set_property()、g_object_set() 等设为值时,会在对象上发出 notify 信号。