# HG changeset patch # User Sadrul Habib Chowdhury # Date 1265499903 0 # Node ID fdb61f7e8576f72c92871d7ec406c60b43343616 # Parent 57ae03fdb86fd6377921deaa125d0c2d73b08e07 Change the cursor and act on double click on usernames in chat history. Use the hand-cursor when hovering over usernames in the chat history, and pop up an IM on double click. Closes #11295. On the news tonight: The bird is still the word. diff -r 57ae03fdb86f -r fdb61f7e8576 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Sat Feb 06 06:53:31 2010 +0000 +++ b/pidgin/gtkconv.c Sat Feb 06 23:45:03 2010 +0000 @@ -5621,7 +5621,11 @@ buddyname = (tag->name) + 6; - if (btn_event->button == 2 + if (btn_event->button == 1 && + event->type == GDK_2BUTTON_PRESS) { + chat_do_im(PIDGIN_CONVERSATION(conv), buddyname); + return TRUE; + } else if (btn_event->button == 2 && event->type == GDK_2BUTTON_PRESS) { chat_do_info(PIDGIN_CONVERSATION(conv), buddyname); @@ -5683,6 +5687,7 @@ "weight", purple_find_buddy(purple_conversation_get_account(conv), who) ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, NULL); + g_object_set_data(G_OBJECT(buddytag), "cursor", ""); g_signal_connect(G_OBJECT(buddytag), "event", G_CALLBACK(buddytag_event), conv); } diff -r 57ae03fdb86f -r fdb61f7e8576 pidgin/gtkimhtml.c --- a/pidgin/gtkimhtml.c Sat Feb 06 06:53:31 2010 +0000 +++ b/pidgin/gtkimhtml.c Sat Feb 06 23:45:03 2010 +0000 @@ -628,6 +628,7 @@ GtkTextTag *tag = NULL, *oldprelit_tag; GtkTextChildAnchor* anchor; gboolean hand = TRUE; + GdkCursor *cursor = NULL; oldprelit_tag = GTK_IMHTML(imhtml)->prelit_tag; @@ -676,9 +677,9 @@ GTK_IMHTML(imhtml)->tip_window = NULL; } if (GTK_IMHTML(imhtml)->editable) - gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->text_cursor); + cursor = GTK_IMHTML(imhtml)->text_cursor; else - gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->arrow_cursor); + cursor = GTK_IMHTML(imhtml)->arrow_cursor; if (GTK_IMHTML(imhtml)->tip_timer) g_source_remove(GTK_IMHTML(imhtml)->tip_timer); GTK_IMHTML(imhtml)->tip_timer = 0; @@ -692,12 +693,25 @@ } if (tip && *tip) { - if (!GTK_IMHTML(imhtml)->editable && hand) - gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor); GTK_IMHTML(imhtml)->tip_timer = g_timeout_add (TOOLTIP_TIMEOUT, gtk_imhtml_tip, imhtml); + } else if (!tip) { + hand = FALSE; + for (templist = tags; templist; templist = templist->next) { + tag = templist->data; + if ((tip = g_object_get_data(G_OBJECT(tag), "cursor"))) { + hand = TRUE; + break; + } + } } + if (hand && !(GTK_IMHTML(imhtml)->editable)) + cursor = GTK_IMHTML(imhtml)->hand_cursor; + + if (cursor) + gdk_window_set_cursor(win, cursor); + GTK_IMHTML(imhtml)->tip = tip; g_slist_free(tags); return FALSE;