diff options
author | Hwankyu Jhun <h.jhun@samsung.com> | 2018-06-05 15:05:46 +0900 |
---|---|---|
committer | Hwankyu Jhun <h.jhun@samsung.com> | 2018-06-05 15:05:46 +0900 |
commit | 2747db6f0c3929e2f57ec9c49401b1fc98e749f7 (patch) | |
tree | c9febd9a9d7e36f54e2154dbf6590f0ab689fdcf /screen_connector_remote_surface_evas | |
parent | 47a0248f570d021e308eecd25d69d6252c6c7728 (diff) | |
download | screen-connector-2747db6f0c3929e2f57ec9c49401b1fc98e749f7.tar.gz screen-connector-2747db6f0c3929e2f57ec9c49401b1fc98e749f7.tar.bz2 screen-connector-2747db6f0c3929e2f57ec9c49401b1fc98e749f7.zip |
Monitor visibility status of viewer windows
To use visibilty status of viewer window, screen connector monitors
ecore events.
Change-Id: I8604b47e38bba1a1167ae5e95e10b51674c7acac
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
Diffstat (limited to 'screen_connector_remote_surface_evas')
-rw-r--r-- | screen_connector_remote_surface_evas/remote_surface_evas.cc | 29 | ||||
-rw-r--r-- | screen_connector_remote_surface_evas/remote_surface_evas.h | 5 |
2 files changed, 28 insertions, 6 deletions
diff --git a/screen_connector_remote_surface_evas/remote_surface_evas.cc b/screen_connector_remote_surface_evas/remote_surface_evas.cc index e51c92c..56edaaa 100644 --- a/screen_connector_remote_surface_evas/remote_surface_evas.cc +++ b/screen_connector_remote_surface_evas/remote_surface_evas.cc @@ -37,7 +37,8 @@ RemoteSurfaceEvas::RemoteSurfaceEvas(const std::string& id, std::shared_ptr<EvasObject> viewerWin, bool mock) : RemoteSurface(id, type, mock), - impl_(new Impl(this, viewerWin, mock)) { + impl_(new Impl(this, viewerWin, mock)), + win_ctx_(new WindowContext()) { } RemoteSurfaceEvas::RemoteSurfaceEvas(int rid, const std::string& id, @@ -45,7 +46,8 @@ RemoteSurfaceEvas::RemoteSurfaceEvas(int rid, const std::string& id, std::shared_ptr<EvasObject> viewerWin, bool mock) : RemoteSurface(rid, id, type, mock), - impl_(new Impl(this, viewerWin, mock)) { + impl_(new Impl(this, viewerWin, mock)), + win_ctx_(new WindowContext()) { } RemoteSurfaceEvas::~RemoteSurfaceEvas() = default; @@ -471,10 +473,12 @@ void RemoteSurfaceEvas::OnBufferChanged(int type, std::shared_ptr<WlBuffer> tbm, Ecore_Evas *ee = ecore_evas_ecore_evas_get( evas_object_evas_get(impl_->viewer_win_->GetRaw())); Ecore_Wl2_Window* wlWin = ecore_evas_wayland2_window_get(ee); - if (!wlWin) + if (!wlWin) { LOGE("Failed to get wlWin"); - else - impl_->winVisibility_map_[ecore_wl2_window_id_get(wlWin)] = UNKNOWN; + } else { + unsigned int win_id = ecore_wl2_window_id_get(wlWin); + impl_->winVisibility_map_[win_id] = GetVisibility(win_id); + } isAdded = true; } @@ -520,7 +524,7 @@ void RemoteSurfaceEvas::Bind(const EvasObject& win) { } bind_win_id = ecore_wl2_window_id_get(wl_win); - impl_->winVisibility_map_[bind_win_id] = UNKNOWN; + impl_->winVisibility_map_[bind_win_id] = GetVisibility(bind_win_id); impl_->bind_win_id_ = bind_win_id; RemoteSurface::Bind(std::shared_ptr<WlSurface>( @@ -598,4 +602,17 @@ RemoteSurfaceEvas::Visibility RemoteSurfaceEvas::GetVisibility() const { return impl_->visibility_; } +RemoteSurfaceEvas::Visibility RemoteSurfaceEvas::GetVisibility( + unsigned int win) { + if (!win_ctx_->FindWindow(win)) { + LOGE("Failed to find window(%u)", win); + return RemoteSurfaceEvas::UNKNOWN; + } + + if (win_ctx_->IsFullyObscured(win)) + return RemoteSurfaceEvas::FULLY_OBSCURED; + + return RemoteSurfaceEvas::UNOBSCURED; +} + } // namespace screen_connector diff --git a/screen_connector_remote_surface_evas/remote_surface_evas.h b/screen_connector_remote_surface_evas/remote_surface_evas.h index 14f2f75..55acd13 100644 --- a/screen_connector_remote_surface_evas/remote_surface_evas.h +++ b/screen_connector_remote_surface_evas/remote_surface_evas.h @@ -24,6 +24,7 @@ #include "screen_connector_remote_surface_evas/evas_object.h" #include "screen_connector_remote_surface_evas/evas_event_interface.h" #include "screen_connector_remote_surface/remote_surface.h" +#include "screen_connector_remote_surface/window_context.h" namespace screen_connector { @@ -69,8 +70,12 @@ class EXPORT_API RemoteSurfaceEvas : public RemoteSurface, public IEvasEvent { int pid, const EvasObject& image) override; private: + Visibility GetVisibility(unsigned int win); + + private: class Impl; std::unique_ptr<Impl> impl_; + std::unique_ptr<WindowContext> win_ctx_; }; } // namespace screen_connector |