Skip to content

Commit 2bab043

Browse files
committed
Update backend_webagg.py
Change WebAgg backend to handle stale figure UI controls in the browser
1 parent 4af0b5d commit 2bab043

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

lib/matplotlib/backends/backend_webagg.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import tornado
2929
except ImportError:
3030
raise RuntimeError("The WebAgg backend requires Tornado.")
31+
3132
import tornado.web
3233
import tornado.ioloop
3334
import tornado.websocket
@@ -254,7 +255,9 @@ def open(self, fignum):
254255
self.set_nodelay(True)
255256

256257
def on_close(self):
257-
Gcf.get_fig_manager(self.fignum).remove_web_socket(self)
258+
manager = Gcf.get_fig_manager(self.fignum)
259+
if manager is not None:
260+
manager.remove_web_socket(self)
258261

259262
def on_message(self, message):
260263
message = json.loads(message)
@@ -265,7 +268,11 @@ def on_message(self, message):
265268
self.supports_binary = message['value']
266269
else:
267270
manager = Gcf.get_fig_manager(self.fignum)
268-
manager.handle_json(message)
271+
# It is possible for a figure to be closed,
272+
# but a stale figure UI is still sending messages
273+
# from the browser.
274+
if manager is not None:
275+
manager.handle_json(message)
269276

270277
def send_json(self, content):
271278
self.write_message(json.dumps(content))

0 commit comments

Comments
 (0)