This bugs happens when leaving a text area gadget by pressing the
"Escape" key. While this is allowed and does not cause the previous
text area content to be restored (as text area gadgets cannot be
left using the "Enter" key, and as there may be huge amount of text
being entered), the corresponding callback function is not called, so
the entered text is lost as soon as the gadget gets unmapped.
{
if (anyTextGadgetActive())
{
{
if (anyTextGadgetActive())
{
+ boolean gadget_changed = ((gi->event_mask & GD_EVENT_TEXT_LEAVING) != 0);
+
// restore previous text (before activating text gadget)
if (gi->type & GD_TYPE_TEXT_INPUT)
{
// restore previous text (before activating text gadget)
if (gi->type & GD_TYPE_TEXT_INPUT)
{
CheckRangeOfNumericInputGadget(gi);
}
CheckRangeOfNumericInputGadget(gi);
}
+ // store current text for text area gadgets when pressing "Escape" key
+ if (gi->type & GD_TYPE_TEXT_AREA)
+ {
+ if (!strEqual(gi->textarea.last_value, gi->textarea.value))
+ strcpy(gi->textarea.last_value, gi->textarea.value);
+ else
+ gadget_changed = FALSE;
+ }
+
DrawGadget(gi, DG_UNPRESSED, gi->direct_draw);
DrawGadget(gi, DG_UNPRESSED, gi->direct_draw);
+ if (gi->type & GD_TYPE_TEXT_AREA)
+ {
+ gi->event.type = GD_EVENT_TEXT_LEAVING;
+
+ DoGadgetCallbackAction(gi, gadget_changed);
+ }
+
last_gi = NULL;
StopTextInput();
last_gi = NULL;
StopTextInput();