diff -r 012418e7dc90 -r bcf880b29bc3 ui/motif/text.c --- a/ui/motif/text.c Thu Apr 03 11:12:22 2014 +0200 +++ b/ui/motif/text.c Thu Apr 03 14:16:41 2014 +0200 @@ -46,6 +46,17 @@ Widget text_area = XmCreateScrolledText(parent, "text_area", args, n); XtManageChild(text_area); + UiTextArea *uitext = ucx_mempool_malloc( + obj->ctx->mempool, + sizeof(UiTextArea)); + uitext->ctx = obj->ctx; + uitext->last_selection_state = 0; + XtAddCallback( + text_area, + XmNmotionVerifyCallback, + (XtCallbackProc)ui_text_selection_callback, + uitext); + // bind value if(value) { value->set = ui_textarea_set; @@ -114,6 +125,25 @@ return mgr; } +void ui_text_selection_callback( + Widget widget, + UiTextArea *textarea, + XtPointer data) +{ + long left = 0; + long right = 0; + XmTextGetSelectionPosition(widget, &left, &right); + int sel = left < right ? 1 : 0; + if(sel != textarea->last_selection_state) { + if(sel) { + ui_set_group(textarea->ctx, UI_GROUP_SELECTION); + } else { + ui_unset_group(textarea->ctx, UI_GROUP_SELECTION); + } + } + textarea->last_selection_state = sel; +} + void ui_text_modify_callback(Widget widget, UiText *value, XtPointer data) { XmTextVerifyCallbackStruct *txv = (XmTextVerifyCallbackStruct*)data; int type = txv->text->length > 0 ? UI_TEXTBUF_INSERT : UI_TEXTBUF_DELETE;