Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support removing absent tools from ToolContainerBase. #28171

Merged
merged 1 commit into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/matplotlib/backend_bases.py
Original file line number Diff line number Diff line change
Expand Up @@ -3459,6 +3459,10 @@ def remove_toolitem(self, name):
backend-specific code to remove an element from the toolbar; it is
called when `.ToolManager` emits a `tool_removed_event`.
Because some tools are present only on the `.ToolManager` but not on
the `ToolContainer`, this method must be a no-op when called on a tool
absent from the container.
.. warning::
This is part of the backend implementation and should
not be called by end-users. They should instead call
Expand Down
3 changes: 1 addition & 2 deletions lib/matplotlib/backends/_backend_tk.py
Original file line number Diff line number Diff line change
Expand Up @@ -1011,9 +1011,8 @@ def toggle_toolitem(self, name, toggled):
toolitem.deselect()

def remove_toolitem(self, name):
for toolitem in self._toolitems[name]:
for toolitem in self._toolitems.pop(name, []):
toolitem.pack_forget()
del self._toolitems[name]

def set_message(self, s):
self._message.set(s)
Expand Down
9 changes: 2 additions & 7 deletions lib/matplotlib/backends/backend_gtk3.py
Original file line number Diff line number Diff line change
Expand Up @@ -446,15 +446,10 @@ def toggle_toolitem(self, name, toggled):
toolitem.handler_unblock(signal)

def remove_toolitem(self, name):
if name not in self._toolitems:
self.toolmanager.message_event(f'{name} not in toolbar', self)
return

for group in self._groups:
for toolitem, _signal in self._toolitems[name]:
for toolitem, _signal in self._toolitems.pop(name, []):
for group in self._groups:
if toolitem in self._groups[group]:
self._groups[group].remove(toolitem)
del self._toolitems[name]

def _add_separator(self):
sep = Gtk.Separator()
Expand Down
9 changes: 2 additions & 7 deletions lib/matplotlib/backends/backend_gtk4.py
Original file line number Diff line number Diff line change
Expand Up @@ -475,15 +475,10 @@ def toggle_toolitem(self, name, toggled):
toolitem.handler_unblock(signal)

def remove_toolitem(self, name):
if name not in self._toolitems:
self.toolmanager.message_event(f'{name} not in toolbar', self)
return

for group in self._groups:
for toolitem, _signal in self._toolitems[name]:
for toolitem, _signal in self._toolitems.pop(name, []):
for group in self._groups:
if toolitem in self._groups[group]:
self._groups[group].remove(toolitem)
del self._toolitems[name]

def _add_separator(self):
sep = Gtk.Separator()
Expand Down
3 changes: 1 addition & 2 deletions lib/matplotlib/backends/backend_qt.py
Original file line number Diff line number Diff line change
Expand Up @@ -1007,9 +1007,8 @@ def toggle_toolitem(self, name, toggled):
button.toggled.connect(handler)

def remove_toolitem(self, name):
for button, handler in self._toolitems[name]:
for button, handler in self._toolitems.pop(name, []):
button.setParent(None)
del self._toolitems[name]

def set_message(self, s):
self.widgetForAction(self._message_action).setText(s)
Expand Down
3 changes: 1 addition & 2 deletions lib/matplotlib/backends/backend_wx.py
Original file line number Diff line number Diff line change
Expand Up @@ -1257,9 +1257,8 @@ def toggle_toolitem(self, name, toggled):
self.Refresh()

def remove_toolitem(self, name):
for tool, handler in self._toolitems[name]:
for tool, handler in self._toolitems.pop(name, []):
self.DeleteTool(tool.Id)
del self._toolitems[name]

def set_message(self, s):
self._label_text.SetLabel(s)
Expand Down