Enable automcatic startup of Homescreen app
[staging/HomeScreen.git] / WindowManager / src / windowmanager.cpp
index 1c0ddea..a03bab6 100644 (file)
@@ -15,8 +15,7 @@
  */
 
 #include "windowmanager.hpp"
-#include <wayland-client.h>
-#include <QFile>
+
 
 //////////////////////////////////////////
 // THIS IS STILL UNDER HEAVY DEVELOPMENT!
@@ -32,7 +31,7 @@
 #define WINDOWMANAGER_LAYER_APPLICATIONS 102
 #define WINDOWMANAGER_LAYER_HOMESCREEN 103
 
-#define WINDOWMANAGER_LAYER_NUM 3
+#define WINDOWMANAGER_LAYER_NUM 4
 
 // the HomeScreen app has to have the surface id 1000
 #define WINDOWMANAGER_HOMESCREEN_MAIN_SURFACE_ID 1000
@@ -48,38 +47,45 @@ WindowManager::WindowManager(QObject *parent) :
     m_currentLayout(-1)
 {
     qDebug("-=[WindowManager]=-");
-    // publish windowmanager interface
-    mp_windowManagerAdaptor = new WindowmanagerAdaptor((QObject*)this);
-
-    QDBusConnection dbus = QDBusConnection::sessionBus();
-    dbus.registerObject("/windowmanager", this);
-    dbus.registerService("org.agl.windowmanager");
 }
 
 void WindowManager::start()
 {
     qDebug("-=[start]=-");
     mp_layoutAreaToSurfaceIdAssignment = new QMap<int, unsigned int>;
-#ifdef __arm__
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     ilmErrorTypes err;
 
     err = ilm_init();
     qDebug("ilm_init = %d", err);
+    if(ILM_SUCCESS != err)
+    {
+        qDebug("failed! Exiting!");
+        exit(-1);
+    }
 
     myThis = this;
     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
+
+    QDBusConnection dbus = QDBusConnection::sessionBus();
+    dbus.registerObject("/windowmanager", this);
+    dbus.registerService("org.agl.windowmanager");
+
+    // publish windowmanager interface
+    mp_windowManagerAdaptor = new WindowmanagerAdaptor((QObject*)this);
 }
 
 WindowManager::~WindowManager()
 {
     qDebug("-=[~WindowManager]=-");
     delete mp_windowManagerAdaptor;
-#ifdef __arm__
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     ilm_destroy();
 #endif
     delete mp_layoutAreaToSurfaceIdAssignment;
@@ -109,7 +115,7 @@ void WindowManager::dumpScene()
     }
 }
 
-#ifdef __arm__
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
 
 void WindowManager::createNewLayer(int layerId)
 {
@@ -184,6 +190,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;
@@ -206,7 +225,7 @@ void WindowManager::updateScreen()
 {
     qDebug("-=[updateScreen]=-");
 
-#ifdef __arm__
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     if (-1 != m_currentLayout)
     {
 
@@ -259,7 +278,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);
 
@@ -268,7 +288,7 @@ void WindowManager::updateScreen()
 #endif
 }
 
-#ifdef __arm__
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
 void WindowManager::notificationFunc_non_static(ilmObjectType object,
                                     t_ilm_uint id,
                                     t_ilm_bool created)
@@ -334,6 +354,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)
     {
@@ -363,6 +384,17 @@ void WindowManager::surfaceCallbackFunction_non_static(t_ilm_surface surface,
     if (ILM_NOTIFICATION_CONFIGURED & mask)
     {
         qDebug("ILM_NOTIFICATION_CONFIGURED");
+        qDebug("  surfaceProperties %d", surface);
+        qDebug("    surfaceProperties.origSourceWidth: %d", surfaceProperties->origSourceWidth);
+        qDebug("    surfaceProperties.origSourceHeight: %d", surfaceProperties->origSourceHeight);
+
+        ilm_surfaceSetSourceRectangle(surface,
+                                      0,
+                                      0,
+                                      surfaceProperties->origSourceWidth,
+                                      surfaceProperties->origSourceHeight);
+
+        ilm_commitChanges();
         updateScreen();
     }
 }
@@ -456,7 +488,7 @@ QList<Layout> WindowManager::getAllLayouts()
 QList<int> WindowManager::getAllSurfacesOfProcess(int pid)
 {
     QList<int> result;
-#ifdef __arm__
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     struct ilmSurfaceProperties surfaceProperties;
 
     for (int i = 0; i < m_surfaces.size(); ++i)
@@ -521,16 +553,20 @@ void WindowManager::hideLayer(int layer)
     qDebug("-=[hideLayer]=-");
     qDebug("layer %d", layer);
 
-#ifdef __arm__
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     if (0 == layer)
     {
         ilm_layerSetVisibility(WINDOWMANAGER_LAYER_POPUP, ILM_FALSE);
     }
     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);
     }
@@ -596,16 +632,20 @@ void WindowManager::showLayer(int layer)
     qDebug("-=[showLayer]=-");
     qDebug("layer %d", layer);
 
-#ifdef __arm__
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     if (0 == layer)
     {
         ilm_layerSetVisibility(WINDOWMANAGER_LAYER_POPUP, ILM_TRUE);
     }
     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);
     }