| 127 uitext->ctx = obj->ctx; |
127 uitext->ctx = obj->ctx; |
| 128 uitext->var = var; |
128 uitext->var = var; |
| 129 uitext->last_selection_state = 0; |
129 uitext->last_selection_state = 0; |
| 130 uitext->onchange = args->onchange; |
130 uitext->onchange = args->onchange; |
| 131 uitext->onchangedata = args->onchangedata; |
131 uitext->onchangedata = args->onchangedata; |
| |
132 uitext->action = args->action ? strdup(args->action) : NULL; |
| 132 |
133 |
| 133 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); |
134 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); |
| 134 g_object_set_data(G_OBJECT(text_area), "ui_textarea_widget", text_area); |
135 g_object_set_data(G_OBJECT(text_area), "ui_textarea_widget", text_area); |
| 135 |
136 |
| 136 g_signal_connect( |
137 g_signal_connect( |
| 210 |
211 |
| 211 void ui_textarea_destroy(GtkWidget *object, UiTextArea *textarea) { |
212 void ui_textarea_destroy(GtkWidget *object, UiTextArea *textarea) { |
| 212 if(textarea->var) { |
213 if(textarea->var) { |
| 213 ui_destroy_boundvar(textarea->ctx, textarea->var); |
214 ui_destroy_boundvar(textarea->ctx, textarea->var); |
| 214 } |
215 } |
| |
216 free(textarea->action); |
| 215 free(textarea); |
217 free(textarea); |
| 216 } |
218 } |
| 217 |
219 |
| 218 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { |
220 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { |
| 219 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
221 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| 658 uitext->var = var; |
664 uitext->var = var; |
| 659 uitext->onchange = args->onchange; |
665 uitext->onchange = args->onchange; |
| 660 uitext->onchangedata = args->onchangedata; |
666 uitext->onchangedata = args->onchangedata; |
| 661 uitext->onactivate = args->onactivate; |
667 uitext->onactivate = args->onactivate; |
| 662 uitext->onactivatedata = args->onactivatedata; |
668 uitext->onactivatedata = args->onactivatedata; |
| |
669 uitext->onactivate_action = args->onactivate_action ? strdup(args->onactivate_action) : NULL; |
| |
670 uitext->onchange_action = args->onchange_action ? strdup(args->onchange_action) : NULL; |
| 663 |
671 |
| 664 g_signal_connect( |
672 g_signal_connect( |
| 665 textfield, |
673 textfield, |
| 666 "destroy", |
674 "destroy", |
| 667 G_CALLBACK(ui_textfield_destroy), |
675 G_CALLBACK(ui_textfield_destroy), |
| 701 value->value.ptr = NULL; |
709 value->value.ptr = NULL; |
| 702 value->value.free = NULL; |
710 value->value.free = NULL; |
| 703 value->obj = GTK_ENTRY(textfield); |
711 value->obj = GTK_ENTRY(textfield); |
| 704 } |
712 } |
| 705 |
713 |
| 706 if(args->onchange || var) { |
714 if(args->onchange || args->onchange_action || var) { |
| 707 g_signal_connect( |
715 g_signal_connect( |
| 708 textfield, |
716 textfield, |
| 709 "changed", |
717 "changed", |
| 710 G_CALLBACK(ui_textfield_changed), |
718 G_CALLBACK(ui_textfield_changed), |
| 711 uitext); |
719 uitext); |
| 712 } |
720 } |
| 713 |
721 |
| 714 if(args->onactivate) { |
722 if(args->onactivate || args->onactivate_action) { |
| 715 g_signal_connect( |
723 g_signal_connect( |
| 716 textfield, |
724 textfield, |
| 717 "activate", |
725 "activate", |
| 718 G_CALLBACK(ui_textfield_activate), |
726 G_CALLBACK(ui_textfield_activate), |
| 719 uitext); |
727 uitext); |
| 769 int ui_textfield_get_position(UIWIDGET textfield) { |
777 int ui_textfield_get_position(UIWIDGET textfield) { |
| 770 return ENTRY_GET_POSITION(textfield); |
778 return ENTRY_GET_POSITION(textfield); |
| 771 } |
779 } |
| 772 |
780 |
| 773 void ui_textfield_destroy(GtkWidget *object, UiTextField *textfield) { |
781 void ui_textfield_destroy(GtkWidget *object, UiTextField *textfield) { |
| |
782 free(textfield->onactivate_action); |
| |
783 free(textfield->onchange_action); |
| 774 free(textfield); |
784 free(textfield); |
| 775 } |
785 } |
| 776 |
786 |
| 777 void ui_textfield_changed(GtkEditable *editable, UiTextField *textfield) { |
787 void ui_textfield_changed(GtkEditable *editable, UiTextField *textfield) { |
| 778 if(!ui_onchange_events_is_enabled()) { |
788 if(!ui_onchange_events_is_enabled()) { |
| 779 return; |
789 return; |
| 780 } |
790 } |
| 781 |
791 |
| 782 UiString *value = textfield->var ? textfield->var->value : NULL; |
792 UiString *value = textfield->var ? textfield->var->value : NULL; |
| 783 |
793 |
| |
794 UiEvent e; |
| |
795 e.obj = textfield->obj; |
| |
796 e.window = e.obj->window; |
| |
797 e.document = textfield->obj->ctx->document; |
| |
798 e.eventdata = value; |
| |
799 e.eventdatatype = value ? UI_EVENT_DATA_STRING_VALUE : 0; |
| |
800 e.intval = 0; |
| |
801 e.set = ui_get_setop(); |
| |
802 |
| |
803 if(textfield->onchange) { |
| |
804 textfield->onchange(&e, textfield->onchangedata); |
| |
805 } |
| |
806 |
| |
807 if(textfield->var) { |
| |
808 ui_notify_evt(value->observers, &e); |
| |
809 } |
| |
810 |
| |
811 if(textfield->onchange_action) { |
| |
812 uic_action_callback(&e, textfield->onchange_action); |
| |
813 } |
| |
814 } |
| |
815 |
| |
816 void ui_textfield_activate(GtkEntry* self, UiTextField *textfield) { |
| |
817 UiString *value = textfield->var ? textfield->var->value : NULL; |
| |
818 |
| 784 UiEvent e; |
819 UiEvent e; |
| 785 e.obj = textfield->obj; |
820 e.obj = textfield->obj; |
| 786 e.window = e.obj->window; |
821 e.window = e.obj->window; |
| 787 e.document = textfield->obj->ctx->document; |
822 e.document = textfield->obj->ctx->document; |
| 788 e.eventdata = value; |
823 e.eventdata = value; |
| 789 e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0; |
824 e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0; |
| 790 e.intval = 0; |
825 e.intval = 0; |
| 791 e.set = ui_get_setop(); |
826 e.set = ui_get_setop(); |
| 792 |
827 |
| 793 if(textfield->onchange) { |
|
| 794 textfield->onchange(&e, textfield->onchangedata); |
|
| 795 } |
|
| 796 |
|
| 797 if(textfield->var) { |
|
| 798 ui_notify_evt(value->observers, &e); |
|
| 799 } |
|
| 800 } |
|
| 801 |
|
| 802 void ui_textfield_activate(GtkEntry* self, UiTextField *textfield) { |
|
| 803 if(textfield->onactivate) { |
828 if(textfield->onactivate) { |
| 804 UiString *value = textfield->var ? textfield->var->value : NULL; |
|
| 805 |
|
| 806 UiEvent e; |
|
| 807 e.obj = textfield->obj; |
|
| 808 e.window = e.obj->window; |
|
| 809 e.document = textfield->obj->ctx->document; |
|
| 810 e.eventdata = value; |
|
| 811 e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0; |
|
| 812 e.intval = 0; |
|
| 813 e.set = ui_get_setop(); |
|
| 814 textfield->onactivate(&e, textfield->onactivatedata); |
829 textfield->onactivate(&e, textfield->onactivatedata); |
| |
830 } |
| |
831 |
| |
832 if(textfield->onactivate_action) { |
| |
833 uic_action_callback(&e, textfield->onactivate_action); |
| 815 } |
834 } |
| 816 } |
835 } |
| 817 |
836 |
| 818 char* ui_textfield_get(UiString *str) { |
837 char* ui_textfield_get(UiString *str) { |
| 819 if(str->value.ptr) { |
838 if(str->value.ptr) { |