qt_web_browser: Focus on the first link element
Focusing on the first link element fixes element navigation upon loading the web applet in games such as Super Mario Odyssey
This commit is contained in:
parent
d6c799494c
commit
3109d1c3db
|
@ -107,6 +107,7 @@ void QtNXWebEngineView::LoadLocalWebPage(const std::string& main_url,
|
||||||
is_local = true;
|
is_local = true;
|
||||||
|
|
||||||
LoadExtractedFonts();
|
LoadExtractedFonts();
|
||||||
|
FocusFirstLinkElement();
|
||||||
SetUserAgent(UserAgent::WebApplet);
|
SetUserAgent(UserAgent::WebApplet);
|
||||||
SetFinished(false);
|
SetFinished(false);
|
||||||
SetExitReason(Service::AM::Applets::WebExitReason::EndButtonPressed);
|
SetExitReason(Service::AM::Applets::WebExitReason::EndButtonPressed);
|
||||||
|
@ -121,6 +122,7 @@ void QtNXWebEngineView::LoadExternalWebPage(const std::string& main_url,
|
||||||
const std::string& additional_args) {
|
const std::string& additional_args) {
|
||||||
is_local = false;
|
is_local = false;
|
||||||
|
|
||||||
|
FocusFirstLinkElement();
|
||||||
SetUserAgent(UserAgent::WebApplet);
|
SetUserAgent(UserAgent::WebApplet);
|
||||||
SetFinished(false);
|
SetFinished(false);
|
||||||
SetExitReason(Service::AM::Applets::WebExitReason::EndButtonPressed);
|
SetExitReason(Service::AM::Applets::WebExitReason::EndButtonPressed);
|
||||||
|
@ -364,6 +366,17 @@ void QtNXWebEngineView::LoadExtractedFonts() {
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QtNXWebEngineView::FocusFirstLinkElement() {
|
||||||
|
QWebEngineScript focus_link_element;
|
||||||
|
|
||||||
|
focus_link_element.setName(QStringLiteral("focus_link_element.js"));
|
||||||
|
focus_link_element.setSourceCode(QString::fromStdString(FOCUS_LINK_ELEMENT_SCRIPT));
|
||||||
|
focus_link_element.setWorldId(QWebEngineScript::MainWorld);
|
||||||
|
focus_link_element.setInjectionPoint(QWebEngineScript::Deferred);
|
||||||
|
focus_link_element.setRunsOnSubFrames(true);
|
||||||
|
default_profile->scripts()->insert(focus_link_element);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QtWebBrowser::QtWebBrowser(GMainWindow& main_window) {
|
QtWebBrowser::QtWebBrowser(GMainWindow& main_window) {
|
||||||
|
|
|
@ -161,6 +161,9 @@ private:
|
||||||
/// Loads the extracted fonts using JavaScript.
|
/// Loads the extracted fonts using JavaScript.
|
||||||
void LoadExtractedFonts();
|
void LoadExtractedFonts();
|
||||||
|
|
||||||
|
/// Brings focus to the first available link element.
|
||||||
|
void FocusFirstLinkElement();
|
||||||
|
|
||||||
InputCommon::InputSubsystem* input_subsystem;
|
InputCommon::InputSubsystem* input_subsystem;
|
||||||
|
|
||||||
std::unique_ptr<UrlRequestInterceptor> url_interceptor;
|
std::unique_ptr<UrlRequestInterceptor> url_interceptor;
|
||||||
|
|
|
@ -73,6 +73,12 @@ constexpr char LOAD_NX_FONT[] = R"(
|
||||||
})();
|
})();
|
||||||
)";
|
)";
|
||||||
|
|
||||||
|
constexpr char FOCUS_LINK_ELEMENT_SCRIPT[] = R"(
|
||||||
|
if (document.getElementsByTagName("a").length > 0) {
|
||||||
|
document.getElementsByTagName("a")[0].focus();
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
|
||||||
constexpr char GAMEPAD_SCRIPT[] = R"(
|
constexpr char GAMEPAD_SCRIPT[] = R"(
|
||||||
window.addEventListener("gamepadconnected", function(e) {
|
window.addEventListener("gamepadconnected", function(e) {
|
||||||
console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.",
|
console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.",
|
||||||
|
|
Reference in New Issue