Change keyboard focus setting on visible/invisible events 43/22043/1 10.91.0 10.92.0 10.93.0 11.91.0 11.92.0 12.90.1 12.91.0 12.92.0 12.93.0 13.93.0 8.99.1 8.99.2 8.99.3 8.99.4 8.99.5 9.99.1 9.99.2 9.99.3 9.99.4 icefish/8.99.1 icefish/8.99.2 icefish/8.99.3 icefish/8.99.4 icefish/8.99.5 icefish_8.99.1 icefish_8.99.2 icefish_8.99.3 icefish_8.99.4 icefish_8.99.5 jellyfish/9.99.1 jellyfish/9.99.2 jellyfish/9.99.3 jellyfish/9.99.4 jellyfish_9.99.1 jellyfish_9.99.2 jellyfish_9.99.3 jellyfish_9.99.4 koi/10.91.0 koi/10.92.0 koi/10.93.0 koi_10.91.0 koi_10.92.0 koi_10.93.0 lamprey/11.91.0 lamprey/11.92.0 lamprey_11.91.0 lamprey_11.92.0 marlin/12.90.1 marlin/12.91.0 marlin/12.92.0 marlin/12.93.0 marlin_12.90.1 marlin_12.91.0 marlin_12.92.0 marlin_12.93.0 needlefish/13.93.0 needlefish_13.93.0
authorJacobo Aragunde Pérez <jaragunde@igalia.com>
Thu, 1 Aug 2019 07:08:22 +0000 (09:08 +0200)
committerJacobo Aragunde Pérez <jaragunde@igalia.com>
Thu, 1 Aug 2019 07:09:13 +0000 (09:09 +0200)
Keyboard focus was set and unset on activation events. This had the
side effect of keeping the keyboard attached to the window even if it
was invisible. Using the visibility events to perform this task looks
like a more natural way to deal with it.

Besides, activate/deactivate callbacks are not being called in
halibut or master, effectively stopping keyboard focus from working.

Bug-AGL: SPEC-2657

Signed-off-by: Jacobo Aragunde Pérez <jaragunde@igalia.com>
Change-Id: I65cc54c89db56bda1da4ea562151e3a30e10d068

src/runxdg.cpp

index 8582023..e4ec1c9 100644 (file)
@@ -283,22 +283,22 @@ int RunXDG::init_wm (void)
 
   std::function< void(json_object*) > h_active = [this](json_object* object) {
     AGL_DEBUG("Got Event_Active");
-    t_ilm_surface s_ids[1] = { this->m_ivi_id };
-    ilm_setInputFocus(s_ids, 1, ILM_INPUT_DEVICE_KEYBOARD, ILM_TRUE);
   };
 
   std::function< void(json_object*) > h_inactive = [this](json_object* object) {
     AGL_DEBUG("Got Event_Inactive");
-    t_ilm_surface s_ids[1] = { this->m_ivi_id };
-    ilm_setInputFocus(s_ids, 1, ILM_INPUT_DEVICE_KEYBOARD, ILM_FALSE);
   };
 
-  std::function< void(json_object*) > h_visible = [](json_object* object) {
+  std::function< void(json_object*) > h_visible = [this](json_object* object) {
     AGL_DEBUG("Got Event_Visible");
+    t_ilm_surface s_ids[1] = { this->m_ivi_id };
+    ilm_setInputFocus(s_ids, 1, ILM_INPUT_DEVICE_KEYBOARD, ILM_TRUE);
   };
 
-  std::function< void(json_object*) > h_invisible = [](json_object* object) {
+  std::function< void(json_object*) > h_invisible = [this](json_object* object) {
     AGL_DEBUG("Got Event_Invisible");
+    t_ilm_surface s_ids[1] = { this->m_ivi_id };
+    ilm_setInputFocus(s_ids, 1, ILM_INPUT_DEVICE_KEYBOARD, ILM_FALSE);
   };
 
   std::function< void(json_object*) > h_syncdraw =