1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
#ifndef ELM_WIDGET_ENTRY_H
#define ELM_WIDGET_ENTRY_H
#include "elm_interface_scrollable.h"
#include "elm_widget_layout.h"
/* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
* CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT
* FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK
* IT AT RUNTIME.
*/
/**
* @addtogroup Widget
* @{
*
* @section elm-entry-class The Elementary Entry Class
*
* Elementary, besides having the @ref Entry widget, exposes its
* foundation -- the Elementary Entry Class -- in order to create
* other widgets which are a entry with some more logic on top.
*/
typedef struct _Mod_Api Mod_Api;
/**
* Base widget smart data extended with entry instance data.
*/
typedef struct _Elm_Entry_Data Elm_Entry_Data;
struct _Elm_Entry_Data
{
Evas_Object *hit_rect, *entry_edje, *scr_edje;
Evas_Object *hoversel;
Evas_Object *mgf_bg;
Evas_Object *mgf_clip;
Evas_Object *mgf_proxy;
Evas_Object *start_handler;
Evas_Object *end_handler;
Ecore_Job *deferred_recalc_job;
Ecore_Timer *longpress_timer;
Ecore_Timer *delay_write;
/* for deferred appending */
Ecore_Idler *append_text_idler;
char *append_text_left;
int append_text_position;
int append_text_len;
/* Only for clipboard */
const char *cut_sel;
const char *text;
const char *file;
Elm_Text_Format format;
Evas_Coord last_w, ent_mw, ent_mh;
Evas_Coord downx, downy;
Evas_Coord ox, oy;
Eina_List *items; /** context menu item list */
Eina_List *item_providers;
Eina_List *markup_filters;
Ecore_Job *hov_deljob;
Mod_Api *api; // module api if supplied
int cursor_pos;
Elm_Scroller_Policy policy_h, policy_v;
Elm_Wrap_Type line_wrap;
Elm_Input_Panel_Layout input_panel_layout;
Elm_Autocapital_Type autocapital_type;
Elm_Input_Panel_Lang input_panel_lang;
Elm_Input_Panel_Return_Key_Type input_panel_return_key_type;
Elm_Input_Hints input_hints;
Edje_Cursor sel_handler_cursor;
void *input_panel_imdata;
int input_panel_imdata_len;
int input_panel_layout_variation;
int validators;
struct
{
Evas_Object *hover_parent; /**< hover parent object. entry is a hover parent object by default */
Evas_Object *pop; /**< hidden icon for hover target */
Evas_Object *hover; /**< hover object */
const char *hover_style; /**< style of a hover object */
} anchor_hover;
Elm_Cnp_Mode cnp_mode;
Elm_Sel_Format drop_format;
Eina_Bool input_panel_return_key_disabled : 1;
Eina_Bool drag_selection_asked : 1;
Eina_Bool sel_handler_disabled : 1;
Eina_Bool start_handler_down : 1;
Eina_Bool start_handler_shown : 1;
Eina_Bool end_handler_down : 1;
Eina_Bool end_handler_shown : 1;
Eina_Bool input_panel_enable : 1;
Eina_Bool prediction_allow : 1;
Eina_Bool selection_asked : 1;
Eina_Bool auto_return_key : 1;
Eina_Bool have_selection : 1;
Eina_Bool deferred_cur : 1;
Eina_Bool context_menu : 1;
Eina_Bool long_pressed : 1;
Eina_Bool cur_changed : 1;
Eina_Bool single_line : 1;
Eina_Bool can_write : 1;
Eina_Bool auto_save : 1;
Eina_Bool password : 1;
Eina_Bool editable : 1;
Eina_Bool disabled : 1;
Eina_Bool h_bounce : 1;
Eina_Bool v_bounce : 1;
Eina_Bool has_text : 1;
Eina_Bool use_down : 1;
Eina_Bool sel_mode : 1;
Eina_Bool sel_allow : 1;
Eina_Bool changed : 1;
Eina_Bool scroll : 1;
Eina_Bool input_panel_show_on_demand : 1;
};
typedef struct _Elm_Entry_Item_Provider Elm_Entry_Item_Provider;
typedef struct _Elm_Entry_Markup_Filter Elm_Entry_Markup_Filter;
struct _Elm_Entry_Context_Menu_Item
{
Evas_Object *obj;
const char *label;
const char *icon_file;
const char *icon_group;
Elm_Icon_Type icon_type;
Evas_Smart_Cb func;
void *data;
};
struct _Elm_Entry_Item_Provider
{
Evas_Object *(*func)(void *data, Evas_Object * entry, const char *item);
void *data;
};
struct _Elm_Entry_Markup_Filter
{
Elm_Entry_Filter_Cb func;
void *data;
void *orig_data;
};
typedef enum _Length_Unit
{
LENGTH_UNIT_CHAR,
LENGTH_UNIT_BYTE,
LENGTH_UNIT_LAST
} Length_Unit;
/**
* @}
*/
#define ELM_ENTRY_DATA_GET(o, sd) \
Elm_Entry_Data * sd = efl_data_scope_get(o, ELM_ENTRY_CLASS)
#define ELM_ENTRY_DATA_GET_OR_RETURN(o, ptr) \
ELM_ENTRY_DATA_GET(o, ptr); \
if (EINA_UNLIKELY(!ptr)) \
{ \
CRI("No widget data for object %p (%s)", \
o, evas_object_type_get(o)); \
return; \
}
#define ELM_ENTRY_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
ELM_ENTRY_DATA_GET(o, ptr); \
if (EINA_UNLIKELY(!ptr)) \
{ \
CRI("No widget data for object %p (%s)", \
o, evas_object_type_get(o)); \
return val; \
}
#define ELM_ENTRY_CHECK(obj) \
if (EINA_UNLIKELY(!efl_isa((obj), ELM_ENTRY_CLASS))) \
return
#endif
|