diff options
author | 2016-11-11 16:00:10 +0100 | |
---|---|---|
committer | 2016-11-11 16:00:10 +0100 | |
commit | 2044d95f928fa42beaa00f9cb30816b1f6f63552 (patch) | |
tree | 97e54ef96ad4a8eae023d426da34c1b1c412e30f | |
parent | 337319e30026b0bae453dc7363f27469fa2ab526 (diff) |
Add new layer WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY.
Add new signal surfaceVisibilityChanged to homescreen and windowmanager API.
Signed-off-by: Bocklage, Jens <Jens_Bocklage@mentor.com>
-rw-r--r-- | HomeScreen/src/layouthandler.cpp | 19 | ||||
-rw-r--r-- | HomeScreen/src/layouthandler.h | 6 | ||||
-rw-r--r-- | WindowManager/src/windowmanager.cpp | 30 | ||||
-rw-r--r-- | WindowManager/src/windowmanager.hpp | 3 | ||||
-rw-r--r-- | interfaces/homescreen.xml | 11 | ||||
-rw-r--r-- | 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,10 +544,14 @@ 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); } ilm_commitChanges(); @@ -603,10 +623,14 @@ 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); } ilm_commitChanges(); 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 @@ <arg name="surfaceId" type="i" direction="in"/> <arg name="layoutArea" type="i" direction="in"/> </method> + <!-- + surfaceVisibilityChanged: + @surfaceId: The surface that changed. + @visible: True, if the surface is visible. + + This is emitted when the visible property of the surfaces changes. + --> + <signal name="surfaceVisibilityChanged"> + <arg name="surfaceId" type="i"/> + <arg name="visible" type="b"/> + </signal> </interface> </node> diff --git a/interfaces/windowmanager.xml b/interfaces/windowmanager.xml index a4be58f..754c816 100644 --- a/interfaces/windowmanager.xml +++ b/interfaces/windowmanager.xml @@ -173,8 +173,20 @@ </method> <!-- + surfaceVisibilityChanged: + @surfaceId: The surface that changed. + @visible: True, if the surface is visible. + + This is emitted when the visible property of the surfaces changes. + --> + <signal name="surfaceVisibilityChanged"> + <arg name="surfaceId" type="i"/> + <arg name="visible" type="b"/> + </signal> + + <!-- showLayer: - @layer: The ID of the layer to show. POPUP=0, APPS=1, HOMESCREEN=2 + @layer: The ID of the layer to show. POPUP=0, HOMESCREEN_OVERLAY=1, APPS=2, HOMESCREEN=3 Show complete layers. By default, all layers are shown. @@ -184,7 +196,7 @@ </method> <!-- hideLayer: - @layer: The ID of the layer to hide. POPUP=0, APPS=1, HOMESCREEN=2 + @layer: The ID of the layer to hide. POPUP=0, HOMESCREEN_OVERLAY=1, APPS=2, HOMESCREEN=3 Hide complete layers. By default, all layers are shown. |