diff --git a/doc/api/next_api_changes/deprecations/22509-AL.rst b/doc/api/next_api_changes/deprecations/22509-AL.rst new file mode 100644 index 000000000000..01191b500757 --- /dev/null +++ b/doc/api/next_api_changes/deprecations/22509-AL.rst @@ -0,0 +1,4 @@ +``ToolBase.destroy`` +~~~~~~~~~~~~~~~~~~~~ +... is deprecated. To run code upon tool removal, connect to the +``tool_removed_event`` event. diff --git a/lib/matplotlib/backend_managers.py b/lib/matplotlib/backend_managers.py index de67d46c0b76..f32911be5f59 100644 --- a/lib/matplotlib/backend_managers.py +++ b/lib/matplotlib/backend_managers.py @@ -206,7 +206,9 @@ def remove_tool(self, name): """ tool = self.get_tool(name) - tool.destroy() + _api.deprecate_method_override( + backend_tools.ToolBase.destroy, tool, since="3.6", + alternative="tool_removed_event")() # If it's a toggle tool and toggled, untoggle if getattr(tool, 'toggled', False): @@ -214,9 +216,8 @@ def remove_tool(self, name): self._remove_keys(name) - s = 'tool_removed_event' - event = ToolEvent(s, self, tool) - self._callbacks.process(s, event) + event = ToolEvent('tool_removed_event', self, tool) + self._callbacks.process(event.name, event) del self._tools[name] @@ -284,13 +285,10 @@ def add_tool(self, name, tool, *args, **kwargs): self._handle_toggle(tool_obj, None, None, None) tool_obj.set_figure(self.figure) - self._tool_added_event(tool_obj) - return tool_obj + event = ToolEvent('tool_added_event', self, tool_obj) + self._callbacks.process(event.name, event) - def _tool_added_event(self, tool): - s = 'tool_added_event' - event = ToolEvent(s, self, tool) - self._callbacks.process(s, event) + return tool_obj def _handle_toggle(self, tool, sender, canvasevent, data): """ diff --git a/lib/matplotlib/backend_tools.py b/lib/matplotlib/backend_tools.py index 8a2b6491f17e..7ab87ba52879 100644 --- a/lib/matplotlib/backend_tools.py +++ b/lib/matplotlib/backend_tools.py @@ -155,6 +155,7 @@ def trigger(self, sender, event, data=None): """ pass + @_api.deprecated("3.6", alternative="tool_removed_event") def destroy(self): """ Destroy the tool.