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 LipstickCompositorWindow::refreshMouseRegion() { QWaylandSurface *s = surface(); if (s) { QVariantMap properties = s->windowProperties(); if (properties.contains(QLatin1String("MOUSE_REGION"))) { m_mouseRegion = s->windowProperties().value("MOUSE_REGION").value<QRegion>(); m_mouseRegionValid = true; if (LipstickCompositor::instance()->debug()) qDebug() << "Window" << windowId() << "mouse region set:" << m_mouseRegion; } else { m_mouseRegionValid = false; if (LipstickCompositor::instance()->debug()) qDebug() << "Window" << windowId() << "mouse region cleared"; } emit mouseRegionBoundsChanged(); } }
int LipstickCompositor::windowIdForLink(QWaylandSurface *s, uint link) const { for (QHash<int, LipstickCompositorWindow *>::ConstIterator iter = m_mappedSurfaces.begin(); iter != m_mappedSurfaces.end(); ++iter) { QWaylandSurface *windowSurface = iter.value()->surface(); if (windowSurface && windowSurface->processId() == s->processId() && windowSurface->windowProperties().value("WINID", uint(0)).toUInt() == link) return iter.value()->windowId(); } return 0; }
bool NotificationPreviewPresenter::notificationShouldBeShown(LipstickNotification *notification) { bool screenOrDeviceLocked = locks->getState(MeeGo::QmLocks::TouchAndKeyboard) == MeeGo::QmLocks::Locked || locks->getState(MeeGo::QmLocks::Device) == MeeGo::QmLocks::Locked; bool notificationHidden = notification->hints().value(NotificationManager::HINT_HIDDEN).toBool(); bool notificationHasPreviewText = !(notification->previewBody().isEmpty() && notification->previewSummary().isEmpty()); int notificationIsCritical = notification->hints().value(NotificationManager::HINT_URGENCY).toInt() >= 2; uint mode = AllNotificationsEnabled; QWaylandSurface *surface = LipstickCompositor::instance()->surfaceForId(LipstickCompositor::instance()->topmostWindowId()); if (surface != 0) { mode = surface->windowProperties().value("NOTIFICATION_PREVIEWS_DISABLED", uint(AllNotificationsEnabled)).toUInt(); } return !notificationHidden && notificationHasPreviewText && (!screenOrDeviceLocked || notificationIsCritical) && (mode == AllNotificationsEnabled || (mode == ApplicationNotificationsDisabled && notificationIsCritical) || (mode == SystemNotificationsDisabled && !notificationIsCritical)); }
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 LipstickCompositorWindow::refreshGrabbedKeys() { QWaylandSurface *s = surface(); if (s) { const QStringList grabbedKeys = s->windowProperties().value( QLatin1String("GRABBED_KEYS")).value<QStringList>(); if (m_grabbedKeys.isEmpty() && !grabbedKeys.isEmpty()) { qApp->installEventFilter(this); } else if (!m_grabbedKeys.isEmpty() && grabbedKeys.isEmpty()) { qApp->removeEventFilter(this); } m_grabbedKeys.clear(); foreach (const QString &key, grabbedKeys) m_grabbedKeys.append(key.toInt()); if (LipstickCompositor::instance()->debug()) qDebug() << "Window" << windowId() << "grabbed keys changed:" << grabbedKeys; } }