+
+// TIZEN_ONLY(20230823) : add keyboard_grab/ungrab API
+EAPI Eina_Bool
+ecore_wl2_window_keyboard_grab(Ecore_Wl2_Window *win, unsigned int subtype)
+{
+ Ecore_Wl2_Display *ewd;
+ Ecore_Device_Subclass subclas = (Ecore_Device_Subclass)subtype;
+
+ if (!win || !win->surface) return EINA_FALSE;
+ ewd = win->display;
+ if (!ewd || !ewd->wl.tz_input_device_manager) return EINA_FALSE;
+
+ _devicemgr_error = -1;
+ if (subclas == ECORE_DEVICE_SUBCLASS_NONE)
+ {
+ tizen_input_device_manager_keyboard_grab(ewd->wl.tz_input_device_manager,
+ win->surface,
+ TIZEN_INPUT_DEVICE_MANAGER_SUBCLAS_NONE);
+ }
+ else if (subtype == ECORE_DEVICE_SUBCLASS_REMOCON)
+ {
+ tizen_input_device_manager_keyboard_grab(ewd->wl.tz_input_device_manager,
+ win->surface,
+ TIZEN_INPUT_DEVICE_MANAGER_SUBCLAS_REMOCON);
+ }
+ else if (subtype == ECORE_DEVICE_SUBCLASS_VIRTUAL_KEYBOARD)
+ {
+ tizen_input_device_manager_keyboard_grab(ewd->wl.tz_input_device_manager,
+ win->surface,
+ TIZEN_INPUT_DEVICE_MANAGER_SUBCLAS_VIRTUAL_KEYBOARD);
+ }
+ ecore_wl2_display_sync(ewd);
+
+ if (_devicemgr_error != TIZEN_INPUT_DEVICE_MANAGER_ERROR_NONE)
+ {
+ ERR("Keyboard grab failed. subtype: %d", subtype);
+ return EINA_FALSE;
+ }
+
+ INF("Keyboard grab succeeded. subtype: %d", subtype);
+ return EINA_TRUE;
+}
+
+EAPI Eina_Bool
+ecore_wl2_window_keyboard_ungrab(Ecore_Wl2_Window *win)
+{
+ Ecore_Wl2_Display *ewd;
+
+ if (!win || !win->surface) return EINA_FALSE;
+ ewd = win->display;
+ if (!ewd || !ewd->wl.tz_input_device_manager) return EINA_FALSE;
+
+ _devicemgr_error = -1;
+ tizen_input_device_manager_keyboard_ungrab(ewd->wl.tz_input_device_manager,
+ win->surface);
+ ecore_wl2_display_sync(ewd);
+
+ if (_devicemgr_error != TIZEN_INPUT_DEVICE_MANAGER_ERROR_NONE)
+ {
+ ERR("Keyboard ungrab failed.");
+ return EINA_FALSE;
+ }
+
+ INF("Keyboard ungrab succeeded.");
+ return EINA_TRUE;
+}