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

Reply via email to