handle new pages better
This commit is contained in:
parent
f22e7b1a35
commit
e886733634
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Reference in a new issue