void LipstickCompositor::surfaceMapped() { QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender()); //Ignore surface if it's not a window surface if (!surface->hasShellSurface()) return; QVariantMap properties = surface->windowProperties(); QString category = properties.value("CATEGORY").toString(); if (surface->surfaceItem()) return; // The surface was mapped for the first time int id = m_nextWindowId++; LipstickCompositorWindow *item = new LipstickCompositorWindow(id, category, surface, contentItem()); item->setSize(surface->size()); QObject::connect(item, SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed())); m_totalWindowCount++; m_mappedSurfaces.insert(id, item); item->setTouchEventsEnabled(true); emit windowCountChanged(); emit windowAdded(item); windowAdded(id); emit availableWinIdsChanged(); }
void LipstickCompositor::windowPropertyChanged(const QString &property) { QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender()); if (debug()) qDebug() << "Window properties changed:" << surface << surface->windowProperties(); if (property == QLatin1String("MOUSE_REGION")) { LipstickCompositorWindow *window = static_cast<LipstickCompositorWindow *>(surface->surfaceItem()); if (window) window->refreshMouseRegion(); } else if (property == QLatin1String("GRABBED_KEYS")) { LipstickCompositorWindow *window = static_cast<LipstickCompositorWindow *>(surface->surfaceItem()); if (window) window->refreshGrabbedKeys(); } }
void LipstickCompositor::surfaceSizeChanged() { QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender()); LipstickCompositorWindow *window = static_cast<LipstickCompositorWindow *>(surface->surfaceItem()); if (window) window->setSize(surface->size()); }
void LipstickCompositor::surfaceLowered() { QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender()); LipstickCompositorWindow *window = static_cast<LipstickCompositorWindow *>(surface->surfaceItem()); if (window) { emit windowLowered(window); } }
void SystemCompositor::surfaceUnmapped() { // Set to 0 the current surface if it was unmapped QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender()); if (surface == m_currentSurface) m_currentSurface = 0; // Announce this window was destroyed QQuickItem *item = surface->surfaceItem(); emit windowDestroyed(QVariant::fromValue(item)); }
void SystemCompositor::surfaceDestroyed(QObject *object) { // Set to 0 the current surface if it was destroyed QWaylandSurface *surface = static_cast<QWaylandSurface *>(object); if (surface == m_currentSurface) m_currentSurface = 0; // Announce this window was destroyed QQuickItem *item = surface->surfaceItem(); if (item) emit windowDestroyed(QVariant::fromValue(item)); }
void LipstickCompositor::surfaceTitleChanged() { QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender()); LipstickCompositorWindow *window = static_cast<LipstickCompositorWindow *>(surface->surfaceItem()); if (window) { emit window->titleChanged(); int windowId = window->windowId(); for (int ii = 0; ii < m_windowModels.count(); ++ii) m_windowModels.at(ii)->titleChanged(windowId); } }
void ScreenSaver::screensaver_set_surface(Resource *resource, struct ::wl_resource *output_resource, struct ::wl_resource *surface_resource) { Q_UNUSED(resource); Q_UNUSED(output_resource); QWaylandSurface *surface = QtWayland::Surface::fromResource(surface_resource)->waylandSurface(); // TODO: As soon as QtCompositor handles outputs we need to center on output QWaylandSurfaceItem *item = surface->surfaceItem(); if (item) item->setZ(100000); Q_EMIT m_compositor->fadeIn(); }
void SystemCompositor::surfaceMapped() { QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender()); //A surface without a shell surface is not a window if (!surface->hasShellSurface()) return; QWaylandSurfaceItem *item = surface->surfaceItem(); // Create a QWaylandSurfaceItem from the surface if (!item) { item = new QWaylandSurfaceItem(surface, rootObject()); item->setClientRenderingEnabled(true); item->setTouchEventsEnabled(true); } // Surface items gain focus right after they were mapped item->takeFocus(); // Announce a window was added emit windowAdded(QVariant::fromValue(static_cast<QQuickItem *>(item))); }