| 845 gtk_imhtml_page_down(GTK_IMHTML(c->text)); |
836 gtk_imhtml_page_down(GTK_IMHTML(c->text)); |
| 846 } else if ((event->keyval == GDK_F2) && (convo_options & OPT_CONVO_F2_TOGGLES)) { |
837 } else if ((event->keyval == GDK_F2) && (convo_options & OPT_CONVO_F2_TOGGLES)) { |
| 847 gtk_imhtml_show_comments(GTK_IMHTML(c->text), !GTK_IMHTML(c->text)->comments); |
838 gtk_imhtml_show_comments(GTK_IMHTML(c->text), !GTK_IMHTML(c->text)->comments); |
| 848 } else if ((event->keyval == GDK_Return) || (event->keyval == GDK_KP_Enter)) { |
839 } else if ((event->keyval == GDK_Return) || (event->keyval == GDK_KP_Enter)) { |
| 849 if ((event->state & GDK_CONTROL_MASK) && (convo_options & OPT_CONVO_CTL_ENTER)) { |
840 if ((event->state & GDK_CONTROL_MASK) && (convo_options & OPT_CONVO_CTL_ENTER)) { |
| 850 gtk_signal_emit_by_name(GTK_OBJECT(entry), "activate", c); |
841 send_callback(NULL, c); |
| 851 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
842 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 852 return TRUE; |
843 return TRUE; |
| 853 } else if (!(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) && (convo_options & OPT_CONVO_ENTER_SENDS)) { |
844 } else if (!(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) && (convo_options & OPT_CONVO_ENTER_SENDS)) { |
| 854 gtk_signal_emit_by_name(GTK_OBJECT(entry), "activate", c); |
845 send_callback(NULL, c); |
| 855 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
846 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 856 return TRUE; |
847 return TRUE; |
| 857 } else { |
848 } else { |
| 858 int oldpos; |
849 return FALSE; |
| 859 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
|
| 860 oldpos = pos = gtk_editable_get_position(GTK_EDITABLE(entry)); |
|
| 861 gtk_editable_insert_text(GTK_EDITABLE(entry), "\n", 1, &pos); |
|
| 862 if (oldpos == pos) |
|
| 863 gtk_editable_set_position(GTK_EDITABLE(entry), pos + 1); |
|
| 864 return TRUE; |
|
| 865 } |
850 } |
| 866 } else if ((event->state & GDK_CONTROL_MASK) && (event->keyval == 'm')) { |
851 } else if ((event->state & GDK_CONTROL_MASK) && (event->keyval == 'm')) { |
| 867 int oldpos; |
|
| 868 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
852 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 869 oldpos = pos = gtk_editable_get_position(GTK_EDITABLE(entry)); |
853 gtk_text_buffer_insert_at_cursor(c->entry_buffer, "\n", 1); |
| 870 gtk_editable_insert_text(GTK_EDITABLE(entry), "\n", 1, &pos); |
|
| 871 if (oldpos == pos) |
|
| 872 gtk_editable_set_position(GTK_EDITABLE(entry), pos + 1); |
|
| 873 } else if (event->state & GDK_CONTROL_MASK) { |
854 } else if (event->state & GDK_CONTROL_MASK) { |
| 874 int pos = 0; |
|
| 875 switch (event->keyval) { |
855 switch (event->keyval) { |
| 876 case GDK_Up: |
856 case GDK_Up: |
| 877 if (!c->send_history) |
857 if (!c->send_history) |
| 878 break; |
858 break; |
| 879 if (!c->send_history->prev) { |
859 if (!c->send_history->prev) { |
| |
860 GtkTextIter start, end; |
| 880 if (c->send_history->data) |
861 if (c->send_history->data) |
| 881 g_free(c->send_history->data); |
862 g_free(c->send_history->data); |
| 882 c->send_history->data = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); |
863 gtk_text_buffer_get_start_iter(c->entry_buffer, &start); |
| |
864 gtk_text_buffer_get_end_iter(c->entry_buffer, &end); |
| |
865 c->send_history->data = gtk_text_buffer_get_text(c->entry_buffer, |
| |
866 &start, &end, FALSE); |
| 883 } |
867 } |
| 884 if (c->send_history->next && c->send_history->next->data) { |
868 if (c->send_history->next && c->send_history->next->data) { |
| 885 c->send_history = c->send_history->next; |
869 c->send_history = c->send_history->next; |
| 886 gtk_editable_delete_text (GTK_EDITABLE(entry),0,-1); |
870 gtk_text_buffer_set_text(c->entry_buffer, c->send_history->data, -1); |
| 887 gtk_editable_insert_text(GTK_EDITABLE(entry), |
|
| 888 c->send_history->data, |
|
| 889 strlen(c->send_history->data), |
|
| 890 &pos); |
|
| 891 } |
871 } |
| 892 |
872 |
| 893 break; |
873 break; |
| 894 case GDK_Down: |
874 case GDK_Down: |
| 895 if (!c->send_history) |
875 if (!c->send_history) |
| 896 break; |
876 break; |
| 897 if (c->send_history->prev) { |
877 if (c->send_history->prev) { |
| 898 c->send_history = c->send_history->prev; |
878 c->send_history = c->send_history->prev; |
| 899 if (c->send_history->data) { |
879 if (c->send_history->data) { |
| 900 gtk_editable_delete_text (GTK_EDITABLE(entry),0,-1); |
880 gtk_text_buffer_set_text(c->entry_buffer, c->send_history->data, -1); |
| 901 gtk_editable_insert_text (GTK_EDITABLE(entry), c->send_history->data, |
|
| 902 strlen(c->send_history->data), &pos); |
|
| 903 |
|
| 904 } |
881 } |
| 905 } |
882 } |
| 906 break; |
883 break; |
| 907 } |
884 } |
| 908 if (convo_options & OPT_CONVO_CTL_CHARS) { |
885 if (convo_options & OPT_CONVO_CTL_CHARS) { |
| 909 switch (event->keyval) { |
886 switch (event->keyval) { |
| 910 case 'i': |
887 case 'i': |
| 911 case 'I': |
888 case 'I': |
| 912 quiet_set(c->italic, |
889 quiet_set(c->italic, |
| 913 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(c->italic))); |
890 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(c->italic))); |
| 914 do_italic(c->italic, c->entry); |
891 do_italic(c->italic, c); |
| 915 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
892 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 916 break; |
893 break; |
| 917 case 'u': /* ctl-u is GDK_Clear, which clears the line */ |
894 case 'u': /* ctl-u is GDK_Clear, which clears the line */ |
| 918 case 'U': |
895 case 'U': |
| 919 quiet_set(c->underline, |
896 quiet_set(c->underline, |
| 920 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON |
897 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON |
| 921 (c->underline))); |
898 (c->underline))); |
| 922 do_underline(c->underline, c->entry); |
899 do_underline(c->underline, c); |
| 923 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
900 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 924 break; |
901 break; |
| 925 case 'b': /* ctl-b is GDK_Left, which moves backwards */ |
902 case 'b': /* ctl-b is GDK_Left, which moves backwards */ |
| 926 case 'B': |
903 case 'B': |
| 927 quiet_set(c->bold, |
904 quiet_set(c->bold, |
| 928 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(c->bold))); |
905 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(c->bold))); |
| 929 do_bold(c->bold, c->entry); |
906 do_bold(c->bold, c); |
| 930 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
907 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 931 break; |
908 break; |
| 932 case '-': |
909 case '-': |
| 933 do_small(NULL, c->entry); |
910 do_small(NULL, c); |
| 934 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
911 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 935 break; |
912 break; |
| 936 case '=': |
913 case '=': |
| 937 case '+': |
914 case '+': |
| 938 do_big(NULL, c->entry); |
915 do_big(NULL, c); |
| 939 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
916 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 940 break; |
917 break; |
| 941 case '0': |
918 case '0': |
| 942 do_normal(NULL, c->entry); |
919 do_normal(NULL, c); |
| 943 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
920 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); |
| 944 break; |
921 break; |
| 945 case 'f': |
922 case 'f': |
| 946 case 'F': |
923 case 'F': |
| 947 quiet_set(c->font, |
924 quiet_set(c->font, |
| 1086 else |
1069 else |
| 1087 c->type_again = 0; |
1070 c->type_again = 0; |
| 1088 } |
1071 } |
| 1089 } |
1072 } |
| 1090 |
1073 |
| 1091 void delete_text_callback(GtkEditable *editable, gint start_pos, gint end_pos, gpointer user_data) { |
1074 void delete_text_callback(GtkTextBuffer *textbuffer, GtkTextIter *start_pos, GtkTextIter *end_pos, gpointer user_data) { |
| 1092 struct conversation *c = user_data; |
1075 struct conversation *c = user_data; |
| 1093 gchar *contents; |
|
| 1094 |
1076 |
| 1095 if(!c) |
1077 if(!c) |
| 1096 return; |
1078 return; |
| 1097 |
1079 |
| 1098 if (misc_options & OPT_MISC_STEALTH_TYPING) |
1080 if (misc_options & OPT_MISC_STEALTH_TYPING) |
| 1099 return; |
1081 return; |
| 1100 |
1082 |
| 1101 contents = gtk_editable_get_chars(editable, 0, -1); |
1083 if(gtk_text_iter_is_start(start_pos) && gtk_text_iter_is_end(end_pos)) { |
| 1102 if(start_pos == 0 && (end_pos == strlen(contents) || end_pos == -1)) { |
|
| 1103 if(c->type_again_timeout) |
1084 if(c->type_again_timeout) |
| 1104 gtk_timeout_remove(c->type_again_timeout); |
1085 gtk_timeout_remove(c->type_again_timeout); |
| 1105 serv_send_typing(c->gc, c->name, NOT_TYPING); |
1086 serv_send_typing(c->gc, c->name, NOT_TYPING); |
| 1106 } else { |
1087 } else { |
| 1107 /* we're deleting, but not all of it, so it counts as typing */ |
1088 /* we're deleting, but not all of it, so it counts as typing */ |
| 1108 got_typing_keypress(c, FALSE); |
1089 got_typing_keypress(c, FALSE); |
| 1109 } |
1090 } |
| 1110 g_free(contents); |
1091 } |
| 1111 } |
1092 |
| 1112 |
1093 void insert_text_callback(GtkTextBuffer *textbuffer, GtkTextIter *position, gchar *new_text, gint new_text_length, gpointer user_data) { |
| 1113 void insert_text_callback(GtkEditable *editable, gchar *new_text, gint new_text_length, gint *position, gpointer user_data) { |
|
| 1114 struct conversation *c = user_data; |
1094 struct conversation *c = user_data; |
| 1115 gchar *contents; |
|
| 1116 |
1095 |
| 1117 if(!c) |
1096 if(!c) |
| 1118 return; |
1097 return; |
| 1119 |
1098 |
| 1120 if (misc_options & OPT_MISC_STEALTH_TYPING) |
1099 if (misc_options & OPT_MISC_STEALTH_TYPING) |
| 1121 return; |
1100 return; |
| 1122 |
1101 |
| 1123 contents = gtk_editable_get_chars(editable, 0, -1); |
1102 got_typing_keypress(c, (gtk_text_iter_is_start(position) && gtk_text_iter_is_end(position))); |
| 1124 got_typing_keypress(c, (*position == 0 && strlen(contents) == 0)); |
|
| 1125 g_free(contents); |
|
| 1126 } |
1103 } |
| 1127 |
1104 |
| 1128 void send_callback(GtkWidget *widget, struct conversation *c) |
1105 void send_callback(GtkWidget *widget, struct conversation *c) |
| 1129 { |
1106 { |
| 1130 char *buf, *buf2; |
1107 char *buf, *buf2; |
| 1131 int limit; |
1108 int limit; |
| 1132 gulong length=0; |
1109 gulong length=0; |
| 1133 int err = 0; |
1110 int err = 0; |
| 1134 GList *first; |
1111 GList *first; |
| |
1112 GtkTextIter start_iter, end_iter; |
| 1135 |
1113 |
| 1136 if (!c->gc) |
1114 if (!c->gc) |
| 1137 return; |
1115 return; |
| 1138 |
1116 |
| 1139 |
1117 gtk_text_buffer_get_start_iter(c->entry_buffer, &start_iter); |
| 1140 buf2 = gtk_editable_get_chars(GTK_EDITABLE(c->entry), 0, -1); |
1118 gtk_text_buffer_get_end_iter(c->entry_buffer, &end_iter); |
| |
1119 buf2 = gtk_text_buffer_get_text(c->entry_buffer, &start_iter, &end_iter, FALSE); |
| 1141 limit = 32 * 1024; /* you shouldn't be sending more than 32k in your messages. that's a book. */ |
1120 limit = 32 * 1024; /* you shouldn't be sending more than 32k in your messages. that's a book. */ |
| 1142 buf = g_malloc(limit); |
1121 buf = g_malloc(limit); |
| 1143 g_snprintf(buf, limit, "%s", buf2); |
1122 g_snprintf(buf, limit, "%s", buf2); |
| 1144 g_free(buf2); |
1123 g_free(buf2); |
| 1145 if (!strlen(buf)) { |
1124 if (!strlen(buf)) { |
| 1412 res = 0; |
1394 res = 0; |
| 1413 tmp = p2 + strlen(s2); |
1395 tmp = p2 + strlen(s2); |
| 1414 } |
1396 } |
| 1415 } |
1397 } |
| 1416 } while (p1 || p2); |
1398 } while (p1 || p2); |
| 1417 tmpo[GTK_OLD_EDITABLE(entry)->current_pos] = h; |
|
| 1418 g_free(tmpo); |
1399 g_free(tmpo); |
| 1419 return res; |
1400 return res; |
| 1420 } |
1401 } |
| 1421 |
1402 |
| 1422 |
1403 |
| 1423 int invert_tags(GtkWidget *entry, char *s1, char *s2, int really) |
1404 gboolean invert_tags(GtkTextBuffer *buffer, char *s1, char *s2, gboolean really) |
| 1424 { |
1405 { |
| 1425 int start = GTK_OLD_EDITABLE(entry)->selection_start_pos; |
1406 GtkTextIter start1, start2, end1, end2; |
| 1426 int finish = GTK_OLD_EDITABLE(entry)->selection_end_pos; |
1407 char *b1, *b2; |
| 1427 char *s; |
1408 |
| 1428 |
1409 if (gtk_text_buffer_get_selection_bounds(buffer, &start1, &end2)) { |
| 1429 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); |
1410 start2 = start1; end1 = end2; |
| 1430 if (!g_strncasecmp(&s[start], s1, strlen(s1)) && |
1411 if (!gtk_text_iter_forward_chars(&start2, strlen(s1))) |
| 1431 !g_strncasecmp(&s[finish - strlen(s2)], s2, strlen(s2))) { |
1412 return FALSE; |
| 1432 if (really) { |
1413 if (!gtk_text_iter_backward_chars(&end1, strlen(s2))) |
| 1433 gtk_editable_delete_text(GTK_EDITABLE(entry), start, start + strlen(s1)); |
1414 return FALSE; |
| 1434 gtk_editable_delete_text(GTK_EDITABLE(entry), finish - strlen(s2) - strlen(s1), |
1415 b1 = gtk_text_buffer_get_text(buffer, &start1, &start2, FALSE); |
| 1435 finish - strlen(s1)); |
1416 b2 = gtk_text_buffer_get_text(buffer, &end1, &end2, FALSE); |
| 1436 } |
1417 if (!g_strncasecmp(b1, s1, strlen(s1)) && |
| 1437 g_free(s); |
1418 !g_strncasecmp(b2, s2, strlen(s2))) { |
| 1438 return 1; |
1419 if (really) { |
| 1439 } |
1420 GtkTextMark *m_end1, *m_end2; |
| 1440 g_free(s); |
1421 |
| 1441 return 0; |
1422 m_end1= gtk_text_buffer_create_mark(buffer, "m1", &end1, TRUE); |
| 1442 } |
1423 m_end2= gtk_text_buffer_create_mark(buffer, "m2", &end2, TRUE); |
| 1443 |
1424 |
| 1444 |
1425 gtk_text_buffer_delete(buffer, &start1, &start2); |
| 1445 void remove_tags(GtkWidget *entry, char *tag) |
1426 gtk_text_buffer_get_iter_at_mark(buffer, &end1, m_end1); |
| 1446 { |
1427 gtk_text_buffer_get_iter_at_mark(buffer, &end2, m_end2); |
| 1447 char *s, *t; |
1428 gtk_text_buffer_delete(buffer, &end1, &end2); |
| 1448 int start = GTK_OLD_EDITABLE(entry)->selection_start_pos; |
1429 gtk_text_buffer_delete_mark(buffer, m_end1); |
| 1449 int finish = GTK_OLD_EDITABLE(entry)->selection_end_pos; |
1430 gtk_text_buffer_delete_mark(buffer, m_end2); |
| 1450 int temp; |
1431 } |
| 1451 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); |
1432 g_free(b1); g_free(b2); |
| 1452 t = s; |
1433 return TRUE; |
| 1453 |
1434 } |
| 1454 if (start > finish) { |
1435 g_free(b1);g_free(b2); |
| 1455 temp = start; |
1436 } |
| 1456 start = finish; |
1437 return FALSE; |
| 1457 finish = temp; |
1438 } |
| 1458 } |
1439 |
| 1459 |
1440 |
| 1460 if (strstr(tag, "<FONT SIZE=")) { |
1441 void remove_tags(struct conversation *c, char *tag) |
| |
1442 { |
| |
1443 GtkTextIter start, end, m_start, m_end; |
| |
1444 |
| |
1445 if (!gtk_text_buffer_get_selection_bounds(c->entry_buffer, |
| |
1446 &start, &end)) |
| |
1447 return; |
| |
1448 |
| |
1449 /* FIXMEif (strstr(tag, "<FONT SIZE=")) { |
| 1461 while ((t = strstr(t, "<FONT SIZE="))) { |
1450 while ((t = strstr(t, "<FONT SIZE="))) { |
| 1462 if (((t - s) < finish) && ((t - s) >= start)) { |
1451 if (((t - s) < finish) && ((t - s) >= start)) { |
| 1463 gtk_editable_delete_text(GTK_EDITABLE(entry), (t - s), |
1452 gtk_editable_delete_text(GTK_EDITABLE(entry), (t - s), |
| 1464 (t - s) + strlen(tag)); |
1453 (t - s) + strlen(tag)); |
| 1465 g_free(s); |
1454 g_free(s); |
| 1466 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); |
1455 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); |
| 1467 t = s; |
1456 t = s; |
| 1468 } else |
1457 } else |
| 1469 t++; |
1458 t++; |
| 1470 } |
1459 } |
| 1471 } else { |
1460 } else*/ { |
| 1472 while ((t = strstr(t, tag))) { |
1461 while (gtk_text_iter_forward_search(&start, tag, 0, &m_start, &m_end, &end)) { |
| 1473 if (((t - s) < finish) && ((t - s) >= start)) { |
1462 gtk_text_buffer_delete(c->entry_buffer, &m_start, &m_end); |
| 1474 gtk_editable_delete_text(GTK_EDITABLE(entry), (t - s), |
1463 gtk_text_buffer_get_selection_bounds(c->entry_buffer, &start, &end); |
| 1475 (t - s) + strlen(tag)); |
1464 } |
| 1476 g_free(s); |
1465 } |
| 1477 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); |
|
| 1478 t = s; |
|
| 1479 } else |
|
| 1480 t++; |
|
| 1481 } |
|
| 1482 } |
|
| 1483 g_free(s); |
|
| 1484 } |
1466 } |
| 1485 |
1467 |
| 1486 static char *html_logize(char *p) |
1468 static char *html_logize(char *p) |
| 1487 { |
1469 { |
| 1488 |
1470 |
| 1522 *buffer_p = '\0'; |
1504 *buffer_p = '\0'; |
| 1523 |
1505 |
| 1524 return buffer_start; |
1506 return buffer_start; |
| 1525 } |
1507 } |
| 1526 |
1508 |
| 1527 void surround(GtkWidget *entry, char *pre, char *post) |
1509 void surround(struct conversation *c, char *pre, char *post) |
| 1528 { |
1510 { |
| 1529 int temp, pos = GTK_OLD_EDITABLE(entry)->current_pos; |
1511 GtkTextIter start, end; |
| 1530 int dummy; |
1512 GtkTextMark *mark_start, *mark_end; |
| 1531 int start, finish; |
1513 |
| 1532 |
1514 /* if (convo_options & OPT_CONVO_CHECK_SPELLING) { |
| 1533 if (convo_options & OPT_CONVO_CHECK_SPELLING) { |
|
| 1534 gtkspell_detach(GTK_TEXT(entry)); |
1515 gtkspell_detach(GTK_TEXT(entry)); |
| 1535 } |
1516 }*/ |
| 1536 |
1517 |
| 1537 if (GTK_OLD_EDITABLE(entry)->has_selection) { |
1518 if (gtk_text_buffer_get_selection_bounds(c->entry_buffer, &start, &end)) { |
| 1538 remove_tags(entry, pre); |
1519 remove_tags(c, pre); |
| 1539 remove_tags(entry, post); |
1520 remove_tags(c, post); |
| 1540 start = GTK_OLD_EDITABLE(entry)->selection_start_pos; |
1521 |
| 1541 finish = GTK_OLD_EDITABLE(entry)->selection_end_pos; |
1522 mark_start = gtk_text_buffer_create_mark(c->entry_buffer, "m1", &start, TRUE); |
| 1542 if (start > finish) { |
1523 mark_end = gtk_text_buffer_create_mark(c->entry_buffer, "m2", &end, FALSE); |
| 1543 dummy = finish; |
1524 gtk_text_buffer_insert(c->entry_buffer, &start, pre, -1); |
| 1544 finish = start; |
1525 gtk_text_buffer_get_selection_bounds(c->entry_buffer, &start, &end); |
| 1545 start = dummy; |
1526 gtk_text_buffer_insert(c->entry_buffer, &end, post, -1); |
| 1546 } |
1527 gtk_text_buffer_get_iter_at_mark(c->entry_buffer, &start, mark_start); |
| 1547 dummy = start; |
1528 gtk_text_buffer_move_mark_by_name(c->entry_buffer, "selection_bound", &start); |
| 1548 gtk_editable_insert_text(GTK_EDITABLE(entry), pre, strlen(pre), &dummy); |
|
| 1549 dummy = finish + strlen(pre); |
|
| 1550 gtk_editable_insert_text(GTK_EDITABLE(entry), post, strlen(post), &dummy); |
|
| 1551 gtk_editable_select_region(GTK_EDITABLE(entry), start, |
|
| 1552 finish + strlen(pre) + strlen(post)); |
|
| 1553 } else { |
1529 } else { |
| 1554 temp = pos; |
1530 gtk_text_buffer_insert(c->entry_buffer, &start, pre, -1); |
| 1555 gtk_editable_insert_text(GTK_EDITABLE(entry), pre, strlen(pre), &pos); |
1531 gtk_text_buffer_insert(c->entry_buffer, &start, post, -1); |
| 1556 if (temp == pos) { |
1532 mark_start = gtk_text_buffer_get_insert(c->entry_buffer); |
| 1557 dummy = pos + strlen(pre); |
1533 gtk_text_buffer_get_iter_at_mark(c->entry_buffer, &start, mark_start); |
| 1558 gtk_editable_insert_text(GTK_EDITABLE(entry), post, strlen(post), &dummy); |
1534 gtk_text_iter_backward_chars(&start, strlen(post)); |
| 1559 gtk_editable_set_position(GTK_EDITABLE(entry), dummy); |
1535 gtk_text_buffer_place_cursor(c->entry_buffer, &start); |
| 1560 } else { |
1536 } |
| 1561 dummy = pos; |
1537 |
| 1562 gtk_editable_insert_text(GTK_EDITABLE(entry), post, strlen(post), &dummy); |
1538 /* if (convo_options & OPT_CONVO_CHECK_SPELLING) { |
| 1563 gtk_editable_set_position(GTK_EDITABLE(entry), pos); |
|
| 1564 } |
|
| 1565 } |
|
| 1566 |
|
| 1567 if (convo_options & OPT_CONVO_CHECK_SPELLING) { |
|
| 1568 gtkspell_attach(GTK_TEXT(entry)); |
1539 gtkspell_attach(GTK_TEXT(entry)); |
| 1569 } |
1540 }*/ |
| 1570 |
1541 |
| 1571 gtk_widget_grab_focus(entry); |
1542 gtk_widget_grab_focus(c->entry); |
| 1572 } |
1543 } |
| 1573 |
1544 |
| 1574 void advance_past(GtkWidget *entry, char *pre, char *post) |
1545 void advance_past(struct conversation *c, char *pre, char *post) |
| 1575 { |
1546 { |
| 1576 char *s, *s2; |
1547 GtkTextIter current_pos, start, end; |
| 1577 int pos; |
1548 |
| 1578 if (invert_tags(entry, pre, post, 1)) |
1549 if (invert_tags(c->entry_buffer, pre, post, 1)) |
| 1579 return; |
1550 return; |
| 1580 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); |
1551 |
| 1581 pos = GTK_OLD_EDITABLE(entry)->current_pos; |
1552 gtk_text_buffer_get_iter_at_mark(c->entry_buffer, ¤t_pos, |
| 1582 debug_printf(_("Currently at %d, "), pos); |
1553 gtk_text_buffer_get_insert(c->entry_buffer)); |
| 1583 s2 = strstr(&s[pos], post); |
1554 if (gtk_text_iter_forward_search(¤t_pos, post, 0, &start, &end, NULL)) |
| 1584 if (s2) { |
1555 gtk_text_buffer_place_cursor(c->entry_buffer, &end); |
| 1585 pos = s2 - s + strlen(post); |
1556 else |
| 1586 } else { |
1557 gtk_text_buffer_insert_at_cursor(c->entry_buffer, post, -1); |
| 1587 gtk_editable_insert_text(GTK_EDITABLE(entry), post, strlen(post), &pos); |
1558 |
| 1588 } |
1559 gtk_widget_grab_focus(c->entry); |
| 1589 g_free(s); |
|
| 1590 debug_printf(_("Setting position to %d\n"), pos); |
|
| 1591 gtk_editable_set_position(GTK_EDITABLE(entry), pos); |
|
| 1592 gtk_widget_grab_focus(entry); |
|
| 1593 } |
1560 } |
| 1594 |
1561 |
| 1595 void toggle_fg_color(GtkWidget *color, struct conversation *c) |
1562 void toggle_fg_color(GtkWidget *color, struct conversation *c) |
| 1596 { |
1563 { |
| 1597 if (state_lock) |
1564 if (state_lock) |
| 1642 show_add_link(c->link, c); |
1609 show_add_link(c->link, c); |
| 1643 |
1610 |
| 1644 else if (c->link_dialog) |
1611 else if (c->link_dialog) |
| 1645 cancel_link(c->link, c); |
1612 cancel_link(c->link, c); |
| 1646 else |
1613 else |
| 1647 advance_past(c->entry, "<A HREF>", "</A>"); |
1614 advance_past(c, "<A HREF>", "</A>"); |
| 1648 |
1615 |
| 1649 gtk_widget_grab_focus(c->entry); |
1616 gtk_widget_grab_focus(c->entry); |
| 1650 } |
1617 } |
| 1651 |
1618 |
| 1652 void do_strike(GtkWidget *strike, GtkWidget *entry) |
1619 void do_strike(GtkWidget *strike, struct conversation *c) |
| 1653 { |
1620 { |
| 1654 if (state_lock) |
1621 if (state_lock) |
| 1655 return; |
1622 return; |
| 1656 |
1623 |
| 1657 if (GTK_TOGGLE_BUTTON(strike)->active) |
1624 if (GTK_TOGGLE_BUTTON(strike)->active) |
| 1658 surround(entry, "<STRIKE>", "</STRIKE>"); |
1625 surround(c, "<STRIKE>", "</STRIKE>"); |
| 1659 else |
1626 else |
| 1660 advance_past(entry, "<STRIKE>", "</STRIKE>"); |
1627 advance_past(c, "<STRIKE>", "</STRIKE>"); |
| 1661 |
1628 |
| 1662 } |
1629 gtk_widget_grab_focus(c->entry); |
| 1663 |
1630 } |
| 1664 void do_bold(GtkWidget *bold, GtkWidget *entry) |
1631 |
| |
1632 void do_bold(GtkWidget *bold, struct conversation *c) |
| 1665 { |
1633 { |
| 1666 if (state_lock) |
1634 if (state_lock) |
| 1667 return; |
1635 return; |
| 1668 if (GTK_TOGGLE_BUTTON(bold)->active) |
1636 if (GTK_TOGGLE_BUTTON(bold)->active) |
| 1669 surround(entry, "<B>", "</B>"); |
1637 surround(c, "<B>", "</B>"); |
| 1670 else |
1638 else |
| 1671 advance_past(entry, "<B>", "</B>"); |
1639 advance_past(c, "<B>", "</B>"); |
| 1672 |
1640 |
| 1673 gtk_widget_grab_focus(entry); |
1641 gtk_widget_grab_focus(c->entry); |
| 1674 } |
1642 } |
| 1675 |
1643 |
| 1676 void do_underline(GtkWidget *underline, GtkWidget *entry) |
1644 void do_underline(GtkWidget *underline, struct conversation *c) |
| 1677 { |
1645 { |
| 1678 if (state_lock) |
1646 if (state_lock) |
| 1679 return; |
1647 return; |
| 1680 if (GTK_TOGGLE_BUTTON(underline)->active) |
1648 if (GTK_TOGGLE_BUTTON(underline)->active) |
| 1681 surround(entry, "<U>", "</U>"); |
1649 surround(c, "<U>", "</U>"); |
| 1682 else |
1650 else |
| 1683 advance_past(entry, "<U>", "</U>"); |
1651 advance_past(c, "<U>", "</U>"); |
| 1684 |
1652 |
| 1685 gtk_widget_grab_focus(entry); |
1653 gtk_widget_grab_focus(c->entry); |
| 1686 } |
1654 } |
| 1687 |
1655 |
| 1688 void do_italic(GtkWidget *italic, GtkWidget *entry) |
1656 void do_italic(GtkWidget *italic, struct conversation *c) |
| 1689 { |
1657 { |
| 1690 if (state_lock) |
1658 if (state_lock) |
| 1691 return; |
1659 return; |
| 1692 if (GTK_TOGGLE_BUTTON(italic)->active) |
1660 if (GTK_TOGGLE_BUTTON(italic)->active) |
| 1693 surround(entry, "<I>", "</I>"); |
1661 surround(c, "<I>", "</I>"); |
| 1694 else |
1662 else |
| 1695 advance_past(entry, "<I>", "</I>"); |
1663 advance_past(c, "<I>", "</I>"); |
| 1696 |
1664 |
| 1697 gtk_widget_grab_focus(entry); |
1665 gtk_widget_grab_focus(c->entry); |
| 1698 } |
1666 } |
| 1699 |
1667 |
| 1700 /* html code to modify font sizes must all be the same length, */ |
1668 /* html code to modify font sizes must all be the same length, */ |
| 1701 /* currently set to 15 chars */ |
1669 /* currently set to 15 chars */ |
| 1702 |
1670 |
| 1703 void do_small(GtkWidget *small, GtkWidget *entry) |
1671 void do_small(GtkWidget *small, struct conversation *c) |
| 1704 { |
1672 { |
| 1705 if (state_lock) |
1673 if (state_lock) |
| 1706 return; |
1674 return; |
| 1707 |
1675 |
| 1708 surround(entry, "<FONT SIZE=\"1\">", "</FONT>"); |
1676 surround(c, "<FONT SIZE=\"1\">", "</FONT>"); |
| 1709 |
1677 |
| 1710 gtk_widget_grab_focus(entry); |
1678 gtk_widget_grab_focus(c->entry); |
| 1711 } |
1679 } |
| 1712 |
1680 |
| 1713 void do_normal(GtkWidget *normal, GtkWidget *entry) |
1681 void do_normal(GtkWidget *normal, struct conversation *c) |
| 1714 { |
1682 { |
| 1715 if (state_lock) |
1683 if (state_lock) |
| 1716 return; |
1684 return; |
| 1717 |
1685 |
| 1718 surround(entry, "<FONT SIZE=\"3\">", "</FONT>"); |
1686 surround(c, "<FONT SIZE=\"3\">", "</FONT>"); |
| 1719 |
1687 |
| 1720 gtk_widget_grab_focus(entry); |
1688 gtk_widget_grab_focus(c->entry); |
| 1721 } |
1689 } |
| 1722 |
1690 |
| 1723 void do_big(GtkWidget *big, GtkWidget *entry) |
1691 void do_big(GtkWidget *big, struct conversation *c) |
| 1724 { |
1692 { |
| 1725 if (state_lock) |
1693 if (state_lock) |
| 1726 return; |
1694 return; |
| 1727 |
1695 |
| 1728 surround(entry, "<FONT SIZE=\"5\">", "</FONT>"); |
1696 surround(c, "<FONT SIZE=\"5\">", "</FONT>"); |
| 1729 |
1697 |
| 1730 gtk_widget_grab_focus(entry); |
1698 gtk_widget_grab_focus(c->entry); |
| 1731 } |
1699 } |
| 1732 |
1700 |
| 1733 void check_everything(GtkWidget *entry) |
1701 void check_everything(GtkTextBuffer *buffer) |
| 1734 { |
1702 { |
| 1735 struct conversation *c; |
1703 struct conversation *c; |
| 1736 |
1704 |
| 1737 c = (struct conversation *)gtk_object_get_user_data(GTK_OBJECT(entry)); |
1705 c = (struct conversation *)g_object_get_data(G_OBJECT(buffer), "user_data"); |
| 1738 if (!c) |
1706 if (!c) |
| 1739 return; |
1707 return; |
| 1740 if (invert_tags(entry, "<B>", "</B>", 0)) |
1708 if (invert_tags(c->entry_buffer, "<B>", "</B>", 0)) |
| 1741 quiet_set(c->bold, TRUE); |
1709 quiet_set(c->bold, TRUE); |
| 1742 else if (count_tag(entry, "<B>", "</B>")) |
1710 else if (count_tag(c->entry_buffer, "<B>", "</B>")) |
| 1743 quiet_set(c->bold, TRUE); |
1711 quiet_set(c->bold, TRUE); |
| 1744 else |
1712 else |
| 1745 quiet_set(c->bold, FALSE); |
1713 quiet_set(c->bold, FALSE); |
| 1746 if (invert_tags(entry, "<I>", "</I>", 0)) |
1714 if (invert_tags(c->entry_buffer, "<I>", "</I>", 0)) |
| 1747 quiet_set(c->italic, TRUE); |
1715 quiet_set(c->italic, TRUE); |
| 1748 else if (count_tag(entry, "<I>", "</I>")) |
1716 else if (count_tag(c->entry_buffer, "<I>", "</I>")) |
| 1749 quiet_set(c->italic, TRUE); |
1717 quiet_set(c->italic, TRUE); |
| 1750 else |
1718 else |
| 1751 quiet_set(c->italic, FALSE); |
1719 quiet_set(c->italic, FALSE); |
| 1752 |
1720 |
| 1753 if (invert_tags(entry, "<FONT COLOR", "</FONT>", 0)) |
1721 if (invert_tags(c->entry_buffer, "<FONT COLOR", "</FONT>", 0)) |
| 1754 quiet_set(c->fgcolorbtn, TRUE); |
1722 quiet_set(c->fgcolorbtn, TRUE); |
| 1755 else if (count_tag(entry, "<FONT COLOR", "</FONT>")) |
1723 else if (count_tag(c->entry_buffer, "<FONT COLOR", "</FONT>")) |
| 1756 quiet_set(c->fgcolorbtn, TRUE); |
1724 quiet_set(c->fgcolorbtn, TRUE); |
| 1757 else |
1725 else |
| 1758 quiet_set(c->fgcolorbtn, FALSE); |
1726 quiet_set(c->fgcolorbtn, FALSE); |
| 1759 |
1727 |
| 1760 if (invert_tags(entry, "<BODY BGCOLOR", "</BODY>", 0)) |
1728 if (invert_tags(c->entry_buffer, "<BODY BGCOLOR", "</BODY>", 0)) |
| 1761 quiet_set(c->bgcolorbtn, TRUE); |
1729 quiet_set(c->bgcolorbtn, TRUE); |
| 1762 else if (count_tag(entry, "<BODY BGCOLOR", "</BODY>")) |
1730 else if (count_tag(c->entry_buffer, "<BODY BGCOLOR", "</BODY>")) |
| 1763 quiet_set(c->bgcolorbtn, TRUE); |
1731 quiet_set(c->bgcolorbtn, TRUE); |
| 1764 else |
1732 else |
| 1765 quiet_set(c->bgcolorbtn, FALSE); |
1733 quiet_set(c->bgcolorbtn, FALSE); |
| 1766 |
1734 |
| 1767 if (invert_tags(entry, "<FONT FACE", "</FONT>", 0)) |
1735 if (invert_tags(c->entry_buffer, "<FONT FACE", "</FONT>", 0)) |
| 1768 quiet_set(c->font, TRUE); |
1736 quiet_set(c->font, TRUE); |
| 1769 else if (count_tag(entry, "<FONT FACE", "</FONT>")) |
1737 else if (count_tag(c->entry_buffer, "<FONT FACE", "</FONT>")) |
| 1770 quiet_set(c->font, TRUE); |
1738 quiet_set(c->font, TRUE); |
| 1771 else |
1739 else |
| 1772 quiet_set(c->font, FALSE); |
1740 quiet_set(c->font, FALSE); |
| 1773 |
1741 |
| 1774 if (invert_tags(entry, "<A HREF", "</A>", 0)) |
1742 if (invert_tags(c->entry_buffer, "<A HREF", "</A>", 0)) |
| 1775 quiet_set(c->link, TRUE); |
1743 quiet_set(c->link, TRUE); |
| 1776 else if (count_tag(entry, "<A HREF", "</A>")) |
1744 else if (count_tag(c->entry_buffer, "<A HREF", "</A>")) |
| 1777 quiet_set(c->link, TRUE); |
1745 quiet_set(c->link, TRUE); |
| 1778 else |
1746 else |
| 1779 quiet_set(c->link, FALSE); |
1747 quiet_set(c->link, FALSE); |
| 1780 |
1748 |
| 1781 if (invert_tags(entry, "<U>", "</U>", 0)) |
1749 if (invert_tags(c->entry_buffer, "<U>", "</U>", 0)) |
| 1782 quiet_set(c->underline, TRUE); |
1750 quiet_set(c->underline, TRUE); |
| 1783 else if (count_tag(entry, "<U>", "</U>")) |
1751 else if (count_tag(c->entry_buffer, "<U>", "</U>")) |
| 1784 quiet_set(c->underline, TRUE); |
1752 quiet_set(c->underline, TRUE); |
| 1785 else |
1753 else |
| 1786 quiet_set(c->underline, FALSE); |
1754 quiet_set(c->underline, FALSE); |
| 1787 } |
1755 } |
| 1788 |
1756 |
| 2247 |
2215 |
| 2248 /* Bold */ |
2216 /* Bold */ |
| 2249 button = gaim_pixbuf_toolbar_button_from_stock("gtk-bold"); |
2217 button = gaim_pixbuf_toolbar_button_from_stock("gtk-bold"); |
| 2250 gtk_size_group_add_widget(sg, button); |
2218 gtk_size_group_add_widget(sg, button); |
| 2251 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
2219 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 2252 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_bold), c->entry); |
2220 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_bold), c); |
| 2253 c->bold = button; /* We should remember this */ |
2221 c->bold = button; /* We should remember this */ |
| 2254 |
2222 |
| 2255 /* Italic */ |
2223 /* Italic */ |
| 2256 button = gaim_pixbuf_toolbar_button_from_stock("gtk-italic"); |
2224 button = gaim_pixbuf_toolbar_button_from_stock("gtk-italic"); |
| 2257 gtk_size_group_add_widget(sg, button); |
2225 gtk_size_group_add_widget(sg, button); |
| 2258 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
2226 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 2259 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_italic), c->entry); |
2227 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_italic), c); |
| 2260 c->italic = button; /* We should remember this */ |
2228 c->italic = button; /* We should remember this */ |
| 2261 |
2229 |
| 2262 /* Underline */ |
2230 /* Underline */ |
| 2263 button = gaim_pixbuf_toolbar_button_from_stock("gtk-underline"); |
2231 button = gaim_pixbuf_toolbar_button_from_stock("gtk-underline"); |
| 2264 gtk_size_group_add_widget(sg, button); |
2232 gtk_size_group_add_widget(sg, button); |
| 2265 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
2233 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 2266 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_underline), c->entry); |
2234 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_underline), c); |
| 2267 c->underline = button; /* We should remember this */ |
2235 c->underline = button; /* We should remember this */ |
| 2268 |
2236 |
| 2269 /* Sep */ |
2237 /* Sep */ |
| 2270 sep = gtk_vseparator_new(); |
2238 sep = gtk_vseparator_new(); |
| 2271 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); |
2239 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); |
| 2272 |
2240 |
| 2273 /* Increase font size */ |
2241 /* Increase font size */ |
| 2274 button = gaim_pixbuf_toolbar_button_from_file("text_bigger.png"); |
2242 button = gaim_pixbuf_toolbar_button_from_file("text_bigger.png"); |
| 2275 gtk_size_group_add_widget(sg, button); |
2243 gtk_size_group_add_widget(sg, button); |
| 2276 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
2244 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 2277 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_big), c->entry); |
2245 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_big), c); |
| 2278 |
2246 |
| 2279 /* Normal Font Size */ |
2247 /* Normal Font Size */ |
| 2280 button = gaim_pixbuf_toolbar_button_from_file("text_normal.png"); |
2248 button = gaim_pixbuf_toolbar_button_from_file("text_normal.png"); |
| 2281 gtk_size_group_add_widget(sg, button); |
2249 gtk_size_group_add_widget(sg, button); |
| 2282 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
2250 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 2283 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_normal), c->entry); |
2251 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_normal), c); |
| 2284 c->font = button; /* We should remember this */ |
2252 c->font = button; /* We should remember this */ |
| 2285 |
2253 |
| 2286 /* Decrease font size */ |
2254 /* Decrease font size */ |
| 2287 button = gaim_pixbuf_toolbar_button_from_file("text_smaller.png"); |
2255 button = gaim_pixbuf_toolbar_button_from_file("text_smaller.png"); |
| 2288 gtk_size_group_add_widget(sg, button); |
2256 gtk_size_group_add_widget(sg, button); |
| 2289 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
2257 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 2290 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_small), c->entry); |
2258 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_small), c); |
| 2291 |
2259 |
| 2292 /* Sep */ |
2260 /* Sep */ |
| 2293 sep = gtk_vseparator_new(); |
2261 sep = gtk_vseparator_new(); |
| 2294 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); |
2262 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); |
| 2295 |
2263 |
| 2902 |
2871 |
| 2903 c->lbox = gtk_hbox_new(FALSE, 0); |
2872 c->lbox = gtk_hbox_new(FALSE, 0); |
| 2904 gtk_box_pack_start(GTK_BOX(vbox2), c->lbox, FALSE, FALSE, 0); |
2873 gtk_box_pack_start(GTK_BOX(vbox2), c->lbox, FALSE, FALSE, 0); |
| 2905 gtk_widget_show(c->lbox); |
2874 gtk_widget_show(c->lbox); |
| 2906 |
2875 |
| 2907 entry = gtk_text_new(NULL, NULL); |
2876 toolbar = build_conv_toolbar(c); |
| |
2877 gtk_box_pack_start(GTK_BOX(vbox2), toolbar, FALSE, FALSE, 0); |
| |
2878 |
| |
2879 frame = gtk_frame_new(NULL); |
| |
2880 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); |
| |
2881 gtk_box_pack_start(GTK_BOX(vbox2), frame, TRUE, TRUE, 0); |
| |
2882 gtk_widget_show(frame); |
| |
2883 |
| |
2884 c->entry_buffer = gtk_text_buffer_new(NULL); |
| |
2885 g_object_set_data(G_OBJECT(c->entry_buffer), "user_data", c); |
| |
2886 entry = gtk_text_view_new_with_buffer(c->entry_buffer); |
| 2908 c->entry = entry; |
2887 c->entry = entry; |
| 2909 if (!(im_options & OPT_IM_ONE_WINDOW)) |
2888 if (!(im_options & OPT_IM_ONE_WINDOW)) |
| 2910 gtk_window_set_focus(GTK_WINDOW(c->window), c->entry); |
2889 gtk_window_set_focus(GTK_WINDOW(c->window), c->entry); |
| 2911 |
2890 |
| 2912 toolbar = build_conv_toolbar(c); |
2891 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(c->entry), GTK_WRAP_WORD); |
| 2913 gtk_box_pack_start(GTK_BOX(vbox2), toolbar, FALSE, FALSE, 0); |
|
| 2914 |
|
| 2915 gtk_object_set_user_data(GTK_OBJECT(entry), c); |
|
| 2916 gtk_text_set_editable(GTK_TEXT(entry), TRUE); |
|
| 2917 gtk_text_set_word_wrap(GTK_TEXT(entry), TRUE); |
|
| 2918 |
2892 |
| 2919 gtk_widget_set_usize(entry, conv_size.width - 20, MAX(conv_size.entry_height, 25)); |
2893 gtk_widget_set_usize(entry, conv_size.width - 20, MAX(conv_size.entry_height, 25)); |
| 2920 |
2894 |
| 2921 gtk_signal_connect(GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(send_callback), c); |
2895 g_signal_connect_swapped(G_OBJECT(c->entry), "key_press_event", |
| 2922 gtk_signal_connect(GTK_OBJECT(entry), "key_press_event", GTK_SIGNAL_FUNC(keypress_callback), c); |
2896 G_CALLBACK(entry_key_pressed), c->entry_buffer); |
| 2923 gtk_signal_connect(GTK_OBJECT(entry), "insert-text", GTK_SIGNAL_FUNC(insert_text_callback), c); |
2897 g_signal_connect(G_OBJECT(c->entry), "key_press_event", G_CALLBACK(keypress_callback), c); |
| 2924 gtk_signal_connect(GTK_OBJECT(entry), "delete-text", GTK_SIGNAL_FUNC(delete_text_callback), c); |
2898 g_signal_connect_after(G_OBJECT(c->entry), "button_press_event", |
| 2925 gtk_signal_connect(GTK_OBJECT(entry), "key_press_event", GTK_SIGNAL_FUNC(entry_key_pressed), |
2899 G_CALLBACK(stop_rclick_callback), NULL); |
| 2926 entry); |
2900 g_signal_connect(G_OBJECT(c->entry_buffer), "insert_text", |
| 2927 if (convo_options & OPT_CONVO_CHECK_SPELLING) |
2901 G_CALLBACK(insert_text_callback), c); |
| 2928 gtkspell_attach(GTK_TEXT(c->entry)); |
2902 g_signal_connect(G_OBJECT(c->entry_buffer), "delete_range", |
| 2929 gtk_box_pack_start(GTK_BOX(vbox2), entry, TRUE, TRUE, 0); |
2903 G_CALLBACK(delete_text_callback), c); |
| |
2904 |
| |
2905 /* if (convo_options & OPT_CONVO_CHECK_SPELLING) |
| |
2906 gtkspell_attach(GTK_TEXT(c->entry));*/ |
| |
2907 gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(entry)); |
| 2930 gtk_widget_show(entry); |
2908 gtk_widget_show(entry); |
| 2931 |
2909 |
| 2932 c->bbox = bbox = gtk_hbox_new(FALSE, 5); |
2910 c->bbox = bbox = gtk_hbox_new(FALSE, 5); |
| 2933 gtk_box_pack_start(GTK_BOX(vbox2), bbox, FALSE, FALSE, 0); |
2911 gtk_box_pack_start(GTK_BOX(vbox2), bbox, FALSE, FALSE, 0); |
| 2934 gtk_widget_show(bbox); |
2912 gtk_widget_show(bbox); |