Mercurial > pidgin.yaz
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; |