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