Remake WebView on navigation + enhancements
This commit is contained in:
parent
b7d7d66f0b
commit
275005f246
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
Loading…
Reference in New Issue