Mercurial > octave
changeset 27804:73b765ae3131
Better fix for error in stem callback function (bug #57391).
* __stem__.m: Undo cset f78dc0d6ad2d. Set "deletefcn" property on baseline
line object to point to rm_xlim_listener() which deletes the listener
on the "xlim" property of the axes object in to which the stem plot is made.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 11 Dec 2019 16:37:28 -0800 |
parents | e8823425a60b |
children | dccc551aa83b |
files | scripts/plot/draw/private/__stem__.m |
diffstat | 1 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/plot/draw/private/__stem__.m Wed Dec 11 09:11:53 2019 +0100 +++ b/scripts/plot/draw/private/__stem__.m Wed Dec 11 16:37:28 2019 -0800 @@ -155,7 +155,10 @@ ## baseline listeners if (! isempty (h_baseline)) - addlistener (hax, "xlim", @update_xlim); + fcn_handle = @update_xlim; + addlistener (hax, "xlim", fcn_handle); + set (h_baseline, "deletefcn", {@rm_xlim_listener, hax, fcn_handle}); + for hg = h' addlistener (hg, "showbaseline", @show_baseline); addlistener (hg, "visible", {@show_baseline, h}); @@ -362,8 +365,7 @@ for i = 1 : length (kids) obj = get (kids(i)); - if (strcmp (obj.type, "hggroup") && isfield (obj, "baseline") - && ! strcmp (obj.beingdeleted, "on")) + if (strcmp (obj.type, "hggroup") && isfield (obj, "baseline")) if (any (get (obj.baseline, "xdata") != xlim)) set (obj.baseline, "xdata", xlim); endif @@ -372,6 +374,12 @@ endfunction +## Good practice to remove listeners when object is deleted. +## In this case, required to avoid error in update_xlim callback (bug #57391). +function rm_xlim_listener (~, ~, hax, fcn_handle) + dellistener (hax, "xlim", fcn_handle); +endfunction + function update_baseline (h, ~, src) visible = get (h, "visible");