[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35393] trunk/blender/release/scripts/op/ wm.py: temp workaround [#26397] Console error when selecting certain entries in the Help Menu ( Report a Bug)

Campbell Barton ideasman42 at gmail.com
Tue Mar 8 02:03:28 CET 2011


Revision: 35393
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35393
Author:   campbellbarton
Date:     2011-03-08 01:03:27 +0000 (Tue, 08 Mar 2011)
Log Message:
-----------
temp workaround [#26397] Console error when selecting certain entries in the Help Menu (Report a Bug)
bug in python 3.2, reported upstream: http://bugs.python.org/issue11432

Modified Paths:
--------------
    trunk/blender/release/scripts/op/wm.py

Modified: trunk/blender/release/scripts/op/wm.py
===================================================================
--- trunk/blender/release/scripts/op/wm.py	2011-03-07 23:53:08 UTC (rev 35392)
+++ trunk/blender/release/scripts/op/wm.py	2011-03-08 01:03:27 UTC (rev 35393)
@@ -22,6 +22,7 @@
 from bpy.props import StringProperty, BoolProperty, IntProperty, FloatProperty
 from rna_prop_ui import rna_idprop_ui_prop_get, rna_idprop_ui_prop_clear
 
+
 class MESH_OT_delete_edgeloop(bpy.types.Operator):
     '''Delete an edge loop by merging the faces on each side to a single face loop'''
     bl_idname = "mesh.delete_edgeloop"
@@ -846,7 +847,67 @@
 def register():
     bpy.utils.register_module(__name__)
 
+    import os
 
+    # test for X11
+    if os.environ.get("DISPLAY"):
+
+        # BSD licenced code copied from python, temp fix for bug
+        # http://bugs.python.org/issue11432, XXX == added code
+        def _invoke(self, args, remote, autoraise):
+            # XXX, added imports
+            import io
+            import subprocess
+            import time
+
+            raise_opt = []
+            if remote and self.raise_opts:
+                # use autoraise argument only for remote invocation
+                autoraise = int(autoraise)
+                opt = self.raise_opts[autoraise]
+                if opt:
+                    raise_opt = [opt]
+
+            cmdline = [self.name] + raise_opt + args
+
+            if remote or self.background:
+                inout = io.open(os.devnull, "r+")
+            else:
+                # for TTY browsers, we need stdin/out
+                inout = None
+            # if possible, put browser in separate process group, so
+            # keyboard interrupts don't affect browser as well as Python
+            setsid = getattr(os, 'setsid', None)
+            if not setsid:
+                setsid = getattr(os, 'setpgrp', None)
+
+            p = subprocess.Popen(cmdline, close_fds=True,  # XXX, stdin=inout,
+                                 stdout=(self.redirect_stdout and inout or None),
+                                 stderr=inout, preexec_fn=setsid)
+            if remote:
+                # wait five secons. If the subprocess is not finished, the
+                # remote invocation has (hopefully) started a new instance.
+                time.sleep(1)
+                rc = p.poll()
+                if rc is None:
+                    time.sleep(4)
+                    rc = p.poll()
+                    if rc is None:
+                        return True
+                # if remote call failed, open() will try direct invocation
+                return not rc
+            elif self.background:
+                if p.poll() is None:
+                    return True
+                else:
+                    return False
+            else:
+                return not p.wait()
+
+        import webbrowser
+        webbrowser.UnixBrowser._invoke = _invoke
+
+
 def unregister():
     bpy.utils.unregister_module(__name__)
 




More information about the Bf-blender-cvs mailing list