diff --git a/frontends/src/primitivus/chat.py b/frontends/src/primitivus/chat.py index b2053cae..858f93ce 100644 --- a/frontends/src/primitivus/chat.py +++ b/frontends/src/primitivus/chat.py @@ -81,7 +81,7 @@ class MessageWidget(urwid.WidgetWrap): @message.setter def message(self, value): self.mess_data.message = {'':value} - self._w.set_text(self.markup) + self.redraw() @property def type(self): @@ -90,6 +90,9 @@ class MessageWidget(urwid.WidgetWrap): except AttributeError: return C.MESS_TYPE_INFO + def redraw(self): + self._w.set_text(self.markup) + def selectable(self): return True @@ -241,12 +244,10 @@ class Chat(PrimitivusWidget, quick_chat.QuickChat): self._appendOccupantsPanel() elif key == a_key['TIMESTAMP_HIDE']: # user wants to (un)hide timestamp self.show_timestamp = not self.show_timestamp - for wid in self.mess_walker: - wid._invalidate() + self.redraw() elif key == a_key['SHORT_NICKNAME']: # user wants to (not) use short nick self.show_short_nick = not self.show_short_nick - for wid in self.mess_walker: - wid._invalidate() + self.redraw() elif key == a_key['SUBJECT_SWITCH']: # user wants to (un)hide group's subject or change its apperance if self.subject: self.show_title = (self.show_title + 1) % 3 @@ -313,9 +314,7 @@ class Chat(PrimitivusWidget, quick_chat.QuickChat): lang = args[0][5:].strip() self.filters.append(lambda mess_data: lang in mess_data.message) - del self.mess_walker[:] - for message in self.messages.itervalues(): - self.appendMessage(message) + self.printMessages() def presenceListener(self, entity, show, priority, statuses, profile): """Update entity's presence status @@ -476,6 +475,24 @@ class Chat(PrimitivusWidget, quick_chat.QuickChat): ## Messages + def printMessages(self, clear=True): + """generate message widgets + + @param clear(bool): clear message before printing if true + """ + if clear: + del self.mess_walker[:] + for message in self.messages.itervalues(): + self.appendMessage(message) + + def redraw(self): + """redraw all messages""" + for w in self.mess_walker: + try: + w.redraw() + except AttributeError: + pass + def updateHistory(self, size=C.HISTORY_LIMIT_DEFAULT, search='', profile='@NONE@'): del self.mess_walker[:] if search: @@ -485,8 +502,7 @@ class Chat(PrimitivusWidget, quick_chat.QuickChat): def _onHistoryPrinted(self): """Refresh or scroll down the focus after the history is printed""" - for message in self.messages.itervalues(): - self.appendMessage(message) + self.printMessages(clear=False) super(Chat, self)._onHistoryPrinted() def onPrivateCreated(self, widget):