Fix url == None exceptions, more elegant argument parsing, unified WebView destruction handler
This commit is contained in:
parent
d4b5416b3f
commit
d47a43eca2
|
@ -7,17 +7,29 @@ import gi
|
|||
gi.require_version("Gtk","3.0")
|
||||
gi.require_version("WebKit2","4.0")
|
||||
from gi.repository import Gtk,WebKit2
|
||||
import sys
|
||||
|
||||
def createWebView(*args,relatedWebView = None,**kwargs):
|
||||
if relatedWebView != None:
|
||||
return WebKit2.WebView.new_with_related_view(relatedWebView)
|
||||
else:
|
||||
return WebKit2.WebView.new()
|
||||
destroyedViews = []
|
||||
|
||||
def unrefWebView(webView): # yeaah, this actually references a webView just... yes.
|
||||
destroyedViews.append(webViews) # not keeping a reference makes gtk sad.. i should probably report this.
|
||||
if len(destroyedViews) > 100: destroyedViews.pop(0)
|
||||
|
||||
def createWebView(*args,relatedWebView = None,webView = None,**kwargs):
|
||||
if webView == None:
|
||||
if relatedWebView != None:
|
||||
webView = WebKit2.WebView.new_with_related_view(relatedWebView)
|
||||
else:
|
||||
webView = WebKit2.WebView.new()
|
||||
webView.connect("destroy",unrefWebView)
|
||||
return webView
|
||||
|
||||
def init():
|
||||
global event
|
||||
event = module.require("event.py")
|
||||
|
||||
def start():
|
||||
windows.append(mfp.require("browser").module.require(mfp.p("window","browser.py")).create())
|
||||
url = None
|
||||
if len(sys.argv) > 1: url = sys.argv[1]
|
||||
windows.append(module.require(mfp.p("window","browser.py")).create(url))
|
||||
Gtk.main()
|
|
@ -5,8 +5,6 @@ gi.require_version("WebKit2","4.0")
|
|||
from gi.repository import Gtk,WebKit2
|
||||
|
||||
browser = mfp.require("browser")
|
||||
if len(sys.argv) < 2:
|
||||
sys.argv.append("about:blank")
|
||||
|
||||
def resizeHandler(obj,event):
|
||||
if event.width != obj.cWidth or event.height != obj.cHeight:
|
||||
|
@ -34,7 +32,7 @@ def addWebView(window,webView,index = -1):
|
|||
window.cMain.add(webView)
|
||||
browser.event.trigger("webview:created",webView)
|
||||
|
||||
def create(url = sys.argv[1],webViews = None):
|
||||
def create(url = None,webViews = None):
|
||||
self = mfp.Bunch()
|
||||
obj = Gtk.Window()
|
||||
self.obj = obj
|
||||
|
@ -58,7 +56,8 @@ def create(url = sys.argv[1],webViews = None):
|
|||
if len(webViews) < 1:
|
||||
webViews.append(browser.createWebView())
|
||||
addWebView(obj,webViews[0])
|
||||
webViews[0].load_uri(url)
|
||||
if url != None:
|
||||
webViews[0].load_uri(url)
|
||||
else:
|
||||
for webView in webViews:
|
||||
addWebView(obj,webView)
|
||||
|
|
|
@ -4,10 +4,12 @@ from gi.repository import Gtk,WebKit2
|
|||
|
||||
browser = mfp.require("browser")
|
||||
contentManager = WebKit2.UserContentManager.new()
|
||||
oldCreateWebView = browser.createWebView
|
||||
|
||||
def f(*args,relatedWebView = None,**kwargs):
|
||||
if relatedWebView != None:
|
||||
return WebKit2.WebView.new_with_related_view(relatedWebView)
|
||||
webView = WebKit2.WebView.new_with_related_view(relatedWebView)
|
||||
else:
|
||||
return WebKit2.WebView.new_with_user_content_manager(contentManager)
|
||||
webView = WebKit2.WebView.new_with_user_content_manager(contentManager)
|
||||
return oldCreateWebView(*args,relatedWebView=relatedWebView,webView=webView,**kwargs)
|
||||
browser.createWebView = f
|
|
@ -7,8 +7,6 @@ browser = mfp.require("browser")
|
|||
browserWindow = browser.module.require(mfp.p("window","browser.py"))
|
||||
defaultProtocol = "http"
|
||||
|
||||
destroyedViews = []
|
||||
|
||||
def resizeHandler(obj,event):
|
||||
onResize(obj,event.width,event.height)
|
||||
|
||||
|
@ -25,11 +23,10 @@ def doGo(button):
|
|||
webViewIndex = mainWindow.cWebViews.index(webView)
|
||||
|
||||
oldUri = webView.get_uri()
|
||||
if oldUri == None: oldUri = ""
|
||||
uri = window.cUrlBox.get_text()
|
||||
|
||||
if oldUri == uri or oldUri.split("#",1)[0] != uri.split("#",1)[0]: # If the URL is 100% the same, or the URL without the hash is different.
|
||||
destroyedViews.append(webView) # not keeping a reference makes gtk sad.. i should probably report this.
|
||||
if len(destroyedViews) > 10: destroyedViews.pop(0)
|
||||
webView.destroy()
|
||||
webView = browser.createWebView()
|
||||
browserWindow.addWebView(mainWindow,webView,webViewIndex)
|
||||
|
@ -54,7 +51,9 @@ def goAction(status):
|
|||
|
||||
obj.cStatus = status
|
||||
obj.cUrlBox = Gtk.Entry()
|
||||
obj.cUrlBox.set_text(status.webView.get_uri())
|
||||
url = status.webView.get_uri()
|
||||
if url == None: url = ""
|
||||
obj.cUrlBox.set_text(url)
|
||||
obj.cUrlBox.connect("activate",doGo)
|
||||
obj.cMain.add(obj.cUrlBox)
|
||||
obj.cGoButton = Gtk.Button()
|
||||
|
|
|
@ -10,11 +10,13 @@ fh = open(os.path.join(config.paths[0],"history.txt"),"a")
|
|||
|
||||
def onUrlChanged(obj,_):
|
||||
url = obj.get_uri()
|
||||
if url == None: return
|
||||
fh.write("\n" + url)
|
||||
fh.flush()
|
||||
|
||||
def onTitleChanged(obj,_):
|
||||
url = obj.get_uri()
|
||||
if url == None: return
|
||||
fh.write("\n" + url + " " + obj.get_title())
|
||||
fh.flush()
|
||||
|
||||
|
|
Loading…
Reference in New Issue