From 583c67699293b8b3370f7c710031b6eda73b67c5 Mon Sep 17 00:00:00 2001 From: "gchazara@trinidad.inria.fr" Date: Tue, 30 May 2006 18:48:51 +0200 Subject: [PATCH] Probe gtk in a child process --- ui/gtk/ui_gtk.py | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/ui/gtk/ui_gtk.py b/ui/gtk/ui_gtk.py index ce31315..699b16c 100644 --- a/ui/gtk/ui_gtk.py +++ b/ui/gtk/ui_gtk.py @@ -1,16 +1,29 @@ -import math +import math, os -try: - import cairo, pygtk - pygtk.require('2.0') - import gtk - assert gtk.pygtk_version >= (2, 8) - IS_AVAILABLE = True - _gtk_DrawingArea = gtk.DrawingArea -except Exception: - IS_AVAILABLE = False - class _gtk_DrawingArea: - pass +# This is evil, we test for gtk in a separate process +# because 'import gtk' breaks curses on a linux console. +pid = os.fork() +if pid == 0: + try: + import cairo, pygtk + pygtk.require('2.0') + import gtk + assert gtk.pygtk_version >= (2, 8) + os._exit(0) + except Exception, e: + os._exit(1) +else: + (p, status) = os.waitpid(pid, 0) + IS_AVAILABLE = os.WIFEXITED(status) and os.WEXITSTATUS(status) == 0 + if IS_AVAILABLE: + import cairo, pygtk + pygtk.require('2.0') + import gtk + assert gtk.pygtk_version >= (2, 8) + _gtk_DrawingArea = gtk.DrawingArea + else: + class _gtk_DrawingArea: + pass RADIUS = 20.0 LINE_WIDTH = 4.0 @@ -73,7 +86,6 @@ class _PysizeWidget(_gtk_DrawingArea): self._draw_round_rectangle(context, d + rect.width/2, d + rect.height/2, rect.width/2 - 10, rect.height/2 - 10) - def run(options, args): win = gtk.Window() -- 2.11.4.GIT