From 3486ed8d722fd40838c74607b222f698ae82f787 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Sat, 22 Aug 2020 17:11:24 +0900 Subject: [PATCH 01/16] DSWindowManager: add API for setting parent window Change-Id: I87e6d1550ce89eede32ec2b2a421332126469e9d --- src/DSWindowManager/DSWindowManager.cpp | 17 +++++++++++++++++ src/DSWindowManager/DSWindowManager.h | 1 + src/DSWindowManager/DSWindowManagerPrivate.h | 1 + 3 files changed, 19 insertions(+) diff --git a/src/DSWindowManager/DSWindowManager.cpp b/src/DSWindowManager/DSWindowManager.cpp index ecb0420..3fc3e44 100644 --- a/src/DSWindowManager/DSWindowManager.cpp +++ b/src/DSWindowManager/DSWindowManager.cpp @@ -201,6 +201,17 @@ DSZone *DSWindowManagerPrivate::getZone(DSWaylandSurface *surface) return __getZone(surface); } +bool DSWindowManagerPrivate::setWindowParent(DSWaylandSurface *dswlSurface, DSWaylandSurface *dswlParentSurface) +{ + // find dsSurface's window + DSZone *zone = __getZone(dswlSurface); + if (!zone) return false; + + DSZone *pZone = __getZone(dswlParentSurface); + if (zone != pZone) return false; + + return zone->setWindowParent(dswlSurface, dswlParentSurface); +} void DSWindowManagerPrivate::setWindowTitle(DSWaylandSurface *dsSurface, const std::string &title) { @@ -421,6 +432,12 @@ DSZone *DSWindowManager::getZone(DSWaylandSurface *surface) return priv->getZone(surface); } +bool DSWindowManager::setWindowParent(DSWaylandSurface *dswlSurface, DSWaylandSurface *dswlParentSurface) +{ + DS_GET_PRIV(DSWindowManager); + return priv->setWindowParent(dswlSurface, dswlParentSurface); +} + void DSWindowManager::setWindowTitle(DSWaylandSurface *dsSurface, const std::string &title) { DS_GET_PRIV(DSWindowManager); diff --git a/src/DSWindowManager/DSWindowManager.h b/src/DSWindowManager/DSWindowManager.h index e7a135b..c11a495 100644 --- a/src/DSWindowManager/DSWindowManager.h +++ b/src/DSWindowManager/DSWindowManager.h @@ -55,6 +55,7 @@ public: void unregisterSurface(DSZone *zone, DSWaylandSurface *surface); DSZone *getZone(DSWaylandSurface *surface); + bool setWindowParent(DSWaylandSurface *dswlSurface, DSWaylandSurface *dswlParentSurface); void setWindowTitle(DSWaylandSurface *dsSurface, const std::string &title); void setWindowType(DSWaylandSurface *dsSurface, int type); void setWindowGeometry(DSWaylandSurface *dsSurface, int x, int y, unsigned int w, unsigned h); diff --git a/src/DSWindowManager/DSWindowManagerPrivate.h b/src/DSWindowManager/DSWindowManagerPrivate.h index be3610c..28f6ec2 100644 --- a/src/DSWindowManager/DSWindowManagerPrivate.h +++ b/src/DSWindowManager/DSWindowManagerPrivate.h @@ -50,6 +50,7 @@ public: void unregisterSurface(DSZone *zone, DSWaylandSurface *surface); DSZone *getZone(DSWaylandSurface *surface); + bool setWindowParent(DSWaylandSurface *dswlSurface, DSWaylandSurface *dswlParentSurface); void setWindowTitle(DSWaylandSurface *dsSurface, const std::string &title); void setWindowType(DSWaylandSurface *dsSurface, int type); void setWindowGeometry(DSWaylandSurface *dsSurface, int x, int y, unsigned int w, unsigned h); -- 2.7.4 From d12c320aba12635b0c7854c15626f8bee4161811 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Sat, 22 Aug 2020 17:12:09 +0900 Subject: [PATCH 02/16] implement tizen_policy_set_transient_for Change-Id: I072c7aad76e60f95da68680c4ec40fd871af38d8 --- src/DSWaylandServer/DSWaylandTizenPolicy.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/DSWaylandServer/DSWaylandTizenPolicy.cpp b/src/DSWaylandServer/DSWaylandTizenPolicy.cpp index 2a28cb5..2ccef52 100644 --- a/src/DSWaylandServer/DSWaylandTizenPolicy.cpp +++ b/src/DSWaylandServer/DSWaylandTizenPolicy.cpp @@ -185,7 +185,16 @@ void DSWaylandTizenPolicyPrivate::tizen_policy_set_notification_level(Resource * void DSWaylandTizenPolicyPrivate::tizen_policy_set_transient_for(Resource *resource, uint32_t child_id, uint32_t parent_id) { - DSLOG_DBG("TizenPolicyPriv", ""); + DSLOG_DBG("TizenPolicyPriv", "Set Transient_for (parent_id:%d, child_id:%d)", parent_id, child_id); + DS_GET_PUB(DSWaylandTizenPolicy); + DSWaylandCompositor *wlComp = pub->getWlCompositor(); + if (!wlComp) return; + if (!__wm) return; + + DSWaylandSurface *childSurface = wlComp->getSurface(child_id); + DSWaylandSurface *parentSurface = wlComp->getSurface(parent_id); + + __wm->setWindowParent(childSurface, parentSurface); } void DSWaylandTizenPolicyPrivate::tizen_policy_unset_transient_for(Resource *resource, uint32_t child_id) -- 2.7.4 From 5030f47e19168d1e03f8c33a95aa02b1f9f55741 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 24 Aug 2020 08:46:56 +0900 Subject: [PATCH 03/16] DSWaylandZxdgToplevel: implement set_parent Change-Id: If4e310ceea19cae12bad463d09913d87b85a7086 --- src/DSWaylandServer/DSWaylandZxdgShellV6.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/DSWaylandServer/DSWaylandZxdgShellV6.cpp b/src/DSWaylandServer/DSWaylandZxdgShellV6.cpp index 1e38eae..f72a1e7 100644 --- a/src/DSWaylandServer/DSWaylandZxdgShellV6.cpp +++ b/src/DSWaylandServer/DSWaylandZxdgShellV6.cpp @@ -544,9 +544,24 @@ void DSWaylandZxdgToplevelV6Private::zxdg_toplevel_v6_destroy_resource(zxdg_topl void DSWaylandZxdgToplevelV6Private::zxdg_toplevel_v6_destroy(zxdg_toplevel_v6::Resource *resource) { } + void DSWaylandZxdgToplevelV6Private::zxdg_toplevel_v6_set_parent(zxdg_toplevel_v6::Resource *resource, struct ::wl_resource *parent) { + DSLOG_DBG("XDG_TopLevel", "Set Parent (parent:%p)", parent); + + DSWaylandSurface *surface = __zxdgSurface->getSurface(); + if (!surface) return; + + DSWaylandSurface *parentSurface = DSWaylandSurface::fromWlResource(parent); + + DSWindowManager *wm = DSWindowManager::getInstance(); + if (wm) + { + wm->setWindowParent(surface, parentSurface); + DSWindowManager::releaseInstance(); + } } + void DSWaylandZxdgToplevelV6Private::zxdg_toplevel_v6_set_title(zxdg_toplevel_v6::Resource *resource, const std::string &title) { __zxdgSurface->setWindowTitle(title); -- 2.7.4 From c35e683050abf5b3aeabef9017bf7befb27c77ff Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 24 Aug 2020 09:05:45 +0900 Subject: [PATCH 04/16] DSWindowShellPrivate: initialize __layer value Change-Id: I834fbb839c74ca732600922353cbb271dc58db6d --- src/DSWindowShell/DSWindowShellPrivate.cpp | 3 ++- src/DSWindowShell/DSWindowShellPrivate.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/DSWindowShell/DSWindowShellPrivate.cpp b/src/DSWindowShell/DSWindowShellPrivate.cpp index 1b766c9..5119f90 100644 --- a/src/DSWindowShell/DSWindowShellPrivate.cpp +++ b/src/DSWindowShell/DSWindowShellPrivate.cpp @@ -39,7 +39,8 @@ DSWindowShellPrivate::DSWindowShellPrivate(DSWindowShell *p_ptr, DSWindow *windo __w(0), __h(0), __reqX(0), __reqY(0), __reqW(0), __reqH(0), - __parent(nullptr) + __parent(nullptr), + __layer(0) { } diff --git a/src/DSWindowShell/DSWindowShellPrivate.h b/src/DSWindowShell/DSWindowShellPrivate.h index 3340a31..454f23d 100644 --- a/src/DSWindowShell/DSWindowShellPrivate.h +++ b/src/DSWindowShell/DSWindowShellPrivate.h @@ -116,10 +116,10 @@ private: IDSWaylandShellSurface *__shellSurface; int __x, __y; unsigned int __w, __h; - int __layer; int __reqX, __reqY; unsigned int __reqW, __reqH; DSWindowShell *__parent; + int __layer; std::list __childList; }; -- 2.7.4 From e4bacf2c3a3791a84aaa2e94aae6ae947a50bf2d Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Mon, 24 Aug 2020 14:32:26 +0900 Subject: [PATCH 05/16] DSWindow: add setZOrder/getZOrder API Change-Id: I4345dbc9de85e18545138cfd7b619f191bb8cf67 Signed-off-by: Sung-Jin Park --- src/DSWindow/DSWindow.cpp | 14 ++++++++++++++ src/DSWindow/DSWindow.h | 3 +++ src/DSWindow/DSWindowPrivate.h | 1 + 3 files changed, 18 insertions(+) diff --git a/src/DSWindow/DSWindow.cpp b/src/DSWindow/DSWindow.cpp index 1657a07..8673000 100644 --- a/src/DSWindow/DSWindow.cpp +++ b/src/DSWindow/DSWindow.cpp @@ -37,6 +37,7 @@ DSWindowPrivate::DSWindowPrivate(DSWindow *p_ptr) __y(0), __w(0), __h(0), + __zOrder(0), __committedW(0), __committedH(0), __created(false), @@ -418,6 +419,19 @@ void DSWindow::setSize(stSize size) priv->__changedGeometry = true; } +void DSWindow::setZOrder(unsigned int zOrder) +{ + DS_GET_PRIV(DSWindow); + + priv->__zOrder = zOrder; +} + +unsigned int DSWindow::getZOrder() +{ + DS_GET_PRIV(DSWindow); + + return priv->__zOrder; +} bool DSWindow::setVkbdFloating(bool set) { diff --git a/src/DSWindow/DSWindow.h b/src/DSWindow/DSWindow.h index 2907456..4f1922a 100644 --- a/src/DSWindow/DSWindow.h +++ b/src/DSWindow/DSWindow.h @@ -77,6 +77,9 @@ public: void setSize(unsigned int w, unsigned int h); void setSize(stSize size); + void setZOrder(unsigned int zOrder); + unsigned int getZOrder(); + bool setVkbdFloating(bool set); bool getVkbdFloating(); diff --git a/src/DSWindow/DSWindowPrivate.h b/src/DSWindow/DSWindowPrivate.h index b8be9ee..f250484 100644 --- a/src/DSWindow/DSWindowPrivate.h +++ b/src/DSWindow/DSWindowPrivate.h @@ -83,6 +83,7 @@ private: int __x, __y; unsigned int __w; unsigned int __h; + unsigned int __zOrder; unsigned int __committedW, __committedH; bool __created; bool __hasFocus; -- 2.7.4 From 88ec1669113f1e6e4bc39fc09c92a29a9f871fee Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Mon, 24 Aug 2020 14:47:23 +0900 Subject: [PATCH 06/16] DSZone: emit windowStackChanged signal when the stack has been changed Change-Id: I9755c327797fcebc22eac7accab49cd9ba22b331 Signed-off-by: Sung-Jin Park --- src/DSZone/DSZone.cpp | 30 ++++++++++++++++++++++++++++++ src/DSZone/DSZone.h | 3 +++ 2 files changed, 33 insertions(+) diff --git a/src/DSZone/DSZone.cpp b/src/DSZone/DSZone.cpp index 4823aac..bf2700f 100644 --- a/src/DSZone/DSZone.cpp +++ b/src/DSZone/DSZone.cpp @@ -113,6 +113,11 @@ void DSZone::registerCallbackWindowShellCreated(DSObject *slot, std::function)> func) +{ + __windowStackChangedSignal.connect(slot, func); +} + void DSZone::registerCallbackWindowDestroy(DSObject *slot, std::function)> func) { __windowDestroySignal.connect(slot, func); @@ -220,6 +225,10 @@ void DSZone::__prependWindowList(std::shared_ptr window) __windowList.push_front(window); __stackChanged = true; + __updateWindowOrder(); + + std::shared_ptr wTop(__windowList.front()); + __windowStackChangedSignal.emit(wTop); } void DSZone::__appendWindowList(std::shared_ptr window) @@ -228,6 +237,10 @@ void DSZone::__appendWindowList(std::shared_ptr window) __windowList.push_back(window); __stackChanged = true; + __updateWindowOrder(); + + std::shared_ptr wTop(__windowList.front()); + __windowStackChangedSignal.emit(wTop); } std::shared_ptr DSZone::__findWindow(DSWaylandSurface *dswlSurface) @@ -278,6 +291,23 @@ void DSZone::__destroyWindow(std::shared_ptr window) { __windowDestroySignal.emit(window); __windowList.remove(window); + + __stackChanged = true; + __updateWindowOrder(); + + std::shared_ptr wTop(__windowList.front()); + __windowStackChangedSignal.emit(wTop); +} + +void DSZone::__updateWindowOrder(void) +{ + uint32_t zOrder = 0; + std::list> wList = getWindowList(); + for (auto w : wList) + { + /* TODO : check if the w is in its visible state */ + w->setZOrder(zOrder++); + } } std::shared_ptr DSZone::__createWindowShell(std::shared_ptr window) diff --git a/src/DSZone/DSZone.h b/src/DSZone/DSZone.h index f7266fc..acb3a61 100644 --- a/src/DSZone/DSZone.h +++ b/src/DSZone/DSZone.h @@ -55,6 +55,7 @@ public: void registerCallbackWindowCreated(DSObject *slot, std::function)> func); void registerCallbackWindowDestroy(DSObject *slot, std::function)> func); void registerCallbackWindowShellCreated(DSObject *slot, std::function)> func); + void registerCallbackWindowStackChanged(DSObject *slot, std::function)> func); // emit functions for testing void callCallbackWindowCreated(); @@ -91,6 +92,7 @@ private: std::shared_ptr __createWindow(std::shared_ptr waylandSurface); void __destroyWindow(std::shared_ptr window); + void __updateWindowOrder(void); std::shared_ptr __createWindowShell(std::shared_ptr window); void __destroyWindowShell(DSWindowShell* windowShell, DSWaylandSurface *surface); @@ -116,6 +118,7 @@ private: // signals DSSignal> __windowCreatedSignal; DSSignal> __windowDestroySignal; + DSSignal> __windowStackChangedSignal; DSSignal> __windowShellCreatedSignal; DSSignal> __windowShellDestroySignal; }; -- 2.7.4 From 84ee6ac1d505a60634a3cd7807385e1f93ed9006 Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Mon, 24 Aug 2020 14:48:05 +0900 Subject: [PATCH 07/16] DSSeat: add/register slot for windowStackChanged signal Change-Id: Ida868f529c5c9a766b08414da5a269caee525506 Signed-off-by: Sung-Jin Park --- src/DSSeat/DSSeat.cpp | 12 ++++++++++-- src/DSSeat/DSSeat.h | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/DSSeat/DSSeat.cpp b/src/DSSeat/DSSeat.cpp index 645b45f..0030478 100644 --- a/src/DSSeat/DSSeat.cpp +++ b/src/DSSeat/DSSeat.cpp @@ -58,7 +58,8 @@ DSSeat::DSSeat() __numPointer(0), __numKeyboard(0), __numTouch(0), - __focusWin(nullptr) + __focusWin(nullptr), + __stackChanged(false) { } @@ -75,7 +76,8 @@ DSSeat::DSSeat(DSCompositor *compositor, std::string name) __numPointer(0), __numKeyboard(0), __numTouch(0), - __focusWin(nullptr) + __focusWin(nullptr), + __stackChanged(false) { if (!compositor) return; @@ -138,6 +140,7 @@ bool DSSeat::attachZone(std::shared_ptr zone) __zone = zone; __zone->registerCallbackWindowCreated(this, std::bind(&DSSeat::__onWindowCreated, this, std::placeholders::_1)); + __zone->registerCallbackWindowStackChanged(this, std::bind(&DSSeat::__onWindowStackChanged, this, std::placeholders::_1)); __zone->registerCallbackWindowDestroy(this, std::bind(&DSSeat::__onWindowDestroy, this, std::placeholders::_1)); return true; @@ -460,6 +463,11 @@ void DSSeat::__onTouchEvent(DSInputTouchEvent *ev) __touch->processEvent(ev, nullptr); } +void DSSeat::__onWindowStackChanged(std::shared_ptr topWindow) +{ + __stackChanged = true; +} + void DSSeat::__onWindowCreated(std::shared_ptr window) { DSLOG_INF("DSSeat", "window created : %p (%p)", window, window.get()); diff --git a/src/DSSeat/DSSeat.h b/src/DSSeat/DSSeat.h index a599b50..6b7cc01 100644 --- a/src/DSSeat/DSSeat.h +++ b/src/DSSeat/DSSeat.h @@ -91,6 +91,7 @@ private: uint32_t __numTouch; std::shared_ptr __focusWin; + bool __stackChanged; void __initSlots(); void __initEventHandlers(); @@ -109,6 +110,7 @@ private: void __onKeyEvent(DSInputKeyboardEvent *ev); void __onPointerEvent(DSInputMouseEvent *ev); void __onTouchEvent(DSInputTouchEvent *ev); + void __onWindowStackChanged(std::shared_ptr topWindow); void __onWindowCreated(std::shared_ptr window); void __onWindowDestroy(std::shared_ptr window); }; -- 2.7.4 From 7010f8e37eb145fc10fdabe110cb8f2d9fd32cb4 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 24 Aug 2020 16:55:50 +0900 Subject: [PATCH 08/16] DSWaylandSurface: add bufferChanged method allow to check if buffer is attached. wayland client can attach null buffer resource. Change-Id: I284b186e150e4fa577eb7b451d81f1a14d9e68ea --- src/DSWaylandServer/DSWaylandSurface.cpp | 14 +++++++++++++- src/DSWaylandServer/DSWaylandSurface.h | 1 + src/DSWaylandServer/DSWaylandSurfacePrivate.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/DSWaylandServer/DSWaylandSurface.cpp b/src/DSWaylandServer/DSWaylandSurface.cpp index 473e3a0..7e98b10 100644 --- a/src/DSWaylandServer/DSWaylandSurface.cpp +++ b/src/DSWaylandServer/DSWaylandSurface.cpp @@ -63,6 +63,13 @@ std::shared_ptr DSWaylandSurfaceCommitInfo::getBuffer() return priv->getBuffer(); } +bool DSWaylandSurfaceCommitInfo::bufferChanged() +{ + DS_GET_PRIV(DSWaylandSurfaceCommitInfo); + + return priv->bufferChanged; +} + /* DSWaylandSurfacePrivate */ DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr) : DSObjectPrivate(p_ptr), @@ -131,8 +138,11 @@ void DSWaylandSurfacePrivate::surface_attach(Resource *resource, struct ::wl_res if (buffer) { dsBuffer = __bufferManager->getDSBuffer(buffer); commitInfoPendingPriv->bufferRef = std::make_unique(dsBuffer); - + } else { + commitInfoPendingPriv->bufferRef = nullptr; } + + commitInfoPendingPriv->bufferChanged = true; } void DSWaylandSurfacePrivate::surface_damage(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) @@ -174,6 +184,8 @@ void DSWaylandSurfacePrivate::surface_commit(Resource *resource) commitInfoPriv->scale = commitInfoPendingPriv->scale; commitInfoPriv->damageBuffer = commitInfoPendingPriv->damageBuffer; commitInfoPriv->bufferRef = std::move(commitInfoPendingPriv->bufferRef); + commitInfoPriv->bufferChanged = commitInfoPendingPriv->bufferChanged; + commitInfoPendingPriv->bufferChanged = false; // reset value // emit a signal of the surface committed pub->__surfaceCommittedSignal.emit(__commitInfo); diff --git a/src/DSWaylandServer/DSWaylandSurface.h b/src/DSWaylandServer/DSWaylandSurface.h index 41d1ccb..d9cac4a 100644 --- a/src/DSWaylandServer/DSWaylandSurface.h +++ b/src/DSWaylandServer/DSWaylandSurface.h @@ -48,6 +48,7 @@ public: //TODO: add getter functions. std::shared_ptr getBuffer(); + bool bufferChanged(); }; class DSWaylandSurface : public DSObject diff --git a/src/DSWaylandServer/DSWaylandSurfacePrivate.h b/src/DSWaylandServer/DSWaylandSurfacePrivate.h index abff9c2..4b37613 100644 --- a/src/DSWaylandServer/DSWaylandSurfacePrivate.h +++ b/src/DSWaylandServer/DSWaylandSurfacePrivate.h @@ -56,6 +56,7 @@ public: }; std::unique_ptr bufferRef; struct _attach attach; + bool bufferChanged; struct damageSurface { int32_t x; -- 2.7.4 From 7b1b82bfa9d99b4074733ad112bc23a5d53755b6 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 24 Aug 2020 16:57:29 +0900 Subject: [PATCH 09/16] DSWindow: client can commit null buffer. Change-Id: I6a7b98d9151f70f68aec0b0ccbb9fd95ab437691 --- src/DSWindow/DSWindow.cpp | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/DSWindow/DSWindow.cpp b/src/DSWindow/DSWindow.cpp index 8673000..acf1e07 100644 --- a/src/DSWindow/DSWindow.cpp +++ b/src/DSWindow/DSWindow.cpp @@ -206,22 +206,8 @@ void DSWindowPrivate::__onSurfaceCommitted(std::shared_ptr buffer = waylandSurfaceCommitInfo->getBuffer(); - if (buffer) { - // TODO: set the size of window with the size of commit information - // It could be changed by DSWindowShell policy later.. - std::shared_ptr bufferSize = buffer->getSize(); - __committedW = bufferSize->w; - __committedH = bufferSize->h; - -#if 0 // temporary code - we have to use policy to decide window's size. - if ((__committedW != __w) || - (__committedH != __h)) - { - DSLOG_ERR("DSWindow", "Committed size (%d,%d) is not same to requested size(%d,%d)", bufferSize->w, bufferSize->h, __w, __h); - return; - } -#endif + if (waylandSurfaceCommitInfo->bufferChanged()) { + std::shared_ptr buffer = waylandSurfaceCommitInfo->getBuffer(); // emit a signal of the buffer changed pub->__bufferChangedSignal.emit(buffer); -- 2.7.4 From 6228bb3eacea64ec0493a74295ed55e3154c5ff7 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 24 Aug 2020 16:59:21 +0900 Subject: [PATCH 10/16] DSRenderViewDaliImpl: change the visibility of the dali actor. when buffer exist, set visible. when buffer is null, set unvisible. Change-Id: I944f99582bde658a7aac9ce6fe602b5f3a9761b4 --- src/DSRender/DSRenderViewDaliImpl.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/DSRender/DSRenderViewDaliImpl.cpp b/src/DSRender/DSRenderViewDaliImpl.cpp index b76a004..1b64d5b 100644 --- a/src/DSRender/DSRenderViewDaliImpl.cpp +++ b/src/DSRender/DSRenderViewDaliImpl.cpp @@ -115,19 +115,28 @@ DSRenderViewDaliImpl::~DSRenderViewDaliImpl() bool DSRenderViewDaliImpl::setBuffer(std::shared_ptr buffer) { - tbm_surface_h nativeBuffer = (tbm_surface_h)buffer->getNativeBuffer(); - std::shared_ptr bufferSize = buffer->getSize(); + if (buffer) { + DSLOG_INF("DSRenderViewDaliImpl", "buffer set."); - __textureViewActor.SetProperty(Actor::Property::SIZE, Vector2(bufferSize->w, bufferSize->h)); + __textureViewActor.SetProperty(Actor::Property::VISIBLE, true); - NativeImageSourcePtr nativeImageSource = NativeImageSource::New(Any(nativeBuffer)); + tbm_surface_h nativeBuffer = (tbm_surface_h)buffer->getNativeBuffer(); + std::shared_ptr bufferSize = buffer->getSize(); - Texture nativeTexture = Texture::New(*nativeImageSource); + __textureViewActor.SetProperty(Actor::Property::SIZE, Vector2(bufferSize->w, bufferSize->h)); - TextureSet textureSet = TextureSet::New(); - textureSet.SetTexture(0u, nativeTexture); + NativeImageSourcePtr nativeImageSource = NativeImageSource::New(Any(nativeBuffer)); - __renderer.SetTextures(textureSet); + Texture nativeTexture = Texture::New(*nativeImageSource); + + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture(0u, nativeTexture); + + __renderer.SetTextures(textureSet); + } else { + DSLOG_INF("DSRenderViewDaliImpl", "buffer NULL."); + __textureViewActor.SetProperty(Actor::Property::VISIBLE, false); + } return true; } @@ -139,9 +148,12 @@ std::shared_ptr DSRenderViewDaliImpl::getWindow() void DSRenderViewDaliImpl::__onWindowBufferChanged(std::shared_ptr buffer) { - std::shared_ptr bufferSize = buffer->getSize(); - - DSLOG_INF("DSRenderViewDaliImpl", "Window Buffer changed. buffer(%p) size(%d, %d)", buffer.get(), bufferSize->w, bufferSize->h); + if (buffer) { + std::shared_ptr bufferSize = buffer->getSize(); + DSLOG_INF("DSRenderViewDaliImpl", "Window Buffer changed. buffer(%p) size(%d, %d)", buffer.get(), bufferSize->w, bufferSize->h); + } else { + DSLOG_INF("DSRenderViewDaliImpl", "Window Buffer changed. buffer(nullptr)"); + } if (!setBuffer(buffer)) { DSLOG_ERR("DSRenderViewDaliImpl", "setBuffer fails."); -- 2.7.4 From 81ff4150eb6f6ebe958117a1aa1c5cad5e53edeb Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Mon, 24 Aug 2020 19:24:40 +0900 Subject: [PATCH 11/16] DSWaylandSurfaceCommitInfo: initialize bufferChanged to false Change-Id: Iba5d6da7e04512640d8e98ae28cc3da624884418 Signed-off-by: Sung-Jin Park --- src/DSWaylandServer/DSWaylandSurface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/DSWaylandServer/DSWaylandSurface.cpp b/src/DSWaylandServer/DSWaylandSurface.cpp index 7e98b10..26afa18 100644 --- a/src/DSWaylandServer/DSWaylandSurface.cpp +++ b/src/DSWaylandServer/DSWaylandSurface.cpp @@ -33,6 +33,7 @@ DSWaylandSurfaceCommitInfoPrivate::DSWaylandSurfaceCommitInfoPrivate(DSWaylandSu __p_ptr(p_ptr), bufferRef(nullptr), attach({0, 0, nullptr}), + bufferChanged(false), damageSurface({0, 0, 0, 0}), transform(0), scale(0), -- 2.7.4 From fb0ebc19682c5ac2685ef3de133824ec0e48d101 Mon Sep 17 00:00:00 2001 From: jeon Date: Mon, 24 Aug 2020 20:41:59 +0900 Subject: [PATCH 12/16] DSDebug: check environment to use dlog Change-Id: I3d98a8723c33ca96b80bb503a40d21c88b3c12c4 --- src/DSDebug/DSDebugLog.cpp | 51 +++++++++++++++++++++++++++++++++++----------- src/DSDebug/DSDebugLog.h | 1 + 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/DSDebug/DSDebugLog.cpp b/src/DSDebug/DSDebugLog.cpp index 2900668..3966335 100644 --- a/src/DSDebug/DSDebugLog.cpp +++ b/src/DSDebug/DSDebugLog.cpp @@ -24,6 +24,7 @@ #include #include #include "DSDebugLog.h" +#include #define COLOR_RED "\x1b[31m" /* for error */ #define COLOR_YELLOW "\x1b[33m" /* for warning */ @@ -33,7 +34,18 @@ namespace display_server { DSDebugLog::DSDebugLog() : mLogLevel(LOG_LEVEL_DEBUG) -{} +{ + char *tmp = getenv("DSLOG_DLOG_ENABLE"); + char *env = strdup(tmp); + int value = atoi(env); + + free(env); + + if (value == 1) + __enableDlog = true; + else + __enableDlog = false; +} DSDebugLog::~DSDebugLog() {} @@ -59,17 +71,32 @@ void DSDebugLog::printLog(int logLevel, const char *domain, const char *funcName //TODO: use dlog or stdout //TODO: use dlog filters va_list arg; - const char *lvl_str[] = { "DS_DBG", "DS_INF", "DS_WRN", "DS_ERR" }; - const char *color[] = { COLOR_RESET, COLOR_GREEN, COLOR_YELLOW, COLOR_RED }; - - va_start(arg, fmt); - printf("%s", color[logLevel]); - printf("[%s]", lvl_str[logLevel]); - printf("[%s]", domain); - printf(":[%s(%d)]:", funcName, line); - vprintf(fmt, arg); - printf("\n"); - va_end(arg); + + if (__enableDlog) + { + const log_priority dlogLevel[] = { DLOG_DEBUG, DLOG_INFO, DLOG_WARN, DLOG_ERROR }; + char buf[512] = {0,}; + + va_start(arg, fmt); + vsnprintf((char *)buf, sizeof(buf), fmt, arg); + va_end(arg); + + dlog_print(dlogLevel[logLevel], "LIBDS", "[%s][%s:%d] %s", domain, funcName, line, buf); + } + else + { + const char *lvl_str[] = { "DS_DBG", "DS_INF", "DS_WRN", "DS_ERR" }; + const char *color[] = { COLOR_RESET, COLOR_GREEN, COLOR_YELLOW, COLOR_RED }; + + va_start(arg, fmt); + printf( "%s", color[logLevel]); + printf( "[%s]", lvl_str[logLevel]); + printf( "[%s]", domain); + printf( ":[%s(%d)]:", funcName, line); + vprintf( fmt, arg); + printf( "\n"); + va_end(arg); + } } int DSDebugLog::getLogLevel() diff --git a/src/DSDebug/DSDebugLog.h b/src/DSDebug/DSDebugLog.h index 12be42e..a1e8dfd 100644 --- a/src/DSDebug/DSDebugLog.h +++ b/src/DSDebug/DSDebugLog.h @@ -55,6 +55,7 @@ private: static DSDebugLog *mInstance; // singleton instance static std::mutex mMutex; // mutex int mLogLevel; // current log level + bool __enableDlog; }; #define DSLOG_DBG(domain, fmt, args...) \ -- 2.7.4 From f14da1c5d987e3abc1081b4604bb02e9c8fb48bf Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Mon, 24 Aug 2020 20:03:39 +0900 Subject: [PATCH 13/16] DSWaylandKeyboard: sendEnter when the focused client binds to wl_keyboard Change-Id: Idd975376e71f7d465152022b7dc02fcb7c6bfe91 Signed-off-by: Sung-Jin Park --- src/DSWaylandServer/DSWaylandKeyboard.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/DSWaylandServer/DSWaylandKeyboard.cpp b/src/DSWaylandServer/DSWaylandKeyboard.cpp index e920198..3ca2388 100644 --- a/src/DSWaylandServer/DSWaylandKeyboard.cpp +++ b/src/DSWaylandServer/DSWaylandKeyboard.cpp @@ -89,6 +89,12 @@ void DSWaylandKeyboardPrivate::keyboard_bind_resource(Resource *resource) sendKeymap(resource); sendRepeatInfo(resource); + + if (__focusSurface && __focusSurface->hasResource()) + { + DSLOG_INF("DSWaylandKeyboardPrivate", "Send enter to focusSurface(%p)", __focusSurface); + sendEnter(__focusSurface->getWlResource()); + } } void DSWaylandKeyboardPrivate::keyboard_destroy_resource(Resource *resource) -- 2.7.4 From 30808f5ed6638559d61f5479cf142b8a7772f807 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 24 Aug 2020 19:49:08 +0900 Subject: [PATCH 14/16] DSWindow: add APIs for allow user geometry Change-Id: I2fe296819d10c3a3ee5ba6c65c298335c5d5dd74 --- src/DSWindow/DSWindow.cpp | 23 +++++++++++++++++++++++ src/DSWindow/DSWindow.h | 3 +++ src/DSWindow/DSWindowPrivate.h | 4 ++++ tests/DSWindow-test.cpp | 11 +++++++++++ 4 files changed, 41 insertions(+) diff --git a/src/DSWindow/DSWindow.cpp b/src/DSWindow/DSWindow.cpp index acf1e07..3e5597f 100644 --- a/src/DSWindow/DSWindow.cpp +++ b/src/DSWindow/DSWindow.cpp @@ -47,6 +47,7 @@ DSWindowPrivate::DSWindowPrivate(DSWindow *p_ptr) __firstCommit(true), __changedGeometry(false), __acceptsFocus(true), + __allowUserGeometry(false), __title(""), __vkbd_floating(false) { @@ -120,6 +121,16 @@ bool DSWindowPrivate::getSkipFocus(void) return true; } +void DSWindowPrivate::allowUserGeometry(bool set) +{ + __allowUserGeometry = set; +} + +bool DSWindowPrivate::isAllowUserGeometry(void) +{ + return __allowUserGeometry; +} + bool DSWindowPrivate::setLayer(int layer) { return true; @@ -311,6 +322,18 @@ bool DSWindow::getSkipFocus(void) return priv->getSkipFocus(); } +void DSWindow::allowUserGeometry(bool set) +{ + DS_GET_PRIV(DSWindow); + priv->allowUserGeometry(set); +} + +bool DSWindow::isAllowUserGeometry(void) +{ + DS_GET_PRIV(DSWindow); + return priv->isAllowUserGeometry(); +} + bool DSWindow::setLayer(int layer) { DS_GET_PRIV(DSWindow); diff --git a/src/DSWindow/DSWindow.h b/src/DSWindow/DSWindow.h index 4f1922a..4426809 100644 --- a/src/DSWindow/DSWindow.h +++ b/src/DSWindow/DSWindow.h @@ -62,6 +62,9 @@ public: bool setSkipFocus(bool set); bool getSkipFocus(void); + void allowUserGeometry(bool set); + bool isAllowUserGeometry(void); + bool setLayer(int layer); bool raise(void); bool lower(void); diff --git a/src/DSWindow/DSWindowPrivate.h b/src/DSWindow/DSWindowPrivate.h index f250484..2e6e642 100644 --- a/src/DSWindow/DSWindowPrivate.h +++ b/src/DSWindow/DSWindowPrivate.h @@ -59,6 +59,9 @@ public: bool setSkipFocus(bool set); bool getSkipFocus(void); + void allowUserGeometry(bool set); + bool isAllowUserGeometry(void); + bool setLayer(int layer); bool raise(void); bool lower(void); @@ -92,6 +95,7 @@ private: bool __firstCommit; bool __changedGeometry; bool __acceptsFocus; + bool __allowUserGeometry; std::string __title; bool __vkbd_floating; diff --git a/tests/DSWindow-test.cpp b/tests/DSWindow-test.cpp index d591563..88f8b48 100644 --- a/tests/DSWindow-test.cpp +++ b/tests/DSWindow-test.cpp @@ -184,3 +184,14 @@ TEST_F(DSWindowTest, ParentTest) EXPECT_TRUE(child->getParent() == nullptr); } +TEST_F(DSWindowTest, UserGeometryTest) +{ + auto win = std::make_shared(); + EXPECT_TRUE(win != nullptr); + + EXPECT_FALSE(win->isAllowUserGeometry()); + + win->allowUserGeometry(true); + EXPECT_TRUE(win->isAllowUserGeometry()); +} + -- 2.7.4 From bd7b0a3008bc29903df21d93def72b945ff6e3b1 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 24 Aug 2020 19:59:21 +0900 Subject: [PATCH 15/16] DSWindowShell: add APIs for handle aux hint Change-Id: I40eb0294e63c70f44b44f3f5d1e745f508b1604e --- src/DSWindowShell/DSWindowShell.cpp | 18 +++++ src/DSWindowShell/DSWindowShell.h | 4 ++ src/DSWindowShell/DSWindowShellPrivate.cpp | 112 ++++++++++++++++++++++++++++- src/DSWindowShell/DSWindowShellPrivate.h | 17 +++++ 4 files changed, 148 insertions(+), 3 deletions(-) diff --git a/src/DSWindowShell/DSWindowShell.cpp b/src/DSWindowShell/DSWindowShell.cpp index c6a0e7c..6863736 100644 --- a/src/DSWindowShell/DSWindowShell.cpp +++ b/src/DSWindowShell/DSWindowShell.cpp @@ -146,6 +146,24 @@ stGeometry DSWindowShell::getGeometry(void) return priv->getGeometry(); } +void DSWindowShell::addAuxHint(int32_t id, const std::string &name, const std::string &value) +{ + DS_GET_PRIV(DSWindowShell); + priv->addAuxHint(id, name, value); +} + +void DSWindowShell::changeAuxHint(int32_t id, const std::string &value) +{ + DS_GET_PRIV(DSWindowShell); + priv->changeAuxHint(id, value); +} + +void DSWindowShell::removeAuxHint(int32_t id) +{ + DS_GET_PRIV(DSWindowShell); + priv->removeAuxHint(id); +} + bool DSWindowShell::show(void) { DS_GET_PRIV(DSWindowShell); diff --git a/src/DSWindowShell/DSWindowShell.h b/src/DSWindowShell/DSWindowShell.h index 0fe1f6d..f5a76f2 100644 --- a/src/DSWindowShell/DSWindowShell.h +++ b/src/DSWindowShell/DSWindowShell.h @@ -70,6 +70,10 @@ public: bool setGeometry(int x, int y, unsigned int w, unsigned int h); stGeometry getGeometry(void); + void addAuxHint(int32_t id, const std::string &name, const std::string &value); + void changeAuxHint(int32_t id, const std::string &value); + void removeAuxHint(int32_t id); + bool show(void); bool hide(bool autoFocus = true); int showState(void); diff --git a/src/DSWindowShell/DSWindowShellPrivate.cpp b/src/DSWindowShell/DSWindowShellPrivate.cpp index 5119f90..928bee4 100644 --- a/src/DSWindowShell/DSWindowShellPrivate.cpp +++ b/src/DSWindowShell/DSWindowShellPrivate.cpp @@ -27,8 +27,36 @@ namespace display_server { -struct DTWindowShell -{ +enum _Hint_Type +{ + DS_WINDOW_HINT_USER_GEOMETRY = 0, + DS_WINDOW_HINT_FIXED_RESIZE = 1, + DS_WINDOW_HINT_DEICONIFY_UPDATE = 2, + DS_WINDOW_HINT_ICONIFY = 3, + DS_WINDOW_HINT_ABOVE_LOCKSCREEN = 4, + DS_WINDOW_HINT_GESTURE_DISABLE = 5, + DS_WINDOW_HINT_EFFECT_DISABLE = 6, + DS_WINDOW_HINT_MSG_USE = 7, + DS_WINDOW_HINT_ALWAYS_SELECTIVE = 8, + DS_WINDOW_HINT_DEPENDENT_ROTATION = 9, + DS_WINDOW_HINT_ROT_RENDER_NOPENDING = 10, + DS_WINDOW_HINT_ICONIFY_BUFFER_FLUSH = 11, +}; + +static const char *sHintNames[] = +{ + "wm.policy.win.user.geometry", + "wm.policy.win.fixed.resize", + "wm.policy.win.deiconify.update", + "wm.policy.win.iconify", + "wm.policy.win.above.lock", + "wm.policy.win.gesture.disable", + "wm.policy.win.effect.disable", + "wm.policy.win.msg.use", + "wm.comp.win.always.selective.mode", + "wm.policy.win.rot.dependent", + "wm.policy.win.rot.render.nopending", + "wm.policy.win.iconify.buffer.flush", }; DSWindowShellPrivate::DSWindowShellPrivate(DSWindowShell *p_ptr, DSWindow *window) @@ -46,7 +74,10 @@ DSWindowShellPrivate::DSWindowShellPrivate(DSWindowShell *p_ptr, DSWindow *windo DSWindowShellPrivate::~DSWindowShellPrivate() { - + for (stWindowAuxHint *hint : __auxHintsList) + { + delete hint; + } } bool DSWindowShellPrivate::__findInChildList(DSWindowShell *parentWinShell) @@ -99,6 +130,34 @@ bool DSWindowShellPrivate::__setParent(DSWindowShell *parentWinShell) return true; } +struct stWindowAuxHint *DSWindowShellPrivate::__findAuxHint(int32_t id) +{ + for (stWindowAuxHint* hint : __auxHintsList) + { + if (hint->id == id) + return hint; + } + + return nullptr; +} + +void DSWindowShellPrivate::__handleAuxHint(stWindowAuxHint *hint) +{ + if (!__window) return; + + // do something for each hints + if (hint->name == sHintNames[DS_WINDOW_HINT_USER_GEOMETRY]) // user geometry + { + bool set; + + if (hint->value == "1") + set = true; + else + set = false; + + __window->allowUserGeometry(set); + } +} bool DSWindowShellPrivate::create(DSWindowShell *pParent) { @@ -244,6 +303,53 @@ stGeometry DSWindowShellPrivate::getGeometry(void) return geo; } +void DSWindowShellPrivate::addAuxHint(int32_t id, const std::string &name, const std::string &value) +{ + stWindowAuxHint *hint; + hint = __findAuxHint(id); + if (!hint) + { + hint = new stWindowAuxHint(); + if (!hint) return; + + __auxHintsList.push_back(hint); + } + + hint->id = id; + hint->name = name; + hint->value = value; + hint->changed = true; + hint->deleted = false; + + DSLOG_DBG("DSWindowShell", "Add aux hint... id:%d, name:%s, value:%s", id, name.c_str(), value.c_str()); + + __handleAuxHint(hint); +} + +void DSWindowShellPrivate::changeAuxHint(int32_t id, const std::string &value) +{ + stWindowAuxHint *hint; + hint = __findAuxHint(id); + if (!hint) return; + + hint->value = value; + hint->changed = true; + + __handleAuxHint(hint); +} + +void DSWindowShellPrivate::removeAuxHint(int32_t id) +{ + stWindowAuxHint *hint; + hint = __findAuxHint(id); + if (!hint) return; + + hint->changed = true; + hint->deleted = true; + + __auxHintsList.remove(hint); +} + bool DSWindowShellPrivate::show(void) { return true; diff --git a/src/DSWindowShell/DSWindowShellPrivate.h b/src/DSWindowShell/DSWindowShellPrivate.h index 454f23d..df1e9c8 100644 --- a/src/DSWindowShell/DSWindowShellPrivate.h +++ b/src/DSWindowShell/DSWindowShellPrivate.h @@ -29,6 +29,15 @@ namespace display_server { +struct stWindowAuxHint +{ + int32_t id; + std::string name; + std::string value; + bool changed; + bool deleted; +}; + class DSWindowShellPrivate { DS_PIMPL_USE_PUBLIC(DSWindowShell) @@ -66,6 +75,10 @@ public: bool setGeometry(int x, int y, unsigned int w, unsigned int h); stGeometry getGeometry(void); + void addAuxHint(int32_t id, const std::string &name, const std::string &value); + void changeAuxHint(int32_t id, const std::string &value); + void removeAuxHint(int32_t id); + bool show(void); bool hide(bool autoFocus = true); int showState(void); @@ -111,6 +124,9 @@ private: bool __findInChildList(DSWindowShell *parentWinShell); bool __setParent(DSWindowShell *parentWinShell); + struct stWindowAuxHint* __findAuxHint(int32_t id); + void __handleAuxHint(stWindowAuxHint *hint); + private: DSWindow *__window; IDSWaylandShellSurface *__shellSurface; @@ -121,6 +137,7 @@ private: DSWindowShell *__parent; int __layer; std::list __childList; + std::list __auxHintsList; }; } -- 2.7.4 From 75705d9146c8854226401a9771e660f711046a8e Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 24 Aug 2020 20:00:19 +0900 Subject: [PATCH 16/16] DSZone: add APIs for handling window's aux hint Change-Id: Idc4e1173fe05b767a487e3d0600b196ce5d63027 --- src/DSZone/DSZone.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/DSZone/DSZone.h | 8 ++++++++ 2 files changed, 45 insertions(+) diff --git a/src/DSZone/DSZone.cpp b/src/DSZone/DSZone.cpp index bf2700f..ebbdae4 100644 --- a/src/DSZone/DSZone.cpp +++ b/src/DSZone/DSZone.cpp @@ -59,6 +59,8 @@ DSZone::DSZone() if (__waylandShell) __waylandShell->registerCallbackShellSurfaceCreated(this, std::bind(&DSZone::__onShellSurfaceCreated, this, std::placeholders::_1)); } + + __setSupportAuxHints(); } DSZone::~DSZone() @@ -73,6 +75,11 @@ DSZone::~DSZone() DSWaylandCompositor::releaseInstance(); } +void DSZone::__setSupportAuxHints(void) +{ + __supportedAuxHints.push_back("wm.policy.win.user.geometry"); +} + void DSZone::setPosition(stPosition &position) { __position.x = position.x; @@ -413,6 +420,36 @@ bool DSZone::setWindowPosition(DSWaylandSurface *dswSurface, int x, int y) */ } +void DSZone::addWindowAuxHint(DSWaylandSurface *dswlSurface, int32_t id, const std::string &name, const std::string &value) +{ + DSWindowShell *wShell = __findWindowShell(dswlSurface); + if (!wShell) return; + + wShell->addAuxHint(id, name, value); +} + +void DSZone::changeWindowAuxHint(DSWaylandSurface *dswlSurface, int32_t id, const std::string &value) +{ + DSWindowShell *wShell = __findWindowShell(dswlSurface); + if (!wShell) return; + + wShell->changeAuxHint(id, value); +} + +void DSZone::removeWindowAuxHint(DSWaylandSurface *dswlSurface, int32_t id) +{ + DSWindowShell *wShell = __findWindowShell(dswlSurface); + if (!wShell) return; + + wShell->removeAuxHint(id); +} + +std::list DSZone::getWindowSupportedAuxHints(DSWaylandSurface *dswlSurface) +{ + // TODO: we have to change code to use DSPolicy instead of DSZone + return __supportedAuxHints; +} + void DSZone::activateWindow(DSWaylandSurface *dswlSurface) { if (!dswlSurface) return; diff --git a/src/DSZone/DSZone.h b/src/DSZone/DSZone.h index acb3a61..96068bc 100644 --- a/src/DSZone/DSZone.h +++ b/src/DSZone/DSZone.h @@ -70,6 +70,11 @@ public: bool setWindowGeometry(DSWaylandSurface *dswSurface, int x, int y, unsigned int w, unsigned h); bool setWindowPosition(DSWaylandSurface *dswSurface, int x, int y); + void addWindowAuxHint(DSWaylandSurface *dswlSurface, int32_t id, const std::string &name, const std::string &value); + void changeWindowAuxHint(DSWaylandSurface *dswlSurface, int32_t id, const std::string &value); + void removeWindowAuxHint(DSWaylandSurface *dswlSurface, int32_t id); + std::list getWindowSupportedAuxHints(DSWaylandSurface *dswlSurface); + void activateWindow(DSWaylandSurface *dswlSurface); void raiseWindow(DSWaylandSurface* dswlSurface); void lowerWindow(DSWaylandSurface* dswlSurface); @@ -103,6 +108,8 @@ private: std::shared_ptr __findWindow(DSWaylandSurface *dswlSurface); DSWindowShell* __findWindowShell(DSWaylandSurface *dswlSurface); + void __setSupportAuxHints(void); + stPosition __position; stSize __size; std::list> __windowList; @@ -114,6 +121,7 @@ private: bool __stackChanged; std::map __windowShellMap; + std::list __supportedAuxHints; // signals DSSignal> __windowCreatedSignal; -- 2.7.4