From f7459b144518810cf64c394fe01c3f51b0b169d9 Mon Sep 17 00:00:00 2001 From: Maarten Breddels Date: Mon, 24 Sep 2018 17:22:16 +0200 Subject: [PATCH 1/2] WIP: reflect update message back, for other front-ends to sync its state (multiuser widgets) --- ipywidgets/widgets/widget.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ipywidgets/widgets/widget.py b/ipywidgets/widgets/widget.py index 9b15de7b4b..ca06166f74 100644 --- a/ipywidgets/widgets/widget.py +++ b/ipywidgets/widgets/widget.py @@ -667,6 +667,10 @@ def _handle_msg(self, msg): if 'buffer_paths' in data: _put_buffers(state, data['buffer_paths'], msg['buffers']) self.set_state(state) + # we send back the state to all other sessions, but only when there are multiple + if msg['metadata'].get('session_count', 1) > 1: + kernel = self.comm.kernel + kernel.session.send(kernel.iopub_socket, 'reflect:comm_msg', content=msg['content'], parent=kernel._parent_header, ident=self.comm.topic) # Handle a state request. elif method == 'request_state': From 6fe3da8562f518dbabad3235b7512334244dcec4 Mon Sep 17 00:00:00 2001 From: Maarten Breddels Date: Tue, 25 Sep 2018 08:58:10 +0200 Subject: [PATCH 2/2] added docs for broadcast/reflect --- ipywidgets/widgets/widget.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ipywidgets/widgets/widget.py b/ipywidgets/widgets/widget.py index ca06166f74..063ccb7f55 100644 --- a/ipywidgets/widgets/widget.py +++ b/ipywidgets/widgets/widget.py @@ -668,6 +668,8 @@ def _handle_msg(self, msg): _put_buffers(state, data['buffer_paths'], msg['buffers']) self.set_state(state) # we send back the state to all other sessions, but only when there are multiple + # this allows all front-ends to sync up to the front-end that caused the state change + # for discussion, see: https://github.com/jupyter/jupyter_client/issues/263 if msg['metadata'].get('session_count', 1) > 1: kernel = self.comm.kernel kernel.session.send(kernel.iopub_socket, 'reflect:comm_msg', content=msg['content'], parent=kernel._parent_header, ident=self.comm.topic)