void tstacked_widget::child_populate_dirty_list(twindow& caller,
		const std::vector<twidget*>& call_stack)
{
	std::vector<twidget*> layers;
	for (size_t n = 0; n < generator_->get_item_count(); ++ n) {
		std::vector<tdirty_list>& dirty_list = caller.dirty_list();
		size_t dirty_size = dirty_list.size();

		// tgrid <==> [layer]
		tgrid& grid = generator_->item(n);
		if (grid.get_visible() != twidget::VISIBLE) {
			continue;
		}
		std::vector<twidget*> child_call_stack = call_stack;
		if (n > 0) {
			child_call_stack.insert(child_call_stack.end(), layers.begin(), layers.end());
		}
		grid.populate_dirty_list(caller, child_call_stack);
	
		if (n > 0 && dirty_list.size() != dirty_size) {
			std::vector<tdirty_list>::iterator it = dirty_list.begin();
			for (std::advance(it, dirty_size); it != dirty_list.end(); ++ it) {
				it->children = layers;
			}
		}
		layers.push_back(&grid);
	}
}