changeset 29757:2ad2e3490b23

propagate from branch 'im.pidgin.pidgin' (head 1d831e835bac31debd4d67cc75397c378c00bc7e) to branch 'im.pidgin.pidgin.next.minor' (head 6a9b4038509121d25981653d0395c423aecb8699)
author Paul Aurich <paul@darkrain42.org>
date Mon, 15 Feb 2010 00:28:10 +0000
parents 031fd1cd88df (diff) 18773d906caf (current diff)
children 7a33db3bbb5f
files ChangeLog libpurple/protocols/jabber/jabber.c libpurple/protocols/jabber/presence.c pidgin/gtkcelllayout.c pidgin/gtkcelllayout.h pidgin/gtkcellrendererprogress.c pidgin/gtkcellrendererprogress.h pidgin/gtkcellview.c pidgin/gtkcellview.h pidgin/gtkcellviewmenuitem.c pidgin/gtkcellviewmenuitem.h pidgin/gtkexpander.c pidgin/gtkexpander.h pidgin/gtkpounce.c pidgin/gtkprefs.c pidgin/gtkutils.c pidgin/pidgincombobox.c pidgin/pidgincombobox.h pidgin/pixmaps/tray/16/tray-away.png pidgin/pixmaps/tray/16/tray-busy.png pidgin/pixmaps/tray/16/tray-connecting.png pidgin/pixmaps/tray/16/tray-extended-away.png pidgin/pixmaps/tray/16/tray-invisible.png pidgin/pixmaps/tray/16/tray-message.png pidgin/pixmaps/tray/16/tray-new-im.png pidgin/pixmaps/tray/16/tray-offline.png pidgin/pixmaps/tray/16/tray-online.png pidgin/pixmaps/tray/22/tray-away.png pidgin/pixmaps/tray/22/tray-busy.png pidgin/pixmaps/tray/22/tray-connecting.png pidgin/pixmaps/tray/22/tray-extended-away.png pidgin/pixmaps/tray/22/tray-invisible.png pidgin/pixmaps/tray/22/tray-message.png pidgin/pixmaps/tray/22/tray-new-im.png pidgin/pixmaps/tray/22/tray-offline.png pidgin/pixmaps/tray/22/tray-online.png pidgin/pixmaps/tray/32/tray-away.png pidgin/pixmaps/tray/32/tray-busy.png pidgin/pixmaps/tray/32/tray-connecting.png pidgin/pixmaps/tray/32/tray-extended-away.png pidgin/pixmaps/tray/32/tray-invisible.png pidgin/pixmaps/tray/32/tray-message.png pidgin/pixmaps/tray/32/tray-new-im.png pidgin/pixmaps/tray/32/tray-offline.png pidgin/pixmaps/tray/32/tray-online.png pidgin/pixmaps/tray/48/tray-away.png pidgin/pixmaps/tray/48/tray-busy.png pidgin/pixmaps/tray/48/tray-connecting.png pidgin/pixmaps/tray/48/tray-extended-away.png pidgin/pixmaps/tray/48/tray-invisible.png pidgin/pixmaps/tray/48/tray-message.png pidgin/pixmaps/tray/48/tray-new-im.png pidgin/pixmaps/tray/48/tray-offline.png pidgin/pixmaps/tray/48/tray-online.png pidgin/win32/gtkwin32dep.c
diffstat 15 files changed, 165 insertions(+), 140 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Feb 12 21:09:34 2010 +0000
+++ b/ChangeLog	Mon Feb 15 00:28:10 2010 +0000
@@ -67,6 +67,7 @@
 	* When getting info on a domain-only (server) JID, show uptime
 	  (when given by the result of the "last query") and don't show status as
 	  offline.
+	* Fix getting info on your own JID.
 	* Wrap XHTML messages in <p>, as described in XEP-0071, for compatibility
 	  with some clients.
 	* Don't do an SRV lookup for a STUN server associated with the account
@@ -76,6 +77,9 @@
 	  disconnected by servers that dislike overly-large stanzas.
 	* Fix receiving messages without markup over an Openfire BOSH connection
 	  (forcibly put the stanzas in the jabber:client namespace).
