]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_extras.py
Got a new version of StructuredText from Zope's CVS.
[wxWidgets.git] / wxPython / src / _extras.py
index ebc8ca9afb79ec7ae8620bc6e2905ed623649ef6..f8698fb0501f5752d6c9fe78cae74dd37e647d3a 100644 (file)
@@ -705,29 +705,34 @@ def wxPyTypeCast(obj, typeStr):
     return theObj
 
 
+#----------------------------------------------------------------------
 #----------------------------------------------------------------------
 
 class wxPyOnDemandOutputWindow:
     def __init__(self, title = "wxPython: stdout/stderr"):
         self.frame  = None
         self.title  = title
-
+        self.parent = None
 
     def SetParent(self, parent):
         self.parent = parent
 
-
     def OnCloseWindow(self, event):
         if self.frame != None:
             self.frame.Destroy()
         self.frame = None
         self.text  = None
 
-
-    # this provides the file-like behaviour
+    # These methods provide the file-like output behaviour.
     def write(self, str):
+        if not wxThread_IsMain():
+            # Aquire the GUI mutex before making GUI calls.  Mutex is released
+            # when locker is deleted at the end of this function.
+            locker = wxMutexGuiLocker()
+
         if not self.frame:
-            self.frame = wxFrame(self.parent, -1, self.title)
+            self.frame = wxFrame(self.parent, -1, self.title,
+                                 style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
             self.text  = wxTextCtrl(self.frame, -1, "",
                                     style = wxTE_MULTILINE|wxTE_READONLY)
             self.frame.SetSize(wxSize(450, 300))
@@ -735,13 +740,11 @@ class wxPyOnDemandOutputWindow:
             EVT_CLOSE(self.frame, self.OnCloseWindow)
         self.text.AppendText(str)
 
-
     def close(self):
         if self.frame != None:
-            self.frame.Destroy()
-        self.frame = None
-        self.text  = None
-
+            if not wxThread_IsMain():
+                locker = wxMutexGuiLocker()
+            self.frame.Close()
 
 
 _defRedirect = (wxPlatform == '__WXMSW__')
@@ -774,7 +777,6 @@ class wxApp(wxPyApp):
     def SetTopWindow(self, frame):
         if self.stdioWin:
             self.stdioWin.SetParent(frame)
-            sys.stderr = sys.stdout = self.stdioWin
         wxPyApp.SetTopWindow(self, frame)
 
 
@@ -788,12 +790,12 @@ class wxApp(wxPyApp):
             sys.stdout = sys.stderr = open(filename, 'a')
         else:
             self.stdioWin = self.outputWindowClass() # wxPyOnDemandOutputWindow
+            sys.stdout = sys.stderr = self.stdioWin
 
 
     def RestoreStdio(self):
         sys.stdout, sys.stderr = self.saveStdio
-        if self.stdioWin != None:
-            self.stdioWin.close()
+
 
 #----------------------------------------------------------------------------