类
GtkDragSource
描述 [src]
final class Gtk.DragSource : Gtk.GestureSingle
{
/* No available fields */
}
GtkDragSource
是一个事件控制器,可用于启动拖放操作。
可以使用 GdkContentProvider
等形式的数据源在时间范围内设置 GtkDragSource
以获取所需的 DND 操作材料,例如希望的动作和在拖放操作期间使用的图标。设置完之后,必须使用 gtk_widget_add_controller()
将拖放源作为一个事件控制器添加到窗口小部件。
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
有 GtkDragSource::prepare
和 GtkDragSource::drag-begin
信号。
::prepare 信号在拖放开始之前发出,可以用来设置拖放应该开始的内容提供商和动作。
static GdkContentProvider *
on_drag_prepare (GtkDragSource *source,
double x,
double y,
MyWidget *self)
{
// This widget supports two types of content: GFile objects
// and GdkPixbuf objects; GTK will handle the serialization
// of these types automatically
GFile *file = my_widget_get_file (self);
GdkPixbuf *pixbuf = my_widget_get_pixbuf (self);
return gdk_content_provider_new_union ((GdkContentProvider *[2]) {
gdk_content_provider_new_typed (G_TYPE_FILE, file),
gdk_content_provider_new_typed (GDK_TYPE_PIXBUF, pixbuf),
}, 2);
}
::drag-begin 信号在创建了 GdkDrag
对象后发出,可以用来设置拖放图标。
static void
on_drag_begin (GtkDragSource *source,
GdkDrag *drag,
MyWidget *self)
{
// Set the widget as the drag icon
GdkPaintable *paintable = gtk_widget_paintable_new (GTK_WIDGET (self));
gtk_drag_source_set_icon (source, paintable, 0, 0);
g_object_unref (paintable);
}
在 DND 操作期间,GtkDragSource
会发出可以用来获取操作状态更新的信号,但是通常不需要连接到任何信号,除了一个情况:当支持的操作包括 GDK_ACTION_MOVE
时,你需要监听 GtkDragSource::drag-end
信号并在其传输后删除数据。
实例方法
从 GtkGestureSingle 继承的方法 (8)
gtk_gesture_single_get_button
返回 gesture
响应的按钮编号。
gtk_gesture_single_get_current_button
返回与 gesture
当前交互的按钮编号,如果无按钮编号,则返回 0。
gtk_gesture_single_get_current_sequence
返回与 gesture
当前交互的事件顺序。
gtk_gesture_single_get_exclusive
获取手势是否是排他性的。
gtk_gesture_single_get_touch_only
如果手势仅由触控事件触发,则返回 TRUE
。
gtk_gesture_single_set_button
设置 gesture
响应的按钮编号。
gtk_gesture_single_set_exclusive
设置 gesture
是否是排他性的。
gtk_gesture_single_set_touch_only
设置是否只处理触控事件。
从 GtkGesture 继承的方法 (17)
gtk_gesture_get_bounding_box
如果当前由 gesture
处理触控顺序,则返回 TRUE
,并在 rect
中填充包含所有活动触摸的边界框。
gtk_gesture_get_bounding_box_center
如果当前由 gesture
处理触控顺序,则返回 TRUE
,并在 x
和 y
中填充包含所有活动触摸的边界框中心。
gtk_gesture_get_device
返回当前在 gesture
上操作的逻辑 GdkDevice
。
gtk_gesture_get_group
返回 gesture
组中的所有手势。
gtk_gesture_get_last_event
返回为 sequence
处理的最后一个事件。
gtk_gesture_get_last_updated_sequence
返回 gesture
上最后更新的 GdkEventSequence
。
gtk_gesture_get_point
如果 gesture
当前正在解释 sequence
,则返回 TRUE
,并在 x
和 y
中填充为此事件顺序存储的最后坐标。
gtk_gesture_get_sequence_state
返回 gesture
查看的 sequence
状态。
gtk_gesture_get_sequences
返回当前由 gesture
解释的 GdkEventSequences
列表。
gtk_gesture_group
将 gesture
添加到与 group_gesture
相同的组中。
gtk_gesture_handles_sequence
如果 gesture
当前正在处理与 sequence
相对应的事件,则返回 TRUE
。
gtk_gesture_is_active
如果手势当前处于活动状态,则返回 TRUE
。
gtk_gesture_is_grouped_with
如果两个手势都属于同一个组,则返回 TRUE
。
gtk_gesture_is_recognized
如果手势当前被识别,则返回 TRUE
。
gtk_gesture_set_sequence_state
在 gesture
中设置 sequence
的状态。
已弃用:4.10。
gtk_gesture_set_state
设置 gesture
当前正在交互的所有序列的状态。
gtk_gesture_ungroup
将 gesture
分隔成一个独立的组。
从 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
获取控制器处理事件的传播阶段。
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
为控制器设置一个名称,可用于调试。
since: 4.8
属性
从 GtkGestureSingle (3) 继承的属性
Gtk.GestureSingle:button
要侦听的鼠标按钮号,或 0 表示侦听任何按钮。
Gtk.GestureSingle:exclusive
表示手势是排他性的。
Gtk.GestureSingle:touch-only
手势仅处理触摸事件。
从 GtkGesture (1) 继承的属性
从 GtkEventController (4) 继承的属性
Gtk.EventController:name
此控制器的名称,通常用于调试目的。
Gtk.EventController:propagation-limit
此控制器将处理的事件限制。
Gtk.EventController:propagation-phase
此控制器将处理事件的传播阶段。
Gtk.EventController:widget
接收控制器将处理的 GdkEvents
的窗口小部件。
信号
从 GtkGesture (5) 继承的信号
GtkGesture::begin
当识别出手势时发出。
GtkGesture::cancel
每当序列被取消时发出。
GtkGesture::end
当 手势
停止识别事件序列为需要处理的内容时发出,或者触摸序列的数量变得高于或低于 GtkGesture:n-points
时发出。
GtkGesture::sequence-state-changed
每当序列状态发生变化时发出。
GtkGesture::update
每当在识别手势时处理事件时发出。
从 GObject (1) 继承的信号
GObject::notify
当对象的一个属性通过 g_object_set_property()、g_object_set() 等设置其值时,会在该对象上发出 notify 信号。