setFlag(ItemHasContents);
setAcceptedMouseButtons(Qt::LeftButton | Qt::RightButton);
connect(surface, SIGNAL(mapped(const QRect &)), this, SLOT(surfaceMapped(const QRect &)));
+ connect(surface, SIGNAL(destroyed(QObject *)), this, SLOT(surfaceDestroyed(QObject *)));
connect(m_textureProvider, SIGNAL(textureChanged()), this, SLOT(update()));
}
void WaylandSurfaceItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
- m_surface->sendMousePressEvent(toSurface(event->pos()), event->button());
+ if (m_surface)
+ m_surface->sendMousePressEvent(toSurface(event->pos()), event->button());
}
void WaylandSurfaceItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
- m_surface->sendMouseMoveEvent(toSurface(event->pos()));
+ if (m_surface)
+ m_surface->sendMouseMoveEvent(toSurface(event->pos()));
}
void WaylandSurfaceItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
- m_surface->sendMouseReleaseEvent(toSurface(event->pos()), event->button());
+ if (m_surface)
+ m_surface->sendMouseReleaseEvent(toSurface(event->pos()), event->button());
}
void WaylandSurfaceItem::keyPressEvent(QKeyEvent *event)
{
- if (hasFocus())
+ if (m_surface && hasFocus())
m_surface->sendKeyPressEvent(event->nativeScanCode());
}
void WaylandSurfaceItem::keyReleaseEvent(QKeyEvent *event)
{
- if (hasFocus())
+ if (m_surface && hasFocus())
m_surface->sendKeyReleaseEvent(event->nativeScanCode());
}
void WaylandSurfaceItem::takeFocus()
{
setFocus(true);
- m_surface->setInputFocus();
+
+ if (m_surface)
+ m_surface->setInputFocus();
}
QPoint WaylandSurfaceItem::toSurface(const QPointF &pos) const
setHeight(rect.height());
}
+void WaylandSurfaceItem::surfaceDestroyed(QObject *)
+{
+ m_surface = 0;
+}
+
QSGNode *WaylandSurfaceItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
QSGImageNode *node = static_cast<QSGImageNode *>(oldNode);