Change to timeout, rather than idle_add, and dereference toolbars in order they were added

This commit is contained in:
prculley 2021-04-28 10:30:26 -05:00 committed by John Ralls
parent 3c1c21163c
commit f91d3e94ab

View File

@ -134,8 +134,8 @@ class UIManager():
self.et_xml = ET.fromstring(initial_xml) self.et_xml = ET.fromstring(initial_xml)
self.builder = None self.builder = None
self.toolbar = None self.toolbar = None
self.old_toolbar = None # holds previous toolbar until Gtk is idle self.old_toolbar = [] # holds previous toolbars until Gtk is idle
self.old_toolbar_items = None self.old_toolbar_items = []
self.action_groups = [] # current list of action groups self.action_groups = [] # current list of action groups
self.show_groups = [] # groups to show at the moment self.show_groups = [] # groups to show at the moment
self.accel_dict = {} # used to store accel overrides from file self.accel_dict = {} # used to store accel overrides from file
@ -244,11 +244,9 @@ class UIManager():
# the following updates the toolbar from the new builder # the following updates the toolbar from the new builder
toolbar_parent = toolbar.get_parent() toolbar_parent = toolbar.get_parent()
tb_show = toolbar.get_visible() tb_show = toolbar.get_visible()
if not self.old_toolbar: self.old_toolbar.append(toolbar)
self.old_toolbar = toolbar self.old_toolbar_items.append(toolbar.get_children())
self.old_toolbar_items = toolbar.get_children() print("Saved %d toolbars" % len(self.old_toolbar))
else:
print("Problem: multiple Toolbar updates before idle")
toolbar_parent.remove(toolbar) toolbar_parent.remove(toolbar)
toolbar = self.builder.get_object("ToolBar") # new toolbar toolbar = self.builder.get_object("ToolBar") # new toolbar
if config.get('interface.toolbar-text'): if config.get('interface.toolbar-text'):
@ -258,16 +256,18 @@ class UIManager():
toolbar.show_all() toolbar.show_all()
else: else:
toolbar.hide() toolbar.hide()
GLib.idle_add(self.delete_old_toolbar) GLib.timeout_add_seconds(10, self.delete_old_toolbar)
#print('*** Update ui') #print('*** Update ui')
def delete_old_toolbar(self): def delete_old_toolbar(self):
""" This is used to finish removal of the old toolbar after Gtk is """ This is used to finish removal of the old toolbar after Gtk has
idle. To avoid an issue with the toolbar being removed before all had a (long) chance to finish its work.
To avoid an issue with the toolbar being removed before all
references were removed. references were removed.
""" """
self.old_toolbar = None print("Removing first of %d retained toolbars" % len(self.old_toolbar))
self.old_toolbar_items = None self.old_toolbar.pop(0)
self.old_toolbar_items.pop(0)
return False return False
def add_ui_from_string(self, changexml): def add_ui_from_string(self, changexml):