summaryrefslogtreecommitdiffstats
path: root/qgraphicssystem_dd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qgraphicssystem_dd.cpp')
-rw-r--r--qgraphicssystem_dd.cpp75
1 files changed, 56 insertions, 19 deletions
diff --git a/qgraphicssystem_dd.cpp b/qgraphicssystem_dd.cpp
index 28f8c18..8916ba9 100644
--- a/qgraphicssystem_dd.cpp
+++ b/qgraphicssystem_dd.cpp
@@ -63,7 +63,7 @@ QDevDaysWindowSurface::QDevDaysWindowSurface(QWidget *window, QDevDaysGraphicsSy
{
quint32 parentId = system->m_ids.value(window->parentWidget(), 0);
- Request request(Request::CreateRequest, parentId);
+ Request request(Request::CreateWindowRequest, parentId);
system->sendRequest(request);
Response response;
@@ -76,7 +76,7 @@ QDevDaysWindowSurface::QDevDaysWindowSurface(QWidget *window, QDevDaysGraphicsSy
QDevDaysWindowSurface::~QDevDaysWindowSurface()
{
- Request request(Request::DestroyRequest, m_id);
+ Request request(Request::DestroyWindowRequest, m_id);
m_system->sendRequest(request);
m_system->m_surfaces.remove(m_id);
m_system->m_ids.remove(window());
@@ -95,7 +95,7 @@ void QDevDaysWindowSurface::flush(QWidget *widget, const QRegion &region, const
Q_UNUSED(offset);
qDebug() << "WINDOW: flush";
// send an update request to the server
- Request request(Request::UpdateRequest, m_id); // ### rect
+ Request request(Request::UpdateWindowRequest, m_id); // ### rect
m_system->sendRequest(request);
// we don't expect any response
}
@@ -104,21 +104,22 @@ void QDevDaysWindowSurface::setGeometry(const QRect &rect)
{
qDebug() << "WINDOW: setGeometry";
QWindowSurface::setGeometry(rect);
+ qDebug() << "WINDOW: geometry" << geometry();
// create or resize the shared memory
qint32 byteCount = rect.width() * rect.height() * sizeof(quint32); // ### server should hold the pixel format
qDebug() << "WINDOW: byte count" << byteCount;
if (byteCount > m_shared.size()) {
- if (m_shared.key().isEmpty())
- m_shared.setKey(QString::number(m_id));
- else
- m_shared.detach();
+ if (!m_shared.key().isEmpty())
+ m_shared.setKey(QString()); // detach
+ m_shared.setKey(QString::number(m_id));
if (!m_shared.create(byteCount) && !m_shared.attach())
qWarning() << m_shared.errorString() << m_shared.key();
qDebug() << "WINDOW: data" << m_shared.data() << "key" << m_shared.key();
+ Q_ASSERT(m_shared.data());
}
- Request request(Request::SetGeometryRequest, m_id, rect);
+ Request request(Request::SetWindowGeometryRequest, m_id, 0, rect);
m_system->sendRequest(request);
}
@@ -151,7 +152,7 @@ void QDevDaysWindowSurface::endPaint(const QRegion &region)
else
qDebug() << "WINDOW: failed to unlock shared memory";
}
-
+/*
void QDevDaysWindowSurface::handleMouseEvent(const Event &event)
{
QEvent::Type type = QEvent::None;
@@ -163,6 +164,9 @@ void QDevDaysWindowSurface::handleMouseEvent(const Event &event)
case Event::MouseReleaseEvent:
type = QEvent::MouseButtonPress;
break;
+ case Event::MouseMoveEvent:
+ type = QEvent::MouseMove;
+ break;
default:
break;
}
@@ -170,11 +174,28 @@ void QDevDaysWindowSurface::handleMouseEvent(const Event &event)
QApplicationPrivate::handleMouseEvent(window(), mouseEvent);
}
+void QDevDaysWindowSurface::handleKeyEvent(const Event &event)
+{
+ QEvent::Type type = QEvent::None;
+ quint32 key = 0;
+
+ switch (event.type) {
+ case Event::KeyPressEvent:
+ type = QEvent::KeyPress;
+ break;
+ case Event::KeyReleaseEvent:
+ type = QEvent::KeyRelease;
+ break;
+ }
+ QKeyEvent keyEvent(type, key, Qt::NoModifier, QString(), true, 0);
+ QApplicationPrivate::handleKeyEvent(window(), keyEvent);
+}
+
void QDevDaysWindowSurface::handleGeometryChanged(const Event &event)
{
QApplicationPrivate::handleGeometryChange(window(), event.rect.toRect());
}
-
+*/
//
// graphics system
//
@@ -256,22 +277,38 @@ void QDevDaysGraphicsSystem::eventDispatcher()
QDataStream in(&m_connection);
in >> m_message;
switch (m_message.message) {
- case Event::EventMessage:
- qDebug() << "SYSTEM: received event" << m_message.type;
+ case Event::EventMessage: {
QDevDaysWindowSurface *surface = m_surfaces.value(m_message.id);
+ QWidget *window = surface ? surface->window() : 0;
+ qDebug() << "SYSTEM: received event" << m_message.type << window;
switch (m_message.type) {
+ case Event::GeometryChangeEvent: {
+ QApplicationPrivate::handleGeometryChange(window, m_message.rect.toRect());
+ break; }
case Event::MousePressEvent: {
- // ### we don't support multiple buttons or keyboard modifiers
- QMouseEvent me(QEvent::MouseButtonPress, m_message.rect.topLeft().toPoint(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
- QApplicationPrivate::handleMouseEvent(surface->window(), me);
+ // ### we don't support multiple buttons or any keyboard modifiers
+ QPoint pos = m_message.rect.topLeft().toPoint();
+ QMouseEvent me(QEvent::MouseButtonPress, pos, pos + window->pos(),
+ Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
+ QApplicationPrivate::handleMouseEvent(window, me);
break; }
case Event::MouseReleaseEvent: {
- // ### we don't support multiple buttons or keyboard modifiers
- QMouseEvent me(QEvent::MouseButtonRelease, m_message.rect.topLeft().toPoint(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
- QApplicationPrivate::handleMouseEvent(surface->window(), me);
+ // ### we don't support multiple buttons or any keyboard modifiers
+ QPoint pos = m_message.rect.topLeft().toPoint();
+ QMouseEvent me(QEvent::MouseButtonRelease, pos, pos + window->pos(),
+ Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
+ QApplicationPrivate::handleMouseEvent(window, me);
+ break; }
+ case Event::KeyPressEvent: {
+ QKeyEvent ke(QEvent::KeyPress, m_message.value, Qt::NoModifier);
+ QApplicationPrivate::handleKeyEvent(window, &ke);
+ break; }
+ case Event::KeyReleaseEvent: {
+ QKeyEvent ke(QEvent::KeyRelease, m_message.value, Qt::NoModifier);
+ QApplicationPrivate::handleKeyEvent(window, &ke);
break; }
}
- break;
+ break; }
case Response::ResponseMessage:
case Request::RequestMessage:
default: