Only show the XEP-0184 warning if the message has not been received

in 2 seconds.
This commit is contained in:
js 2008-07-19 11:57:03 +00:00
parent 8e9b2d1781
commit ed48bffa08
1 changed files with 28 additions and 17 deletions

View File

@ -43,6 +43,9 @@ from common.fuzzyclock import FuzzyClock
from htmltextview import HtmlTextView
from common.exceptions import GajimGeneralException
NOT_SHOWN = 0
ALREADY_RECEIVED = 1
SHOWN = 2
def is_selection_modified(mark):
name = mark.get_name()
@ -178,6 +181,7 @@ class ConversationTextview:
self.images = []
self.image_cache = {}
self.xep0184_marks = {}
self.xep0184_shown = {}
# It's True when we scroll in the code, so we can detect scroll from user
self.auto_scrolling = False
@ -400,22 +404,25 @@ class ConversationTextview:
pass
buffer = self.tv.get_buffer()
buffer.begin_user_action()
end_iter = buffer.get_end_iter()
buffer.insert(end_iter, ' ')
buffer.insert_pixbuf(end_iter,
ConversationTextview.XEP0184_WARNING_PIXBUF)
end_iter = buffer.get_end_iter();
before_img_iter = end_iter.copy()
# XXX: Is there a nicer way?
before_img_iter.backward_char();
before_img_iter.backward_char();
self.xep0184_marks[id] = buffer.create_mark(None,
buffer.get_end_iter(), left_gravity=True)
self.xep0184_shown[id] = NOT_SHOWN
def show_it():
if self.xep0184_shown[id] == ALREADY_RECEIVED:
return False
end_iter = buffer.get_iter_at_mark(
self.xep0184_marks[id])
buffer.insert(end_iter, ' ')
buffer.insert_pixbuf(end_iter,
ConversationTextview.XEP0184_WARNING_PIXBUF)
self.xep0184_shown[id] = SHOWN
return False
gobject.timeout_add(2000, show_it)
buffer.end_user_action()
@ -426,16 +433,19 @@ class ConversationTextview:
except KeyError:
return
buffer = self.tv.get_buffer()
if self.xep0184_shown[id] == NOT_SHOWN:
self.xep0184_shown[id] = ALREADY_RECEIVED
return
buffer = self.tv.get_buffer()
buffer.begin_user_action()
end_iter = buffer.get_iter_at_mark(self.xep0184_marks[id])
begin_iter = buffer.get_iter_at_mark(self.xep0184_marks[id])
begin_iter = end_iter.copy()
end_iter = begin_iter.copy()
# XXX: Is there a nicer way?
begin_iter.backward_char();
begin_iter.backward_char();
end_iter.forward_char();
end_iter.forward_char();
buffer.delete(begin_iter, end_iter)
buffer.delete_mark(self.xep0184_marks[id])
@ -443,6 +453,7 @@ class ConversationTextview:
buffer.end_user_action()
self.xep0184_marks[id] = None
del self.xep0184_shown[id]
def show_focus_out_line(self):
if not self.allow_focus_out_line: