diff --git a/lib/matplotlib/figure.py b/lib/matplotlib/figure.py index 9139b2ed262f..9f764cc2332f 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -1636,6 +1636,8 @@ def add_subfigure(self, subplotspec, **kwargs): sf = SubFigure(self, subplotspec, **kwargs) self.subfigs += [sf] sf._remove_method = self.subfigs.remove + sf.stale_callback = _stale_figure_callback + self.stale = True return sf def sca(self, a): diff --git a/lib/matplotlib/tests/test_figure.py b/lib/matplotlib/tests/test_figure.py index e8edcf61815d..5a8894b10496 100644 --- a/lib/matplotlib/tests/test_figure.py +++ b/lib/matplotlib/tests/test_figure.py @@ -1741,3 +1741,27 @@ def test_subfigure_row_order(): sf_arr = fig.subfigures(4, 3) for a, b in zip(sf_arr.ravel(), fig.subfigs): assert a is b + + +def test_subfigure_stale_propagation(): + fig = plt.figure() + + fig.draw_without_rendering() + assert not fig.stale + + sfig1 = fig.subfigures() + assert fig.stale + + fig.draw_without_rendering() + assert not fig.stale + assert not sfig1.stale + + sfig2 = sfig1.subfigures() + assert fig.stale + + fig.draw_without_rendering() + assert not fig.stale + assert not sfig2.stale + + sfig2.stale = True + assert fig.stale