DSZone: emit windowStackChanged signal when the stack has been changed 06/242106/1
authorSung-Jin Park <sj76.park@samsung.com>
Mon, 24 Aug 2020 05:47:23 +0000 (14:47 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Mon, 24 Aug 2020 06:34:00 +0000 (15:34 +0900)
Change-Id: I9755c327797fcebc22eac7accab49cd9ba22b331
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/DSZone/DSZone.cpp
src/DSZone/DSZone.h

index 4823aac..bf2700f 100644 (file)
@@ -113,6 +113,11 @@ void DSZone::registerCallbackWindowShellCreated(DSObject *slot, std::function<vo
        __windowShellCreatedSignal.connect(slot, func);
 }
 
+void DSZone::registerCallbackWindowStackChanged(DSObject *slot, std::function<void(std::shared_ptr<DSWindow>)> func)
+{
+       __windowStackChangedSignal.connect(slot, func);
+}
+
 void DSZone::registerCallbackWindowDestroy(DSObject *slot, std::function<void(std::shared_ptr<DSWindow>)> func)
 {
        __windowDestroySignal.connect(slot, func);
@@ -220,6 +225,10 @@ void DSZone::__prependWindowList(std::shared_ptr<DSWindow> window)
        __windowList.push_front(window);
 
        __stackChanged = true;
+       __updateWindowOrder();
+
+       std::shared_ptr<DSWindow> wTop(__windowList.front());
+       __windowStackChangedSignal.emit(wTop);
 }
 
 void DSZone::__appendWindowList(std::shared_ptr<DSWindow> window)
@@ -228,6 +237,10 @@ void DSZone::__appendWindowList(std::shared_ptr<DSWindow> window)
        __windowList.push_back(window);
 
        __stackChanged = true;
+       __updateWindowOrder();
+
+       std::shared_ptr<DSWindow> wTop(__windowList.front());
+       __windowStackChangedSignal.emit(wTop);
 }
 
 std::shared_ptr<DSWindow> DSZone::__findWindow(DSWaylandSurface *dswlSurface)
@@ -278,6 +291,23 @@ void DSZone::__destroyWindow(std::shared_ptr<DSWindow> window)
 {
        __windowDestroySignal.emit(window);
        __windowList.remove(window);
+
+       __stackChanged = true;
+       __updateWindowOrder();
+
+       std::shared_ptr<DSWindow> wTop(__windowList.front());
+       __windowStackChangedSignal.emit(wTop);
+}
+
+void DSZone::__updateWindowOrder(void)
+{
+       uint32_t zOrder  = 0;
+       std::list<std::shared_ptr<DSWindow>> wList = getWindowList();
+       for (auto w : wList)
+       {
+               /* TODO : check if the w is in its visible state */
+               w->setZOrder(zOrder++);
+       }
 }
 
 std::shared_ptr<DSWindowShell> DSZone::__createWindowShell(std::shared_ptr<DSWindow> window)
index f7266fc..acb3a61 100644 (file)
@@ -55,6 +55,7 @@ public:
        void registerCallbackWindowCreated(DSObject *slot, std::function<void(std::shared_ptr<DSWindow>)> func);
        void registerCallbackWindowDestroy(DSObject *slot, std::function<void(std::shared_ptr<DSWindow>)> func);
        void registerCallbackWindowShellCreated(DSObject *slot, std::function<void(std::shared_ptr<DSWindowShell>)> func);
+       void registerCallbackWindowStackChanged(DSObject *slot, std::function<void(std::shared_ptr<DSWindow>)> func);
 
        // emit functions for testing
        void callCallbackWindowCreated();
@@ -91,6 +92,7 @@ private:
 
        std::shared_ptr<DSWindow> __createWindow(std::shared_ptr<DSWaylandSurface> waylandSurface);
        void __destroyWindow(std::shared_ptr<DSWindow> window);
+       void __updateWindowOrder(void);
 
        std::shared_ptr<DSWindowShell> __createWindowShell(std::shared_ptr<DSWindow> window);
        void __destroyWindowShell(DSWindowShell* windowShell, DSWaylandSurface *surface);
@@ -116,6 +118,7 @@ private:
        // signals
        DSSignal<std::shared_ptr<DSWindow>> __windowCreatedSignal;
        DSSignal<std::shared_ptr<DSWindow>> __windowDestroySignal;
+       DSSignal<std::shared_ptr<DSWindow>> __windowStackChangedSignal;
        DSSignal<std::shared_ptr<DSWindowShell>> __windowShellCreatedSignal;
        DSSignal<std::shared_ptr<DSWindowShell>> __windowShellDestroySignal;
 };