From c7a22fc14fd9803493ece8786b7c4ed8053b7af6 Mon Sep 17 00:00:00 2001 From: lovetox <philipp@hoerist.com> Date: Fri, 30 Apr 2021 14:05:20 +0200 Subject: [PATCH] Add Links to MessageLabel --- gajim/common/styling.py | 17 ++++++++++++----- gajim/gtk/conversation/plain_widget.py | 12 +++++++++--- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/gajim/common/styling.py b/gajim/common/styling.py index 1f5ccc95fc..124da22bb6 100644 --- a/gajim/common/styling.py +++ b/gajim/common/styling.py @@ -3,6 +3,8 @@ from dataclasses import dataclass from dataclasses import field +from gi.repository import GLib + PRE = '`' STRONG = '*' STRIKE = '~' @@ -41,23 +43,28 @@ class StyleObject: text: str +class URIMarkup: + def get_markup_string(self): + return f'<a href="{self.text}">{self.text}</a>' + + @dataclass -class Uri(StyleObject): +class Uri(StyleObject, URIMarkup): name: str = field(default='uri', init=False) @dataclass -class Address(StyleObject): +class Address(StyleObject, URIMarkup): name: str = field(default='address', init=False) @dataclass -class XMPPAddress(StyleObject): +class XMPPAddress(StyleObject, URIMarkup): name: str = field(default='xmppadr', init=False) @dataclass -class MailAddress(StyleObject): +class MailAddress(StyleObject, URIMarkup): name: str = field(default='mailadr', init=False) @@ -135,7 +142,7 @@ def process(text, nested=False): blocks = _parse_blocks(text, nested) for block in blocks: if isinstance(block, PlainBlock): - offset = block.start + offset = 0 for line in block.text.splitlines(keepends=True): block.spans += _parse_line(line, offset) block.uris += _parse_uris(line, offset) diff --git a/gajim/gtk/conversation/plain_widget.py b/gajim/gtk/conversation/plain_widget.py index 8c2bc962a5..1e247b0610 100644 --- a/gajim/gtk/conversation/plain_widget.py +++ b/gajim/gtk/conversation/plain_widget.py @@ -18,6 +18,7 @@ from gi.repository import Gtk from gi.repository import Pango from gi.repository import Gdk +from gi.repository import GLib from gajim.common import app from gajim.common import i18n @@ -42,8 +43,8 @@ def __init__(self, account): self._account = account - self._text_widget = MessageTextview(self._account) - # self._text_widget = MessageLabel(self._account) + # self._text_widget = MessageTextview(self._account) + self._text_widget = MessageLabel(self._account) self.add(self._text_widget) def add_content(self, block): @@ -58,16 +59,21 @@ def __init__(self, account): self.set_line_wrap(True) self.set_xalign(0) self.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) + self.set_track_visited_links(False) self._account = account def print_text_with_styling(self, block): + text = GLib.markup_escape_text(block.text.strip()) + for uri in block.uris: + text = text.replace(uri.text, uri.get_markup_string()) + attr_list = Pango.AttrList() for span in block.spans: attr = make_pango_attribute(span.name, span.start, span.end) attr_list.insert(attr) - self.set_text(block.text.strip()) + self.set_markup(text) self.set_attributes(attr_list) -- GitLab