+	* The default value for the file transfer proxies is automatically
+	  updated when an account connects, if it is still the old (broken)
+	  default (from 'proxy.jabber.org' to 'proxy.eu.jabber.org').
 
 	Yahoo:
 	* Don't send <span> and </span> tags.  (Fartash Faghri)
--- a/libpurple/protocols/jabber/buddy.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Mon Feb 15 00:28:10 2010 +0000
@@ -980,28 +980,25 @@
 	char *text;
 	char *serverside_alias = NULL;
 	xmlnode *vcard;
-	PurpleBuddy *b;
+	PurpleAccount *account;
 	JabberBuddyInfo *jbi = data;
 	PurpleNotifyUserInfo *user_info;
 
-	if(!jbi)
-		return;
+	g_return_if_fail(jbi != NULL);
 
 	jabber_buddy_info_remove_id(jbi, id);
 
-	if(!from)
+	if (type == JABBER_IQ_ERROR) {
+		purple_debug_info("jabber", "Got error response for vCard\n");
+		jabber_buddy_info_show_if_ready(jbi);
 		return;
-
-	if(!jabber_buddy_find(js, from, FALSE))
-		return;
-
-	/* XXX: handle the error case */
+	}
 
 	user_info = jbi->user_info;
-	bare_jid = jabber_get_bare_jid(from);
+	account = purple_connection_get_account(js->gc);
+	bare_jid = jabber_get_bare_jid(from ? from : purple_account_get_username(account));
 
-	b = purple_find_buddy(js->gc->account, bare_jid);
-
+	/* TODO: Is the query xmlns='vcard-temp' version of this still necessary? */
 	if((vcard = xmlnode_get_child(packet, "vCard")) ||
 			(vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
 		xmlnode *child;
@@ -1183,8 +1180,7 @@
 						purple_notify_user_info_add_pair(user_info, (photo ? _("Photo") : _("Logo")), img_text);
 
 						hash = jabber_calculate_data_sha1sum(data, size);
-						purple_buddy_icons_set_for_user(js->gc->account, bare_jid,
-								data, size, hash);
+						purple_buddy_icons_set_for_user(account, bare_jid, data, size, hash);
 						g_free(hash);
 						g_free(img_text);
 					}
@@ -1196,8 +1192,10 @@
 	}
 
 	if (serverside_alias) {
+		PurpleBuddy *b;
 		/* If we found a serverside alias, set it and tell the core */
-		serv_got_alias(js->gc, from, serverside_alias);
+		serv_got_alias(js->gc, bare_jid, serverside_alias);
+		b = purple_find_buddy(account, bare_jid);
 		if (b) {
 			purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", serverside_alias);
 		}
@@ -1363,9 +1361,6 @@
 
 	jabber_buddy_info_remove_id(jbi, id);
 
-	if(!from)
-		return;
-
 	if (type == JABBER_IQ_RESULT) {
 		if((query = xmlnode_get_child(packet, "query"))) {
 			seconds = xmlnode_get_attrib(query, "seconds");
@@ -1587,9 +1582,18 @@
 	jabber_iq_send(iq);
 
 	if (is_bare_jid) {
-		for(resources = jb->resources; resources; resources = resources->next) {
-			JabberBuddyResource *jbr = resources->data;
-			dispatch_queries_for_resource(js, jbi, is_bare_jid, jid, jbr);
+		if (jb->resources) {
+			for(resources = jb->resources; resources; resources = resources->next) {
+				JabberBuddyResource *jbr = resources->data;
+				dispatch_queries_for_resource(js, jbi, is_bare_jid, jid, jbr);
+			}
+		} else {
+			/* user is offline, send a jabber:iq:last to find out last time online */
+			iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
+			xmlnode_set_attrib(iq->node, "to", jid);
+			jabber_iq_set_callback(iq, jabber_last_offline_parse, jbi);
+			jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
+			jabber_iq_send(iq);
 		}
 	} else {
 		JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, slash + 1);
@@ -1601,15 +1605,6 @@
 					"JabberBuddyResource!\n", jid);
 	}
 
-	if (!jb->resources && is_bare_jid) {
-		/* user is offline, send a jabber:iq:last to find out last time online */
-		iq = jabber_iq_new_query(js, JABBER_IQ_GET, NS_LAST_ACTIVITY);
-		xmlnode_set_attrib(iq->node, "to", jid);
-		jabber_iq_set_callback(iq, jabber_last_offline_parse, jbi);
-		jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id));
-		jabber_iq_send(iq);
-	}
-
 	js->pending_buddy_info_requests = g_slist_prepend(js->pending_buddy_info_requests, jbi);
 	jbi->timeout_handle = purple_timeout_add_seconds(30, jabber_buddy_get_info_timeout, jbi);
 }
