Changeset View
Changeset View
Standalone View
Standalone View
src/lib/elementary/efl_ui_textbox.c
Show First 20 Lines • Show All 204 Lines • ▼ Show 20 Line(s) | |||||
205 | static void _decoration_defer(Eo *obj); | 205 | static void _decoration_defer(Eo *obj); | ||
206 | static void _clear_text_selection(Efl_Ui_Textbox_Data *sd); | 206 | static void _clear_text_selection(Efl_Ui_Textbox_Data *sd); | ||
207 | static void _anchors_free(Efl_Ui_Textbox_Data *sd); | 207 | static void _anchors_free(Efl_Ui_Textbox_Data *sd); | ||
208 | static void _selection_defer(Eo *obj, Efl_Ui_Textbox_Data *sd); | 208 | static void _selection_defer(Eo *obj, Efl_Ui_Textbox_Data *sd); | ||
209 | static Eina_Position2D _decoration_calc_offset(Efl_Ui_Textbox_Data *sd); | 209 | static Eina_Position2D _decoration_calc_offset(Efl_Ui_Textbox_Data *sd); | ||
210 | static void _update_text_theme(Eo *obj, Efl_Ui_Textbox_Data *sd); | 210 | static void _update_text_theme(Eo *obj, Efl_Ui_Textbox_Data *sd); | ||
211 | static void _efl_ui_textbox_selection_paste_type(Eo *obj, Efl_Ui_Selection_Type type); | 211 | static void _efl_ui_textbox_selection_paste_type(Eo *obj, Efl_Ui_Selection_Type type); | ||
212 | 212 | | |||
213 | static Eina_Bool _key_action_copy(Evas_Object *obj, const char *params); | ||||
214 | static Eina_Bool _key_action_paste(Evas_Object *obj, const char *params); | ||||
215 | static Eina_Bool _key_action_cut(Evas_Object *obj, const char *params); | ||||
216 | static Eina_Bool _key_action_menu(Evas_Object *obj, const char *params); | ||||
217 | | ||||
218 | static const Elm_Action key_actions[] = { | ||||
219 | {"copy", _key_action_copy}, | ||||
220 | {"paste", _key_action_paste}, | ||||
221 | {"cut", _key_action_cut}, | ||||
222 | {"menu", _key_action_menu}, | ||||
223 | {NULL, NULL} | ||||
224 | }; | ||||
225 | | ||||
213 | static void | 226 | static void | ||
214 | _efl_ui_textbox_guide_update(Evas_Object *obj, | 227 | _efl_ui_textbox_guide_update(Evas_Object *obj, | ||
215 | Eina_Bool has_text) | 228 | Eina_Bool has_text) | ||
216 | { | 229 | { | ||
217 | EFL_UI_TEXT_DATA_GET(obj, sd); | 230 | EFL_UI_TEXT_DATA_GET(obj, sd); | ||
218 | 231 | | |||
219 | if ((has_text) && (!sd->has_text)) | 232 | if ((has_text) && (!sd->has_text)) | ||
220 | efl_layout_signal_emit(sd->entry_edje, "efl,guide,disabled", "efl"); | 233 | efl_layout_signal_emit(sd->entry_edje, "efl,guide,disabled", "efl"); | ||
▲ Show 20 Lines • Show All 824 Lines • ▼ Show 20 Line(s) | 1057 | /* Context menu will not appear if context menu disabled is set | |||
1045 | * as false on a long press callback */ | 1058 | * as false on a long press callback */ | ||
1046 | if (!_elm_config->context_menu_disabled && | 1059 | if (!_elm_config->context_menu_disabled && | ||
1047 | (!_elm_config->desktop_entry)) | 1060 | (!_elm_config->desktop_entry)) | ||
1048 | _menu_call(data); | 1061 | _menu_call(data); | ||
1049 | 1062 | | |||
1050 | sd->long_pressed = EINA_TRUE; | 1063 | sd->long_pressed = EINA_TRUE; | ||
1051 | } | 1064 | } | ||
1052 | 1065 | | |||
1053 | static void | 1066 | | ||
1054 | _key_down_cb(void *data, const Efl_Event *event) | 1067 | static Eina_Bool | ||
1068 | _key_action_copy(Evas_Object *obj, const char *params EINA_UNUSED) | ||||
1055 | { | 1069 | { | ||
1056 | Efl_Input_Key_Data *ev = efl_data_scope_get(event->info, EFL_INPUT_KEY_CLASS); | 1070 | efl_ui_textbox_selection_copy(obj); | ||
1057 | Eina_Bool on_hold = EINA_FALSE; | 1071 | return EINA_TRUE; | ||
1072 | } | ||||
1058 | 1073 | | |||
1059 | /* First check if context menu disabled is false or not, and | 1074 | static Eina_Bool | ||
1060 | * then check for key id */ | 1075 | _key_action_cut(Evas_Object *obj, const char *params EINA_UNUSED) | ||
1061 | if ((!_elm_config->context_menu_disabled) && !strcmp(ev->key, "Menu")) | 1076 | { | ||
1062 | { | 1077 | efl_ui_textbox_selection_cut(obj); | ||
1063 | _menu_call(data); | 1078 | return EINA_TRUE; | ||
1064 | on_hold = EINA_TRUE; | 1079 | } | ||
1065 | } | | |||
1066 | else | | |||
1067 | { | | |||
1068 | #if defined(__APPLE__) && defined(__MACH__) | | |||
1069 | Eina_Bool control = evas_key_modifier_is_set(ev->modifiers, "Super"); | | |||
1070 | #else | | |||
1071 | Eina_Bool control = evas_key_modifier_is_set(ev->modifiers, "Control"); | | |||
1072 | #endif | | |||
1073 | 1080 | | |||
1074 | /* Ctrl operations */ | 1081 | static Eina_Bool | ||
1075 | if (control) | 1082 | _key_action_paste(Evas_Object *obj, const char *params EINA_UNUSED) | ||
1076 | { | 1083 | { | ||
1077 | if (!strncmp(ev->key, "c", 1)) | 1084 | efl_ui_textbox_selection_paste(obj); | ||
1078 | { | 1085 | return EINA_TRUE; | ||
1079 | efl_ui_textbox_selection_copy(data); | 1086 | } | ||
1080 | on_hold = EINA_TRUE; | | |||
1081 | } | | |||
1082 | else if (!strncmp(ev->key, "x", 1)) | | |||
1083 | { | | |||
1084 | efl_ui_textbox_selection_cut(data); | | |||
1085 | on_hold = EINA_TRUE; | | |||
1086 | } | | |||
1087 | else if (!strncmp(ev->key, "v", 1)) | | |||
1088 | { | | |||
1089 | efl_ui_textbox_selection_paste(data); | | |||
1090 | on_hold = EINA_TRUE; | | |||
1091 | } | | |||
1092 | } | | |||
1093 | } | | |||
1094 | 1087 | | |||
1095 | if (on_hold) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; | 1088 | static Eina_Bool | ||
1089 | _key_action_menu(Evas_Object *obj, const char *params EINA_UNUSED) | ||||
1090 | { | ||||
1091 | Eina_Bool b_ret = EINA_FALSE; | ||||
1092 | if (!_elm_config->context_menu_disabled) | ||||
1093 | { | ||||
1094 | _menu_call(obj); | ||||
1095 | b_ret = EINA_TRUE; | ||||
1096 | } | ||||
1097 | return b_ret; | ||||
1096 | } | 1098 | } | ||
1097 | 1099 | | |||
1098 | static void | 1100 | static void | ||
1099 | _mouse_down_cb(void *data, const Efl_Event *event) | 1101 | _mouse_down_cb(void *data, const Efl_Event *event) | ||
1100 | { | 1102 | { | ||
1101 | Efl_Input_Pointer_Data *ev; | 1103 | Efl_Input_Pointer_Data *ev; | ||
1102 | ev = efl_data_scope_get(event->info, EFL_INPUT_POINTER_CLASS); | 1104 | ev = efl_data_scope_get(event->info, EFL_INPUT_POINTER_CLASS); | ||
1103 | EFL_UI_TEXT_DATA_GET(data, sd); | 1105 | EFL_UI_TEXT_DATA_GET(data, sd); | ||
▲ Show 20 Lines • Show All 589 Lines • ▼ Show 20 Line(s) | 1694 | efl_event_callback_add(sd->text_obj, EFL_TEXT_INTERACTIVE_EVENT_SELECTION_CHANGED, | |||
1693 | _efl_ui_textbox_selection_changed_cb, obj); | 1695 | _efl_ui_textbox_selection_changed_cb, obj); | ||
1694 | efl_event_callback_add(efl_text_interactive_main_cursor_get(sd->text_obj), EFL_TEXT_CURSOR_EVENT_CHANGED, | 1696 | efl_event_callback_add(efl_text_interactive_main_cursor_get(sd->text_obj), EFL_TEXT_CURSOR_EVENT_CHANGED, | ||
1695 | _efl_ui_textbox_cursor_changed_cb, obj); | 1697 | _efl_ui_textbox_cursor_changed_cb, obj); | ||
1696 | efl_event_callback_add(sd->text_obj, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, | 1698 | efl_event_callback_add(sd->text_obj, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, | ||
1697 | _text_position_changed_cb, obj); | 1699 | _text_position_changed_cb, obj); | ||
1698 | efl_event_callback_add(sd->entry_edje, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, | 1700 | efl_event_callback_add(sd->entry_edje, EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, | ||
1699 | _efl_ui_textbox_move_cb, obj); | 1701 | _efl_ui_textbox_move_cb, obj); | ||
1700 | 1702 | | |||
1701 | efl_event_callback_add | | |||
1702 | (sd->entry_edje, EFL_EVENT_KEY_DOWN, _key_down_cb, obj); | | |||
1703 | efl_event_callback_add | 1703 | efl_event_callback_add | ||
1704 | (sd->entry_edje, EFL_EVENT_POINTER_DOWN, _mouse_down_cb, obj); | 1704 | (sd->entry_edje, EFL_EVENT_POINTER_DOWN, _mouse_down_cb, obj); | ||
1705 | efl_event_callback_add | 1705 | efl_event_callback_add | ||
1706 | (sd->entry_edje, EFL_EVENT_POINTER_UP, _mouse_up_cb, obj); | 1706 | (sd->entry_edje, EFL_EVENT_POINTER_UP, _mouse_up_cb, obj); | ||
1707 | efl_event_callback_add | 1707 | efl_event_callback_add | ||
1708 | (sd->entry_edje, EFL_EVENT_POINTER_MOVE, _mouse_move_cb, obj); | 1708 | (sd->entry_edje, EFL_EVENT_POINTER_MOVE, _mouse_move_cb, obj); | ||
1709 | efl_ui_action_connector_bind_clickable_to_object(sd->entry_edje, obj); | 1709 | efl_ui_action_connector_bind_clickable_to_object(sd->entry_edje, obj); | ||
1710 | 1710 | | |||
▲ Show 20 Lines • Show All 1614 Lines • ▼ Show 20 Line(s) | |||||
3325 | _part_is_efl_ui_textbox_part(const Eo *obj EINA_UNUSED, const char *part) | 3325 | _part_is_efl_ui_textbox_part(const Eo *obj EINA_UNUSED, const char *part) | ||
3326 | { | 3326 | { | ||
3327 | if (eina_streq(part, "efl.text_guide") || eina_streq(part, "efl.text")) | 3327 | if (eina_streq(part, "efl.text_guide") || eina_streq(part, "efl.text")) | ||
3328 | return EINA_TRUE; | 3328 | return EINA_TRUE; | ||
3329 | 3329 | | |||
3330 | return EINA_FALSE; | 3330 | return EINA_FALSE; | ||
3331 | } | 3331 | } | ||
3332 | 3332 | | |||
3333 | /* Standard widget overrides */ | ||||
3334 | | ||||
3335 | ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(efl_ui_textbox, Efl_Ui_Textbox_Data) | ||||
3336 | | ||||
3333 | ELM_PART_OVERRIDE_PARTIAL(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data, _part_is_efl_ui_textbox_part) | 3337 | ELM_PART_OVERRIDE_PARTIAL(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data, _part_is_efl_ui_textbox_part) | ||
3334 | ELM_PART_OVERRIDE_TEXT_SET(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data) | 3338 | ELM_PART_OVERRIDE_TEXT_SET(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data) | ||
3335 | ELM_PART_OVERRIDE_TEXT_GET(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data) | 3339 | ELM_PART_OVERRIDE_TEXT_GET(efl_ui_textbox, EFL_UI_TEXTBOX, Efl_Ui_Textbox_Data) | ||
3336 | 3340 | | |||
3337 | #include "efl_ui_textbox_part.eo.c" | 3341 | #include "efl_ui_textbox_part.eo.c" | ||
3338 | 3342 | | |||
3339 | /* Efl.Part end */ | 3343 | /* Efl.Part end */ | ||
3340 | 3344 | | |||
Show All 24 Lines |