ensure idle_add callbacks are using alive gtk objects
issue3719 review3931002
This commit is contained in:
1 parent
2c85f19799
commit
b2d08bde09
8 files changed
+32
-6
No files matched your search
+5
-1
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user