ui/motif/text.c

changeset 907
d54a72c94320
parent 898
0484fc666c1d
child 925
df27741d02b5
equal deleted inserted replaced
906:edfdf9776da9 907:d54a72c94320
405 XtManageChild(textfield); 405 XtManageChild(textfield);
406 ui_container_add(ctn, textfield); 406 ui_container_add(ctn, textfield);
407 407
408 ui_set_widget_groups(obj->ctx, textfield, args->groups); 408 ui_set_widget_groups(obj->ctx, textfield, args->groups);
409 409
410 UiEventDataExt *eventdata = malloc(sizeof(UiEventDataExt));
411 memset(eventdata, 0, sizeof(UiEventDataExt));
412 eventdata->obj = obj;
413 eventdata->callback = args->onactivate;
414 eventdata->userdata = args->onactivatedata;
415 eventdata->callback2 = args->onchange;
416 eventdata->userdata2 = args->onchangedata;
417
410 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); 418 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
411 if(var) { 419 if(var) {
420 eventdata->customdata0 = var;
421
412 UiString *value = (UiString*)var->value; 422 UiString *value = (UiString*)var->value;
413 value->obj = textfield; 423 value->obj = textfield;
414 value->get = ui_textfield_get; 424 value->get = ui_textfield_get;
415 value->set = ui_textfield_set; 425 value->set = ui_textfield_set;
416 426
417 if(value->value.ptr) { 427 if(value->value.ptr) {
418 ui_textfield_set(value, value->value.ptr); 428 ui_textfield_set(value, value->value.ptr);
419 } 429 }
420 } 430 }
421 431
432 XtAddCallback(
433 textfield,
434 XmNactivateCallback,
435 (XtCallbackProc)ui_textfield_activate,
436 eventdata);
437 XtAddCallback(
438 textfield,
439 XmNvalueChangedCallback,
440 (XtCallbackProc)ui_textfield_value_changed,
441 eventdata);
442 XtAddCallback(
443 textfield,
444 XmNdestroyCallback,
445 (XtCallbackProc)ui_destroy_data,
446 eventdata);
447
422 return textfield; 448 return textfield;
449 }
450
451 static void textfield_event(UiEventDataExt *eventdata, ui_callback callback, void *userdata) {
452 if(callback) {
453 UiVar *var = eventdata->customdata0;
454 UiString *value = var ? var->value : NULL;
455
456 UiEvent e;
457 e.obj = eventdata->obj;
458 e.window = e.obj->window;
459 e.document = e.obj->ctx->document;
460 e.eventdata = value;
461 e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0;
462 e.intval = 0;
463 e.set = ui_get_setop();
464 callback(&e, userdata);
465 }
466 }
467
468 void ui_textfield_activate(Widget widget, XtPointer ud, XtPointer cb) {
469 UiEventDataExt *eventdata = ud;
470 textfield_event(ud, eventdata->callback, eventdata->userdata);
471 }
472
473 void ui_textfield_value_changed(Widget widget, XtPointer ud, XtPointer cb) {
474 UiEventDataExt *eventdata = ud;
475 if(ui_onchange_events_is_enabled()) {
476 textfield_event(ud, eventdata->callback2, eventdata->userdata2);
477 }
423 } 478 }
424 479
425 UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) { 480 UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
426 return create_textfield(obj, args, FALSE, FALSE); 481 return create_textfield(obj, args, FALSE, FALSE);
427 } 482 }

mercurial