Index: src/plugins/query/dlg_search.c =================================================================== --- src/plugins/query/dlg_search.c (revision 10336) +++ src/plugins/query/dlg_search.c (revision 10337) @@ -185,6 +185,15 @@ free(freeme); } +static void maybe_follow(search_ctx_t *ctx, rnd_design_t *dsg) +{ + if (!ctx->dlg[ctx->wfollow].val.lng) + return; + + ctx->dsg = dsg; + update_scope(ctx); +} + /* look up row and col for a widget attr in a [row][col] widget idx array; returns 0 on success */ static int rc_lookup(search_ctx_t *ctx, int w[MAX_ROW][MAX_COL], rnd_hid_attribute_t *attr, int *row, int *col) { @@ -542,7 +551,13 @@ update_scope(ctx); } +static void search_follow_chg_cb(void *hid_ctx, void *caller_data, rnd_hid_attribute_t *attr) +{ + search_ctx_t *ctx = caller_data; + maybe_follow(ctx, rnd_multi_get_current()); +} + static const char *icon_del[] = { "5 5 2 1", " c None", @@ -597,6 +612,7 @@ RND_DAD_BOOL(ctx->dlg); ctx->wfollow = RND_DAD_CURRENT(ctx->dlg); RND_DAD_DEFAULT_NUM(ctx->dlg, 0); + RND_DAD_CHANGE_CB(ctx->dlg, search_follow_chg_cb); RND_DAD_END(ctx->dlg); RND_DAD_END(ctx->dlg); RND_DAD_END(ctx->dlg); @@ -704,6 +720,15 @@ } } +void sch_rnd_query_ev_sheet_chg(rnd_design_t *hidlib, void *user_data, int argc, rnd_event_arg_t argv[]) +{ + search_ctx_t *ctx; + rnd_design_t *dsg = argv[1].d.p; + for(ctx = gdl_first(&searches); ctx != NULL; ctx = gdl_next(&searches, ctx)) + maybe_follow(ctx, dsg); +} + + void sch_rnd_search_close_all(void) { search_ctx_t *ctx, *nextctx; Index: src/plugins/query/dlg_search.h =================================================================== --- src/plugins/query/dlg_search.h (revision 10336) +++ src/plugins/query/dlg_search.h (revision 10337) @@ -5,4 +5,5 @@ void sch_rnd_search_close_all(void); void sch_rnd_query_ev_preunload(rnd_design_t *hidlib, void *user_data, int argc, rnd_event_arg_t argv[]); +void sch_rnd_query_ev_sheet_chg(rnd_design_t *hidlib, void *user_data, int argc, rnd_event_arg_t argv[]); Index: src/plugins/query/query.c =================================================================== --- src/plugins/query/query.c (revision 10336) +++ src/plugins/query/query.c (revision 10337) @@ -461,5 +461,6 @@ pcb_qry_basic_fnc_init(); query_action_reg(query_cookie); rnd_event_bind(CSCH_EVENT_SHEET_PREUNLOAD, sch_rnd_query_ev_preunload, NULL, query_cookie); + rnd_event_bind(RND_EVENT_DESIGN_SET_CURRENT, sch_rnd_query_ev_sheet_chg, NULL, query_cookie); return 0; }