Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3297484

Browse filesBrowse files
authored
Merge pull request #17108 from anntzer/textbox-embedding
Make widgets.TextBox work also when embedding.
2 parents 1859c81 + 1c6d5a1 commit 3297484
Copy full SHA for 3297484

File tree

Expand file treeCollapse file tree

1 file changed

+22
-21
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+22
-21
lines changed

‎lib/matplotlib/widgets.py

Copy file name to clipboardExpand all lines: lib/matplotlib/widgets.py
+22-21Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -836,37 +836,38 @@ def _notify_change_observers(self):
836836

837837
def begin_typing(self, x):
838838
self.capturekeystrokes = True
839-
# Check for toolmanager handling the keypress
840-
if self.ax.figure.canvas.manager.key_press_handler_id is not None:
841-
# Disable command keys so that the user can type without
842-
# command keys causing figure to be saved, etc.
843-
self._restore_keymap = ExitStack()
839+
# Disable keypress shortcuts, which may otherwise cause the figure to
840+
# be saved, closed, etc., until the user stops typing. The way to
841+
# achieve this depends on whether toolmanager is in use.
842+
stack = ExitStack() # Register cleanup actions when user stops typing.
843+
self._on_stop_typing = stack.close
844+
toolmanager = getattr(
845+
self.ax.figure.canvas.manager, "toolmanager", None)
846+
if toolmanager is not None:
847+
# If using toolmanager, lock keypresses, and plan to release the
848+
# lock when typing stops.
849+
toolmanager.keypresslock(self)
850+
stack.push(toolmanager.keypresslock.release, self)
851+
else:
852+
# If not using toolmanager, disable all keypress-related rcParams.
844853
# Avoid spurious warnings if keymaps are getting deprecated.
845854
with cbook._suppress_matplotlib_deprecation_warning():
846-
self._restore_keymap.enter_context(
847-
mpl.rc_context({k: [] for k in mpl.rcParams
848-
if k.startswith('keymap.')}))
849-
else:
850-
self.ax.figure.canvas.manager.toolmanager.keypresslock(self)
855+
stack.enter_context(mpl.rc_context(
856+
{k: [] for k in mpl.rcParams if k.startswith("keymap.")}))
851857

852858
def stop_typing(self):
853-
notifysubmit = False
854-
# Because _notify_submit_users might throw an error in the user's code,
855-
# we only want to call it once we've already done our cleanup.
856859
if self.capturekeystrokes:
857-
# Check for toolmanager handling the keypress
858-
if self.ax.figure.canvas.manager.key_press_handler_id is not None:
859-
# since the user is no longer typing,
860-
# reactivate the standard command keys
861-
self._restore_keymap.close()
862-
else:
863-
toolmanager = self.ax.figure.canvas.manager.toolmanager
864-
toolmanager.keypresslock.release(self)
860+
self._on_stop_typing()
861+
self._on_stop_typing = None
865862
notifysubmit = True
863+
else:
864+
notifysubmit = False
866865
self.capturekeystrokes = False
867866
self.cursor.set_visible(False)
868867
self.ax.figure.canvas.draw()
869868
if notifysubmit:
869+
# Because _notify_submit_observers might throw an error in the
870+
# user's code, only call it once we've already done our cleanup.
870871
self._notify_submit_observers()
871872

872873
def position_cursor(self, x):

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.