Daniel Brötzmann pushed to branch master at gajim / gajim
Commits:
-
7ab04140
by wurstsalat at 2021-12-11T21:48:30+01:00
-
f4e46117
by wurstsalat at 2021-12-11T21:52:21+01:00
-
0c1b1947
by wurstsalat at 2021-12-11T21:57:12+01:00
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:
| ... | ... | @@ -2,6 +2,7 @@ |
| 2 | 2 |
<!-- Generated with glade 3.38.2 -->
|
| 3 | 3 |
<interface>
|
| 4 | 4 |
<requires lib="gtk+" version="3.22"/>
|
| 5 |
+ <requires lib="gtksourceview" version="4.0"/>
|
|
| 5 | 6 |
<object class="GtkHeaderBar" id="headerbar">
|
| 6 | 7 |
<property name="visible">True</property>
|
| 7 | 8 |
<property name="can-focus">False</property>
|
| ... | ... | @@ -193,7 +194,7 @@ |
| 193 | 194 |
<property name="can-focus">True</property>
|
| 194 | 195 |
<property name="shadow-type">in</property>
|
| 195 | 196 |
<child>
|
| 196 |
- <object class="GtkTextView" id="textview">
|
|
| 197 |
+ <object class="GtkSourceView" id="sourceview">
|
|
| 197 | 198 |
<property name="visible">True</property>
|
| 198 | 199 |
<property name="can-focus">True</property>
|
| 199 | 200 |
<property name="editable">False</property>
|
| ... | ... | @@ -201,6 +202,7 @@ |
| 201 | 202 |
<property name="right-margin">6</property>
|
| 202 | 203 |
<property name="top-margin">6</property>
|
| 203 | 204 |
<property name="bottom-margin">6</property>
|
| 205 |
+ <property name="monospace">True</property>
|
|
| 204 | 206 |
</object>
|
| 205 | 207 |
</child>
|
| 206 | 208 |
</object>
|
| ... | ... | @@ -22,6 +22,7 @@ |
| 22 | 22 |
from gi.repository import GtkSource
|
| 23 | 23 |
|
| 24 | 24 |
from gajim.common import app
|
| 25 |
+from gajim.common import ged
|
|
| 25 | 26 |
from gajim.common.i18n import _
|
| 26 | 27 |
|
| 27 | 28 |
log = logging.getLogger('gajim.gui.conversation.code_widget')
|
| ... | ... | @@ -98,12 +99,25 @@ def __init__(self) -> None: |
| 98 | 99 |
self._source_manager = GtkSource.LanguageManager.get_default()
|
| 99 | 100 |
self._style_scheme_manager = GtkSource.StyleSchemeManager.get_default()
|
| 100 | 101 |
|
| 102 |
+ app.ged.register_event_handler('style-changed',
|
|
| 103 |
+ ged.GUI1,
|
|
| 104 |
+ self._on_style_changed)
|
|
| 105 |
+ |
|
| 106 |
+ style_scheme = self._get_style_scheme()
|
|
| 107 |
+ if style_scheme is not None:
|
|
| 108 |
+ self.get_buffer().set_style_scheme(style_scheme)
|
|
| 109 |
+ |
|
| 110 |
+ def _get_style_scheme(self):
|
|
| 101 | 111 |
if app.css_config.prefer_dark:
|
| 102 | 112 |
style_scheme = self._style_scheme_manager.get_scheme(
|
| 103 | 113 |
'solarized-dark')
|
| 104 | 114 |
else:
|
| 105 | 115 |
style_scheme = self._style_scheme_manager.get_scheme(
|
| 106 | 116 |
'solarized-light')
|
| 117 |
+ return style_scheme
|
|
| 118 |
+ |
|
| 119 |
+ def _on_style_changed(self, *args):
|
|
| 120 |
+ style_scheme = self._get_style_scheme()
|
|
| 107 | 121 |
if style_scheme is not None:
|
| 108 | 122 |
self.get_buffer().set_style_scheme(style_scheme)
|
| 109 | 123 |
|
| ... | ... | @@ -210,7 +210,8 @@ def __init__(self, |
| 210 | 210 |
self.show_all()
|
| 211 | 211 |
|
| 212 | 212 |
def update_text_tags(self) -> None:
|
| 213 |
- self._message_widget.update_text_tags()
|
|
| 213 |
+ if isinstance(self._message_widget, MessageWidget):
|
|
| 214 |
+ self._message_widget.update_text_tags()
|
|
| 214 | 215 |
|
| 215 | 216 |
def _check_for_highlight(self, content: ParsingResult) -> None:
|
| 216 | 217 |
needs_highlight = message_needs_highlight(
|
| ... | ... | @@ -18,6 +18,7 @@ |
| 18 | 18 |
from gi.repository import Gdk
|
| 19 | 19 |
from gi.repository import Gtk
|
| 20 | 20 |
from gi.repository import GLib
|
| 21 |
+from gi.repository import GtkSource
|
|
| 21 | 22 |
|
| 22 | 23 |
from gajim.common import app
|
| 23 | 24 |
from gajim.common import ged
|
| ... | ... | @@ -41,7 +42,7 @@ def __init__(self): |
| 41 | 42 |
EventHelper.__init__(self)
|
| 42 | 43 |
self.set_application(app.app)
|
| 43 | 44 |
self.set_position(Gtk.WindowPosition.CENTER)
|
| 44 |
- self.set_default_size(600, 600)
|
|
| 45 |
+ self.set_default_size(800, 600)
|
|
| 45 | 46 |
self.set_resizable(True)
|
| 46 | 47 |
self.set_show_menubar(False)
|
| 47 | 48 |
self.set_name('XMLConsoleWindow')
|
| ... | ... | @@ -77,6 +78,16 @@ def __init__(self): |
| 77 | 78 |
self._ui.actionbar.pack_end(self._combo)
|
| 78 | 79 |
|
| 79 | 80 |
self._create_tags()
|
| 81 |
+ |
|
| 82 |
+ source_manager = GtkSource.LanguageManager.get_default()
|
|
| 83 |
+ lang = source_manager.get_language('xml')
|
|
| 84 |
+ self._ui.sourceview.get_buffer().set_language(lang)
|
|
| 85 |
+ |
|
| 86 |
+ self._style_scheme_manager = GtkSource.StyleSchemeManager.get_default()
|
|
| 87 |
+ style_scheme = self._get_style_scheme()
|
|
| 88 |
+ if style_scheme is not None:
|
|
| 89 |
+ self._ui.sourceview.get_buffer().set_style_scheme(style_scheme)
|
|
| 90 |
+ |
|
| 80 | 91 |
self.show_all()
|
| 81 | 92 |
|
| 82 | 93 |
self.connect('key_press_event', self._on_key_press_event)
|
| ... | ... | @@ -85,8 +96,23 @@ def __init__(self): |
| 85 | 96 |
self.register_events([
|
| 86 | 97 |
('stanza-received', ged.GUI1, self._nec_stanza_received),
|
| 87 | 98 |
('stanza-sent', ged.GUI1, self._nec_stanza_sent),
|
| 99 |
+ ('style-changed', ged.GUI1, self._on_style_changed)
|
|
| 88 | 100 |
])
|
| 89 | 101 |
|
| 102 |
+ def _get_style_scheme(self):
|
|
| 103 |
+ if app.css_config.prefer_dark:
|
|
| 104 |
+ style_scheme = self._style_scheme_manager.get_scheme(
|
|
| 105 |
+ 'solarized-dark')
|
|
| 106 |
+ else:
|
|
| 107 |
+ style_scheme = self._style_scheme_manager.get_scheme(
|
|
| 108 |
+ 'solarized-light')
|
|
| 109 |
+ return style_scheme
|
|
| 110 |
+ |
|
| 111 |
+ def _on_style_changed(self, *args):
|
|
| 112 |
+ style_scheme = self._get_style_scheme()
|
|
| 113 |
+ if style_scheme is not None:
|
|
| 114 |
+ self._ui.sourceview.get_buffer().set_style_scheme(style_scheme)
|
|
| 115 |
+ |
|
| 90 | 116 |
def _on_value_change(self, combo):
|
| 91 | 117 |
self._selected_send_account = combo.get_active_id()
|
| 92 | 118 |
|
| ... | ... | @@ -98,21 +124,16 @@ def _set_titlebar(self): |
| 98 | 124 |
self._ui.headerbar.set_subtitle(title)
|
| 99 | 125 |
|
| 100 | 126 |
def _create_tags(self):
|
| 101 |
- buffer_ = self._ui.textview.get_buffer()
|
|
| 102 |
- in_color = app.css_config.get_value(
|
|
| 103 |
- '.gajim-incoming-nickname', StyleAttr.COLOR)
|
|
| 104 |
- out_color = app.css_config.get_value(
|
|
| 105 |
- '.gajim-outgoing-nickname', StyleAttr.COLOR)
|
|
| 106 |
- |
|
| 107 |
- tags = ['presence', 'message', 'stream', 'iq']
|
|
| 108 |
- |
|
| 109 |
- tag = buffer_.create_tag('incoming')
|
|
| 110 |
- tag.set_property('foreground', in_color)
|
|
| 111 |
- tag = buffer_.create_tag('outgoing')
|
|
| 112 |
- tag.set_property('foreground', out_color)
|
|
| 113 |
- |
|
| 127 |
+ tags = [
|
|
| 128 |
+ 'incoming',
|
|
| 129 |
+ 'outgoing',
|
|
| 130 |
+ 'presence',
|
|
| 131 |
+ 'message',
|
|
| 132 |
+ 'stream',
|
|
| 133 |
+ 'iq'
|
|
| 134 |
+ ]
|
|
| 114 | 135 |
for tag_name in tags:
|
| 115 |
- buffer_.create_tag(tag_name)
|
|
| 136 |
+ self._ui.sourceview.get_buffer().create_tag(tag_name)
|
|
| 116 | 137 |
|
| 117 | 138 |
def _on_key_press_event(self, _widget, event):
|
| 118 | 139 |
if event.keyval == Gdk.KEY_Escape:
|
| ... | ... | @@ -230,7 +251,7 @@ def _on_search_clicked(self, button): |
| 230 | 251 |
|
| 231 | 252 |
def _find(self, forward):
|
| 232 | 253 |
search_str = self._ui.search_entry.get_text()
|
| 233 |
- textbuffer = self._ui.textview.get_buffer()
|
|
| 254 |
+ textbuffer = self._ui.sourceview.get_buffer()
|
|
| 234 | 255 |
cursor_mark = textbuffer.get_insert()
|
| 235 | 256 |
current_pos = textbuffer.get_iter_at_mark(cursor_mark)
|
| 236 | 257 |
|
| ... | ... | @@ -262,7 +283,7 @@ def _find(self, forward): |
| 262 | 283 |
match_start, match_end = match
|
| 263 | 284 |
textbuffer.select_range(match_start, match_end)
|
| 264 | 285 |
mark = textbuffer.create_mark('last_pos', match_end, True)
|
| 265 |
- self._ui.textview.scroll_to_mark(mark, 0, True, 0.5, 0.5)
|
|
| 286 |
+ self._ui.sourceview.scroll_to_mark(mark, 0, True, 0.5, 0.5)
|
|
| 266 | 287 |
self.last_search = search_str
|
| 267 | 288 |
|
| 268 | 289 |
@staticmethod
|
| ... | ... | @@ -320,7 +341,7 @@ def _on_filter_destroyed(self, _win): |
| 320 | 341 |
self.filter_dialog = None
|
| 321 | 342 |
|
| 322 | 343 |
def _on_clear(self, *args):
|
| 323 |
- self._ui.textview.get_buffer().set_text('')
|
|
| 344 |
+ self._ui.sourceview.get_buffer().set_text('')
|
|
| 324 | 345 |
|
| 325 | 346 |
def _set_account(self, value, _data):
|
| 326 | 347 |
self.selected_account = value
|
| ... | ... | @@ -329,7 +350,7 @@ def _set_account(self, value, _data): |
| 329 | 350 |
def _on_setting(self, value, data):
|
| 330 | 351 |
setattr(self, data, value)
|
| 331 | 352 |
value = not value
|
| 332 |
- table = self._ui.textview.get_buffer().get_tag_table()
|
|
| 353 |
+ table = self._ui.sourceview.get_buffer().get_tag_table()
|
|
| 333 | 354 |
tag = table.lookup(data)
|
| 334 | 355 |
if data in ('incoming', 'outgoing'):
|
| 335 | 356 |
if value:
|
| ... | ... | @@ -365,7 +386,7 @@ def _print_stanza(self, event, kind): |
| 365 | 386 |
|
| 366 | 387 |
at_the_end = util.at_the_end(self._ui.scrolled)
|
| 367 | 388 |
|
| 368 |
- buffer_ = self._ui.textview.get_buffer()
|
|
| 389 |
+ buffer_ = self._ui.sourceview.get_buffer()
|
|
| 369 | 390 |
end_iter = buffer_.get_end_iter()
|
| 370 | 391 |
|
| 371 | 392 |
type_ = kind
|