Fix updating flags on threaded changes

If a flag (hold, mark, starred) was changed, the row would lose
the threading indication.  Correct this.

Change-Id: I91aa6c2df4164c8e539e8bd1cf5bd703ddd5e58b
This commit is contained in:
James E. Blair 2015-05-23 15:36:31 -07:00
parent 94bfcd13f4
commit 2b302321ba
1 changed files with 13 additions and 9 deletions

View File

@ -62,11 +62,12 @@ class ChangeRow(urwid.Button):
def selectable(self):
return True
def __init__(self, app, change, categories, project=False, owner=False,
updated=False, callback=None):
def __init__(self, app, change, prefix, categories, project=False,
owner=False, updated=False, callback=None):
super(ChangeRow, self).__init__('', on_press=callback, user_data=change.key)
self.app = app
self.change_key = change.key
self.prefix = prefix
self.subject = urwid.Text(u'', wrap='clip')
self.number = urwid.Text(u'')
self.updated = urwid.Text(u'')
@ -91,10 +92,7 @@ class ChangeRow(urwid.Button):
style = 'reviewed-change'
else:
style = 'unreviewed-change'
if hasattr(change, '_subject'):
subject = change._subject
else:
subject = change.subject
subject = '%s%s' % (self.prefix, change.subject)
flag = ' '
if change.starred:
flag = '*'
@ -253,7 +251,9 @@ class ChangeListView(urwid.WidgetWrap):
if self.reverse:
change_list.reverse()
if self.app.config.thread_changes:
change_list = self._threadChanges(change_list)
change_list, prefixes = self._threadChanges(change_list)
else:
prefixes = {}
new_rows = []
if len(self.listbox.body):
focus_pos = self.listbox.focus_position
@ -264,7 +264,9 @@ class ChangeListView(urwid.WidgetWrap):
for change in change_list:
row = self.change_rows.get(change.key)
if not row:
row = ChangeRow(self.app, change, self.categories,
row = ChangeRow(self.app, change,
prefixes.get(change.key),
self.categories,
self.display_project,
self.display_owner,
self.display_updated,
@ -290,6 +292,7 @@ class ChangeListView(urwid.WidgetWrap):
def _threadChanges(self, changes):
ret = []
prefixes = {}
stack = ThreadStack()
children = {}
commits = {}
@ -337,6 +340,7 @@ class ChangeListView(urwid.WidgetWrap):
prefix += u' '
subject = '%s%s' % (prefix, change.subject)
change._subject = subject
prefixes[change.key] = prefix
ret.append(change)
if change in children:
stack.push(change, children[change])
@ -344,7 +348,7 @@ class ChangeListView(urwid.WidgetWrap):
if (not change) and orphans:
change = orphans.pop(0)
assert len(ret) == len(changes)
return ret
return (ret, prefixes)
def clearChangeList(self):
for key, value in self.change_rows.iteritems():