summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael BrĂ¼ning <michael.bruning@qt.io>2019-01-18 16:26:29 +0100
committerMichael BrĂ¼ning <michael.bruning@qt.io>2019-01-18 16:26:29 +0100
commit819182302d5bdaba41efb68ef3c533b2acc19ae1 (patch)
treecab7a922998bc5d6e7f42b537b0c0ce1b69111f6 /src
parent0763b7c40d3490250f5bca1e0029cefba635305c (diff)
parent3f7ea91e23d82e676aeaf157736e25cf54e5ec6b (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.cpp3
-rw-r--r--src/core/browser_main_parts_qt.cpp4
-rw-r--r--src/core/configure.json12
-rw-r--r--src/core/core_chromium.pri2
-rw-r--r--src/core/download_manager_delegate_qt.cpp16
-rw-r--r--src/core/net/network_delegate_qt.cpp14
-rw-r--r--src/core/profile_adapter.cpp4
-rw-r--r--src/core/profile_io_data_qt.cpp11
-rw-r--r--src/core/profile_io_data_qt.h5
-rw-r--r--src/core/web_engine_context.cpp6
-rw-r--r--src/core/web_engine_context.h6
-rw-r--r--src/core/web_event_factory.cpp112
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp6
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()