GTK3: remove gtkmozembed and make htmlview work with webktview in a scrolled window

svn: r20168
This commit is contained in:
Benny Malengier 2012-08-01 14:44:55 +00:00
parent 72e956b1db
commit 6686435b19

View File

@ -89,10 +89,6 @@ def get_identity():
# Constants # Constants
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# I think we should set the two following variable in const.py
# They are used only with gtkmozembed.
MOZEMBED_PATH = TEMP_DIR
MOZEMBED_SUBPATH = get_empty_tempdir('mozembed_gramps')
GEOVIEW_SUBPATH = get_empty_tempdir('geoview') GEOVIEW_SUBPATH = get_empty_tempdir('geoview')
NOWEB = 0 NOWEB = 0
WEBKIT = 1 WEBKIT = 1
@ -130,13 +126,6 @@ try:
except: except:
pass pass
#TODO GTK3: gtkmozembed not for GTK3
##try:
## import gtkmozembed
## TOOLKIT += MOZILLA
##except:
## pass
#no interfaces present, raise Error so that options for GeoView do not show #no interfaces present, raise Error so that options for GeoView do not show
if TOOLKIT == NOWEB : if TOOLKIT == NOWEB :
raise ImportError, 'No GTK html plugin found' raise ImportError, 'No GTK html plugin found'
@ -325,113 +314,6 @@ class RendererWebkit(Renderer):
""" """
return self.window.get_main_frame().get_uri() return self.window.get_main_frame().get_uri()
#-------------------------------------------------------------------------
#
# The Mozilla or Gecko Renderer class
#
#-------------------------------------------------------------------------
class RendererMozilla(Renderer):
"""
Implementation of Renderer with gtkmozembed
"""
def __init__(self):
Renderer.__init__(self)
if hasattr(gtkmozembed, 'set_profile_path'):
set_profile_path = gtkmozembed.set_profile_path
else:
set_profile_path = gtkmozembed.gtk_moz_embed_set_profile_path
set_profile_path(MOZEMBED_PATH, MOZEMBED_SUBPATH)
self.__set_mozembed_proxy()
self.window = gtkmozembed.MozEmbed()
self.browser = MOZILLA
self.title = None
self.handler = self.window.connect("net-stop", self.page_loaded)
self.window.connect("title", self.get_title)
self.fct = None
def page_loaded(self, *args):
"""
We just loaded one page in the browser.
Set the button sensitivity
"""
self.set_button_sensitivity()
def set_button_sensitivity(self):
"""
We must set the back and forward button in the HtmlView class.
"""
self.fct()
def open(self, url):
"""
We need to load the page in the browser.
"""
self.window.load_url(url)
def get_title(self, *args):
"""
We need to get the html title page.
"""
self.title = self.window.get_title()
def execute_script(self, url):
"""
We need to execute a javascript function into the browser
"""
self.window.load_url(url)
def get_uri(self):
"""
What is the uri loaded in the browser ?
"""
return self.window.get_location()
def refresh(self):
"""
We need to reload the page in the browser.
"""
self.window.reload(0)
def __set_mozembed_proxy(self):
"""
Try to see if we have some proxy environment variable.
http_proxy in our case.
The standard format is : http://[user:password@]proxy:port/
"""
try:
proxy = os.environ['http_proxy']
if proxy:
host_port = None
prefs = open(os.path.join(MOZEMBED_SUBPATH,
"prefs.js"),
"w+")
if not os.path.exists(prefs):
parts = urlparse.urlparse(proxy)
if not parts[0] or parts[0] == 'http':
host_port = parts[1]
hport = host_port.split(':')
host = hport[0].strip()
if host:
try:
port = int(hport[1])
except:
user = host
uprox = hport[1].split('@')
password = uprox[0]
host = uprox[1]
port = int(hport[2])
if port and host:
port = str(port)
(lang_country, modifier ) = locale.getlocale()
lang = lang_country.split('_')[0]
prefs.write(MOZJS % vars() )
prefs.close()
except:
try: # trying to remove pref.js in case of proxy change.
os.remove(os.path.join(MOZEMBED_SUBPATH, "prefs.js"))
except:
pass
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# HtmlView # HtmlView
@ -474,49 +356,18 @@ class HtmlView(NavigationView):
#top widget at the top #top widget at the top
self.box.pack_start(self.top_widget(), False, False, 0 ) self.box.pack_start(self.top_widget(), False, False, 0 )
#web page under it in a scrolled window #web page under it in a scrolled window
self.table = Gtk.Table(1, 1, False) #self.table = Gtk.Table(1, 1, False)
frames = Gtk.HBox(False, 4)
self.frames = frames
self.toolkit = TOOLKIT = get_toolkits() self.toolkit = TOOLKIT = get_toolkits()
if (get_toolkits() == (WEBKIT+MOZILLA)): self.renderer = RendererWebkit()
# The two toolkits ( webkit and mozilla ) are available. self.frames = Gtk.HBox(False, 4)
# The user is able to choose what toolkit he will use. frame = Gtk.ScrolledWindow(None, None)
try: frame.set_shadow_type(Gtk.ShadowType.NONE)
# preferences.webkit is useful only in geoview; frame.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
# not in htmlview. frame.add(self.renderer.get_window())
if self._config.get('preferences.webkit'): self.frames.set_homogeneous(False)
TOOLKIT = WEBKIT self.frames.pack_start(frame, True, True, 0)
else: self.frames.pack_end(self.filter, False, False, 0)
TOOLKIT = MOZILLA self.box.pack_start(self.frames, True, True, 0)
except:
self.toolkit = "html"
if self.toolkit == "html":
_LOG.debug("We are native htmlrenderer.")
frame = Gtk.ScrolledWindow(None, None)
frame.set_shadow_type(Gtk.ShadowType.NONE)
frame.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
frame.add_with_viewport(self.table)
else:
_LOG.debug("We are called by geoview.")
frame = Gtk.Frame()
frame.set_size_request(100,100)
frame.add(self.table)
#self.bootstrap_handler = self.box.connect("size-request",
# self.init_parent_signals_for_map)
self.table.get_parent().set_shadow_type(Gtk.ShadowType.NONE)
self.table.set_row_spacings(1)
self.table.set_col_spacings(0)
if (TOOLKIT == MOZILLA) :
_LOG.debug("We use gtkmozembed")
self.renderer = RendererMozilla()
else:
_LOG.debug("We use webkit")
self.renderer = RendererWebkit()
self.table.add(self.renderer.get_window())
frames.set_homogeneous(False)
frames.pack_start(frame, True, True, 0)
frames.pack_end(self.filter, False, False, 0)
self.box.pack_start(frames, True, True, 0)
# this is used to activate the back and forward button # this is used to activate the back and forward button
# from the renderer class. # from the renderer class.
self.renderer.fct = lambda: self.set_button_sensitivity self.renderer.fct = lambda: self.set_button_sensitivity