8. Widget hierarchy

These functions are for limited interacting with widgets.

#define mt_is_widget(widget) ((widget) && *(widget))

typedef void *MT_WIDGET;
typedef void (*mt_destroy_func)(void *data);

MT_WIDGET *mt_widget_ref(MT_WIDGET *widget);
void       mt_widget_unref(MT_WIDGET *widget);
MT_WIDGET *mt_widget_get_parent(MT_WIDGET *widget, MT_WIDGET *result);
void       mt_widget_set_data(MT_WIDGET *widget, void *data, mt_destroy_func data_dispose);
void      *mt_widget_get_data(MT_WIDGET *widget);