From 394a7e1d4dba4c9044a4c46809461f659b9e30e8 Mon Sep 17 00:00:00 2001 From: Vaibhav Gupta Date: Fri, 11 Dec 2015 15:49:27 +0900 Subject: [PATCH] Entry: Context Menu is now configurable Summary: Added a config variable Context_Menu_Disabled to make the appearance of the context menu configurable. @feature Signed-off-by: Vaibhav Gupta Reviewers: Hermet, SanghyeonLee, raster, singh.amitesh Subscribers: stefan_schmidt, alok25, cedric, thiepha, sachin.dev Differential Revision: https://phab.enlightenment.org/D2463 --- legacy/elementary/config/default/base.src.in | 1 + legacy/elementary/config/mobile/base.src.in | 1 + legacy/elementary/config/standard/base.src.in | 1 + legacy/elementary/src/bin/test_entry.c | 17 +++++++- legacy/elementary/src/lib/elm_config.c | 17 ++++++++ legacy/elementary/src/lib/elm_config.h | 20 ++++++++++ legacy/elementary/src/lib/elm_entry.c | 39 ++++++++++++++----- legacy/elementary/src/lib/elm_priv.h | 1 + 8 files changed, 86 insertions(+), 11 deletions(-) diff --git a/legacy/elementary/config/default/base.src.in b/legacy/elementary/config/default/base.src.in index 188f41ffbf..7bf77132bb 100644 --- a/legacy/elementary/config/default/base.src.in +++ b/legacy/elementary/config/default/base.src.in @@ -54,6 +54,7 @@ group "Elm_Config" struct { value "longpress_timeout" double: 1.0; value "effect_enable" uchar: 1; value "desktop_entry" uchar: 0; + value "context_menu_disabled" uchar: 0; value "password_show_last" uchar: 0; value "password_show_last_timeout" double: 2.0; value "glayer_zoom_finger_enable" uchar: 1; diff --git a/legacy/elementary/config/mobile/base.src.in b/legacy/elementary/config/mobile/base.src.in index aea7ae2501..44bfd67397 100644 --- a/legacy/elementary/config/mobile/base.src.in +++ b/legacy/elementary/config/mobile/base.src.in @@ -54,6 +54,7 @@ group "Elm_Config" struct { value "longpress_timeout" double: 1.0; value "effect_enable" uchar: 1; value "desktop_entry" uchar: 0; + value "context_menu_disabled" uchar: 0; value "password_show_last" uchar: 1; value "password_show_last_timeout" double: 2.0; value "glayer_zoom_finger_enable" uchar: 1; diff --git a/legacy/elementary/config/standard/base.src.in b/legacy/elementary/config/standard/base.src.in index 2d87884071..fd60d6a9c3 100644 --- a/legacy/elementary/config/standard/base.src.in +++ b/legacy/elementary/config/standard/base.src.in @@ -55,6 +55,7 @@ group "Elm_Config" struct { value "longpress_timeout" double: 1.0; value "effect_enable" uchar: 1; value "desktop_entry" uchar: 1; + value "context_menu_disabled" uchar: 1; value "password_show_last" uchar: 0; value "password_show_last_timeout" double: 2.0; value "glayer_zoom_finger_enable" uchar: 1; diff --git a/legacy/elementary/src/bin/test_entry.c b/legacy/elementary/src/bin/test_entry.c index edc20ff72b..b679f3a58b 100644 --- a/legacy/elementary/src/bin/test_entry.c +++ b/legacy/elementary/src/bin/test_entry.c @@ -82,10 +82,19 @@ my_entry_bt_7(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UN elm_entry_editable_set(en, !elm_entry_editable_get(en)); } +static void +changed_cb1(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + Evas_Object *ck = data; + printf("ck %p to %i\n", obj, elm_check_state_get(obj)); + elm_config_context_menu_disabled_set(elm_check_state_get(obj)); + printf("ck2 %p is now %i\n", ck, elm_check_state_get(ck)); +} + void test_entry(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *win, *bx, *bx2, *bt, *en; + Evas_Object *win, *bx, *bx2, *bt, *en, *ck; char buf[4096]; win = elm_win_util_standard_add("entry", "Entry"); @@ -204,6 +213,12 @@ test_entry(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf elm_object_focus_allow_set(bt, EINA_FALSE); evas_object_show(bt); + ck = elm_check_add(win); + elm_object_text_set(ck, "Context Menu Disable"); + evas_object_smart_callback_add(ck, "changed", changed_cb1, ck); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + elm_box_pack_end(bx, bx2); evas_object_show(bx2); diff --git a/legacy/elementary/src/lib/elm_config.c b/legacy/elementary/src/lib/elm_config.c index 8e5320c6a8..3c89162a64 100644 --- a/legacy/elementary/src/lib/elm_config.c +++ b/legacy/elementary/src/lib/elm_config.c @@ -375,6 +375,7 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, focus_highlight_clip_disable, T_UCHAR); ELM_CONFIG_VAL(D, T, focus_move_policy, T_UCHAR); ELM_CONFIG_VAL(D, T, focus_autoscroll_mode, T_UCHAR); + ELM_CONFIG_VAL(D, T, context_menu_disabled, T_UCHAR); ELM_CONFIG_VAL(D, T, slider_indicator_visible_mode, T_INT); ELM_CONFIG_VAL(D, T, item_select_on_focus_disable, T_UCHAR); ELM_CONFIG_VAL(D, T, first_item_focus_on_first_focus_in, T_UCHAR); @@ -1416,6 +1417,7 @@ _config_load(void) _elm_config->longpress_timeout = 1.0; _elm_config->effect_enable = EINA_TRUE; _elm_config->desktop_entry = EINA_FALSE; + _elm_config->context_menu_disabled = EINA_FALSE; _elm_config->is_mirrored = EINA_FALSE; /* Read sys value in env_get() */ _elm_config->password_show_last = EINA_FALSE; _elm_config->password_show_last_timeout = 2.0; @@ -2099,6 +2101,9 @@ _env_get(void) s = getenv("ELM_ICON_SIZE"); if (s) _elm_config->icon_size = atoi(s); + s = getenv("ELM_CONTEXT_MENU_DISABLED"); + if (s) _elm_config->context_menu_disabled = !!atoi(s); + s = getenv("ELM_LONGPRESS_TIMEOUT"); if (s) _elm_config->longpress_timeout = _elm_atof(s); if (_elm_config->longpress_timeout < 0.0) @@ -2895,6 +2900,18 @@ elm_config_scroll_thumbscroll_sensitivity_friction_get(void) return _elm_config->thumbscroll_sensitivity_friction; } +EAPI Eina_Bool +elm_config_context_menu_disabled_get(void) +{ + return _elm_config->context_menu_disabled; +} + +EAPI void +elm_config_context_menu_disabled_set(Eina_Bool enabled) +{ + _elm_config->context_menu_disabled = !!enabled; +} + EAPI void elm_config_scroll_thumbscroll_sensitivity_friction_set(double friction) { diff --git a/legacy/elementary/src/lib/elm_config.h b/legacy/elementary/src/lib/elm_config.h index 350fdd376e..e7bece0f15 100644 --- a/legacy/elementary/src/lib/elm_config.h +++ b/legacy/elementary/src/lib/elm_config.h @@ -215,6 +215,26 @@ EAPI double elm_config_scroll_page_scroll_friction_get(void); */ EAPI void elm_config_scroll_page_scroll_friction_set(double friction); +/** + * Get enable status of context menu disabled. + * + * @see elm_config_context_menu_disabled_set() + * @ingroup Entry + * @since 1.17 + */ +EAPI Eina_Bool elm_config_context_menu_disabled_get(void); + +/** + * Set enable status of context menu disabled. + * + * @param enabled enable context menu if @c EINA_TRUE, disable otherwise + * + * @see elm_config_focus_auto_scroll_bring_in_enabled_get() + * @ingroup Entry + * @since 1.17 + */ +EAPI void elm_config_context_menu_disabled_set(Eina_Bool enabled); + /** * Get the amount of inertia a scroller will impose at region bring * animations. diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index 923b3ad7c9..ec6e502e3e 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -1776,7 +1776,10 @@ _long_press_cb(void *data) _magnifier_show(data); _magnifier_move(data, sd->downx, sd->downy); } - else if (!_elm_config->desktop_entry) + /* Context menu will not appear if context menu disabled is set + * as false on a long press callback */ + else if (!_elm_config->context_menu_disabled && + (!_elm_config->desktop_entry)) _menu_call(data); sd->long_pressed = EINA_TRUE; @@ -1795,8 +1798,9 @@ _key_down_cb(void *data, void *event_info) { Evas_Event_Key_Down *ev = event_info; - - if (!strcmp(ev->key, "Menu")) + /* First check if context menu disabled is false or not, and + * then check for key id */ + if ((!_elm_config->context_menu_disabled) && !strcmp(ev->key, "Menu")) _menu_call(data); } @@ -1822,7 +1826,9 @@ _mouse_down_cb(void *data, sd->longpress_timer = ecore_timer_add (_elm_config->longpress_timeout, _long_press_cb, data); } - else if (ev->button == 3) + /* If right button is pressed and context menu disabled is true, + * then only context menu will appear */ + else if (ev->button == 3 && (!_elm_config->context_menu_disabled)) { if (_elm_config->desktop_entry) { @@ -1848,7 +1854,11 @@ _mouse_up_cb(void *data, if (ev->button == 1) { ELM_SAFE_FREE(sd->longpress_timer, ecore_timer_del); - if ((sd->long_pressed) && (_elm_config->magnifier_enable)) + /* Since context menu disabled flag was checked at long press start while mouse + * down, hence the same should be checked at mouse up from a long press + * as well */ + if ((sd->long_pressed) && (!_elm_config->context_menu_disabled) && + (_elm_config->magnifier_enable)) { _magnifier_hide(data); _menu_call(data); @@ -1867,10 +1877,13 @@ _mouse_up_cb(void *data, } } } - else if ((ev->button == 3) && (!_elm_config->desktop_entry)) + /* Since context menu disabled flag was checked at mouse right key down, + * hence the same should be stopped at mouse up of right key as well */ + else if ((ev->button == 3) && (!_elm_config->context_menu_disabled) && + (!_elm_config->desktop_entry)) { - sd->use_down = 1; - _menu_call(data); + sd->use_down = 1; + _menu_call(data); } } @@ -3254,7 +3267,10 @@ _start_handler_mouse_up_cb(void *data, sd->start_handler_down = EINA_FALSE; if (_elm_config->magnifier_enable) _magnifier_hide(data); - if ((!_elm_config->desktop_entry) && (sd->long_pressed)) + /* Context menu should not appear, even in case of selector mode, if the + * flag is false (disabled) */ + if ((!_elm_config->context_menu_disabled) && + (!_elm_config->desktop_entry) && (sd->long_pressed)) _menu_call(data); } @@ -3353,7 +3369,10 @@ _end_handler_mouse_up_cb(void *data, sd->end_handler_down = EINA_FALSE; if (_elm_config->magnifier_enable) _magnifier_hide(data); - if ((!_elm_config->desktop_entry) && (sd->long_pressed)) + /* Context menu appear was checked in case of selector start, and hence + * the same should be checked at selector end as well */ + if ((!_elm_config->context_menu_disabled) && + (!_elm_config->desktop_entry) && (sd->long_pressed)) _menu_call(data); } diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h index 6c26a038a1..4a89dbc211 100644 --- a/legacy/elementary/src/lib/elm_priv.h +++ b/legacy/elementary/src/lib/elm_priv.h @@ -256,6 +256,7 @@ struct _Elm_Config double longpress_timeout; unsigned char effect_enable; unsigned char desktop_entry; + unsigned char context_menu_disabled; unsigned char password_show_last; double password_show_last_timeout; unsigned char glayer_zoom_finger_enable;