I see... Thanks for the info! Since I'm closing this chapter on row state handlers lol, I decided to try the "<< Add Graphics Script" idea provided above again, but with flags this time. When implemented without flags, it seems to exhibit the same (bad) behavior I was dealing with above, but with flags it seems to work!
appNS:already_run=0;
Eval(EvalExpr(Report(gb1)[FrameBox(1)] << Add Graphics Script(
If(appNS:already_run==1,
appNS:already_run=0,
f = dt1 << Get Selected Rows;
group_selected = dt1[f, "index1"];
appNS:already_run=1;
expr(dt2) << Select Where(Contains(group_selected, :"index2"));
))));
Eval(EvalExpr(Report(gb2)[FrameBox(1)] << Add Graphics Script(
If(appNS:already_run==1,
appNS:already_run=0,
f = dt2 << Get Selected Rows;
group_selected = dt2[f, "index2"];
appNS:already_run=1;
expr(dt1) << Select Where(Contains(group_selected, :"index1"));
))));
Hopefully this will continue to work as I expand the graphics connections. Any idea why row state handlers will continuously grab the "selection" over and over (thus creating a loop between the graphs and freezing JMP) and why the same JSL in a graphics script doesn't?
I really appreciate the help @jthi & @txnelson !