[EGIT] [core/efl] master 01/01: eolian: Add @ctor_param parameter to constructors

2018-10-30 Thread Felipe Magno de Almeida
q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=1933735635aa72cf7be96c47b1e5b8a5ee318323

commit 1933735635aa72cf7be96c47b1e5b8a5ee318323
Author: Felipe Magno de Almeida 
Date:   Wed Oct 31 02:47:58 2018 +0100

eolian: Add @ctor_param parameter to constructors

Summary:
This tagging keyword explicitly asks, for bindings that support it,
that the constructor's parameters are added to the class constructor.

Allowing the user to instantiate the class and call the constructor in
a straightforward way.

Reviewers: q66, woohyun, bu5hm4n, Jaehyun_Cho, segfaultxavi

Reviewed By: q66

Subscribers: cedric, #reviewers, #committers, lauromoura

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7221
---
 src/lib/eolian/Eolian.h   | 10 ++
 src/lib/eolian/database_constructor_api.c |  7 +++
 src/lib/eolian/eo_lexer.h |  2 +-
 src/lib/eolian/eo_parser.c| 22 ++
 src/lib/eolian/eolian_database.h  |  1 +
 src/tests/eolian/data/ctor_dtor.eo|  6 ++
 src/tests/eolian/eolian_parsing.c |  9 +
 7 files changed, 52 insertions(+), 5 deletions(-)

diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index b5241ead86..f626ce82ca 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -1988,6 +1988,16 @@ EAPI const Eolian_Function 
*eolian_constructor_function_get(const Eolian_Constru
  */
 EAPI Eina_Bool eolian_constructor_is_optional(const Eolian_Constructor *ctor);
 
+/*
+ * @brief Checks if a constructor is tagged as a constructor parameter.
+ *
+ * @param[in] ctor the handle of the constructor
+ * @return EINA_TRUE if a constructor parameter, EINA_FALSE if not (or if 
input is NULL).
+ *
+ * @ingroup Eolian
+ */
+EAPI Eina_Bool eolian_constructor_is_ctor_param(const Eolian_Constructor 
*ctor);
+
 /*
  * @brief Get an iterator to the constructing functions defined in a class.
  *
diff --git a/src/lib/eolian/database_constructor_api.c 
b/src/lib/eolian/database_constructor_api.c
index bedf9ab7da..63b935cc6c 100644
--- a/src/lib/eolian/database_constructor_api.c
+++ b/src/lib/eolian/database_constructor_api.c
@@ -29,3 +29,10 @@ eolian_constructor_is_optional(const Eolian_Constructor 
*ctor)
EINA_SAFETY_ON_NULL_RETURN_VAL(ctor, EINA_FALSE);
return ctor->is_optional;
 }
+
+EAPI Eina_Bool
+eolian_constructor_is_ctor_param(const Eolian_Constructor *ctor)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(ctor, EINA_FALSE);
+   return ctor->is_ctor_param;
+}
diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h
index 846123937c..fc70a0c914 100644
--- a/src/lib/eolian/eo_lexer.h
+++ b/src/lib/eolian/eo_lexer.h
@@ -60,7 +60,7 @@ enum Tokens
 KW(function), \
 KW(__undefined_type), \
 \
-KW(true), KW(false), KW(null)
+KW(true), KW(false), KW(null), KWAT(ctor_param)
 
 /* "regular" keyword and @ prefixed keyword */
 #define KW(x) KW_##x
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 90b0db60ae..f55e3e1744 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -1655,10 +1655,17 @@ parse_constructor(Eo_Lexer *ls)
   ls->klass->base.name,
   ls->t.value.s);
 eo_lexer_get(ls);
-if (ls->t.kw == KW_at_optional)
+while (ls->t.kw == KW_at_optional || ls->t.kw == KW_at_ctor_param)
   {
+ if (ls->t.kw == KW_at_optional)
+   {
+  ctor->is_optional = EINA_TRUE;
+   }
+ if (ls->t.kw == KW_at_ctor_param)
+   {
+  ctor->is_ctor_param = EINA_TRUE;
+   }
  eo_lexer_get(ls);
- ctor->is_optional = EINA_TRUE;
   }
 check_next(ls, ';');
 return;
@@ -1679,10 +1686,17 @@ parse_constructor(Eo_Lexer *ls)
 if (ls->t.token != '.') break;
 eo_lexer_get(ls);
  }
-   if (ls->t.kw == KW_at_optional)
+   while (ls->t.kw == KW_at_optional || ls->t.kw == KW_at_ctor_param)
  {
+if (ls->t.kw == KW_at_optional)
+  {
+ ctor->is_optional = EINA_TRUE;
+  }
+if (ls->t.kw == KW_at_ctor_param)
+  {
+ ctor->is_ctor_param = EINA_TRUE;
+  }
 eo_lexer_get(ls);
-ctor->is_optional = EINA_TRUE;
  }
check_next(ls, ';');
ctor->base.name = eina_stringshare_add(eina_strbuf_string_get(buf));
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h
index dfbad0c304..3f3ab61b18 100644
--- a/src/lib/eolian/eolian_database.h
+++ b/src/lib/eolian/eolian_database.h
@@ -309,6 +309,7 @@ struct _Eolian_Constructor
Eolian_Object base;
const Eolian_Class *klass;
Eina_Bool is_optional: 1;
+   Eina_Bool is_ctor_param : 1;
 };
 
 

[EGIT] [core/enlightenment] master 01/03: gadget/bryce - add cancellation cb for the context menu

2018-10-30 Thread Carsten Haitzler
raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=326271e00937b52194f52667fbd757a90519239a

commit 326271e00937b52194f52667fbd757a90519239a
Author: Carsten Haitzler (Rasterman) 
Date:   Fri Oct 26 15:36:37 2018 +0100

gadget/bryce - add cancellation cb for the context menu
---
 src/bin/e_bryce.c  | 18 +-
 src/bin/e_gadget.c | 55 +++---
 src/bin/e_gadget.h |  2 +-
 3 files changed, 66 insertions(+), 9 deletions(-)

diff --git a/src/bin/e_bryce.c b/src/bin/e_bryce.c
index 5e69f51ed..b4e76b97e 100644
--- a/src/bin/e_bryce.c
+++ b/src/bin/e_bryce.c
@@ -908,6 +908,22 @@ _bryce_context(Evas_Object *site, Evas_Object *g, unsigned 
int timestamp)
  }
 }
 
+static void
+_bryce_context_cancel(Evas_Object *site, Evas_Object *g, unsigned int 
timestamp)
+{
+   Bryce *b = evas_object_data_get(site, "__bryce");
+   if (b)
+ {
+b->last_timestamp = timestamp;
+if (b->menu)
+  {
+ e_menu_deactivate(b->menu);
+ e_object_del(E_OBJECT(b->menu));
+ b->menu = NULL;
+  }
+ }
+}
+
 static void
 _bryce_orient(Bryce *b)
 {
@@ -921,7 +937,7 @@ _bryce_orient(Bryce *b)
E_FILL(b->site);
evas_object_data_set(b->site, "__bryce", b);
elm_object_content_set(b->scroller, b->site);
-   e_gadget_site_owner_setup(b->site, b->anchor, _bryce_style, _bryce_context);
+   e_gadget_site_owner_setup(b->site, b->anchor, _bryce_style, _bryce_context, 
_bryce_context_cancel);
if (b->orient == E_GADGET_SITE_ORIENT_HORIZONTAL)
  {
 elm_layout_signal_emit(b->layout, "e,state,orient,horizontal", "e");
diff --git a/src/bin/e_gadget.c b/src/bin/e_gadget.c
index 6c2bdfa68..4f987ff91 100644
--- a/src/bin/e_gadget.c
+++ b/src/bin/e_gadget.c
@@ -34,6 +34,7 @@ typedef struct E_Gadget_Site
Eina_Inlist *gadget_list;
 
Eina_Bool longpressed : 1;
+   Eina_Bool dragged : 1;
Evas_Coord down_1_x, down_1_y, down_3_x, down_3_y;
Ecore_Timer *down_timer;
 
@@ -41,6 +42,7 @@ typedef struct E_Gadget_Site
Evas_Object *events;
E_Gadget_Style_Cb style_cb;
E_Gadget_Context_Cb context_cb;
+   E_Gadget_Context_Cb context_cancel_cb;
int cur_size;
Ecore_Job *calc_job;
 
@@ -1178,7 +1180,7 @@ _gadget_act_move(E_Object *obj, const char *params 
EINA_UNUSED, E_Binding_Event_
zgc = evas_object_data_get(g, "__e_gadget");
zgc->moving = 1;
_editor_pointer_site_init(zgc->site->orient, NULL, NULL, 1);
-   e_gadget_site_owner_setup(pointer_site, zgc->site->anchor, NULL, NULL);
+   e_gadget_site_owner_setup(pointer_site, zgc->site->anchor, NULL, NULL, 
NULL);
ZGS_GET(pointer_site);
if (zgc->external.domain)
  _gadget_util_add(zgs, zgc->external.domain, zgc->external.type, zgc->id);
@@ -1404,6 +1406,20 @@ _gadget_menu(Evas_Object *g, unsigned int timestamp)
evas_object_smart_callback_call(zgc->site->layout, "gadget_site_popup", 
zgc->menu->comp_object);
 }
 
+static void
+_gadget_menu_cancel(Evas_Object *g, unsigned int timestamp EINA_UNUSED)
+{
+   E_Gadget_Config *zgc;
+
+   zgc = evas_object_data_get(g, "__e_gadget");
+   if (zgc->menu)
+ {
+e_menu_deactivate(zgc->menu);
+e_object_del(E_OBJECT(zgc->menu));
+zgc->menu = NULL;
+ }
+}
+
 static Eina_Bool
 _site_longpress_menu(void *data)
 {
@@ -1466,6 +1482,7 @@ _site_mouse_down(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
if (ev->button == 1)
  {
 zgs->longpressed = EINA_FALSE;
+zgs->dragged = EINA_FALSE;
 zgs->down_1_x = ev->canvas.x;
 zgs->down_1_y = ev->canvas.y;
 E_FREE_FUNC(zgs->down_timer, ecore_timer_del);
@@ -1488,8 +1505,12 @@ _site_mouse_up(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED, vo
if (ev->button == 1)
  {
 E_FREE_FUNC(zgs->down_timer, ecore_timer_del);
-if (zgs->longpressed)
-  ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+if ((zgs->longpressed) || (zgs->dragged))
+  {
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ zgs->longpressed = EINA_FALSE;
+ zgs->dragged = EINA_FALSE;
+  }
  }
else if (ev->button == 3)
  {
@@ -1517,9 +1538,8 @@ _site_mouse_move(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
Evas_Event_Mouse_Move *ev = event_info;
 
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
-   if (zgs->longpressed) return;
 
-   if (zgs->down_timer)
+   if ((zgs->down_timer) || (zgs->longpressed))
  {
 Evas_Coord dx, dy;
 
@@ -1527,7 +1547,20 @@ _site_mouse_move(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
 dy = ev->cur.canvas.y - zgs->down_1_y;
 if (((dx * dx) >= 3) || ((dy * dy) >= 3))
   {
- E_FREE_FUNC(zgs->down_timer, ecore_timer_del);
+ if (zgs->down_timer)
+   {
+  

[EGIT] [core/enlightenment] master 03/03: gadgets - get long press plus dnd to behave nice

2018-10-30 Thread Carsten Haitzler
raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=c49f49829f80181e9d1db39aece4a95e14233089

commit c49f49829f80181e9d1db39aece4a95e14233089
Author: Carsten Haitzler (Rasterman) 
Date:   Mon Oct 29 17:32:51 2018 +

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. ...
---
 src/bin/e_gadget.c| 14 --
 src/bin/e_utils.h |  9 +
 src/modules/pager/e_mod_config.c  | 10 +-
 src/modules/pager/e_mod_main.c| 22 -
 src/modules/pager/gadget/config.c | 23 --
 src/modules/pager/gadget/pager.c  | 40 +--
 6 files changed, 35 insertions(+), 83 deletions(-)

diff --git a/src/bin/e_gadget.c b/src/bin/e_gadget.c
index 59250d7f7..0ddf5b21d 100644
--- a/src/bin/e_gadget.c
+++ b/src/bin/e_gadget.c
@@ -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)
{
diff --git a/src/bin/e_utils.h b/src/bin/e_utils.h
index 0f451a196..cb3cf089f 100644
--- a/src/bin/e_utils.h
+++ b/src/bin/e_utils.h
@@ -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
diff --git a/src/modules/pager/e_mod_config.c b/src/modules/pager/e_mod_config.c
index 5a78db9fb..4fa9d334a 100644
--- a/src/modules/pager/e_mod_config.c
+++ b/src/modules/pager/e_mod_config.c
@@ -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 != 

[EGIT] [core/enlightenment] master 02/03: Revert "Gadget Menu: Cancel menu after a drag *EITHER* vertically or horizontally, not *BOTH*. Fixes longpress menu interrupting drag in gadgets such as pager

2018-10-30 Thread Carsten Haitzler
raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=63a4475497aa83582cd89e403cf453f90da4746b

commit 63a4475497aa83582cd89e403cf453f90da4746b
Author: Carsten Haitzler (Rasterman) 
Date:   Fri Oct 26 16:10:01 2018 +0100

Revert "Gadget Menu: Cancel menu after a drag *EITHER* vertically or 
horizontally, not *BOTH*. Fixes longpress menu interrupting drag in gadgets 
such as pager."

This reverts commit f56a228e701eddf04f1bceba052cec83d5cd85c8.
---
 src/bin/e_gadget.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/bin/e_gadget.c b/src/bin/e_gadget.c
index 4f987ff91..59250d7f7 100644
--- a/src/bin/e_gadget.c
+++ b/src/bin/e_gadget.c
@@ -1545,7 +1545,7 @@ _site_mouse_move(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
 
 dx = ev->cur.canvas.x - zgs->down_1_x;
 dy = ev->cur.canvas.y - zgs->down_1_y;
-if (((dx * dx) >= 3) || ((dy * dy) >= 3))
+if (((dx * dx) + (dy * dy)) >= (5 * 5))
   {
  if (zgs->down_timer)
{

--