方法
声明 [源]
void
gtk_notebook_set_tab_detachable (
GtkNotebook* notebook,
GtkWidget* child,
gboolean detachable
)
描述 [源]
设置是否可以将标签从 notebook
分离到另一个笔记本或控件。
请注意,两个笔记本必须共享一个公共组标识符(参见 gtk_notebook_set_group_name()
),以便允许它们之间自动交换标签。
如果您想通过 DnD(即:接受从它拖拽的标签)与笔记本进行交互的控件,那么必须将其设置为放置目标,通过向其中添加接受 GType GTK_TYPE_NOTEBOOK_PAGE
的 GtkDropTarget
控制器。此放置目标的 :value
将预载入一个对应于 dropped 标签的 GtkNotebookPage
对象,因此您可以通过 ::accept
或 ::drop
信号处理该值。
请注意,如果您想要在接收到拖放操作时,将标签从源笔记本中移除,应使用gtk_notebook_detach_tab()
而非gtk_notebook_remove_page()
。否则,源笔记本会认为拖拽的标签是在拖拽操作的过程中被移除,并会启动拖拽取消动画。
static void
on_drag_data_received (GtkWidget *widget,
GdkDrop *drop,
GtkSelectionData *data,
guint time,
gpointer user_data)
{
GtkDrag *drag;
GtkWidget *notebook;
GtkWidget **child;
drag = gtk_drop_get_drag (drop);
notebook = g_object_get_data (drag, "gtk-notebook-drag-origin");
child = (void*) gtk_selection_data_get_data (data);
// process_widget (*child);
gtk_notebook_detach_tab (GTK_NOTEBOOK (notebook), *child);
}
如果您想让笔记本接受来自其他小部件的拖放操作,您需要设置自己的DnD(拖放和Drop)代码来实现它。
参数
child
-
类型:
GtkWidget
一个
GtkWidget
子小部件。数据由方法调用者所有。 detachable
-
类型:
gboolean
标签是否可分离。