--- a/libpurple/protocols/jabber/jabber.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Mon Feb 15 00:28:10 2010 +0000
@@ -951,6 +951,10 @@
 	if (js == NULL)
 		return;
 
+	/* TODO: Remove this at some point.  Added 2010-02-14 (v2.6.6) */
+	if (g_str_equal("proxy.jabber.org", purple_account_get_string(account, "ft_proxies", "")))
+		purple_account_set_string(account, "ft_proxies", JABBER_DEFAULT_FT_PROXIES);
+
 	/*
 	 * Calculate the avatar hash for our current image so we know (when we
 	 * fetch our vCard and PEP avatar) if we should send our avatar to the
--- a/libpurple/protocols/jabber/jabber.h	Fri Feb 12 21:09:34 2010 +0000
+++ b/libpurple/protocols/jabber/jabber.h	Mon Feb 15 00:28:10 2010 +0000
@@ -81,6 +81,7 @@
 #define CAPS0115_NODE "http://pidgin.im/"
 
 #define JABBER_DEFAULT_REQUIRE_TLS    TRUE
+#define JABBER_DEFAULT_FT_PROXIES     "proxy.eu.jabber.org"
 
 /* Index into attention_types list */
 #define JABBER_BUZZ 0
--- a/libpurple/protocols/jabber/libxmpp.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/libpurple/protocols/jabber/libxmpp.c	Mon Feb 15 00:28:10 2010 +0000
@@ -383,7 +383,7 @@
 						  "ft_proxies",
 						/* TODO: Is this an acceptable default?
 						 * Also, keep this in sync as they add more servers */
-						  "proxy.eu.jabber.org");
+						  JABBER_DEFAULT_FT_PROXIES);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
 						  option);
 
--- a/libpurple/protocols/jabber/message.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/libpurple/protocols/jabber/message.c	Mon Feb 15 00:28:10 2010 +0000
@@ -930,20 +930,13 @@
 }
 
 static gboolean
