diff --git a/config/default/base.src.in b/config/default/base.src.in index b7270b328a..bd2ec066c6 100644 --- a/config/default/base.src.in +++ b/config/default/base.src.in @@ -98,6 +98,7 @@ group "Elm_Config" struct { value "naviframe_prev_btn_auto_pushed" uchar: 1; value "popup_horizontal_align" double: 0.5; value "popup_vertical_align" double: 0.5; + value "popup_scrollable" uchar: 0; value "spinner_min_max_filter_enable" uchar: 0; group "color_palette" list { group "Elm_Custom_Palette" struct { diff --git a/config/mobile/base.src.in b/config/mobile/base.src.in index ace09b7aa3..d753de513e 100644 --- a/config/mobile/base.src.in +++ b/config/mobile/base.src.in @@ -102,6 +102,7 @@ group "Elm_Config" struct { value "naviframe_prev_btn_auto_pushed" uchar: 1; value "popup_horizontal_align" double: 0.5; value "popup_vertical_align" double: 0.5; + value "popup_scrollable" uchar: 0; value "spinner_min_max_filter_enable" uchar: 1; group "color_palette" list { group "Elm_Custom_Palette" struct { diff --git a/config/standard/base.src.in b/config/standard/base.src.in index 4b81b87670..cf0d7736d4 100644 --- a/config/standard/base.src.in +++ b/config/standard/base.src.in @@ -99,6 +99,7 @@ group "Elm_Config" struct { value "naviframe_prev_btn_auto_pushed" uchar: 1; value "popup_horizontal_align" double: 0.5; value "popup_vertical_align" double: 0.5; + value "popup_scrollable" uchar: 0; value "spinner_min_max_filter_enable" uchar: 0; group "color_palette" list { group "Elm_Custom_Palette" struct { diff --git a/src/bin/elementary/test_popup.c b/src/bin/elementary/test_popup.c index 3ab08e1722..dc1274ec82 100644 --- a/src/bin/elementary/test_popup.c +++ b/src/bin/elementary/test_popup.c @@ -306,8 +306,7 @@ _popup_center_title_content_3button_cb(void *data, Evas_Object *obj EINA_UNUSED, char buf[256]; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); // popup title elm_object_part_text_set(popup, "title,text", "Title"); @@ -368,8 +367,7 @@ _popup_center_title_item_3button_cb(void *data, Evas_Object *obj EINA_UNUSED, Evas_Object *popup, *icon1, *btn1, *btn2, *btn3; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); // popup title elm_object_part_text_set(popup, "title,text", "Title"); @@ -441,8 +439,7 @@ _popup_center_title_text_2button_restack_cb(void *data, Evas_Object *obj EINA_UN Evas_Object *btn, *btn2; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); evas_object_smart_callback_add(popup, "block,clicked", _restack_block_clicked_cb, NULL); @@ -486,8 +483,7 @@ _popup_center_text_1button_hide_show_cb(void *data, Evas_Object *obj EINA_UNUSED } g_popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(g_popup, is_popup_scroll); + elm_popup_scrollable_set(g_popup, is_popup_scroll); elm_object_text_set(g_popup, "Hide this popup by using the button." "When you click list item again, you can see this popup."); @@ -535,8 +531,7 @@ _popup_center_text_3button_add_remove_button_cb(void *data, int i; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); // popup title elm_object_part_text_set(popup, "title,text", @@ -571,8 +566,7 @@ _popup_transparent_cb(void *data, Evas_Object *obj EINA_UNUSED, Evas_Object *btn; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); elm_object_style_set(popup, "transparent"); elm_object_text_set(popup, "This Popup has transparent background"); @@ -595,8 +589,7 @@ _popup_transparent_align_cb(void *data, Evas_Object *obj EINA_UNUSED, Evas_Object *btn, *btn1; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); elm_object_style_set(popup, "transparent"); elm_object_text_set(popup, "This Popup has transparent background"); @@ -638,8 +631,7 @@ _popup_center_title_list_content_1button_cb(void *data, Evas_Object *obj EINA_UN Evas_Object *btn; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); elm_object_part_text_set(popup, "title,text", "Title"); // list as a popup content @@ -670,8 +662,7 @@ _popup_center_title_genlist_content_1button_cb(void *data, Evas_Object *obj EINA int i; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); elm_object_part_text_set(popup, "title,text", "Title"); Elm_Genlist_Item_Class *itc1 = elm_genlist_item_class_new(); @@ -683,7 +674,7 @@ _popup_center_title_genlist_content_1button_cb(void *data, Evas_Object *obj EINA // genlist as a popup content genlist = elm_genlist_add(popup); - elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); + elm_genlist_mode_set(genlist, ELM_LIST_EXPAND); elm_scroller_content_min_limit(genlist, EINA_FALSE, EINA_TRUE); for (i = 0; i < 10; i++) @@ -718,8 +709,7 @@ _subpopup_cb(void *data, Evas_Object *obj EINA_UNUSED, Evas_Object *btn, *btnclose; popup = elm_popup_add(data); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); elm_object_style_set(popup, "subpopup"); elm_object_part_text_set(popup, "title,text", "Title"); @@ -754,8 +744,7 @@ _popup_content_only_cb(void *data, Evas_Object *obj EINA_UNUSED, Evas_Object *win = data; popup = elm_popup_add(win); - if (is_popup_scroll) - elm_popup_scrollable_set(popup, is_popup_scroll); + elm_popup_scrollable_set(popup, is_popup_scroll); bx = elm_box_add(popup); evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -929,6 +918,12 @@ test_popup(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, evas_object_show(check); evas_object_smart_callback_add(check, "changed", _popup_scroll_cb, NULL); + if (elm_config_popup_scrollable_get()) + { + elm_check_state_set(check, EINA_TRUE); + is_popup_scroll = EINA_TRUE; + } + evas_object_resize(win, 480, 400); evas_object_show(win); } diff --git a/src/lib/elementary/elc_popup.c b/src/lib/elementary/elc_popup.c index 22777f0c13..db93b01c3f 100644 --- a/src/lib/elementary/elc_popup.c +++ b/src/lib/elementary/elc_popup.c @@ -1552,6 +1552,9 @@ _elm_popup_evas_object_smart_add(Eo *obj, Elm_Popup_Data *priv) _populate_theme_scroll(priv); _visuals_set(obj); + + if (_elm_config->popup_scrollable) + elm_popup_scrollable_set(obj, _elm_config->popup_scrollable); } static void diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c index 36ee5c7816..c42177ddc3 100644 --- a/src/lib/elementary/elm_config.c +++ b/src/lib/elementary/elm_config.c @@ -499,6 +499,7 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, naviframe_prev_btn_auto_pushed, T_UCHAR); ELM_CONFIG_VAL(D, T, popup_horizontal_align, T_DOUBLE); ELM_CONFIG_VAL(D, T, popup_vertical_align, T_DOUBLE); + ELM_CONFIG_VAL(D, T, popup_scrollable, T_UCHAR); ELM_CONFIG_VAL(D, T, spinner_min_max_filter_enable, T_UCHAR); ELM_CONFIG_VAL(D, T, icon_theme, T_STRING); #undef T @@ -1826,6 +1827,7 @@ _config_load(void) _elm_config->popup_horizontal_align = 0.5; _elm_config->popup_vertical_align = 0.5; _elm_config->icon_theme = eina_stringshare_add(ELM_CONFIG_ICON_THEME_ELEMENTARY); + _elm_config->popup_scrollable = EINA_FALSE; } static void @@ -2539,6 +2541,8 @@ _env_get(void) if (s) _elm_config->popup_horizontal_align = _elm_atof(s); s = getenv("ELM_POPUP_VERTICAL_ALIGN"); if (s) _elm_config->popup_vertical_align = _elm_atof(s); + s = getenv("ELM_POPUP_SCROLLABLE"); + if (s) _elm_config->popup_scrollable = atoi(s); } static void @@ -3670,6 +3674,18 @@ elm_config_window_auto_focus_animate_set(Eina_Bool enable) _elm_config->win_auto_focus_animate = enable; } +EAPI Eina_Bool +elm_config_popup_scrollable_get(void) +{ + return _elm_config->popup_scrollable; +} + +EAPI void +elm_config_popup_scrollable_set(Eina_Bool scrollable) +{ + _elm_config->popup_scrollable = scrollable; +} + EAPI void elm_config_all_flush(void) { diff --git a/src/lib/elementary/elm_config.h b/src/lib/elementary/elm_config.h index 558d8596b5..e6238a743c 100644 --- a/src/lib/elementary/elm_config.h +++ b/src/lib/elementary/elm_config.h @@ -2033,6 +2033,28 @@ EAPI Eina_Bool elm_config_window_auto_focus_animate_get(void); */ EAPI void elm_config_window_auto_focus_animate_set(Eina_Bool enable); +/** + * Get the popup scrollable flag + * + * If scrollable is true, popup's contents is wrapped in a scroller container + * in order to popup shouldn't be larger than its parent. + * + * @return The enabled state for popup scroll + * @since 1.18 + */ +EAPI Eina_Bool elm_config_popup_scrollable_get(void); + +/** + * Set the popup scrollable flag + * + * If scrollable is true, popup's contents is wrapped in a scroller container + * in order to popup shouldn't be larger than its parent. + * + * @param enable the popup scroll + * @since 1.18 + */ +EAPI void elm_config_popup_scrollable_set(Eina_Bool scrollable); + /** * @defgroup ATSPI AT-SPI2 Accessibility * @ingroup Elementary diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h index 21c510f3cc..b3e24a0f3b 100644 --- a/src/lib/elementary/elm_priv.h +++ b/src/lib/elementary/elm_priv.h @@ -247,6 +247,7 @@ struct _Elm_Config Elm_Slider_Indicator_Visible_Mode slider_indicator_visible_mode; /**< this sets the slider indicator visible mode */ double popup_horizontal_align; double popup_vertical_align; + Eina_Bool popup_scrollable; int toolbar_shrink_mode; unsigned char fileselector_expand_enable; unsigned char fileselector_double_tap_navigation_enable;