summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-11-27 18:28:12 +0100
committerFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-11-27 18:28:12 +0100
commitce6990c3e742e0833df0561246554cf07a888efb (patch)
tree412380582040f5bb314eb90ae029b41a883aa439 /src/plugins/platforms
parent09e674849a40f5eb7e9f95fd2a952c621aec86d1 (diff)
parentfa9bde7d3a12ede956339c570f7b32f95d231e57 (diff)
Merge remote-tracking branch 'origin/5.4' into dev
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/android/qandroidplatformmenu.cpp12
-rw-r--r--src/plugins/platforms/android/qandroidplatformmenubar.cpp14
-rw-r--r--src/plugins/platforms/android/qandroidplatformtheme.cpp7
-rw-r--r--src/plugins/platforms/android/qandroidplatformtheme.h2
-rw-r--r--src/plugins/platforms/directfb/directfb.pro2
-rw-r--r--src/plugins/platforms/ios/qiosinputcontext.h22
-rw-r--r--src/plugins/platforms/ios/qioswindow.h1
-rw-r--r--src/plugins/platforms/ios/qioswindow.mm7
-rw-r--r--src/plugins/platforms/kms/kms.pro1
-rw-r--r--src/plugins/platforms/linuxfb/linuxfb.pro1
-rw-r--r--src/plugins/platforms/windows/qtwindowsglobal.h7
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.cpp5
-rw-r--r--src/plugins/platforms/windows/qwindowsinputcontext.cpp38
-rw-r--r--src/plugins/platforms/windows/qwindowsinputcontext.h2
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp37
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.h4
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp33
18 files changed, 143 insertions, 54 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformmenu.cpp b/src/plugins/platforms/android/qandroidplatformmenu.cpp
index 8f992f6bea..f8e7df8784 100644
--- a/src/plugins/platforms/android/qandroidplatformmenu.cpp
+++ b/src/plugins/platforms/android/qandroidplatformmenu.cpp
@@ -53,18 +53,18 @@ QAndroidPlatformMenu::~QAndroidPlatformMenu()
void QAndroidPlatformMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before)
{
QMutexLocker lock(&m_menuItemsMutex);
- m_menuItems.insert(qFind(m_menuItems.begin(),
- m_menuItems.end(),
- static_cast<QAndroidPlatformMenuItem *>(before)),
+ m_menuItems.insert(std::find(m_menuItems.begin(),
+ m_menuItems.end(),
+ static_cast<QAndroidPlatformMenuItem *>(before)),
static_cast<QAndroidPlatformMenuItem *>(menuItem));
}
void QAndroidPlatformMenu::removeMenuItem(QPlatformMenuItem *menuItem)
{
QMutexLocker lock(&m_menuItemsMutex);
- PlatformMenuItemsType::iterator it = qFind(m_menuItems.begin(),
- m_menuItems.end(),
- static_cast<QAndroidPlatformMenuItem *>(menuItem));
+ PlatformMenuItemsType::iterator it = std::find(m_menuItems.begin(),
+ m_menuItems.end(),
+ static_cast<QAndroidPlatformMenuItem *>(menuItem));
if (it != m_menuItems.end())
m_menuItems.erase(it);
}
diff --git a/src/plugins/platforms/android/qandroidplatformmenubar.cpp b/src/plugins/platforms/android/qandroidplatformmenubar.cpp
index 87ebaa8554..2892c3ef3b 100644
--- a/src/plugins/platforms/android/qandroidplatformmenubar.cpp
+++ b/src/plugins/platforms/android/qandroidplatformmenubar.cpp
@@ -51,18 +51,18 @@ QAndroidPlatformMenuBar::~QAndroidPlatformMenuBar()
void QAndroidPlatformMenuBar::insertMenu(QPlatformMenu *menu, QPlatformMenu *before)
{
QMutexLocker lock(&m_menusListMutex);
- m_menus.insert(qFind(m_menus.begin(),
- m_menus.end(),
- static_cast<QAndroidPlatformMenu *>(before)),
- static_cast<QAndroidPlatformMenu *>(menu));
+ m_menus.insert(std::find(m_menus.begin(),
+ m_menus.end(),
+ static_cast<QAndroidPlatformMenu *>(before)),
+ static_cast<QAndroidPlatformMenu *>(menu));
}
void QAndroidPlatformMenuBar::removeMenu(QPlatformMenu *menu)
{
QMutexLocker lock(&m_menusListMutex);
- m_menus.erase(qFind(m_menus.begin(),
- m_menus.end(),
- static_cast<QAndroidPlatformMenu *>(menu)));
+ m_menus.erase(std::find(m_menus.begin(),
+ m_menus.end(),
+ static_cast<QAndroidPlatformMenu *>(menu)));
}
void QAndroidPlatformMenuBar::syncMenu(QPlatformMenu *menu)
diff --git a/src/plugins/platforms/android/qandroidplatformtheme.cpp b/src/plugins/platforms/android/qandroidplatformtheme.cpp
index b955cff44d..ef7093942c 100644
--- a/src/plugins/platforms/android/qandroidplatformtheme.cpp
+++ b/src/plugins/platforms/android/qandroidplatformtheme.cpp
@@ -347,6 +347,9 @@ QAndroidPlatformTheme::QAndroidPlatformTheme(QAndroidPlatformNativeInterface *an
m_androidStyleData = loadAndroidStyle(&m_defaultPalette);
QGuiApplication::setPalette(m_defaultPalette);
androidPlatformNativeInterface->m_androidStyle = m_androidStyleData;
+
+ // default in case the style has not set a font
+ m_systemFont = QFont(QLatin1String("Roboto"), 14.0 * 100 / 72); // keep default size the same after changing from 100 dpi to 72 dpi
}
QPlatformMenuBar *QAndroidPlatformTheme::createPlatformMenuBar() const
@@ -429,10 +432,8 @@ const QFont *QAndroidPlatformTheme::font(Font type) const
return &(it.value());
}
- // default in case the style has not set a font
- static QFont systemFont("Roboto", 14.0 * 100 / 72); // keep default size the same after changing from 100 dpi to 72 dpi
if (type == QPlatformTheme::SystemFont)
- return &systemFont;
+ return &m_systemFont;
return 0;
}
diff --git a/src/plugins/platforms/android/qandroidplatformtheme.h b/src/plugins/platforms/android/qandroidplatformtheme.h
index 334e86ad7a..e842e672d6 100644
--- a/src/plugins/platforms/android/qandroidplatformtheme.h
+++ b/src/plugins/platforms/android/qandroidplatformtheme.h
@@ -35,6 +35,7 @@
#define QANDROIDPLATFORMTHEME_H
#include <qpa/qplatformtheme.h>
+#include <QtGui/qfont.h>
#include <QtGui/qpalette.h>
#include <QJsonObject>
@@ -73,6 +74,7 @@ public:
private:
std::shared_ptr<AndroidStyle> m_androidStyleData;
QPalette m_defaultPalette;
+ QFont m_systemFont;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro
index 13481f6198..89d8d42cea 100644
--- a/src/plugins/platforms/directfb/directfb.pro
+++ b/src/plugins/platforms/directfb/directfb.pro
@@ -29,8 +29,6 @@ HEADERS = qdirectfbintegration.h \
qdirectfbscreen.h \
qdirectfbeglhooks.h
-contains(QT_CONFIG, libudev): DEFINES += QDEVICEDISCOVERY_UDEV
-
# ### port the GL context
contains(QT_CONFIG, directfb_egl) {
HEADERS += qdirectfb_egl.h
diff --git a/src/plugins/platforms/ios/qiosinputcontext.h b/src/plugins/platforms/ios/qiosinputcontext.h
index d2a9c261ba..b4ff695f1a 100644
--- a/src/plugins/platforms/ios/qiosinputcontext.h
+++ b/src/plugins/platforms/ios/qiosinputcontext.h
@@ -63,25 +63,27 @@ public:
QIOSInputContext();
~QIOSInputContext();
- QRectF keyboardRect() const;
+ bool isValid() const Q_DECL_OVERRIDE { return true; }
- void showInputPanel();
- void hideInputPanel();
+ void showInputPanel() Q_DECL_OVERRIDE;
+ void hideInputPanel() Q_DECL_OVERRIDE;
- void clearCurrentFocusObject();
+ bool isInputPanelVisible() const Q_DECL_OVERRIDE;
+ QRectF keyboardRect() const Q_DECL_OVERRIDE;
+
+ void update(Qt::InputMethodQueries) Q_DECL_OVERRIDE;
+ void reset() Q_DECL_OVERRIDE;
+ void commit() Q_DECL_OVERRIDE;
- bool isInputPanelVisible() const;
- void setFocusObject(QObject *object);
+ void clearCurrentFocusObject();
+ void setFocusObject(QObject *object) Q_DECL_OVERRIDE;
void focusWindowChanged(QWindow *focusWindow);
void cursorRectangleChanged();
+
void scrollToCursor();
void scroll(int y);
- void update(Qt::InputMethodQueries);
- void reset();
- void commit();
-
const ImeState &imeState() { return m_imeState; };
bool inputMethodAccepted() const;
diff --git a/src/plugins/platforms/ios/qioswindow.h b/src/plugins/platforms/ios/qioswindow.h
index 65b4f6dd7d..21a05a302e 100644
--- a/src/plugins/platforms/ios/qioswindow.h
+++ b/src/plugins/platforms/ios/qioswindow.h
@@ -63,6 +63,7 @@ public:
void setOpacity(qreal level) Q_DECL_OVERRIDE;
bool isExposed() const Q_DECL_OVERRIDE;
+ void propagateSizeHints() Q_DECL_OVERRIDE {}
void raise() { raiseOrLower(true); }
void lower() { raiseOrLower(false); }
diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm
index b0c5f15306..480062e4de 100644
--- a/src/plugins/platforms/ios/qioswindow.mm
+++ b/src/plugins/platforms/ios/qioswindow.mm
@@ -145,9 +145,10 @@ void QIOSWindow::setVisible(bool visible)
bool QIOSWindow::shouldAutoActivateWindow() const
{
// We don't want to do automatic window activation for popup windows
- // (including Tool, ToolTip and SplashScreen windows), unless they
- // are standalone (no parent/transient parent), and hence not active.
- return !(window()->type() & Qt::Popup) || !window()->isActive();
+ // that are unlikely to contain editable controls (to avoid hiding
+ // the keyboard while the popup is showing)
+ const Qt::WindowType type = window()->type();
+ return (type != Qt::Popup && type != Qt::ToolTip) || !window()->isActive();
}
void QIOSWindow::setOpacity(qreal level)
diff --git a/src/plugins/platforms/kms/kms.pro b/src/plugins/platforms/kms/kms.pro
index 948d986fc5..baa8778153 100644
--- a/src/plugins/platforms/kms/kms.pro
+++ b/src/plugins/platforms/kms/kms.pro
@@ -9,7 +9,6 @@ QT += core-private gui-private platformsupport-private
qtHaveModule(opengl):QT += opengl-private
DEFINES += MESA_EGL_NO_X11_HEADERS __GBM__
-contains(QT_CONFIG, libudev): DEFINES += QDEVICEDISCOVERY_UDEV
CONFIG += link_pkgconfig egl qpa/genericunixfontdatabase
diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro
index 5e185e357f..389d45c29c 100644
--- a/src/plugins/platforms/linuxfb/linuxfb.pro
+++ b/src/plugins/platforms/linuxfb/linuxfb.pro
@@ -9,7 +9,6 @@ QT += core-private gui-private platformsupport-private
SOURCES = main.cpp qlinuxfbintegration.cpp qlinuxfbscreen.cpp
HEADERS = qlinuxfbintegration.h qlinuxfbscreen.h
-contains(QT_CONFIG, libudev): DEFINES += QDEVICEDISCOVERY_UDEV
CONFIG += qpa/genericunixfontdatabase
diff --git a/src/plugins/platforms/windows/qtwindowsglobal.h b/src/plugins/platforms/windows/qtwindowsglobal.h
index 99c97d156f..90e6d6ab9d 100644
--- a/src/plugins/platforms/windows/qtwindowsglobal.h
+++ b/src/plugins/platforms/windows/qtwindowsglobal.h
@@ -72,7 +72,8 @@ enum WindowsEventType // Simplify event types
ShowEventOnParentRestoring = WindowEventFlag + 20,
HideEvent = WindowEventFlag + 8,
DestroyEvent = WindowEventFlag + 9,
- MoveEvent = WindowEventFlag + 10,
+ GeometryChangingEvent = WindowEventFlag + 10,
+ MoveEvent = WindowEventFlag + 11,
ResizeEvent = WindowEventFlag + 12,
QuerySizeHints = WindowEventFlag + 15,
CalculateSize = WindowEventFlag + 16,
@@ -146,6 +147,10 @@ inline QtWindows::WindowsEventType windowsEventType(UINT message, WPARAM wParamI
case WM_MOUSEWHEEL:
case WM_MOUSEHWHEEL:
return QtWindows::MouseWheelEvent;
+#ifndef Q_OS_WINCE
+ case WM_WINDOWPOSCHANGING:
+ return QtWindows::GeometryChangingEvent;
+#endif
case WM_MOVE:
return QtWindows::MoveEvent;
case WM_SHOWWINDOW:
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 22a4dbb09f..4f1a1a375f 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -995,6 +995,8 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
return QWindowsGeometryHint::handleCalculateSize(platformWindow->customMargins(), msg, result);
case QtWindows::NonClientHitTest:
return platformWindow->handleNonClientHitTest(QPoint(msg.pt.x, msg.pt.y), result);
+ case QtWindows::GeometryChangingEvent:
+ return platformWindow->QWindowsWindow::handleGeometryChanging(&msg);
#endif // !Q_OS_WINCE
case QtWindows::ExposeEvent:
return platformWindow->handleWmPaint(hwnd, message, wParam, lParam);
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp
index 376b1bdc37..6b13d93259 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp
@@ -289,14 +289,15 @@ QWindowsFontEngine::QWindowsFontEngine(const QString &name,
qCDebug(lcQpaFonts) << __FUNCTION__ << name << lf.lfHeight;
HDC hdc = m_fontEngineData->hdc;
SelectObject(hdc, hfont);
- fontDef.pixelSize = -lf.lfHeight;
const BOOL res = GetTextMetrics(hdc, &tm);
- fontDef.fixedPitch = !(tm.tmPitchAndFamily & TMPF_FIXED_PITCH);
if (!res) {
qErrnoWarning("%s: GetTextMetrics failed", __FUNCTION__);
ZeroMemory(&tm, sizeof(TEXTMETRIC));
}
+ fontDef.pixelSize = -lf.lfHeight;
+ fontDef.fixedPitch = !(tm.tmPitchAndFamily & TMPF_FIXED_PITCH);
+
cache_cost = tm.tmHeight * tm.tmAveCharWidth * 2000;
getCMap();
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.cpp b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
index 929c6165d2..94a27d146f 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
@@ -145,6 +145,7 @@ static inline void imeNotifyCancelComposition(HWND hwnd)
*/
+HIMC QWindowsInputContext::m_defaultContext = 0;
QWindowsInputContext::CompositionContext::CompositionContext() :
hwnd(0), haveCaret(false), position(0), isComposing(false)
@@ -163,6 +164,21 @@ QWindowsInputContext::~QWindowsInputContext()
{
}
+bool QWindowsInputContext::hasCapability(Capability capability) const
+{
+ switch (capability) {
+ case QPlatformInputContext::HiddenTextCapability:
+#ifndef Q_OS_WINCE
+ return false; // QTBUG-40691, do not show IME on desktop for password entry fields.
+#else
+ break; // Windows CE: Show software keyboard.
+#endif
+ default:
+ break;
+ }
+ return true;
+}
+
/*!
\brief Cancels a composition.
*/
@@ -184,13 +200,33 @@ void QWindowsInputContext::reset()
doneContext();
}
-void QWindowsInputContext::setFocusObject(QObject *)
+void QWindowsInputContext::setFocusObject(QObject *object)
{
// ### fixme: On Windows 8.1, it has been observed that the Input context
// remains active when this happens resulting in a lock-up. Consecutive
// key events still have VK_PROCESSKEY set and are thus ignored.
if (m_compositionContext.isComposing)
imeNotifyCancelComposition(m_compositionContext.hwnd);
+
+ const QWindow *window = QGuiApplication::focusWindow();
+ if (object && window) {
+ QWindowsWindow *platformWindow = QWindowsWindow::baseWindowOf(window);
+ if (inputMethodAccepted()) {
+ // Re-enable IME by associating default context saved on first disabling.
+ if (platformWindow->testFlag(QWindowsWindow::InputMethodDisabled)) {
+ ImmAssociateContext(platformWindow->handle(), QWindowsInputContext::m_defaultContext);
+ platformWindow->clearFlag(QWindowsWindow::InputMethodDisabled);
+ }
+ } else {
+ // Disable IME by associating 0 context. Store context first time.
+ if (!platformWindow->testFlag(QWindowsWindow::InputMethodDisabled)) {
+ const HIMC oldImC = ImmAssociateContext(platformWindow->handle(), 0);
+ platformWindow->setFlag(QWindowsWindow::InputMethodDisabled);
+ if (!QWindowsInputContext::m_defaultContext && oldImC)
+ QWindowsInputContext::m_defaultContext = oldImC;
+ }
+ }
+ }
}
/*!
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.h b/src/plugins/platforms/windows/qwindowsinputcontext.h
index db1c005207..86243952ec 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.h
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.h
@@ -62,6 +62,7 @@ public:
explicit QWindowsInputContext();
~QWindowsInputContext();
+ bool hasCapability(Capability capability) const Q_DECL_OVERRIDE;
void reset() Q_DECL_OVERRIDE;
void update(Qt::InputMethodQueries) Q_DECL_OVERRIDE;
void invokeAction(QInputMethod::Action, int cursorPosition) Q_DECL_OVERRIDE;
@@ -87,6 +88,7 @@ private:
void endContextComposition();
const DWORD m_WM_MSIME_MOUSE;
+ static HIMC m_defaultContext;
CompositionContext m_compositionContext;
bool m_endCompositionRecursionGuard;
};
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 8a80729354..0b4bb9b09d 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -1783,6 +1783,43 @@ void QWindowsWindow::propagateSizeHints()
qCDebug(lcQpaWindows) << __FUNCTION__ << this << window();
}
+bool QWindowsWindow::handleGeometryChanging(MSG *message) const
+{
+#ifndef Q_OS_WINCE
+ QWindow *qWin = window();
+ if (!qWin->isTopLevel())
+ return false;
+ WINDOWPOS *windowPos = reinterpret_cast<WINDOWPOS *>(message->lParam);
+ if ((windowPos->flags & (SWP_NOCOPYBITS | SWP_NOSIZE)))
+ return false;
+ const QMargins marginsDp = frameMarginsDp();
+ const QRect suggestedFrameGeometryDp(windowPos->x, windowPos->y,
+ windowPos->cx, windowPos->cy);
+ const qreal factor = QWindowsScaling::factor();
+ const QRect suggestedGeometryDp = suggestedFrameGeometryDp - marginsDp;
+ const QRectF suggestedGeometry = QRectF(QPointF(suggestedGeometryDp.topLeft()) / factor,
+ QSizeF(suggestedGeometryDp.size()) / factor);
+ const QRectF correctedGeometryF =
+ qt_window_private(qWin)->closestAcceptableGeometry(suggestedGeometry);
+ if (!correctedGeometryF.isValid())
+ return false;
+ const QRect correctedFrameGeometryDp
+ = QRectF(correctedGeometryF.topLeft() * factor,
+ correctedGeometryF.size() * factor).toRect()
+ + marginsDp;
+ if (correctedFrameGeometryDp == suggestedFrameGeometryDp)
+ return false;
+ windowPos->x = correctedFrameGeometryDp.left();
+ windowPos->y = correctedFrameGeometryDp.top();
+ windowPos->cx = correctedFrameGeometryDp.width();
+ windowPos->cy = correctedFrameGeometryDp.height();
+ return true;
+#else // !Q_OS_WINCE
+ Q_UNUSED(message)
+ return false;
+#endif
+}
+
QMargins QWindowsWindow::frameMarginsDp() const
{
// Frames are invalidated by style changes (window state, flags).
diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h
index 71debf2476..a63a9f56e3 100644
--- a/src/plugins/platforms/windows/qwindowswindow.h
+++ b/src/plugins/platforms/windows/qwindowswindow.h
@@ -138,7 +138,8 @@ public:
Exposed = 0x10000,
WithinCreate = 0x20000,
WithinMaximize = 0x40000,
- MaximizeToFullScreen = 0x80000
+ MaximizeToFullScreen = 0x80000,
+ InputMethodDisabled =0x100000
};
QWindowsWindow(QWindow *window, const QWindowsWindowData &data);
@@ -182,6 +183,7 @@ public:
void windowEvent(QEvent *event);
void propagateSizeHints() Q_DECL_OVERRIDE;
+ bool handleGeometryChanging(MSG *message) const;
QMargins frameMarginsDp() const;
QMargins frameMargins() const Q_DECL_OVERRIDE { return frameMarginsDp() / QWindowsScaling::factor(); }
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 85af8ee1d2..e1ccc3f086 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -2022,6 +2022,19 @@ void QXcbWindow::handleMouseEvent(xcb_timestamp_t time, const QPoint &local, con
QWindowSystemInterface::handleMouseEvent(window(), time, local, global, connection()->buttons(), modifiers);
}
+static bool ignoreLeaveEvent(const xcb_leave_notify_event_t *event)
+{
+ return event->detail == XCB_NOTIFY_DETAIL_VIRTUAL
+ || event->detail == XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL;
+}
+
+static bool ignoreEnterEvent(const xcb_enter_notify_event_t *event)
+{
+ return ((event->mode != XCB_NOTIFY_MODE_NORMAL && event->mode != XCB_NOTIFY_MODE_UNGRAB)
+ || event->detail == XCB_NOTIFY_DETAIL_VIRTUAL
+ || event->detail == XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL);
+}
+
class EnterEventChecker
{
public:
@@ -2033,13 +2046,8 @@ public:
return false;
xcb_enter_notify_event_t *enter = (xcb_enter_notify_event_t *)event;
-
- if ((enter->mode != XCB_NOTIFY_MODE_NORMAL && enter->mode != XCB_NOTIFY_MODE_UNGRAB)
- || enter->detail == XCB_NOTIFY_DETAIL_VIRTUAL
- || enter->detail == XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL)
- {
+ if (ignoreEnterEvent(enter))
return false;
- }
return true;
}
@@ -2052,12 +2060,9 @@ void QXcbWindow::handleEnterNotifyEvent(const xcb_enter_notify_event_t *event)
connection()->handleEnterEvent(event);
#endif
- if ((event->mode != XCB_NOTIFY_MODE_NORMAL && event->mode != XCB_NOTIFY_MODE_UNGRAB)
- || event->detail == XCB_NOTIFY_DETAIL_VIRTUAL
- || event->detail == XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL)
- {
+ if (ignoreEnterEvent(event))
return;
- }
+
const int dpr = int(devicePixelRatio());
const QPoint local(event->event_x/dpr, event->event_y/dpr);
const QPoint global(event->root_x/dpr, event->root_y/dpr);
@@ -2068,12 +2073,8 @@ void QXcbWindow::handleLeaveNotifyEvent(const xcb_leave_notify_event_t *event)
{
connection()->setTime(event->time);
- if ((event->mode != XCB_NOTIFY_MODE_NORMAL && event->mode != XCB_NOTIFY_MODE_UNGRAB)
- || event->detail == XCB_NOTIFY_DETAIL_VIRTUAL
- || event->detail == XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL)
- {
+ if (ignoreLeaveEvent(event))
return;
- }
EnterEventChecker checker;
xcb_enter_notify_event_t *enter = (xcb_enter_notify_event_t *)connection()->checkEvent(checker);