diff --git a/src/dialogs.py b/src/dialogs.py
index 8b071cbdf..b791b338b 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -622,17 +622,12 @@ class StatusTable:
if status != '':
if gtk.gtk_version < (2, 6, 0) or gtk.pygtk_version < (2, 6, 0):
# FIXME: check and do the same if we have more than one \n
- status = self.strip_text(status, 50)
+ status = gtkgui_helpers.reduce_chars_newlines(status, 50, 1)
+ else:
+ status = gtkgui_helpers.reduce_chars_newlines(status, 0, 1)
str_status += ' - ' + status
return gtkgui_helpers.escape_for_pango_markup(str_status)
- # fix "too long status make the tooltip large than the screen" problem
- def strip_text(self, text, max_length):
- text = text.strip()
- if len(text) > max_length:
- text = text[:max_length - 3] + '...'
- return text
-
def add_status_row(self, file_path, show, str_status):
''' appends a new row with status icon to the table '''
self.current_row += 1
@@ -706,14 +701,17 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
iconset = 'sun'
file_path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16')
for acct in accounts:
- mesage = gtkgui_helpers.escape_for_pango_markup(acct['message'])
- mesage = self.strip_text(mesage, 50)
+ message = gtkgui_helpers.reduce_chars_newlines(acct['message'], 50, 1)
+ message = gtkgui_helpers.escape_for_pango_markup(message)
self.add_status_row(file_path, acct['show'], '' +
gtkgui_helpers.escape_for_pango_markup(acct['name']) + ''
- + ' - ' + mesage)
+ + ' - ' + message)
elif len(accounts) == 1:
- text = _('Gajim - %s') % accounts[0]['status_line']
+ message = gtkgui_helpers.reduce_chars_newlines(accounts[0]['status_line'],
+ 50, 1)
+ message = gtkgui_helpers.escape_for_pango_markup(message)
+ text = _('Gajim - %s') % message
else:
text = _('Gajim - %s') % helpers.get_uf_show('offline')
self.text_lable.set_markup(text)
diff --git a/src/groupchat_window.py b/src/groupchat_window.py
index b7d8e9a73..1a665b16b 100644
--- a/src/groupchat_window.py
+++ b/src/groupchat_window.py
@@ -388,15 +388,9 @@ class GroupchatWindow(chat.Chat):
full_subject = None
if gtk.gtk_version < (2, 6, 0) or gtk.pygtk_version < (2, 6, 0):
- # long subject makes window bigger than the screen
- def _cut_if_long(str):
- if len(str) > 80:
- str = str[:77] + '...'
- return str
- if len(subject) > 80:
- subjects = map(lambda e: _cut_if_long(e), subject.split('\n'))
- subject = reduce(lambda e, e1: e + '\n' + e1, subjects)
-
+ subject = gtkgui_helpers.reduce_chars_newlines(subject, 80, 2)
+ else:
+ subject = gtkgui_helpers.reduce_chars_newlines(subject, 0, 2)
subject = gtkgui_helpers.escape_for_pango_markup(subject)
name_label.set_markup(
'%s\n%s' % (room_jid, subject))
diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py
index 022d5b6d6..e43fe9fba 100644
--- a/src/gtkgui_helpers.py
+++ b/src/gtkgui_helpers.py
@@ -28,7 +28,34 @@ i18n.init()
_ = i18n._
from common import gajim
-
+def reduce_chars_newlines(text, max_chars = 0, max_lines = 0,
+ widget = None):
+ ''' Cut the chars after 'max_chars' on each line
+ and show only the first 'max_lines'. If there is more text
+ to be shown, display the whole text in tooltip on 'widget'
+ If any of the params is not present(None or 0) the action
+ on it is not performed
+ '''
+ def _cut_if_long(str):
+ if len(str) > max_chars:
+ str = str[:max_chars - 3] + '...'
+ return str
+
+ if max_lines == 0:
+ lines = text.split('\n')
+ else:
+ lines = text.split('\n', max_lines)[:max_lines]
+ if max_chars > 0:
+ if lines:
+ lines = map(lambda e: _cut_if_long(e), lines)
+ if lines:
+ reduced_text = reduce(lambda e, e1: e + '\n' + e1, lines)
+ else:
+ reduced_text = ''
+ if reduced_text != text and widget is not None:
+ pass # FIXME show tooltip
+ return reduced_text
+
def convert_bytes(string):
suffix = ''
bytes = int(string)
diff --git a/src/tabbed_chat_window.py b/src/tabbed_chat_window.py
index a1cde62f4..a79be5ada 100644
--- a/src/tabbed_chat_window.py
+++ b/src/tabbed_chat_window.py
@@ -133,16 +133,11 @@ class TabbedChatWindow(chat.Chat):
#FIXME: when gtk2.4 is OOOOLD do it via glade2.10+
if gtk.pygtk_version >= (2, 6, 0) and gtk.gtk_version >= (2, 6, 0):
banner_name_label.set_ellipsize(pango.ELLIPSIZE_END)
+ status = gtkgui_helpers.reduce_chars_newlines(status, 0, 2)
#FIXME: remove me when gtk24 is OLD
- elif status is not None and len(status) > 50:
- def _cut_if_long(str):
- if len(str) > 50:
- str = str[:47] + '...'
- return str
- if len(status) > 50:
- status = map(lambda e: _cut_if_long(e), status.split('\n'))
- status = reduce(lambda e, e1: e + '\n' + e1, status)
-
+ elif status is not None:
+ status = gtkgui_helpers.reduce_chars_newlines(status, 50, 2)
+
status = gtkgui_helpers.escape_for_pango_markup(status)
#FIXME: uncomment me when we support sending messages to specific resource