How to set focus in a dynamic graphic with InputFields

Happy New Year!

I am trying to set cursor focus in this timetable application. When the minutes are all entered the activity blocks resize. Tabbing out of the minutes field moves focus to the activity field, but when resize occurs the focus disappears. I have tried using a method from this answer: https://mathematica.stackexchange.com/a/81352/363 which does work in isolation, but I can’t get it to work within the dynamic timetable.

Clear(timetable, entry, add, activity, mins, entries)

resize() := Module({},
  union = Union(Map(Head, minlist = Array(mins, num)));
  If(union == {Integer},
   (* all times are set; modify go trigger and resize entries *)
   go++;
   entries = Array(entry, num);
   entries((All, 1, 1, 2, 2, 2)) = -minlist;
   entries = MapThread(#1 /.
       (PlotRange -> {_, {0, _}}) -> (PlotRange -> {{0, 400}, {0, -#2}}) &,
     {entries, minlist});
   accminlist = Most(Prepend(Accumulate(minlist), 0));
   entries((All, {-3, -1})) = MapThread({{0, -#1}, {400, #2}} &,
     {accminlist, minlist});
   Array((entry(#) = entries((#))) &, num)))

newentry(thisnum_, ypos_) := Inset(Graphics({ColorData(24)(thisnum),
    Rectangle({0, 0}, {400, -100}),
    Inset(Row({
       Framed(InputField(Dynamic(mins(thisnum),
          (mins(thisnum) = #;
            resize();
        
            MathLink`CallFrontEnd(
             FrontEnd`BoxReferenceFind(
              FE`BoxReference(SelectedNotebook(),
               {{"field" <> ToString(thisnum)}},
               FE`BoxOffset -> {FE`BoxChild(1)},
               FE`SearchStart -> "StartFromBeginning")))
        
            ) &), Number, BaseStyle -> {FontColor -> Black},
         FieldSize -> 3, ImageSize -> {Automatic, 23}),
        FrameStyle -> None, FrameMargins -> {{2, 2}, {5, 0}}),
       Button(" + ", add(thisnum), Appearance -> "Palette"),
       Spacer(30),
       InputField(Dynamic(activity(thisnum)), String,
        BaseStyle -> {FontColor -> Black, FontSize -> 22},
        FieldSize -> 10, BoxID -> "field" <> ToString(thisnum)),
       Spacer(30)
       },
      Alignment -> Center))
    }, PlotRange -> {{0, 400}, {0, -100}}, ImageSize -> 400),
  {0, ypos}, {0, 0}, {400, 100})

add(prev_) := Module({size},
  num = prev + 1;
  size = If(NumberQ(mins(prev)), mins(prev), 100);
  ypos = entry(prev)((-3, 2)) - size;
  Quiet(Clear(entry(num)));
  entry(num) = newentry(num, ypos))

num = go = 1;
entry(num) = newentry(num, 0);
timetable = Deploy(Dynamic(show = Graphics({Yellow,
       (* go needs to be in the enclosing construct to be tracked *)
       go;
       Rectangle({0, 0}, {400, -500}),
       Array(entry, num)
       }, PlotRange -> {{0, 400}, {0, -500}}, ImageSize -> 400),
    TrackedSymbols :> {num, go}));

enter image description here