方法

声明 [源]

void
gtk_notebook_set_tab_detachable (
  GtkNotebook* notebook,
  GtkWidget* child,
  gboolean detachable
)

描述 [源]

设置是否可以将标签从 notebook 分离到另一个笔记本或控件。

请注意,两个笔记本必须共享一个公共组标识符(参见 gtk_notebook_set_group_name()),以便允许它们之间自动交换标签。

如果您想通过 DnD(即:接受从它拖拽的标签)与笔记本进行交互的控件,那么必须将其设置为放置目标,通过向其中添加接受 GType GTK_TYPE_NOTEBOOK_PAGEGtkDropTarget 控制器。此放置目标的 :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

标签是否可分离。