Remake WebView on navigation + enhancements

This commit is contained in:
Fierelier 2023-01-10 19:38:24 +01:00
parent b7d7d66f0b
commit 275005f246
5 changed files with 49 additions and 17 deletions

0
gawk.py Normal file → Executable file
View File

View File

@ -5,7 +5,11 @@ windows = []
import gi
gi.require_version("Gtk","3.0")
from gi.repository import Gtk
gi.require_version("WebKit2","4.0")
from gi.repository import Gtk,WebKit2
def createWebView(*args,**kwargs):
return WebKit2.WebView(*args,**kwargs)
def init():
global event

View File

@ -9,11 +9,14 @@ if len(sys.argv) < 2:
sys.argv.append("about:blank")
def resizeHandler(obj,event):
onResize(obj,event.width,event.height)
if event.width != obj.cWidth or event.height != obj.cHeight:
obj.cWidth = event.width
obj.cHeight = event.height
onResize(obj)
def onResize(obj,width,height):
def onResize(obj):
for webView in obj.cWebViews:
webView.set_size_request(width,height)
webView.set_size_request(obj.cWidth,obj.cHeight)
def onClose(obj):
browser.windows.remove(obj.cParent)
@ -22,6 +25,17 @@ def onClose(obj):
if len(browser.windows) == 0:
Gtk.main_quit()
def addWebView(window,index = -1):
webView = browser.createWebView()
if index == -1:
window.cWebViews.append(webView)
else:
window.cWebViews[index] = webView
window.cMain.add(webView)
browser.event.trigger("webview:created",webView)
return webView
def create(url = sys.argv[1]):
self = mfp.Bunch()
obj = Gtk.Window()
@ -35,21 +49,17 @@ def create(url = sys.argv[1]):
obj.cParent = self
obj.set_title(browser.name)
obj.resize(640,480)
obj.cWidth = 640
obj.cHeight = 480
obj.resize(obj.cWidth,obj.cHeight)
obj.connect("configure-event",resizeHandler)
obj.connect("destroy",onClose)
webView = WebKit2.WebView()
webView.cWindow = obj
browser.event.trigger("webview:created",webView)
obj.cWebViews = []
obj.cWebViews.append(webView)
obj.cMain.add(webView)
webView = addWebView(obj)
webView.load_uri(url)
obj.set_focus(webView)
onResize(obj,640,480)
onResize(obj)
obj.show_all()
return self

View File

@ -3,8 +3,12 @@ gi.require_version("Gtk","3.0")
gi.require_version("WebKit2","4.0")
from gi.repository import Gtk,WebKit2
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)
@ -16,15 +20,29 @@ def onResize(obj,width,height):
def doGo(button):
window = button.get_toplevel()
webView = window.cStatus.webView
mainWindow = webView.get_toplevel()
webViewIndex = mainWindow.cWebViews.index(webView)
oldUri = webView.get_uri()
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 = browserWindow.addWebView(mainWindow,webViewIndex)
browserWindow.onResize(mainWindow)
mainWindow.show_all()
uri = uri.split(":",1)
if len(uri) < 2: uri = [defaultProtocol] + uri
window.cStatus.webView.load_uri(":".join(uri))
webView.load_uri(":".join(uri))
window.close()
def goAction(status):
obj = Gtk.Window()
obj.set_title("Go... (" +status.webView.cWindow.get_title()+ ")")
obj.set_title("Go ... (" +status.webView.get_toplevel().get_title()+ ")")
obj.resize(320,80)
obj.connect("configure-event",resizeHandler)

View File

@ -4,7 +4,7 @@ browser = mfp.require("browser")
def onTitleChanged(obj,prop):
title = obj.get_title()
if title == "": title = obj.get_uri()
window = obj.cWindow
window = obj.get_toplevel()
if len(window.cWebViews) > 1:
title = "Multiple pages"