[M120 Migration][VD] Fix some focus issues for offscreen mode
[platform/framework/web/chromium-efl.git] / tizen_src / chromium_impl / content / browser / renderer_host / rwhv_aura_offscreen_helper_efl.cc
index bfb1e76..6c498af 100644 (file)
@@ -181,6 +181,10 @@ RWHVAuraOffscreenHelperEfl::~RWHVAuraOffscreenHelperEfl() {
                                  OnFocusIn);
   evas_object_event_callback_del(content_image_, EVAS_CALLBACK_FOCUS_OUT,
                                  OnFocusOut);
+  evas_object_smart_callback_del(content_image_elm_host_, "focused",
+                                 OnHostFocusIn);
+  evas_object_smart_callback_del(content_image_elm_host_, "unfocused",
+                                 OnHostFocusOut);
   evas_event_callback_del_full(evas_, EVAS_CALLBACK_RENDER_FLUSH_PRE,
                                OnEvasRenderFlushPre, this);
   evas_object_del(content_image_);
@@ -559,8 +563,19 @@ void RWHVAuraOffscreenHelperEfl::NotifySwap(const size_t texture_id) {
 }
 
 void RWHVAuraOffscreenHelperEfl::Focus(bool focus) {
+  LOG(INFO) << "evas_object_focus_set:" << focus;
   elm_object_focus_set(content_image_elm_host_, focus);
   evas_object_focus_set(content_image_, focus);
+
+#if BUILDFLAG(IS_TIZEN_TV)
+  // sync focus on efl window
+  aura::WindowTreeHost* window_host = rwhva()->window()->GetHost();
+  if (window_host) {
+    static_cast<aura::WindowTreeHostPlatform*>(window_host)
+        ->platform_window()
+        ->UpdateFocus(focus);
+  }
+#endif
 }
 
 bool RWHVAuraOffscreenHelperEfl::HasFocus() {
@@ -578,6 +593,7 @@ void RWHVAuraOffscreenHelperEfl::OnFocusIn(void* data,
                                            Evas* evas,
                                            Evas_Object* obj,
                                            void* event_info) {
+  LOG(INFO) << "OnFocusIn";
   RWHVAuraOffscreenHelperEfl* thiz =
       static_cast<RWHVAuraOffscreenHelperEfl*>(data);
   thiz->FocusRWHVA();
@@ -594,6 +610,7 @@ void RWHVAuraOffscreenHelperEfl::OnFocusOut(void* data,
                                             Evas* evas,
                                             Evas_Object* obj,
                                             void* event_info) {
+  LOG(INFO) << "OnFocusOut";
   RWHVAuraOffscreenHelperEfl* thiz =
       static_cast<RWHVAuraOffscreenHelperEfl*>(data);
   aura::WindowTreeHost* window_host = thiz->rwhva()->window()->GetHost();
@@ -624,6 +641,7 @@ void RWHVAuraOffscreenHelperEfl::OnFocusOut(void* data,
 void RWHVAuraOffscreenHelperEfl::OnHostFocusIn(void* data,
                                                Evas_Object*,
                                                void*) {
+  LOG(INFO) << "OnHostFocusIn";
   RWHVAuraOffscreenHelperEfl* thiz =
       static_cast<RWHVAuraOffscreenHelperEfl*>(data);
   thiz->Focus(true);
@@ -632,6 +650,7 @@ void RWHVAuraOffscreenHelperEfl::OnHostFocusIn(void* data,
 void RWHVAuraOffscreenHelperEfl::OnHostFocusOut(void* data,
                                                 Evas_Object*,
                                                 void*) {
+  LOG(INFO) << "OnHostFocusOut";
   RWHVAuraOffscreenHelperEfl* thiz =
       static_cast<RWHVAuraOffscreenHelperEfl*>(data);
   if (thiz && thiz->GetRenderWidgetHostImpl())