Merge lp:~kkapp/lernid/bugfix-lp-530821 into lp:lernid

Status: Merged
Approved by: Michael Budde
Approved revision: 198
Merged at revision: not available
Proposed branch: lp:~kkapp/lernid/bugfix-lp-530821
Merge into: lp:lernid
Diff against target: 92 lines (+28/-5)
2 files modified
bin/lernid (+2/-2)
lernid/widgets/IrcWidget.py (+26/-3)
To merge this branch: bzr merge lp:~kkapp/lernid/bugfix-lp-530821
Reviewer Review Type Date Requested Status
Michael Budde Approve
Review via email: mp+20713@code.launchpad.net

Description of the change

Add xchat-like thin red line above new data which arrived while window was in background.

To post a comment you must log in.
Revision history for this message
Алексей Капранов (Alex Kapranoff) (kkapp) wrote :

I'd like people to test it a little.

Testing things which depend on focus in/out is somewhat non-trivial so I might miss something.

Revision history for this message
Алексей Капранов (Alex Kapranoff) (kkapp) wrote :

I tested it more during today's sessions of Opportunistic Week. Works like a charm.

Revision history for this message
Michael Budde (mbudde) wrote :

Looks good. Thanks.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/lernid'
2--- bin/lernid 2010-03-04 12:40:09 +0000
3+++ bin/lernid 2010-03-05 00:48:19 +0000
4@@ -68,8 +68,8 @@
5
6 def __init__(self):
7 """__init__ - This function is typically not called directly.
8- Creation a LernidWindow requires redeading the associated ui
9- file and parsing the ui definition extrenally,
10+ Creation a LernidWindow requires rereading the associated ui
11+ file and parsing the ui definition externally,
12 and then calling LernidWindow.finish_initializing().
13
14 Use the convenience function NewLernidWindow to create
15
16=== modified file 'lernid/widgets/IrcWidget.py'
17--- lernid/widgets/IrcWidget.py 2010-03-03 18:06:49 +0000
18+++ lernid/widgets/IrcWidget.py 2010-03-05 00:48:19 +0000
19@@ -19,7 +19,6 @@
20
21 import gtk
22 import gobject
23-import gtkmozembed
24 import pango
25 import time
26 import re
27@@ -28,8 +27,6 @@
28 from lernid.CouchDBPreferences import Preferences
29
30 from lernid import IrcBackend
31-from lernid.LernidOptions import Options
32-from lernid.Statusbar import Statusbar
33
34 class IrcWidget(Widget):
35
36@@ -38,15 +35,24 @@
37
38 def do_event_connect(self, event_man, event):
39 self._browser = event_man.get_widget_by_name('browser')
40+ self.get_toplevel().connect('focus-out-event', self._focus_out)
41
42 def _init_hyperlinks(self):
43 hyperlink_tag = self._buffer.create_tag('hyperlink', foreground='#0000ff',
44 underline=pango.UNDERLINE_SINGLE)
45 self._buffer.connect('mark-set', self._mark_set, hyperlink_tag)
46 self._textview.connect('motion-notify-event', self._motion_notify, hyperlink_tag)
47+ self._textview.connect('expose-event', self._draw_red_line)
48+
49+ self._red_line_mark = self._buffer.create_mark(None, self._buffer.get_end_iter(), True)
50+ self._visited_since_last_update = False
51
52 def _append_to_buffer(self, text, sender=None, msgtype=None):
53 iend = self._buffer.get_end_iter()
54+ if self._visited_since_last_update and not self.get_toplevel().is_active():
55+ self._buffer.move_mark(self._red_line_mark, iend)
56+ self._textview.queue_draw()
57+ self._visited_since_last_update = False
58 if Preferences.get('show_irc_time'):
59 self._buffer.insert(iend, '\n[{0}] '.format(time.strftime(_('%H:%M'))))
60 else:
61@@ -65,10 +71,12 @@
62 self._buffer.insert_with_tags_by_name(iend, text, 'highlight')
63 else:
64 self._buffer.insert(iend, text)
65+
66 for url in re.finditer(r"https?://\S+", unicode(text, 'utf-8')):
67 self._buffer.apply_tag_by_name('hyperlink',
68 self._buffer.get_iter_at_offset(start_pos + url.start()),
69 self._buffer.get_iter_at_offset(start_pos + url.end()))
70+
71 self._at_bottom = (self._adjust.value == self._adjust.upper -
72 self._adjust.page_size)
73
74@@ -88,3 +96,18 @@
75 else:
76 text_view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(self.regular_cursor)
77 return False
78+
79+ def _focus_out(self, widget, event):
80+ self._visited_since_last_update = True
81+ return False
82+
83+ def _draw_red_line(self, widget, event):
84+ if self._buffer.get_char_count() > 0:
85+ iter = self._buffer.get_iter_at_mark(self._red_line_mark)
86+ if (iter.get_offset() > 0):
87+ top, h = self._textview.get_line_yrange(iter)
88+ w_x, w_y = self._textview.buffer_to_window_coords(gtk.TEXT_WINDOW_TEXT, 0, top + h)
89+ win = self._textview.get_window(gtk.TEXT_WINDOW_TEXT)
90+ gc = gtk.gdk.GC(win)
91+ gc.set_rgb_fg_color(gtk.gdk.Color('darkred'))
92+ win.draw_line(gc, 0, w_y, (win.get_size())[0], w_y)

Subscribers

People subscribed via source and target branches