Daniel Brötzmann pushed to branch master at gajim / gajim
Commits: 7ab04140 by wurstsalat at 2021-12-11T21:48:30+01:00 XMLConsole: Use GTKSourceView
- - - - - f4e46117 by wurstsalat at 2021-12-11T21:52:21+01:00 MessageRow: Only update text tags for MessageWidget
- - - - - 0c1b1947 by wurstsalat at 2021-12-11T21:57:12+01:00 CodeWidget: Update color scheme on style change
- - - - -
4 changed files:
- gajim/data/gui/xml_console.ui - gajim/gtk/conversation/code_widget.py - gajim/gtk/conversation/rows/message.py - gajim/gtk/xml_console.py
Changes:
===================================== gajim/data/gui/xml_console.ui ===================================== @@ -2,6 +2,7 @@ <!-- Generated with glade 3.38.2 --> <interface> <requires lib="gtk+" version="3.22"/> + <requires lib="gtksourceview" version="4.0"/> <object class="GtkHeaderBar" id="headerbar"> <property name="visible">True</property> <property name="can-focus">False</property> @@ -193,7 +194,7 @@ <property name="can-focus">True</property> <property name="shadow-type">in</property> <child> - <object class="GtkTextView" id="textview"> + <object class="GtkSourceView" id="sourceview"> <property name="visible">True</property> <property name="can-focus">True</property> <property name="editable">False</property> @@ -201,6 +202,7 @@ <property name="right-margin">6</property> <property name="top-margin">6</property> <property name="bottom-margin">6</property> + <property name="monospace">True</property> </object> </child> </object>
===================================== gajim/gtk/conversation/code_widget.py ===================================== @@ -22,6 +22,7 @@ from gi.repository import GtkSource
from gajim.common import app +from gajim.common import ged from gajim.common.i18n import _
log = logging.getLogger('gajim.gui.conversation.code_widget') @@ -98,12 +99,25 @@ def __init__(self) -> None: self._source_manager = GtkSource.LanguageManager.get_default() self._style_scheme_manager = GtkSource.StyleSchemeManager.get_default()
+ app.ged.register_event_handler('style-changed', + ged.GUI1, + self._on_style_changed) + + style_scheme = self._get_style_scheme() + if style_scheme is not None: + self.get_buffer().set_style_scheme(style_scheme) + + def _get_style_scheme(self): if app.css_config.prefer_dark: style_scheme = self._style_scheme_manager.get_scheme( 'solarized-dark') else: style_scheme = self._style_scheme_manager.get_scheme( 'solarized-light') + return style_scheme + + def _on_style_changed(self, *args): + style_scheme = self._get_style_scheme() if style_scheme is not None: self.get_buffer().set_style_scheme(style_scheme)
===================================== gajim/gtk/conversation/rows/message.py ===================================== @@ -210,7 +210,8 @@ def __init__(self, self.show_all()
def update_text_tags(self) -> None: - self._message_widget.update_text_tags() + if isinstance(self._message_widget, MessageWidget): + self._message_widget.update_text_tags()
def _check_for_highlight(self, content: ParsingResult) -> None: needs_highlight = message_needs_highlight(
===================================== gajim/gtk/xml_console.py ===================================== @@ -18,6 +18,7 @@ from gi.repository import Gdk from gi.repository import Gtk from gi.repository import GLib +from gi.repository import GtkSource
from gajim.common import app from gajim.common import ged @@ -41,7 +42,7 @@ def __init__(self): EventHelper.__init__(self) self.set_application(app.app) self.set_position(Gtk.WindowPosition.CENTER) - self.set_default_size(600, 600) + self.set_default_size(800, 600) self.set_resizable(True) self.set_show_menubar(False) self.set_name('XMLConsoleWindow') @@ -77,6 +78,16 @@ def __init__(self): self._ui.actionbar.pack_end(self._combo)
self._create_tags() + + source_manager = GtkSource.LanguageManager.get_default() + lang = source_manager.get_language('xml') + self._ui.sourceview.get_buffer().set_language(lang) + + self._style_scheme_manager = GtkSource.StyleSchemeManager.get_default() + style_scheme = self._get_style_scheme() + if style_scheme is not None: + self._ui.sourceview.get_buffer().set_style_scheme(style_scheme) + self.show_all()
self.connect('key_press_event', self._on_key_press_event) @@ -85,8 +96,23 @@ def __init__(self): self.register_events([ ('stanza-received', ged.GUI1, self._nec_stanza_received), ('stanza-sent', ged.GUI1, self._nec_stanza_sent), + ('style-changed', ged.GUI1, self._on_style_changed) ])
+ def _get_style_scheme(self): + if app.css_config.prefer_dark: + style_scheme = self._style_scheme_manager.get_scheme( + 'solarized-dark') + else: + style_scheme = self._style_scheme_manager.get_scheme( + 'solarized-light') + return style_scheme + + def _on_style_changed(self, *args): + style_scheme = self._get_style_scheme() + if style_scheme is not None: + self._ui.sourceview.get_buffer().set_style_scheme(style_scheme) + def _on_value_change(self, combo): self._selected_send_account = combo.get_active_id()
@@ -98,21 +124,16 @@ def _set_titlebar(self): self._ui.headerbar.set_subtitle(title)
def _create_tags(self): - buffer_ = self._ui.textview.get_buffer() - in_color = app.css_config.get_value( - '.gajim-incoming-nickname', StyleAttr.COLOR) - out_color = app.css_config.get_value( - '.gajim-outgoing-nickname', StyleAttr.COLOR) - - tags = ['presence', 'message', 'stream', 'iq'] - - tag = buffer_.create_tag('incoming') - tag.set_property('foreground', in_color) - tag = buffer_.create_tag('outgoing') - tag.set_property('foreground', out_color) - + tags = [ + 'incoming', + 'outgoing', + 'presence', + 'message', + 'stream', + 'iq' + ] for tag_name in tags: - buffer_.create_tag(tag_name) + self._ui.sourceview.get_buffer().create_tag(tag_name)
def _on_key_press_event(self, _widget, event): if event.keyval == Gdk.KEY_Escape: @@ -230,7 +251,7 @@ def _on_search_clicked(self, button):
def _find(self, forward): search_str = self._ui.search_entry.get_text() - textbuffer = self._ui.textview.get_buffer() + textbuffer = self._ui.sourceview.get_buffer() cursor_mark = textbuffer.get_insert() current_pos = textbuffer.get_iter_at_mark(cursor_mark)
@@ -262,7 +283,7 @@ def _find(self, forward): match_start, match_end = match textbuffer.select_range(match_start, match_end) mark = textbuffer.create_mark('last_pos', match_end, True) - self._ui.textview.scroll_to_mark(mark, 0, True, 0.5, 0.5) + self._ui.sourceview.scroll_to_mark(mark, 0, True, 0.5, 0.5) self.last_search = search_str
@staticmethod @@ -320,7 +341,7 @@ def _on_filter_destroyed(self, _win): self.filter_dialog = None
def _on_clear(self, *args): - self._ui.textview.get_buffer().set_text('') + self._ui.sourceview.get_buffer().set_text('')
def _set_account(self, value, _data): self.selected_account = value @@ -329,7 +350,7 @@ def _set_account(self, value, _data): def _on_setting(self, value, data): setattr(self, data, value) value = not value - table = self._ui.textview.get_buffer().get_tag_table() + table = self._ui.sourceview.get_buffer().get_tag_table() tag = table.lookup(data) if data in ('incoming', 'outgoing'): if value: @@ -365,7 +386,7 @@ def _print_stanza(self, event, kind):
at_the_end = util.at_the_end(self._ui.scrolled)
- buffer_ = self._ui.textview.get_buffer() + buffer_ = self._ui.sourceview.get_buffer() end_iter = buffer_.get_end_iter()
type_ = kind
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/f55a012764a1a4e0da7bc7b34441fc0c...