Daniel Brötzmann pushed to branch master at gajim / gajim
Commits:
2293f439 by wurstsalat at 2023-07-01T17:19:28+02:00
imprv: XMLConsole: Enable browsing sent stanzas in message input
Fixes #5403
- - - - -
2 changed files:
- gajim/data/gui/xml_console.ui
- gajim/gtk/xml_console.py
Changes:
=====================================
gajim/data/gui/xml_console.ui
=====================================
@@ -326,7 +326,7 @@
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="no-show-all">True</property>
- <signal name="clicked" handler="_on_paste_last" swapped="no"/>
+ <signal name="clicked" handler="_on_paste_previous"
swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
=====================================
gajim/gtk/xml_console.py
=====================================
@@ -59,7 +59,8 @@ def __init__(self) -> None:
self._selected_account = 'AllAccounts'
self._selected_send_account: str | None = None
self._filter_dialog: SettingsDialog | None = None
- self._last_stanza: str | None = None
+ self._sent_stanzas = SentSzanzas()
+ self._last_selected_ts = 0
self._last_search: str = ''
self._presence = True
@@ -199,7 +200,10 @@ def _on_key_press(self, _widget: Gtk.Widget, event:
Gdk.EventKey) -> None:
self._on_send()
if (event.state & Gdk.ModifierType.CONTROL_MASK and
event.keyval == Gdk.KEY_Up):
- self._on_paste_last()
+ self._on_paste_previous()
+ if (event.state & Gdk.ModifierType.CONTROL_MASK and
+ event.keyval == Gdk.KEY_Down):
+ self._on_paste_next()
if (event.state & Gdk.ModifierType.CONTROL_MASK and
event.keyval == Gdk.KEY_f):
self._ui.search_toggle.set_active(
@@ -274,13 +278,17 @@ def _on_send(self, *args: Any) -> None:
client = app.get_client(self._selected_send_account)
assert isinstance(node, nbxmpp.Protocol)
client.connection.send_stanza(node)
- self._last_stanza = stanza
+ self._sent_stanzas.add(stanza)
buffer_.set_text('')
- def _on_paste_last(self, *args: Any) -> None:
+ def _on_paste_previous(self, *args: Any) -> None:
+ buffer_ = self._ui.input_entry.get_buffer()
+ buffer_.set_text(self._sent_stanzas.get_previous())
+ self._ui.input_entry.grab_focus()
+
+ def _on_paste_next(self, *args: Any) -> None:
buffer_ = self._ui.input_entry.get_buffer()
- if self._last_stanza is not None:
- buffer_.set_text(self._last_stanza)
+ buffer_.set_text(self._sent_stanzas.get_next())
self._ui.input_entry.grab_focus()
def _on_input(self, button: Gtk.ToggleButton) -> None:
@@ -520,3 +528,39 @@ def _print_stanza(self,
if is_at_the_end:
GLib.idle_add(scroll_to_end, self._ui.scrolled)
+
+
+class SentSzanzas:
+ def __init__(self) -> None:
+ self._sent_stanzas: dict[float, str] = {}
+ self._last_selected_ts = 0
+
+ def add(self, stanza: str) -> None:
+ self._sent_stanzas[time.time()] = stanza
+ self._last_selected_ts = 0
+
+ def get_previous(self) -> str:
+ return self._get(Direction.PREV)
+
+ def get_next(self) -> str:
+ return self._get(Direction.NEXT)
+
+ def _get(self, direction: Direction) -> str:
+ if not self._sent_stanzas:
+ return ''
+
+ if direction == Direction.PREV:
+ for timestamp, stanza in reversed(self._sent_stanzas.items()):
+ if timestamp >= self._last_selected_ts:
+ continue
+ self._last_selected_ts = timestamp
+ return stanza
+ else:
+ for timestamp, stanza in self._sent_stanzas.items():
+ if timestamp <= self._last_selected_ts:
+ continue
+ self._last_selected_ts = timestamp
+ return stanza
+
+ self._last_selected_ts = list(self._sent_stanzas.keys())[-1]
+ return self._sent_stanzas[self._last_selected_ts]
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/commit/2293f439f7b26dc8414313360cb1ea2bc5952b85
--
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/commit/2293f439f7b26dc8414313360cb1ea2bc5952b85
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]