# HG changeset patch # User Luke Schierer # Date 1034301405 0 # Node ID 639411e6a4cdb786e2d8b530656ea499f1590ea8 # Parent 468dc12b5ee8ced5303f368f70b66033668cb091 [gaim-migrate @ 3750] javabsp's fix for typing notification committer: Tailor Script diff -r 468dc12b5ee8 -r 639411e6a4cd src/conversation.c --- a/src/conversation.c Fri Oct 11 01:52:43 2002 +0000 +++ b/src/conversation.c Fri Oct 11 01:56:45 2002 +0000 @@ -838,21 +838,27 @@ gboolean keypress_callback(GtkWidget *entry, GdkEventKey * event, struct conversation *c) { int pos; + gboolean key_is_typing = TRUE; + if (event->keyval == GDK_Escape) { + key_is_typing = FALSE; if (convo_options & OPT_CONVO_ESC_CAN_CLOSE) { gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); close_callback(c->close, c); c = NULL; } } else if (event->keyval == GDK_Page_Up) { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); if(!(event->state & GDK_CONTROL_MASK)) gtk_imhtml_page_up(GTK_IMHTML(c->text)); } else if (event->keyval == GDK_Page_Down) { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); if(!(event->state & GDK_CONTROL_MASK)) gtk_imhtml_page_down(GTK_IMHTML(c->text)); } else if ((event->keyval == GDK_F2) && (convo_options & OPT_CONVO_F2_TOGGLES)) { + key_is_typing = FALSE; gtk_imhtml_show_comments(GTK_IMHTML(c->text), !GTK_IMHTML(c->text)->comments); } else if ((event->keyval == GDK_Return) || (event->keyval == GDK_KP_Enter)) { if ((event->state & GDK_CONTROL_MASK) && (convo_options & OPT_CONVO_CTL_ENTER)) { @@ -1035,18 +1041,22 @@ } } if (event->keyval == 'l') { + key_is_typing = FALSE; gtk_imhtml_clear(GTK_IMHTML(c->text)); g_string_free(c->history, TRUE); c->history = g_string_new(""); } else if ((event->keyval == 'w') && (convo_options & OPT_CONVO_CTL_W_CLOSES)) { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); close_callback(c->close, c); c = NULL; return TRUE; } else if (event->keyval == 'n') { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); show_im_dialog(); } else if (event->keyval == 'z') { + key_is_typing = FALSE; gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); XIconifyWindow(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(c->window->window), @@ -1058,12 +1068,15 @@ (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) { GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook); if (event->keyval == '[') { + key_is_typing = FALSE; gtk_notebook_prev_page(GTK_NOTEBOOK(notebook)); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); } else if (event->keyval == ']') { + key_is_typing = FALSE; gtk_notebook_next_page(GTK_NOTEBOOK(notebook)); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); } else if (event->keyval == GDK_Tab) { + key_is_typing = FALSE; move_next_tab(GTK_NOTEBOOK(notebook), c->is_chat); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); return TRUE; @@ -1076,6 +1089,7 @@ } else if (((!c->is_chat && (im_options & OPT_IM_ONE_WINDOW)) || (c->is_chat && (chat_options & OPT_CHAT_ONE_WINDOW))) && (event->state & GDK_MOD1_MASK) && (event->keyval > '0') && (event->keyval <= '9')) { + key_is_typing = FALSE; GtkWidget *notebook = (c->is_chat ? chat_notebook : convo_notebook); gtk_notebook_set_page(GTK_NOTEBOOK(notebook), event->keyval - '1'); gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event"); @@ -1095,7 +1109,7 @@ serv_send_typing(c->gc, c->name, NOT_TYPING); } else if (gdk_keyval_to_unicode(event->keyval) || event->keyval == GDK_BackSpace || event->keyval == GDK_Delete) { - if (strlen(txt) == 0 || (c->type_again != 0 && time(NULL) > c->type_again)) { + if (key_is_typing && (strlen(txt) == 0 || (c->type_again != 0 && time(NULL) > c->type_again))) { int timeout = serv_send_typing(c->gc, c->name, TYPING); if (timeout) c->type_again = time(NULL) + timeout;