GMS 2 get ds_map children list by using a parent entry?

can someone explain how to built a list of my widgets children including the widget itself?
I want to loop them and bring them to the top of the list
I since its ds_maps and not objects I am using virtual parenting

Code:
/// @desc ze_widgets_init()
#macro X 0
#macro Y 1
#macro W 2
#macro H 3

#macro W_INITIALIZED 0
#macro W_CLICKABLE   1
#macro W_CLICKING    2
#macro W_DRAGGABLE   3
#macro W_DRAGGING    4
#macro W_RESIZABLE   5
#macro W_RESIZING    6
#macro W_FOCUSABLE   7
#macro W_FOCUSED     8

stack = ds_list_create();
       
background = ds_map_create();
background[? "parent"]      = (0);
background[? "policy"]      = [0,0];
background[? "palette"]     = [spr_pal_editor,0]; 
background[? "border"]      = [2,2]; 
background[? "rect"]        = [0,0,0,0];
background[? "rect_min"]    = [0,0,0,0];
background[? "rect_max"]    = [65535,65535,65535,65535];
background[? "rect_orig"]   = [0,0,0,0];
background[? "rect_offset"] = [0,0,0,0]; 
background[? "drag_start"]  = [0,0]; 
background[? "drag_end"]    = [0,0]; 
background[? "flags"]       = (W_FOCUSABLE);
background[? "data"]        = -1;
Code:
/// @desc ze_widget_set_focus()
/// @param widget

var widget    = argument[0];
var hierarchy = ds_list_create();
var value     = ds_list_find_value(stack, ds_list_find_index(stack, widget));

// build list of children do widget

// loop though parent + all children
//{
//        value = ds_list_find_value(stack, ds_list_find_index(stack, widget));
//            ds_list_delete(    stack, ds_list_find_index(stack, widget));
//            ds_list_insert(    stack, 0, value);
//}
       
// delete temp list
 
Top