Yeah.. I noticed it.

   I will handle that because elm is my baby.


   By the way, this kind of things should be filtered out before submission.

   1. Self verification step.

   [1]https://phab.enlightenment.org/w/commit_check_point/

   2. Phab review process.


   Thanks.


   Daniel Juyung Seo (SeoZ)


   ------- Original Message -------

   Sender      :      Tom     Hacohen<tom.haco...@samsung.com>     Senior
   Engineer/SRUK-Enlightenment Foundation Libraries (EFL)/쨩챦쩌쨘�€체�€횣

   Date : 2014-04-10 11:15 (GMT+09:00)

   Title : Re: [E-devel] [EGIT] [core/elementary] master 01/01: elementary:
   when modal win appears another wins are blocked


   This commit seems to have added a few warnings to our build.
   ../../../src/lib/elm_menu.c:505:9: warning: passing argument 1 of
   'elm_object_item_disabled_set' from incompatible pointer type [enabled
   by default]
             elm_object_item_disabled_set(current, EINA_TRUE);
   --
   Tom.
   On 09/04/14 11:03, Bogdan Devichev wrote:
   > raster pushed a commit to branch master.
   >
   >
   http://git.enlightenment.org/core/elementary.git/commit/?id=aedef31eddf38567
   e27abcb4f753cf803c4f7b47
   >
   > commit aedef31eddf38567e27abcb4f753cf803c4f7b47
   > Author: Bogdan Devichev
   > Date:   Wed Apr 9 19:04:55 2014 +0900
   >
   >      elementary: when modal win appears another wins are blocked
   >
   >      Summary:
   >      In win.edc add blocker for its content and programs for it. Add
   >      Eina_Bool blocked and was_enabled to _Elm_Menu_Item for correctly
   blocking
   >      and unblocking of main_menu. They used for saving state which was
   before modal
   >      win was apeared. Add callbacks and private functions in menu.c for
   blocking and
   >      unblocking menu. Add integer modal_count to Elm_Win_Smart_Data for
   creating
   >      enum  of modal wins. Add changes in win.c for blocking content,
   in_focus callback
   >      and menu while modal win is exist.
   >
   >      Reviewers: cedric, seoz, raster
   >
   >      Reviewed By: raster
   >
   >      CC: reutskiy.v.v, raster
   >
   >      Differential Revision: https://phab.enlightenment.org/D607
   > ---
   >   data/themes/edc/elm/win.edc | 24 +++++++++++++
   >   src/lib/elm_menu.c          | 31 +++++++++++++++++
   >   src/lib/elm_widget_menu.h   |  2 ++
   >   src/lib/elm_win.c           | 83
   +++++++++++++++++++++++++++++++++++++++++++--
   >   4 files changed, 138 insertions(+), 2 deletions(-)
   >
   > diff --git a/data/themes/edc/elm/win.edc b/data/themes/edc/elm/win.edc
   > index 56af51f..343de6c 100644
   > --- a/data/themes/edc/elm/win.edc
   > +++ b/data/themes/edc/elm/win.edc
   > @@ -28,6 +28,18 @@ group { name: "elm/win/base/default";
   >               }
   >            }
   >         }
   > +      part { name: "blocker"; type: RECT;
   > +         description { state: "default" 0.0;
   > +            rel1.relative : 0.0 0.0;
   > +            rel2.relative : 1.0 1.0;
   > +            color: 64 64 64 150;
   > +            visible: 0;
   > +         }
   > +         description { state: "visible" 0.0;
   > +            inherit: "default" 0.0;
   > +            visible: 1;
   > +         }
   > +      }
   >      }
   >      programs {
   >         program { name: "show_menu";
   > @@ -42,5 +54,17 @@ group { name: "elm/win/base/default";
   >            action: STATE_SET "default" 0.0;
   >            target: "elm.swallow.menu";
   >         }
   > +      program { name: "hide_blocker";
   > +         signal: "elm,action,hide_blocker";
   > +         source: "elm";
   > +         action: STATE_SET "default" 0.0;
   > +         target: "blocker";
   > +      }
   > +      program { name: "show_blocker";
   > +         signal: "elm,action,show_blocker";
   > +         source: "elm";
   > +         action: STATE_SET "visible" 0.0;
   > +         target: "blocker";
   > +      }
   >      }
   >   }
   > diff --git a/src/lib/elm_menu.c b/src/lib/elm_menu.c
   > index d13f442..5e8a356 100644
   > --- a/src/lib/elm_menu.c
   > +++ b/src/lib/elm_menu.c
   > @@ -492,6 +492,33 @@ _menu_item_inactivate_cb(void *data,
   >      if (item->submenu.open) _submenu_hide(item);
   >   }
   >
   > +static void
   > +_block_menu(Elm_Menu_Data * sd, Evas_Object *obj EINA_UNUSED, ...)
   > +{
   > +   const Eina_List *l;
   > +   Elm_Menu_Item *current;
   > +   Eina_List *items = sd->items;
   > +   EINA_LIST_FOREACH(items, l, current)
   > +     {
   >     +        if     (!current->blocked)    current->was_enabled    =
   !elm_widget_item_disabled_get(current);
   > +        current->blocked = EINA_TRUE;
   > +        elm_object_item_disabled_set(current, EINA_TRUE);
   > +     }
   > +}
   > +
   > +static void
   > +_unblock_menu(Elm_Menu_Data * sd, Evas_Object *obj EINA_UNUSED, ...)
   > +{
   > +   const Eina_List *l;
   > +   Elm_Menu_Item *current;
   > +   Eina_List *items = sd->items;
   > +   EINA_LIST_FOREACH(items, l, current)
   > +     {
   > +        elm_object_item_disabled_set(current, !current->was_enabled);
   > +        current->blocked = EINA_FALSE;
   > +     }
   > +}
   > +
   >   EOLIAN static void
   >   _elm_menu_evas_smart_show(Eo *obj EINA_UNUSED, Elm_Menu_Data *sd)
   >   {
   > @@ -736,6 +763,10 @@ _elm_menu_eo_base_constructor(Eo *obj, Elm_Menu_Data
   *sd)
   >          (sd->hv, ELM_HOVER_AXIS_VERTICAL), sd->bx);
   >
   >      _sizing_eval(obj);
   > +   evas_object_smart_callback_add(obj, "elm,action,block_menu",
   > +                                  _block_menu, sd);
   > +   evas_object_smart_callback_add(obj, "elm,action,unblock_menu",
   > +                                  _unblock_menu, sd);
   >   }
   >
   >   EAPI void
   > diff --git a/src/lib/elm_widget_menu.h b/src/lib/elm_widget_menu.h
   > index 04fe244..0cede00 100644
   > --- a/src/lib/elm_widget_menu.h
   > +++ b/src/lib/elm_widget_menu.h
   > @@ -53,6 +53,8 @@ struct _Elm_Menu_Item
   >      Eina_Bool      separator : 1;
   >      Eina_Bool      selected : 1;
   >      Eina_Bool      object_item : 1;
   > +   Eina_Bool      was_enabled : 1;
   > +   Eina_Bool      blocked : 1;
   >   };
   >
   >   /**
   > diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c
   > index c3a1651..227f051 100644
   > --- a/src/lib/elm_win.c
   > +++ b/src/lib/elm_win.c
   > @@ -50,6 +50,40 @@ static const Elm_Win_Trap *trap = NULL;
   >     if (!obj || !eo_isa(obj, MY_CLASS)) \
   >       return
   >
   > +#define DECREMENT_MODALITY()                                    \
   > +  EINA_LIST_FOREACH(_elm_win_list, l, current)                  \
   > +    {                                                           \
   > +       ELM_WIN_DATA_GET_OR_RETURN(current, cursd);              \
   > +       if ((obj != current) && (cursd->modal_count > 0))        \
   > +         {                                                      \
   > +            cursd->modal_count--;                               \
   > +         }                                                      \
   > +       if (cursd->modal_count == 0)                             \
   > +         {                                                      \
   > +            edje_object_signal_emit(cursd->layout, \
   > +                        "elm,action,hide_blocker", "elm");      \
   > +            evas_object_smart_callback_call(cursd->main_menu, \
   > +                        "elm,action,unblock_menu", NULL);       \
   > +         }                                                      \
   > +    }
   > +
   > +#define INCREMENT_MODALITY()                                    \
   > +  EINA_LIST_FOREACH(_elm_win_list, l, current)                  \
   > +    {                                                           \
   > +       ELM_WIN_DATA_GET_OR_RETURN(current, cursd);              \
   > +       if (obj != current)                                      \
   > +         {                                                      \
   > +            cursd->modal_count++;                               \
   > +         }                                                      \
   > +       if (cursd->modal_count > 0)                              \
   > +         {                                                      \
   > +            edje_object_signal_emit(cursd->layout, \
   > +                             "elm,action,show_blocker", "elm"); \
   > +            evas_object_smart_callback_call(cursd->main_menu, \
   > +                             "elm,action,block_menu", NULL);    \
   > +         }                                                      \
   > +    }
   > +
   >   #define ENGINE_GET() (_elm_preferred_engine ? _elm_preferred_engine :
   (_elm_config->engine ? _elm_config->engine : ""))
   >   #define ENGINE_COMPARE(name) (!strcmp(ENGINE_GET(), name))
   >
   > @@ -158,6 +192,7 @@ struct _Elm_Win_Data
   >      int          size_base_w, size_base_h;
   >      int          size_step_w, size_step_h;
   >      int          norender;
   > +   int          modal_count;
   >      Eina_Bool    urgent : 1;
   >      Eina_Bool    modal : 1;
   >      Eina_Bool    demand_attention : 1;
   > @@ -858,7 +893,7 @@ _elm_win_focus_in(Ecore_Evas *ee)
   >      Evas_Object *obj;
   >      unsigned int order = 0;
   >
   > -   if (!sd) return;
   > +   if ((!sd) || (sd->modal_count)) return;
   >
   >      obj = sd->obj;
   >
   > @@ -1249,10 +1284,19 @@ _deferred_ecore_evas_free(void *data)
   >   EOLIAN static void
   >   _elm_win_evas_smart_show(Eo *obj, Elm_Win_Data *sd)
   >   {
   > +   if (sd->modal_count) return;
   > +   const Eina_List *l;
   > +   Evas_Object *current;
   > +
   >      if (!evas_object_visible_get(obj))
   >        _elm_win_state_eval_queue();
   >      eo_do_super(obj, MY_CLASS, evas_obj_smart_show());
   >
   > +   if ((sd->modal) && (!evas_object_visible_get(obj)))
   > +     {
   > +        INCREMENT_MODALITY()
   > +     }
   > +
   >      TRAP(sd, show);
   >
   >      if (sd->shot.info) _shot_handle(sd);
   > @@ -1261,10 +1305,19 @@ _elm_win_evas_smart_show(Eo *obj, Elm_Win_Data
   *sd)
   >   EOLIAN static void
   >   _elm_win_evas_smart_hide(Eo *obj, Elm_Win_Data *sd)
   >   {
   > +   if (sd->modal_count) return;
   > +   const Eina_List *l;
   > +   Evas_Object *current;
   > +
   >      if (evas_object_visible_get(obj))
   >        _elm_win_state_eval_queue();
   >      eo_do_super(obj, MY_CLASS, evas_obj_smart_hide());
   >
   > +   if ((sd->modal) && (evas_object_visible_get(obj)))
   > +     {
   > +        DECREMENT_MODALITY()
   > +     }
   > +
   >      TRAP(sd, hide);
   >
   >      if (sd->frame_obj)
   >  @@ -1512,6 +1565,17 @@ _elm_win_img_callbacks_del(Evas_Object *obj,
   Evas_Object *imgobj)
   >   EOLIAN static void
   >   _elm_win_evas_smart_del(Eo *obj, Elm_Win_Data *sd)
   >   {
   > +   const Eina_List *l;
   > +   Evas_Object *current;
   > +
   > +   if ((sd->modal) && (evas_object_visible_get(obj)))
   > +     {
   > +       DECREMENT_MODALITY()
   > +     }
   > +
   > +   if ((sd->modal) && (sd->modal_count > 0))
   > +     ERR("Deleted modal win was blocked by another modal win which was
   created after creation of that win.");
   > +
   >      evas_object_event_callback_del_full(sd->layout,
   >                                          EVAS_CALLBACK_CHANGED_SIZE_HINTS,
   >                                          _elm_win_on_resize_obj_changed_si
   ze_hints,
   > @@ -3111,6 +3175,7 @@ _elm_win_constructor(Eo *obj, Elm_Win_Data *sd,
   const char *name, Elm_Win_Type t
   >
   >      sd->type = type;
   >      sd->parent = parent;
   > +   sd->modal_count = 0;
   >
   >      if (sd->parent)
   >        evas_object_event_callback_add
   > @@ -3834,8 +3899,22 @@ _elm_win_demand_attention_get(Eo *obj EINA_UNUSED,
   Elm_Win_Data *sd)
   >   }
   >
   >   EOLIAN static void
   > -_elm_win_modal_set(Eo *obj EINA_UNUSED, Elm_Win_Data *sd, Eina_Bool
   modal)
   > +_elm_win_modal_set(Eo *obj, Elm_Win_Data *sd, Eina_Bool modal)
   >   {
   > +   if (sd->modal_count) return;
   > +
   > +   const Eina_List *l;
   > +   Evas_Object *current;
   > +
   > +   if ((modal) && (!sd->modal) && (evas_object_visible_get(obj)))
   > +     {
   > +       INCREMENT_MODALITY()
   > +     }
   > +   else if ((!modal) && (sd->modal) && (evas_object_visible_get(obj)))
   > +     {
   > +       DECREMENT_MODALITY()
   > +     }
   > +
   >      sd->modal = modal;
   >      TRAP(sd, modal_set, modal);
   >   #ifdef HAVE_ELEMENTARY_X
   >
   ----------------------------------------------------------------------------
   --
   Put Bad Developers to Shame
   Dominate Development with Jenkins Continuous Integration
   Continuously Automate Build, Test & Deployment
   Start a new project now. Try Jenkins in the cloud.
   http://p.sf.net/sfu/13600_Cloudbees
   _______________________________________________
   enlightenment-devel mailing list
   enlightenment-devel@lists.sourceforge.net
   https://lists.sourceforge.net/lists/listinfo/enlightenment-devel



   짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징

   Daniel Juyung Seo

   010-2679-6443


   Mobile S/W Platform Lab.

   Digital Media & Communications R&D Center.
   SAMSUNG ELECTRONICS CO., LTD


   E-Mail. juyung....@samsung.com

   짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징


   [cid:Z5JE7EUABGFC@namo.co.kr]

   [SeenTimeChecker?do=df7214eb6a8ae2799ae08a28e09f4210ab36f51b6fb6a027ee4e573c
   8060a1433340d63f25e1a292b9d1af7a86c82c9092fee5c9a9e95c0389fe2928b38d2252d476
   dc49b3e68b37db9fdddda33e82cbe4a391424e62fcf6cf878f9a26ce15a0]

References

   1. https://phab.enlightenment.org/w/commit_check_point/

<<201404101135064_BEI0XT4N.gif>>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to