From 97c9fa64a461ccf60e63fd8a8982c9b8c5c6290e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Mon, 10 Oct 2016 18:59:42 +0900 Subject: [PATCH] evas/elm: Remove group_show and group_hide These should be just overrides of Efl.Gfx.visible.set. Many widgets were handling smart show() and hide() manually, which means this patch is quite large. Hopefully this doesn't break anything, obviously. But here are some widgets known to be problematic, as the old code flow was really strange (sometimes not calling the efl_super function): - window - notify --- src/lib/edje/edje_object.eo | 3 +- src/lib/edje/edje_smart.c | 24 +++++--- src/lib/elementary/efl_ui_image.c | 28 ++++++---- src/lib/elementary/efl_ui_image.eo | 3 +- src/lib/elementary/efl_ui_text.c | 18 +++--- src/lib/elementary/efl_ui_text.eo | 3 +- src/lib/elementary/efl_ui_win.c | 56 ++++++++++++++----- src/lib/elementary/efl_ui_win.eo | 3 +- src/lib/elementary/elc_combobox.c | 21 ++++--- src/lib/elementary/elc_hoversel.c | 14 ++--- src/lib/elementary/elc_naviframe.c | 8 ++- src/lib/elementary/elm_combobox.eo | 3 +- src/lib/elementary/elm_entry.c | 21 +++---- src/lib/elementary/elm_entry.eo | 3 +- src/lib/elementary/elm_hover.c | 27 ++++----- src/lib/elementary/elm_hover.eo | 3 +- src/lib/elementary/elm_hoversel.eo | 3 +- src/lib/elementary/elm_interface_scrollable.c | 18 ++---- src/lib/elementary/elm_mapbuf.c | 14 ++--- src/lib/elementary/elm_mapbuf.eo | 3 +- src/lib/elementary/elm_menu.c | 7 ++- src/lib/elementary/elm_menu.eo | 2 +- src/lib/elementary/elm_naviframe.eo | 2 +- src/lib/elementary/elm_notify.c | 26 ++++++--- src/lib/elementary/elm_notify.eo | 3 +- src/lib/elementary/elm_pan.eo | 3 +- src/lib/elementary/elm_thumb.c | 19 ++++--- src/lib/elementary/elm_thumb.eo | 3 +- src/lib/elementary/elm_widget.c | 36 +++++------- src/lib/elementary/elm_widget.eo | 3 +- src/lib/emotion/efl_canvas_video.eo | 3 +- src/lib/emotion/emotion_smart.c | 27 ++++----- src/lib/evas/Evas_Legacy.h | 3 +- src/lib/evas/canvas/efl_canvas_group.eo | 8 --- .../evas/canvas/efl_canvas_group_clipped.eo | 3 +- src/lib/evas/canvas/evas_object_intercept.c | 15 +++-- src/lib/evas/canvas/evas_object_main.c | 37 +++++------- src/lib/evas/canvas/evas_object_smart.c | 20 ------- .../evas/canvas/evas_object_smart_clipped.c | 24 ++++---- 39 files changed, 250 insertions(+), 270 deletions(-) diff --git a/src/lib/edje/edje_object.eo b/src/lib/edje/edje_object.eo index 1144e97aad..94c9c88cef 100644 --- a/src/lib/edje/edje_object.eo +++ b/src/lib/edje/edje_object.eo @@ -2066,13 +2066,12 @@ class Edje.Object (Efl.Canvas.Group.Clipped, Efl.File, Efl.Container, Efl.Part) } } implements { + Efl.Gfx.visible.set; Efl.Object.constructor; Efl.Object.destructor; Efl.Object.dbg_info_get; Efl.Canvas.Object.no_render.set; Efl.Canvas.Object.paragraph_direction.set; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c index 0079c43887..8e1b656ae3 100644 --- a/src/lib/edje/edje_smart.c +++ b/src/lib/edje/edje_smart.c @@ -282,14 +282,13 @@ _edje_object_efl_canvas_group_group_resize(Eo *obj EINA_UNUSED, Edje *ed, Evas_C _edje_emit(ed, "resize", NULL); } -EOLIAN static void -_edje_object_efl_canvas_group_group_show(Eo *obj, Edje *ed) +static void +_edje_object_show(Eo *obj, Edje *ed) { Eina_List *l; Edje *edg; - efl_canvas_group_show(efl_super(obj, MY_CLASS)); - if (evas_object_visible_get(obj)) return; + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_TRUE); if (_edje_lua_script_only(ed)) { _edje_lua_script_only_show(ed); @@ -310,14 +309,13 @@ _edje_object_efl_canvas_group_group_show(Eo *obj, Edje *ed) _edje_emit(ed, "show", NULL); } -EOLIAN static void -_edje_object_efl_canvas_group_group_hide(Eo *obj, Edje *ed) +static void +_edje_object_hide(Eo *obj, Edje *ed) { Eina_List *l; Edje *edg; - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); - if (!evas_object_visible_get(obj)) return; + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE); if (_edje_lua_script_only(ed)) { _edje_lua_script_only_hide(ed); @@ -328,6 +326,16 @@ _edje_object_efl_canvas_group_group_hide(Eo *obj, Edje *ed) _edje_emit(ed, "hide", NULL); } +EOLIAN static void +_edje_object_efl_gfx_visible_set(Eo *obj, Edje *ed, Eina_Bool vis) +{ + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; + + if (vis) _edje_object_show(obj, ed); + else _edje_object_hide(obj, ed); +} + EOLIAN static void _edje_object_efl_canvas_object_no_render_set(Eo *obj, Edje *ed, Eina_Bool enable) { diff --git a/src/lib/elementary/efl_ui_image.c b/src/lib/elementary/efl_ui_image.c index a74bce5731..262eab1572 100644 --- a/src/lib/elementary/efl_ui_image.c +++ b/src/lib/elementary/efl_ui_image.c @@ -587,28 +587,34 @@ _efl_ui_image_efl_canvas_group_group_resize(Eo *obj, Efl_Ui_Image_Data *sd, Evas _efl_ui_image_internal_sizing_eval(obj, sd); } -EOLIAN static void -_efl_ui_image_efl_canvas_group_group_show(Eo *obj, Efl_Ui_Image_Data *sd) +static void +_efl_ui_image_show(Eo *obj, Efl_Ui_Image_Data *sd) { sd->show = EINA_TRUE; if (sd->preload_status == EFL_UI_IMAGE_PRELOADING) return; - efl_canvas_group_show(efl_super(obj, MY_CLASS)); - - evas_object_show(sd->img); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_TRUE); + efl_gfx_visible_set(sd->img, EINA_TRUE); + ELM_SAFE_FREE(sd->prev_img, evas_object_del); +} +static void +_efl_ui_image_hide(Eo *obj, Efl_Ui_Image_Data *sd) +{ + sd->show = EINA_FALSE; + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE); + efl_gfx_visible_set(sd->img, EINA_FALSE); ELM_SAFE_FREE(sd->prev_img, evas_object_del); } EOLIAN static void -_efl_ui_image_efl_canvas_group_group_hide(Eo *obj, Efl_Ui_Image_Data *sd) +_efl_ui_image_efl_gfx_visible_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool vis) { - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; - sd->show = EINA_FALSE; - evas_object_hide(sd->img); - - ELM_SAFE_FREE(sd->prev_img, evas_object_del); + if (vis) _efl_ui_image_show(obj, sd); + else _efl_ui_image_hide(obj, sd); } EOLIAN static void diff --git a/src/lib/elementary/efl_ui_image.eo b/src/lib/elementary/efl_ui_image.eo index bc6d822ce3..42eedb73ab 100644 --- a/src/lib/elementary/efl_ui_image.eo +++ b/src/lib/elementary/efl_ui_image.eo @@ -123,6 +123,7 @@ class Efl.Ui.Image (Elm.Widget, Efl.Ui.Clickable, Efl.Ui.Draggable, Efl.File.file.get; Efl.File.mmap.set; Efl.Gfx.color.set; + Efl.Gfx.visible.set; Efl.Gfx.View.view_size.get; Efl.Image.Load.load_size.set; Efl.Image.Load.load_size.get; @@ -141,8 +142,6 @@ class Efl.Ui.Image (Elm.Widget, Efl.Ui.Clickable, Efl.Ui.Draggable, Edje.Object.size_min_calc; Edje.Object.calc_force; Efl.Canvas.Object.clip.set; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; diff --git a/src/lib/elementary/efl_ui_text.c b/src/lib/elementary/efl_ui_text.c index 59b3bb253a..b7e1306fdf 100644 --- a/src/lib/elementary/efl_ui_text.c +++ b/src/lib/elementary/efl_ui_text.c @@ -3489,19 +3489,15 @@ _efl_ui_text_efl_canvas_group_group_resize(Eo *obj, Efl_Ui_Text_Data *sd, Evas_C } EOLIAN static void -_efl_ui_text_efl_canvas_group_group_show(Eo *obj, Efl_Ui_Text_Data *sd EINA_UNUSED) +_efl_ui_text_efl_gfx_visible_set(Eo *obj, Efl_Ui_Text_Data *sd EINA_UNUSED, Eina_Bool vis) { - efl_canvas_group_show(efl_super(obj, MY_CLASS)); + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; - _update_selection_handler(obj); -} - -EOLIAN static void -_efl_ui_text_efl_canvas_group_group_hide(Eo *obj, Efl_Ui_Text_Data *sd) -{ - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); - - if (sd->have_selection) + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); + if (vis) + _update_selection_handler(obj); + else if (sd->have_selection) _hide_selection_handler(obj); } diff --git a/src/lib/elementary/efl_ui_text.eo b/src/lib/elementary/efl_ui_text.eo index 72b120d0fa..74b171fbb7 100644 --- a/src/lib/elementary/efl_ui_text.eo +++ b/src/lib/elementary/efl_ui_text.eo @@ -416,13 +416,12 @@ class Efl.Ui.Text (Elm.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable, class.constructor; Efl.Object.constructor; Efl.Object.destructor; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_member_add; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_resize; Efl.Canvas.Group.group_del; - Efl.Canvas.Group.group_show; - Efl.Canvas.Group.group_hide; Elm.Widget.activate; Elm.Widget.focus_direction_manager_is; Elm.Widget.theme_apply; diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 1f7281a2ab..24cf2995ea 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -2107,19 +2107,28 @@ _deferred_ecore_evas_free(void *data) _elm_win_deferred_free--; } -EOLIAN static void -_efl_ui_win_efl_canvas_group_group_show(Eo *obj, Efl_Ui_Win_Data *sd) +static void +_efl_ui_win_show(Eo *obj, Efl_Ui_Win_Data *sd) { - if (sd->modal_count) return; - const Eina_List *l; - Evas_Object *current; Eina_Bool do_eval = EINA_FALSE; + if (sd->modal_count) + { + /* FIXME FIXME FIXME + * Ugly code flow: legacy code had an early return in smart_show, ie. + * evas object show would be processed but smart object show would be + * aborted. This super call tries to simulate that. */ + efl_gfx_visible_set(efl_super(obj, EFL_CANVAS_GROUP_CLASS), EINA_TRUE); + return; + } + if (!evas_object_visible_get(obj)) do_eval = EINA_TRUE; - efl_canvas_group_show(efl_super(obj, MY_CLASS)); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_TRUE); if ((sd->modal) && (!evas_object_visible_get(obj))) { + const Eina_List *l; + Evas_Object *current; INCREMENT_MODALITY() } @@ -2150,19 +2159,26 @@ _efl_ui_win_efl_canvas_group_group_show(Eo *obj, Efl_Ui_Win_Data *sd) if (sd->shot.info) _shot_handle(sd); } -EOLIAN static void -_efl_ui_win_efl_canvas_group_group_hide(Eo *obj, Efl_Ui_Win_Data *sd) +static void +_efl_ui_win_hide(Eo *obj, Efl_Ui_Win_Data *sd) { - if (sd->modal_count) return; - const Eina_List *l; - Evas_Object *current; + if (sd->modal_count) + { + /* FIXME FIXME FIXME + * Ugly code flow: legacy code had an early return in smart_show, ie. + * evas object show would be processed but smart object show would be + * aborted. This super call tries to simulate that. */ + efl_gfx_visible_set(efl_super(obj, EFL_CANVAS_GROUP_CLASS), EINA_FALSE); + return; + } - if (evas_object_visible_get(obj)) - _elm_win_state_eval_queue(); - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); + _elm_win_state_eval_queue(); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE); if ((sd->modal) && (evas_object_visible_get(obj))) { + const Eina_List *l; + Evas_Object *current; DECREMENT_MODALITY() } @@ -2196,6 +2212,16 @@ _efl_ui_win_efl_canvas_group_group_hide(Eo *obj, Efl_Ui_Win_Data *sd) _elm_win_flush_cache_and_exit(obj); } +EOLIAN static void +_efl_ui_win_efl_gfx_visible_set(Eo *obj, Efl_Ui_Win_Data *sd, Eina_Bool vis) +{ + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; + + if (vis) _efl_ui_win_show(obj, sd); + else _efl_ui_win_hide(obj, sd); +} + EOLIAN static void _efl_ui_win_efl_input_interface_pointer_xy_get(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *sd, int *x, int *y) { @@ -2711,6 +2737,8 @@ _elm_win_obj_intercept_show(void *data, { ELM_WIN_DATA_GET(data, sd); + /* FIXME: this intercept needs to be implemented in proper EO */ + // this is called to make sure all smart containers have calculated their // sizes BEFORE we show the window to make sure it initially appears at // our desired size (ie min size is known first) diff --git a/src/lib/elementary/efl_ui_win.eo b/src/lib/elementary/efl_ui_win.eo index 4118026aca..e53798255a 100644 --- a/src/lib/elementary/efl_ui_win.eo +++ b/src/lib/elementary/efl_ui_win.eo @@ -809,8 +809,7 @@ class Efl.Ui.Win (Elm.Widget, Efl.Canvas, Elm.Interface.Atspi.Window, class.constructor; Efl.Object.constructor; Efl.Object.finalize; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; diff --git a/src/lib/elementary/elc_combobox.c b/src/lib/elementary/elc_combobox.c index e73fea8848..2af16e2ba6 100644 --- a/src/lib/elementary/elc_combobox.c +++ b/src/lib/elementary/elc_combobox.c @@ -285,17 +285,20 @@ _elm_combobox_efl_canvas_group_group_del(Eo *obj, Elm_Combobox_Data *sd) } EOLIAN static void -_elm_combobox_efl_canvas_group_group_show(Eo *obj, Elm_Combobox_Data *sd) +_elm_combobox_efl_gfx_visible_set(Eo *obj, Elm_Combobox_Data *sd, Eina_Bool vis) { - efl_canvas_group_show(efl_super(obj, MY_CLASS)); - if (sd->expanded) evas_object_show(sd->hover); -} + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; -EOLIAN static void -_elm_combobox_efl_canvas_group_group_hide(Eo *obj, Elm_Combobox_Data *sd) -{ - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); - if (sd->hover) evas_object_hide(sd->hover); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); + if (vis) + { + if (sd->expanded) evas_object_show(sd->hover); + } + else + { + if (sd->hover) evas_object_hide(sd->hover); + } } EOLIAN static Eina_Bool diff --git a/src/lib/elementary/elc_hoversel.c b/src/lib/elementary/elc_hoversel.c index fb4b4dddbd..6c5130c237 100644 --- a/src/lib/elementary/elc_hoversel.c +++ b/src/lib/elementary/elc_hoversel.c @@ -579,17 +579,13 @@ _elm_hoversel_efl_canvas_group_group_del(Eo *obj, Elm_Hoversel_Data *sd) } EOLIAN static void -_elm_hoversel_efl_canvas_group_group_show(Eo *obj, Elm_Hoversel_Data *sd) +_elm_hoversel_efl_gfx_visible_set(Eo *obj, Elm_Hoversel_Data *sd, Eina_Bool vis) { - efl_canvas_group_show(efl_super(obj, MY_CLASS)); - evas_object_show(sd->hover); -} + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; -EOLIAN static void -_elm_hoversel_efl_canvas_group_group_hide(Eo *obj, Elm_Hoversel_Data *sd) -{ - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); - evas_object_hide(sd->hover); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); + efl_gfx_visible_set(sd->hover, vis); } EOLIAN static void diff --git a/src/lib/elementary/elc_naviframe.c b/src/lib/elementary/elc_naviframe.c index 8b1fe8cd5c..86e65cc983 100644 --- a/src/lib/elementary/elc_naviframe.c +++ b/src/lib/elementary/elc_naviframe.c @@ -1478,10 +1478,16 @@ _elm_naviframe_efl_canvas_group_group_del(Eo *obj, Elm_Naviframe_Data *sd) //Show only the top item view EOLIAN static void -_elm_naviframe_efl_canvas_group_group_show(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED) +_elm_naviframe_efl_gfx_visible_set(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED, Eina_Bool vis) { Elm_Object_Item *eo_top; + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; + + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); + if (!vis) return; + eo_top = elm_naviframe_top_item_get(obj); ELM_NAVIFRAME_ITEM_DATA_GET(eo_top, top); diff --git a/src/lib/elementary/elm_combobox.eo b/src/lib/elementary/elm_combobox.eo index 2a42f7fced..66f60a6f47 100644 --- a/src/lib/elementary/elm_combobox.eo +++ b/src/lib/elementary/elm_combobox.eo @@ -36,8 +36,7 @@ class Elm.Combobox (Elm.Button, Efl.Ui.Selectable, implements { class.constructor; Efl.Object.constructor; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; Efl.Canvas.Group.group_resize; diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c index 1c24e40048..0eaf67f484 100644 --- a/src/lib/elementary/elm_entry.c +++ b/src/lib/elementary/elm_entry.c @@ -3936,21 +3936,18 @@ _elm_entry_efl_canvas_group_group_resize(Eo *obj, Elm_Entry_Data *sd, Evas_Coord } EOLIAN static void -_elm_entry_efl_canvas_group_group_show(Eo *obj, Elm_Entry_Data *sd) +_elm_entry_efl_gfx_visible_set(Eo *obj, Elm_Entry_Data *sd, Eina_Bool vis) { - efl_canvas_group_show(efl_super(obj, MY_CLASS)); + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; + + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); if (sd->have_selection) - _update_selection_handler(obj); -} - -EOLIAN static void -_elm_entry_efl_canvas_group_group_hide(Eo *obj, Elm_Entry_Data *sd) -{ - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); - - if (sd->have_selection) - _hide_selection_handler(obj); + { + if (vis) _update_selection_handler(obj); + else _hide_selection_handler(obj); + } } EOLIAN static void diff --git a/src/lib/elementary/elm_entry.eo b/src/lib/elementary/elm_entry.eo index 1fb9395997..c4dd01fea2 100644 --- a/src/lib/elementary/elm_entry.eo +++ b/src/lib/elementary/elm_entry.eo @@ -939,13 +939,12 @@ class Elm.Entry (Elm.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable, implements { class.constructor; Efl.Object.constructor; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_member_add; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_resize; Efl.Canvas.Group.group_del; - Efl.Canvas.Group.group_show; - Efl.Canvas.Group.group_hide; Elm.Widget.activate; Elm.Widget.focus_direction_manager_is; Elm.Widget.theme_apply; diff --git a/src/lib/elementary/elm_hover.c b/src/lib/elementary/elm_hover.c index e058f6db53..2b8b6d5840 100644 --- a/src/lib/elementary/elm_hover.c +++ b/src/lib/elementary/elm_hover.c @@ -632,25 +632,22 @@ _elm_hover_efl_canvas_group_group_resize(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSE } EOLIAN static void -_elm_hover_efl_canvas_group_group_show(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED) +_elm_hover_efl_gfx_visible_set(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED, Eina_Bool vis) { - efl_canvas_group_show(efl_super(obj, MY_CLASS)); + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; - _hov_show_do(obj); -} + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); -EOLIAN static void -_elm_hover_efl_canvas_group_group_hide(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED) -{ - const char *dismissstr; + if (vis) _hov_show_do(obj); + else + { + // for backward compatibility + const char *dismissstr = elm_layout_data_get(obj, "dismiss"); - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); - - // for backward compatibility - dismissstr = elm_layout_data_get(obj, "dismiss"); - - if (!dismissstr || strcmp(dismissstr, "on")) - _hide_signals_emit(obj); + if (!eina_streq(dismissstr, "on")) + _hide_signals_emit(obj); + } } EOLIAN static const Elm_Layout_Part_Alias_Description* diff --git a/src/lib/elementary/elm_hover.eo b/src/lib/elementary/elm_hover.eo index 18ad00285d..79e8e2e03e 100644 --- a/src/lib/elementary/elm_hover.eo +++ b/src/lib/elementary/elm_hover.eo @@ -60,9 +60,8 @@ class Elm.Hover (Elm.Layout, Efl.Ui.Clickable, Elm.Interface.Atspi_Widget_Action implements { class.constructor; Efl.Object.constructor; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_del; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_resize; diff --git a/src/lib/elementary/elm_hoversel.eo b/src/lib/elementary/elm_hoversel.eo index 12463c19b3..e117706170 100644 --- a/src/lib/elementary/elm_hoversel.eo +++ b/src/lib/elementary/elm_hoversel.eo @@ -92,8 +92,7 @@ class Elm.Hoversel (Elm.Button, Efl.Ui.Selectable, class.constructor; Efl.Object.constructor; Efl.Object.destructor; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; Elm.Widget.widget_parent.set; diff --git a/src/lib/elementary/elm_interface_scrollable.c b/src/lib/elementary/elm_interface_scrollable.c index f43bc0a0db..ddbf080c58 100644 --- a/src/lib/elementary/elm_interface_scrollable.c +++ b/src/lib/elementary/elm_interface_scrollable.c @@ -121,21 +121,13 @@ _elm_pan_efl_canvas_group_group_resize(Eo *obj EINA_UNUSED, Elm_Pan_Smart_Data * } EOLIAN static void -_elm_pan_efl_canvas_group_group_show(Eo *obj, Elm_Pan_Smart_Data *psd) +_elm_pan_efl_gfx_visible_set(Eo *obj, Elm_Pan_Smart_Data *psd, Eina_Bool vis) { - efl_canvas_group_show(efl_super(obj, MY_PAN_CLASS)); + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; - if (psd->content) - evas_object_show(psd->content); -} - -EOLIAN static void -_elm_pan_efl_canvas_group_group_hide(Eo *obj, Elm_Pan_Smart_Data *psd) -{ - efl_canvas_group_hide(efl_super(obj, MY_PAN_CLASS)); - - if (psd->content) - evas_object_hide(psd->content); + efl_gfx_visible_set(efl_super(obj, MY_PAN_CLASS), vis); + if (psd->content) efl_gfx_visible_set(psd->content, vis); } EOLIAN static void diff --git a/src/lib/elementary/elm_mapbuf.c b/src/lib/elementary/elm_mapbuf.c index cff0c92f7f..97d0f9df4f 100644 --- a/src/lib/elementary/elm_mapbuf.c +++ b/src/lib/elementary/elm_mapbuf.c @@ -176,18 +176,12 @@ _elm_mapbuf_efl_canvas_group_group_resize(Eo *obj, Elm_Mapbuf_Data *sd, Evas_Coo } EOLIAN static void -_elm_mapbuf_efl_canvas_group_group_show(Eo *obj, Elm_Mapbuf_Data *sd) +_elm_mapbuf_efl_gfx_visible_set(Eo *obj, Elm_Mapbuf_Data *sd, Eina_Bool vis) { - efl_canvas_group_show(efl_super(obj, MY_CLASS)); + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; - _mapbuf_auto_eval(obj, sd); - _configure(obj); -} - -EOLIAN static void -_elm_mapbuf_efl_canvas_group_group_hide(Eo *obj, Elm_Mapbuf_Data *sd) -{ - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); _mapbuf_auto_eval(obj, sd); _configure(obj); diff --git a/src/lib/elementary/elm_mapbuf.eo b/src/lib/elementary/elm_mapbuf.eo index 18935acc88..be1c3c03b0 100644 --- a/src/lib/elementary/elm_mapbuf.eo +++ b/src/lib/elementary/elm_mapbuf.eo @@ -129,8 +129,7 @@ class Elm.Mapbuf (Elm.Widget, Efl.Container, Efl.Part) implements { class.constructor; Efl.Object.constructor; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; diff --git a/src/lib/elementary/elm_menu.c b/src/lib/elementary/elm_menu.c index 86822e3333..a58600050e 100644 --- a/src/lib/elementary/elm_menu.c +++ b/src/lib/elementary/elm_menu.c @@ -550,9 +550,12 @@ _unblock_menu(void *_sd, const Efl_Event *event EINA_UNUSED) } EOLIAN static void -_elm_menu_efl_canvas_group_group_show(Eo *obj EINA_UNUSED, Elm_Menu_Data *sd) +_elm_menu_efl_gfx_visible_set(Eo *obj EINA_UNUSED, Elm_Menu_Data *sd, Eina_Bool vis) { - evas_object_show(sd->hv); + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; + + if (vis) efl_gfx_visible_set(sd->hv, EINA_TRUE); } static void diff --git a/src/lib/elementary/elm_menu.eo b/src/lib/elementary/elm_menu.eo index d111c11779..d0777bf861 100644 --- a/src/lib/elementary/elm_menu.eo +++ b/src/lib/elementary/elm_menu.eo @@ -72,7 +72,7 @@ class Elm.Menu (Elm.Widget, Efl.Ui.Clickable, Elm.Interface.Atspi.Selection) class.constructor; Efl.Object.constructor; Efl.Object.destructor; - Efl.Canvas.Group.group_show; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; Elm.Widget.widget_parent; diff --git a/src/lib/elementary/elm_naviframe.eo b/src/lib/elementary/elm_naviframe.eo index 1927ea710c..01a1f95721 100644 --- a/src/lib/elementary/elm_naviframe.eo +++ b/src/lib/elementary/elm_naviframe.eo @@ -142,8 +142,8 @@ class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action) implements { class.constructor; Efl.Object.constructor; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_del; - Efl.Canvas.Group.group_show; Efl.Canvas.Group.group_add; Elm.Widget.focus_direction; Elm.Widget.focus_next_manager_is; diff --git a/src/lib/elementary/elm_notify.c b/src/lib/elementary/elm_notify.c index 2a24a5a84d..40c8f0ad61 100644 --- a/src/lib/elementary/elm_notify.c +++ b/src/lib/elementary/elm_notify.c @@ -281,12 +281,12 @@ _timer_init(Evas_Object *obj, sd->timer = NULL; } -EOLIAN static void -_elm_notify_efl_canvas_group_group_show(Eo *obj, Elm_Notify_Data *sd) +static void +_elm_notify_show(Eo *obj, Elm_Notify_Data *sd) { sd->had_hidden = EINA_FALSE; sd->in_timeout = EINA_FALSE; - efl_canvas_group_show(efl_super(obj, MY_CLASS)); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_TRUE); evas_object_show(sd->notify); if (!sd->allow_events) evas_object_show(sd->block_events); @@ -294,8 +294,8 @@ _elm_notify_efl_canvas_group_group_show(Eo *obj, Elm_Notify_Data *sd) elm_object_focus_set(obj, EINA_TRUE); } -EOLIAN static void -_elm_notify_efl_canvas_group_group_hide(Eo *obj, Elm_Notify_Data *sd) +static void +_elm_notify_hide(Eo *obj EINA_UNUSED, Elm_Notify_Data *sd) { const char *hide_signal; @@ -303,20 +303,30 @@ _elm_notify_efl_canvas_group_group_hide(Eo *obj, Elm_Notify_Data *sd) return; hide_signal = edje_object_data_get(sd->notify, "hide_finished_signal"); - if ((hide_signal) && (!strcmp(hide_signal, "on"))) + if (eina_streq(hide_signal, "on")) { if (!sd->in_timeout) edje_object_signal_emit(sd->notify, "elm,state,hide", "elm"); } else //for backport supporting: edc without emitting hide finished signal { - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE); evas_object_hide(sd->notify); if (sd->allow_events) evas_object_hide(sd->block_events); } ELM_SAFE_FREE(sd->timer, ecore_timer_del); } +EOLIAN static void +_elm_notify_efl_gfx_visible_set(Eo *obj, Elm_Notify_Data *sd, Eina_Bool vis) +{ + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; + + if (vis) _elm_notify_show(obj, sd); + else _elm_notify_hide(obj, sd); +} + static void _parent_del_cb(void *data, Evas *e EINA_UNUSED, @@ -447,7 +457,7 @@ _hide_finished_cb(void *data, sd->had_hidden = EINA_TRUE; evas_object_hide(sd->notify); if (!sd->allow_events) evas_object_hide(sd->block_events); - efl_canvas_group_hide(efl_super(data, MY_CLASS)); + efl_gfx_visible_set(efl_super(data, MY_CLASS), EINA_FALSE); efl_event_callback_legacy_call(data, ELM_NOTIFY_EVENT_DISMISSED, NULL); } diff --git a/src/lib/elementary/elm_notify.eo b/src/lib/elementary/elm_notify.eo index 253f449b8e..84790ab711 100644 --- a/src/lib/elementary/elm_notify.eo +++ b/src/lib/elementary/elm_notify.eo @@ -79,8 +79,7 @@ class Elm.Notify (Elm.Widget, Efl.Container, Efl.Part) implements { class.constructor; Efl.Object.constructor; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; diff --git a/src/lib/elementary/elm_pan.eo b/src/lib/elementary/elm_pan.eo index 4fa167edcf..dcb7cb9573 100644 --- a/src/lib/elementary/elm_pan.eo +++ b/src/lib/elementary/elm_pan.eo @@ -43,8 +43,7 @@ class Elm.Pan (Efl.Canvas.Group.Clipped) implements { Efl.Object.constructor; class.constructor; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; diff --git a/src/lib/elementary/elm_thumb.c b/src/lib/elementary/elm_thumb.c index 491407aa40..09ce80bf56 100644 --- a/src/lib/elementary/elm_thumb.c +++ b/src/lib/elementary/elm_thumb.c @@ -453,20 +453,21 @@ _thumb_show(Elm_Thumb_Data *sd) } EOLIAN static void -_elm_thumb_efl_canvas_group_group_show(Eo *obj, Elm_Thumb_Data *sd) +_elm_thumb_efl_gfx_visible_set(Eo *obj, Elm_Thumb_Data *sd, Eina_Bool vis) { - efl_canvas_group_show(efl_super(obj, MY_CLASS)); + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; - _thumb_show(sd); -} + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); + + if (vis) + { + _thumb_show(sd); + return; + } -EOLIAN static void -_elm_thumb_efl_canvas_group_group_hide(Eo *obj, Elm_Thumb_Data *sd) -{ ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); - efl_canvas_group_hide(efl_super(obj, MY_CLASS)); - if (sd->thumb.request) { ethumb_client_thumb_async_cancel(_elm_ethumb_client, sd->thumb.request); diff --git a/src/lib/elementary/elm_thumb.eo b/src/lib/elementary/elm_thumb.eo index 720bb844ab..189e449982 100644 --- a/src/lib/elementary/elm_thumb.eo +++ b/src/lib/elementary/elm_thumb.eo @@ -10,10 +10,9 @@ class Elm.Thumb (Elm.Layout, Efl.File, Efl.Ui.Clickable, Efl.Object.constructor; Efl.File.file.set; Efl.File.file.get; - Efl.Canvas.Group.group_hide; + Efl.Gfx.visible.set; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; - Efl.Canvas.Group.group_show; Efl.Ui.Draggable.drag_target.set; Efl.Ui.Draggable.drag_target.get; } diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c index 78150863ac..82729f8dcb 100644 --- a/src/lib/elementary/elm_widget.c +++ b/src/lib/elementary/elm_widget.c @@ -519,43 +519,37 @@ _elm_widget_efl_canvas_group_group_resize(Eo *obj EINA_UNUSED, Elm_Widget_Smart_ } EOLIAN static void -_elm_widget_efl_canvas_group_group_show(Eo *obj, Elm_Widget_Smart_Data *_pd) +_elm_widget_efl_gfx_visible_set(Eo *obj, Elm_Widget_Smart_Data *pd, Eina_Bool vis) { Eina_Iterator *it; Evas_Object *o; + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; + + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); + it = evas_object_smart_iterator_new(obj); EINA_ITERATOR_FOREACH(it, o) { if (evas_object_data_get(o, "_elm_leaveme")) continue; - evas_object_show(o); + efl_gfx_visible_set(o, vis); } eina_iterator_free(it); - if (_elm_config->atspi_mode) + if (!_elm_config->atspi_mode || pd->on_destroy) + return; + + if (vis) { elm_interface_atspi_accessible_added(obj); - if (!_pd->on_destroy && _elm_widget_onscreen_is(obj)) - elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_TRUE); + if (_elm_widget_onscreen_is(obj)) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_TRUE); } -} - -EOLIAN static void -_elm_widget_efl_canvas_group_group_hide(Eo *obj, Elm_Widget_Smart_Data *_pd) -{ - Eina_Iterator *it; - Evas_Object *o; - - it = evas_object_smart_iterator_new(obj); - EINA_ITERATOR_FOREACH(it, o) + else { - if (evas_object_data_get(o, "_elm_leaveme")) continue; - evas_object_hide(o); + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_FALSE); } - eina_iterator_free(it); - - if (_elm_config->atspi_mode && !_pd->on_destroy) - elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_FALSE); } EOLIAN static void diff --git a/src/lib/elementary/elm_widget.eo b/src/lib/elementary/elm_widget.eo index 1bb684fa12..1b3ca7d168 100644 --- a/src/lib/elementary/elm_widget.eo +++ b/src/lib/elementary/elm_widget.eo @@ -848,11 +848,10 @@ abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, Elm.Inter Efl.Object.dbg_info_get; Efl.Object.provider_find; Efl.Gfx.color.set; + Efl.Gfx.visible.set; Efl.Canvas.Object.clip.set; Efl.Canvas.Object.no_render.set; - Efl.Canvas.Group.group_hide; Efl.Canvas.Group.group_calculate; - Efl.Canvas.Group.group_show; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_member_del; Efl.Canvas.Group.group_add; diff --git a/src/lib/emotion/efl_canvas_video.eo b/src/lib/emotion/efl_canvas_video.eo index 0e554adb79..4851f2b190 100644 --- a/src/lib/emotion/efl_canvas_video.eo +++ b/src/lib/emotion/efl_canvas_video.eo @@ -52,13 +52,12 @@ class Efl.Canvas.Video (Efl.Canvas.Group, Efl.File, Efl.Player, Efl.Image, Efl.I implements { Efl.Object.constructor; Efl.Gfx.color.set; + Efl.Gfx.visible.set; Efl.Canvas.Object.clip.set; Efl.Canvas.Group.group_add; Efl.Canvas.Group.group_del; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_resize; - Efl.Canvas.Group.group_show; - Efl.Canvas.Group.group_hide; Efl.File.file.set; Efl.File.file.get; Efl.Player.play.set; diff --git a/src/lib/emotion/emotion_smart.c b/src/lib/emotion/emotion_smart.c index 36228ca143..e702c1a9eb 100644 --- a/src/lib/emotion/emotion_smart.c +++ b/src/lib/emotion/emotion_smart.c @@ -1946,23 +1946,24 @@ _efl_canvas_video_efl_canvas_group_group_resize(Evas_Object *obj, Efl_Canvas_Vid } EOLIAN static void -_efl_canvas_video_efl_canvas_group_group_show(Evas_Object *obj EINA_UNUSED, Efl_Canvas_Video_Data *sd) +_efl_canvas_video_efl_gfx_visible_set(Evas_Object *obj EINA_UNUSED, Efl_Canvas_Video_Data *sd, Eina_Bool vis) { - int a; + if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; - evas_object_show(sd->obj); - if (sd->crop.clipper) evas_object_show(sd->crop.clipper); + efl_gfx_visible_set(efl_super(obj, MY_CLASS), vis); + efl_gfx_visible_set(sd->obj, vis); + efl_gfx_visible_set(sd->crop.clipper, vis); - evas_object_color_get(sd->bg, NULL, NULL, NULL, &a); - if (a > 0) evas_object_show(sd->bg); -} + if (vis) + { + int a; -EOLIAN static void -_efl_canvas_video_efl_canvas_group_group_hide(Evas_Object *obj EINA_UNUSED, Efl_Canvas_Video_Data *sd) -{ - evas_object_hide(sd->obj); - if (sd->crop.clipper) evas_object_hide(sd->crop.clipper); - evas_object_hide(sd->bg); + evas_object_color_get(sd->bg, NULL, NULL, NULL, &a); + if (a > 0) efl_gfx_visible_set(sd->bg, EINA_TRUE); + } + else + efl_gfx_visible_set(sd->bg, EINA_FALSE); } EOLIAN static void diff --git a/src/lib/evas/Evas_Legacy.h b/src/lib/evas/Evas_Legacy.h index 937d08f74e..7c67cfc4f1 100644 --- a/src/lib/evas/Evas_Legacy.h +++ b/src/lib/evas/Evas_Legacy.h @@ -2505,8 +2505,7 @@ typedef enum _Evas_Object_Intercept_Cb_Type Evas_Object_Intercept_Cb_Type; enum _Evas_Object_Intercept_Cb_Type { - EVAS_OBJECT_INTERCEPT_CB_SHOW, - EVAS_OBJECT_INTERCEPT_CB_HIDE, + EVAS_OBJECT_INTERCEPT_CB_VISIBLE, EVAS_OBJECT_INTERCEPT_CB_MOVE, EVAS_OBJECT_INTERCEPT_CB_RESIZE, EVAS_OBJECT_INTERCEPT_CB_RAISE, diff --git a/src/lib/evas/canvas/efl_canvas_group.eo b/src/lib/evas/canvas/efl_canvas_group.eo index d7181752d8..2c55ff7aac 100644 --- a/src/lib/evas/canvas/efl_canvas_group.eo +++ b/src/lib/evas/canvas/efl_canvas_group.eo @@ -78,10 +78,6 @@ class Efl.Canvas.Group (Efl.Canvas.Object) return: free(own(iterator), eina_iterator_free); legacy: evas_object_smart_iterator_new; } - group_show { - [[No description supplied by the EAPI.]] - legacy: null; - } group_move { [[No description supplied by the EAPI.]] legacy: null; @@ -90,10 +86,6 @@ class Efl.Canvas.Group (Efl.Canvas.Object) @in y: Evas.Coord; } } - group_hide { - [[No description supplied by the EAPI.]] - legacy: null; - } group_add { [[Instantiates a new smart object described by $s. diff --git a/src/lib/evas/canvas/efl_canvas_group_clipped.eo b/src/lib/evas/canvas/efl_canvas_group_clipped.eo index ce716aa3c0..f1616de813 100644 --- a/src/lib/evas/canvas/efl_canvas_group_clipped.eo +++ b/src/lib/evas/canvas/efl_canvas_group_clipped.eo @@ -4,10 +4,9 @@ abstract Efl.Canvas.Group.Clipped (Efl.Canvas.Group) data: Evas_Object_Smart_Clipped_Data; implements { Efl.Gfx.color.set; + Efl.Gfx.visible.set; Efl.Canvas.Object.clip.set; Efl.Canvas.Object.no_render.set; - Efl.Canvas.Group.group_hide; - Efl.Canvas.Group.group_show; Efl.Canvas.Group.group_move; Efl.Canvas.Group.group_member_del; Efl.Canvas.Group.group_add; diff --git a/src/lib/evas/canvas/evas_object_intercept.c b/src/lib/evas/canvas/evas_object_intercept.c index 2f286057c8..d5fa3efcbf 100644 --- a/src/lib/evas/canvas/evas_object_intercept.c +++ b/src/lib/evas/canvas/evas_object_intercept.c @@ -101,15 +101,14 @@ _evas_object_intercept_call(Evas_Object *eo_obj, Evas_Object_Intercept_Cb_Type c switch (cb_type) { - case EVAS_OBJECT_INTERCEPT_CB_SHOW: - if (obj->cur->visible) return 1; + case EVAS_OBJECT_INTERCEPT_CB_VISIBLE: + va_start(args, internal); + i = !!va_arg(args, int); + va_end(args); + if (i == obj->cur->visible) return 1; if (!obj->interceptors) return 0; - return evas_object_intercept_call_show(eo_obj, obj); - - case EVAS_OBJECT_INTERCEPT_CB_HIDE: - if (!obj->cur->visible) return 1; - if (!obj->interceptors) return 0; - return evas_object_intercept_call_hide(eo_obj, obj); + if (i) return evas_object_intercept_call_show(eo_obj, obj); + else return evas_object_intercept_call_hide(eo_obj, obj); case EVAS_OBJECT_INTERCEPT_CB_MOVE: if (!obj->interceptors) return 0; diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index fe7ea0e43a..d25496345a 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -11,11 +11,6 @@ EVAS_MEMPOOL(_mp_sh); #define MY_CLASS_NAME "Evas_Object" -static void -_show(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj); -static void -_hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj); - static Eina_Inlist * get_layer_objects(Evas_Layer *l) { @@ -1313,23 +1308,12 @@ evas_object_visible_get(const Evas_Object *obj) return efl_gfx_visible_get((Evas_Object *)obj); } -static void -_efl_canvas_object_efl_gfx_visible_set(Eo *eo_obj, - Evas_Object_Protected_Data *obj, - Eina_Bool visible) -{ - evas_object_async_block(obj); - if (visible) _show(eo_obj, obj); - else _hide(eo_obj, obj); -} - static void _show(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) { - if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_SHOW, 1)) return; - if (obj->is_smart) + if (obj->is_smart && obj->smart.smart && obj->smart.smart->smart_class->show) { - efl_canvas_group_show(eo_obj); + obj->smart.smart->smart_class->show(eo_obj); } EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) { @@ -1367,12 +1351,10 @@ _show(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) static void _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) { - if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_HIDE, 1)) return; - if (obj->is_smart) + if (obj->is_smart && obj->smart.smart && obj->smart.smart->smart_class->hide) { - efl_canvas_group_hide(eo_obj); + obj->smart.smart->smart_class->hide(eo_obj); } - EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) { state_write->visible = 0; @@ -1478,6 +1460,17 @@ _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) evas_object_inform_call_hide(eo_obj); } +EOLIAN static void +_efl_canvas_object_efl_gfx_visible_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, + Eina_Bool vis) +{ + if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 1, vis)) + return; + + if (vis) _show(eo_obj, obj); + else _hide(eo_obj, obj); +} + static Eina_Bool _efl_canvas_object_efl_gfx_visible_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj) diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 6008f9380f..17b6d1789f 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -629,26 +629,6 @@ _efl_canvas_group_group_move(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED, Evas_Co if (s && s->smart_class->move) s->smart_class->move(eo_obj, x, y); } -EOLIAN static void -_efl_canvas_group_group_show(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED) -{ - // If this function is reached, so we do nothing except trying to call - // the function of the legacy smart class. - Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); - Evas_Smart *s = obj->smart.smart; - if (s && s->smart_class->show) s->smart_class->show(eo_obj); -} - -EOLIAN static void -_efl_canvas_group_group_hide(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED) -{ - // If this function is reached, so we do nothing except trying to call - // the function of the legacy smart class. - Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); - Evas_Smart *s = obj->smart.smart; - if (s && s->smart_class->hide) s->smart_class->hide(eo_obj); -} - EOLIAN static void _efl_canvas_group_efl_canvas_object_no_render_set(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED, Eina_Bool enable) { diff --git a/src/lib/evas/canvas/evas_object_smart_clipped.c b/src/lib/evas/canvas/evas_object_smart_clipped.c index 545db3a16e..f6582355b7 100644 --- a/src/lib/evas/canvas/evas_object_smart_clipped.c +++ b/src/lib/evas/canvas/evas_object_smart_clipped.c @@ -120,30 +120,30 @@ _efl_canvas_group_clipped_efl_canvas_group_group_move(Eo *eo_obj, Evas_Object_Sm } static void -evas_object_smart_clipped_group_show(Evas_Object *eo_obj) +evas_object_smart_clipped_smart_show(Evas_Object *eo_obj) { CSO_DATA_GET_OR_RETURN(eo_obj, cso); if (evas_object_clipees_has(cso->clipper)) evas_object_show(cso->clipper); /* just show if clipper being used */ } -EOLIAN static void -_efl_canvas_group_clipped_efl_canvas_group_group_show(Eo *eo_obj, Evas_Object_Smart_Clipped_Data *obj EINA_UNUSED) -{ - evas_object_smart_clipped_group_show(eo_obj); -} - static void -evas_object_smart_clipped_group_hide(Evas_Object *eo_obj) +evas_object_smart_clipped_smart_hide(Evas_Object *eo_obj) { CSO_DATA_GET_OR_RETURN(eo_obj, cso); evas_object_hide(cso->clipper); } EOLIAN static void -_efl_canvas_group_clipped_efl_canvas_group_group_hide(Eo *eo_obj, Evas_Object_Smart_Clipped_Data *obj EINA_UNUSED) +_efl_canvas_group_clipped_efl_gfx_visible_set(Eo *eo_obj, Evas_Object_Smart_Clipped_Data *obj EINA_UNUSED, Eina_Bool vis) { - evas_object_smart_clipped_group_hide(eo_obj); + if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis)) + return; + + efl_gfx_visible_set(efl_super(eo_obj, MY_CLASS), vis); + + if (vis) evas_object_smart_clipped_smart_show(eo_obj); + else evas_object_smart_clipped_smart_hide(eo_obj); } EOLIAN static void @@ -244,8 +244,8 @@ evas_object_smart_clipped_smart_set(Evas_Smart_Class *sc) sc->add = evas_object_smart_clipped_smart_add; sc->del = evas_object_smart_clipped_smart_del; sc->move = evas_object_smart_clipped_smart_move; - sc->show = evas_object_smart_clipped_group_show; - sc->hide = evas_object_smart_clipped_group_hide; + sc->show = evas_object_smart_clipped_smart_show; + sc->hide = evas_object_smart_clipped_smart_hide; sc->color_set = evas_object_smart_clipped_smart_color_set; sc->clip_set = evas_object_smart_clipped_smart_clip_set; sc->clip_unset = evas_object_smart_clipped_smart_clip_unset;