XCB: Implement native events for for windows.
Change-Id: Iacea1231b49ebe57da96f4012d3f314e1b037105 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
parent
d8e6350c16
commit
472cc7ac27
@ -235,16 +235,24 @@ QXcbWindow *QXcbConnection::platformWindowFromId(xcb_window_t id)
|
|||||||
#define HANDLE_PLATFORM_WINDOW_EVENT(event_t, windowMember, handler) \
|
#define HANDLE_PLATFORM_WINDOW_EVENT(event_t, windowMember, handler) \
|
||||||
{ \
|
{ \
|
||||||
event_t *e = (event_t *)event; \
|
event_t *e = (event_t *)event; \
|
||||||
if (QXcbWindow *platformWindow = platformWindowFromId(e->windowMember)) \
|
if (QXcbWindow *platformWindow = platformWindowFromId(e->windowMember)) { \
|
||||||
platformWindow->handler(e); \
|
long result = 0; \
|
||||||
|
handled = QWindowSystemInterface::handleNativeEvent(platformWindow->window(), m_nativeInterface->genericEventFilterType(), event, &result); \
|
||||||
|
if (!handled) \
|
||||||
|
platformWindow->handler(e); \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#define HANDLE_KEYBOARD_EVENT(event_t, handler) \
|
#define HANDLE_KEYBOARD_EVENT(event_t, handler) \
|
||||||
{ \
|
{ \
|
||||||
event_t *e = (event_t *)event; \
|
event_t *e = (event_t *)event; \
|
||||||
if (QXcbWindow *platformWindow = platformWindowFromId(e->event)) \
|
if (QXcbWindow *platformWindow = platformWindowFromId(e->event)) { \
|
||||||
m_keyboard->handler(platformWindow, e); \
|
long result = 0; \
|
||||||
|
handled = QWindowSystemInterface::handleNativeEvent(platformWindow->window(), m_nativeInterface->genericEventFilterType(), event, &result); \
|
||||||
|
if (!handled) \
|
||||||
|
m_keyboard->handler(platformWindow, e); \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -76,7 +76,9 @@ public:
|
|||||||
|
|
||||||
Q_GLOBAL_STATIC(QXcbResourceMap, qXcbResourceMap)
|
Q_GLOBAL_STATIC(QXcbResourceMap, qXcbResourceMap)
|
||||||
|
|
||||||
QXcbNativeInterface::QXcbNativeInterface()
|
QXcbNativeInterface::QXcbNativeInterface() :
|
||||||
|
m_genericEventFilterType(QByteArrayLiteral("xcb_generic_event_t"))
|
||||||
|
|
||||||
{
|
{
|
||||||
qFill(m_eventFilters, m_eventFilters + EventFilterCount, EventFilter(0));
|
qFill(m_eventFilters, m_eventFilters + EventFilterCount, EventFilter(0));
|
||||||
}
|
}
|
||||||
@ -134,7 +136,7 @@ void *QXcbNativeInterface::nativeResourceForWindow(const QByteArray &resourceStr
|
|||||||
QPlatformNativeInterface::EventFilter QXcbNativeInterface::setEventFilter(const QByteArray &eventType, QPlatformNativeInterface::EventFilter filter)
|
QPlatformNativeInterface::EventFilter QXcbNativeInterface::setEventFilter(const QByteArray &eventType, QPlatformNativeInterface::EventFilter filter)
|
||||||
{
|
{
|
||||||
int type = -1;
|
int type = -1;
|
||||||
if (eventType == QByteArrayLiteral("xcb_generic_event_t"))
|
if (eventType == m_genericEventFilterType)
|
||||||
type = GenericEventFilter;
|
type = GenericEventFilter;
|
||||||
if (type == -1) {
|
if (type == -1) {
|
||||||
qWarning("QXcbNativeInterface: %s: Attempt to set invalid event filter type '%s'.",
|
qWarning("QXcbNativeInterface: %s: Attempt to set invalid event filter type '%s'.",
|
||||||
|
@ -71,6 +71,7 @@ public:
|
|||||||
void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context);
|
void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context);
|
||||||
void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window);
|
void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window);
|
||||||
|
|
||||||
|
inline const QByteArray &genericEventFilterType() const { return m_genericEventFilterType; }
|
||||||
EventFilter setEventFilter(const QByteArray &eventType, EventFilter filter);
|
EventFilter setEventFilter(const QByteArray &eventType, EventFilter filter);
|
||||||
EventFilter eventFilter(EventFilterType type) const { return m_eventFilters[type]; }
|
EventFilter eventFilter(EventFilterType type) const { return m_eventFilters[type]; }
|
||||||
|
|
||||||
@ -83,6 +84,7 @@ public:
|
|||||||
void *eglContextForContext(QOpenGLContext *context);
|
void *eglContextForContext(QOpenGLContext *context);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
const QByteArray m_genericEventFilterType;
|
||||||
EventFilter m_eventFilters[EventFilterCount];
|
EventFilter m_eventFilters[EventFilterCount];
|
||||||
|
|
||||||
static QXcbScreen *qPlatformScreenForWindow(QWindow *window);
|
static QXcbScreen *qPlatformScreenForWindow(QWindow *window);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user