[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [1785] contrib/py/scripts/addons/ text_editor_pasteall.py: fix for linux.

Dalai Felinto dfelinto at gmail.com
Tue Apr 5 03:06:39 CEST 2011


Revision: 1785
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=1785
Author:   dfelinto
Date:     2011-04-05 01:06:36 +0000 (Tue, 05 Apr 2011)
Log Message:
-----------
fix for linux. copied the webbrowser hack over from wm.py Thanks Daniel Salazar for the report and test over IRC

Modified Paths:
--------------
    contrib/py/scripts/addons/text_editor_pasteall.py

Modified: contrib/py/scripts/addons/text_editor_pasteall.py
===================================================================
--- contrib/py/scripts/addons/text_editor_pasteall.py	2011-04-04 22:04:13 UTC (rev 1784)
+++ contrib/py/scripts/addons/text_editor_pasteall.py	2011-04-05 01:06:36 UTC (rev 1785)
@@ -109,6 +109,7 @@
 
         if context.scene.use_webbrowser:
             try:
+                _webbrowser_bug_fix()
                 webbrowser.open_new_tab(page)
             except:
                 self.report('WARNING', "Error in opening the page %s." % (page))
@@ -217,4 +218,67 @@
     bpy.utils.unregister_module(__name__)
 
 if __name__ == "__main__":
-    register()
\ No newline at end of file
+    register()
+
+def _webbrowser_bug_fix():
+    """hack copied from wm.py"""
+    # test for X11
+    import os
+
+    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
+



More information about the Bf-extensions-cvs mailing list