Skip to content

Commit 2eb92d0

Browse files
committed
Fix issue with pywebview 5.3+ and navigation redirection
1 parent 31eac06 commit 2eb92d0

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

emailproxy.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
__author__ = 'Simon Robinson'
77
__copyright__ = 'Copyright (c) 2024 Simon Robinson'
88
__license__ = 'Apache 2.0'
9-
__version__ = '2024-10-21' # ISO 8601 (YYYY-MM-DD)
9+
__version__ = '2024-11-06' # ISO 8601 (YYYY-MM-DD)
1010
__package_version__ = '.'.join([str(int(i)) for i in __version__.split('-')]) # for pyproject.toml usage only
1111

1212
import abc
@@ -2424,13 +2424,15 @@ class ProvisionalNavigationBrowserDelegate:
24242424
# callbacks, but using that means that window.get_current_url() returns None when the loaded handler is called
24252425
def webView_didStartProvisionalNavigation_(self, web_view, _nav):
24262426
# called when a user action (i.e., clicking our external authorisation mode submit button) redirects locally
2427-
browser_view_instance = webview.platforms.cocoa.BrowserView.get_instance('webkit', web_view)
2427+
browser_view_instance = webview.platforms.cocoa.BrowserView.get_instance(
2428+
ProvisionalNavigationBrowserDelegate.pywebview_attr, web_view)
24282429
if browser_view_instance:
24292430
browser_view_instance.loaded.set()
24302431

24312432
def webView_didReceiveServerRedirectForProvisionalNavigation_(self, web_view, _nav):
24322433
# called when the server initiates a local redirect
2433-
browser_view_instance = webview.platforms.cocoa.BrowserView.get_instance('webkit', web_view)
2434+
browser_view_instance = webview.platforms.cocoa.BrowserView.get_instance(
2435+
ProvisionalNavigationBrowserDelegate.pywebview_attr, web_view)
24342436
if browser_view_instance:
24352437
browser_view_instance.loaded.set()
24362438

@@ -2440,7 +2442,7 @@ def performKeyEquivalent_(self, event):
24402442
event.keyCode() == 12 and self.window().firstResponder():
24412443
self.window().performClose_(event)
24422444
return True
2443-
return webview.platforms.cocoa.BrowserView.WebKitHost.performKeyEquivalentBase_(self, event)
2445+
return False
24442446

24452447
if sys.platform == 'darwin':
24462448
# noinspection PyUnresolvedReferences
@@ -2942,18 +2944,16 @@ def handle_authorisation_windows(self):
29422944
# pywebview window can get into a state in which http://localhost navigation, rather than failing, just hangs
29432945
# noinspection PyPackageRequirements
29442946
import webview.platforms.cocoa
2947+
pywebview_version = packaging.version.Version(importlib_metadata.version('pywebview'))
2948+
ProvisionalNavigationBrowserDelegate.pywebview_attr = 'webkit' if pywebview_version < packaging.version.Version(
2949+
'5.3') else 'webview'
29452950
setattr(webview.platforms.cocoa.BrowserView.BrowserDelegate, 'webView_didStartProvisionalNavigation_',
29462951
ProvisionalNavigationBrowserDelegate.webView_didStartProvisionalNavigation_)
29472952
setattr(webview.platforms.cocoa.BrowserView.BrowserDelegate, 'webView_didReceiveServerRedirectForProvisional'
29482953
'Navigation_',
29492954
ProvisionalNavigationBrowserDelegate.webView_didReceiveServerRedirectForProvisionalNavigation_)
2950-
try:
2951-
setattr(webview.platforms.cocoa.BrowserView.WebKitHost, 'performKeyEquivalentBase_',
2952-
webview.platforms.cocoa.BrowserView.WebKitHost.performKeyEquivalent_)
2953-
setattr(webview.platforms.cocoa.BrowserView.WebKitHost, 'performKeyEquivalent_',
2954-
ProvisionalNavigationBrowserDelegate.performKeyEquivalent_)
2955-
except TypeError:
2956-
pass
2955+
setattr(webview.platforms.cocoa.BrowserView.WebKitHost, 'performKeyEquivalent_',
2956+
ProvisionalNavigationBrowserDelegate.performKeyEquivalent_)
29572957

29582958
# also needed only on macOS because otherwise closing the last remaining webview window exits the application
29592959
dummy_window = webview.create_window('%s hidden (dummy) window' % APP_NAME, html='<html></html>', hidden=True)

0 commit comments

Comments
 (0)