gadgets - get long press plus dnd to behave nice

we had multiple drag resistance values here - unify with 1 and make it
work, now it gets it right deciding between dnd and a long press menu
etc. etc. ...
This commit is contained in:
Carsten Haitzler 2018-10-29 17:32:51 +00:00
parent 63a4475497
commit c49f49829f
6 changed files with 35 additions and 83 deletions

View File

@ -1514,11 +1514,8 @@ _site_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, vo
}
else if (ev->button == 3)
{
Evas_Coord dx, dy;
dx = ev->canvas.x - zgs->down_3_x;
dy = ev->canvas.y - zgs->down_3_y;
if (((dx * dx) + (dy * dy)) < (5 * 5))
if (!is_dragged(ev->canvas.x - zgs->down_3_x,
ev->canvas.y - zgs->down_3_y))
{
E_Gadget_Config *zgc;
Evas_Object *g = NULL;
@ -1541,11 +1538,8 @@ _site_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
if ((zgs->down_timer) || (zgs->longpressed))
{
Evas_Coord dx, dy;
dx = ev->cur.canvas.x - zgs->down_1_x;
dy = ev->cur.canvas.y - zgs->down_1_y;
if (((dx * dx) + (dy * dy)) >= (5 * 5))
if (is_dragged(ev->cur.canvas.x - zgs->down_1_x,
ev->cur.canvas.y - zgs->down_1_y))
{
if (zgs->down_timer)
{

View File

@ -82,5 +82,14 @@ dblequal(double a, double b)
return fabs(a - b) < DBL_EPSILON;
}
static inline Eina_Bool
is_dragged(int dx, int dy)
{
Evas_Coord resist = elm_config_finger_size_get() / 2;
if ((dx * dx) + (dy * dy) > resist) return EINA_TRUE;
return EINA_FALSE;
}
#endif
#endif

View File

@ -29,7 +29,7 @@ struct _E_Config_Dialog_Data
Evas_Object *ob1, *ob2, *ob3;
Eina_List *popup_list, *urgent_list;
} gui;
int drag_resist, flip_desk, show_desk_names;
int flip_desk, show_desk_names;
E_Config_Dialog *cfd;
};
@ -98,7 +98,6 @@ _fill_data(E_Config_Dialog_Data *cfdata)
cfdata->popup.urgent_speed = pager_config->popup_urgent_speed;
cfdata->popup.height = pager_config->popup_height;
cfdata->popup.act_height = pager_config->popup_act_height;
cfdata->drag_resist = pager_config->drag_resist;
cfdata->btn.drag = pager_config->btn_drag;
cfdata->btn.noplace = pager_config->btn_noplace;
cfdata->btn.desk = pager_config->btn_desk;
@ -187,11 +186,6 @@ _adv_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
ow = e_widget_check_add(evas, _("Always show desktop names"),
&(cfdata->show_desk_names));
e_widget_list_object_append(ol, ow, 1, 0, 0.5);
ow = e_widget_label_add(evas, _("Resistance to dragging"));
e_widget_list_object_append(ol, ow, 1, 0, 0.5);
ow = e_widget_slider_add(evas, 1, 0, _("%.0f pixels"), 0.0, 10.0, 1.0, 0, NULL,
&(cfdata->drag_resist), 100);
e_widget_list_object_append(ol, ow, 1, 0, 0.5);
#if 0
ow = e_widget_label_add(evas, _("Select and Slide button"));
@ -302,7 +296,6 @@ _adv_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
pager_config->show_desk_names = cfdata->show_desk_names;
pager_config->popup_height = cfdata->popup.height;
pager_config->popup_act_height = cfdata->popup.act_height;
pager_config->drag_resist = cfdata->drag_resist;
pager_config->btn_drag = cfdata->btn.drag;
pager_config->btn_noplace = cfdata->btn.noplace;
pager_config->btn_desk = cfdata->btn.desk;
@ -328,7 +321,6 @@ _adv_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdat
if ((int)pager_config->show_desk_names != cfdata->show_desk_names) return 1;
if (pager_config->popup_height != cfdata->popup.height) return 1;
if (pager_config->popup_act_height != cfdata->popup.act_height) return 1;
if ((int)pager_config->drag_resist != cfdata->drag_resist) return 1;
if (pager_config->btn_drag != cfdata->btn.drag) return 1;
if (pager_config->btn_noplace != cfdata->btn.noplace) return 1;
if (pager_config->btn_desk != cfdata->btn.desk) return 1;

View File

@ -1162,8 +1162,6 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
Evas_Coord x, y, w, h;
const char *drag_types[] =
{ "enlightenment/pager_win", "enlightenment/border" };
Evas_Coord dx, dy;
unsigned int resist = 0;
ev = event_info;
pw = data;
@ -1176,13 +1174,8 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
/* prevent drag for a few pixels */
if (!pw->drag.start) return;
dx = pw->drag.x - ev->cur.output.x;
dy = pw->drag.y - ev->cur.output.y;
if (pw->desk->pager)
resist = pager_config->drag_resist;
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
(resist * resist)) return;
if (!is_dragged(pw->drag.x - ev->cur.output.x,
pw->drag.y - ev->cur.output.y)) return;
pw->desk->pager->dragging = 1;
pw->drag.start = 0;
@ -1581,8 +1574,6 @@ _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
{
Evas_Event_Mouse_Move *ev;
Pager_Desk *pd;
Evas_Coord dx, dy;
unsigned int resist = 0;
E_Drag *drag;
Evas_Object *o;
Evas_Coord x, y, w, h;
@ -1595,13 +1586,8 @@ _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
/* prevent drag for a few pixels */
if (pd->drag.start)
{
dx = pd->drag.x - ev->cur.output.x;
dy = pd->drag.y - ev->cur.output.y;
if ((pd->pager) && (pd->pager->inst))
resist = pager_config->drag_resist;
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
(resist * resist)) return;
if (!is_dragged(pd->drag.x - ev->cur.output.x,
pd->drag.y - ev->cur.output.y)) return;
if (pd->pager) pd->pager->dragging = 1;
pd->drag.start = 0;

View File

@ -20,7 +20,6 @@ struct _Config_Objects
Evas_Object *o_show_desk_names;
Evas_Object *o_popup_act_height;
Evas_Object *o_popup_height;
Evas_Object *o_drag_resist;
Evas_Object *o_btn_drag;
Evas_Object *o_btn_noplace;
Evas_Object *o_btn_desk;
@ -101,8 +100,6 @@ _config_value_changed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
elm_slider_value_get(pager_gadget_config_objects->o_popup_height);
pager_config->popup_act_height =
elm_slider_value_get(pager_gadget_config_objects->o_popup_act_height);
pager_config->drag_resist =
elm_slider_value_get(pager_gadget_config_objects->o_drag_resist);
val = elm_check_state_get(pager_gadget_config_objects->o_permanent);
if (val != pager_config->permanent_plain)
changed = EINA_TRUE;
@ -350,26 +347,6 @@ _config_create_pages(Evas_Object *parent)
evas_object_show(ow);
pager_gadget_config_objects->o_show_desk_names = ow;
ow = elm_label_add(m);
elm_object_text_set(ow, _("Resistance to dragging"));
elm_table_pack(tb, ow, 0, 3, 1, 1);
E_ALIGN(ow, 0.0, 0.0);
E_WEIGHT(ow, EVAS_HINT_EXPAND, 0);
evas_object_show(ow);
ow = elm_slider_add(tb);
elm_slider_min_max_set(ow, 0, 10);
elm_slider_step_set(ow, 1);
elm_slider_value_set(ow, pager_config->drag_resist);
elm_slider_unit_format_set(ow, _("%.0f pixels"));
elm_table_pack(tb, ow, 0, 4, 1, 1);
E_ALIGN(ow, EVAS_HINT_FILL, EVAS_HINT_FILL);
E_WEIGHT(ow, EVAS_HINT_EXPAND, 0);
evas_object_smart_callback_add(ow, "delay,changed",
_config_value_changed, NULL);
evas_object_show(ow);
pager_gadget_config_objects->o_drag_resist = ow;
#if 0
ow = elm_label_add(m);
elm_object_text_set(ow, _("Select and Slide button"));

View File

@ -1985,12 +1985,15 @@ _pager_window_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
Evas_Event_Mouse_Up *ev = event_info;
Pager_Win *pw = data;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
{
pw->drag.button = 0;
return;
}
pw->drag.button = 0;
if (_pager_check_modifiers(ev->modifiers)) return;
evas_object_smart_callback_call(e_gadget_site_get(pw->desk->pager->inst->o_pager), "gadget_site_unlocked", NULL);
pw->drag.button = 0;
}
static void
@ -1998,6 +2001,7 @@ _pager_window_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
{
Evas_Event_Mouse_Down *ev = event_info;
Pager_Win *pw;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
if (_pager_check_modifiers(ev->modifiers)) return;
@ -2039,8 +2043,6 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
Evas_Coord x, y, w, h;
const char *drag_types[] =
{ "enlightenment/pager_win", "enlightenment/border" };
Evas_Coord dx, dy;
unsigned int resist = 0;
pw = data;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
@ -2053,13 +2055,8 @@ _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI
/* prevent drag for a few pixels */
if (!pw->drag.start) return;
dx = pw->drag.x - ev->cur.output.x;
dy = pw->drag.y - ev->cur.output.y;
if (pw->desk->pager)
resist = pager_config->drag_resist;
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
(resist * resist)) return;
if (!is_dragged(pw->drag.x - ev->cur.output.x,
pw->drag.y - ev->cur.output.y)) return;
pw->desk->pager->dragging = 1;
pw->drag.start = 0;
@ -2427,7 +2424,12 @@ _pager_desk_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
Pager_Desk *pd;
Pager *p;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
{
pd->drag.start = 0;
pd->drag.in_pager = 0;
return;
}
if (_pager_check_modifiers(ev->modifiers)) return;
pd = data;
@ -2460,8 +2462,6 @@ _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
{
Evas_Event_Mouse_Move *ev = event_info;
Pager_Desk *pd;
Evas_Coord dx, dy;
unsigned int resist = 0;
E_Drag *drag;
Evas_Object *o;
Evas_Coord x, y, w, h;
@ -2475,14 +2475,8 @@ _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
/* prevent drag for a few pixels */
if (pd->drag.start)
{
dx = pd->drag.x - ev->cur.output.x;
dy = pd->drag.y - ev->cur.output.y;
if ((pd->pager) && (pd->pager->inst))
resist = pager_config->drag_resist;
if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <=
(resist * resist)) return;
if (!is_dragged(pd->drag.x - ev->cur.output.x,
pd->drag.y - ev->cur.output.y)) return;
if (pd->pager) pd->pager->dragging = 1;
pd->drag.start = 0;
}