Revision: 76165 http://sourceforge.net/p/brlcad/code/76165 Author: starseeker Date: 2020-06-19 19:04:36 +0000 (Fri, 19 Jun 2020) Log Message: ----------- Wrap the curr_dm_list setting in order to also update relevant GEDP variables.
Modified Paths: -------------- brlcad/trunk/src/mged/adc.c brlcad/trunk/src/mged/attach.c brlcad/trunk/src/mged/buttons.c brlcad/trunk/src/mged/chgview.c brlcad/trunk/src/mged/cmd.c brlcad/trunk/src/mged/color_scheme.c brlcad/trunk/src/mged/doevent.c brlcad/trunk/src/mged/dozoom.c brlcad/trunk/src/mged/fbserv.c brlcad/trunk/src/mged/menu.c brlcad/trunk/src/mged/mged.c brlcad/trunk/src/mged/mged_dm.h brlcad/trunk/src/mged/set.c brlcad/trunk/src/mged/share.c Modified: brlcad/trunk/src/mged/adc.c =================================================================== --- brlcad/trunk/src/mged/adc.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/adc.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -94,12 +94,12 @@ FOR_ALL_DISPLAYS(dmlp, &head_dm_list.l) if (dmlp->dml_adc_state == adc_state) { - curr_dm_list = dmlp; + set_curr_dm(dmlp); set_scroll(); dirty = 1; } - curr_dm_list = save_dmlp; + set_curr_dm(save_dmlp); } Modified: brlcad/trunk/src/mged/attach.c =================================================================== --- brlcad/trunk/src/mged/attach.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/attach.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -125,6 +125,17 @@ struct dm_list *curr_dm_list = (struct dm_list *)NULL; static fastf_t windowbounds[6] = { XMIN, XMAX, YMIN, YMAX, (int)GED_MIN, (int)GED_MAX }; +/* If we changed the active dm, need to update GEDP as well.. */ +void set_curr_dm(struct dm_list *nl) +{ + curr_dm_list = nl; + if (nl != DM_LIST_NULL) { + GEDP->ged_gvp = nl->dml_view_state->vs_gvp; + GEDP->ged_gvp->gv_grid = *nl->dml_grid_state; /* struct copy */ + } else { + GEDP->ged_gvp = NULL; + } +} #ifdef DM_OGL static int @@ -347,7 +358,7 @@ /* found it */ if (p != curr_dm_list) { save_dm_list = curr_dm_list; - curr_dm_list = p; + set_curr_dm(p); } break; } @@ -396,9 +407,9 @@ bu_free((void *)curr_dm_list, "release: curr_dm_list"); if (save_dm_list != DM_LIST_NULL) - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); else - curr_dm_list = (struct dm_list *)head_dm_list.l.forw; + set_curr_dm((struct dm_list *)head_dm_list.l.forw); return TCL_OK; } @@ -629,7 +640,7 @@ if (dm_get_dname(tmp_dmp) && strlen(bu_vls_addr(dm_get_dname(tmp_dmp)))) { if (gui_setup(bu_vls_addr(dm_get_dname(tmp_dmp))) == TCL_ERROR) { bu_free((void *)curr_dm_list, "f_attach: dm_list"); - curr_dm_list = o_dm_list; + set_curr_dm(o_dm_list); bu_vls_free(&tmp_vls); dm_put(tmp_dmp); return TCL_ERROR; @@ -636,7 +647,7 @@ } } else if (gui_setup((char *)NULL) == TCL_ERROR) { bu_free((void *)curr_dm_list, "f_attach: dm_list"); - curr_dm_list = o_dm_list; + set_curr_dm(o_dm_list); bu_vls_free(&tmp_vls); dm_put(tmp_dmp); return TCL_ERROR; @@ -685,6 +696,9 @@ (void)dm_set_win_bounds(DMP, windowbounds); mged_fb_open(); + GEDP->ged_gvp = curr_dm_list->dml_view_state->vs_gvp; + GEDP->ged_gvp->gv_grid = *curr_dm_list->dml_grid_state; /* struct copy */ + return TCL_OK; Bad: Modified: brlcad/trunk/src/mged/buttons.c =================================================================== --- brlcad/trunk/src/mged/buttons.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/buttons.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -954,12 +954,12 @@ save_dm_list = curr_dm_list; FOR_ALL_DISPLAYS(p, &head_dm_list.l) { - curr_dm_list = p; + set_curr_dm(p); new_mats(); } - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); bu_vls_printf(&vls, "%s(state)", MGED_DISPLAY_VAR); Tcl_SetVar(INTERP, bu_vls_addr(&vls), state_str[STATE], TCL_GLOBAL_ONLY); Modified: brlcad/trunk/src/mged/chgview.c =================================================================== --- brlcad/trunk/src/mged/chgview.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/chgview.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -447,7 +447,7 @@ FOR_ALL_DISPLAYS(dmlp, &head_dm_list.l) { int non_empty = 0; /* start out empty */ - curr_dm_list = dmlp; + set_curr_dm(dmlp); if (curr_dm_list->dml_tie) { curr_cmd_list = curr_dm_list->dml_tie; @@ -487,7 +487,7 @@ } } - curr_dm_list = save_dmlp; + set_curr_dm(save_dmlp); curr_cmd_list = save_cmd_list; GEDP->ged_gvp = view_state->vs_gvp; @@ -594,7 +594,7 @@ FOR_ALL_DISPLAYS(dmlp, &head_dm_list.l) { struct view_ring *vrp; - curr_dm_list = dmlp; + set_curr_dm(dmlp); if (curr_dm_list->dml_tie) { curr_cmd_list = curr_dm_list->dml_tie; @@ -626,7 +626,7 @@ vrp->vr_scale = view_state->vs_gvp->gv_scale; } } - curr_dm_list = save_dmlp; + set_curr_dm(save_dmlp); curr_cmd_list = save_cmd_list; GEDP->ged_gvp = view_state->vs_gvp; Modified: brlcad/trunk/src/mged/cmd.c =================================================================== --- brlcad/trunk/src/mged/cmd.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/cmd.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -935,7 +935,7 @@ } if (curr_cmd_list->cl_tie) { - curr_dm_list = curr_cmd_list->cl_tie; + set_curr_dm(curr_cmd_list->cl_tie); if (GEDP != GED_NULL) GEDP->ged_gvp = view_state->vs_gvp; @@ -1498,7 +1498,7 @@ av[0] = "release"; av[1] = NULL; status = f_release(clientData, interpreter, 1, av); - curr_dm_list = dml; + set_curr_dm(dml); GEDP->ged_gvp = view_state->vs_gvp; return status; @@ -1530,7 +1530,7 @@ /* change primary focus to window argv[1] */ FOR_ALL_DISPLAYS(p, &head_dm_list.l) { if (dm_get_pathname(p->dml_dmp) && BU_STR_EQUAL(argv[1], bu_vls_addr(dm_get_pathname(p->dml_dmp)))) { - curr_dm_list = p; + set_curr_dm(p); if (curr_dm_list->dml_tie) curr_cmd_list = curr_dm_list->dml_tie; Modified: brlcad/trunk/src/mged/color_scheme.c =================================================================== --- brlcad/trunk/src/mged/color_scheme.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/color_scheme.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -298,13 +298,13 @@ FOR_ALL_DISPLAYS(dmlp, &head_dm_list.l) { if (dmlp->dml_color_scheme == color_scheme) { dmlp->dml_dirty = 1; - curr_dm_list = dmlp; + set_curr_dm(dmlp); Tcl_Eval(INTERP, bu_vls_addr(&vls)); } } bu_vls_free(&vls); - curr_dm_list = save_curr_dmlp; + set_curr_dm(save_curr_dmlp); } Modified: brlcad/trunk/src/mged/doevent.c =================================================================== --- brlcad/trunk/src/mged/doevent.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/doevent.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -126,7 +126,7 @@ /* it's an event for a window that I'm not handling */ if (curr_dm_list == DM_LIST_NULL) { - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); return TCL_OK; } @@ -139,7 +139,7 @@ /* no further processing of this event */ if (status != TCL_OK) { - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); return status; } @@ -195,7 +195,7 @@ } #endif - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); return status; } #else Modified: brlcad/trunk/src/mged/dozoom.c =================================================================== --- brlcad/trunk/src/mged/dozoom.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/dozoom.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -169,7 +169,7 @@ geometry_default_color, 1, mged_variables->mv_dlist); /* The vectorThreshold stuff in libdm may turn the Tcl-crank causing curr_dm_list to change. */ - if (curr_dm_list != save_dm_list) curr_dm_list = save_dm_list; + if (curr_dm_list != save_dm_list) set_curr_dm(save_dm_list); curr_dm_list->dml_ndrawn += ndrawn; @@ -194,7 +194,7 @@ } /* The vectorThreshold stuff in libdm may turn the Tcl-crank causing curr_dm_list to change. */ - if (curr_dm_list != save_dm_list) curr_dm_list = save_dm_list; + if (curr_dm_list != save_dm_list) set_curr_dm(save_dm_list); curr_dm_list->dml_ndrawn += ndrawn; @@ -236,7 +236,7 @@ curr_dm_list->dml_ndrawn += ndrawn; /* The vectorThreshold stuff in libdm may turn the Tcl-crank causing curr_dm_list to change. */ - if (curr_dm_list != save_dm_list) curr_dm_list = save_dm_list; + if (curr_dm_list != save_dm_list) set_curr_dm(save_dm_list); } /* @@ -297,7 +297,7 @@ dlp->dml_dirty = 1; } - curr_dm_list = save_dlp; + set_curr_dm(save_dlp); } /* Modified: brlcad/trunk/src/mged/fbserv.c =================================================================== --- brlcad/trunk/src/mged/fbserv.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/fbserv.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -136,7 +136,7 @@ /* save */ scdlp = curr_dm_list; - curr_dm_list = dlp; + set_curr_dm(dlp); for (i = MAX_CLIENTS-1; i >= 0; i--) { if (clients[i].c_fd == 0) continue; @@ -165,7 +165,7 @@ } /* restore */ - curr_dm_list = scdlp; + set_curr_dm(scdlp); } @@ -221,13 +221,13 @@ /* save */ scdlp = curr_dm_list; - curr_dm_list = dlp; + set_curr_dm(dlp); if (Tcl_GetChannelHandle(chan, TCL_READABLE, (ClientData *)&fd) == TCL_OK) fbserv_new_client(fbserv_makeconn((int)fd, pkg_switch), chan); /* restore */ - curr_dm_list = scdlp; + set_curr_dm(scdlp); } @@ -399,11 +399,11 @@ /* save */ scdlp = curr_dm_list; - curr_dm_list = dlp; + set_curr_dm(dlp); fbserv_new_client(pkg_getclient(fd, pkg_switch, communications_error, 0)); /* restore */ - curr_dm_list = scdlp; + set_curr_dm(scdlp); } Modified: brlcad/trunk/src/mged/menu.c =================================================================== --- brlcad/trunk/src/mged/menu.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/menu.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -141,12 +141,12 @@ if (p->dml_tie) curr_cmd_list = p->dml_tie; - curr_dm_list = p; + set_curr_dm(p); mmenu_set(index, value); } curr_cmd_list = save_cmd_list; - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); } Modified: brlcad/trunk/src/mged/mged.c =================================================================== --- brlcad/trunk/src/mged/mged.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/mged.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -358,13 +358,13 @@ if (!p->dml_owner) continue; - curr_dm_list = p; + set_curr_dm(p); bn_mat_mul(view_state->vs_model2objview, view_state->vs_gvp->gv_model2view, modelchanges); bn_mat_inv(view_state->vs_objview2model, view_state->vs_model2objview); view_state->vs_flag = 1; } - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); } @@ -639,7 +639,7 @@ if (Tcl_CommandComplete(bu_vls_addr(&input_str_prefix))) { curr_cmd_list = &head_cmd_list; if (curr_cmd_list->cl_tie) - curr_dm_list = curr_cmd_list->cl_tie; + set_curr_dm(curr_cmd_list->cl_tie); reset_Tty(fileno(stdin)); /* Backwards compatibility */ (void)signal(SIGINT, SIG_IGN); @@ -1779,7 +1779,7 @@ if (Tcl_CommandComplete(bu_vls_addr(&input_str_prefix))) { curr_cmd_list = &head_cmd_list; if (curr_cmd_list->cl_tie) - curr_dm_list = curr_cmd_list->cl_tie; + set_curr_dm(curr_cmd_list->cl_tie); if (cmdline(&input_str_prefix, TRUE) == CMD_MORE) { /* Remove newline */ @@ -1983,7 +1983,7 @@ struct bu_vls vls = BU_VLS_INIT_ZERO; char save_coords; - curr_dm_list = edit_rate_mr_dm_list; + set_curr_dm(edit_rate_mr_dm_list); save_coords = mged_variables->mv_coords; mged_variables->mv_coords = 'm'; @@ -2017,7 +2017,7 @@ struct bu_vls vls = BU_VLS_INIT_ZERO; char save_coords; - curr_dm_list = edit_rate_or_dm_list; + set_curr_dm(edit_rate_or_dm_list); save_coords = mged_variables->mv_coords; mged_variables->mv_coords = 'o'; @@ -2051,7 +2051,7 @@ struct bu_vls vls = BU_VLS_INIT_ZERO; char save_coords; - curr_dm_list = edit_rate_vr_dm_list; + set_curr_dm(edit_rate_vr_dm_list); save_coords = mged_variables->mv_coords; mged_variables->mv_coords = 'v'; @@ -2085,7 +2085,7 @@ char save_coords; struct bu_vls vls = BU_VLS_INIT_ZERO; - curr_dm_list = edit_rate_mt_dm_list; + set_curr_dm(edit_rate_mt_dm_list); save_coords = mged_variables->mv_coords; mged_variables->mv_coords = 'm'; @@ -2118,7 +2118,7 @@ char save_coords; struct bu_vls vls = BU_VLS_INIT_ZERO; - curr_dm_list = edit_rate_vt_dm_list; + set_curr_dm(edit_rate_vt_dm_list); save_coords = mged_variables->mv_coords; mged_variables->mv_coords = 'v'; @@ -2176,7 +2176,7 @@ if (!p->dml_owner) continue; - curr_dm_list = p; + set_curr_dm(p); if (view_state->vs_rateflag_model_rotate) { struct bu_vls vls = BU_VLS_INIT_ZERO; @@ -2238,7 +2238,7 @@ bu_vls_free(&vls); } - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); } return non_blocking; @@ -2293,7 +2293,7 @@ * if something has changed, then go update the display. * Otherwise, we are happy with the view we have */ - curr_dm_list = p; + set_curr_dm(p); if (mapped && dirty) { int restore_zbuffer = 0; @@ -2427,7 +2427,7 @@ } } - curr_dm_list = save_dm_list; + set_curr_dm(save_dm_list); bu_vls_free(&overlay_vls); bu_vls_free(&tmp_vls); @@ -2463,7 +2463,7 @@ bu_free(p, "release: curr_dm_list"); } - curr_dm_list = DM_LIST_NULL; + set_curr_dm(DM_LIST_NULL); } for (BU_LIST_FOR (c, cmd_list, &head_cmd_list.l)) { Modified: brlcad/trunk/src/mged/mged_dm.h =================================================================== --- brlcad/trunk/src/mged/mged_dm.h 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/mged_dm.h 2020-06-19 19:04:36 UTC (rev 76165) @@ -438,6 +438,9 @@ int (*dml_eventHandler)(); }; +/* If we're changing the active DM, use this function so + * libged also gets the word. */ +extern void set_curr_dm(struct dm_list *nl); #define DM_LIST_NULL ((struct dm_list *)NULL) #define DMP curr_dm_list->dml_dmp Modified: brlcad/trunk/src/mged/set.c =================================================================== --- brlcad/trunk/src/mged/set.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/set.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -313,7 +313,7 @@ FOR_ALL_DISPLAYS(dmlp, &head_dm_list.l) if (dmlp->dml_mged_variables == save_dmlp->dml_mged_variables) { - curr_dm_list = dmlp; + set_curr_dm(dmlp); if (mged_variables->mv_faceplate && mged_variables->mv_orig_gui) { if (mged_variables->mv_sliders) /* zero slider variables */ @@ -324,7 +324,7 @@ } } - curr_dm_list = save_dmlp; + set_curr_dm(save_dmlp); } @@ -389,7 +389,7 @@ if (dm_get_displaylist(dlp1->dml_dmp) && dlp1->dml_dlist_state->dl_active == 0) { - curr_dm_list = dlp1; + set_curr_dm(dlp1); createDLists(GEDP->ged_gdp->gd_headDisplay); dlp1->dml_dlist_state->dl_active = 1; dlp1->dml_dirty = 1; @@ -442,7 +442,7 @@ } /* restore current display manager */ - curr_dm_list = save_dlp; + set_curr_dm(save_dlp); } Modified: brlcad/trunk/src/mged/share.c =================================================================== --- brlcad/trunk/src/mged/share.c 2020-06-19 18:30:58 UTC (rev 76164) +++ brlcad/trunk/src/mged/share.c 2020-06-19 19:04:36 UTC (rev 76165) @@ -184,11 +184,11 @@ save_dlp = curr_dm_list; - curr_dm_list = dlp1; + set_curr_dm(dlp1); createDLists(GEDP->ged_gdp->gd_headDisplay); /* restore */ - curr_dm_list = save_dlp; + set_curr_dm(save_dlp); } dlp1->dml_dirty = 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits