Fix url == None exceptions, more elegant argument parsing, unified WebView destruction handler

This commit is contained in:
Fierelier 2023-03-03 12:14:07 +01:00
parent d4b5416b3f
commit d47a43eca2
5 changed files with 31 additions and 17 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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

View File

@ -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()

View File

@ -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()