summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2017-07-14 18:44:22 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2017-07-14 18:40:50 -0400
commit8af555cae0a32a94113fd65cf59e2c7d9af9fae0 (patch)
treef29ab05432a50d70265522d5e87bac8af5d04e4f
parent950bee7ce406ced7ab98a3ee6b964fed813b6ce1 (diff)
downloadenlightenment-8af555cae0a32a94113fd65cf59e2c7d9af9fae0.tar.gz
toggle NOGRAB on client input rects during move operations
-rw-r--r--src/bin/e_comp_object.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index ae97a83a98..681386e469 100644
--- a/src/bin/e_comp_object.c
+++ b/src/bin/e_comp_object.c
@@ -2626,6 +2626,34 @@ _e_comp_smart_resize(Evas_Object *obj, int w, int h)
}
static void
+_e_comp_object_move_end(void *d EINA_UNUSED, E_Client *ec)
+{
+ E_Comp_Object *cw = evas_object_smart_data_get(ec->frame);
+ unsigned int i;
+ Evas_Object *rect;
+ Eina_Array_Iterator it;
+
+ if (!cw->input_objs) return;
+
+ EINA_ARRAY_ITER_NEXT(cw->input_objs, i, rect, it)
+ evas_object_pointer_mode_set(rect, EVAS_OBJECT_POINTER_MODE_AUTOGRAB);
+}
+
+static void
+_e_comp_object_move_begin(void *d EINA_UNUSED, E_Client *ec)
+{
+ E_Comp_Object *cw = evas_object_smart_data_get(ec->frame);
+ unsigned int i;
+ Evas_Object *rect;
+ Eina_Array_Iterator it;
+
+ if (!cw->input_objs) return;
+
+ EINA_ARRAY_ITER_NEXT(cw->input_objs, i, rect, it)
+ evas_object_pointer_mode_set(rect, EVAS_OBJECT_POINTER_MODE_NOGRAB);
+}
+
+static void
_e_comp_smart_init(void)
{
const char *env;
@@ -2636,6 +2664,8 @@ _e_comp_smart_init(void)
render_debug_enabled = -1;
else if (env)
render_debug_enabled = 1;
+ e_client_hook_add(E_CLIENT_HOOK_MOVE_BEGIN, _e_comp_object_move_begin, NULL);
+ e_client_hook_add(E_CLIENT_HOOK_MOVE_END, _e_comp_object_move_end, NULL);
{
static const Evas_Smart_Class sc =
{
@@ -3270,8 +3300,8 @@ e_comp_object_input_area_set(Evas_Object *obj, const Eina_Tiler *area)
evas_object_color_set(o, 0, 0, 0, 0);
evas_object_clip_set(o, cw->clip);
evas_object_smart_member_add(o, obj);
- evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, _e_comp_object_ssd_mouse_in, cw);
- evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_OUT, _e_comp_object_ssd_mouse_out, cw);
+ if (cw->ec->moving)
+ evas_object_pointer_mode_set(o, EVAS_OBJECT_POINTER_MODE_NOGRAB);
evas_object_show(o);
eina_array_push(cw->input_objs, o);
eina_tiler_rect_add(cw->input_area, rect);