Index: conseil.py
===================================================================
--- conseil.py	(révision 78)
+++ conseil.py	(copie de travail)
@@ -14,7 +14,6 @@
 	import gtk
   	import gtk.glade
 	import gobject
-	import gnome
 except:
 	sys.exit(1)
 
Index: retriever.py
===================================================================
--- retriever.py	(révision 78)
+++ retriever.py	(copie de travail)
@@ -17,7 +17,7 @@
 	import gtk
   	import gtk.glade
 	import gobject
-	import gnome
+	import desktop
 except:
 	sys.exit(1)
 from page import *
@@ -122,7 +122,7 @@
 					# Fixme !
 					if itera != None :
 						bugnbr = store.get_value(itera,0)
-						gnome.url_show(self.bts.getBugUrl(bugnbr))
+						desktop.url_show(self.bts.getBugUrl(bugnbr))
 				browser = gtk.MenuItem(_("Open in a web browser"))
 				browser.connect("activate", browser_callback)
 				browser.show()
@@ -197,7 +197,7 @@
 			#right click menu
 			elif event.button == 3 :
 				def browser_callback(menuitem) :
-					gnome.url_show(self.bts.getBugUrl(nbr))
+					desktop.url_show(self.bts.getBugUrl(nbr))
 				browser = gtk.MenuItem(_("Open in a web browser"))
 				browser.connect("activate", browser_callback)
 				browser.show()
@@ -220,7 +220,7 @@
 				#self.bts.postComment(nbr,title,content)
 
 		def callback_browser(button,bugnbr) :
-			gnome.url_show(self.bts.getBugUrl(bugnbr))
+			desktop.url_show(self.bts.getBugUrl(bugnbr))
 	
 		if nbr < 0 :
 			main_widget = gtk.Label(_("This specific bug doesnt exist"))
Index: desktop.py
===================================================================
--- desktop.py	(révision 0)
+++ desktop.py	(révision 0)
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os as _os
+import sys as _sys
+
+try:
+	import gnome as _gnome
+	_has_gnome = True
+except ImportError:
+	_has_gnome = False
+
+def _spawn_executable(close_stdout = False, close_stderr = False, *args):
+	pid = _os.fork()
+	if pid == 0:
+		# Child process
+		
+		# Close stdout and/or stderr
+		null = _os.open('/dev/null', _os.O_WRONLY)
+		if close_stdout: _os.dup2(null, 1)
+		if close_stderr: _os.dup2(null, 2)
+		_os.close(null)
+		
+		# Run it
+		try:
+			_os.execlp(args[0], *args)
+		except OSError:
+			_sys.exit(127)
+	else:
+		status = _os.waitpid(pid, 0)[1]
+		return _os.WIFEXITED(status) and (_os.WEXITSTATUS(status) == 0)
+
+def _test_executable(*args):
+	return _spawn_executable(True, True, *args)
+
+def _spawn_quiet(*args):
+	return _spawn_executable(True, False, *args)
+
+_has_xdg = _test_executable('xdg-open', '--help')
+_has_exo = _test_executable('exo-open', '--help')
+
+def url_show(url):
+	if _has_xdg: # freedesktop is the best choice :p
+		return _spawn_quiet('xdg-open', url)
+	elif _has_gnome: # shouldn't also check for gnome-open ?
+		return _gnome.url_show(url)
+	elif _has_exo: # for xfce
+		return _spawn_quiet('exo-open', url)
+	# add your favorite desktop here ;)
+	
+	return False
