Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7228163

Browse files
committed
WIP
This will be force-pushed out of existence, dumping so I can get to it else where
1 parent 72c82e8 commit 7228163

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

lib/matplotlib/backends/backend_nbagg.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,17 @@ def destroy(self):
165165

166166
def clearup_closed(self):
167167
"""Clear up any closed Comms."""
168+
for sock in self.web_sockets:
169+
cb_print('\t' + repr(sock) + repr(sock.is_open()))
168170
self.web_sockets = set([socket for socket in self.web_sockets
169171
if socket.is_open()])
170172

171173
if len(self.web_sockets) == 0:
172-
self.manager.canvas.close_event()
174+
self.canvas.close_event()
175+
176+
def remove_comm(self, comm_id):
177+
self.web_sockets = set([socket for socket in self.web_sockets
178+
if not socket.comm.comm_id == comm_id])
173179

174180

175181
class TimerTornado(TimerBase):
@@ -219,13 +225,21 @@ def new_figure_manager(num, *args, **kwargs):
219225
return new_figure_manager_given_figure(num, thisFig)
220226

221227

228+
def cb_print(inval):
229+
with open('/home/tcaswell/nbagg_dbg.txt', 'a') as fout:
230+
fout.write(repr(inval))
231+
fout.write('\n')
232+
233+
222234
def new_figure_manager_given_figure(num, figure):
223235
"""
224236
Create a new figure manager instance for the given figure.
225237
"""
226238
from .._pylab_helpers import Gcf
239+
cb_print('created')
227240

228241
def closer(event):
242+
cb_print('hit closer' + str(num))
229243
Gcf.destroy(num)
230244

231245
canvas = FigureCanvasNbAgg(figure)
@@ -267,15 +281,29 @@ def __init__(self, manager):
267281
self.comm.on_msg(self.on_message)
268282

269283
manager = self.manager
270-
self.comm.on_close(lambda close_message: manager.clearup_closed())
284+
self._ext_close = False
285+
286+
def _on_close(close_message):
287+
cb_print('comm close cb' + repr(close_message))
288+
self._ext_close = True
289+
manager.remove_comm(close_message['content']['comm_id'])
290+
manager.clearup_closed()
291+
cb_print('comm close cb done')
292+
293+
self.comm.on_close(_on_close)
271294

272295
def is_open(self):
273-
return not self.comm._closed
296+
return not (self._ext_close and self.comm._closed)
274297

275298
def on_close(self):
276299
# When the socket is closed, deregister the websocket with
277300
# the FigureManager.
278-
self.comm.close()
301+
cb_print('TAC: in comm on close comm state: ' + repr(self.is_open()))
302+
try:
303+
self.comm.close()
304+
except Exception as e:
305+
cb_print('EXCPT: ' + str(e))
306+
cb_print('TAC: comm is closed: ' + repr(not self.is_open()))
279307

280308
def send_json(self, content):
281309
self.comm.send({'data': json.dumps(content)})
@@ -296,8 +324,11 @@ def on_message(self, message):
296324

297325
# Every message has a "type" and a "figure_id".
298326
message = json.loads(message['content']['data'])
327+
cb_print(message['type'])
299328
if message['type'] == 'closing':
300-
self.on_close()
329+
cb_print(message)
330+
331+
# self.on_close()
301332
elif message['type'] == 'supports_binary':
302333
self.supports_binary = message['value']
303334
else:

lib/matplotlib/backends/web_backend/nbagg_mpl.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ mpl.figure.prototype._init_toolbar = function() {
126126
titlebar.prepend(buttongrp);
127127
}
128128

129+
mpl.figure.prototype._root_extra_style = function(el){
130+
var fig = this
131+
el.on("remove", function(){
132+
fig.send_message('closing', {});
133+
console.log('I HAVE BEEN CALLED')
134+
});
135+
console.log(this)
136+
}
129137

130138
mpl.figure.prototype._canvas_extra_style = function(el){
131139
// this is important to make the div 'focusable

0 commit comments

Comments
 (0)