comparison src/conversation.c @ 3627:639411e6a4cd

[gaim-migrate @ 3750] javabsp's fix for typing notification committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Fri, 11 Oct 2002 01:56:45 +0000
parents 468dc12b5ee8
children 74ed52a818a1
comparison
equal deleted inserted replaced
3626:468dc12b5ee8 3627:639411e6a4cd
836 } 836 }
837 837
838 gboolean keypress_callback(GtkWidget *entry, GdkEventKey * event, struct conversation *c) 838 gboolean keypress_callback(GtkWidget *entry, GdkEventKey * event, struct conversation *c)
839 { 839 {
840 int pos; 840 int pos;
841 gboolean key_is_typing = TRUE;
842
841 if (event->keyval == GDK_Escape) { 843 if (event->keyval == GDK_Escape) {
844 key_is_typing = FALSE;
842 if (convo_options & OPT_CONVO_ESC_CAN_CLOSE) { 845 if (convo_options & OPT_CONVO_ESC_CAN_CLOSE) {
843 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");
844 close_callback(c->close, c); 847 close_callback(c->close, c);
845 c = NULL; 848 c = NULL;
846 } 849 }
847 } else if (event->keyval == GDK_Page_Up) { 850 } else if (event->keyval == GDK_Page_Up) {
851 key_is_typing = FALSE;
848 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");
849 if(!(event->state & GDK_CONTROL_MASK)) 853 if(!(event->state & GDK_CONTROL_MASK))
850 gtk_imhtml_page_up(GTK_IMHTML(c->text)); 854 gtk_imhtml_page_up(GTK_IMHTML(c->text));
851 } else if (event->keyval == GDK_Page_Down) { 855 } else if (event->keyval == GDK_Page_Down) {
856 key_is_typing = FALSE;
852 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 857 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
853 if(!(event->state & GDK_CONTROL_MASK)) 858 if(!(event->state & GDK_CONTROL_MASK))
854 gtk_imhtml_page_down(GTK_IMHTML(c->text)); 859 gtk_imhtml_page_down(GTK_IMHTML(c->text));
855 } else if ((event->keyval == GDK_F2) && (convo_options & OPT_CONVO_F2_TOGGLES)) { 860 } else if ((event->keyval == GDK_F2) && (convo_options & OPT_CONVO_F2_TOGGLES)) {
861 key_is_typing = FALSE;
856 gtk_imhtml_show_comments(GTK_IMHTML(c->text), !GTK_IMHTML(c->text)->comments); 862 gtk_imhtml_show_comments(GTK_IMHTML(c->text), !GTK_IMHTML(c->text)->comments);
857 } else if ((event->keyval == GDK_Return) || (event->keyval == GDK_KP_Enter)) { 863 } else if ((event->keyval == GDK_Return) || (event->keyval == GDK_KP_Enter)) {
858 if ((event->state & GDK_CONTROL_MASK) && (convo_options & OPT_CONVO_CTL_ENTER)) { 864 if ((event->state & GDK_CONTROL_MASK) && (convo_options & OPT_CONVO_CTL_ENTER)) {
859 gtk_signal_emit_by_name(GTK_OBJECT(entry), "activate", c); 865 gtk_signal_emit_by_name(GTK_OBJECT(entry), "activate", c);
860 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 866 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1033 } 1039 }
1034 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1040 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1035 } 1041 }
1036 } 1042 }
1037 if (event->keyval == 'l') { 1043 if (event->keyval == 'l') {
1044 key_is_typing = FALSE;
1038 gtk_imhtml_clear(GTK_IMHTML(c->text)); 1045 gtk_imhtml_clear(GTK_IMHTML(c->text));
1039 g_string_free(c->history, TRUE); 1046 g_string_free(c->history, TRUE);
1040 c->history = g_string_new(""); 1047 c->history = g_string_new("");
1041 } else if ((event->keyval == 'w') && (convo_options & OPT_CONVO_CTL_W_CLOSES)) { 1048 } else if ((event->keyval == 'w') && (convo_options & OPT_CONVO_CTL_W_CLOSES)) {
1049 key_is_typing = FALSE;
1042 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1050 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1043 close_callback(c->close, c); 1051 close_callback(c->close, c);
1044 c = NULL; 1052 c = NULL;
1045 return TRUE; 1053 return TRUE;
1046 } else if (event->keyval == 'n') { 1054 } else if (event->keyval == 'n') {
1055 key_is_typing = FALSE;
1047 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1056 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1048 show_im_dialog(); 1057 show_im_dialog();
1049 } else if (event->keyval == 'z') { 1058 } else if (event->keyval == 'z') {
1059 key_is_typing = FALSE;
1050 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1060 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1051 XIconifyWindow(GDK_DISPLAY(), 1061 XIconifyWindow(GDK_DISPLAY(),
1052 GDK_WINDOW_XWINDOW(c->window->window), 1062 GDK_WINDOW_XWINDOW(c->window->window),
1053 ((_XPrivDisplay)GDK_DISPLAY())->default_screen); 1063 ((_XPrivDisplay)GDK_DISPLAY())->default_screen);
1054 } 1064 }
1056 1066
1057 if ((!c->is_chat && (im_options & OPT_IM_ONE_WINDOW)) || 1067 if ((!c->is_chat && (im_options & OPT_IM_ONE_WINDOW)) ||
1058 (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) { 1068 (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) {
1059 GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook); 1069 GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook);
1060 if (event->keyval == '[') { 1070 if (event->keyval == '[') {
1071 key_is_typing = FALSE;
1061 gtk_notebook_prev_page(GTK_NOTEBOOK(notebook)); 1072 gtk_notebook_prev_page(GTK_NOTEBOOK(notebook));
1062 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1073 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1063 } else if (event->keyval == ']') { 1074 } else if (event->keyval == ']') {
1075 key_is_typing = FALSE;
1064 gtk_notebook_next_page(GTK_NOTEBOOK(notebook)); 1076 gtk_notebook_next_page(GTK_NOTEBOOK(notebook));
1065 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1077 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1066 } else if (event->keyval == GDK_Tab) { 1078 } else if (event->keyval == GDK_Tab) {
1079 key_is_typing = FALSE;
1067 move_next_tab(GTK_NOTEBOOK(notebook), c->is_chat); 1080 move_next_tab(GTK_NOTEBOOK(notebook), c->is_chat);
1068 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1081 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1069 return TRUE; 1082 return TRUE;
1070 } 1083 }
1071 } 1084 }
1074 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1087 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1075 return TRUE; 1088 return TRUE;
1076 } else if (((!c->is_chat && (im_options & OPT_IM_ONE_WINDOW)) || 1089 } else if (((!c->is_chat && (im_options & OPT_IM_ONE_WINDOW)) ||
1077 (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) && 1090 (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) &&
1078 (event->state & GDK_MOD1_MASK) && (event->keyval > '0') && (event->keyval <= '9')) { 1091 (event->state & GDK_MOD1_MASK) && (event->keyval > '0') && (event->keyval <= '9')) {
1092 key_is_typing = FALSE;
1079 GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook); 1093 GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook);
1080 gtk_notebook_set_page(GTK_NOTEBOOK(notebook), event->keyval - '1'); 1094 gtk_notebook_set_page(GTK_NOTEBOOK(notebook), event->keyval - '1');
1081 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); 1095 gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
1082 } 1096 }
1083 1097
1093 if (c && c->type_again_timeout) 1107 if (c && c->type_again_timeout)
1094 gtk_timeout_remove(c->type_again_timeout); 1108 gtk_timeout_remove(c->type_again_timeout);
1095 serv_send_typing(c->gc, c->name, NOT_TYPING); 1109 serv_send_typing(c->gc, c->name, NOT_TYPING);
1096 } 1110 }
1097 else if (gdk_keyval_to_unicode(event->keyval) || event->keyval == GDK_BackSpace || event->keyval == GDK_Delete) { 1111 else if (gdk_keyval_to_unicode(event->keyval) || event->keyval == GDK_BackSpace || event->keyval == GDK_Delete) {
1098 if (strlen(txt) == 0 || (c->type_again != 0 && time(NULL) > c->type_again)) { 1112 if (key_is_typing && (strlen(txt) == 0 || (c->type_again != 0 && time(NULL) > c->type_again))) {
1099 int timeout = serv_send_typing(c->gc, c->name, TYPING); 1113 int timeout = serv_send_typing(c->gc, c->name, TYPING);
1100 if (timeout) 1114 if (timeout)
1101 c->type_again = time(NULL) + timeout; 1115 c->type_again = time(NULL) + timeout;
1102 else 1116 else
1103 c->type_again = 0; 1117 c->type_again = 0;