From 74eb7d4e948da0a5aec13a3dc9eabfea20c950e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 20 Feb 2019 12:04:00 +0100 Subject: [PATCH] Delay execution of CellRendererBinary callbacks If those callbacks open a popups, GTK shows some warning and eventually it leads to a segmentation fault. So we delay them using by executing them when the loop is idle. issue8111 review48731002 --- .../gui/window/view_form/view/list_gtk/widget.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tryton/gui/window/view_form/view/list_gtk/widget.py b/tryton/gui/window/view_form/view/list_gtk/widget.py index 1b118ae922..d9fb1f9d05 100644 --- a/tryton/gui/window/view_form/view/list_gtk/widget.py +++ b/tryton/gui/window/view_form/view/list_gtk/widget.py @@ -8,6 +8,8 @@ import webbrowser from functools import wraps, partial +import gobject + from tryton.gui.window.win_search import WinSearch from tryton.gui.window.win_form import WinForm from tryton.gui.window.view_form.screen import Screen @@ -426,9 +428,15 @@ class Binary(GenericText): if renderer is None: renderer = partial(CellRendererBinary, bool(self.filename)) super(Binary, self).__init__(view, attrs, renderer=renderer) - self.renderer.connect('select', self.select_binary) - self.renderer.connect('open', self.open_binary) - self.renderer.connect('save', self.save_binary) + self.renderer.connect( + 'select', + lambda *args: gobject.idle_add(self.select_binary, *args)) + self.renderer.connect( + 'open', + lambda *args: gobject.idle_add(self.open_binary, *args)) + self.renderer.connect( + 'save', + lambda *args: gobject.idle_add(self.save_binary, *args)) self.renderer.connect('clear', self.clear_binary) def get_textual_value(self, record):