From 2044d95f928fa42beaa00f9cb30816b1f6f63552 Mon Sep 17 00:00:00 2001 From: "Bocklage, Jens" Date: Fri, 11 Nov 2016 16:00:10 +0100 Subject: [PATCH] Add new layer WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY. Add new signal surfaceVisibilityChanged to homescreen and windowmanager API. Signed-off-by: Bocklage, Jens --- HomeScreen/src/layouthandler.cpp | 19 +++++++++++++++++-- HomeScreen/src/layouthandler.h | 6 ++++++ WindowManager/src/windowmanager.cpp | 30 +++++++++++++++++++++++++++--- WindowManager/src/windowmanager.hpp | 3 +++ interfaces/homescreen.xml | 11 +++++++++++ interfaces/windowmanager.xml | 16 ++++++++++++++-- 6 files changed, 78 insertions(+), 7 deletions(-) diff --git a/HomeScreen/src/layouthandler.cpp b/HomeScreen/src/layouthandler.cpp index 58743d0..b2bfd17 100644 --- a/HomeScreen/src/layouthandler.cpp +++ b/HomeScreen/src/layouthandler.cpp @@ -27,6 +27,13 @@ LayoutHandler::LayoutHandler(QObject *parent) : "/Popup", QDBusConnection::sessionBus(), 0); + + QDBusConnection::sessionBus().connect("org.agl.windowmanager", + "/windowmanager", + "org.agl.windowmanager", + "surfaceVisibilityChanged", + this, + SLOT(surfaceVisibilityChanged(int,bool))); } LayoutHandler::~LayoutHandler() @@ -117,12 +124,14 @@ void LayoutHandler::setUpLayouts() void LayoutHandler::showAppLayer() { - mp_dBusWindowManagerProxy->showLayer(1); //1==app layer + // POPUP=0, HOMESCREEN_OVERLAY=1, APPS=2, HOMESCREEN=3 + mp_dBusWindowManagerProxy->showLayer(2); // TODO: enum } void LayoutHandler::hideAppLayer() { - mp_dBusWindowManagerProxy->hideLayer(1); //1==app layer + // POPUP=0, HOMESCREEN_OVERLAY=1, APPS=2, HOMESCREEN=3 + mp_dBusWindowManagerProxy->hideLayer(2); // TODO: enum } void LayoutHandler::makeMeVisible(int pid) @@ -265,6 +274,12 @@ void LayoutHandler::setLayoutByName(QString layoutName) } } +void LayoutHandler::requestSurfaceVisibilityChanged(int surfaceId, bool visible) +{ + qDebug("requestSurfaceVisibilityChanged %d %s", surfaceId, visible ? "true" : "false"); + surfaceVisibilityChanged(surfaceId, visible); +} + void LayoutHandler::timerEvent(QTimerEvent *e) { if (e->timerId() == m_secondsTimerId) diff --git a/HomeScreen/src/layouthandler.h b/HomeScreen/src/layouthandler.h index e51930b..54290ac 100644 --- a/HomeScreen/src/layouthandler.h +++ b/HomeScreen/src/layouthandler.h @@ -30,6 +30,12 @@ public slots: void requestSurfaceIdToFullScreen(int surfaceId); void setLayoutByName(QString layoutName); + // this will receive the surfaceVisibilityChanged signal of the windowmanager + void requestSurfaceVisibilityChanged(int surfaceId, bool visible); + +Q_SIGNALS: // SIGNALS + void surfaceVisibilityChanged(int surfaceId, bool visible); + protected: void timerEvent(QTimerEvent *e); private: diff --git a/WindowManager/src/windowmanager.cpp b/WindowManager/src/windowmanager.cpp index 1c0ddea..3c5c881 100644 --- a/WindowManager/src/windowmanager.cpp +++ b/WindowManager/src/windowmanager.cpp @@ -70,6 +70,7 @@ void WindowManager::start() err = ilm_registerNotification(WindowManager::notificationFunc_static, this); createNewLayer(WINDOWMANAGER_LAYER_POPUP); + createNewLayer(WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY); createNewLayer(WINDOWMANAGER_LAYER_APPLICATIONS); createNewLayer(WINDOWMANAGER_LAYER_HOMESCREEN); #endif @@ -184,6 +185,19 @@ void WindowManager::addSurfaceToLayer(int surfaceId, int layerId) ilm_layerAddSurface(layerId, surfaceId); } + if (layerId == WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY) + { + struct ilmSurfaceProperties surfaceProperties; + ilm_getPropertiesOfSurface(surfaceId, &surfaceProperties); + + ilm_surfaceSetDestinationRectangle(surfaceId, 0, 0, surfaceProperties.origSourceWidth, surfaceProperties.origSourceHeight); + ilm_surfaceSetSourceRectangle(surfaceId, 0, 0, surfaceProperties.origSourceWidth, surfaceProperties.origSourceHeight); + ilm_surfaceSetOpacity(surfaceId, 0.5); + ilm_surfaceSetVisibility(surfaceId, ILM_TRUE); + + ilm_layerAddSurface(layerId, surfaceId); + } + if (layerId == WINDOWMANAGER_LAYER_POPUP) { struct ilmSurfaceProperties surfaceProperties; @@ -259,7 +273,8 @@ void WindowManager::updateScreen() t_ilm_layer renderOrder[WINDOWMANAGER_LAYER_NUM]; renderOrder[0] = WINDOWMANAGER_LAYER_HOMESCREEN; renderOrder[1] = WINDOWMANAGER_LAYER_APPLICATIONS; - renderOrder[2] = WINDOWMANAGER_LAYER_POPUP; + renderOrder[2] = WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY; + renderOrder[3] = WINDOWMANAGER_LAYER_POPUP; ilm_displaySetRenderOrder(0, renderOrder, WINDOWMANAGER_LAYER_NUM); @@ -334,6 +349,7 @@ void WindowManager::surfaceCallbackFunction_non_static(t_ilm_surface surface, if (ILM_NOTIFICATION_VISIBILITY & mask) { qDebug("ILM_NOTIFICATION_VISIBILITY"); + surfaceVisibilityChanged(surface, surfaceProperties.visibility); } if (ILM_NOTIFICATION_OPACITY & mask) { @@ -528,9 +544,13 @@ void WindowManager::hideLayer(int layer) } if (1 == layer) { - ilm_layerSetVisibility(WINDOWMANAGER_LAYER_APPLICATIONS, ILM_FALSE); + ilm_layerSetVisibility(WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY, ILM_FALSE); } if (2 == layer) + { + ilm_layerSetVisibility(WINDOWMANAGER_LAYER_APPLICATIONS, ILM_FALSE); + } + if (3 == layer) { ilm_layerSetVisibility(WINDOWMANAGER_LAYER_HOMESCREEN, ILM_FALSE); } @@ -603,9 +623,13 @@ void WindowManager::showLayer(int layer) } if (1 == layer) { - ilm_layerSetVisibility(WINDOWMANAGER_LAYER_APPLICATIONS, ILM_TRUE); + ilm_layerSetVisibility(WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY, ILM_TRUE); } if (2 == layer) + { + ilm_layerSetVisibility(WINDOWMANAGER_LAYER_APPLICATIONS, ILM_TRUE); + } + if (3 == layer) { ilm_layerSetVisibility(WINDOWMANAGER_LAYER_HOMESCREEN, ILM_TRUE); } diff --git a/WindowManager/src/windowmanager.hpp b/WindowManager/src/windowmanager.hpp index 5b0a552..a4d9d4f 100644 --- a/WindowManager/src/windowmanager.hpp +++ b/WindowManager/src/windowmanager.hpp @@ -103,6 +103,9 @@ public Q_SLOTS: // METHODS int setLayoutByName(const QString &layoutName); int setSurfaceToLayoutArea(int surfaceId, int layoutAreaId); void showLayer(int layer); + +Q_SIGNALS: // SIGNALS + void surfaceVisibilityChanged(int surfaceId, bool visible); }; diff --git a/interfaces/homescreen.xml b/interfaces/homescreen.xml index 95e84a6..fe0ea30 100644 --- a/interfaces/homescreen.xml +++ b/interfaces/homescreen.xml @@ -89,6 +89,17 @@ + + + + + diff --git a/interfaces/windowmanager.xml b/interfaces/windowmanager.xml index a4be58f..754c816 100644 --- a/interfaces/windowmanager.xml +++ b/interfaces/windowmanager.xml @@ -172,9 +172,21 @@ + + + + + +