Enlightenment CVS committal

Author  : cmarcelo
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        Edje_Edit.h edje_callbacks.c edje_data.c edje_edit.c 
        edje_private.h 


Log Message:
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.


===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/Edje_Edit.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -3 -r1.23 -r1.24
--- Edje_Edit.h 24 Mar 2008 08:22:00 -0000      1.23
+++ Edje_Edit.h 1 Apr 2008 21:33:17 -0000       1.24
@@ -383,6 +383,22 @@
                                  * 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   
************************************/
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_callbacks.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- edje_callbacks.c    31 Mar 2008 21:38:51 -0000      1.26
+++ edje_callbacks.c    1 Apr 2008 21:33:17 -0000       1.27
@@ -34,7 +34,7 @@
    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 @@
    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 *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 @@
                  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 @@
               {
                  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 @@
                 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 *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 @@
               {
                  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 @@
    Evas_Event_Mouse_Move *ev;
    Edje *ed;
    Edje_Real_Part *rp;
+   int ignored;
 
    ev = event_info;
    ed = data;
@@ -221,8 +246,11 @@
    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 @@
               {
                  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 @@
    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;
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_data.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -3 -r1.42 -r1.43
--- edje_data.c 2 Mar 2008 05:39:51 -0000       1.42
+++ edje_data.c 1 Apr 2008 21:33:17 -0000       1.43
@@ -358,6 +358,7 @@
    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);
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_edit.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- edje_edit.c 24 Mar 2008 08:22:01 -0000      1.12
+++ edje_edit.c 1 Apr 2008 21:33:17 -0000       1.13
@@ -921,6 +921,7 @@
    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;
@@ -1297,6 +1298,23 @@
      evas_object_repeat_events_set(rp->object, 1);
    else
      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 *
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.146
retrieving revision 1.147
diff -u -3 -r1.146 -r1.147
--- edje_private.h      24 Mar 2008 08:22:01 -0000      1.146
+++ edje_private.h      1 Apr 2008 21:33:17 -0000       1.147
@@ -486,6 +486,7 @@
    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;



-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to