diff --git a/desktop/textarea.c b/desktop/textarea.c index bfa07ad4f..f9712ac84 100644 --- a/desktop/textarea.c +++ b/desktop/textarea.c @@ -160,6 +160,7 @@ static void textarea_normalise_text(struct textarea *ta, unsigned int b_start, unsigned int b_len) { bool multi = (ta->flags & TEXTAREA_MULTILINE) ? true : false; + struct textarea_msg msg; unsigned int index; /* Remove CR characters. If it's a CRLF pair delete the CR, or replace @@ -187,6 +188,14 @@ static void textarea_normalise_text(struct textarea *ta, ta->text.data[b_start + index] = ' '; } + /* Build text modified message */ + msg.ta = ta; + msg.type = TEXTAREA_MSG_TEXT_MODIFIED; + msg.data.modified.text = ta->text.data; + msg.data.modified.len = ta->text.len; + + /* Pass message to client */ + ta->callback(ta->data, &msg); } diff --git a/desktop/textarea.h b/desktop/textarea.h index 016f15a10..1c24dd1cc 100644 --- a/desktop/textarea.h +++ b/desktop/textarea.h @@ -51,7 +51,8 @@ typedef enum { TEXTAREA_MSG_DRAG_REPORT, /**< Textarea drag start/end report */ TEXTAREA_MSG_SELECTION_REPORT, /**< Textarea text selection presence */ TEXTAREA_MSG_REDRAW_REQUEST, /**< Textarea redraw request */ - TEXTAREA_MSG_CARET_UPDATE /**< Textarea caret */ + TEXTAREA_MSG_CARET_UPDATE, /**< Textarea caret */ + TEXTAREA_MSG_TEXT_MODIFIED /**< Textarea text modified */ } textarea_msg_type; struct textarea_msg { @@ -77,6 +78,10 @@ struct textarea_msg { struct rect *clip; /**< Carret clip rect */ } pos; /**< With _CARET_SET_POS */ } caret; /**< With _CARET_UPDATE */ + struct { + const char *text; /**< UTF8 text */ + unsigned int len; /**< Byte length of text */ + } modified; /**< With _TEXT_MODIFIED */ } data; /**< Depends on msg type */ }; diff --git a/render/box_textarea.c b/render/box_textarea.c index 546a39e04..d34c4c4a4 100644 --- a/render/box_textarea.c +++ b/render/box_textarea.c @@ -204,6 +204,10 @@ static void box_textarea_callback(void *data, struct textarea_msg *msg) msg->data.caret.pos.clip); } break; + + case TEXTAREA_MSG_TEXT_MODIFIED: + /* TODO */ + break; } }