handle new pages better

This commit is contained in:
Izalia Mae 2023-01-29 09:59:34 -05:00
parent f22e7b1a35
commit e886733634
2 changed files with 53 additions and 62 deletions

View file

@ -223,6 +223,7 @@ class WebTab(BuilderBase, Gtk.Box):
elif action == 'stop':
self.webview.stop_loading()
self.set_button_state(False)
elif action == 'home':
with self.db.session as s:
@ -354,12 +355,13 @@ class WebTab(BuilderBase, Gtk.Box):
self.set_icon_from_resource('navbar-go-icon', 'go.svg', 24)
def set_button_state(self):
def set_button_state(self, loading=None):
#self['navbar-url'].set_text(self.url)
#self['navbar-stop'].set_sensitive(not self.idle)
#self['navbar-refresh'].set_sensitive(self.idle)
loading = self.webview.is_loading()
if loading == None:
loading = self.webview.is_loading()
self['navbar-stop'].set_sensitive(loading)
self['navbar-refresh'].set_sensitive(not loading)

View file

@ -34,7 +34,6 @@ class WebviewHandler(ComponentBase):
connect(self.webview, 'enter-fullscreen', self.handle_fullscreen, 'enter')
connect(self.webview, 'leave-fullscreen', self.handle_fullscreen, 'exit')
#connect(self.webview, 'insecure-content-detected', self.handle_insecure_content, original_args=True)
connect(self.webview, 'load-changed', self.handle_load_changed, original_args=True)
connect(self.webview, 'load-failed-with-tls-errors', self.handle_tls_error, original_args=True)
connect(self.webview, 'mouse-target-changed', self.handle_mouse_hover, original_args=True)
connect(self.webview, 'resource-load-started', self.handle_resource_load, original_args=True)
@ -64,6 +63,11 @@ class WebviewHandler(ComponentBase):
connect(self.webview.get_back_forward_list(), 'changed', self.handle_history_change, original_args=True)
@property
def context(self):
return self.tab.context
@property
def inspector(self):
return self.webview.get_inspector()
@ -316,51 +320,6 @@ class WebviewHandler(ComponentBase):
self.inspector_open = True
def handle_load_changed(self, webview, event):
url = self.tab.url
if event.value_nick == 'started':
self.tab._data.favicon = False
elif event.value_nick == 'committed':
self.tab.set_button_state()
self.tab.search_action('close')
if not url:
return
#self.tab.set_favicon_from_cache(url)
## Only enable the page cache for http(s) urls
self.settings.set('enable-page-cache', url.proto in ['http', 'https'])
with self.app.db.session as s:
permissions = s.get_permission(url.hostname())
## This only prevents non-muted media from playing :/
self.settings.set('media-playback-requires-user-gesture', not permissions.autoplay)
elif event.value_nick == 'redirected':
pass
elif event.value_nick == 'finished':
if self.window.active_tab == self.tab:
self.window.set_button_state(self.tab.id)
self.handle_set_favicon()
self.tab.set_button_state()
if not url:
return
if url.proto == 'https':
FediverseCheck(None, self.tab, url).start()
elif url.proto in ['http', 'sftp', 'filetp']:
with self.app.db.session as s:
s.put_history_from_tab(self.tab)
def handle_load_failed(self, webview, event, uri, error):
logging.error('Load failed:', uri, error.value_nick)
@ -371,9 +330,6 @@ class WebviewHandler(ComponentBase):
self.tab['navbar-url'].set_progress_fraction(0 if progress == 1.0 else progress)
if finished:
self.tab.set_button_state()
def handle_mouse_hover(self, webview, hit, _):
link_url = hit.get_property('link-uri')
@ -381,16 +337,31 @@ class WebviewHandler(ComponentBase):
def handle_resource_load(self, webview, resource, request):
resource.connect('failed', self.handle_resource_failed)
resource.connect('finished', self.handle_resource_finished)
if (url := request.get_uri()):
url = Url(url)
if url == self.tab.url:
self.tab._data.favicon = False
self.tab.set_button_state()
self.tab.search_action('close')
if url:
## Only enable the page cache for http(s) urls
self.settings.set('enable-page-cache', url.proto in ['http', 'https'])
with self.app.db.session as s:
permissions = s.get_permission(url.hostname())
## This only prevents non-muted media from playing :/
self.settings.set('media-playback-requires-user-gesture', not permissions.autoplay)
resource.connect('failed', self.handle_resource_failed, url)
resource.connect('finished', self.handle_resource_finished, url)
def handle_resource_failed(self, resource, error):
try:
url = Url(resource.get_uri())
except Exception as e:
print(f'{class_name(e)}: {e}')
def handle_resource_failed(self, resource, error, url):
if not url:
logging.warning('No url for error:', error.domain, error.message)
return
if error.domain == 'WebKitPolicyError' and 'interrupted' in error.message.lower():
@ -411,8 +382,26 @@ class WebviewHandler(ComponentBase):
- message: {error.message}''')
def handle_resource_finished(self, resource):
return
def handle_resource_finished(self, resource, url):
if url != self.tab.url:
return
if self.window.active_tab == self.tab:
self.window.set_button_state(self.tab.id)
self.handle_set_favicon()
self.tab.set_button_state(False)
if not url:
logging.verbose('No url for finished resource')
return
if url.proto == 'https':
FediverseCheck(None, self.tab, url).start()
elif url.proto in ['http', 'sftp', 'filetp']:
with self.app.db.session as s:
s.put_history_from_tab(self.tab)
def handle_new_window(self, webview, action):
@ -572,7 +561,7 @@ class WebviewHandler(ComponentBase):
with self.db.session as s:
if s.get_config('allow_local_unsigned') and url.address.is_type('local', 'loopback', 'private'):
self.tab.context.allow_tls_certificate_for_host(cert, url.hostname())
self.tab.context.allow_tls_certificate_for_host(cert, url.host)
webview.load_uri(url)
return True