ui/gtk/text.c

changeset 1153
f15375e0480c
parent 1149
76b7664f951e
child 1186
b114038a48da
equal deleted inserted replaced
1152:f560b35c8ca1 1153:f15375e0480c
95 #endif 95 #endif
96 96
97 static GtkTextBuffer* create_textbuffer(UiTextArea *textarea) { 97 static GtkTextBuffer* create_textbuffer(UiTextArea *textarea) {
98 GtkTextBuffer *buf = gtk_text_buffer_new(NULL); 98 GtkTextBuffer *buf = gtk_text_buffer_new(NULL);
99 if(textarea) { 99 if(textarea) {
100 /*
101 g_signal_connect( 100 g_signal_connect(
102 buf, 101 buf,
103 "changed", 102 "changed",
104 G_CALLBACK(ui_textbuf_changed), 103 G_CALLBACK(ui_textbuf_changed),
105 textarea); 104 textarea);
106 */
107 105
108 g_signal_connect( 106 g_signal_connect(
109 buf, 107 buf,
110 "insert-text", 108 "insert-text",
111 G_CALLBACK(ui_textbuf_changed_insert), 109 G_CALLBACK(ui_textbuf_change_insert),
112 textarea); 110 textarea);
113 g_signal_connect( 111 g_signal_connect(
114 buf, 112 buf,
115 "delete-range", 113 "delete-range",
116 G_CALLBACK(ui_textbuf_changed_delete), 114 G_CALLBACK(ui_textbuf_change_delete),
117 textarea); 115 textarea);
118 } else { 116 } else {
119 fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n"); 117 fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n");
120 } 118 }
121 return buf; 119 return buf;
140 uitext->ctx = obj->ctx; 138 uitext->ctx = obj->ctx;
141 uitext->var = var; 139 uitext->var = var;
142 uitext->last_selection_state = 0; 140 uitext->last_selection_state = 0;
143 uitext->onchange = args->onchange; 141 uitext->onchange = args->onchange;
144 uitext->onchangedata = args->onchangedata; 142 uitext->onchangedata = args->onchangedata;
145 uitext->action = args->action ? strdup(args->action) : NULL; 143 uitext->onchange_action = args->onchange_action ? strdup(args->onchange_action) : NULL;
144 uitext->ontextchanged = args->ontextchanged;
145 uitext->ontextchangeddata = args->ontextchangeddata;
146 uitext->ontextchanged_action = args->ontextchanged_action ? strdup(args->ontextchanged_action) : NULL;
146 147
147 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); 148 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext);
148 g_object_set_data(G_OBJECT(text_area), "ui_textarea_widget", text_area); 149 g_object_set_data(G_OBJECT(text_area), "ui_textarea_widget", text_area);
149 150
150 g_signal_connect( 151 g_signal_connect(
224 225
225 void ui_textarea_destroy(GtkWidget *object, UiTextArea *textarea) { 226 void ui_textarea_destroy(GtkWidget *object, UiTextArea *textarea) {
226 if(textarea->var) { 227 if(textarea->var) {
227 ui_destroy_boundvar(textarea->ctx, textarea->var); 228 ui_destroy_boundvar(textarea->ctx, textarea->var);
228 } 229 }
229 free(textarea->action); 230 free(textarea->onchange_action);
231 free(textarea->ontextchanged_action);
230 free(textarea); 232 free(textarea);
231 } 233 }
232 234
233 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { 235 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) {
234 GtkWidget *widget = ui_textarea_gettextwidget(textarea); 236 GtkWidget *widget = ui_textarea_gettextwidget(textarea);
461 void ui_textarea_realize_event(GtkWidget *widget, gpointer data) { 463 void ui_textarea_realize_event(GtkWidget *widget, gpointer data) {
462 gtk_widget_grab_focus(widget); 464 gtk_widget_grab_focus(widget);
463 } 465 }
464 466
465 467
466 void ui_textbuf_changed_insert( 468 static void textbuf_change_event(UiTextArea *textarea, UiTextChangeEventData *data) {
469 if(!ui_onchange_events_is_enabled()) {
470 return;
471 }
472
473 UiEvent e;
474 e.obj = textarea->obj;
475 e.window = e.obj->window;
476 e.document = textarea->ctx->document;
477 e.eventdata = data;
478 e.eventdatatype = UI_EVENT_DATA_TEXT_CHANGED;
479 e.intval = 0;
480 e.set = ui_get_setop();
481
482 if(textarea->onchange) {
483 textarea->onchange(&e, textarea->onchangedata);
484 }
485
486 if(textarea->onchange_action) {
487 uic_action_callback(&e, textarea->onchange_action);
488 }
489 }
490
491 void ui_textbuf_change_insert(
467 GtkTextBuffer *textbuffer, 492 GtkTextBuffer *textbuffer,
468 GtkTextIter *location, 493 GtkTextIter *location,
469 char *text, 494 char *text,
470 int length, 495 int length,
471 UiTextArea *textarea) 496 UiTextArea *textarea)
474 event.type = UI_TEXT_INSERT; 499 event.type = UI_TEXT_INSERT;
475 event.begin = gtk_text_iter_get_offset(location); 500 event.begin = gtk_text_iter_get_offset(location);
476 event.end = event.begin + length; 501 event.end = event.begin + length;
477 event.text = text; 502 event.text = text;
478 event.length = length; 503 event.length = length;
479 ui_textbuf_changed(textarea, &event); 504 textbuf_change_event(textarea, &event);
480 } 505 }
481 506
482 void ui_textbuf_changed_delete( 507 void ui_textbuf_change_delete(
483 GtkTextBuffer *self, 508 GtkTextBuffer *self,
484 const GtkTextIter *start, 509 const GtkTextIter *start,
485 const GtkTextIter *end, 510 const GtkTextIter *end,
486 UiTextArea *textarea) 511 UiTextArea *textarea)
487 { 512 {
489 event.type = UI_TEXT_DELETE; 514 event.type = UI_TEXT_DELETE;
490 event.begin = gtk_text_iter_get_offset(start); 515 event.begin = gtk_text_iter_get_offset(start);
491 event.end = gtk_text_iter_get_offset(end); 516 event.end = gtk_text_iter_get_offset(end);
492 event.text = NULL; 517 event.text = NULL;
493 event.length = 0; 518 event.length = 0;
494 ui_textbuf_changed(textarea, &event); 519 textbuf_change_event(textarea, &event);
495 } 520 }
496 521
497 522
498 // void ui_textbuf_changed(GtkTextBuffer *textbuffer, UiTextArea *textarea) 523 void ui_textbuf_changed(GtkTextBuffer *textbuffer, UiTextArea *textarea) {
499
500 void ui_textbuf_changed(UiTextArea *textarea, UiTextChangeEventData *data) {
501 if(!ui_onchange_events_is_enabled()) { 524 if(!ui_onchange_events_is_enabled()) {
502 return; 525 return;
503 } 526 }
504 527
505 UiText *value = textarea->var->value; 528 UiText *value = textarea->var->value;
506 529
507 UiEvent e; 530 UiEvent e;
508 e.obj = textarea->obj; 531 e.obj = textarea->obj;
509 e.window = e.obj->window; 532 e.window = e.obj->window;
510 e.document = textarea->ctx->document; 533 e.document = textarea->ctx->document;
511 e.eventdata = data; 534 e.eventdata = value;
512 e.eventdatatype = UI_EVENT_DATA_TEXT_CHANGED; 535 e.eventdatatype = UI_EVENT_DATA_TEXT_VALUE;
513 e.intval = 0; 536 e.intval = 0;
514 e.set = ui_get_setop(); 537 e.set = ui_get_setop();
515 538
516 if(textarea->onchange) { 539 if(textarea->ontextchanged) {
517 textarea->onchange(&e, textarea->onchangedata); 540 textarea->ontextchanged(&e, textarea->ontextchangeddata);
541 }
542
543 if(textarea->ontextchanged_action) {
544 uic_action_callback(&e, textarea->ontextchanged_action);
518 } 545 }
519 546
520 if(value->observers) { 547 if(value->observers) {
521 ui_notify_evt(value->observers, &e); 548 ui_notify_evt(value->observers, &e);
522 }
523
524 if(textarea->action) {
525 uic_action_callback(&e, textarea->action);
526 } 549 }
527 } 550 }
528 551
529 // undo manager functions 552 // undo manager functions
530 553

mercurial