From dab4d8d8a446f98b4fa2f63e5b948b8f629e460d Mon Sep 17 00:00:00 2001 From: Jaeun Choi Date: Mon, 21 Jan 2019 18:55:10 +0900 Subject: [PATCH] elm_panel: show/hide panel according to hidden status when panel becomes non-scrollable by elm_panel_scrollable_set() function, the panel needs to be shown/hidden according to the hidden status. this patch implements it. --- data/elementary/themes/edc/elm/panel.edc | 55 ++++++++++++++++++++++++ src/lib/elementary/elm_panel.c | 14 ++++++ 2 files changed, 69 insertions(+) diff --git a/data/elementary/themes/edc/elm/panel.edc b/data/elementary/themes/edc/elm/panel.edc index 02dbdadf8f..3f34c7c52d 100644 --- a/data/elementary/themes/edc/elm/panel.edc +++ b/data/elementary/themes/edc/elm/panel.edc @@ -541,6 +541,21 @@ group { name: "elm/panel/left/default"; set_state(PART:"icn", "hidden", 0.0); } } + program { + signal: "elm,action,show,no_animate"; source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.event"; + target: "base"; + } + program { + signal: "elm,action,show,no_animate"; source: "elm"; + script { + if (get_int(is_rtl) == 0) + set_state(PART:"icn", "default", 0.0); + else + set_state(PART:"icn", "hidden", 0.0); + } + } program { signal: "edje,state,rtl"; source: "edje"; @@ -611,6 +626,46 @@ group { name: "elm/panel/left/default"; transition: ACCELERATE 0.3; target: "base"; } + program { + signal: "elm,action,hide,no_animate"; source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "elm.swallow.event"; + } + program { + signal: "elm,action,hide,no_animate"; source: "elm"; + script { + if (get_int(is_rtl) == 0) + set_state(PART:"icn", "hidden", 0.0); + else + set_state(PART:"icn", "default", 0.0); + } + } + program { name: "hide1_no_animate"; + signal: "elm,action,hide,no_animate"; source: "elm"; + script { + new x, y, w, h; + if (get_int(is_rtl) == 0) + { + custom_state(PART:"base", "default", 0.0); + set_state_val(PART:"base", STATE_REL1, -1.0, 0.0); + get_geometry(PART:"elm.swallow.event", x, y, w, h); + set_state_val(PART:"base", STATE_REL1_OFFSET, w, 0); + } + else + { + custom_state(PART:"base", "default", 0.0); + set_state_val(PART:"base", STATE_REL1, -1.0, 0.0); + set_state_val(PART:"base", STATE_REL2, -2.0, 1.0); + get_geometry(PART:"elm.swallow.event", x, y, w, h); + set_state_val(PART:"base", STATE_REL2_OFFSET, -w, 0); + } + } + after: "hide2_no_animate"; + } + program { name: "hide2_no_animate"; + action: STATE_SET "custom" 0.0; + target: "base"; + } program { signal: "elm,action,focus_highlight,show"; source: "elm"; action: STATE_SET "focused" 0.0; diff --git a/src/lib/elementary/elm_panel.c b/src/lib/elementary/elm_panel.c index 8e48395f2c..ac2fc2415a 100644 --- a/src/lib/elementary/elm_panel.c +++ b/src/lib/elementary/elm_panel.c @@ -1442,6 +1442,20 @@ _elm_panel_scrollable_set(Eo *obj, Elm_Panel_Data *sd, Eina_Bool scrollable) _orient_set_do(obj); + if (sd->hidden) + { + elm_layout_signal_emit(obj, "elm,action,hide,no_animate", "elm"); + evas_object_repeat_events_set(obj, EINA_TRUE); + } + else + { + elm_layout_signal_emit(obj, "elm,action,show,no_animate", "elm"); + evas_object_repeat_events_set(obj, EINA_FALSE); + } + + elm_widget_tree_unfocusable_set(obj, sd->hidden); + edje_object_message_signal_process(sd->panel_edje); + evas_object_hide(sd->scr_ly); elm_layout_content_unset(sd->scr_ly, "elm.swallow.content"); efl_content_set(efl_part(efl_super(obj, MY_CLASS), "elm.swallow.content"), sd->bx);