Merge pull request #6671 from jls47/master
applets/web: Addressing QT Navigation issues in Linux
This commit is contained in:
		| @@ -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); | ||||||
| @@ -208,7 +210,7 @@ void QtNXWebEngineView::HandleWindowFooterButtonPressedOnce() { | |||||||
|         if (input_interpreter->IsButtonPressedOnce(button)) { |         if (input_interpreter->IsButtonPressedOnce(button)) { | ||||||
|             page()->runJavaScript( |             page()->runJavaScript( | ||||||
|                 QStringLiteral("yuzu_key_callbacks[%1] == null;").arg(static_cast<u8>(button)), |                 QStringLiteral("yuzu_key_callbacks[%1] == null;").arg(static_cast<u8>(button)), | ||||||
|                 [&](const QVariant& variant) { |                 [this, button](const QVariant& variant) { | ||||||
|                     if (variant.toBool()) { |                     if (variant.toBool()) { | ||||||
|                         switch (button) { |                         switch (button) { | ||||||
|                         case HIDButton::A: |                         case HIDButton::A: | ||||||
| @@ -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
	
	Block a user