-jabber_conv_support_custom_smileys(const PurpleConnection *gc,
+jabber_conv_support_custom_smileys(JabberStream *js,
 								   PurpleConversation *conv,
 								   const gchar *who)
 {
-	JabberStream *js = (JabberStream *) gc->proto_data;
 	JabberBuddy *jb;
 	JabberChat *chat;
 
-	if (!js) {
-		purple_debug_error("jabber",
-			"jabber_conv_support_custom_smileys: could not find stream\n");
-		return FALSE;
-	}
-
 	switch (purple_conversation_get_type(conv)) {
 		case PURPLE_CONV_TYPE_IM:
 			jb = jabber_buddy_find(js, who, FALSE);
@@ -979,7 +972,7 @@
 		purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, jm->to,
 			account);
 
-	if (jabber_conv_support_custom_smileys(jm->js->gc, conv, jm->to)) {
+	if (jabber_conv_support_custom_smileys(jm->js, conv, jm->to)) {
 		GList *found_smileys = jabber_message_xhtml_find_smileys(xhtml);
 
 		if (found_smileys) {
--- a/libpurple/protocols/jabber/presence.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/libpurple/protocols/jabber/presence.c	Mon Feb 15 00:28:10 2010 +0000
@@ -65,7 +65,12 @@
 {
 	PurpleAccount *account;
 	PurplePresence *presence;
+	JabberBuddy *jb;
+	JabberBuddyResource *jbr;
 	const char *username;
+	JabberBuddyState state;
+	char *msg;
+	int priority;
 
 	g_return_if_fail(js->user != NULL);
 
@@ -74,29 +79,27 @@
 	presence = purple_account_get_presence(account);
 	if (status == NULL)
 		status = purple_presence_get_active_status(presence);
+	purple_status_to_jabber(status, &state, &msg, &priority);
 
-	if (purple_find_buddy(account, username)) {
-		JabberBuddy *jb = jabber_buddy_find(js, username, TRUE);
-		JabberBuddyResource *jbr;
-		JabberBuddyState state;
-		char *msg;
-		int priority;
-
-		g_return_if_fail(jb != NULL);
-
-		purple_status_to_jabber(status, &state, &msg, &priority);
+	jb = js->user_jb;
 
-		if (state == JABBER_BUDDY_STATE_UNAVAILABLE ||
-				state == JABBER_BUDDY_STATE_UNKNOWN) {
-			jabber_buddy_remove_resource(jb, js->user->resource);
-		} else {
-			jbr = jabber_buddy_track_resource(jb, js->user->resource, priority,
-					state, msg);
-			jbr->idle = purple_presence_is_idle(presence) ?
-					purple_presence_get_idle_time(presence) : 0;
-		}
+	if (state == JABBER_BUDDY_STATE_UNAVAILABLE ||
+			state == JABBER_BUDDY_STATE_UNKNOWN) {
+		jabber_buddy_remove_resource(jb, js->user->resource);
+	} else {
+		jbr = jabber_buddy_track_resource(jb, js->user->resource, priority,
+				state, msg);
+		jbr->idle = purple_presence_is_idle(presence) ?
+				purple_presence_get_idle_time(presence) : 0;
+	}
 
-		if ((jbr = jabber_buddy_find_resource(jb, NULL))) {
+	/*
+	 * While we need to track the status of this resource, the core
+	 * only cares if we're on our own buddy list.
+	 */
+	if (purple_find_buddy(account, username)) {
+		jbr = jabber_buddy_find_resource(jb, NULL);
+		if (jbr) {
 			purple_prpl_got_user_status(account, username,
 					jabber_buddy_state_get_status_id(jbr->state),
 					"priority", jbr->priority,
@@ -108,8 +111,8 @@
 					msg ? "message" : NULL, msg,
 					NULL);
 		}
-		g_free(msg);
 	}
+	g_free(msg);
 }
 
 void jabber_set_status(PurpleAccount *account, PurpleStatus *status)
--- a/libpurple/proxy.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/libpurple/proxy.c	Mon Feb 15 00:28:10 2010 +0000
@@ -2100,8 +2100,12 @@
 	addr = connect_data->hosts->data;
 	connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data);
 #ifdef HAVE_INET_NTOP
-	inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr,
-			ipaddr, sizeof(ipaddr));
+	if (addr->sa_family == AF_INET)
+		inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr,
+				ipaddr, sizeof(ipaddr));
+	else if (addr->sa_family == AF_INET6)
+		inet_ntop(addr->sa_family, &((struct sockaddr_in6 *)addr)->sin6_addr,
+				ipaddr, sizeof(ipaddr));
 #else
 	memcpy(ipaddr, inet_ntoa(((struct sockaddr_in *)addr)->sin_addr),
 			sizeof(ipaddr));
--- a/libpurple/win32/targets.mak	Fri Feb 12 21:09:34 2010 +0000
+++ b/libpurple/win32/targets.mak	Mon Feb 15 00:28:10 2010 +0000
@@ -23,7 +23,7 @@
 
 $(PIDGIN_REVISION_H): $(PIDGIN_REVISION_RAW_TXT)
 	if [ -f $< ]; then \
-		sed 's/^\(.\+\)$$/#define REVISION "\1"/' $< > $@; \
+		sed 's/^\(.\{1,\}\)$$/#define REVISION "\1"/' $< > $@; \
 	fi
 	[ -f $@ ] || echo "#define REVISION \"unknown\"" > $@
 
--- a/pidgin/gtkpounce.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/pidgin/gtkpounce.c	Mon Feb 15 00:28:10 2010 +0000
@@ -1533,38 +1533,7 @@
 				g_free(localecmd);
 			}
 #else /* !_WIN32 */
-			PROCESS_INFORMATION pi;
-			BOOL retval;
-			gchar *message = NULL;
-			STARTUPINFOW si;
-
-			wchar_t *wc_cmd = g_utf8_to_utf16(command,
-					-1, NULL, NULL, NULL);
-
-			memset(&pi, 0, sizeof(pi));
-			memset(&si, 0 , sizeof(si));
-			si.cb = sizeof(si);
-
-			retval = CreateProcessW(NULL, wc_cmd, NULL,
-					NULL, 0, 0, NULL, NULL,
-					&si, &pi);
-			g_free(wc_cmd);
-
-			if (retval) {
-				CloseHandle(pi.hProcess);
-				CloseHandle(pi.hThread);
-			} else {
-				message = g_win32_error_message(GetLastError());
-			}
-
-			purple_debug_info("pounce",
-					"Pounce execute command called for: "
-					"%s\n%s%s%s",
-						command,
-						retval ? "" : "Error: ",
-						retval ? "" : message,
-						retval ? "" : "\n");
-			g_free(message);
+			winpidgin_shell_execute(command, "open", NULL);
 #endif /* !_WIN32 */
 		}
 	}
--- a/pidgin/gtkprefs.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/pidgin/gtkprefs.c	Mon Feb 15 00:28:10 2010 +0000
@@ -1443,11 +1443,27 @@
 
 #ifdef _WIN32
 static void
+apply_custom_font(void)
+{
+	PangoFontDescription *desc = NULL;
+	if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font")) {
+		const char *font = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/custom_font");
+		desc = pango_font_description_from_string(font);
+	}
+
+	gtk_widget_modify_font(sample_imhtml, desc);
+	if (desc)
+		pango_font_description_free(desc);
+
+}
+static void
 pidgin_custom_font_set(GtkFontButton *font_button, gpointer nul)
 {
+
 	purple_prefs_set_string(PIDGIN_PREFS_ROOT "/conversations/custom_font",
-				gtk_font_button_get_font_name(font_button))
-;
+				gtk_font_button_get_font_name(font_button));
+
+	apply_custom_font();
 }
 #endif
 
