Neither is this one. :) On 10/04/14 03:40, 서주영 wrote: > OMG! > My last mail was not plain text. > Sorry about that. > > Daniel Juyung Seo (SeoZ) > > ------- Original Message ------- > Sender : 서주영<juyung....@samsung.com> S5(책임)/책임/차세대Computing Lab(S/W센터)/삼성전자 > Date : 2014-04-10 11:35 (GMT+09:00) > Title : Re: [E-devel] [EGIT] [core/elementary] master 01/01: elementary: when > modal win appears another wins are blocked > > > > 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 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 > > 짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징짝징 > > > > [http://www.samsung.net/service/ml/AttachController/201404101135064_BEI0XT4N.gif?cmd=downdirectly&filepath=/LOCAL/ML/CACHE/j/20140410/z5je7euab...@namo.co.kr20140410023322...@juyung.seojuyung.seo&contentType=IMAGE/GIF;charset=KSC5601&msgno=2458&partno=0.1&foldername=INBOX&msguid=129814] > > > [SeenTimeChecker?do=df7214eb6a8ae2799ae08a28e09f4210ab36f51b6fb6a027ee4e573c > > 8060a1433340d63f25e1a292b9d1af7a86c82c9092fee5c9a9e95c0389fe2928b38d2252d476 > dc49b3e68b37db9fdddda33e82cbe4a391424e62fcf6cf878f9a26ce15a0] > > References > > 1. https://phab.enlightenment.org/w/commit_check_point/ >
------------------------------------------------------------------------------ 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