~enli/lernid/links-in-default-browser

« back to all changes in this revision

Viewing changes to lernid/widgets/IrcWidget.py

  • Committer: Michael Budde
  • Date: 2010-03-06 14:30:14 UTC
  • mfrom: (193.2.5 bugfix-lp-530821)
  • Revision ID: mbudde@gmail.com-20100306143014-rwqcweouo9ped5a0
Draw red line above new messages when Lernid have been hidden. (LP: #530821)

Merge of lp:~kkapp/lernid/bugfix-lp-530821 by Alex Kapranoff.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
import gtk
21
21
import gobject
22
 
import gtkmozembed
23
22
import pango
24
23
import time
25
24
import re
28
27
from lernid.CouchDBPreferences import Preferences
29
28
 
30
29
from lernid import IrcBackend
31
 
from lernid.LernidOptions import Options
32
 
from lernid.Statusbar import Statusbar
33
30
 
34
31
class IrcWidget(Widget):
35
32
 
38
35
 
39
36
    def do_event_connect(self, event_man, event):
40
37
        self._browser = event_man.get_widget_by_name('browser')
 
38
        self.get_toplevel().connect('focus-out-event', self._focus_out)
41
39
 
42
40
    def _init_hyperlinks(self):
43
41
        hyperlink_tag = self._buffer.create_tag('hyperlink', foreground='#0000ff',
44
42
                                                underline=pango.UNDERLINE_SINGLE)
45
43
        self._buffer.connect('mark-set', self._mark_set, hyperlink_tag)
46
44
        self._textview.connect('motion-notify-event', self._motion_notify, hyperlink_tag)
 
45
        self._textview.connect('expose-event', self._draw_red_line)
 
46
 
 
47
        self._red_line_mark = self._buffer.create_mark(None, self._buffer.get_end_iter(), True)
 
48
        self._visited_since_last_update = False
47
49
 
48
50
    def _append_to_buffer(self, text, sender=None, msgtype=None):
49
51
        iend = self._buffer.get_end_iter()
 
52
        if self._visited_since_last_update and not self.get_toplevel().is_active():
 
53
            self._buffer.move_mark(self._red_line_mark, iend)
 
54
            self._textview.queue_draw()
 
55
            self._visited_since_last_update = False
50
56
        if Preferences.get('show_irc_time'):
51
57
            self._buffer.insert(iend, '\n[{0}] '.format(time.strftime(_('%H:%M'))))
52
58
        else:
65
71
                self._buffer.insert_with_tags_by_name(iend, text, 'highlight')
66
72
            else:
67
73
                self._buffer.insert(iend, text)
 
74
 
68
75
        for url in re.finditer(r"https?://\S+", unicode(text, 'utf-8')):
69
76
            self._buffer.apply_tag_by_name('hyperlink',
70
77
                self._buffer.get_iter_at_offset(start_pos + url.start()),
71
78
                self._buffer.get_iter_at_offset(start_pos + url.end()))
 
79
 
72
80
        self._at_bottom = (self._adjust.value == self._adjust.upper -
73
81
                           self._adjust.page_size)
74
82
 
88
96
        else:
89
97
            text_view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(self.regular_cursor)
90
98
        return False
 
99
 
 
100
    def _focus_out(self, widget, event):
 
101
        self._visited_since_last_update = True
 
102
        return False
 
103
 
 
104
    def _draw_red_line(self, widget, event):
 
105
        if self._buffer.get_char_count() > 0:
 
106
            iter = self._buffer.get_iter_at_mark(self._red_line_mark)
 
107
            if (iter.get_offset() > 0):
 
108
                top, h = self._textview.get_line_yrange(iter)
 
109
                w_x, w_y = self._textview.buffer_to_window_coords(gtk.TEXT_WINDOW_TEXT, 0, top + h)
 
110
                win = self._textview.get_window(gtk.TEXT_WINDOW_TEXT)
 
111
                gc = gtk.gdk.GC(win)
 
112
                gc.set_rgb_fg_color(gtk.gdk.Color('darkred'))
 
113
                win.draw_line(gc, 0, w_y, (win.get_size())[0], w_y)