Ecore_Timer *resize_timer;
E_Client_Hook *hook_del;
+ E_Policy_Hook *hook_rotation_geometry_set;
};
struct _E_Input_Panel_Floating_Info
E_FREE_FUNC(ips->eh.rot_change_end, ecore_event_handler_del);
E_FREE_FUNC(ips->eh.buf_change, ecore_event_handler_del);
E_FREE_FUNC(ips->hook_del, e_client_hook_del);
+ E_FREE_FUNC(ips->hook_rotation_geometry_set, e_policy_hook_del);
free(ips);
}
if (_e_input_panel_is_effect_running(ips->ec))
ips->need_show = EINA_TRUE;
+ else if (ips->resizing)
+ {
+ LOGD("Keyboard is currently resizing. set need_show.");
+ ips->need_show = EINA_TRUE;
+ }
else
{
_ips_show(ips->ec);
}
static void
+_e_input_panel_rotation_geometry_set(void *data, E_Client *ec)
+{
+ E_Input_Panel_Surface *ips;
+ int i;
+ int w, h;
+ int cur_angle;
+
+ ips = data;
+ if (!ips) return;
+
+ if (ec != ips->ec)
+ return;
+
+ if (ips->resizing)
+ return;
+
+ evas_object_geometry_get(ec->frame, NULL, NULL, &w, &h);
+
+ cur_angle = ec->e.state.rot.ang.curr;
+ switch (cur_angle)
+ {
+ case 0: i = 0; break;
+ case 90: i = 1; break;
+ case 180: i = 2; break;
+ case 270: i = 3; break;
+ default: i = 0; break;
+ }
+
+ if ((w != ec->e.state.rot.geom[i].w) ||
+ (h != ec->e.state.rot.geom[i].h))
+ {
+ LOGD("Resizing by Rotation Geometry. Pending Drawing...");
+ _e_input_panel_stop_drawing(ips);
+ }
+}
+
+static void
_e_input_panel_cb_surface_get(struct wl_client *client, struct wl_resource *resource, uint32_t id, struct wl_resource *surface_resource)
{
E_Input_Panel *input_panel = wl_resource_get_user_data(resource);
ips->hook_del = e_client_hook_add(E_CLIENT_HOOK_DEL, _e_input_panel_client_cb_remove, ips);
+ ips->hook_rotation_geometry_set = e_policy_hook_add(E_POLICY_HOOK_CLIENT_ROTATION_GEOMETRY_SET, _e_input_panel_rotation_geometry_set, ips);
// base_output_resolution.
e_client_base_output_resolution_update(ec);
{
if (!_e_input_panel_is_effect_running(ips->ec))
{
+ if (ips->resizing)
+ continue;
_ips_show(ips->ec);
ips->need_show = EINA_FALSE;
}