ui/gtk/text.c

changeset 1149
76b7664f951e
parent 1142
e2a6707aa1e0
child 1153
f15375e0480c
equal deleted inserted replaced
1148:6ebe1b98f53b 1149:76b7664f951e
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 /*
100 g_signal_connect( 101 g_signal_connect(
101 buf, 102 buf,
102 "changed", 103 "changed",
103 G_CALLBACK(ui_textbuf_changed), 104 G_CALLBACK(ui_textbuf_changed),
104 textarea); 105 textarea);
106 */
107
108 g_signal_connect(
109 buf,
110 "insert-text",
111 G_CALLBACK(ui_textbuf_changed_insert),
112 textarea);
113 g_signal_connect(
114 buf,
115 "delete-range",
116 G_CALLBACK(ui_textbuf_changed_delete),
117 textarea);
105 } else { 118 } else {
106 fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n"); 119 fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n");
107 } 120 }
108 return buf; 121 return buf;
109 } 122 }
448 void ui_textarea_realize_event(GtkWidget *widget, gpointer data) { 461 void ui_textarea_realize_event(GtkWidget *widget, gpointer data) {
449 gtk_widget_grab_focus(widget); 462 gtk_widget_grab_focus(widget);
450 } 463 }
451 464
452 465
453 466 void ui_textbuf_changed_insert(
454 void ui_textbuf_changed(GtkTextBuffer *textbuffer, UiTextArea *textarea) { 467 GtkTextBuffer *textbuffer,
468 GtkTextIter *location,
469 char *text,
470 int length,
471 UiTextArea *textarea)
472 {
473 UiTextChangeEventData event;
474 event.type = UI_TEXT_INSERT;
475 event.begin = gtk_text_iter_get_offset(location);
476 event.end = event.begin + length;
477 event.text = text;
478 event.length = length;
479 ui_textbuf_changed(textarea, &event);
480 }
481
482 void ui_textbuf_changed_delete(
483 GtkTextBuffer *self,
484 const GtkTextIter *start,
485 const GtkTextIter *end,
486 UiTextArea *textarea)
487 {
488 UiTextChangeEventData event;
489 event.type = UI_TEXT_DELETE;
490 event.begin = gtk_text_iter_get_offset(start);
491 event.end = gtk_text_iter_get_offset(end);
492 event.text = NULL;
493 event.length = 0;
494 ui_textbuf_changed(textarea, &event);
495 }
496
497
498 // void ui_textbuf_changed(GtkTextBuffer *textbuffer, UiTextArea *textarea)
499
500 void ui_textbuf_changed(UiTextArea *textarea, UiTextChangeEventData *data) {
455 if(!ui_onchange_events_is_enabled()) { 501 if(!ui_onchange_events_is_enabled()) {
456 return; 502 return;
457 } 503 }
458 504
459 UiText *value = textarea->var->value; 505 UiText *value = textarea->var->value;
460 506
461 UiEvent e; 507 UiEvent e;
462 e.obj = textarea->obj; 508 e.obj = textarea->obj;
463 e.window = e.obj->window; 509 e.window = e.obj->window;
464 e.document = textarea->ctx->document; 510 e.document = textarea->ctx->document;
465 e.eventdata = value; 511 e.eventdata = data;
466 e.eventdatatype = UI_EVENT_DATA_TEXT_VALUE; 512 e.eventdatatype = UI_EVENT_DATA_TEXT_CHANGED;
467 e.intval = 0; 513 e.intval = 0;
468 e.set = ui_get_setop(); 514 e.set = ui_get_setop();
469 515
470 if(textarea->onchange) { 516 if(textarea->onchange) {
471 textarea->onchange(&e, textarea->onchangedata); 517 textarea->onchange(&e, textarea->onchangedata);

mercurial