@@ -1520,6 +1536,7 @@
 	if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font"))
 		gtk_widget_set_sensitive(hbox, FALSE);
 	g_signal_connect(G_OBJECT(fontpref), "clicked", G_CALLBACK(pidgin_toggle_sensitive), hbox);
+	g_signal_connect(G_OBJECT(fontpref), "clicked", G_CALLBACK(apply_custom_font), hbox);
 	g_signal_connect(G_OBJECT(font_button), "font-set", G_CALLBACK(pidgin_custom_font_set), NULL);
 
 	}
--- a/pidgin/gtkutils.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/pidgin/gtkutils.c	Mon Feb 15 00:28:10 2010 +0000
@@ -105,7 +105,6 @@
 void
 pidgin_setup_imhtml(GtkWidget *imhtml)
 {
-	PangoFontDescription *desc = NULL;
 	g_return_if_fail(imhtml != NULL);
 	g_return_if_fail(GTK_IS_IMHTML(imhtml));
 
@@ -115,15 +114,16 @@
 
 #ifdef _WIN32
 	if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font")) {
+		PangoFontDescription *desc;
 		const char *font = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/custom_font");
 		desc = pango_font_description_from_string(font);
+		if (desc) {
+			gtk_widget_modify_font(imhtml, desc);
+			pango_font_description_free(desc);
+		}
 	}
 #endif
 
-	if (desc) {
-		gtk_widget_modify_font(imhtml, desc);
-		pango_font_description_free(desc);
-	}
 }
 
 static
--- a/pidgin/win32/gtkwin32dep.c	Fri Feb 12 21:09:34 2010 +0000
+++ b/pidgin/win32/gtkwin32dep.c	Mon Feb 15 00:28:10 2010 +0000
@@ -156,6 +156,7 @@
 	wsinfo.lpVerb = w_verb;
 	wsinfo.lpFile = w_uri;
 	wsinfo.nShow = SW_SHOWNORMAL;
