172 var->from = from; |
172 var->from = from; |
173 |
173 |
174 return var; |
174 return var; |
175 } |
175 } |
176 } else { |
176 } else { |
177 // create an empty value and add it first to the window variables |
177 // create an empty value and add it to the window variables |
178 // it can be moved to the document vars later |
178 // it can be moved to the document vars later |
179 void *value = uic_create_value(ctx->mempool->allocator, type); |
179 void *value = uic_create_value(ctx->mempool->allocator, type); |
180 if(!value) { |
180 if(!value) { |
181 fprintf(stderr, "UI Error: Cannot create empty value.\n"); |
181 fprintf(stderr, "UI Error: Cannot create empty value.\n"); |
182 return NULL; |
182 return NULL; |
215 } |
215 } |
216 case UI_VAR_TEXT: { |
216 case UI_VAR_TEXT: { |
217 UiText *f = from->value; |
217 UiText *f = from->value; |
218 UiText *t = to->value; |
218 UiText *t = to->value; |
219 char *tvalue = t->value; |
219 char *tvalue = t->value; |
|
220 int tpos = t->pos; |
220 memcpy(t, f, sizeof(UiText)); |
221 memcpy(t, f, sizeof(UiText)); |
221 if(set && tvalue) { |
222 if(set && tvalue) { |
222 t->set(t, tvalue); |
223 t->set(t, tvalue); |
|
224 t->setposition(t, tpos); |
223 } else { |
225 } else { |
224 f->value = f->get(f); |
226 f->value = f->get(f); |
|
227 f->pos = f->position(f); |
225 } |
228 } |
226 break; |
229 break; |
227 } |
230 } |
228 case UI_VAR_LIST: { |
231 case UI_VAR_LIST: { |
229 UiListVar *f = from->value; |
232 UiListVar *f = from->value; |