diff options
author | Sylvain Munaut <tnt@246tNt.com> | 2013-12-15 14:54:31 +0100 |
---|---|---|
committer | Sylvain Munaut <tnt@246tNt.com> | 2013-12-20 01:30:44 +0100 |
commit | 984273433c97471484bdb45c0865448a915655ee (patch) | |
tree | 9468c89547dff5b6deafe721d8bdac0400c93214 | |
parent | a0170049b0f6b1d3b1209530aaa6bb38e5324695 (diff) |
wxgui: Make sure to only start the flow graph once all init is done
Currently we start the flow graph in the stdframe constructor.
However at that point, the frame isn't attached to the app and it's not
"shown" yet which means some UI operations can still fail.
This is a race condition which happens on OSX. You can reproduce it on
linux as well by adding a sleep(1) after starting the flow graph.
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
-rw-r--r-- | gr-wxgui/python/wxgui/stdgui2.py | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/gr-wxgui/python/wxgui/stdgui2.py b/gr-wxgui/python/wxgui/stdgui2.py index 53b389dd3c..dbd0307195 100644 --- a/gr-wxgui/python/wxgui/stdgui2.py +++ b/gr-wxgui/python/wxgui/stdgui2.py @@ -46,16 +46,20 @@ class stdapp (wx.App): wx.App.__init__ (self, redirect=False) def OnInit (self): - frame = stdframe (self.top_block_maker, self.title, self._nstatus, - self._max_noutput_items) + frame = stdframe (self.top_block_maker, self.title, self._nstatus) frame.Show (True) self.SetTopWindow (frame) + + if(self._max_noutput_items is not None): + frame.top_block().start (self._max_noutput_items) + else: + frame.top_block().start () + return True class stdframe (wx.Frame): - def __init__ (self, top_block_maker, title="GNU Radio", nstatus=2, - max_nouts=None): + def __init__ (self, top_block_maker, title="GNU Radio", nstatus=2): # print "stdframe.__init__" wx.Frame.__init__(self, None, -1, title) @@ -69,7 +73,7 @@ class stdframe (wx.Frame): self.SetMenuBar (mainmenu) self.Bind (wx.EVT_CLOSE, self.OnCloseWindow) - self.panel = stdpanel (self, self, top_block_maker, max_nouts) + self.panel = stdpanel (self, self, top_block_maker) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(self.panel, 1, wx.EXPAND) self.SetSizer(vbox) @@ -85,8 +89,7 @@ class stdframe (wx.Frame): return self.panel.top_block class stdpanel (wx.Panel): - def __init__ (self, parent, frame, top_block_maker, - max_nouts=None): + def __init__ (self, parent, frame, top_block_maker): # print "stdpanel.__init__" wx.Panel.__init__ (self, parent, -1) self.frame = frame @@ -97,11 +100,6 @@ class stdpanel (wx.Panel): self.SetAutoLayout (True) vbox.Fit (self) - if(max_nouts is not None): - self.top_block.start (max_nouts) - else: - self.top_block.start () - class std_top_block (gr.top_block): def __init__ (self, parent, panel, vbox, argv): # Call the hier_block2 constructor |