# HG changeset patch # User Yoshiki Yazawa # Date 1224929429 0 # Node ID 15d6ae92aeb44c2200004dcbd05d9bc5ae14f8c3 # Parent 1e227b8483ae1dc6c59e6508e39f6d9ffa29e26e# Parent 9f039d14bf35d792dbcb348c73776b46dbacc1f4 propagate from branch 'im.pidgin.pidgin' (head 5ccc437b944e0675b75037409a01416e31650e7f) to branch 'im.pidgin.pidgin.yaz' (head 112d77c90de8690fd360b47c72348d8e231ef510) diff -r 1e227b8483ae -r 15d6ae92aeb4 finch/gntblist.c --- a/finch/gntblist.c Mon Oct 20 23:50:43 2008 +0000 +++ b/finch/gntblist.c Sat Oct 25 10:10:29 2008 +0000 @@ -1288,6 +1288,17 @@ } static void +toggle_show_offline(GntMenuItem *item, gpointer buddy) +{ + purple_blist_node_set_bool(buddy, "show_offline", + !purple_blist_node_get_bool(buddy, "show_offline")); + if (!ggblist->manager->can_add_node(buddy)) + node_remove(purple_get_blist(), buddy); + else + node_update(purple_get_blist(), buddy); +} + +static void create_buddy_menu(GntMenu *menu, PurpleBuddy *buddy) { PurpleAccount *account; @@ -1322,10 +1333,10 @@ gnt_menuitem_set_callback(item, toggle_block_buddy, buddy); gnt_menu_add_item(menu, item); -#if 0 - add_custom_action(tree, _("View Log"), - PURPLE_CALLBACK(finch_blist_view_log_cb)), buddy); -#endif + item = gnt_menuitem_check_new(_("Show when offline")); + gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), purple_blist_node_get_bool((PurpleBlistNode*)buddy, "show_offline")); + gnt_menuitem_set_callback(item, toggle_show_offline, buddy); + gnt_menu_add_item(menu, item); /* Protocol actions */ append_proto_menu(menu, diff -r 1e227b8483ae -r 15d6ae92aeb4 libpurple/circbuffer.c --- a/libpurple/circbuffer.c Mon Oct 20 23:50:43 2008 +0000 +++ b/libpurple/circbuffer.c Sat Oct 25 10:10:29 2008 +0000 @@ -109,13 +109,12 @@ else len_stored = len; - memcpy(buf->inptr, src, len_stored); + if (len_stored > 0) + memcpy(buf->inptr, src, len_stored); if (len_stored < len) { memcpy(buf->buffer, (char*)src + len_stored, len - len_stored); buf->inptr = buf->buffer + (len - len_stored); - } else if ((buf->buffer - buf->inptr) == len_stored) { - buf->inptr = buf->buffer; } else { buf->inptr += len_stored; } diff -r 1e227b8483ae -r 15d6ae92aeb4 libpurple/proxy.c --- a/libpurple/proxy.c Mon Oct 20 23:50:43 2008 +0000 +++ b/libpurple/proxy.c Sat Oct 25 10:10:29 2008 +0000 @@ -2152,6 +2152,8 @@ break; default: + purple_debug_error("proxy", "Invalid Proxy type (%d) specified.\n", + purple_proxy_info_get_type(connect_data->gpi)); purple_proxy_connect_data_destroy(connect_data); return NULL; } @@ -2160,6 +2162,7 @@ connectport, connection_host_resolved, connect_data); if (connect_data->query_data == NULL) { + purple_debug_error("proxy", "dns query failed unexpectedly.\n"); purple_proxy_connect_data_destroy(connect_data); return NULL; } diff -r 1e227b8483ae -r 15d6ae92aeb4 libpurple/util.c --- a/libpurple/util.c Mon Oct 20 23:50:43 2008 +0000 +++ b/libpurple/util.c Sat Oct 25 10:10:29 2008 +0000 @@ -4022,6 +4022,13 @@ callback, user_data); } +static gboolean +url_fetch_connect_failed(gpointer data) +{ + url_fetch_connect_cb(data, -1, ""); + return FALSE; +} + PurpleUtilFetchUrlData * purple_util_fetch_url_request_len(const char *url, gboolean full, const char *user_agent, gboolean http11, @@ -4059,9 +4066,8 @@ if (gfud->connect_data == NULL) { - purple_util_fetch_url_error(gfud, _("Unable to connect to %s"), - gfud->website.address); - return NULL; + /* Trigger the connect_cb asynchronously. */ + purple_timeout_add(10, url_fetch_connect_failed, gfud); } return gfud; diff -r 1e227b8483ae -r 15d6ae92aeb4 pidgin.spec.in --- a/pidgin.spec.in Mon Oct 20 23:50:43 2008 +0000 +++ b/pidgin.spec.in Sat Oct 25 10:10:29 2008 +0000 @@ -263,6 +263,7 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libjabber.so rm -f $RPM_BUILD_ROOT%{_libdir}/*.la rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod +find $RPM_BUILD_ROOT -type f -name '*.a' -exec rm -f {} ';' find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';' find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -exec rm -f {} ';' diff -r 1e227b8483ae -r 15d6ae92aeb4 pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Mon Oct 20 23:50:43 2008 +0000 +++ b/pidgin/gtkdialogs.c Sat Oct 25 10:10:29 2008 +0000 @@ -70,7 +70,7 @@ /* Order: Alphabetical by Last Name */ static const struct developer developers[] = { {"Daniel 'datallah' Atallah", N_("developer"), NULL}, - {"John 'rekkanoryo' Bailey", N_("developer"), NULL}, + {"John 'rekkanoryo' Bailey", N_("developer & bug master"), NULL}, {"Ethan 'Paco-Paco' Blanton", N_("developer"), NULL}, {"Thomas Butter", N_("developer"), NULL}, /* feel free to not translate this */ @@ -88,18 +88,15 @@ {"Tim 'marv' Ringenbach", N_("developer"), NULL}, {"Elliott 'QuLogic' Sales de Andrade", N_("developer"), NULL}, {"Luke 'LSchiere' Schierer", N_("support"), "lschiere@users.sf.net"}, - {"Megan 'Cae' Schneider", N_("support/QA"), NULL}, {"Evan Schoenberg", N_("developer"), NULL}, {"Kevin 'SimGuy' Stange", N_("developer & webmaster"), NULL}, {"Will 'resiak' Thompson", N_("developer"), NULL}, {"Stu 'nosnilmot' Tomlinson", N_("developer"), NULL}, - {"Nathan 'faceprint' Walp", N_("developer"), NULL}, {NULL, NULL, NULL} }; /* Order: Alphabetical by Last Name */ static const struct developer patch_writers[] = { - {"Felipe 'shx' Contreras", NULL, NULL}, {"Marcus 'malu' Lundblad", NULL, NULL}, {"Dennis 'EvilDennisR' Ristuccia", N_("Senior Contributor/QA"), NULL}, {"Peter 'Fmoo' Ruibal", NULL, NULL}, @@ -117,14 +114,17 @@ {"Christian 'ChipX86' Hammond", N_("developer & webmaster"), NULL}, /* If "lazy bum" translates literally into a serious insult, use something else or omit it. */ {"Syd Logan", N_("hacker and designated driver [lazy bum]"), NULL}, + {"Megan 'Cae' Schneider", N_("support/QA"), NULL}, {"Jim Seymour", N_("XMPP developer"), NULL}, {"Mark Spencer", N_("original author"), "markster@marko.net"}, + {"Nathan 'faceprint' Walp", N_("developer"), NULL}, {"Eric Warmenhoven", N_("lead developer"), "warmenhoven@yahoo.com"}, {NULL, NULL, NULL} }; /* Order: Alphabetical by Last Name */ static const struct developer retired_patch_writers[] = { + {"Felipe 'shx' Contreras", NULL, NULL}, {"Decklin Foster", NULL, NULL}, {"Peter 'Bleeter' Lawler", NULL, NULL}, {"Robert 'Robot101' McQueen", NULL, NULL}, @@ -193,7 +193,7 @@ {N_("Macedonian"), "mk", "Arangel Angov ", "arangel@linux.net.mk"}, {N_("Macedonian"), "mk", "Ivana Kirkovska", "ivana.kirkovska@gmail.com"}, {N_("Macedonian"), "mk", "Jovan Naumovski", "jovan@lugola.net"}, - {"Mongolian", "mn", "gooyo"}, + {"Mongolian", "mn", "gooyo", NULL}, {N_("Bokmål Norwegian"), "nb", "Espen Stefansen", "espenas@gmail.com"}, {N_("Nepali"), "ne", "Shyam Krishna Bal", "shyamkrishna_bal@yahoo.com"}, {N_("Dutch, Flemish"), "nl", "Vincent van Adrighem", "V.vanAdrighem@dirck.mine.nu"}, diff -r 1e227b8483ae -r 15d6ae92aeb4 pidgin/gtkimhtml.c --- a/pidgin/gtkimhtml.c Mon Oct 20 23:50:43 2008 +0000 +++ b/pidgin/gtkimhtml.c Sat Oct 25 10:10:29 2008 +0000 @@ -352,9 +352,7 @@ g_string_free (t->values, TRUE); g_free (t->children); } - if (t && t->image) { - t->image->imhtml = NULL; - } + g_free (t); } } @@ -2536,6 +2534,78 @@ } } +/* CSS colors are either rgb (x,y,z) or #hex + * we need to convert to hex if it is RGB */ +static gchar* +parse_css_color(gchar *in_color) +{ + char *tmp = in_color; + + if (*tmp == 'r' && *(++tmp) == 'g' && *(++tmp) == 'b' && *(++tmp)) { + int rgbval[] = {0, 0, 0}; + int count = 0; + const char *v_start; + + while (*tmp && g_ascii_isspace(*tmp)) + tmp++; + if (*tmp != '(') { + /* We don't support rgba() */ + purple_debug_warning("gtkimhtml", "Invalid rgb CSS color in '%s'!\n", in_color); + return in_color; + } + tmp++; + + while (count < 3) { + /* Skip any leading spaces */ + while (*tmp && g_ascii_isspace(*tmp)) + tmp++; + + /* Find the subsequent contiguous digits */ + v_start = tmp; + if (*v_start == '-') + tmp++; + while (*tmp && g_ascii_isdigit(*tmp)) + tmp++; + + if (tmp != v_start) { + char prev = *tmp; + *tmp = '\0'; + rgbval[count] = atoi(v_start); + *tmp = prev; + + /* deal with % */ + while (*tmp && g_ascii_isspace(*tmp)) + tmp++; + if (*tmp == '%') { + rgbval[count] = (rgbval[count] / 100.0) * 255; + tmp++; + } + } else { + purple_debug_warning("gtkimhtml", "Invalid rgb CSS color in '%s'!\n", in_color); + return in_color; + } + + if (rgbval[count] > 255) { + rgbval[count] = 255; + } else if (rgbval[count] < 0) { + rgbval[count] = 0; + } + + while (*tmp && g_ascii_isspace(*tmp)) + tmp++; + if (*tmp == ',') + tmp++; + + count++; + } + + g_free(in_color); + return g_strdup_printf("#%02X%02X%02X", rgbval[0], rgbval[1], rgbval[2]); + } + + return in_color; +} + void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml, const gchar *text, GtkIMHtmlOptions options, @@ -2996,7 +3066,7 @@ oldfont = fonts->data; if (color && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_FORECOLOR)) { - font->fore = color; + font->fore = parse_css_color(color); gtk_imhtml_toggle_forecolor(imhtml, font->fore); } else { if (oldfont && oldfont->fore) @@ -3005,7 +3075,7 @@ } if (background && !(options & GTK_IMHTML_NO_COLOURS) && (imhtml->format_functions & GTK_IMHTML_BACKCOLOR)) { - font->back = background; + font->back = parse_css_color(background); gtk_imhtml_toggle_backcolor(imhtml, font->back); } else { if (oldfont && oldfont->back) diff -r 1e227b8483ae -r 15d6ae92aeb4 pidgin/gtkstatusbox.c --- a/pidgin/gtkstatusbox.c Mon Oct 20 23:50:43 2008 +0000 +++ b/pidgin/gtkstatusbox.c Sat Oct 25 10:10:29 2008 +0000 @@ -397,7 +397,8 @@ status_box->icon_box = gtk_event_box_new(); gtk_widget_set_parent(status_box->icon_box, GTK_WIDGET(status_box)); gtk_widget_show(status_box->icon_box); -#if 0 + +#if GTK_CHECK_VERSION(2,12,0) gtk_widget_set_tooltip_text(status_box->icon_box, status_box->account ? _("Click to change your buddyicon for this account.") : _("Click to change your buddyicon for all accounts.")); diff -r 1e227b8483ae -r 15d6ae92aeb4 pidgin/plugins/notify.c --- a/pidgin/plugins/notify.c Mon Oct 20 23:50:43 2008 +0000 +++ b/pidgin/plugins/notify.c Sat Oct 25 10:10:29 2008 +0000 @@ -766,8 +766,7 @@ /* Urgent method button */ toggle = gtk_check_button_new_with_mnemonic(_("Set window manager \"_URGENT\" hint")); #else - /* TODO: When we're not string frozen, mark for translation */ - toggle = gtk_check_button_new_with_mnemonic("_Flash window"); + toggle = gtk_check_button_new_with_mnemonic(_("_Flash window")); #endif gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle),