[Pkg-e-commits] [SCM] Enlightenment DR17 graphical layout and animation library branch, upstream-vcs, updated. f5b4e4555670cc3b4a24802eb44d7d47c379bee4

cmarcelo cmarcelo at alioth.debian.org
Fri May 23 22:08:18 UTC 2008


The following commit has been merged in the upstream-vcs branch:
commit 51aa1e1d81b0b2b627a1803708e92601a12eabca
Author: cmarcelo <cmarcelo>
Date:   Tue Apr 1 21:33:17 2008 +0000

    Edje: adding support for ignore_flags.
    
    Parts can choose to ignore Events with certain flags in event_flags. The default value is
    to accept all events. The syntax for this is specifying in the part:
    
        ignore_flags: ON_HOLD;
    
    I've tried to update Edje_Edit bits also.

diff --git a/src/bin/edje_cc_handlers.c b/src/bin/edje_cc_handlers.c
index a912507..77f5373 100644
--- a/src/bin/edje_cc_handlers.c
+++ b/src/bin/edje_cc_handlers.c
@@ -83,6 +83,7 @@ static void st_collections_group_parts_part_type(void);
 static void st_collections_group_parts_part_effect(void);
 static void st_collections_group_parts_part_mouse_events(void);
 static void st_collections_group_parts_part_repeat_events(void);
+static void st_collections_group_parts_part_ignore_flags(void);
 static void st_collections_group_parts_part_pointer_mode(void);
 static void st_collections_group_parts_part_precise_is_inside(void);
 static void st_collections_group_parts_part_use_alternate_font_metrics(void);
@@ -222,6 +223,7 @@ New_Statement_Handler statement_handlers[] =
      {"collections.group.parts.part.effect", st_collections_group_parts_part_effect},
      {"collections.group.parts.part.mouse_events", st_collections_group_parts_part_mouse_events},
      {"collections.group.parts.part.repeat_events", st_collections_group_parts_part_repeat_events},
+     {"collections.group.parts.part.ignore_flags", st_collections_group_parts_part_ignore_flags},
      {"collections.group.parts.part.pointer_mode", st_collections_group_parts_part_pointer_mode},
      {"collections.group.parts.part.precise_is_inside", st_collections_group_parts_part_precise_is_inside},
      {"collections.group.parts.part.use_alternate_font_metrics", st_collections_group_parts_part_use_alternate_font_metrics},
@@ -1382,6 +1384,7 @@ st_collections_group_data_item(void)
                     type: IMAGE;
                     mouse_events:  1;
                     repeat_events: 0;
+                    ignore_flags: NONE;
                     clip_to: "anotherpart";
                     source:  "groupname";
                     pointer_mode: AUTOGRAB;
@@ -1412,6 +1415,7 @@ ob_collections_group_parts_part(void)
    ep->type = EDJE_PART_TYPE_IMAGE;
    ep->mouse_events = 1;
    ep->repeat_events = 0;
+   ep->ignore_flags = EVAS_EVENT_FLAG_NONE;
    ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
    ep->precise_is_inside = 0;
    ep->use_alternate_font_metrics = 0;
@@ -1554,6 +1558,37 @@ st_collections_group_parts_part_repeat_events(void)
 /**
     @page edcref
     @property
+        ignore_flags
+    @parameters
+        [FLAG] ...
+    @effect
+        Specifies whether events with the given flags should be ignored,
+	i.e., will not have the signals emitted to the parts. Multiple flags
+	must be separated by spaces, the effect will be ignoring all events
+	with one of the flags specified. Possible flags:
+            @li NONE (default value, no event will be ignored)
+            @li ON_HOLD
+    @endproperty
+*/
+static void
+st_collections_group_parts_part_ignore_flags(void)
+{
+   Edje_Part_Collection *pc;
+   Edje_Part *ep;
+
+   check_min_arg_count(1);
+
+   pc = evas_list_data(evas_list_last(edje_collections));
+   ep = evas_list_data(evas_list_last(pc->parts));
+   ep->ignore_flags = parse_flags(0,
+				  "NONE", EVAS_EVENT_FLAG_NONE,
+				  "ON_HOLD", EVAS_EVENT_FLAG_ON_HOLD,
+				  NULL);
+}
+
+/**
+    @page edcref
+    @property
         pointer_mode
     @parameters
         [MODE]
diff --git a/src/lib/Edje_Edit.h b/src/lib/Edje_Edit.h
index 92e5c02..ffdbb0c 100644
--- a/src/lib/Edje_Edit.h
+++ b/src/lib/Edje_Edit.h
@@ -383,6 +383,22 @@ edje_edit_part_repeat_events_set(
                                  * If set to 0 the events received will not propagate to other parts.*/
 );
 
+/**Get ignore_flags for part.*/
+EAPI Evas_Event_Flags        ///@return event flags ignored
+edje_edit_part_ignore_flags_get(
+   Evas_Object *obj,       ///< The edje object
+   const char *part        ///< The name of the part
+);
+
+/**Set repeat_events for part. */
+EAPI void
+edje_edit_part_ignore_flags_set(
+   Evas_Object *obj,       ///< The edje object
+   const char *part,       ///< The name of the part
+   Evas_Event_Flags ignore_flags ///< event flags to be ignored
+);
+
+
 //@}
 /******************************************************************************/
 /**************************   STATES API   ************************************/
diff --git a/src/lib/edje_callbacks.c b/src/lib/edje_callbacks.c
index 07d1f38..0cb45bf 100644
--- a/src/lib/edje_callbacks.c
+++ b/src/lib/edje_callbacks.c
@@ -34,7 +34,7 @@ _edje_mouse_in_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
    ev = event_info;
    ed = data;
    rp = evas_object_data_get(obj, "real_part");
-   if (!rp) return;
+   if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return;
    _edje_emit(ed, "mouse,in", rp->part->name);
    return;
    e = NULL;
@@ -50,7 +50,7 @@ _edje_mouse_out_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
    ev = event_info;
    ed = data;
    rp = evas_object_data_get(obj, "real_part");
-   if (!rp) return;
+   if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return;
    _edje_emit(ed, "mouse,out", rp->part->name);
    return;
    e = NULL;
@@ -63,20 +63,28 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
    Edje *ed;
    Edje_Real_Part *rp;
    char buf[256];
+   int ignored;
 
    ev = event_info;
    ed = data;
    rp = evas_object_data_get(obj, "real_part");
    if (!rp) return;
-   if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK)
-     snprintf(buf, sizeof(buf), "mouse,down,%i,triple", ev->button);
-   else if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
-     snprintf(buf, sizeof(buf), "mouse,down,%i,double", ev->button);
-   else
-     snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
+
+   ignored = rp->part->ignore_flags & ev->event_flags;
+
    _edje_ref(ed);
    _edje_freeze(ed);
-   _edje_emit(ed, buf, rp->part->name);
+
+   if (!ignored)
+     {
+	if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK)
+	  snprintf(buf, sizeof(buf), "mouse,down,%i,triple", ev->button);
+	else if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
+	  snprintf(buf, sizeof(buf), "mouse,down,%i,double", ev->button);
+	else
+	  snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
+	_edje_emit(ed, buf, rp->part->name);
+     }
 
    if (rp->events_to)
      {
@@ -101,8 +109,11 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
 		  events->y = ev->canvas.y - y - events->h / 2;
 	       }
 
-	     snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
-	     _edje_emit(ed, buf, events->part->name);
+	     if (!ignored)
+	       {
+		  snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
+		  _edje_emit(ed, buf, events->part->name);
+	       }
 	     ed->dirty = 1;
 	  }
 	_edje_recalc(ed);
@@ -123,7 +134,8 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
 	       {
 		  rp->drag.val.x = dx;
 		  rp->drag.val.y = dy;
-		  _edje_emit(ed, "drag", rp->part->name);
+		  if (!ignored)
+		    _edje_emit(ed, "drag", rp->part->name);
 		  ed->dirty = 1;
 		  rp->drag.need_reset = 1;
 		  _edje_recalc(ed);
@@ -139,7 +151,8 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
 		 rp->drag.down.x = ev->canvas.x;
 	     if (rp->part->dragable.y)
 		 rp->drag.down.y = ev->canvas.y;
-	     _edje_emit(ed, "drag,start", rp->part->name);
+	     if (!ignored)
+	       _edje_emit(ed, "drag,start", rp->part->name);
 	  }
 	rp->drag.down.count++;
      }
@@ -162,24 +175,34 @@ _edje_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
    Edje *ed;
    Edje_Real_Part *rp;
    char buf[256];
+   int ignored;
 
    ev = event_info;
    ed = data;
    rp = evas_object_data_get(obj, "real_part");
    if (!rp) return;
 
-   snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button);
+   ignored = rp->part->ignore_flags & ev->event_flags;
+
    _edje_ref(ed);
    _edje_freeze(ed);
-   _edje_emit(ed, buf, rp->part->name);
 
-   if (rp->events_to)
+   if (!ignored)
      {
-	rp = rp->events_to;
 	snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button);
 	_edje_emit(ed, buf, rp->part->name);
      }
 
+   if (rp->events_to)
+     {
+	rp = rp->events_to;
+	if (!ignored)
+	  {
+	     snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button);
+	     _edje_emit(ed, buf, rp->part->name);
+	  }
+     }
+
    if ((rp->part->dragable.x) || (rp->part->dragable.y))
      {
 	if (rp->drag.down.count > 0)
@@ -189,11 +212,12 @@ _edje_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
 	       {
 		  rp->drag.need_reset = 1;
 		  ed->dirty = 1;
-		  _edje_emit(ed, "drag,stop", rp->part->name);
+		  if (!ignored)
+		    _edje_emit(ed, "drag,stop", rp->part->name);
 	       }
 	  }
      }
-   if ((rp->still_in) && (rp->clicked_button == ev->button))
+   if ((rp->still_in) && (rp->clicked_button == ev->button) && (!ignored))
      {
 	snprintf(buf, sizeof(buf), "mouse,clicked,%i", ev->button);
 	_edje_emit(ed, buf, rp->part->name);
@@ -214,6 +238,7 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
    Evas_Event_Mouse_Move *ev;
    Edje *ed;
    Edje_Real_Part *rp;
+   int ignored;
 
    ev = event_info;
    ed = data;
@@ -221,8 +246,11 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
    if (!rp) return;
    if (rp->events_to) rp = rp->events_to;
 
+   ignored = rp->part->ignore_flags & ev->event_flags;
+
    _edje_ref(ed);
-   _edje_emit(ed, "mouse,move", rp->part->name);
+   if (!ignored)
+     _edje_emit(ed, "mouse,move", rp->part->name);
 
    if (rp->still_in)
      {
@@ -267,7 +295,8 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
 	       {
 		  rp->drag.val.x = dx;
 		  rp->drag.val.y = dy;
-		  _edje_emit(ed, "drag", rp->part->name);
+		  if (!ignored)
+		    _edje_emit(ed, "drag", rp->part->name);
 		  ed->dirty = 1;
 		  _edje_recalc(ed);
 	       }
@@ -290,7 +319,8 @@ _edje_mouse_wheel_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
    ev = event_info;
    ed = data;
    rp = evas_object_data_get(obj, "real_part");
-   if (!rp) return;
+   if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return;
+
    snprintf(buf, sizeof(buf), "mouse,wheel,%i,%i", ev->direction, (ev->z < 0) ? (-1) : (1));
    _edje_emit(ed, buf, rp->part->name);
    return;
diff --git a/src/lib/edje_data.c b/src/lib/edje_data.c
index a62790d..323960c 100644
--- a/src/lib/edje_data.c
+++ b/src/lib/edje_data.c
@@ -358,6 +358,7 @@ _edje_edd_setup(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "effect", effect, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "mouse_events", mouse_events, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "repeat_events", repeat_events, EET_T_CHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "ignore_flags", ignore_flags, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "pointer_mode", pointer_mode, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "precise_is_inside", precise_is_inside, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "clip_to_id", clip_to_id, EET_T_INT);
diff --git a/src/lib/edje_edit.c b/src/lib/edje_edit.c
index 0497f56..9fa3566 100644
--- a/src/lib/edje_edit.c
+++ b/src/lib/edje_edit.c
@@ -921,6 +921,7 @@ edje_edit_part_add(Evas_Object *obj, const char* name, unsigned char type)
    ep->name = evas_stringshare_add(name);
    ep->mouse_events = 1;
    ep->repeat_events = 0;
+   ep->ignore_flags = EVAS_EVENT_FLAG_NONE;
    ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
    ep->precise_is_inside = 0;
    ep->use_alternate_font_metrics = 0;
@@ -1299,6 +1300,23 @@ edje_edit_part_repeat_events_set(Evas_Object *obj, const char *part, unsigned ch
      evas_object_repeat_events_set(rp->object, 0);
 }
 
+EAPI Evas_Event_Flags
+edje_edit_part_ignore_flags_get(Evas_Object *obj, const char *part)
+{
+   GET_RP_OR_RETURN(0);
+   return rp->part->ignore_flags;
+}
+
+EAPI void
+edje_edit_part_ignore_flags_set(Evas_Object *obj, const char *part, Evas_Event_Flags ignore_flags)
+{
+   GET_RP_OR_RETURN();
+   if (!rp->object) return;
+   printf("Set ignore_flags for part: %s [%#x]\n", part, ignore_flags);
+
+   rp->part->ignore_flags = ignore_flags;
+}
+
 EAPI const char *
 edje_edit_part_source_get(Evas_Object *obj, const char *part)
 {
diff --git a/src/lib/edje_private.h b/src/lib/edje_private.h
index e8079b4..7178b51 100644
--- a/src/lib/edje_private.h
+++ b/src/lib/edje_private.h
@@ -486,6 +486,7 @@ struct _Edje_Part
    unsigned char          effect; /* 0 = plain... */
    unsigned char          mouse_events; /* it will affect/respond to mouse events */
    unsigned char          repeat_events; /* it will repeat events to objects below */
+   Evas_Event_Flags       ignore_flags;
    unsigned char          precise_is_inside;
    unsigned char          use_alternate_font_metrics;
    char                   pointer_mode;

-- 
Enlightenment DR17 graphical layout and animation library



More information about the Pkg-e-commits mailing list