Changeset 8417

Show
Ignore:
Timestamp:
07/21/07 16:58:56 (18 months ago)
Author:
asterix
Message:

add a limit to the number of lines displayed in conversation textview.

Location:
trunk/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/common/config.py

    r8386 r8417  
    229229                'use_latex': [opt_bool, False, _('If True, Gajim will convert string between $$ and $$ to an image using dvips and convert before insterting it in chat window.')], 
    230230                'change_status_window_timeout': [opt_int, 15, _('Time of inactivity needed before the change status window closes down.')], 
     231                'max_conversation_lines': [opt_int, 500, _('Maximum number of lines that are printed in conversations. Oldest lines are cleared.')], 
    231232        } 
    232233 
  • trunk/src/conversation_textview.py

    r8114 r8417  
    2727import dialogs 
    2828import locale 
     29import Queue 
    2930 
    3031import gtkgui_helpers 
     
    141142 
    142143                buffer.create_tag('focus-out-line', justification = gtk.JUSTIFY_CENTER) 
     144 
     145                size = gajim.config.get('max_conversation_lines') 
     146                size = 2 * size - 1 
     147                self.marks_queue = Queue.Queue(size) 
    143148 
    144149                self.allow_focus_out_line = True 
     
    316321                start, end = buffer.get_bounds() 
    317322                buffer.delete(start, end) 
     323                size = gajim.config.get('max_conversation_lines') 
     324                size = 2 * size - 1 
     325                self.marks_queue = Queue.Queue(size) 
    318326                self.focus_out_end_iter_offset = None 
    319327 
     
    768776                buffer = self.tv.get_buffer() 
    769777                buffer.begin_user_action() 
     778                if self.marks_queue.full(): 
     779                        # remove oldest line 
     780                        m1 = self.marks_queue.get() 
     781                        m2 = self.marks_queue.get() 
     782                        i1 = buffer.get_iter_at_mark(m1) 
     783                        i2 = buffer.get_iter_at_mark(m2) 
     784                        buffer.delete(i1, i2) 
     785                        buffer.delete_mark(m1) 
    770786                end_iter = buffer.get_end_iter() 
    771787                at_the_end = False 
     
    773789                        at_the_end = True 
    774790 
     791                # Create one mark and add it to queue once if it's the first line 
     792                # else twice (one for end bound, one for start bound) 
     793                mark = None 
    775794                if buffer.get_char_count() > 0: 
    776795                        buffer.insert_with_tags_by_name(end_iter, '\n', 'eol') 
     796                        mark = buffer.create_mark(None, end_iter, left_gravity=True) 
     797                        self.marks_queue.put(mark) 
     798                if not mark: 
     799                        mark = buffer.create_mark(None, end_iter, left_gravity=True) 
     800                self.marks_queue.put(mark) 
    777801                if kind == 'incoming_queue': 
    778802                        kind = 'incoming'