diff --git a/examples/toolbar.py b/examples/toolbar.py index e4d24dfd..36624c03 100644 --- a/examples/toolbar.py +++ b/examples/toolbar.py @@ -9,23 +9,27 @@ window.add(box) toolbar = Toolbar() box.pack_start(toolbar, False) -tollbarbutton_1 = ToolbarButton(toolbar, gtk.Button('1'), +tollbarbutton_1 = ToolbarButton(toolbar, gtk.Button('sub-widget #1'), icon_name='computer-xo', tooltip='foo') toolbar.top.insert(tollbarbutton_1, -1) toolbar.top.insert(gtk.SeparatorToolItem(), -1) -tollbarbutton_2 = ToolbarButton(toolbar, gtk.Button('1'), +tollbarbutton_2 = ToolbarButton(toolbar, gtk.Button('sub-widget #2'), icon_name='button_cancel', tooltip='foo') toolbar.top.insert(tollbarbutton_2, -1) toolbar.top.insert(gtk.SeparatorToolItem(), -1) -tollbarbutton_3 = ToolbarButton(toolbar, gtk.Button('3'), +def del_cb(widget): + toolbar.top.remove(tollbarbutton_3) +del_b = gtk.Button('delete sub-widget #3') +del_b.connect('clicked', del_cb) +tollbarbutton_3 = ToolbarButton(toolbar, del_b, icon_name='activity-journal', - tooltip='foo') + tooltip='del') toolbar.top.insert(tollbarbutton_3, -1) window.show_all() diff --git a/src/sugar/graphics/toolbar.py b/src/sugar/graphics/toolbar.py index eb267266..6423fa12 100644 --- a/src/sugar/graphics/toolbar.py +++ b/src/sugar/graphics/toolbar.py @@ -50,7 +50,7 @@ class ToolbarButton(ToolButton): return if value: expanded = self._bar._expanded_page() - if expanded: + if expanded and expanded._toolitem.window: expanded._toolitem.window.invalidate_rect(None, True) self._page._toolitem_alloc = self.allocation self._bar._expand_page(self._page) @@ -104,8 +104,15 @@ class Toolbar(gtk.VBox): self._notebook.connect('notify::page', lambda notebook, pspec: self.emit('current-toolbar-changed', notebook.props.page)) + self._bar.connect('remove', self._remove_cb) + top = property(lambda self: self._bar) + def _remove_cb(self, sender, widget): + if not isinstance(widget, ToolbarButton): + return + widget.expanded = False + def _remove_page(self, page): page = self._notebook.page_num(page) self._notebook.remove_page(page)