@@ -34,6 +34,8 @@ typedef struct {
34
34
bool active ; // Marker is 'active', i.e., touched
35
35
// if true, the special chars keyboard mode is available.
36
36
bool special_chars ;
37
+ void (* on_keyboard_switch_cb )(keyboard_mode_t mode , void * user_data );
38
+ void * user_data ;
37
39
} keyboard_switch_data_t ;
38
40
39
41
/**
@@ -90,29 +92,6 @@ static void _on_event(const event_t* event, component_t* component)
90
92
keyboard_switch_data_t * ks_data = (keyboard_switch_data_t * )component -> data ;
91
93
const gestures_slider_data_t * slider_data = (const gestures_slider_data_t * )event -> data ;
92
94
switch (event -> id ) {
93
- case EVENT_TOGGLE_ALPHANUMERIC :
94
- switch (ks_data -> mode ) {
95
- case LOWER_CASE :
96
- ks_data -> mode = UPPER_CASE ;
97
- break ;
98
- case UPPER_CASE :
99
- ks_data -> mode = DIGITS ;
100
- break ;
101
- case DIGITS :
102
- ks_data -> mode = ks_data -> special_chars ? SPECIAL_CHARS : LOWER_CASE ;
103
- break ;
104
- case SPECIAL_CHARS :
105
- ks_data -> mode = LOWER_CASE ;
106
- break ;
107
- default :
108
- Abort ("Keyboard mode unrecognized" );
109
- break ;
110
- }
111
- break ;
112
-
113
- case EVENT_UPDATE_ALPHANUMERIC :
114
- ks_data -> mode = * (const keyboard_mode_t * )event -> data ;
115
- break ;
116
95
case EVENT_TOP_CONTINUOUS_TAP :
117
96
if (ks_data -> location == top_slider && slider_data -> position > SLIDER_POSITION_ONE_THIRD &&
118
97
slider_data -> position <= SLIDER_POSITION_TWO_THIRD ) {
@@ -124,9 +103,24 @@ static void _on_event(const event_t* event, component_t* component)
124
103
if (ks_data -> location == top_slider && slider_data -> position > SLIDER_POSITION_ONE_THIRD &&
125
104
slider_data -> position <= SLIDER_POSITION_TWO_THIRD ) {
126
105
ks_data -> active = false;
127
- event_t e ;
128
- e .id = EVENT_TOGGLE_ALPHANUMERIC ;
129
- emit_event (& e );
106
+ switch (ks_data -> mode ) {
107
+ case LOWER_CASE :
108
+ ks_data -> mode = UPPER_CASE ;
109
+ break ;
110
+ case UPPER_CASE :
111
+ ks_data -> mode = DIGITS ;
112
+ break ;
113
+ case DIGITS :
114
+ ks_data -> mode = ks_data -> special_chars ? SPECIAL_CHARS : LOWER_CASE ;
115
+ break ;
116
+ case SPECIAL_CHARS :
117
+ ks_data -> mode = LOWER_CASE ;
118
+ break ;
119
+ default :
120
+ Abort ("Keyboard mode unrecognized" );
121
+ break ;
122
+ }
123
+ ks_data -> on_keyboard_switch_cb (ks_data -> mode , ks_data -> user_data );
130
124
break ;
131
125
}
132
126
/* FALLTHROUGH */
@@ -153,7 +147,9 @@ component_t* keyboard_switch_create(
153
147
slider_location_t location ,
154
148
bool special_chars ,
155
149
bool default_to_digits ,
156
- component_t * parent )
150
+ component_t * parent ,
151
+ void (* on_keyboard_switch_cb )(keyboard_mode_t mode , void * user_data ),
152
+ void * user_data )
157
153
{
158
154
component_t * keyboard_switch = malloc (sizeof (component_t ));
159
155
if (!keyboard_switch ) {
@@ -171,6 +167,8 @@ component_t* keyboard_switch_create(
171
167
ks_data -> mode = default_to_digits ? DIGITS : LOWER_CASE ;
172
168
ks_data -> active = false;
173
169
ks_data -> special_chars = special_chars ;
170
+ ks_data -> on_keyboard_switch_cb = on_keyboard_switch_cb ;
171
+ ks_data -> user_data = user_data ;
174
172
175
173
keyboard_switch -> data = ks_data ;
176
174
keyboard_switch -> f = & _component_functions ;
0 commit comments