From 0595135d9a259f7c54a361f0df6a6f7cb830a076 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Mon, 17 Feb 2014 01:40:53 -0500 Subject: Fixed the GTK+ crashes (I think) by making resizes synchronous. Since all control resizes happen on the UI thread anyway, we don't need to dispatch back; just call the resizing functions directly. Windows gets this fix too for consistency (and also because it gets rid of the only asynchronous oddity in the system). --- sysdata_unix.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'sysdata_unix.go') diff --git a/sysdata_unix.go b/sysdata_unix.go index d2e6d16..50ca75d 100644 --- a/sysdata_unix.go +++ b/sysdata_unix.go @@ -48,12 +48,13 @@ var classTypes = [nctypes]*classData{ return func() bool { if w.container != nil && w.resize != nil { // wait for init width, height := gtk_window_get_size(w.widget) - // run in another goroutine since this will be called in uitask - go func() { - w.resize(0, 0, width, height) - }() + err := w.resize(0, 0, width, height) + if err != nil { + panic("child resize failed: " + err.Error()) + } } // returning false indicates that we continue processing events related to configure-event; if we choose not to, then after some controls have been added, the layout fails completely and everything stays in the starting position/size + // TODO make sure this is the case return false } }, @@ -198,14 +199,8 @@ func (s *sysData) setText(text string) error { } func (s *sysData) setRect(x int, y int, width int, height int) error { - ret := make(chan struct{}) - defer close(ret) - uitask <- func() { - gtk_fixed_move(s.container, s.widget, x, y) - gtk_widget_set_size_request(s.widget, width, height) - ret <- struct{}{} - } - <-ret + gtk_fixed_move(s.container, s.widget, x, y) + gtk_widget_set_size_request(s.widget, width, height) return nil } -- cgit v1.2.3