# HG changeset patch # User Yoshiki Yazawa # Date 1264737626 -32400 # Node ID 06740353bfc7d7d3db001cfadbe42cc57b949273 # Parent 31d9677b0c3653f4003d59aed1d104a49a490444# Parent 45fce067c690ed3147262838361c6bdc54d57b0f merged with im.pidgin.pidgin diff -r 31d9677b0c36 -r 06740353bfc7 COPYRIGHT --- a/COPYRIGHT Tue Jan 26 17:42:57 2010 +0900 +++ b/COPYRIGHT Fri Jan 29 13:00:26 2010 +0900 @@ -147,6 +147,7 @@ Marc Etcheverry David Everly Larry Ewing +Fartash Faghri Gábor Farkas Jesse Farmer Gavan Fantom (gavan) diff -r 31d9677b0c36 -r 06740353bfc7 ChangeLog --- a/ChangeLog Tue Jan 26 17:42:57 2010 +0900 +++ b/ChangeLog Fri Jan 29 13:00:26 2010 +0900 @@ -32,6 +32,9 @@ * Wrap XHTML messages in

, as described in XEP-0071, for compatibility with some clients. + Yahoo: + * Don't send and tags. (Fartash Faghri) + Pidgin: * Correctly size conversation and status box entries when the interior-focus style property is diabled. (Gabriel Schulhof) diff -r 31d9677b0c36 -r 06740353bfc7 finch/libgnt/gntwm.c --- a/finch/libgnt/gntwm.c Tue Jan 26 17:42:57 2010 +0900 +++ b/finch/libgnt/gntwm.c Fri Jan 29 13:00:26 2010 +0900 @@ -889,6 +889,13 @@ all = g_list_delete_link(all, list); wm->cws->list = all; gnt_ws_draw_taskbar(wm->cws, FALSE); + if (wm->cws->ordered) { + GntWidget *w = wm->cws->ordered->data; + GntNode *node = g_hash_table_lookup(wm->nodes, w); + top_panel(node->panel); + update_panels(); + doupdate(); + } } static gboolean @@ -1106,12 +1113,20 @@ refresh_screen(GntBindable *bindable, GList *null) { GntWM *wm = GNT_WM(bindable); + GList *iter; endwin(); refresh(); g_hash_table_foreach(wm->nodes, (GHFunc)refresh_node, GINT_TO_POINTER(TRUE)); g_signal_emit(wm, signals[SIG_TERMINAL_REFRESH], 0); + + for (iter = g_list_last(wm->cws->ordered); iter; iter = iter->prev) { + GntWidget *w = iter->data; + GntNode *node = g_hash_table_lookup(wm->nodes, w); + top_panel(node->panel); + } + gnt_ws_draw_taskbar(wm->cws, TRUE); update_screen(wm); curs_set(0); /* endwin resets the cursor to normal */ diff -r 31d9677b0c36 -r 06740353bfc7 finch/libgnt/wms/irssi.c --- a/finch/libgnt/wms/irssi.c Tue Jan 26 17:42:57 2010 +0900 +++ b/finch/libgnt/wms/irssi.c Fri Jan 29 13:00:26 2010 +0900 @@ -207,11 +207,15 @@ update_conv_window_title(GntNode *node) { char title[256]; + int x, y; snprintf(title, sizeof(title), "%d: %s", GPOINTER_TO_INT(g_object_get_data(G_OBJECT(node->me), "irssi-index")) + 1, GNT_BOX(node->me)->title); + + getyx(node->window, y, x); wbkgdset(node->window, '\0' | COLOR_PAIR(gnt_widget_has_focus(node->me) ? GNT_COLOR_TITLE : GNT_COLOR_TITLE_D)); mvwaddstr(node->window, 0, 0, title); + wmove(node->window, y, x); if (!gnt_is_refugee()) { update_panels(); doupdate(); @@ -296,10 +300,15 @@ name = gnt_widget_get_name(widget); if (name && strstr(name, "conversation-window")) { + int cx, cy, cw, ch; + gnt_widget_get_position(widget, &cx, &cy); + gnt_widget_get_size(widget, &cw, &ch); find_window_position(irssi, widget, &hor, &vert); get_xywh_for_frame(irssi, hor, vert, &x, &y, &w, &h); - gnt_wm_move_window(GNT_WM(irssi), widget, x, y); - gnt_wm_resize_window(GNT_WM(irssi), widget, w, h); + if (x != cx || y != cy) + gnt_wm_move_window(GNT_WM(irssi), widget, x, y); + if (w != cw || h != ch) + gnt_wm_resize_window(GNT_WM(irssi), widget, w, h); } } diff -r 31d9677b0c36 -r 06740353bfc7 libpurple/buddyicon.c --- a/libpurple/buddyicon.c Tue Jan 26 17:42:57 2010 +0900 +++ b/libpurple/buddyicon.c Fri Jan 29 13:00:26 2010 +0900 @@ -716,9 +716,8 @@ if (read_icon_file(path, &data, &len)) { g_free(path); - img = purple_buddy_icon_data_new(data, len, account_icon_file); - g_hash_table_insert(pointer_icon_cache, account, img); - return img; + img = purple_buddy_icons_set_account_icon(account, data, len); + return purple_imgstore_ref(img); } g_free(path); @@ -841,9 +840,8 @@ if (read_icon_file(path, &data, &len)) { g_free(path); - img = purple_buddy_icon_data_new(data, len, custom_icon_file); - g_hash_table_insert(pointer_icon_cache, node, img); - return img; + img = purple_buddy_icons_node_set_custom_icon(node, data, len); + return purple_imgstore_ref(img); } g_free(path); diff -r 31d9677b0c36 -r 06740353bfc7 libpurple/ft.c --- a/libpurple/ft.c Tue Jan 26 17:42:57 2010 +0900 +++ b/libpurple/ft.c Fri Jan 29 13:00:26 2010 +0900 @@ -1090,17 +1090,22 @@ if (ui_ops && ui_ops->ui_read) { gssize tmp = ui_ops->ui_read(xfer, &buffer, s); if (tmp == 0) { + PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer); + /* - * UI isn't ready to send data. It will call - * purple_xfer_ui_ready when ready, which sets back up this - * watcher. + * The UI claimed it was ready, but didn't have any data for + * us... It will call purple_xfer_ui_ready when ready, which + * sets back up this watcher. */ if (xfer->watcher != 0) { purple_input_remove(xfer->watcher); xfer->watcher = 0; } - return; + /* Need to indicate the prpl is still ready... */ + priv->ready |= PURPLE_XFER_READY_PRPL; + + g_return_if_reached(); } else if (tmp < 0) { purple_debug_error("filetransfer", "Unable to read whole buffer.\n"); purple_xfer_cancel_local(xfer); @@ -1181,6 +1186,8 @@ purple_debug_misc("xfer", "prpl is ready on ft %p, waiting for UI\n", xfer); return; } + + priv->ready = PURPLE_XFER_READY_NONE; } do_transfer(xfer); diff -r 31d9677b0c36 -r 06740353bfc7 libpurple/protocols/oscar/clientlogin.c --- a/libpurple/protocols/oscar/clientlogin.c Tue Jan 26 17:42:57 2010 +0900 +++ b/libpurple/protocols/oscar/clientlogin.c Fri Jan 29 13:00:26 2010 +0900 @@ -62,6 +62,26 @@ DEFAULT_CLIENT_KEY); } +static gchar *generate_error_message(xmlnode *resp, const char *url) +{ + xmlnode *text; + gchar *err = NULL; + gchar *details = NULL; + + if (resp && (text = xmlnode_get_child(resp, "statusText"))) { + details = xmlnode_get_data(text); + } + + if (details && *details) { + err = g_strdup_printf(_("Received unexpected response from %s: %s"), url, details); + } else { + err = g_strdup_printf(_("Received unexpected response from %s"), url); + } + + g_free(details); + return err; +} + /** * @return A null-terminated base64 encoded version of the HMAC * calculated using the given key and data. @@ -121,7 +141,7 @@ purple_debug_error("oscar", "startOSCARSession could not parse " "response as XML: %s\n", response); /* Note to translators: %s in this string is a URL */ - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_START_OSCAR_SESSION); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); @@ -144,7 +164,7 @@ char *msg; purple_debug_error("oscar", "startOSCARSession response was " "missing statusCode: %s\n", response); - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_START_OSCAR_SESSION); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); @@ -169,7 +189,7 @@ "longer.")); else { char *msg; - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_START_OSCAR_SESSION); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, msg); @@ -190,7 +210,7 @@ char *msg; purple_debug_error("oscar", "startOSCARSession response was missing " "something: %s\n", response); - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_START_OSCAR_SESSION); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); @@ -213,7 +233,7 @@ char *msg; purple_debug_error("oscar", "startOSCARSession response was missing " "something: %s\n", response); - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_START_OSCAR_SESSION); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); @@ -340,7 +360,7 @@ char *msg; purple_debug_error("oscar", "clientLogin could not parse " "response as XML: %s\n", response); - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_CLIENT_LOGIN); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); @@ -364,7 +384,7 @@ char *msg; purple_debug_error("oscar", "clientLogin response was " "missing statusCode: %s\n", response); - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_CLIENT_LOGIN); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); @@ -399,7 +419,7 @@ _("AOL does not allow your screen name to authenticate here")); } else { char *msg; - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_CLIENT_LOGIN); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, msg); @@ -418,7 +438,7 @@ char *msg; purple_debug_error("oscar", "clientLogin response was missing " "something: %s\n", response); - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_CLIENT_LOGIN); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); @@ -436,7 +456,7 @@ char *msg; purple_debug_error("oscar", "clientLogin response was missing " "something: %s\n", response); - msg = g_strdup_printf(_("Received unexpected response from %s"), + msg = generate_error_message(response_node, URL_CLIENT_LOGIN); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); diff -r 31d9677b0c36 -r 06740353bfc7 libpurple/protocols/yahoo/util.c --- a/libpurple/protocols/yahoo/util.c Tue Jan 26 17:42:57 2010 +0900 +++ b/libpurple/protocols/yahoo/util.c Fri Jan 29 13:00:26 2010 +0900 @@ -890,6 +890,8 @@ } g_free(etag); } + } else if (g_str_equal(tag_name, "span") || g_str_equal(tag_name, "/span")) { + /* Do nothing */ } else { /* We don't know what the tag is. Send it unmodified. */ g_string_append(dest, tag); diff -r 31d9677b0c36 -r 06740353bfc7 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Tue Jan 26 17:42:57 2010 +0900 +++ b/pidgin/gtkblist.c Fri Jan 29 13:00:26 2010 +0900 @@ -475,6 +475,9 @@ case PURPLE_BLIST_GROUP_NODE: text = purple_group_get_name(PURPLE_GROUP(node)); break; + case PURPLE_BLIST_CHAT_NODE: + text = purple_chat_get_name(PURPLE_CHAT(node)); + break; default: g_return_if_reached(); } diff -r 31d9677b0c36 -r 06740353bfc7 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Tue Jan 26 17:42:57 2010 +0900 +++ b/pidgin/gtkconv.c Fri Jan 29 13:00:26 2010 +0900 @@ -9640,6 +9640,24 @@ return FALSE; } +static gboolean +gtkconv_tab_set_tip(GtkWidget *widget, GdkEventCrossing *event, PidginConversation *gtkconv) +{ +#if GTK_CHECK_VERSION(2, 12, 0) +#define gtk_tooltips_set_tip(tips, w, l, p) gtk_widget_set_tooltip_text(w, l) +#endif + PangoLayout *layout; + + layout = gtk_label_get_layout(GTK_LABEL(gtkconv->tab_label)); + gtk_tooltips_set_tip(gtkconv->tooltips, widget, + pango_layout_is_ellipsized(layout) ? gtk_label_get_text(GTK_LABEL(gtkconv->tab_label)) : NULL, + NULL); + return FALSE; +#if GTK_CHECK_VERSION(2, 12, 0) +#undef gtk_tooltips_set_tip +#endif +} + void pidgin_conv_window_add_gtkconv(PidginWindow *win, PidginConversation *gtkconv) { @@ -9798,6 +9816,8 @@ gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE); #endif gtk_container_add(GTK_CONTAINER(ebox), gtkconv->tabby); + g_signal_connect(G_OBJECT(ebox), "enter-notify-event", + G_CALLBACK(gtkconv_tab_set_tip), gtkconv); if (gtkconv->tab_label->parent == NULL) { /* Pack if it's a new widget */ diff -r 31d9677b0c36 -r 06740353bfc7 pidgin/gtkthemes.c --- a/pidgin/gtkthemes.c Tue Jan 26 17:42:57 2010 +0900 +++ b/pidgin/gtkthemes.c Fri Jan 29 13:00:26 2010 +0900 @@ -263,7 +263,14 @@ if (buf[0] == '#' || buf[0] == '\0') continue; - + else { + int len = strlen(buf); + while (len && (buf[len - 1] == '\r' || buf[len - 1] == '\n')) + buf[--len] = '\0'; + if (len == 0) + continue; + } + i = buf; while (isspace(*i)) i++; @@ -280,25 +287,17 @@ list->smileys = g_slist_reverse(list->smileys); list = child; } else if (!g_ascii_strncasecmp(i, "Name=", strlen("Name="))) { - int len; g_free(theme->name); theme->name = g_strdup(i + strlen("Name=")); - len = strlen(theme->name); - theme->name[len-1] = 0; - if(len > 2 && theme->name[len-2] == '\r') - theme->name[len-2] = 0; } else if (!g_ascii_strncasecmp(i, "Description=", strlen("Description="))) { g_free(theme->desc); theme->desc = g_strdup(i + strlen("Description=")); - theme->desc[strlen(theme->desc)-1] = 0; } else if (!g_ascii_strncasecmp(i, "Icon=", strlen("Icon="))) { g_free(theme->icon); theme->icon = g_build_filename(dirname, i + strlen("Icon="), NULL); - theme->icon[strlen(theme->icon)-1] = 0; } else if (!g_ascii_strncasecmp(i, "Author=", strlen("Author="))) { g_free(theme->author); theme->author = g_strdup(i + strlen("Author=")); - theme->author[strlen(theme->author)-1] = 0; } else if (load && list) { gboolean hidden = FALSE; char *sfile = NULL; @@ -311,7 +310,7 @@ char l[64]; int li = 0; while (!isspace(*i) && li < sizeof(l) - 1) { - if (*i == '\\' && *(i+1) != '\0' && *(i+1) != '\n' && *(i+1) != '\r') + if (*i == '\\' && *(i+1) != '\0') i++; l[li++] = *(i++); }