diff options
author | Michael BrĂ¼ning <michael.bruning@qt.io> | 2019-01-18 16:26:29 +0100 |
---|---|---|
committer | Michael BrĂ¼ning <michael.bruning@qt.io> | 2019-01-18 16:26:29 +0100 |
commit | 819182302d5bdaba41efb68ef3c533b2acc19ae1 (patch) | |
tree | cab7a922998bc5d6e7f42b537b0c0ce1b69111f6 /src | |
parent | 0763b7c40d3490250f5bca1e0029cefba635305c (diff) | |
parent | 3f7ea91e23d82e676aeaf157736e25cf54e5ec6b (diff) |
Merge remote-tracking branch 'origin/5.12' into dev
Conflicts:
.qmake.conf
src/core/net/network_delegate_qt.cpp
src/core/profile_io_data_qt.cpp
src/core/web_engine_context.h
tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
Change-Id: Id98e3f52f548ceb5b68abd80aedd6ae59db72cc0
Diffstat (limited to 'src')
-rw-r--r-- | src/core/api/qwebengineurlrequestinfo.cpp | 3 | ||||
-rw-r--r-- | src/core/browser_main_parts_qt.cpp | 4 | ||||
-rw-r--r-- | src/core/configure.json | 12 | ||||
-rw-r--r-- | src/core/core_chromium.pri | 2 | ||||
-rw-r--r-- | src/core/download_manager_delegate_qt.cpp | 16 | ||||
-rw-r--r-- | src/core/net/network_delegate_qt.cpp | 14 | ||||
-rw-r--r-- | src/core/profile_adapter.cpp | 4 | ||||
-rw-r--r-- | src/core/profile_io_data_qt.cpp | 11 | ||||
-rw-r--r-- | src/core/profile_io_data_qt.h | 5 | ||||
-rw-r--r-- | src/core/web_engine_context.cpp | 6 | ||||
-rw-r--r-- | src/core/web_engine_context.h | 6 | ||||
-rw-r--r-- | src/core/web_event_factory.cpp | 112 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 6 |
13 files changed, 132 insertions, 69 deletions
diff --git a/src/core/api/qwebengineurlrequestinfo.cpp b/src/core/api/qwebengineurlrequestinfo.cpp index 79bfb5412..c3e5b5445 100644 --- a/src/core/api/qwebengineurlrequestinfo.cpp +++ b/src/core/api/qwebengineurlrequestinfo.cpp @@ -123,6 +123,9 @@ ASSERT_ENUMS_MATCH(QtWebEngineCore::WebContentsAdapterClient::OtherNavigation, Q \a info contains the information about the URL request and will track internally whether its members have been altered. + + \warning All method calls to the profile on the main thread will block until + execution of this function is finished. */ diff --git a/src/core/browser_main_parts_qt.cpp b/src/core/browser_main_parts_qt.cpp index 273e7b45f..056d6fda8 100644 --- a/src/core/browser_main_parts_qt.cpp +++ b/src/core/browser_main_parts_qt.cpp @@ -257,9 +257,9 @@ void BrowserMainPartsQt::PreMainMessageLoopStart() void BrowserMainPartsQt::PostMainMessageLoopRun() { - // The BrowserContext's destructor uses the MessageLoop so it should be deleted + // The ProfileQt's destructor uses the MessageLoop so it should be deleted // right before the RenderProcessHostImpl's destructor destroys it. - WebEngineContext::current()->destroyBrowserContext(); + WebEngineContext::current()->destroyProfileAdapter(); } int BrowserMainPartsQt::PreCreateThreads() diff --git a/src/core/configure.json b/src/core/configure.json index e17605302..044d85527 100644 --- a/src/core/configure.json +++ b/src/core/configure.json @@ -75,12 +75,6 @@ { "type": "pkgConfig", "args": "xi" } ] }, - "webengine-xrandr": { - "label": "xrandr", - "sources": [ - { "type": "pkgConfig", "args": "xrandr" } - ] - }, "webengine-xtst": { "label": "xtst", "sources": [ @@ -366,11 +360,6 @@ "condition": "libs.webengine-xi", "output": [ "privateFeature" ] }, - "webengine-system-xrandr": { - "label": "xrandr", - "condition": "libs.webengine-xrandr", - "output": [ "privateFeature" ] - }, "webengine-system-xtst": { "label": "xtst", "condition": "libs.webengine-xtst", @@ -825,7 +814,6 @@ "webengine-system-xcomposite", "webengine-system-xcursor", "webengine-system-xi", - "webengine-system-xrandr", "webengine-system-xtst" ] } diff --git a/src/core/core_chromium.pri b/src/core/core_chromium.pri index fcde6cd30..0aa7fd567 100644 --- a/src/core/core_chromium.pri +++ b/src/core/core_chromium.pri @@ -228,7 +228,7 @@ HEADERS = \ web_event_factory.h -qtConfig(webengine-system-x11) { +qtConfig(webengine-system-x11): hasX11Dependencies() { HEADERS += ozone/gl_ozone_glx_qt.h \ ozone/gl_surface_glx_qt.h SOURCES += ozone/gl_surface_glx_qt.cpp \ diff --git a/src/core/download_manager_delegate_qt.cpp b/src/core/download_manager_delegate_qt.cpp index 9fe233577..abf4a2a95 100644 --- a/src/core/download_manager_delegate_qt.cpp +++ b/src/core/download_manager_delegate_qt.cpp @@ -39,6 +39,8 @@ #include "download_manager_delegate_qt.h" +#include "base/files/file_util.h" +#include "base/time/time_to_iso8601.h" #include "content/public/browser/download_item_utils.h" #include "content/public/browser/download_manager.h" #include "content/public/browser/save_page_type.h" @@ -156,15 +158,13 @@ bool DownloadManagerDelegateQt::DetermineDownloadTarget(download::DownloadItem* QFileInfo suggestedFile(defaultDownloadDirectory.absoluteFilePath(suggestedFilename)); QString suggestedFilePath = suggestedFile.absoluteFilePath(); - QString tmpFileBase = QString("%1%2%3").arg(suggestedFile.absolutePath()).arg(QDir::separator()).arg(suggestedFile.baseName()); + base::FilePath tmpFilePath(toFilePathString(suggestedFilePath)); - for (int i = 1; QFileInfo::exists(suggestedFilePath); ++i) { - suggestedFilePath = QString("%1(%2).%3").arg(tmpFileBase).arg(i).arg(suggestedFile.completeSuffix()); - if (i >= 99) { - suggestedFilePath = suggestedFile.absoluteFilePath(); - break; - } - } + int uniquifier = base::GetUniquePathNumber(tmpFilePath, base::FilePath::StringType()); + if (uniquifier > 0) + suggestedFilePath = toQt(tmpFilePath.InsertBeforeExtensionASCII(base::StringPrintf(" (%d)", uniquifier)).AsUTF8Unsafe()); + else if (uniquifier == -1) + suggestedFilePath = toQt(tmpFilePath.InsertBeforeExtensionASCII(base::StringPrintf(" - %s", base::TimeToISO8601(item->GetStartTime()).c_str())).AsUTF8Unsafe()); item->AddObserver(this); QList<ProfileAdapterClient*> clients = m_profileAdapter->clients(); diff --git a/src/core/net/network_delegate_qt.cpp b/src/core/net/network_delegate_qt.cpp index e5bbb53c7..be31b6104 100644 --- a/src/core/net/network_delegate_qt.cpp +++ b/src/core/net/network_delegate_qt.cpp @@ -249,15 +249,22 @@ int NetworkDelegateQt::OnBeforeURLRequest(net::URLRequest *request, net::Complet const QUrl qUrl = toQt(request->url()); + QUrl firstPartyUrl = QUrl(); + if (resourceType == content::ResourceType::RESOURCE_TYPE_SUB_FRAME) + firstPartyUrl = toQt(request->first_party_url()); + else + firstPartyUrl = toQt(request->site_for_cookies()); + QWebEngineUrlRequestInfoPrivate *infoPrivate = new QWebEngineUrlRequestInfoPrivate(toQt(resourceType), toQt(navigationType), qUrl, - toQt(request->site_for_cookies()), + firstPartyUrl, QByteArray::fromStdString(request->method())); QWebEngineUrlRequestInfo requestInfo(infoPrivate); - if (QWebEngineUrlRequestInterceptor *interceptor = m_profileIOData->requestInterceptor()) { + if (QWebEngineUrlRequestInterceptor* interceptor = m_profileIOData->acquireInterceptor()) { interceptor->interceptRequest(requestInfo); + m_profileIOData->releaseInterceptor(); if (requestInfo.changed()) { int result = infoPrivate->shouldBlockRequest ? net::ERR_BLOCKED_BY_CLIENT : net::OK; @@ -275,7 +282,8 @@ int NetworkDelegateQt::OnBeforeURLRequest(net::URLRequest *request, net::Complet requestInfo.resetChanged(); } - } + } else + m_profileIOData->releaseInterceptor(); if (!resourceInfo) return net::OK; diff --git a/src/core/profile_adapter.cpp b/src/core/profile_adapter.cpp index 6c80a9632..0375c8852 100644 --- a/src/core/profile_adapter.cpp +++ b/src/core/profile_adapter.cpp @@ -85,7 +85,7 @@ ProfileAdapter::ProfileAdapter(const QString &storageName): , m_httpCacheMaxSize(0) , m_pageRequestInterceptors(0) { - WebEngineContext::current()->addBrowserContext(this); + WebEngineContext::current()->addProfileAdapter(this); // creation of profile requires webengine context m_profile.reset(new ProfileQt(this)); content::BrowserContext::Initialize(m_profile.data(), toFilePath(dataPath())); @@ -96,7 +96,7 @@ ProfileAdapter::ProfileAdapter(const QString &storageName): ProfileAdapter::~ProfileAdapter() { - WebEngineContext::current()->removeBrowserContext(this); + WebEngineContext::current()->removeProfileAdapter(this); if (m_downloadManagerDelegate) { m_profile->GetDownloadManager(m_profile.data())->Shutdown(); m_downloadManagerDelegate.reset(); diff --git a/src/core/profile_io_data_qt.cpp b/src/core/profile_io_data_qt.cpp index a95607d09..89d690e9e 100644 --- a/src/core/profile_io_data_qt.cpp +++ b/src/core/profile_io_data_qt.cpp @@ -743,11 +743,9 @@ void ProfileIODataQt::updateRequestInterceptor() // We in this case do not need to regenerate any Chromium classes. } -QWebEngineUrlRequestInterceptor *ProfileIODataQt::requestInterceptor() +QWebEngineUrlRequestInterceptor *ProfileIODataQt::acquireInterceptor() { - // used in NetworkDelegateQt::OnBeforeURLRequest - Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - QMutexLocker lock(&m_mutex); + m_mutex.lock(); return m_requestInterceptor; } @@ -758,6 +756,11 @@ bool ProfileIODataQt::hasPageInterceptors() return m_hasPageInterceptors; } +void ProfileIODataQt::releaseInterceptor() +{ + m_mutex.unlock(); +} + bool ProfileIODataQt::canSetCookie(const QUrl &firstPartyUrl, const QByteArray &cookieLine, const QUrl &url) const { return m_cookieDelegate->canSetCookie(firstPartyUrl,cookieLine, url); diff --git a/src/core/profile_io_data_qt.h b/src/core/profile_io_data_qt.h index 9291f7313..bcf49e22b 100644 --- a/src/core/profile_io_data_qt.h +++ b/src/core/profile_io_data_qt.h @@ -89,11 +89,14 @@ public: void generateUserAgent(); void generateJobFactory(); void regenerateJobFactory(); - QWebEngineUrlRequestInterceptor *requestInterceptor(); bool canSetCookie(const QUrl &firstPartyUrl, const QByteArray &cookieLine, const QUrl &url) const; bool canGetCookies(const QUrl &firstPartyUrl, const QUrl &url) const; void setGlobalCertificateVerification(); + // Used in NetworkDelegateQt::OnBeforeURLRequest. + QWebEngineUrlRequestInterceptor *acquireInterceptor(); + void releaseInterceptor(); + void setRequestContextData(content::ProtocolHandlerMap *protocolHandlers, content::URLRequestInterceptorScopedVector request_interceptors); void setFullConfiguration(); // runs on ui thread diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 912a6128e..e988fa23c 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -181,13 +181,13 @@ bool usingSoftwareDynamicGL() scoped_refptr<QtWebEngineCore::WebEngineContext> WebEngineContext::m_handle; bool WebEngineContext::m_destroyed = false; -void WebEngineContext::destroyBrowserContext() +void WebEngineContext::destroyProfileAdapter() { if (m_defaultProfileAdapter) qWarning("PostMainMessageLoopRun is done, but global profile still exists !"); } -void WebEngineContext::addBrowserContext(ProfileAdapter *profileAdapter) +void WebEngineContext::addProfileAdapter(ProfileAdapter *profileAdapter) { Q_ASSERT(!m_profileAdapters.contains(profileAdapter)); const QString path = profileAdapter->dataPath(); @@ -203,7 +203,7 @@ void WebEngineContext::addBrowserContext(ProfileAdapter *profileAdapter) m_profileAdapters.append(profileAdapter); } -void WebEngineContext::removeBrowserContext(ProfileAdapter *profileAdapter) +void WebEngineContext::removeProfileAdapter(ProfileAdapter *profileAdapter) { m_profileAdapters.removeAll(profileAdapter); } diff --git a/src/core/web_engine_context.h b/src/core/web_engine_context.h index cf6834ec4..b9af38153 100644 --- a/src/core/web_engine_context.h +++ b/src/core/web_engine_context.h @@ -92,9 +92,9 @@ public: printing::PrintJobManager* getPrintJobManager(); #endif void initialize(); - void destroyBrowserContext(); - void addBrowserContext(ProfileAdapter *profileAdapter); - void removeBrowserContext(ProfileAdapter *profileAdapter); + void destroyProfileAdapter(); + void addProfileAdapter(ProfileAdapter *profileAdapter); + void removeProfileAdapter(ProfileAdapter *profileAdapter); void destroy(); gpu::SyncPointManager *syncPointManager(); diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp index 24c3a3e64..339a3ef0e 100644 --- a/src/core/web_event_factory.cpp +++ b/src/core/web_event_factory.cpp @@ -927,6 +927,74 @@ static ui::DomKey domKeyForQtKey(int qtKey) case Qt::Key_Zenkaku_Hankaku: return ui::DomKey::ZENKAKU_HANKAKU; + // Dead keys (ui/events/keycodes/keyboard_code_conversion_xkb.cc) + case Qt::Key_Dead_Grave: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0300); + case Qt::Key_Dead_Acute: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0301); + case Qt::Key_Dead_Circumflex: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0302); + case Qt::Key_Dead_Tilde: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0303); + case Qt::Key_Dead_Macron: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0304); + case Qt::Key_Dead_Breve: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0306); + case Qt::Key_Dead_Abovedot: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0307); + case Qt::Key_Dead_Diaeresis: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0308); + case Qt::Key_Dead_Abovering: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x030A); + case Qt::Key_Dead_Doubleacute: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x030B); + case Qt::Key_Dead_Caron: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x030C); + case Qt::Key_Dead_Cedilla: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0327); + case Qt::Key_Dead_Ogonek: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0328); + case Qt::Key_Dead_Iota: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0345); + case Qt::Key_Dead_Voiced_Sound: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x3099); + case Qt::Key_Dead_Semivoiced_Sound: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x309A); + case Qt::Key_Dead_Belowdot: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0323); + case Qt::Key_Dead_Hook: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0309); + case Qt::Key_Dead_Horn: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x031B); + case Qt::Key_Dead_Stroke: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0338); + case Qt::Key_Dead_Abovecomma: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0313); + case Qt::Key_Dead_Abovereversedcomma: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0314); + case Qt::Key_Dead_Doublegrave: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x030F); + case Qt::Key_Dead_Belowring: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0325); + case Qt::Key_Dead_Belowmacron: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0331); + case Qt::Key_Dead_Belowcircumflex: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x032D); + case Qt::Key_Dead_Belowtilde: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0330); + case Qt::Key_Dead_Belowbreve: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x032E); + case Qt::Key_Dead_Belowdiaeresis: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0324); + case Qt::Key_Dead_Invertedbreve: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0311); + case Qt::Key_Dead_Belowcomma: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x0326); + case Qt::Key_Dead_Currency: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x00A4); + case Qt::Key_Dead_Greek: + return ui::DomKey::DeadKeyFromCombiningCharacter(0x037E); + // General-Purpose Function Keys case Qt::Key_F1: return ui::DomKey::F1; @@ -1138,19 +1206,6 @@ static ui::DomKey domKeyForQtKey(int qtKey) } } -static inline base::TimeTicks currentTimeForEvent(const QEvent *event) -{ - Q_ASSERT(event); - - if (event->type() != QEvent::Leave) { - const QInputEvent *inputEvent = static_cast<const QInputEvent *>(event); - if (inputEvent->timestamp()) - return base::TimeTicks::FromInternalValue(inputEvent->timestamp() * 1000); - } - - return base::TimeTicks::Now(); -} - template<class T> static WebMouseEvent::Button mouseButtonForEvent(T *event) { @@ -1307,7 +1362,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev, double dpiScale) mouseButtonForEvent<QMouseEvent>(ev), 0, modifiersForEvent(ev), - currentTimeForEvent(ev)); + base::TimeTicks::Now()); webKitEvent.pointer_type = WebPointerProperties::PointerType::kMouse; @@ -1317,7 +1372,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QMouseEvent *ev, double dpiScale) WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev, double dpiScale) { WebMouseEvent webKitEvent; - webKitEvent.SetTimeStamp(currentTimeForEvent(ev)); + webKitEvent.SetTimeStamp(base::TimeTicks::Now()); webKitEvent.SetModifiers(modifiersForEvent(ev)); webKitEvent.SetType(webEventTypeForEvent(ev)); @@ -1338,7 +1393,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QTabletEvent *ev, double dpiScale mouseButtonForEvent<QTabletEvent>(ev), 0, modifiersForEvent(ev), - currentTimeForEvent(ev)); + base::TimeTicks::Now()); webKitEvent.force = ev->pressure(); webKitEvent.tilt_x = ev->xTilt(); @@ -1355,7 +1410,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QEvent *ev) Q_ASSERT(ev->type() == QEvent::Leave || ev->type() == QEvent::HoverLeave); WebMouseEvent webKitEvent; - webKitEvent.SetTimeStamp(currentTimeForEvent(ev)); + webKitEvent.SetTimeStamp(base::TimeTicks::Now()); webKitEvent.SetType(WebInputEvent::kMouseLeave); return webKitEvent; } @@ -1364,7 +1419,7 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QEvent *ev) WebGestureEvent WebEventFactory::toWebGestureEvent(QNativeGestureEvent *ev, double dpiScale) { WebGestureEvent webKitEvent; - webKitEvent.SetTimeStamp(currentTimeForEvent(ev)); + webKitEvent.SetTimeStamp(base::TimeTicks::Now()); webKitEvent.SetModifiers(modifiersForEvent(ev)); webKitEvent.SetPositionInWidget(WebFloatPoint(ev->localPos().x() / dpiScale, @@ -1434,7 +1489,7 @@ blink::WebMouseWheelEvent WebEventFactory::toWebWheelEvent(QWheelEvent *ev, doub WebMouseWheelEvent webEvent; webEvent.SetType(webEventTypeForEvent(ev)); webEvent.SetModifiers(modifiersForEvent(ev)); - webEvent.SetTimeStamp(currentTimeForEvent(ev)); + webEvent.SetTimeStamp(base::TimeTicks::Now()); webEvent.SetPositionInWidget(ev->x() / dpiScale, ev->y() / dpiScale); webEvent.SetPositionInScreen(ev->globalX(), ev->globalY()); @@ -1464,7 +1519,7 @@ bool WebEventFactory::coalesceWebWheelEvent(blink::WebMouseWheelEvent &webEvent, return false; #endif - webEvent.SetTimeStamp(currentTimeForEvent(ev)); + webEvent.SetTimeStamp(base::TimeTicks::Now()); webEvent.SetPositionInWidget(ev->x() / dpiScale, ev->y() / dpiScale); webEvent.SetPositionInScreen(ev->globalX(), ev->globalY()); @@ -1478,7 +1533,7 @@ bool WebEventFactory::coalesceWebWheelEvent(blink::WebMouseWheelEvent &webEvent, content::NativeWebKeyboardEvent WebEventFactory::toWebKeyboardEvent(QKeyEvent *ev) { content::NativeWebKeyboardEvent webKitEvent(reinterpret_cast<gfx::NativeEvent>(ev)); - webKitEvent.SetTimeStamp(currentTimeForEvent(ev)); + webKitEvent.SetTimeStamp(base::TimeTicks::Now()); webKitEvent.SetModifiers(modifiersForEvent(ev)); webKitEvent.SetType(webEventTypeForEvent(ev)); @@ -1502,17 +1557,20 @@ content::NativeWebKeyboardEvent WebEventFactory::toWebKeyboardEvent(QKeyEvent *e // The dom_code field should contain the USB keycode of the *physical* key // that was pressed. Physical meaning independent of layout and modifiers. - // // Since this information is not available from QKeyEvent in portable form, - // we try to compute it from the native key code. If there's no native key - // code available either, then we assume a US layout and convert it from - // windows_key_code. The result will be incorrect on non-US layouts. + // we try to compute it from the native key code. if (webKitEvent.native_key_code) webKitEvent.dom_code = static_cast<int>( ui::KeycodeConverter::NativeKeycodeToDomCode(webKitEvent.native_key_code)); - else + + // The dom_code and windows_key_code can be converted to each other. The + // result will be incorrect on non-US layouts. + if (!webKitEvent.dom_code && webKitEvent.windows_key_code) webKitEvent.dom_code = static_cast<int>( - ui::UsLayoutKeyboardCodeToDomCode(static_cast<ui::KeyboardCode>(webKitEvent.windows_key_code))); + ui::UsLayoutKeyboardCodeToDomCode(static_cast<ui::KeyboardCode>(webKitEvent.windows_key_code))); + else if (webKitEvent.dom_code && !webKitEvent.windows_key_code) + webKitEvent.windows_key_code = + ui::DomCodeToUsLayoutKeyboardCode(static_cast<ui::DomCode>(webKitEvent.dom_code)); const ushort* text = qtText.utf16(); size_t textSize = std::min(sizeof(webKitEvent.text), size_t(qtText.length() * 2)); diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index fb5575883..06a708672 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -1774,9 +1774,9 @@ void QWebEnginePagePrivate::setToolTip(const QString &toolTipText) } // Update tooltip if text was changed. - QString wrappedTip = QLatin1String("<p>") % toolTipText.toHtmlEscaped().left(MaxTooltipLength) % QLatin1String("</p>"); - if (view->toolTip() != wrappedTip) - view->setToolTip(wrappedTip); + QString escapedTip = toolTipText.toHtmlEscaped().left(MaxTooltipLength); + if (view->toolTip() != escapedTip) + view->setToolTip(escapedTip); } void QWebEnginePagePrivate::printRequested() |