aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTadao Tanikawa <tanikawa.tadao@jp.panasonic.com>2016-12-12 16:55:58 +0900
committerTadao Tanikawa <tanikawa.tadao@jp.panasonic.com>2016-12-12 20:24:32 +0900
commit7515965e55e112a4228764614bcdd3811ae44dd7 (patch)
tree72a1ddd998c7bfbaed4ff131dbca1f11923f1a62
parentf2b8bddb94a451c4bd822ef723a8b739236f4b4f (diff)
Hack to fix issue of switching apps
To switching between apps, controlling surface's visiblity (on/off) does not work as intended. It looks work well to set render order of layers properly. TODO: switching between apps and navigation still doesn't work. For develop, navigation icon is assgined to 'controls@0.1' and now, controls app doesn't make any wl_surfaces (don't know why). Probably this causes issue switching between apps <-> navigation. Signed-off-by: Tadao Tanikawa <tanikawa.tadao@jp.panasonic.com>
-rw-r--r--WindowManager/src/windowmanager.cpp87
-rw-r--r--WindowManager/src/windowmanager.hpp3
2 files changed, 51 insertions, 39 deletions
diff --git a/WindowManager/src/windowmanager.cpp b/WindowManager/src/windowmanager.cpp
index edcbf9e..0a2a609 100644
--- a/WindowManager/src/windowmanager.cpp
+++ b/WindowManager/src/windowmanager.cpp
@@ -36,9 +36,15 @@
// the HomeScreen app has to have the surface id 1000
#define WINDOWMANAGER_HOMESCREEN_MAIN_SURFACE_ID 1000
-
void* WindowManager::myThis = 0;
+static const int layer_id_array[] = {
+ WINDOWMANAGER_LAYER_POPUP,
+ WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY,
+ WINDOWMANAGER_LAYER_APPLICATIONS,
+ WINDOWMANAGER_LAYER_HOMESCREEN,
+};
+
WindowManager::WindowManager(QObject *parent) :
QObject(parent),
m_layouts(),
@@ -49,6 +55,13 @@ WindowManager::WindowManager(QObject *parent) :
m_screenWidth(0),
m_screenHeight(0)
{
+ m_showLayers = new int[WINDOWMANAGER_LAYER_NUM];
+
+ m_showLayers[0] = 0; /* POPUP is not shown by default */
+ m_showLayers[1] = 0; /* HOMESCREEN_OVERLAY is not shown by default */
+ m_showLayers[2] = 0; /* APPLICATIONS is not shown by default */
+ m_showLayers[3] = WINDOWMANAGER_LAYER_HOMESCREEN; /* HOMESCREEN is shwon by default */
+
qDebug("-=[WindowManager]=-");
}
@@ -97,6 +110,19 @@ WindowManager::~WindowManager()
delete mp_layoutAreaToSurfaceIdAssignment;
}
+int WindowManager::getLayerRenderOrder(t_ilm_layer id_array[])
+{
+ int i, j;
+
+ for (i = WINDOWMANAGER_LAYER_NUM - 1, j = 0; i >= 0; i--, j++) {
+ if (m_showLayers[i] != 0) {
+ id_array[j] = m_showLayers[i];
+ }
+ }
+
+ return j;
+}
+
void WindowManager::dumpScene()
{
qDebug("\n");
@@ -284,12 +310,9 @@ void WindowManager::updateScreen()
// display layer render order
t_ilm_layer renderOrder[WINDOWMANAGER_LAYER_NUM];
- renderOrder[0] = WINDOWMANAGER_LAYER_HOMESCREEN;
- renderOrder[1] = WINDOWMANAGER_LAYER_APPLICATIONS;
- renderOrder[2] = WINDOWMANAGER_LAYER_HOMESCREEN_OVERLAY;
- renderOrder[3] = WINDOWMANAGER_LAYER_POPUP;
- ilm_displaySetRenderOrder(0, renderOrder, WINDOWMANAGER_LAYER_NUM);
- ilm_displaySetRenderOrder(1, renderOrder, WINDOWMANAGER_LAYER_NUM);
+ int num_layers = getLayerRenderOrder(renderOrder);
+ ilm_displaySetRenderOrder(0, renderOrder, num_layers);
+ ilm_displaySetRenderOrder(1, renderOrder, num_layers);
ilm_commitChanges();
#endif
}
@@ -560,23 +583,16 @@ void WindowManager::hideLayer(int layer)
qDebug("layer %d", layer);
#ifdef HAVE_IVI_LAYERMANAGEMENT_API
- if (0 == layer)
- {
- ilm_layerSetVisibility(WINDOWMANAGER_LAYER_POPUP, ILM_FALSE);
- }
- if (1 == layer)
- {
- 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);
+ // POPUP=0, HOMESCREEN_OVERLAY=1, APPS=2, HOMESCREEN=3
+ if (layer >= 0 && layer < WINDOWMANAGER_LAYER_NUM) {
+ m_showLayers[layer] = 0;
+
+ t_ilm_layer renderOrder[WINDOWMANAGER_LAYER_NUM];
+ int num_layers = getLayerRenderOrder(renderOrder);
+ ilm_displaySetRenderOrder(0, renderOrder, num_layers);
+ ilm_displaySetRenderOrder(1, renderOrder, num_layers);
+ ilm_commitChanges();
}
- ilm_commitChanges();
#endif
}
@@ -639,22 +655,15 @@ void WindowManager::showLayer(int layer)
qDebug("layer %d", layer);
#ifdef HAVE_IVI_LAYERMANAGEMENT_API
- if (0 == layer)
- {
- ilm_layerSetVisibility(WINDOWMANAGER_LAYER_POPUP, ILM_TRUE);
- }
- if (1 == layer)
- {
- 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);
+ // POPUP=0, HOMESCREEN_OVERLAY=1, APPS=2, HOMESCREEN=3
+ if (layer >= 0 && layer < WINDOWMANAGER_LAYER_NUM) {
+ m_showLayers[layer] = layer_id_array[layer];
+
+ t_ilm_layer renderOrder[WINDOWMANAGER_LAYER_NUM];
+ int num_layers = getLayerRenderOrder(renderOrder);
+ ilm_displaySetRenderOrder(0, renderOrder, num_layers);
+ ilm_displaySetRenderOrder(1, renderOrder, num_layers);
+ ilm_commitChanges();
}
- ilm_commitChanges();
#endif
}
diff --git a/WindowManager/src/windowmanager.hpp b/WindowManager/src/windowmanager.hpp
index 7358412..8c8f63c 100644
--- a/WindowManager/src/windowmanager.hpp
+++ b/WindowManager/src/windowmanager.hpp
@@ -49,6 +49,9 @@ private:
unsigned int m_screenWidth;
unsigned int m_screenHeight;
+ int* m_showLayers;
+ int getLayerRenderOrder(t_ilm_layer id_array[]);
+
void dumpScene();
#ifdef HAVE_IVI_LAYERMANAGEMENT_API