mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-08 09:55:32 +00:00
87 lines
3 KiB
Python
87 lines
3 KiB
Python
#!/usr/bin/python3
|
|
|
|
import logging
|
|
import os
|
|
import webbrowser
|
|
|
|
import gi
|
|
|
|
gi.require_version('Gtk', '3.0')
|
|
gi.require_version('WebKit2', '4.1')
|
|
from gi.repository import Gtk, WebKit2
|
|
|
|
from keyman_config import _
|
|
from keyman_config.accelerators import bind_accelerator, init_accel
|
|
|
|
# NOTE: WebKit2 is not able to load XHTML files nor files with an encoding other
|
|
# than ASCII or UTF-8
|
|
|
|
|
|
class WelcomeView(Gtk.Dialog):
|
|
|
|
def __init__(self, parent, welcomeurl, keyboardname, newlyInstalled=False):
|
|
self.accelerators = None
|
|
if newlyInstalled:
|
|
kbtitle = _("{name} installed").format(name=keyboardname)
|
|
else:
|
|
kbtitle = keyboardname
|
|
self.welcomeurl = welcomeurl
|
|
Gtk.Dialog.__init__(self, kbtitle, parent)
|
|
init_accel(self)
|
|
|
|
s = Gtk.ScrolledWindow()
|
|
self.webview = WebKit2.WebView()
|
|
self.webview.connect("decide-policy", self.doc_policy)
|
|
self.webview.load_uri(welcomeurl)
|
|
s.add(self.webview)
|
|
|
|
self.get_content_area().pack_start(s, True, True, 0)
|
|
|
|
hbox = Gtk.Box(spacing=12)
|
|
self.get_content_area().pack_start(hbox, False, False, 6)
|
|
|
|
button = Gtk.Button.new_with_mnemonic(_("Open in _Web browser"))
|
|
button.connect("clicked", self.on_openweb_clicked)
|
|
button.set_tooltip_text(_("Open in the default web browser to do things like printing"))
|
|
hbox.pack_start(button, False, False, 12)
|
|
|
|
button = Gtk.Button.new_with_mnemonic(_("_OK"))
|
|
button.connect("clicked", self.on_ok_clicked)
|
|
hbox.pack_end(button, False, False, 12)
|
|
bind_accelerator(self.accelerators, button, '<Control>w')
|
|
|
|
self.resize(800, 600)
|
|
self.show_all()
|
|
|
|
def doc_policy(self, web_view, decision, decision_type):
|
|
logging.info("Checking policy")
|
|
logging.debug("received policy decision request of type: {0}".format(decision_type.value_name))
|
|
if decision_type in [
|
|
WebKit2.PolicyDecisionType.NAVIGATION_ACTION,
|
|
WebKit2.PolicyDecisionType.NEW_WINDOW_ACTION,
|
|
]:
|
|
nav_action = decision.get_navigation_action()
|
|
request = nav_action.get_request()
|
|
uri = request.get_uri()
|
|
logging.debug("nav request is for uri %s", uri)
|
|
if not uri.startswith("file://"):
|
|
logging.debug("opening external uri %s in webbrowser", uri)
|
|
webbrowser.open(uri)
|
|
decision.ignore()
|
|
return True
|
|
elif ".htm" not in uri:
|
|
cmd = f'xdg-open {uri}'
|
|
logging.debug('opening uri in default app: %s', cmd)
|
|
os.system(cmd)
|
|
decision.ignore()
|
|
return True
|
|
return False
|
|
|
|
def on_openweb_clicked(self, button):
|
|
logging.info("\"Open in Web browser\" button was clicked")
|
|
webbrowser.open(self.welcomeurl)
|
|
|
|
def on_ok_clicked(self, button):
|
|
logging.info("Closing welcome window")
|
|
self.response(Gtk.ResponseType.OK)
|
|
self.close()
|