+	wsinfo.fMask |= SEE_MASK_FLAG_NO_UI;
 	if (clazz != NULL) {
 		w_clazz = g_utf8_to_utf16(clazz, -1, NULL, NULL, NULL);
 		wsinfo.fMask |= SEE_MASK_CLASSNAME;
@@ -383,7 +384,6 @@
 }
 
 void winpidgin_init(HINSTANCE hint) {
-	FARPROC exchndl_SetLogFile;
 
 	purple_debug_info("winpidgin", "winpidgin_init start\n");
 
@@ -401,16 +401,6 @@
 
 	MyFlashWindowEx = (LPFNFLASHWINDOWEX) wpurple_find_and_loadproc("user32.dll", "FlashWindowEx");
 
-	exchndl_SetLogFile = wpurple_find_and_loadproc("exchndl.dll", "SetLogFile");
-	if (exchndl_SetLogFile) {
-		gchar *filename = g_build_filename(purple_user_dir(),
-			"pidgin.RPT", NULL);
-		purple_debug_info("winpidgin", "Setting exchndl.dll LogFile to %s\n",
-			filename);
-		(exchndl_SetLogFile)(filename);
-		g_free(filename);
-	}
-
 	purple_debug_info("winpidgin", "winpidgin_init end\n");
 }
 
--- a/po/cs.po	Fri Feb 12 21:09:34 2010 +0000
+++ b/po/cs.po	Mon Feb 15 00:28:10 2010 +0000
@@ -9,8 +9,8 @@
 msgstr ""
 "Project-Id-Version: pidgin VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-14 12:19-0800\n"
-"PO-Revision-Date: 2010-01-14 21:08+0100\n"
+"POT-Creation-Date: 2010-02-13 23:29-0800\n"
+"PO-Revision-Date: 2010-02-12 22:16+0100\n"
 "Last-Translator: David Vachulka <david@konstrukce-cad.com>\n"
 "Language-Team: Czech <cs@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -4669,6 +4669,9 @@
 msgid "(Code %s)"
 msgstr "(Kód %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Vlastní smajlík ve zprávě je pro poslání příliš velký."
+
 msgid "XML Parse error"
 msgstr "Chyba zpracování XML"
 
@@ -6654,7 +6657,10 @@
 msgid "Server port"
 msgstr "Port serveru"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Přijata neočekávaná odpověď od %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Přijata neočekávaná odpověď od %s"
@@ -6672,6 +6678,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Chyba žádosti %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Server požádal o vyplnění CAPTCHA pro přihlášení, ale klient v současné době "
+"CAPTCHA nepodporuje."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL neumožňuje ověřit jméno tady"
 
@@ -7244,14 +7257,6 @@
 "[Nemohu zobrazit zprávu od tohoto uživatele, protože obsahovala neplatné "
 "znaky.]"
 
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Poslední akce, o kterou jste se pokusili, nemohla být provedena, protože "
-"jste překročili limit rychlosti. Počkejte prosím 10 sekund a zkuste to "
-"znovu.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Byl jste odpojen z místnosti chatu %s."
@@ -11911,6 +11916,9 @@
 msgid "Occitan"
 msgstr "Occitan"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Punjabi"
 
@@ -13619,6 +13627,9 @@
 msgid "_Save File"
 msgstr "_Uložit soubor"
 
+msgid "Do you really want to clear?"
+msgstr "Opravdu chcete vymazat?"
+
 msgid "Select color"
 msgstr "Zvolte barvu"
 
@@ -14813,6 +14824,14 @@
 msgstr "Tento zásuvný modul je užitečný pro ladění serverů nebo klientů XMPP."
 
 #~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Poslední akce, o kterou jste se pokusili, nemohla být provedena, protože "
+#~ "jste překročili limit rychlosti. Počkejte prosím 10 sekund a zkuste to "
+#~ "znovu.\n"
+
+#~ msgid ""
 #~ "Unable to find alternative XMPP connection methods after failing to "
 #~ "connect directly."
 #~ msgstr ""
