diff options
author | Philipp Hörist <philipp@hoerist.com> | 2023-06-06 19:36:14 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2023-06-06 19:36:14 +0300 |
commit | 126babff737a12519e4a9b0209a2923e63277a87 (patch) | |
tree | 02d07a62cd4322df39c22c648ed7931fb796b387 | |
parent | 3b6c82b9833a83a54c62d0942b8cce4de1cdc3e2 (diff) |
fix: DataForm: Handle destroy correctly
Fixes #11548
-rw-r--r-- | gajim/gtk/dataform.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gajim/gtk/dataform.py b/gajim/gtk/dataform.py index 8788e935c..9e98955fd 100644 --- a/gajim/gtk/dataform.py +++ b/gajim/gtk/dataform.py @@ -78,6 +78,8 @@ class DataFormWidget(Gtk.ScrolledWindow): self.add(self._form_grid) + self.connect('destroy', self._on_destroy) + @property def title(self) -> str | None: return self._form_grid.title @@ -112,6 +114,9 @@ class DataFormWidget(Gtk.ScrolledWindow): widget.grab_focus_without_selecting() break + def _on_destroy(self, widget: Gtk.ScrolledWindow) -> None: + self._form_grid.destroy() + class FormGrid(Gtk.Grid): def __init__(self, @@ -163,6 +168,8 @@ class FormGrid(Gtk.Grid): self._analyse_fields(form_node, options) self._parse_form(form_node, options) + self.connect('destroy', self._on_destroy) + def _add_row( self, field: SizeAdjustment | Title | Instructions | Field | ImageMediaField @@ -239,6 +246,12 @@ class FormGrid(Gtk.Grid): dataform_widget = cast(DataFormWidget, viewport.get_parent()) dataform_widget.emit('is-valid', value) + def _on_destroy(self, widget: Gtk.Grid) -> None: + for row in self.rows: + if isinstance(row, Field): + row.destroy() + self.rows.clear() + class SizeAdjustment: def __init__(self, options: dict[str, Any]) -> None: @@ -373,6 +386,10 @@ class Field: self._validate_source_id = GLib.timeout_add(200, _start_validation) + def destroy(self) -> None: + if self._validate_source_id is not None: + GLib.source_remove(self._validate_source_id) + class BooleanField(Field): def __init__(self, |