ensure idle_add callbacks are using alive gtk objects

issue3719
review3931002
This commit is contained in:
Nicolas Évrard committed 2014-03-06 15:07:46 +01:00
1 parent 2c85f19799
commit b2d08bde09
8 files changed
+32 -6

No files matched your search

+5 -1
View File
@@ -1069,8 +1069,12 @@ class Main(object):
size=gtk.ICON_SIZE_MENU, detail=None)
cell.set_property('pixbuf', pixbuf)
column.set_cell_data_func(favorite_renderer, favorite_setter)
def toggle_favorite(renderer, path, treeview):
if treeview.props.window:
self.toggle_favorite(renderer, path, treeview)
favorite_renderer.connect('clicked',
lambda *a: gobject.idle_add(self.toggle_favorite, *a), treeview)
lambda *a: gobject.idle_add(toggle_favorite, *a), treeview)
# Unset fixed height mode to add column
treeview.set_fixed_height_mode(False)
treeview.append_column(column)
+2
View File
@@ -123,6 +123,8 @@ class DBCreate(object):
entry.handler_unblock(_hid)
def _move_cursor():
if not entry.props.window:
return
with gtk.gdk.lock:
entry.set_position(_pos)
return False
+2
View File
@@ -50,6 +50,8 @@ class DBRestore(object):
entry.handler_unblock(_hid)
def _move_cursor():
if not entry.props.window:
return
with gtk.gdk.lock:
entry.set_position(_pos)
return False
+5 -1
View File
@@ -138,8 +138,12 @@ class Form(SignalEvent, TabContent):
self.screen.signal_connect(self, 'record-message',
self._record_message)
def record_modified(*args):
if self.widget_get().props.window:
self.record_modified(*args)
self.screen.signal_connect(self, 'record-modified',
lambda *a: gobject.idle_add(self._record_modified, *a))
lambda *a: gobject.idle_add(record_modified, *a))
self.screen.signal_connect(self, 'record-saved', self._record_saved)
self.screen.signal_connect(self, 'attachment-count',
self._attachment_count)
+4 -1
View File
@@ -140,4 +140,7 @@ class Action(SignalEvent):
if hasattr(self, 'screen'): # Catch early update
# Using idle_add to prevent corruption of the event who triggered
# the update.
gtk.idle_add(self.display)
def display():
if self.screen.widget.props.window:
self.display()
gtk.idle_add(display)
@@ -67,10 +67,14 @@ class WidgetInterface(object):
def send_modified(self, *args):
def send(value):
if not self.widget.props.window:
return
if self.record and self.get_value() == value:
self.record.signal('record-modified')
def get_value():
if not self.widget.props.window:
return
gobject.timeout_add(300, send, self.get_value())
# Wait the current event is finished to retreive the value
gobject.idle_add(get_value)
@@ -310,6 +310,8 @@ class Many2One(WidgetInterface):
value = self.field.get(self.record)
if self.has_target(value):
def clean():
if not self.wid_text.props.window:
return
text = self.wid_text.get_text()
position = self.wid_text.get_position()
self.field.set_client(self.record,
@@ -2,7 +2,6 @@
#this repository contains the full copyright notices and license terms.
import gtk
import gettext
import operator
import gobject
import tryton.common as common
@@ -348,6 +347,8 @@ class ScreenContainer(object):
def match_selected(self, completion, model, iter):
def callback():
if not self.search_entry.props.window:
return
self.update()
self.search_entry.emit('changed')
gobject.idle_add(callback)
@@ -364,8 +365,12 @@ class ScreenContainer(object):
self.search_entry.grab_focus()
def key_press(self, widget, event):
gobject.idle_add(self.update)
gobject.idle_add(self.bookmark_match)
def keypress():
if not self.search_entry.props.window:
return
self.update()
self.bookmark_match()
gobject.idle_add(keypress)
def icon_press(self, widget, icon_pos, event):
if icon_pos == 1: