Method
GtkNotebookset_tab_detachable
Declaration [src]
void
gtk_notebook_set_tab_detachable (
GtkNotebook* notebook,
GtkWidget* child,
gboolean detachable
)
Description [src]
Sets whether the tab can be detached from notebook
to another
notebook or widget.
Note that two notebooks must share a common group identifier
(see gtk_notebook_set_group_name()
) to allow automatic tabs
interchange between them.
If you want a widget to interact with a notebook through DnD
(i.e.: accept dragged tabs from it) it must be set as a drop
destination by adding to it a GtkDropTarget
controller that accepts
the GType GTK_TYPE_NOTEBOOK_PAGE
. The :value
of said drop target will be
preloaded with a GtkNotebookPage
object that corresponds to the
dropped tab, so you can process the value via ::accept
or ::drop
signals.
Note that you should use gtk_notebook_detach_tab()
instead
of gtk_notebook_remove_page()
if you want to remove the tab
from the source notebook as part of accepting a drop. Otherwise,
the source notebook will think that the dragged tab was removed
from underneath the ongoing drag operation, and will initiate a
drag cancel animation.
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);
}
If you want a notebook to accept drags from other widgets, you will have to set your own DnD code to do it.
Parameters
child
-
Type:
GtkWidget
A child
GtkWidget
.The data is owned by the caller of the method. detachable
-
Type:
gboolean
Whether the tab is detachable or not.