Always refresh the screen on pop
When going back a screen, always refresh the screen since something may have changed while it was not displayed. Also, refactor the refresh methods to indicate whether something is of interest so that if there is more than one refresh triggering event queued, we still only refresh the screen once (if it is interested). This should correct the problem where if you review a change and go back to the change or project listings, the displayed numbers are incorrect. Change-Id: I97875831c4bd47f5e38992c38302b47809c785d5
This commit is contained in:
parent
9c9f0fe60e
commit
6711e20dc3
@ -212,7 +212,7 @@ class App(object):
|
|||||||
if hasattr(widget, 'title'):
|
if hasattr(widget, 'title'):
|
||||||
self.status.update(title=widget.title)
|
self.status.update(title=widget.title)
|
||||||
self.loop.widget = widget
|
self.loop.widget = widget
|
||||||
self.refresh()
|
self.refresh(force=True)
|
||||||
|
|
||||||
def findChangeList(self):
|
def findChangeList(self):
|
||||||
for widget in reversed(self.screens):
|
for widget in reversed(self.screens):
|
||||||
@ -226,17 +226,21 @@ class App(object):
|
|||||||
widget = self.screens.pop()
|
widget = self.screens.pop()
|
||||||
self.loop.widget = widget
|
self.loop.widget = widget
|
||||||
|
|
||||||
def refresh(self, data=None):
|
def refresh(self, data=None, force=False):
|
||||||
self.status.refresh()
|
self.status.refresh()
|
||||||
widget = self.loop.widget
|
widget = self.loop.widget
|
||||||
while isinstance(widget, urwid.Overlay):
|
while isinstance(widget, urwid.Overlay):
|
||||||
widget = widget.contents[0][0]
|
widget = widget.contents[0][0]
|
||||||
|
interested = force
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
event = self.sync.result_queue.get(0)
|
event = self.sync.result_queue.get(0)
|
||||||
widget.refresh(event)
|
if widget.interested(event):
|
||||||
|
interested = True
|
||||||
except Queue.Empty:
|
except Queue.Empty:
|
||||||
pass
|
pass
|
||||||
|
if interested:
|
||||||
|
widget.refresh()
|
||||||
|
|
||||||
def popup(self, widget,
|
def popup(self, widget,
|
||||||
relative_width=50, relative_height=25,
|
relative_width=50, relative_height=25,
|
||||||
|
@ -502,15 +502,18 @@ class ChangeView(urwid.WidgetWrap):
|
|||||||
if not succeeded:
|
if not succeeded:
|
||||||
raise gertty.view.DisplayError("Git commits not present in local repository")
|
raise gertty.view.DisplayError("Git commits not present in local repository")
|
||||||
|
|
||||||
def refresh(self, event=None):
|
def interested(self, event):
|
||||||
if event and not ((isinstance(event, sync.ChangeAddedEvent) and
|
if not ((isinstance(event, sync.ChangeAddedEvent) and
|
||||||
self.change_key in event.related_change_keys)
|
self.change_key in event.related_change_keys)
|
||||||
or
|
or
|
||||||
(isinstance(event, sync.ChangeUpdatedEvent) and
|
(isinstance(event, sync.ChangeUpdatedEvent) and
|
||||||
self.change_key in event.related_change_keys)):
|
self.change_key in event.related_change_keys)):
|
||||||
self.log.debug("Ignoring refresh change due to event %s" % (event,))
|
self.log.debug("Ignoring refresh change due to event %s" % (event,))
|
||||||
return
|
return False
|
||||||
self.log.debug("Refreshing change due to event %s" % (event,))
|
self.log.debug("Refreshing change due to event %s" % (event,))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def refresh(self):
|
||||||
change_info = []
|
change_info = []
|
||||||
with self.app.db.getSession() as session:
|
with self.app.db.getSession() as session:
|
||||||
change = session.getChange(self.change_key)
|
change = session.getChange(self.change_key)
|
||||||
|
@ -142,20 +142,22 @@ class ChangeListView(urwid.WidgetWrap):
|
|||||||
self._w.contents.append((self.listbox, ('weight', 1)))
|
self._w.contents.append((self.listbox, ('weight', 1)))
|
||||||
self._w.set_focus(3)
|
self._w.set_focus(3)
|
||||||
|
|
||||||
def refresh(self, event=None):
|
def interested(self, event):
|
||||||
if event and not ((self.project_key is not None and
|
if not ((self.project_key is not None and
|
||||||
isinstance(event, sync.ChangeAddedEvent) and
|
isinstance(event, sync.ChangeAddedEvent) and
|
||||||
self.project_key == event.project_key)
|
self.project_key == event.project_key)
|
||||||
or
|
or
|
||||||
(self.project_key is None and
|
(self.project_key is None and
|
||||||
isinstance(event, sync.ChangeAddedEvent))
|
isinstance(event, sync.ChangeAddedEvent))
|
||||||
or
|
or
|
||||||
(isinstance(event, sync.ChangeUpdatedEvent) and
|
(isinstance(event, sync.ChangeUpdatedEvent) and
|
||||||
event.change_key in self.change_rows.keys())):
|
event.change_key in self.change_rows.keys())):
|
||||||
self.log.debug("Ignoring refresh change list due to event %s" % (event,))
|
self.log.debug("Ignoring refresh change list due to event %s" % (event,))
|
||||||
return
|
return False
|
||||||
self.log.debug("Refreshing change list due to event %s" % (event,))
|
self.log.debug("Refreshing change list due to event %s" % (event,))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def refresh(self):
|
||||||
unseen_keys = set(self.change_rows.keys())
|
unseen_keys = set(self.change_rows.keys())
|
||||||
with self.app.db.getSession() as session:
|
with self.app.db.getSession() as session:
|
||||||
lst = session.getChanges(self.query, self.unreviewed,
|
lst = session.getChanges(self.query, self.unreviewed,
|
||||||
|
@ -341,17 +341,20 @@ class BaseDiffView(urwid.WidgetWrap):
|
|||||||
def makeFileHeader(self, diff, comment_lists):
|
def makeFileHeader(self, diff, comment_lists):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def refresh(self, event=None):
|
def interested(self, event):
|
||||||
if event and not ((isinstance(event, sync.ChangeAddedEvent) and
|
if not ((isinstance(event, sync.ChangeAddedEvent) and
|
||||||
self.change_key in event.related_change_keys)
|
self.change_key in event.related_change_keys)
|
||||||
or
|
or
|
||||||
(isinstance(event, sync.ChangeUpdatedEvent) and
|
(isinstance(event, sync.ChangeUpdatedEvent) and
|
||||||
self.change_key in event.related_change_keys)):
|
self.change_key in event.related_change_keys)):
|
||||||
#self.log.debug("Ignoring refresh diff due to event %s" % (event,))
|
#self.log.debug("Ignoring refresh diff due to event %s" % (event,))
|
||||||
return
|
return False
|
||||||
#self.log.debug("Refreshing diff due to event %s" % (event,))
|
#self.log.debug("Refreshing diff due to event %s" % (event,))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def refresh(self, event=None):
|
||||||
#TODO
|
#TODO
|
||||||
return
|
pass
|
||||||
|
|
||||||
def keypress(self, size, key):
|
def keypress(self, size, key):
|
||||||
old_focus = self.listbox.focus
|
old_focus = self.listbox.focus
|
||||||
|
@ -97,17 +97,19 @@ class ProjectListView(urwid.WidgetWrap):
|
|||||||
self._w.contents.append((self.listbox, ('weight', 1)))
|
self._w.contents.append((self.listbox, ('weight', 1)))
|
||||||
self._w.set_focus(3)
|
self._w.set_focus(3)
|
||||||
|
|
||||||
def refresh(self, event=None):
|
def interested(self, event):
|
||||||
if event and not (isinstance(event, sync.ProjectAddedEvent)
|
if not (isinstance(event, sync.ProjectAddedEvent)
|
||||||
or
|
or
|
||||||
isinstance(event, sync.ChangeAddedEvent)
|
isinstance(event, sync.ChangeAddedEvent)
|
||||||
or
|
or
|
||||||
(isinstance(event, sync.ChangeUpdatedEvent) and
|
(isinstance(event, sync.ChangeUpdatedEvent) and
|
||||||
(event.status_changed or event.review_flag_changed))):
|
(event.status_changed or event.review_flag_changed))):
|
||||||
self.log.debug("Ignoring refresh project list due to event %s" % (event,))
|
self.log.debug("Ignoring refresh project list due to event %s" % (event,))
|
||||||
return
|
return False
|
||||||
self.log.debug("Refreshing project list due to event %s" % (event,))
|
self.log.debug("Refreshing project list due to event %s" % (event,))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def refresh(self):
|
||||||
if self.subscribed:
|
if self.subscribed:
|
||||||
self.title = u'Subscribed projects'
|
self.title = u'Subscribed projects'
|
||||||
if self.unreviewed:
|
if self.unreviewed:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user