File tree 2 files changed +10
-3
lines changed
2 files changed +10
-3
lines changed Original file line number Diff line number Diff line change 28
28
import tornado
29
29
except ImportError :
30
30
raise RuntimeError ("The WebAgg backend requires Tornado." )
31
+
31
32
import tornado .web
32
33
import tornado .ioloop
33
34
import tornado .websocket
@@ -254,7 +255,9 @@ def open(self, fignum):
254
255
self .set_nodelay (True )
255
256
256
257
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 )
258
261
259
262
def on_message (self , message ):
260
263
message = json .loads (message )
@@ -265,7 +268,11 @@ def on_message(self, message):
265
268
self .supports_binary = message ['value' ]
266
269
else :
267
270
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 )
269
276
270
277
def send_json (self , content ):
271
278
self .write_message (json .dumps (content ))
Original file line number Diff line number Diff line change @@ -396,7 +396,7 @@ mpl.figure.prototype.toolbar_button_onclick = function(name) {
396
396
if ( name == 'download' ) {
397
397
var format_dropdown = this . format_dropdown ;
398
398
var format = format_dropdown . options [ format_dropdown . selectedIndex ] . value ;
399
- this . ondownload ( figure , format ) ;
399
+ this . ondownload ( this , format ) ;
400
400
} else {
401
401
this . send_message ( "toolbar_button" , { name : name } ) ;
402
402
}
You can’t perform that action at this time.
0 commit comments