void cairo_dock_widget_free (CDWidget *pCdWidget)  // doesn't destroy the GTK widget, as it is destroyed with the main window
{
	if (!pCdWidget)
		return;
	if (pCdWidget->reset)
		pCdWidget->reset (pCdWidget);
	
	cairo_dock_free_generated_widget_list (pCdWidget->pWidgetList);
	pCdWidget->pWidgetList = NULL;
	
	g_ptr_array_free (pCdWidget->pDataGarbage, TRUE);  /// free each element...
	pCdWidget->pDataGarbage = NULL;
	
	g_free (pCdWidget);
}
void cairo_dock_widget_destroy_widget (CDWidget *pCdWidget)
{
	if (!pCdWidget)
		return;
	
	gtk_widget_destroy (pCdWidget->pWidget);
	pCdWidget->pWidget = NULL;
	
	cairo_dock_free_generated_widget_list (pCdWidget->pWidgetList);
	pCdWidget->pWidgetList = NULL;
	
	/// free each element...
	g_ptr_array_free (pCdWidget->pDataGarbage, TRUE);
	pCdWidget->pDataGarbage = NULL;
}
gboolean on_delete_normal_gui (GtkWidget *pWidget, GdkEvent *event, GMainLoop *pBlockingLoop)
{
	//g_print ("%s ()\n", __func__);
	
	if (pBlockingLoop != NULL && g_main_loop_is_running (pBlockingLoop))
	{
		g_main_loop_quit (pBlockingLoop);
	}
	
	gpointer pUserData = g_object_get_data (G_OBJECT (pWidget), "action-data");
	GFreeFunc pFreeUserData = g_object_get_data (G_OBJECT (pWidget), "free-data");
	if (pFreeUserData != NULL && pUserData != NULL)
		pFreeUserData (pUserData);
	
	GSList *pWidgetList = g_object_get_data (G_OBJECT (pWidget), "widget-list");
	cairo_dock_free_generated_widget_list (pWidgetList);
	cairo_dock_config_panel_destroyed ();
	
	GPtrArray *pDataGarbage = g_object_get_data (G_OBJECT (pWidget), "garbage");
	/// nettoyer.
	
	return FALSE;
}