diff --git a/lib/matplotlib/_pylab_helpers.py b/lib/matplotlib/_pylab_helpers.py index 57e6d985af22..98e7b0ecf405 100644 --- a/lib/matplotlib/_pylab_helpers.py +++ b/lib/matplotlib/_pylab_helpers.py @@ -97,6 +97,19 @@ def get_active(cls): """Return the active manager, or *None* if there is no manager.""" return next(reversed(cls.figs.values())) if cls.figs else None + @classmethod + def _set_new_active_manager(cls, manager): + """Adopt *manager* into pyplot and make it the active manager.""" + if not hasattr(manager, "_cidgcf"): + manager._cidgcf = manager.canvas.mpl_connect( + "button_press_event", lambda event: cls.set_active(manager)) + fig = manager.canvas.figure + fig.number = manager.num + label = fig.get_label() + if label: + manager.set_window_title(label) + cls.set_active(manager) + @classmethod def set_active(cls, manager): """Make *manager* the active manager.""" diff --git a/lib/matplotlib/figure.py b/lib/matplotlib/figure.py index be08bb36d85e..04a828de6a33 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -2009,24 +2009,9 @@ def __setstate__(self, state): allnums = plt.get_fignums() num = max(allnums) + 1 if allnums else 1 mgr = plt._backend_mod.new_figure_manager_given_figure(num, self) - - # XXX The following is a copy and paste from pyplot. Consider - # factoring to pylab_helpers - - if self.get_label(): - mgr.set_window_title(self.get_label()) - - # make this figure current on button press event - def make_active(event): - pylab_helpers.Gcf.set_active(mgr) - - mgr._cidgcf = mgr.canvas.mpl_connect('button_press_event', - make_active) - - pylab_helpers.Gcf.set_active(mgr) - self.number = num - + pylab_helpers.Gcf._set_new_active_manager(mgr) plt.draw_if_interactive() + self.stale = True def add_axobserver(self, func): diff --git a/lib/matplotlib/pyplot.py b/lib/matplotlib/pyplot.py index fa7112788927..300563ee5184 100644 --- a/lib/matplotlib/pyplot.py +++ b/lib/matplotlib/pyplot.py @@ -520,28 +520,17 @@ def figure(num=None, # autoincrement if None, else integer from 1-N frameon=frameon, FigureClass=FigureClass, **kwargs) - + fig = figManager.canvas.figure if figLabel: - figManager.set_window_title(figLabel) - figManager.canvas.figure.set_label(figLabel) - - # make this figure current on button press event - def make_active(event): - _pylab_helpers.Gcf.set_active(figManager) + fig.set_label(figLabel) - cid = figManager.canvas.mpl_connect('button_press_event', make_active) - figManager._cidgcf = cid - - _pylab_helpers.Gcf.set_active(figManager) - fig = figManager.canvas.figure - fig.number = num + _pylab_helpers.Gcf._set_new_active_manager(figManager) # make sure backends (inline) that we don't ship that expect this # to be called in plotting commands to make the figure call show # still work. There is probably a better way to do this in the # FigureManager base class. - if matplotlib.is_interactive(): - draw_if_interactive() + draw_if_interactive() if _INSTALL_FIG_OBSERVER: fig.stale_callback = _auto_draw_if_interactive