@@ -1176,27 +1176,21 @@ int scene_send_key(struct scene *scn, int key, struct expo_action *event)
return log_msg_ret("key", ret);
break;
}
- case SCENEOBJT_TEXTLINE: {
- struct scene_obj_textline *tline;
-
- tline = (struct scene_obj_textline *)cur,
- ret = scene_textline_send_key(scn, tline, key, event);
+ case SCENEOBJT_TEXTLINE:
+ case SCENEOBJT_TEXTEDIT:
+ ret = scene_txtin_send_key(cur, scene_obj_txtin(cur),
+ key, event);
if (ret)
return log_msg_ret("key", ret);
break;
}
- case SCENEOBJT_TEXTEDIT:
- /* TODO(sjg@chromium.org): Implement this */
- break;
- }
return 0;
}
- if (cur && cur->type == SCENEOBJT_TEXTLINE) {
- struct scene_obj_textline *tline;
-
- tline = (struct scene_obj_textline *)cur;
- ret = scene_textline_send_key(scn, tline, key, event);
+ if (cur && (cur->type == SCENEOBJT_TEXTLINE ||
+ cur->type == SCENEOBJT_TEXTEDIT)) {
+ ret = scene_txtin_send_key(cur, scene_obj_txtin(cur),
+ key, event);
if (ret)
return log_msg_ret("key", ret);
return 0;
@@ -227,16 +227,16 @@ int scene_menu_send_click(struct scene *scn, struct scene_obj_menu *menu, int x,
int y, struct expo_action *event);
/**
- * scene_textline_send_key() - Send a key to a textline for processing
+ * scene_txtin_send_key() - Send a key to a text-input object for processing
*
- * @scn: Scene to use
- * @tline: textline to use
+ * @obj: Object to use
+ * @tin: Text-input info
* @key: Key code to send (KEY_...)
* @event: Place to put any event which is generated by the key
* Returns: 0 if OK (always)
*/
-int scene_textline_send_key(struct scene *scn, struct scene_obj_textline *tline,
- int key, struct expo_action *event);
+int scene_txtin_send_key(struct scene_obj *obj, struct scene_txtin *tin,
+ int key, struct expo_action *event);
/**
* scene_menu_destroy() - Destroy a menu in a scene
@@ -98,53 +98,6 @@ int scene_textline_arrange(struct scene *scn, struct expo_arrange_info *arr,
return 0;
}
-int scene_textline_send_key(struct scene *scn, struct scene_obj_textline *tline,
- int key, struct expo_action *event)
-{
- const bool open = tline->obj.flags & SCENEOF_OPEN;
-
- log_debug("key=%d\n", key);
- switch (key) {
- case BKEY_QUIT:
- if (open) {
- event->type = EXPOACT_CLOSE;
- event->select.id = tline->obj.id;
-
- /* Copy the backup text from the scene buffer */
- memcpy(abuf_data(&tline->tin.buf), abuf_data(&scn->buf),
- abuf_size(&scn->buf));
-
- scene_txtin_close(scn);
- } else {
- event->type = EXPOACT_QUIT;
- log_debug("menu quit\n");
- }
- break;
- case BKEY_SELECT:
- if (!open)
- break;
- event->type = EXPOACT_CLOSE;
- event->select.id = tline->obj.id;
- key = '\n';
- fallthrough;
- default: {
- struct udevice *cons = scn->expo->cons;
- int ret;
-
- ret = vidconsole_entry_restore(cons, &scn->entry_save);
- if (ret)
- return log_msg_ret("sav", ret);
- ret = cread_line_process_ch(&scn->cls, key);
- ret = vidconsole_entry_save(cons, &scn->entry_save);
- if (ret)
- return log_msg_ret("sav", ret);
- break;
- }
- }
-
- return 0;
-}
-
bool scene_textline_within(const struct scene *scn,
struct scene_obj_textline *tline, int x, int y)
{
@@ -8,6 +8,7 @@
#define LOG_CATEGORY LOGC_EXPO
+#include <cli.h>
#include <expo.h>
#include <log.h>
#include <menu.h>
@@ -157,3 +158,51 @@ void scene_txtin_calc_bbox(struct scene_obj *obj, struct scene_txtin *tin,
edit_bbox->valid = false;
scene_bbox_union(scn, tin->edit_id, inset, edit_bbox);
}
+
+int scene_txtin_send_key(struct scene_obj *obj, struct scene_txtin *tin,
+ int key, struct expo_action *event)
+{
+ const bool open = obj->flags & SCENEOF_OPEN;
+ struct scene *scn = obj->scene;
+
+ log_debug("key=%d\n", key);
+ switch (key) {
+ case BKEY_QUIT:
+ if (open) {
+ event->type = EXPOACT_CLOSE;
+ event->select.id = obj->id;
+
+ /* Copy the backup text from the scene buffer */
+ memcpy(abuf_data(&tin->buf), abuf_data(&scn->buf),
+ abuf_size(&scn->buf));
+
+ scene_txtin_close(scn);
+ } else {
+ event->type = EXPOACT_QUIT;
+ log_debug("menu quit\n");
+ }
+ break;
+ case BKEY_SELECT:
+ if (!open)
+ break;
+ event->type = EXPOACT_CLOSE;
+ event->select.id = obj->id;
+ key = '\n';
+ fallthrough;
+ default: {
+ struct udevice *cons = scn->expo->cons;
+ int ret;
+
+ ret = vidconsole_entry_restore(cons, &scn->entry_save);
+ if (ret)
+ return log_msg_ret("sav", ret);
+ ret = cread_line_process_ch(&scn->cls, key);
+ ret = vidconsole_entry_save(cons, &scn->entry_save);
+ if (ret)
+ return log_msg_ret("sav", ret);
+ break;
+ }
+ }
+
+ return 0;
+}