--- a/po/nn.po	Fri Feb 12 21:09:34 2010 +0000
+++ b/po/nn.po	Mon Feb 15 00:28:10 2010 +0000
@@ -1,16 +1,20 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Pidgin 2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-13 17:24-0800\n"
-"PO-Revision-Date: 2010-01-07 15:35+0100\n"
+"POT-Creation-Date: 2010-02-13 23:32-0800\n"
+"PO-Revision-Date: 2010-02-12 23:52+0100\n"
 "Last-Translator: Yngve Spjeld Landro <nynorsk(a)strilen(.)net>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Poedit-Bookmarks: -1,1060,1063,3712,-1,-1,-1,-1,-1,-1\n"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -4697,6 +4701,9 @@
 msgid "(Code %s)"
 msgstr "(Kode %s)"
 
+msgid "A custom smiley in the message is too large to send."
+msgstr "Eit tilpassa smilefjes i meldinga er for stor til å kunna sendast."
+
 msgid "XML Parse error"
 msgstr "Feil i XML-tolkinga"
 
@@ -6693,7 +6700,10 @@
 msgid "Server port"
 msgstr "Tenarport"
 
-#. Note to translators: %s in this string is a URL
+#, c-format
+msgid "Received unexpected response from %s: %s"
+msgstr "Fekk uventa svar frå %s: %s"
+
 #, c-format
 msgid "Received unexpected response from %s"
 msgstr "Fekk uventa svar frå %s"
@@ -6711,6 +6721,13 @@
 msgid "Error requesting %s: %s"
 msgstr "Klarte ikkje å henta %s: %s"
 
+msgid ""
+"Server requested that you fill out a CAPTCHA in order to sign in, but this "
+"client does not currently support CAPTCHAs."
+msgstr ""
+"Tenaren bad deg skriva inn ein CAPTCHA for å logga deg på, men denne "
+"klienten støttar enno ikkje CAPTCHA-er."
+
 msgid "AOL does not allow your screen name to authenticate here"
 msgstr "AOL tillèt ikkje at brukarnamnet ditt kan autentiserast her"
 
@@ -7267,14 +7284,6 @@
 "Klarer ikkje visa ei melding frå denne brukaren: ho inneheldt ulovlege "
 "teikn.]"
 
-# mengdegrensa?
-msgid ""
-"The last action you attempted could not be performed because you are over "
-"the rate limit. Please wait 10 seconds and try again.\n"
-msgstr ""
-"Klarte ikkje å utføra den siste handlinga sidan du er over mengdegrensa. "
-"Vent i 10 sekund og prøv igjen.\n"
-
 #, c-format
 msgid "You have been disconnected from chat room %s."
 msgstr "Du er blitt fråkopla praterommet %s."
@@ -11934,6 +11943,9 @@
 msgid "Mongolian"
 msgstr "Mongolsk"
 
+msgid "Marathi"
+msgstr "Marathi"
+
 msgid "Malay"
 msgstr "Malayisk"
 
@@ -11952,6 +11964,9 @@
 msgid "Occitan"
 msgstr "Oksitansk"
 
+msgid "Oriya"
+msgstr "Oriya"
+
 msgid "Punjabi"
 msgstr "Panjabi"
 
@@ -13673,6 +13688,9 @@
 msgid "_Save File"
 msgstr "_Lagra fila"
 
+msgid "Do you really want to clear?"
+msgstr "Vil du verkeleg tømma?"
+
 msgid "Select color"
 msgstr "Vel farge"
 
@@ -14876,6 +14894,14 @@
 msgstr ""
 "Dette programtillegget er nyttig ved feilsøking av XMPP-tenarar og -klientar."
 
+# mengdegrensa?
+#~ msgid ""
+#~ "The last action you attempted could not be performed because you are over "
+#~ "the rate limit. Please wait 10 seconds and try again.\n"
+#~ msgstr ""
+#~ "Klarte ikkje å utføra den siste handlinga sidan du er over mengdegrensa. "
+#~ "Vent i 10 sekund og prøv igjen.\n"
+
 #~ msgid "%s"
 #~ msgstr "%s"