10#include <qpa/qwindowsysteminterface.h>
20 , m_dfbDisplayLayer(dfbLayer)
23 DFBResult ok = m_dfbInterface->CreateEventBuffer(m_dfbInterface, m_eventBuffer.outPtr());
25 DirectFBError(
"Failed to initialise eventbuffer", ok);
30 while (!m_shouldStop) {
31 if (m_eventBuffer->WaitForEvent(m_eventBuffer.data()) == DFB_OK)
39 m_eventBuffer->WakeUp(m_eventBuffer.data());
47 res = window->GetID(window, &id);
49 DirectFBError(
"QDirectFbInput::addWindow", res);
53 m_tlwMap.insert(id, platformWindow);
54 window->AttachEventBuffer(window, m_eventBuffer.data());
62 res = window->GetID(window, &id);
64 DirectFBError(
"QDirectFbInput::removeWindow", res);
68 window->DetachEventBuffer(window, m_eventBuffer.data());
74 DFBResult hasEvent = m_eventBuffer->HasEvent(m_eventBuffer.data());
75 while(hasEvent == DFB_OK){
77 DFBResult ok = m_eventBuffer->GetEvent(m_eventBuffer.data(), &event);
79 DirectFBError(
"Failed to get event",ok);
80 if (event.clazz == DFEC_WINDOW) {
81 switch (event.window.type) {
85 handleMouseEvents(event);
88 handleWheelEvent(event);
92 handleKeyEvents(event);
96 handleEnterLeaveEvents(event);
99 handleGotFocusEvent(event);
102 handleCloseEvent(event);
104 case DWET_POSITION_SIZE:
105 handleGeometryEvent(event);
113 hasEvent = m_eventBuffer->HasEvent(m_eventBuffer.data());
119 QPoint p(event.window.x, event.window.y);
120 QPoint globalPos(event.window.cx, event.window.cy);
121 Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons);
123 QDirectFBPointer<IDirectFBDisplayLayer> layer(QDirectFbConvenience::dfbDisplayLayer());
124 QDirectFBPointer<IDirectFBWindow> window;
125 layer->GetWindow(layer.data(), event.window.window_id, window.outPtr());
127 long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
129 QWindow *tlw = m_tlwMap.value(event.window.window_id);
130 QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons, Qt::NoButton, QEvent::None);
135 QPoint p(event.window.x, event.window.y);
136 QPoint globalPos(event.window.cx, event.window.cy);
137 long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
138 QWindow *tlw = m_tlwMap.value(event.window.window_id);
139 QWindowSystemInterface::handleWheelEvent(tlw,
144 QPoint(0, event.window.step*120));
149 QEvent::Type type = QDirectFbConvenience::eventType(event.window.type);
151 Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers);
153 long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
156 if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE)
157 character = QChar(event.window.key_symbol);
158 QWindow *tlw = m_tlwMap.value(event.window.window_id);
159 QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character);
164 QWindow *tlw = m_tlwMap.value(event.window.window_id);
165 switch (event.window.type) {
167 QWindowSystemInterface::handleEnterEvent(tlw);
170 QWindowSystemInterface::handleLeaveEvent(tlw);
179 QWindow *tlw = m_tlwMap.value(event.window.window_id);
180 QWindowSystemInterface::handleFocusWindowChanged(tlw, Qt::ActiveWindowFocusReason);
185 QWindow *tlw = m_tlwMap.value(event.window.window_id);
186 QWindowSystemInterface::handleCloseEvent(tlw);
191 QWindow *tlw = m_tlwMap.value(event.window.window_id);
192 QRect rect(event.window.x, event.window.y, event.window.w, event.window.h);
193 QWindowSystemInterface::handleGeometryChange(tlw, rect);
static QDirectFbKeyMap * keyMap()