summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-10-28 09:51:04 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2015-10-28 09:53:31 +0100
commite280d6794a2b9fc6b9280f2f91016e5f95570d9d (patch)
tree11a7f0944721f84a5e72a9b48d4e8893091d72bd /src
parentfd73b33893e0acb22c6082a1754b01bf9f5c436e (diff)
parent09a341f4a62a0fe244dc188a75d77d0067ad1fe7 (diff)
Merge remote-tracking branch 'origin/5.5' into 5.6
Conflicts: src/3rdparty Change-Id: I49acdd9b5ca94f2807b0c13a97f508a67f1c5750
Diffstat (limited to 'src')
-rw-r--r--src/core/render_widget_host_view_qt.cpp12
-rw-r--r--src/process/main.cpp8
-rw-r--r--src/process/process.pro5
-rw-r--r--src/process/support_win.cpp155
-rw-r--r--src/webengine/api/qquickwebenginenewviewrequest.cpp2
-rw-r--r--src/webenginewidgets/api/qwebengineprofile.cpp2
6 files changed, 177 insertions, 7 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 26ea4f4ae..90c91fd47 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -186,13 +186,14 @@ static inline int flagsFromModifiers(Qt::KeyboardModifiers modifiers)
static uint32 s_eventId = 0;
class MotionEventQt : public ui::MotionEvent {
public:
- MotionEventQt(const QList<QTouchEvent::TouchPoint> &touchPoints, const base::TimeTicks &eventTime, Action action, const Qt::KeyboardModifiers modifiers, int index = -1)
+ MotionEventQt(const QList<QTouchEvent::TouchPoint> &touchPoints, const base::TimeTicks &eventTime, Action action, const Qt::KeyboardModifiers modifiers, float dpiScale, int index = -1)
: touchPoints(touchPoints)
, eventTime(eventTime)
, action(action)
, eventId(++s_eventId)
, flags(flagsFromModifiers(modifiers))
, index(index)
+ , dpiScale(dpiScale)
{
// ACTION_DOWN and ACTION_UP must be accesssed through pointer_index 0
Q_ASSERT((action != ACTION_DOWN && action != ACTION_UP) || index == 0);
@@ -203,8 +204,8 @@ public:
virtual int GetActionIndex() const Q_DECL_OVERRIDE { return index; }
virtual size_t GetPointerCount() const Q_DECL_OVERRIDE { return touchPoints.size(); }
virtual int GetPointerId(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).id(); }
- virtual float GetX(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).pos().x(); }
- virtual float GetY(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).pos().y(); }
+ virtual float GetX(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).pos().x() / dpiScale; }
+ virtual float GetY(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).pos().y() / dpiScale; }
virtual float GetRawX(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).screenPos().x(); }
virtual float GetRawY(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).screenPos().y(); }
virtual float GetTouchMajor(size_t pointer_index) const Q_DECL_OVERRIDE
@@ -240,6 +241,7 @@ private:
const uint32 eventId;
int flags;
int index;
+ float dpiScale;
};
RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost* widget)
@@ -989,7 +991,7 @@ void RenderWidgetHostViewQt::handleTouchEvent(QTouchEvent *ev)
QList<QTouchEvent::TouchPoint> touchPoints = mapTouchPointIds(ev->touchPoints());
if (ev->type() == QEvent::TouchCancel) {
- MotionEventQt cancelEvent(touchPoints, eventTimestamp, ui::MotionEvent::ACTION_CANCEL, ev->modifiers());
+ MotionEventQt cancelEvent(touchPoints, eventTimestamp, ui::MotionEvent::ACTION_CANCEL, ev->modifiers(), dpiScale());
processMotionEvent(cancelEvent);
return;
}
@@ -1022,7 +1024,7 @@ void RenderWidgetHostViewQt::handleTouchEvent(QTouchEvent *ev)
continue;
}
- MotionEventQt motionEvent(touchPoints, eventTimestamp, action, ev->modifiers(), i);
+ MotionEventQt motionEvent(touchPoints, eventTimestamp, action, ev->modifiers(), dpiScale(), i);
processMotionEvent(motionEvent);
}
}
diff --git a/src/process/main.cpp b/src/process/main.cpp
index 446465ef7..8328c0022 100644
--- a/src/process/main.cpp
+++ b/src/process/main.cpp
@@ -146,8 +146,16 @@ int stat64_proxy(const char *path, struct stat64 *buf)
#endif
#endif // defined(OS_LINUX)
+#ifdef Q_OS_WIN
+void initDpiAwareness();
+#endif // defined(Q_OS_WIN)
+
int main(int argc, const char **argv)
{
+#ifdef Q_OS_WIN
+ initDpiAwareness();
+#endif
+
// QCoreApplication needs a non-const pointer, while the
// ContentMain in Chromium needs the pointer to be const.
QCoreApplication qtApplication(argc, const_cast<char**>(argv));
diff --git a/src/process/process.pro b/src/process/process.pro
index 7bf06a376..ee859a05c 100644
--- a/src/process/process.pro
+++ b/src/process/process.pro
@@ -24,6 +24,11 @@ INCLUDEPATH += ../core
SOURCES = main.cpp
+win32 {
+ SOURCES += \
+ support_win.cpp
+}
+
contains(QT_CONFIG, qt_framework) {
target.path = $$[QT_INSTALL_LIBS]/QtWebEngineCore.framework/Versions/5/Helpers
} else {
diff --git a/src/process/support_win.cpp b/src/process/support_win.cpp
new file mode 100644
index 000000000..4ccd51627
--- /dev/null
+++ b/src/process/support_win.cpp
@@ -0,0 +1,155 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qlibrary.h>
+#include <qsysinfo.h>
+#include <qt_windows.h>
+#include <Tlhelp32.h>
+
+class User32DLL {
+public:
+ User32DLL()
+ : setProcessDPIAware(0)
+ {
+ library.setFileName(QStringLiteral("User32"));
+ if (!library.load())
+ return;
+ setProcessDPIAware = (SetProcessDPIAware)library.resolve("SetProcessDPIAware");
+ }
+
+ bool isValid() const
+ {
+ return setProcessDPIAware;
+ }
+
+ typedef BOOL (WINAPI *SetProcessDPIAware)();
+
+ // Windows Vista onwards
+ SetProcessDPIAware setProcessDPIAware;
+
+private:
+ QLibrary library;
+};
+
+// This must match PROCESS_DPI_AWARENESS in ShellScalingApi.h
+enum DpiAwareness {
+ PROCESS_PER_UNAWARE = 0,
+ PROCESS_PER_SYSTEM_DPI_AWARE = 1,
+ PROCESS_PER_MONITOR_DPI_AWARE = 2
+};
+
+// Shell scaling library (Windows 8.1 onwards)
+class ShcoreDLL {
+public:
+ ShcoreDLL()
+ : getProcessDpiAwareness(0), setProcessDpiAwareness(0)
+ {
+ if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS8_1)
+ return;
+ library.setFileName(QStringLiteral("SHCore"));
+ if (!library.load())
+ return;
+ getProcessDpiAwareness = (GetProcessDpiAwareness)library.resolve("GetProcessDpiAwareness");
+ setProcessDpiAwareness = (SetProcessDpiAwareness)library.resolve("SetProcessDpiAwareness");
+ }
+
+ bool isValid() const
+ {
+ return getProcessDpiAwareness && setProcessDpiAwareness;
+ }
+
+ typedef HRESULT (WINAPI *GetProcessDpiAwareness)(HANDLE, DpiAwareness *);
+ typedef HRESULT (WINAPI *SetProcessDpiAwareness)(DpiAwareness);
+
+ GetProcessDpiAwareness getProcessDpiAwareness;
+ SetProcessDpiAwareness setProcessDpiAwareness;
+
+private:
+ QLibrary library;
+};
+
+
+static DWORD getParentProcessId()
+{
+ HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ if (hSnapshot == INVALID_HANDLE_VALUE) {
+ qErrnoWarning(GetLastError(), "CreateToolhelp32Snapshot failed.");
+ return NULL;
+ }
+
+ PROCESSENTRY32 pe = {0};
+ pe.dwSize = sizeof(PROCESSENTRY32);
+
+ if (!Process32First(hSnapshot, &pe)) {
+ qWarning("Cannot retrieve parent process handle.");
+ return NULL;
+ }
+
+ DWORD parentPid = NULL;
+ const DWORD pid = GetCurrentProcessId();
+ do {
+ if (pe.th32ProcessID == pid) {
+ parentPid = pe.th32ParentProcessID;
+ break;
+ }
+ } while (Process32Next(hSnapshot, &pe));
+ CloseHandle(hSnapshot);
+ return parentPid;
+}
+
+void initDpiAwareness()
+{
+ ShcoreDLL shcore;
+ if (shcore.isValid()) {
+ DpiAwareness dpiAwareness = PROCESS_PER_MONITOR_DPI_AWARE;
+ const DWORD pid = getParentProcessId();
+ if (pid) {
+ HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
+ DpiAwareness parentDpiAwareness;
+ HRESULT hr = shcore.getProcessDpiAwareness(hProcess, &parentDpiAwareness);
+ CloseHandle(hProcess);
+ if (hr == S_OK)
+ dpiAwareness = parentDpiAwareness;
+ }
+ if (shcore.setProcessDpiAwareness(dpiAwareness) != S_OK)
+ qErrnoWarning(GetLastError(), "SetProcessDPIAwareness failed.");
+ } else {
+ // Fallback. Use SetProcessDPIAware unconditionally.
+ User32DLL user32;
+ if (user32.isValid())
+ user32.setProcessDPIAware();
+ }
+}
diff --git a/src/webengine/api/qquickwebenginenewviewrequest.cpp b/src/webengine/api/qquickwebenginenewviewrequest.cpp
index 893df7f46..6e20c0a46 100644
--- a/src/webengine/api/qquickwebenginenewviewrequest.cpp
+++ b/src/webengine/api/qquickwebenginenewviewrequest.cpp
@@ -69,7 +69,7 @@ QQuickWebEngineView::NewViewDestination QQuickWebEngineNewViewRequest::destinati
}
/*!
- \qmlproperty bool WebEngineNewViewRequest::isUserInitiated
+ \qmlproperty bool WebEngineNewViewRequest::userInitiated
Whether this window request was directly triggered as the result of a keyboard or mouse event.
Use this property to block possibly unwanted \e popups.
diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp
index 2edebdfeb..07deeeefc 100644
--- a/src/webenginewidgets/api/qwebengineprofile.cpp
+++ b/src/webenginewidgets/api/qwebengineprofile.cpp
@@ -199,7 +199,7 @@ void QWebEngineProfilePrivate::downloadUpdated(const DownloadItemInfo &info)
*/
QWebEngineProfile::QWebEngineProfile(QObject *parent)
: QObject(parent)
- , d_ptr(new QWebEngineProfilePrivate(new BrowserContextAdapter(false)))
+ , d_ptr(new QWebEngineProfilePrivate(new BrowserContextAdapter(true)))
{
d_ptr->q_ptr = this;
}