Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hörist <philipp@hoerist.com>2023-06-06 19:36:14 +0300
committerPhilipp Hörist <philipp@hoerist.com>2023-06-06 19:36:14 +0300
commit126babff737a12519e4a9b0209a2923e63277a87 (patch)
tree02d07a62cd4322df39c22c648ed7931fb796b387
parent3b6c82b9833a83a54c62d0942b8cce4de1cdc3e2 (diff)
fix: DataForm: Handle destroy correctly
Fixes #11548
-rw-r--r--gajim/gtk/dataform.py17
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,