Compare commits

...

7 Commits

Author SHA1 Message Date
Fierelier 1816edd50f Make new windows open in a separate process 2023-03-02 23:38:13 +01:00
Fierelier 967cfc67de Add addon: singleProcess 2023-03-02 23:37:53 +01:00
Fierelier a575b5f4cf Add labels to addons list 2023-03-02 23:37:22 +01:00
Fierelier 68c96f9fcc Remove useless mfp.require 2023-03-02 23:18:52 +01:00
Fierelier c04c2ccc08 Add addon: newWindow (Allow pages to open new windows) 2023-03-02 23:18:37 +01:00
Fierelier da063b736c Add support for creating related WebViews 2023-03-02 23:17:58 +01:00
Fierelier 3a1832923d Add support for creating windows with custom webviews 2023-03-02 23:16:25 +01:00
8 changed files with 72 additions and 15 deletions

View File

@ -8,9 +8,11 @@ gi.require_version("Gtk","3.0")
gi.require_version("WebKit2","4.0")
from gi.repository import Gtk,WebKit2
def createWebView(*args,**kwargs):
webView = WebKit2.WebView.new()
return webView
def createWebView(*args,relatedWebView = None,**kwargs):
if relatedWebView != None:
return WebKit2.WebView.new_with_related_view(relatedWebView)
else:
return WebKit2.WebView.new()
def init():
global event

View File

@ -25,8 +25,7 @@ def onClose(obj):
if len(browser.windows) == 0:
Gtk.main_quit()
def addWebView(window,index = -1):
webView = browser.createWebView()
def addWebView(window,webView,index = -1):
if index == -1:
window.cWebViews.append(webView)
else:
@ -34,9 +33,8 @@ def addWebView(window,index = -1):
window.cMain.add(webView)
browser.event.trigger("webview:created",webView)
return webView
def create(url = sys.argv[1]):
def create(url = sys.argv[1],webViews = None):
self = mfp.Bunch()
obj = Gtk.Window()
self.obj = obj
@ -56,8 +54,16 @@ def create(url = sys.argv[1]):
obj.connect("destroy",onClose)
obj.cWebViews = []
webView = addWebView(obj)
webView.load_uri(url)
if webViews == None: webViews = []
if len(webViews) < 1:
webViews.append(browser.createWebView())
addWebView(obj,webViews[0])
webViews[0].load_uri(url)
else:
for webView in webViews:
addWebView(obj,webView)
webView = webViews[0]
obj.set_focus(webView)
onResize(obj)
obj.show_all()

View File

@ -1,19 +1,27 @@
# Base
userModules
title
favicon
history
newWindow
# Settings
settings
settingsNoHardwareAccel
settingsPerformanceCPU
settingsPerformanceRAM
# Content
content
contentStylePerformance01
contentStylePerformance02
#contentStylePerformance03
#contentStylePerformance04
# Context menu
contextMenu
contextMenuWindow
contextMenuGo
contextMenuGo
# Overrides
#singleProcess

View File

@ -5,7 +5,9 @@ from gi.repository import Gtk,WebKit2
browser = mfp.require("browser")
contentManager = WebKit2.UserContentManager.new()
def f(*args,**kwargs):
webView = WebKit2.WebView.new_with_user_content_manager(contentManager)
return webView
def f(*args,relatedWebView = None,**kwargs):
if relatedWebView != None:
return WebKit2.WebView.new_with_related_view(relatedWebView)
else:
return WebKit2.WebView.new_with_user_content_manager(contentManager)
browser.createWebView = f

View File

@ -31,7 +31,8 @@ def doGo(button):
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)
webView = browser.createWebView()
browserWindow.addWebView(mainWindow,webView,webViewIndex)
browserWindow.onResize(mainWindow)
mainWindow.show_all()

View File

@ -1,6 +1,6 @@
def newAction(status):
browser = mfp.require("browser")
browser.windows.append(mfp.require("browser").module.require(mfp.p("window","browser.py")).create("about:blank"))
browser.windows.append(browser.module.require(mfp.p("window","browser.py")).create("about:blank"))
def addNew(status):
status.addon.addItem(status,"New window",newAction)

View File

@ -0,0 +1,22 @@
import gi
gi.require_version("WebKit2","4.0")
from gi.repository import WebKit2
browser = mfp.require("browser")
eventHandler = mfp.Bunch()
def decidePolicy(webView,decision,decisionType):
if decisionType == WebKit2.PolicyDecisionType.NEW_WINDOW_ACTION:
webView.cNewWindow = True
decision.use()
return False
def create(webView,navigationAction):
newWebView = browser.createWebView()
browser.windows.append(browser.module.require(mfp.p("window","browser.py")).create(webViews=[newWebView]))
newWebView.load_request(navigationAction.get_request())
def onWebviewCreated(webView):
webView.connect("decide-policy",decidePolicy)
webView.connect("create",create)
eventHandler["webview:created"] = onWebviewCreated

View File

@ -0,0 +1,16 @@
import gi
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"))
oldCreateWebView = browser.createWebView
def f(*args,relatedWebView = None,**kwargs):
if len(browser.windows) < 1:
return oldCreateWebView(*args,relatedWebView=relatedWebView,**kwargs)
for window in browser.windows:
for webview in window.obj.cWebViews:
return oldCreateWebView(*args,relatedWebView=webview,**kwargs)
browser.createWebView = f