Mercurial > pidgin
diff src/conversation.c @ 3596:bb966d68f9e3
[gaim-migrate @ 3698]
I like typing notifcation. I think I'll marry it.
Also, if I'm going to go around mentioning gaim on resumes, I can't very
well tell people to look for "KingAnt"... :-)
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 06 Oct 2002 05:01:50 +0000 |
parents | bdd0bebd2d04 |
children | bc87186a7478 |
line wrap: on
line diff
--- a/src/conversation.c Sun Oct 06 03:08:47 2002 +0000 +++ b/src/conversation.c Sun Oct 06 05:01:50 2002 +0000 @@ -284,6 +284,8 @@ g_list_free(c->send_history); if (c->typing_timeout) gtk_timeout_remove(c->typing_timeout); + if (c->type_again_timeout) + gtk_timeout_remove(c->type_again_timeout); g_string_free(c->history, TRUE); g_free(c); } @@ -535,7 +537,8 @@ if (!c->is_chat) { GSList *cn = connections; - serv_send_typing(c->gc, c->name, FALSE); + if (!(misc_options & OPT_MISC_STEALTH_TYPING)) + serv_send_typing(c->gc, c->name, NOT_TYPING); while (cn) { struct gaim_connection *gc = cn->data; cn = cn->next; @@ -820,6 +823,16 @@ gtk_notebook_next_page(notebook); } +gboolean send_typed(gpointer data) +{ + struct conversation *c = (struct conversation*)data; + if (c && c->gc && c->name) { + c->type_again = 1; + serv_send_typing(c->gc, c->name, TYPED); + } + return FALSE; +} + gboolean keypress_callback(GtkWidget *entry, GdkEventKey * event, struct conversation *c) { int pos; @@ -1066,23 +1079,34 @@ if (c && (!(misc_options & OPT_MISC_STEALTH_TYPING)) && !c->is_chat) { char *txt = gtk_editable_get_chars(GTK_EDITABLE(c->entry), 0, -1); - if (gdk_keyval_to_unicode(event->keyval) && + if (gdk_keyval_to_unicode(event->keyval) && (strlen(txt) == 0 || (c->type_again != 0 && time(NULL) > c->type_again))) { - int timeout = serv_send_typing(c->gc, c->name, TRUE); + int timeout = serv_send_typing(c->gc, c->name, TYPING); if (timeout) c->type_again = time(NULL) + timeout; else c->type_again = 0; + + if (c && c->type_again_timeout) + gtk_timeout_remove(c->type_again_timeout); + /* send TYPED after 5 seconds of not typing */ + c->type_again_timeout = gtk_timeout_add(5000, send_typed, (gpointer)c); } else if (strlen(txt) == 1) { if ((GTK_OLD_EDITABLE(c->entry)->current_pos == 1 && event->keyval == GDK_BackSpace) || - (GTK_OLD_EDITABLE(c->entry)->current_pos == 0 && event->keyval == GDK_Delete)) - serv_send_typing(c->gc, c->name, FALSE); + (GTK_OLD_EDITABLE(c->entry)->current_pos == 0 && event->keyval == GDK_Delete)) { + if (c && c->type_again_timeout) + gtk_timeout_remove(c->type_again_timeout); + serv_send_typing(c->gc, c->name, NOT_TYPING); + } } else if (GTK_OLD_EDITABLE(c->entry)->selection_start_pos == 0) { if (GTK_OLD_EDITABLE(c->entry)->selection_end_pos == strlen(txt) && strlen(txt) > 0 && - (event->keyval == GDK_BackSpace || event->keyval == GDK_Delete)) - serv_send_typing(c->gc, c->name, FALSE); + (event->keyval == GDK_BackSpace || event->keyval == GDK_Delete)) { + if (c && c->type_again_timeout) + gtk_timeout_remove(c->type_again_timeout); + serv_send_typing(c->gc, c->name, NOT_TYPING); + } } g_free(txt); }