summaryrefslogtreecommitdiff
path: root/screen_connector_remote_surface_evas
diff options
context:
space:
mode:
authorHwankyu Jhun <h.jhun@samsung.com>2018-06-05 15:05:46 +0900
committerHwankyu Jhun <h.jhun@samsung.com>2018-06-05 15:05:46 +0900
commit2747db6f0c3929e2f57ec9c49401b1fc98e749f7 (patch)
treec9febd9a9d7e36f54e2154dbf6590f0ab689fdcf /screen_connector_remote_surface_evas
parent47a0248f570d021e308eecd25d69d6252c6c7728 (diff)
downloadscreen-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.cc29
-rw-r--r--screen_connector_remote_surface_evas/remote_surface_evas.h5
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