diff --git a/IPython/html/widgets/widget.py b/IPython/html/widgets/widget.py
index 7b109b5..3c2cb74 100644
--- a/IPython/html/widgets/widget.py
+++ b/IPython/html/widgets/widget.py
@@ -176,13 +176,15 @@ class Widget(LoggingConfigurable):
self._comm = None
- def _handle_displayed(self, view_name):
+ def _handle_displayed(self, view_name, parent=None):
"""Called when a view has been displayed for this widget instance
Parameters
----------
view_name: unicode
- Name of the view that was displayed."""
+ Name of the view that was displayed.
+ parent: Widget instance [optional]
+ Widget that this widget should be displayed as a child of."""
for handler in self._display_callbacks:
if callable(handler):
argspec = inspect.getargspec(handler)
@@ -199,6 +201,8 @@ class Widget(LoggingConfigurable):
handler(self)
elif nargs == 2:
handler(self, view_name)
+ elif nargs == 3:
+ handler(self, view_name, parent)
else:
raise TypeError('Widget display callback must ' \
'accept 0-2 arguments, not %d.' % nargs)
@@ -371,6 +375,7 @@ class Widget(LoggingConfigurable):
- callback()
- callback(sender)
- callback(sender, view_name)
+ - callback(sender, view_name, parent)
remove: bool
True if the callback should be unregistered."""
if remove and callback in self._display_callbacks:
@@ -403,12 +408,13 @@ class Widget(LoggingConfigurable):
# Show view.
if self.parent is None or self.parent._comm is None:
self._comm.send({"method": "display", "view_name": view_name})
+ self._handle_displayed(view_name)
else:
self._comm.send({"method": "display",
"view_name": view_name,
"parent": self.parent._comm.comm_id})
+ self._handle_displayed(view_name, self.parent)
self._displayed = True
- self._handle_displayed(view_name)
# Now display children if any.
for child in self._children: