+static void drag_cb(GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y,
+ GtkSelectionData *selection_data,
+ guint info, guint time,
+ gpointer user_data)
+{
+ GtkWidget *source;
+ notebook_data_t *nbdp;
+
+ /*
+ * We don't actually really *use* this yet, but Dirk wants to
+ * do all the tabs as detatched tabs, and we'd need to use
+ * this all to figure out which window we're talking about.
+ */
+ source = gtk_drag_get_source_widget(context);
+ if (nbd[0].name && ! strcmp(nbd[0].name,gtk_widget_get_name(source)))
+ nbdp = nbd;
+ else if (nbd[1].name && ! strcmp(nbd[1].name,gtk_widget_get_name(source)))
+ nbdp = nbd + 1;
+ else
+ /* HU? */
+ return;
+
+ gtk_drag_finish(context, TRUE, TRUE, time);
+
+ /* we no longer need the widget - but getting rid of this is hard;
+ * remove the signal handler, remove the notebook from the box
+ * then destroy the widget (and clear out our data structure) */
+ g_signal_handler_disconnect(nbdp->widget,nbdp->delete_handler);
+ g_signal_handler_disconnect(nbdp->widget,nbdp->destroy_handler);
+ gtk_container_remove(GTK_CONTAINER(nbdp->box), source);
+ gtk_widget_destroy(nbdp->widget);
+ nbdp->widget = NULL;
+ free(nbdp->name);
+ nbdp->name = NULL;
+}
+