diff options
52 files changed, 4642 insertions, 2586 deletions
diff --git a/configure.ac b/configure.ac index 91bd284eb..122af941b 100644 --- a/configure.ac +++ b/configure.ac @@ -32,7 +32,7 @@ AC_COPYRIGHT([ # Hardp deps FOLKS_REQUIRED=0.4.0 -GLIB_REQUIRED=2.27.2 +GLIB_REQUIRED=2.28.0 GNUTLS_REQUIRED=2.8.5 GTK_REQUIRED=3.0.2 KEYRING_REQUIRED=2.26.0 @@ -40,7 +40,7 @@ GCR_REQUIRED=2.91.4 LIBCANBERRA_GTK_REQUIRED=0.25 LIBNOTIFY_REQUIRED=0.7.0 TELEPATHY_FARSIGHT_REQUIRED=0.0.14 -TELEPATHY_GLIB_REQUIRED=0.14.1 +TELEPATHY_GLIB_REQUIRED=0.14.3 TELEPATHY_LOGGER=0.2.0 # Optional deps diff --git a/data/Template.html b/data/Template.html index 708e85bdb..79224b8de 100644 --- a/data/Template.html +++ b/data/Template.html @@ -3,66 +3,215 @@ <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <base href="%@"> - <script type="text/ecmascript" defer="defer"> - - //Appending new content to the message view - function appendMessage(html) { - shouldScroll = nearBottom(); + <script type="text/javascript" defer="defer"> + // NOTE: + // Any percent signs in this file must be escaped! + // Use two escape signs (%%) to display it, this is passed through a format call! - //Remove any existing insertion point - insert = document.getElementById("insert"); - if(insert) insert.parentNode.removeChild(insert); + function appendHTML(html) { + var node = document.getElementById("Chat"); + var range = document.createRange(); + range.selectNode(node); + var documentFragment = range.createContextualFragment(html); + node.appendChild(documentFragment); + } + + // a coalesced HTML object buffers and outputs DOM objects en masse. + // saves A LOT of CSS recalculation time when loading many messages. + // (ex. a long twitter timeline) + function CoalescedHTML() { + var self = this; + this.fragment = document.createDocumentFragment(); + this.timeoutID = 0; + this.coalesceRounds = 0; + this.isCoalescing = false; + this.isConsecutive = undefined; + this.shouldScroll = undefined; + + var appendElement = function (elem) { + document.getElementById("Chat").appendChild(elem); + }; + + function outputHTML() { + var insert = document.getElementById("insert"); + if(!!insert && self.isConsecutive) { + insert.parentNode.replaceChild(self.fragment, insert); + } else { + if(insert) + insert.parentNode.removeChild(insert); + // insert the documentFragment into the live DOM + appendElement(self.fragment); + } + alignChat(self.shouldScroll); + + // reset state to empty/non-coalescing + self.shouldScroll = undefined; + self.isConsecutive = undefined; + self.isCoalescing = false; + self.coalesceRounds = 0; + } + + // creates and returns a new documentFragment, containing all content nodes + // which can be inserted as a single node. + function createHTMLNode(html) { + var range = document.createRange(); + range.selectNode(document.getElementById("Chat")); + return range.createContextualFragment(html); + } + + // removes first insert node from the internal fragment. + function rmInsertNode() { + var insert = self.fragment.querySelector("#insert"); + if(insert) + insert.parentNode.removeChild(insert); + } + + function setShouldScroll(flag) { + if(flag && undefined === self.shouldScroll) + self.shouldScroll = flag; + } + + // hook in a custom method to append new data + // to the chat. + this.setAppendElementMethod = function (func) { + if(typeof func === 'function') + appendElement = func; + } + + // (re)start the coalescing timer. + // we wait 25ms for a new message to come in. + // If we get one, restart the timer and wait another 10ms. + // If not, run outputHTML() + // We do this a maximum of 400 times, for 10s max that can be spent + // coalescing input, since this will block display. + this.coalesce = function() { + window.clearTimeout(self.timeoutID); + self.timeoutID = window.setTimeout(outputHTML, 25); + self.isCoalescing = true; + self.coalesceRounds += 1; + if(400 < self.coalesceRounds) + self.cancel(); + } + + // if we need to append content into an insertion div, + // we need to clear the buffer and cancel the timeout. + this.cancel = function() { + if(self.isCoalescing) { + window.clearTimeout(self.timeoutID); + outputHTML(); + } + } + + + // coalased analogs to the global functions + + this.append = function(html, shouldScroll) { + // if we started this fragment with a consecuative message, + // cancel and output before we continue + if(self.isConsecutive) { + self.cancel(); + } + self.isConsecutive = false; + rmInsertNode(); + var node = createHTMLNode(html); + self.fragment.appendChild(node); + + node = null; - //Append the new message to the bottom of our chat block - chat = document.getElementById("Chat"); - range = document.createRange(); - range.selectNode(chat); - documentFragment = range.createContextualFragment(html); - chat.appendChild(documentFragment); + setShouldScroll(shouldScroll); + self.coalesce(); + } - alignChat(shouldScroll); + this.appendNext = function(html, shouldScroll) { + if(undefined === self.isConsecutive) + self.isConsecutive = true; + var node = createHTMLNode(html); + var insert = self.fragment.querySelector("#insert"); + if(insert) { + insert.parentNode.replaceChild(node, insert); + } else { + self.fragment.appendChild(node); + } + node = null; + setShouldScroll(shouldScroll); + self.coalesce(); + } + + this.replaceLast = function (html, shouldScroll) { + rmInsertNode(); + var node = createHTMLNode(html); + var lastMessage = self.fragment.lastChild; + lastMessage.parentNode.replaceChild(node, lastMessage); + node = null; + setShouldScroll(shouldScroll); + } } - function appendMessageNoScroll(html) { - //Remove any existing insertion point - insert = document.getElementById("insert"); - if(insert) insert.parentNode.removeChild(insert); + var coalescedHTML; - //Append the new message to the bottom of our chat block - chat = document.getElementById("Chat"); - range = document.createRange(); - range.selectNode(chat); - documentFragment = range.createContextualFragment(html); - chat.appendChild(documentFragment); + //Appending new content to the message view + function appendMessage(html) { + var shouldScroll; + + // Only call nearBottom() if should scroll is undefined. + if(undefined === coalescedHTML.shouldScroll) { + shouldScroll = nearBottom(); + } else { + shouldScroll = coalescedHTML.shouldScroll; + } + appendMessageNoScroll(html, shouldScroll); } - function appendNextMessage(html){ - shouldScroll = nearBottom(); - - //Locate the insertion point - insert = document.getElementById("insert"); - //make new node - range = document.createRange(); - range.selectNode(insert.parentNode); - newNode = range.createContextualFragment(html); - - //swap - insert.parentNode.replaceChild(newNode,insert); - - alignChat(shouldScroll); + function appendMessageNoScroll(html, shouldScroll) { + shouldScroll = shouldScroll || false; + // always try to coalesce new, non-griuped, messages + coalescedHTML.append(html, shouldScroll) } - function appendNextMessageNoScroll(html){ - //Locate the insertion point - insert = document.getElementById("insert"); - //make new node - range = document.createRange(); - range.selectNode(insert.parentNode); - newNode = range.createContextualFragment(html); - - //swap - insert.parentNode.replaceChild(newNode,insert); + function appendNextMessage(html){ + var shouldScroll; + if(undefined === coalescedHTML.shouldScroll) { + shouldScroll = nearBottom(); + } else { + shouldScroll = coalescedHTML.shouldScroll; + } + appendNextMessageNoScroll(html, shouldScroll); } + function appendNextMessageNoScroll(html, shouldScroll){ + shouldScroll = shouldScroll || false; + // only group next messages if we're already coalescing input + coalescedHTML.appendNext(html, shouldScroll); + } + + function replaceLastMessage(html){ + var shouldScroll; + // only replace messages if we're already coalescing + if(coalescedHTML.isCoalescing){ + if(undefined === coalescedHTML.shouldScroll) { + shouldScroll = nearBottom(); + } else { + shouldScroll = coalescedHTML.shouldScroll; + } + coalescedHTML.replaceLast(html, shouldScroll); + } else { + shouldScroll = nearBottom(); + //Retrieve the current insertion point, then remove it + //This requires that there have been an insertion point... is there a better way to retrieve the last element? -evands + var insert = document.getElementById("insert"); + if(insert){ + var parentNode = insert.parentNode; + parentNode.removeChild(insert); + var lastMessage = document.getElementById("Chat").lastChild; + document.getElementById("Chat").removeChild(lastMessage); + } + + //Now append the message itself + appendHTML(html); + + alignChat(shouldScroll); + } + } + //Auto-scroll to bottom. Use nearBottom to determine if a scrollToBottom is desired. function nearBottom() { return ( document.body.scrollTop >= ( document.body.offsetHeight - ( window.innerHeight * 1.2 ) ) ); @@ -73,49 +222,74 @@ //Dynamically exchange the active stylesheet function setStylesheet( id, url ) { - code = "<style id=\"" + id + "\" type=\"text/css\" media=\"screen,print\">"; - if( url.length ) code += "@import url( \"" + url + "\" );"; + var code = "<style id=\"" + id + "\" type=\"text/css\" media=\"screen,print\">"; + if( url.length ) + code += "@import url( \"" + url + "\" );"; code += "</style>"; - range = document.createRange(); - head = document.getElementsByTagName( "head" ).item(0); + var range = document.createRange(); + var head = document.getElementsByTagName( "head" ).item(0); range.selectNode( head ); - documentFragment = range.createContextualFragment( code ); + var documentFragment = range.createContextualFragment( code ); head.removeChild( document.getElementById( id ) ); head.appendChild( documentFragment ); } + + /* Converts emoticon images to textual emoticons; all emoticons in message if alt is held */ + document.onclick = function imageCheck() { + var node = event.target; + if (node.tagName.toLowerCase() != 'img') + return; + + imageSwap(node, false); + } - //Swap an image with its alt-tag text on click, or expand/unexpand an attached image - document.onclick = imageCheck; - function imageCheck() { - node = event.target; - if(node.tagName == 'IMG' && !client.zoomImage(node) && node.alt) { - a = document.createElement('a'); - a.setAttribute('onclick', 'imageSwap(this)'); - a.setAttribute('src', node.getAttribute('src')); - a.className = node.className; - text = document.createTextNode(node.alt); - a.appendChild(text); - node.parentNode.replaceChild(a, node); + /* Converts textual emoticons to images if textToImagesFlag is true, otherwise vice versa */ + function imageSwap(node, textToImagesFlag) { + var shouldScroll = nearBottom(); + + var images = [node]; + if (event.altKey) { + while (node.id != "Chat" && node.parentNode.id != "Chat") + node = node.parentNode; + images = node.querySelectorAll(textToImagesFlag ? "a" : "img"); + } + + for (var i = 0; i < images.length; i++) { + textToImagesFlag ? textToImage(images[i]) : imageToText(images[i]); } + + alignChat(shouldScroll); } - function imageSwap(node) { - shouldScroll = nearBottom(); - + function textToImage(node) { + if (!node.getAttribute("isEmoticon")) + return; //Swap the image/text - img = document.createElement('img'); + var img = document.createElement('img'); img.setAttribute('src', node.getAttribute('src')); img.setAttribute('alt', node.firstChild.nodeValue); img.className = node.className; node.parentNode.replaceChild(img, node); - - alignChat(shouldScroll); + } + + function imageToText(node) + { + if (client.zoomImage(node) || !node.alt) + return; + var a = document.createElement('a'); + a.setAttribute('onclick', 'imageSwap(this, true)'); + a.setAttribute('src', node.getAttribute('src')); + a.setAttribute('isEmoticon', true); + a.className = node.className; + var text = document.createTextNode(node.alt); + a.appendChild(text); + node.parentNode.replaceChild(a, node); } //Align our chat to the bottom of the window. If true is passed, view will also be scrolled down function alignChat(shouldScroll) { var windowHeight = window.innerHeight; - + if (windowHeight > 0) { var contentElement = document.getElementById('Chat'); var contentHeight = contentElement.offsetHeight; @@ -126,31 +300,41 @@ contentElement.style.position = 'static'; } } - + if (shouldScroll) scrollToBottom(); } - - function windowDidResize(){ + + window.onresize = function windowDidResize(){ alignChat(true/*nearBottom()*/); //nearBottom buggy with inactive tabs } - window.onresize = windowDidResize; + function initStyle() { + alignChat(true); + if(!coalescedHTML) + coalescedHTML = new CoalescedHTML(); + } </script> - + + <style type="text/css"> + .actionMessageUserName { display:none; } + .actionMessageBody:before { content:"*"; } + .actionMessageBody:after { content:"*"; } + * { word-wrap:break-word; text-rendering: optimizelegibility; } + img.scaledToFitImage { height: auto; max-width: 100%%; } + </style> + <!-- This style is shared by all variants. !--> - <style id="baseStyle" type="text/css" media="screen,print"> - %@ - *{ word-wrap:break-word; } - img.scaledToFitImage { height:auto; width:100%; } + <style id="baseStyle" type="text/css" media="screen,print"> + %@ </style> - + <!-- Although we call this mainStyle for legacy reasons, it's actually the variant style !--> - <style id="mainStyle" type="text/css" media="screen,print"> + <style id="mainStyle" type="text/css" media="screen,print"> @import url( "%@" ); </style> </head> -<body onload="alignChat(true);" style="==bodyBackground=="> +<body onload="initStyle();" style="==bodyBackground=="> %@ <div id="Chat"> </div> diff --git a/data/org.gnome.Empathy.gschema.xml.in b/data/org.gnome.Empathy.gschema.xml.in index 1c833ffcb..799cc7294 100644 --- a/data/org.gnome.Empathy.gschema.xml.in +++ b/data/org.gnome.Empathy.gschema.xml.in @@ -49,6 +49,11 @@ <_summary>Show protocols</_summary> <_description>Whether to show protocols for contacts in the contact list.</_description> </key> + <key name="show-balance-in-roster" type="b"> + <default>false</default> + <_summary>Show Balance in contact list</_summary> + <_description>Whether to show account balances in the contact list.</_description> + </key> <key name="compact-contact-list" type="b"> <default>false</default> <_summary>Compact contact list</_summary> diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c index 6bbfc9a46..dfa9ecd35 100644 --- a/libempathy-gtk/empathy-account-widget.c +++ b/libempathy-gtk/empathy-account-widget.c @@ -2210,9 +2210,6 @@ do_dispose (GObject *obj) if (priv->settings != NULL) { - TpAccount *account; - account = empathy_account_settings_get_account (priv->settings); - g_object_unref (priv->settings); priv->settings = NULL; } diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index c146941b3..b580812ac 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -146,6 +146,7 @@ struct _EmpathyChatPriv { * notified again about the already notified pending messages when the * messages in tab will be properly shown */ gboolean retrieving_backlogs; + gboolean sms_channel; }; typedef struct { @@ -170,6 +171,8 @@ enum { PROP_SUBJECT, PROP_REMOTE_CONTACT, PROP_SHOW_CONTACTS, + PROP_SMS_CHANNEL, + PROP_N_MESSAGES_SENDING, }; static guint signals[LAST_SIGNAL] = { 0 }; @@ -195,7 +198,7 @@ chat_get_property (GObject *object, g_value_set_object (value, priv->account); break; case PROP_NAME: - g_value_set_string (value, empathy_chat_get_name (chat)); + g_value_take_string (value, empathy_chat_dup_name (chat)); break; case PROP_ID: g_value_set_string (value, priv->id); @@ -209,6 +212,13 @@ chat_get_property (GObject *object, case PROP_SHOW_CONTACTS: g_value_set_boolean (value, priv->show_contacts); break; + case PROP_SMS_CHANNEL: + g_value_set_boolean (value, priv->sms_channel); + break; + case PROP_N_MESSAGES_SENDING: + g_value_set_uint (value, + empathy_chat_get_n_messages_sending (chat)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; @@ -249,8 +259,14 @@ account_reconnected (EmpathyChat *chat, * https://bugs.freedesktop.org/show_bug.cgi?id=13422 */ switch (priv->handle_type) { case TP_HANDLE_TYPE_CONTACT: - empathy_chat_with_contact_id ( - account, priv->id, TP_USER_ACTION_TIME_NOT_USER_ACTION); + if (priv->sms_channel) + empathy_sms_contact_id ( + account, priv->id, + TP_USER_ACTION_TIME_NOT_USER_ACTION); + else + empathy_chat_with_contact_id ( + account, priv->id, + TP_USER_ACTION_TIME_NOT_USER_ACTION); break; case TP_HANDLE_TYPE_ROOM: empathy_join_muc (account, priv->id, @@ -1271,31 +1287,43 @@ static void chat_send_error_cb (EmpathyTpChat *tp_chat, const gchar *message_body, TpChannelTextSendError error_code, + const gchar *dbus_error, EmpathyChat *chat) { - const gchar *error; + const gchar *error = NULL; gchar *str; - switch (error_code) { - case TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE: - error = _("offline"); - break; - case TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT: - error = _("invalid contact"); - break; - case TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED: - error = _("permission denied"); - break; - case TP_CHANNEL_TEXT_SEND_ERROR_TOO_LONG: - error = _("too long message"); - break; - case TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED: - error = _("not implemented"); - break; - case TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN: - default: - error = _("unknown"); - break; + if (!tp_strdiff (dbus_error, TP_ERROR_STR_INSUFFICIENT_BALANCE)) { + /* translators: error used when user doesn't have enough credit on his + * account to send the message. */ + error = _("insufficient balance to send message"); + } else if (!tp_strdiff (dbus_error, TP_ERROR_STR_NOT_CAPABLE)) { + error = _("not capable"); + } + + if (error == NULL) { + /* if we didn't find a dbus-error, try the old error */ + switch (error_code) { + case TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE: + error = _("offline"); + break; + case TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT: + error = _("invalid contact"); + break; + case TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED: + error = _("permission denied"); + break; + case TP_CHANNEL_TEXT_SEND_ERROR_TOO_LONG: + error = _("too long message"); + break; + case TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED: + error = _("not implemented"); + break; + case TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN: + default: + error = _("unknown"); + break; + } } if (message_body != NULL) { @@ -2963,6 +2991,22 @@ empathy_chat_class_init (EmpathyChatClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_SMS_CHANNEL, + g_param_spec_boolean ("sms-channel", + "SMS Channel", + "TRUE if this channel is for sending SMSes", + FALSE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (object_class, + PROP_N_MESSAGES_SENDING, + g_param_spec_uint ("n-messages-sending", + "Num Messages Sending", + "The number of messages being sent", + 0, G_MAXUINT, 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + signals[COMPOSING] = g_signal_new ("composing", G_OBJECT_CLASS_TYPE (object_class), @@ -3459,6 +3503,21 @@ chat_password_needed_changed_cb (EmpathyChat *self) } } +static void +chat_sms_channel_changed_cb (EmpathyChat *self) +{ + EmpathyChatPriv *priv = GET_PRIV (self); + + priv->sms_channel = empathy_tp_chat_is_sms_channel (priv->tp_chat); + g_object_notify (G_OBJECT (self), "sms-channel"); +} + +static void +chat_n_messages_sending_changed_cb (EmpathyChat *self) +{ + g_object_notify (G_OBJECT (self), "n-messages-sending"); +} + void empathy_chat_set_tp_chat (EmpathyChat *chat, EmpathyTpChat *tp_chat) @@ -3508,6 +3567,12 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, g_signal_connect_swapped (tp_chat, "notify::password-needed", G_CALLBACK (chat_password_needed_changed_cb), chat); + g_signal_connect_swapped (tp_chat, "notify::sms-channel", + G_CALLBACK (chat_sms_channel_changed_cb), + chat); + g_signal_connect_swapped (tp_chat, "notify::n-messages-sending", + G_CALLBACK (chat_n_messages_sending_changed_cb), + chat); /* Get initial value of properties */ properties = empathy_tp_chat_get_properties (priv->tp_chat); @@ -3528,6 +3593,7 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, } } + chat_sms_channel_changed_cb (chat); chat_remote_contact_changed_cb (chat); if (chat->input_text_view) { @@ -3570,8 +3636,8 @@ empathy_chat_get_id (EmpathyChat *chat) return priv->id; } -const gchar * -empathy_chat_get_name (EmpathyChat *chat) +gchar * +empathy_chat_dup_name (EmpathyChat *chat) { EmpathyChatPriv *priv = GET_PRIV (chat); const gchar *ret; @@ -3579,6 +3645,7 @@ empathy_chat_get_name (EmpathyChat *chat) g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL); ret = priv->name; + if (!ret && priv->remote_contact) { ret = empathy_contact_get_alias (priv->remote_contact); } @@ -3586,7 +3653,15 @@ empathy_chat_get_name (EmpathyChat *chat) if (!ret) ret = priv->id; - return ret ? ret : _("Conversation"); + if (!ret) + ret = _("Conversation"); + + if (priv->sms_channel) + /* Translators: this string is a something like + * "Escher Cat (SMS)" */ + return g_strdup_printf (_("%s (SMS)"), ret); + else + return g_strdup (ret); } const gchar * @@ -3812,3 +3887,35 @@ empathy_chat_is_composing (EmpathyChat *chat) { return chat->priv->compositors != NULL; } + +gboolean +empathy_chat_is_sms_channel (EmpathyChat *self) +{ + EmpathyChatPriv *priv = GET_PRIV (self); + + g_return_val_if_fail (EMPATHY_IS_CHAT (self), 0); + + return priv->sms_channel; +} + +guint +empathy_chat_get_n_messages_sending (EmpathyChat *self) +{ + EmpathyChatPriv *priv; + + g_return_val_if_fail (EMPATHY_IS_CHAT (self), 0); + + priv = GET_PRIV (self); + + if (priv->tp_chat == NULL) { + return 0; + } else { + guint n_messages; + + g_object_get (priv->tp_chat, + "n-messages-sending", &n_messages, + NULL); + + return n_messages; + } +} diff --git a/libempathy-gtk/empathy-chat.h b/libempathy-gtk/empathy-chat.h index 77122f7c8..a5c0148a1 100644 --- a/libempathy-gtk/empathy-chat.h +++ b/libempathy-gtk/empathy-chat.h @@ -69,7 +69,7 @@ void empathy_chat_set_tp_chat (EmpathyChat *chat, EmpathyTpChat *tp_chat); TpAccount * empathy_chat_get_account (EmpathyChat *chat); const gchar * empathy_chat_get_id (EmpathyChat *chat); -const gchar * empathy_chat_get_name (EmpathyChat *chat); +gchar * empathy_chat_dup_name (EmpathyChat *chat); const gchar * empathy_chat_get_subject (EmpathyChat *chat); EmpathyContact * empathy_chat_get_remote_contact (EmpathyChat *chat); GtkWidget * empathy_chat_get_contact_menu (EmpathyChat *chat); @@ -94,6 +94,10 @@ guint empathy_chat_get_nb_unread_messages (EmpathyChat *chat); void empathy_chat_messages_read (EmpathyChat *self); gboolean empathy_chat_is_composing (EmpathyChat *chat); + +gboolean empathy_chat_is_sms_channel (EmpathyChat *self); +guint empathy_chat_get_n_messages_sending (EmpathyChat *self); + G_END_DECLS #endif /* __EMPATHY_CHAT_H__ */ diff --git a/libempathy-gtk/empathy-contact-blocking-dialog.c b/libempathy-gtk/empathy-contact-blocking-dialog.c index a46820c5d..08757545f 100644 --- a/libempathy-gtk/empathy-contact-blocking-dialog.c +++ b/libempathy-gtk/empathy-contact-blocking-dialog.c @@ -21,8 +21,9 @@ * * Authors: Danielle Madeley <danielle.madeley@collabora.co.uk> */ +#include "config.h" -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <libempathy/empathy-utils.h> diff --git a/libempathy-gtk/empathy-contact-search-dialog.c b/libempathy-gtk/empathy-contact-search-dialog.c index aeb0767d3..a265fa6b2 100644 --- a/libempathy-gtk/empathy-contact-search-dialog.c +++ b/libempathy-gtk/empathy-contact-search-dialog.c @@ -22,8 +22,9 @@ * Danielle Madeley <danielle.madeley@collabora.co.uk> * Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> */ +#include "config.h" -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <telepathy-glib/telepathy-glib.h> diff --git a/libempathy-gtk/empathy-contact-selector-dialog.c b/libempathy-gtk/empathy-contact-selector-dialog.c index d5e533aeb..a4747b488 100644 --- a/libempathy-gtk/empathy-contact-selector-dialog.c +++ b/libempathy-gtk/empathy-contact-selector-dialog.c @@ -66,7 +66,8 @@ struct _EmpathyContactSelectorDialogPriv { enum { PROP_0, PROP_SHOW_ACCOUNT_CHOOSER, - PROP_FILTER_ACCOUNT + PROP_FILTER_ACCOUNT, + PROP_SELECTED_ACCOUNT }; enum { @@ -151,6 +152,8 @@ contact_selector_dialog_account_changed_cb (GtkWidget *widget, g_object_unref (contact); members = g_list_delete_link (members, members); } + + g_object_notify (G_OBJECT (dialog), "selected-account"); } static gboolean @@ -375,6 +378,7 @@ empathy_contact_selector_dialog_get_property (GObject *self, GParamSpec *pspec) { EmpathyContactSelectorDialog *dialog = EMPATHY_CONTACT_SELECTOR_DIALOG (self); + EmpathyContactSelectorDialogPriv *priv = GET_PRIV (dialog); switch (prop_id) { @@ -388,6 +392,11 @@ empathy_contact_selector_dialog_get_property (GObject *self, empathy_contact_selector_dialog_get_filter_account (dialog)); break; + case PROP_SELECTED_ACCOUNT: + g_value_set_object (value, empathy_account_chooser_get_account ( + EMPATHY_ACCOUNT_CHOOSER (priv->account_chooser))); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec); break; @@ -401,6 +410,7 @@ empathy_contact_selector_dialog_set_property (GObject *self, GParamSpec *pspec) { EmpathyContactSelectorDialog *dialog = EMPATHY_CONTACT_SELECTOR_DIALOG (self); + EmpathyContactSelectorDialogPriv *priv = GET_PRIV (dialog); switch (prop_id) { @@ -414,6 +424,12 @@ empathy_contact_selector_dialog_set_property (GObject *self, g_value_get_object (value)); break; + case PROP_SELECTED_ACCOUNT: + empathy_account_chooser_set_account ( + EMPATHY_ACCOUNT_CHOOSER (priv->account_chooser), + g_value_get_object (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec); break; @@ -490,6 +506,13 @@ empathy_contact_selector_dialog_class_init ( "account are displayed", TP_TYPE_ACCOUNT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (object_class, PROP_SELECTED_ACCOUNT, + g_param_spec_object ("selected-account", + "Selected Account", + "Current account selected in the account-chooser", + TP_TYPE_ACCOUNT, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } const gchar * diff --git a/libempathy-gtk/empathy-contact-selector.c b/libempathy-gtk/empathy-contact-selector.c index c70d2575a..a77ed43e2 100644 --- a/libempathy-gtk/empathy-contact-selector.c +++ b/libempathy-gtk/empathy-contact-selector.c @@ -22,7 +22,7 @@ #include "config.h" -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <gtk/gtk.h> #include <libempathy/empathy-contact.h> diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c index acf206ad3..c4e3748b4 100644 --- a/libempathy-gtk/empathy-contact-widget.c +++ b/libempathy-gtk/empathy-contact-widget.c @@ -818,8 +818,10 @@ contact_widget_location_update (EmpathyContactWidget *information) { GHashTable *location; GValue *value; +#ifdef HAVE_LIBCHAMPLAIN gdouble lat = 0.0, lon = 0.0; gboolean has_position = TRUE; +#endif GtkWidget *label; guint row = 0; static const gchar* ordered_geolocation_keys[] = { @@ -853,18 +855,6 @@ contact_widget_location_update (EmpathyContactWidget *information) return; } - value = g_hash_table_lookup (location, EMPATHY_LOCATION_LAT); - if (value == NULL) - has_position = FALSE; - else - lat = g_value_get_double (value); - - value = g_hash_table_lookup (location, EMPATHY_LOCATION_LON); - if (value == NULL) - has_position = FALSE; - else - lon = g_value_get_double (value); - value = g_hash_table_lookup (location, EMPATHY_LOCATION_TIMESTAMP); if (value == NULL) { diff --git a/libempathy-gtk/empathy-images.h b/libempathy-gtk/empathy-images.h index 2c40b2ae7..86f1db641 100644 --- a/libempathy-gtk/empathy-images.h +++ b/libempathy-gtk/empathy-images.h @@ -40,6 +40,7 @@ G_BEGIN_DECLS #define EMPATHY_IMAGE_TYPING "user-typing" #define EMPATHY_IMAGE_CONTACT_INFORMATION "gtk-info" #define EMPATHY_IMAGE_GROUP_MESSAGE "system-users" +#define EMPATHY_IMAGE_SMS "stock_cell-phone" #define EMPATHY_IMAGE_VOIP "audio-input-microphone" #define EMPATHY_IMAGE_VIDEO_CALL "camera-web" #define EMPATHY_IMAGE_LOG "document-open-recent" diff --git a/libempathy-gtk/empathy-individual-menu.c b/libempathy-gtk/empathy-individual-menu.c index 3e404c39f..576d3b9fa 100644 --- a/libempathy-gtk/empathy-individual-menu.c +++ b/libempathy-gtk/empathy-individual-menu.c @@ -149,6 +149,14 @@ individual_menu_add_personas (GtkMenuShell *menu, gtk_widget_show (action); } + /* SMS */ + if (features & EMPATHY_INDIVIDUAL_FEATURE_SMS) + { + action = empathy_individual_sms_menu_item_new (NULL, contact); + gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action); + gtk_widget_show (action); + } + if (features & EMPATHY_INDIVIDUAL_FEATURE_CALL) { /* Audio Call */ @@ -238,6 +246,17 @@ constructed (GObject *object) } } + /* SMS */ + if (features & EMPATHY_INDIVIDUAL_FEATURE_SMS) + { + item = empathy_individual_sms_menu_item_new (individual, NULL); + if (item != NULL) + { + gtk_menu_shell_append (shell, item); + gtk_widget_show (item); + } + } + if (features & EMPATHY_INDIVIDUAL_FEATURE_CALL) { /* Audio Call */ @@ -537,6 +556,52 @@ empathy_individual_chat_menu_item_new (FolksIndividual *individual, } static void +empathy_individual_sms_menu_item_activated (GtkMenuItem *item, + EmpathyContact *contact) +{ + g_return_if_fail (EMPATHY_IS_CONTACT (contact)); + + empathy_sms_contact_id ( + empathy_contact_get_account (contact), + empathy_contact_get_id (contact), + gtk_get_current_event_time ()); +} + +GtkWidget * +empathy_individual_sms_menu_item_new (FolksIndividual *individual, + EmpathyContact *contact) +{ + GtkWidget *item; + GtkWidget *image; + + g_return_val_if_fail ((FOLKS_IS_INDIVIDUAL (individual) && + empathy_folks_individual_contains_contact (individual)) || + EMPATHY_IS_CONTACT (contact), + NULL); + + item = gtk_image_menu_item_new_with_mnemonic (_("_SMS")); + image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_SMS, + GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); + gtk_widget_show (image); + + if (contact != NULL) + { + menu_item_set_contact (item, contact, + G_CALLBACK (empathy_individual_sms_menu_item_activated), + EMPATHY_ACTION_SMS); + } + else + { + menu_item_set_first_contact (item, individual, + G_CALLBACK (empathy_individual_sms_menu_item_activated), + EMPATHY_ACTION_SMS); + } + + return item; +} + +static void empathy_individual_audio_call_menu_item_activated (GtkMenuItem *item, EmpathyContact *contact) { diff --git a/libempathy-gtk/empathy-individual-menu.h b/libempathy-gtk/empathy-individual-menu.h index 5b3d220df..c2841ad6d 100644 --- a/libempathy-gtk/empathy-individual-menu.h +++ b/libempathy-gtk/empathy-individual-menu.h @@ -36,7 +36,8 @@ typedef enum { EMPATHY_INDIVIDUAL_FEATURE_INFO = 1 << 4, EMPATHY_INDIVIDUAL_FEATURE_FAVOURITE = 1 << 5, EMPATHY_INDIVIDUAL_FEATURE_LINK = 1 << 6, - EMPATHY_INDIVIDUAL_FEATURE_ALL = (1 << 7) - 1, + EMPATHY_INDIVIDUAL_FEATURE_SMS = 1 << 7, + EMPATHY_INDIVIDUAL_FEATURE_ALL = (1 << 8) - 1, } EmpathyIndividualFeatureFlags; #define EMPATHY_TYPE_INDIVIDUAL_MENU (empathy_individual_menu_get_type ()) @@ -69,6 +70,8 @@ GtkWidget * empathy_individual_menu_new (FolksIndividual *individual, EmpathyIndividualFeatureFlags features); GtkWidget * empathy_individual_chat_menu_item_new (FolksIndividual *individual, EmpathyContact *contact); +GtkWidget * empathy_individual_sms_menu_item_new (FolksIndividual *individual, + EmpathyContact *contact); GtkWidget * empathy_individual_audio_call_menu_item_new ( FolksIndividual *individual, EmpathyContact *contact); diff --git a/libempathy-gtk/empathy-individual-store.c b/libempathy-gtk/empathy-individual-store.c index 735e2db9d..b550245dc 100644 --- a/libempathy-gtk/empathy-individual-store.c +++ b/libempathy-gtk/empathy-individual-store.c @@ -1921,7 +1921,7 @@ individual_store_get_individual_status_icon_with_icon_name ( FolksIndividual *individual, const gchar *status_icon_name) { - GdkPixbuf *pixbuf_status = NULL; + GdkPixbuf *pixbuf_status; EmpathyIndividualStorePriv *priv; const gchar *protocol_name = NULL; gchar *icon_name = NULL; @@ -1953,13 +1953,18 @@ individual_store_get_individual_status_icon_with_icon_name ( { icon_name = g_strdup_printf ("%s", status_icon_name); } + + pixbuf_status = g_hash_table_lookup (priv->status_icons, icon_name); + if (pixbuf_status == NULL) { pixbuf_status = empathy_pixbuf_contact_status_icon_with_icon_name (contact, status_icon_name, show_protocols_here); + if (pixbuf_status != NULL) { + /* pass the reference to the hash table */ g_hash_table_insert (priv->status_icons, g_strdup (icon_name), pixbuf_status); } diff --git a/libempathy-gtk/empathy-individual-view.c b/libempathy-gtk/empathy-individual-view.c index cc9d49e86..fcbc93fa4 100644 --- a/libempathy-gtk/empathy-individual-view.c +++ b/libempathy-gtk/empathy-individual-view.c @@ -1689,7 +1689,9 @@ static gboolean individual_view_is_visible_individual (EmpathyIndividualView *self, FolksIndividual *individual, gboolean is_online, - gboolean is_searching) + gboolean is_searching, + const gchar *group, + gboolean is_fake_group) { EmpathyIndividualViewPriv *priv = GET_PRIV (self); EmpathyLiveSearch *live = EMPATHY_LIVE_SEARCH (priv->search_widget); @@ -1721,8 +1723,14 @@ individual_view_is_visible_individual (EmpathyIndividualView *self, is_favorite = folks_favourite_details_get_is_favourite ( FOLKS_FAVOURITE_DETAILS (individual)); - if (is_searching == FALSE) - return (priv->show_offline || is_online || is_favorite); + if (is_searching == FALSE) { + if (is_favorite && is_fake_group && + !tp_strdiff (group, EMPATHY_INDIVIDUAL_STORE_FAVORITE)) + /* Always display favorite contacts in the favorite group */ + return TRUE; + + return (priv->show_offline || is_online); + } /* check alias name */ str = folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)); @@ -1757,6 +1765,28 @@ individual_view_is_visible_individual (EmpathyIndividualView *self, return FALSE; } +static gchar * +get_group (GtkTreeModel *model, + GtkTreeIter *iter, + gboolean *is_fake) +{ + GtkTreeIter parent_iter; + gchar *name = NULL; + + *is_fake = FALSE; + + if (!gtk_tree_model_iter_parent (model, &parent_iter, iter)) + return NULL; + + gtk_tree_model_get (model, &parent_iter, + EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name, + EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, is_fake, + -1); + + return name; +} + + static gboolean individual_view_filter_visible_func (GtkTreeModel *model, GtkTreeIter *iter, @@ -1783,10 +1813,16 @@ individual_view_filter_visible_func (GtkTreeModel *model, if (individual != NULL) { + gchar *group; + gboolean is_fake_group; + + group = get_group (model, iter, &is_fake_group); + visible = individual_view_is_visible_individual (self, individual, - is_online, is_searching); + is_online, is_searching, group, is_fake_group); g_object_unref (individual); + g_free (group); /* FIXME: Work around bgo#626552/bgo#621076 */ if (visible == TRUE) @@ -1809,6 +1845,9 @@ individual_view_filter_visible_func (GtkTreeModel *model, for (valid = gtk_tree_model_iter_children (model, &child_iter, iter); valid; valid = gtk_tree_model_iter_next (model, &child_iter)) { + gchar *group; + gboolean is_fake_group; + gtk_tree_model_get (model, &child_iter, EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &is_online, @@ -1817,9 +1856,13 @@ individual_view_filter_visible_func (GtkTreeModel *model, if (individual == NULL) continue; + group = get_group (model, &child_iter, &is_fake_group); + visible = individual_view_is_visible_individual (self, individual, - is_online, is_searching); + is_online, is_searching, group, is_fake_group); + g_object_unref (individual); + g_free (group); /* show group if it has at least one visible contact in it */ if (visible == TRUE) diff --git a/libempathy-gtk/empathy-location-manager.c b/libempathy-gtk/empathy-location-manager.c index 8184bc043..03b97d03d 100644 --- a/libempathy-gtk/empathy-location-manager.c +++ b/libempathy-gtk/empathy-location-manager.c @@ -24,7 +24,7 @@ #include <string.h> #include <time.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <telepathy-glib/account-manager.h> #include <telepathy-glib/util.h> diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c index b9edb93e7..3d811abbb 100644 --- a/libempathy-gtk/empathy-new-message-dialog.c +++ b/libempathy-gtk/empathy-new-message-dialog.c @@ -62,21 +62,40 @@ G_DEFINE_TYPE(EmpathyNewMessageDialog, empathy_new_message_dialog, * to be started with any contact on any enabled account. */ +enum +{ + EMP_NEW_MESSAGE_TEXT, + EMP_NEW_MESSAGE_SMS, +}; + static void empathy_new_message_dialog_response (GtkDialog *dialog, int response_id) { TpAccount *account; const gchar *contact_id; - if (response_id != GTK_RESPONSE_ACCEPT) goto out; + if (response_id < EMP_NEW_MESSAGE_TEXT) goto out; contact_id = empathy_contact_selector_dialog_get_selected ( EMPATHY_CONTACT_SELECTOR_DIALOG (dialog), NULL, &account); if (EMP_STR_EMPTY (contact_id) || account == NULL) goto out; - empathy_chat_with_contact_id (account, contact_id, - gtk_get_current_event_time ()); + switch (response_id) + { + case EMP_NEW_MESSAGE_TEXT: + empathy_chat_with_contact_id (account, contact_id, + gtk_get_current_event_time ()); + break; + + case EMP_NEW_MESSAGE_SMS: + empathy_sms_contact_id (account, contact_id, + gtk_get_current_event_time ()); + break; + + default: + g_warn_if_reached (); + } out: gtk_widget_destroy (GTK_WIDGET (dialog)); @@ -135,6 +154,63 @@ empathy_new_message_account_filter (EmpathyContactSelectorDialog *dialog, tp_proxy_prepare_async (connection, features, conn_prepared_cb, cb_data); } +static void +empathy_new_message_dialog_update_sms_button_sensitivity (GtkWidget *widget, + GParamSpec *pspec, + GtkWidget *button) +{ + GtkWidget *self = gtk_widget_get_toplevel (widget); + EmpathyContactSelectorDialog *dialog; + TpConnection *conn; + GPtrArray *rccs; + gboolean sensitive = FALSE; + guint i; + + g_return_if_fail (EMPATHY_IS_NEW_MESSAGE_DIALOG (self)); + + dialog = EMPATHY_CONTACT_SELECTOR_DIALOG (self); + + /* if the Text widget isn't sensitive, don't bother checking the caps */ + if (!gtk_widget_get_sensitive (dialog->button_action)) + goto finally; + + empathy_contact_selector_dialog_get_selected (dialog, &conn, NULL); + + if (conn == NULL) + goto finally; + + /* iterate the rccs to find if SMS channels are supported, this should + * be in tp-glib */ + rccs = tp_capabilities_get_channel_classes ( + tp_connection_get_capabilities (conn)); + + for (i = 0; i < rccs->len; i++) + { + GHashTable *fixed; + GStrv allowed; + const char *type; + gboolean sms_channel; + + tp_value_array_unpack (g_ptr_array_index (rccs, i), 2, + &fixed, + &allowed); + + /* SMS channels are type:Text and sms-channel:True */ + type = tp_asv_get_string (fixed, TP_PROP_CHANNEL_CHANNEL_TYPE); + sms_channel = tp_asv_get_boolean (fixed, + TP_PROP_CHANNEL_INTERFACE_SMS_SMS_CHANNEL, NULL); + + sensitive = sms_channel && + !tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_TEXT); + + if (sensitive) + break; + } + +finally: + gtk_widget_set_sensitive (button, sensitive); +} + static GObject * empathy_new_message_dialog_constructor (GType type, guint n_props, @@ -165,8 +241,19 @@ empathy_new_message_dialog_init (EmpathyNewMessageDialog *dialog) { EmpathyContactSelectorDialog *parent = EMPATHY_CONTACT_SELECTOR_DIALOG ( dialog); + GtkWidget *button; GtkWidget *image; + /* add an SMS button */ + button = gtk_button_new_with_mnemonic (_("_SMS")); + image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_SMS, + GTK_ICON_SIZE_BUTTON); + gtk_button_set_image (GTK_BUTTON (button), image); + + gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, + EMP_NEW_MESSAGE_SMS); + gtk_widget_show (button); + /* add chat button */ parent->button_action = gtk_button_new_with_mnemonic (_("C_hat")); image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_NEW_MESSAGE, @@ -174,9 +261,18 @@ empathy_new_message_dialog_init (EmpathyNewMessageDialog *dialog) gtk_button_set_image (GTK_BUTTON (parent->button_action), image); gtk_dialog_add_action_widget (GTK_DIALOG (dialog), parent->button_action, - GTK_RESPONSE_ACCEPT); + EMP_NEW_MESSAGE_TEXT); gtk_widget_show (parent->button_action); + /* the parent class will update the sensitivity of button_action, propagate + * it */ + g_signal_connect (parent->button_action, "notify::sensitive", + G_CALLBACK (empathy_new_message_dialog_update_sms_button_sensitivity), + button); + g_signal_connect (dialog, "notify::selected-account", + G_CALLBACK (empathy_new_message_dialog_update_sms_button_sensitivity), + button); + /* Tweak the dialog */ gtk_window_set_title (GTK_WINDOW (dialog), _("New Conversation")); gtk_window_set_role (GTK_WINDOW (dialog), "new_message"); diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c index 2ab3383b3..0d3f9a718 100644 --- a/libempathy-gtk/empathy-theme-adium.c +++ b/libempathy-gtk/empathy-theme-adium.c @@ -22,7 +22,7 @@ #include "config.h" #include <string.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <webkit/webkit.h> #include <telepathy-glib/dbus.h> @@ -59,11 +59,13 @@ typedef struct { gint64 last_timestamp; gboolean last_is_backlog; guint pages_loading; - GList *message_queue; + /* Queue of GValue* containing an EmpathyMessage or string */ + GQueue message_queue; GtkWidget *inspector_window; GSettings *gsettings_chat; gboolean has_focus; gboolean has_unread_message; + gboolean allow_scrolling; } EmpathyThemeAdiumPriv; struct _EmpathyAdiumData { @@ -73,26 +75,27 @@ struct _EmpathyAdiumData { gchar *default_avatar_filename; gchar *default_incoming_avatar_filename; gchar *default_outgoing_avatar_filename; - gchar *template_html; - gchar *in_content_html; - gsize in_content_len; - gchar *in_context_html; - gsize in_context_len; - gchar *in_nextcontent_html; - gsize in_nextcontent_len; - gchar *in_nextcontext_html; - gsize in_nextcontext_len; - gchar *out_content_html; - gsize out_content_len; - gchar *out_context_html; - gsize out_context_len; - gchar *out_nextcontent_html; - gsize out_nextcontent_len; - gchar *out_nextcontext_html; - gsize out_nextcontext_len; - gchar *status_html; - gsize status_len; GHashTable *info; + guint version; + gboolean custom_template; + + /* HTML bits */ + const gchar *template_html; + const gchar *content_html; + const gchar *in_content_html; + const gchar *in_context_html; + const gchar *in_nextcontent_html; + const gchar *in_nextcontext_html; + const gchar *out_content_html; + const gchar *out_context_html; + const gchar *out_nextcontent_html; + const gchar *out_nextcontext_html; + const gchar *status_html; + + /* Above html strings are pointers to strings stored in this array. + * We do this because of fallbacks, some htmls could be pointing the + * same string. */ + GPtrArray *strings_to_free; }; static void theme_adium_iface_init (EmpathyChatViewIface *iface); @@ -191,6 +194,36 @@ theme_adium_open_address_cb (GtkMenuItem *menuitem, g_free (uri); } +/* Replace each %@ in format with string passed in args */ +static gchar * +string_with_format (const gchar *format, + const gchar *first_string, + ...) +{ + va_list args; + const gchar *str; + GString *result; + + va_start (args, first_string); + result = g_string_sized_new (strlen (format)); + for (str = first_string; str != NULL; str = va_arg (args, const gchar *)) { + const gchar *next; + + next = strstr (format, "%@"); + if (next == NULL) { + break; + } + + g_string_append_len (result, format, next - format); + g_string_append (result, str); + format = next + 2; + } + g_string_append (result, format); + va_end (args); + + return g_string_free (result, FALSE); +} + static void theme_adium_match_newline (const gchar *text, gssize len, @@ -283,7 +316,7 @@ theme_adium_parse_body (EmpathyThemeAdium *self, static void escape_and_append_len (GString *string, const gchar *str, gint len) { - while (*str != '\0' && len != 0) { + while (str != NULL && *str != '\0' && len != 0) { switch (*str) { case '\\': /* \ becomes \\ */ @@ -345,10 +378,36 @@ theme_adium_match_with_format (const gchar **str, return TRUE; } +/* List of colors used by %senderColor%. Copied from + * adium/Frameworks/AIUtilities\ Framework/Source/AIColorAdditions.m + */ +static gchar *colors[] = { + "aqua", "aquamarine", "blue", "blueviolet", "brown", "burlywood", "cadetblue", + "chartreuse", "chocolate", "coral", "cornflowerblue", "crimson", "cyan", + "darkblue", "darkcyan", "darkgoldenrod", "darkgreen", "darkgrey", "darkkhaki", + "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", + "darksalmon", "darkseagreen", "darkslateblue", "darkslategrey", + "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgrey", + "dodgerblue", "firebrick", "forestgreen", "fuchsia", "gold", "goldenrod", + "green", "greenyellow", "grey", "hotpink", "indianred", "indigo", "lawngreen", + "lightblue", "lightcoral", + "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", + "lightskyblue", "lightslategrey", "lightsteelblue", "lime", "limegreen", + "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", + "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", + "mediumturquoise", "mediumvioletred", "midnightblue", "navy", "olive", + "olivedrab", "orange", "orangered", "orchid", "palegreen", "paleturquoise", + "palevioletred", "peru", "pink", "plum", "powderblue", "purple", "red", + "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", + "sienna", "silver", "skyblue", "slateblue", "slategrey", "springgreen", + "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", + "yellowgreen", +}; + static void theme_adium_append_html (EmpathyThemeAdium *theme, const gchar *func, - const gchar *html, gsize len, + const gchar *html, const gchar *message, const gchar *avatar_filename, const gchar *name, @@ -363,10 +422,10 @@ theme_adium_append_html (EmpathyThemeAdium *theme, gchar *script; /* Make some search-and-replace in the html code */ - string = g_string_sized_new (len + strlen (message)); + string = g_string_sized_new (strlen (html) + strlen (message)); g_string_append_printf (string, "%s(\"", func); for (cur = html; *cur != '\0'; cur++) { - const gchar *replace = ""; + const gchar *replace = NULL; gchar *dup_replace = NULL; gchar *format = NULL; @@ -380,11 +439,15 @@ theme_adium_append_html (EmpathyThemeAdium *theme, } else if (theme_adium_match (&cur, "%sender%")) { replace = name; } else if (theme_adium_match (&cur, "%senderColor%")) { - /* FIXME: A color derived from the user's name. If a - * colon separated list of HTML colors is at + /* A color derived from the user's name. + * FIXME: If a colon separated list of HTML colors is at * Incoming/SenderColors.txt it will be used instead of * the default colors. */ + if (contact_id != NULL) { + guint hash = g_str_hash (contact_id); + replace = colors[hash % G_N_ELEMENTS (colors)]; + } } else if (theme_adium_match (&cur, "%senderStatusIcon%")) { /* FIXME: The path to the status icon of the sender * (available, away, etc...) @@ -493,13 +556,10 @@ theme_adium_append_event_escaped (EmpathyChatView *view, EmpathyThemeAdium *theme = EMPATHY_THEME_ADIUM (view); EmpathyThemeAdiumPriv *priv = GET_PRIV (theme); - if (priv->data->status_html) { - theme_adium_append_html (theme, "appendMessage", - priv->data->status_html, - priv->data->status_len, - escaped, NULL, NULL, NULL, NULL, - "event", empathy_time_get_current (), FALSE); - } + theme_adium_append_html (theme, "appendMessage", + priv->data->status_html, escaped, NULL, NULL, NULL, + NULL, "event", + empathy_time_get_current (), FALSE); /* There is no last contact */ if (priv->last_contact) { @@ -580,17 +640,18 @@ theme_adium_append_message (EmpathyChatView *view, EmpathyAvatar *avatar; const gchar *avatar_filename = NULL; gint64 timestamp; - gchar *html = NULL; - gsize len = 0; + const gchar *html = NULL; const gchar *func; const gchar *service_name; GString *message_classes = NULL; gboolean is_backlog; gboolean consecutive; + gboolean action; if (priv->pages_loading != 0) { - priv->message_queue = g_list_prepend (priv->message_queue, - g_object_ref (msg)); + GValue *value = tp_g_value_slice_new (EMPATHY_TYPE_MESSAGE); + g_value_set_object (value, msg); + g_queue_push_tail (&priv->message_queue, value); return; } @@ -606,17 +667,21 @@ theme_adium_append_message (EmpathyChatView *view, body_escaped = theme_adium_parse_body (theme, body); name = empathy_contact_get_alias (sender); contact_id = empathy_contact_get_id (sender); + action = (empathy_message_get_tptype (msg) == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION); - /* If this is a /me, append an event */ - if (empathy_message_get_tptype (msg) == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION) { + /* If this is a /me probably */ + if (action) { gchar *str; - str = g_strdup_printf ("%s %s", name, body_escaped); - theme_adium_append_event_escaped (view, str); - - g_free (str); + if (priv->data->version >= 4 || !priv->data->custom_template) { + str = g_strdup_printf ("<span class='actionMessageUserName'>%s</span>" + "<span class='actionMessageBody'>%s</span>", + name, body_escaped); + } else { + str = g_strdup_printf ("*%s*", body_escaped); + } g_free (body_escaped); - return; + body_escaped = str; } /* Get the avatar filename, or a fallback */ @@ -676,95 +741,53 @@ theme_adium_append_message (EmpathyChatView *view, } else { g_string_append (message_classes, " incoming"); } + if (empathy_message_should_highlight (msg)) { + g_string_append (message_classes, " mention"); + } + if (empathy_message_get_tptype (msg) == TP_CHANNEL_TEXT_MESSAGE_TYPE_AUTO_REPLY) { + g_string_append (message_classes, " autoreply"); + } + if (action) { + g_string_append (message_classes, " action"); + } /* FIXME: other classes: - * autoreply - the message is an automatic response, generally due to an - * away status - * mention - the incoming message (in groupchat) matches your username - * or one of the mention keywords specified in Adium's - * advanced prefs. * status - the message is a status change * event - the message is a notification of something happening * (for example, encryption being turned on) - * %status% - See %status% in theme_adium_append_html() + * %status% - See %status% in theme_adium_append_html () */ /* Define javascript function to use */ if (consecutive) { - func = "appendNextMessage"; + func = priv->allow_scrolling ? "appendNextMessage" : "appendNextMessageNoScroll"; } else { - func = "appendMessage"; + func = priv->allow_scrolling ? "appendMessage" : "appendMessageNoScroll"; } - /* Outgoing */ if (empathy_contact_is_user (sender)) { - if (consecutive) { - if (is_backlog) { - html = priv->data->out_nextcontext_html; - len = priv->data->out_nextcontext_len; - } - - /* Not backlog, or fallback if NextContext.html - * is missing */ - if (html == NULL) { - html = priv->data->out_nextcontent_html; - len = priv->data->out_nextcontent_len; - } - } - - /* Not consecutive, or fallback if NextContext.html and/or - * NextContent.html are missing */ - if (html == NULL) { - if (is_backlog) { - html = priv->data->out_context_html; - len = priv->data->out_context_len; - } - - if (html == NULL) { - html = priv->data->out_content_html; - len = priv->data->out_content_len; - } - } - } - - /* Incoming, or fallback if outgoing files are missing */ - if (html == NULL) { - if (consecutive) { - if (is_backlog) { - html = priv->data->in_nextcontext_html; - len = priv->data->in_nextcontext_len; - } - - /* Note backlog, or fallback if NextContext.html - * is missing */ - if (html == NULL) { - html = priv->data->in_nextcontent_html; - len = priv->data->in_nextcontent_len; - } + /* out */ + if (is_backlog) { + /* context */ + html = consecutive ? priv->data->out_nextcontext_html : priv->data->out_context_html; + } else { + /* content */ + html = consecutive ? priv->data->out_nextcontent_html : priv->data->out_content_html; } - - /* Not consecutive, or fallback if NextContext.html and/or - * NextContent.html are missing */ - if (html == NULL) { - if (is_backlog) { - html = priv->data->in_context_html; - len = priv->data->in_context_len; - } - - if (html == NULL) { - html = priv->data->in_content_html; - len = priv->data->in_content_len; - } + } else { + /* in */ + if (is_backlog) { + /* context */ + html = consecutive ? priv->data->in_nextcontext_html : priv->data->in_context_html; + } else { + /* content */ + html = consecutive ? priv->data->in_nextcontent_html : priv->data->in_content_html; } } - if (html != NULL) { - theme_adium_append_html (theme, func, html, len, body_escaped, - avatar_filename, name, contact_id, - service_name, message_classes->str, - timestamp, is_backlog); - } else { - DEBUG ("Couldn't find HTML file for this message"); - } + theme_adium_append_html (theme, func, html, body_escaped, + avatar_filename, name, contact_id, + service_name, message_classes->str, + timestamp, is_backlog); /* Keep the sender of the last displayed message */ if (priv->last_contact) { @@ -782,8 +805,15 @@ static void theme_adium_append_event (EmpathyChatView *view, const gchar *str) { + EmpathyThemeAdiumPriv *priv = GET_PRIV (view); gchar *str_escaped; + if (priv->pages_loading != 0) { + g_queue_push_tail (&priv->message_queue, + tp_g_value_slice_new_string (str)); + return; + } + str_escaped = g_markup_escape_text (str, -1); theme_adium_append_event_escaped (view, str_escaped); g_free (str_escaped); @@ -793,14 +823,18 @@ static void theme_adium_scroll (EmpathyChatView *view, gboolean allow_scrolling) { - /* FIXME: Is it possible? I guess we need a js function, but I don't - * see any... */ + EmpathyThemeAdiumPriv *priv = GET_PRIV (view); + + priv->allow_scrolling = allow_scrolling; + if (allow_scrolling) { + empathy_chat_view_scroll_down (view); + } } static void theme_adium_scroll_down (EmpathyChatView *view) { - webkit_web_view_execute_script (WEBKIT_WEB_VIEW (view), "scrollToBottom()"); + webkit_web_view_execute_script (WEBKIT_WEB_VIEW (view), "alignChat(true);"); } static gboolean @@ -1028,6 +1062,7 @@ theme_adium_load_finished_cb (WebKitWebView *view, { EmpathyThemeAdiumPriv *priv = GET_PRIV (view); EmpathyChatView *chat_view = EMPATHY_CHAT_VIEW (view); + GList *l; DEBUG ("Page loaded"); priv->pages_loading--; @@ -1036,14 +1071,20 @@ theme_adium_load_finished_cb (WebKitWebView *view, return; /* Display queued messages */ - priv->message_queue = g_list_reverse (priv->message_queue); - while (priv->message_queue) { - EmpathyMessage *message = priv->message_queue->data; + for (l = priv->message_queue.head; l != NULL; l = l->next) { + GValue *value = l->data; - theme_adium_append_message (chat_view, message); - priv->message_queue = g_list_remove (priv->message_queue, message); - g_object_unref (message); + if (G_VALUE_HOLDS_OBJECT (value)) { + theme_adium_append_message (chat_view, + g_value_get_object (value)); + } else { + theme_adium_append_event (chat_view, + g_value_get_string (value)); + } + + tp_g_value_slice_free (value); } + g_queue_clear (&priv->message_queue); } static void @@ -1319,6 +1360,8 @@ empathy_theme_adium_init (EmpathyThemeAdium *theme) theme->priv = priv; + g_queue_init (&priv->message_queue); + priv->allow_scrolling = TRUE; priv->smiley_manager = empathy_smiley_manager_dup_singleton (); g_signal_connect (theme, "load-finished", @@ -1359,18 +1402,24 @@ empathy_adium_path_is_valid (const gchar *path) ret = g_file_test (file, G_FILE_TEST_EXISTS); g_free (file); - if (ret == FALSE) - return ret; + if (!ret) + return FALSE; /* We ship a default Template.html as fallback if there is any problem * with the one inside the theme. The only other required file is - * Content.html for incoming messages (outgoing fallback to use - * incoming). */ - file = g_build_filename (path, "Contents", "Resources", "Incoming", - "Content.html", NULL); + * Content.html OR Incoming/Content.html*/ + file = g_build_filename (path, "Contents", "Resources", "Content.html", + NULL); ret = g_file_test (file, G_FILE_TEST_EXISTS); g_free (file); + if (!ret) { + file = g_build_filename (path, "Contents", "Resources", "Incoming", + "Content.html", NULL); + ret = g_file_test (file, G_FILE_TEST_EXISTS); + g_free (file); + } + return ret; } @@ -1400,6 +1449,108 @@ empathy_adium_info_new (const gchar *path) return info; } +static guint +adium_info_get_version (GHashTable *info) +{ + return tp_asv_get_int32 (info, "MessageViewVersion", NULL); +} + +static const gchar * +adium_info_get_no_variant_name (GHashTable *info) +{ + const gchar *name = tp_asv_get_string (info, "DisplayNameForNoVariant"); + return name ? name : _("Normal"); +} + +static const gchar * +adium_info_get_default_or_first_variant (GHashTable *info) +{ + const gchar *name; + GPtrArray *variants; + + name = empathy_adium_info_get_default_variant (info); + if (name != NULL) { + return name; + } + + variants = empathy_adium_info_get_available_variants (info); + g_assert (variants->len > 0); + return g_ptr_array_index (variants, 0); +} + +static gchar * +adium_info_dup_path_for_variant (GHashTable *info, + const gchar *variant) +{ + guint version = adium_info_get_version (info); + const gchar *no_variant = adium_info_get_no_variant_name (info); + + if (version <= 2 && !tp_strdiff (variant, no_variant)) { + return g_strdup ("main.css"); + } + + return g_strdup_printf ("Variants/%s.css", variant); + +} + +const gchar * +empathy_adium_info_get_default_variant (GHashTable *info) +{ + if (adium_info_get_version (info) <= 2) { + return adium_info_get_no_variant_name (info); + } + + return tp_asv_get_string (info, "DefaultVariant"); +} + +GPtrArray * +empathy_adium_info_get_available_variants (GHashTable *info) +{ + GPtrArray *variants; + const gchar *path; + gchar *dirpath; + GDir *dir; + + variants = tp_asv_get_boxed (info, "AvailableVariants", G_TYPE_PTR_ARRAY); + if (variants != NULL) { + return variants; + } + + variants = g_ptr_array_new_with_free_func (g_free); + tp_asv_take_boxed (info, g_strdup ("AvailableVariants"), + G_TYPE_PTR_ARRAY, variants); + + path = tp_asv_get_string (info, "path"); + dirpath = g_build_filename (path, "Contents", "Resources", "Variants", NULL); + dir = g_dir_open (dirpath, 0, NULL); + if (dir != NULL) { + const gchar *name; + + for (name = g_dir_read_name (dir); + name != NULL; + name = g_dir_read_name (dir)) { + gchar *display_name; + + if (!g_str_has_suffix (name, ".css")) { + continue; + } + + display_name = g_strdup (name); + strstr (display_name, ".css")[0] = '\0'; + g_ptr_array_add (variants, display_name); + } + g_dir_close (dir); + } + g_free (dirpath); + + if (adium_info_get_version (info) <= 2) { + g_ptr_array_add (variants, + g_strdup (adium_info_get_no_variant_name (info))); + } + + return variants; +} + GType empathy_adium_data_get_type (void) { @@ -1419,16 +1570,10 @@ EmpathyAdiumData * empathy_adium_data_new_with_info (const gchar *path, GHashTable *info) { EmpathyAdiumData *data; - gchar *file; gchar *template_html = NULL; - gsize template_len; gchar *footer_html = NULL; - gsize footer_len; - GString *string; - gchar **strv = NULL; - gchar *css_path; - guint len = 0; - guint i = 0; + gchar *variant_path; + gchar *tmp; g_return_val_if_fail (empathy_adium_path_is_valid (path), NULL); @@ -1438,121 +1583,121 @@ empathy_adium_data_new_with_info (const gchar *path, GHashTable *info) data->basedir = g_strconcat (path, G_DIR_SEPARATOR_S "Contents" G_DIR_SEPARATOR_S "Resources" G_DIR_SEPARATOR_S, NULL); data->info = g_hash_table_ref (info); + data->version = adium_info_get_version (info); + data->strings_to_free = g_ptr_array_new_with_free_func (g_free); + + DEBUG ("Loading theme at %s", path); + +#define LOAD(path, var) \ + tmp = g_build_filename (data->basedir, path, NULL); \ + g_file_get_contents (tmp, &var, NULL, NULL); \ + g_free (tmp); \ + +#define LOAD_CONST(path, var) \ + { \ + gchar *content; \ + LOAD (path, content); \ + if (content != NULL) { \ + g_ptr_array_add (data->strings_to_free, content); \ + } \ + var = content; \ + } /* Load html files */ - file = g_build_filename (data->basedir, "Incoming", "Content.html", NULL); - g_file_get_contents (file, &data->in_content_html, &data->in_content_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Incoming", "NextContent.html", NULL); - g_file_get_contents (file, &data->in_nextcontent_html, &data->in_nextcontent_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Incoming", "Context.html", NULL); - g_file_get_contents (file, &data->in_context_html, &data->in_context_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Incoming", "NextContext.html", NULL); - g_file_get_contents (file, &data->in_nextcontext_html, &data->in_nextcontext_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Outgoing", "Content.html", NULL); - g_file_get_contents (file, &data->out_content_html, &data->out_content_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Outgoing", "NextContent.html", NULL); - g_file_get_contents (file, &data->out_nextcontent_html, &data->out_nextcontent_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Outgoing", "Context.html", NULL); - g_file_get_contents (file, &data->out_context_html, &data->out_context_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Outgoing", "NextContext.html", NULL); - g_file_get_contents (file, &data->out_nextcontext_html, &data->out_nextcontext_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Status.html", NULL); - g_file_get_contents (file, &data->status_html, &data->status_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Footer.html", NULL); - g_file_get_contents (file, &footer_html, &footer_len, NULL); - g_free (file); - - file = g_build_filename (data->basedir, "Incoming", "buddy_icon.png", NULL); - if (g_file_test (file, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { - data->default_incoming_avatar_filename = file; - } else { - g_free (file); + LOAD_CONST ("Content.html", data->content_html); + LOAD_CONST ("Incoming/Content.html", data->in_content_html); + LOAD_CONST ("Incoming/NextContent.html", data->in_nextcontent_html); + LOAD_CONST ("Incoming/Context.html", data->in_context_html); + LOAD_CONST ("Incoming/NextContext.html", data->in_nextcontext_html); + LOAD_CONST ("Outgoing/Content.html", data->out_content_html); + LOAD_CONST ("Outgoing/NextContent.html", data->out_nextcontent_html); + LOAD_CONST ("Outgoing/Context.html", data->out_context_html); + LOAD_CONST ("Outgoing/NextContext.html", data->out_nextcontext_html); + LOAD_CONST ("Status.html", data->status_html); + LOAD ("Template.html", template_html); + LOAD ("Footer.html", footer_html); + +#undef LOAD_CONST +#undef LOAD + + /* HTML fallbacks: If we have at least content OR in_content, then + * everything else gets a fallback */ + +#define FALLBACK(html, fallback) \ + if (html == NULL) { \ + html = fallback; \ } - file = g_build_filename (data->basedir, "Outgoing", "buddy_icon.png", NULL); - if (g_file_test (file, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { - data->default_outgoing_avatar_filename = file; - } else { - g_free (file); + /* in_nextcontent -> in_content -> content */ + FALLBACK (data->in_content_html, data->content_html); + FALLBACK (data->in_nextcontent_html, data->in_content_html); + + /* context -> content */ + FALLBACK (data->in_context_html, data->in_content_html); + FALLBACK (data->in_nextcontext_html, data->in_nextcontent_html); + FALLBACK (data->out_context_html, data->out_content_html); + FALLBACK (data->out_nextcontext_html, data->out_nextcontent_html); + + /* out -> in */ + FALLBACK (data->out_content_html, data->in_content_html); + FALLBACK (data->out_nextcontent_html, data->in_nextcontent_html); + FALLBACK (data->out_context_html, data->in_context_html); + FALLBACK (data->out_nextcontext_html, data->in_nextcontext_html); + + /* status -> in_content */ + FALLBACK (data->status_html, data->in_content_html); + +#undef FALLBACK + + /* template -> empathy's template */ + data->custom_template = (template_html != NULL); + if (template_html == NULL) { + tmp = empathy_file_lookup ("Template.html", "data"); + g_file_get_contents (tmp, &template_html, NULL, NULL); + g_free (tmp); } - css_path = g_build_filename (data->basedir, "main.css", NULL); - - /* There is 2 formats for Template.html: The old one has 4 parameters, - * the new one has 5 parameters. */ - file = g_build_filename (data->basedir, "Template.html", NULL); - if (g_file_get_contents (file, &template_html, &template_len, NULL)) { - strv = g_strsplit (template_html, "%@", -1); - len = g_strv_length (strv); + /* Default avatar */ + tmp = g_build_filename (data->basedir, "Incoming", "buddy_icon.png", NULL); + if (g_file_test (tmp, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { + data->default_incoming_avatar_filename = tmp; + } else { + g_free (tmp); } - g_free (file); - - if (len != 5 && len != 6) { - /* Either the theme has no template or it don't have the good - * number of parameters. Fallback to use our own template. */ - g_free (template_html); - g_strfreev (strv); - - file = empathy_file_lookup ("Template.html", "data"); - g_file_get_contents (file, &template_html, &template_len, NULL); - g_free (file); - strv = g_strsplit (template_html, "%@", -1); - len = g_strv_length (strv); + tmp = g_build_filename (data->basedir, "Outgoing", "buddy_icon.png", NULL); + if (g_file_test (tmp, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { + data->default_outgoing_avatar_filename = tmp; + } else { + g_free (tmp); } - /* Replace %@ with the needed information in the template html. */ - string = g_string_sized_new (template_len); - g_string_append (string, strv[i++]); - g_string_append (string, data->basedir); - g_string_append (string, strv[i++]); - if (len == 6) { - const gchar *variant; - - /* We include main.css by default */ - g_string_append_printf (string, "@import url(\"%s\");", css_path); - g_string_append (string, strv[i++]); - variant = tp_asv_get_string (data->info, "DefaultVariant"); - if (variant) { - g_string_append (string, "Variants/"); - g_string_append (string, variant); - g_string_append (string, ".css"); - } + variant_path = adium_info_dup_path_for_variant (info, + adium_info_get_default_or_first_variant (info)); + + /* Old custom templates had only 4 parameters. + * New templates have 5 parameters */ + if (data->version <= 2 && data->custom_template) { + tmp = string_with_format (template_html, + data->basedir, + variant_path, + "", /* The header */ + footer_html ? footer_html : "", + NULL); } else { - /* FIXME: We should set main.css OR the variant css */ - g_string_append (string, css_path); + tmp = string_with_format (template_html, + data->basedir, + data->version <= 2 ? "" : "@import url( \"main.css\" );", + variant_path, + "", /* The header */ + footer_html ? footer_html : "", + NULL); } - g_string_append (string, strv[i++]); - g_string_append (string, ""); /* We don't want header */ - g_string_append (string, strv[i++]); - /* FIXME: We should replace adium %macros% in footer */ - if (footer_html) { - g_string_append (string, footer_html); - } - g_string_append (string, strv[i++]); - data->template_html = g_string_free (string, FALSE); + g_ptr_array_add (data->strings_to_free, tmp); + data->template_html = tmp; - g_free (footer_html); g_free (template_html); - g_free (css_path); - g_strfreev (strv); + g_free (footer_html); + g_free (variant_path); return data; } @@ -1588,20 +1733,12 @@ empathy_adium_data_unref (EmpathyAdiumData *data) if (g_atomic_int_dec_and_test (&data->ref_count)) { g_free (data->path); g_free (data->basedir); - g_free (data->template_html); - g_free (data->in_content_html); - g_free (data->in_nextcontent_html); - g_free (data->in_context_html); - g_free (data->in_nextcontext_html); - g_free (data->out_content_html); - g_free (data->out_nextcontent_html); - g_free (data->out_context_html); - g_free (data->out_nextcontext_html); g_free (data->default_avatar_filename); g_free (data->default_incoming_avatar_filename); g_free (data->default_outgoing_avatar_filename); - g_free (data->status_html); g_hash_table_unref (data->info); + g_ptr_array_unref (data->strings_to_free); + g_slice_free (EmpathyAdiumData, data); } } diff --git a/libempathy-gtk/empathy-theme-adium.h b/libempathy-gtk/empathy-theme-adium.h index a8ed19de4..d0ad0170d 100644 --- a/libempathy-gtk/empathy-theme-adium.h +++ b/libempathy-gtk/empathy-theme-adium.h @@ -52,7 +52,10 @@ GType empathy_theme_adium_get_type (void) G_GNUC_CONST; EmpathyThemeAdium *empathy_theme_adium_new (EmpathyAdiumData *data); gboolean empathy_adium_path_is_valid (const gchar *path); + GHashTable *empathy_adium_info_new (const gchar *path); +const gchar * empathy_adium_info_get_default_variant (GHashTable *info); +GPtrArray * empathy_adium_info_get_available_variants (GHashTable *info); #define EMPATHY_TYPE_ADIUM_DATA (empathy_adium_data_get_type ()) GType empathy_adium_data_get_type (void) G_GNUC_CONST; diff --git a/libempathy-gtk/empathy-theme-manager.c b/libempathy-gtk/empathy-theme-manager.c index 1a4f5ae47..0dcb40a70 100644 --- a/libempathy-gtk/empathy-theme-manager.c +++ b/libempathy-gtk/empathy-theme-manager.c @@ -54,6 +54,7 @@ typedef struct { gchar *adium_path; GtkSettings *settings; GList *boxes_views; + guint emit_changed_idle; } EmpathyThemeManagerPriv; enum { @@ -392,6 +393,51 @@ theme_manager_ensure_theme_exists (const gchar *name) return FALSE; } +typedef enum { + THEME_TYPE_UNSET, + THEME_TYPE_IRC, + THEME_TYPE_BOXED, + THEME_TYPE_ADIUM, +} ThemeType; + +static ThemeType +theme_type (const gchar *name) +{ + if (name == NULL) { + return THEME_TYPE_UNSET; + } else if (!tp_strdiff (name, "classic")) { + return THEME_TYPE_IRC; + } else if (!tp_strdiff (name, "adium")) { + return THEME_TYPE_ADIUM; + } else { + return THEME_TYPE_BOXED; + } +} + +static gboolean +theme_manager_emit_changed_idle_cb (gpointer manager) +{ + EmpathyThemeManagerPriv *priv = GET_PRIV (manager); + + g_signal_emit (manager, signals[THEME_CHANGED], 0, NULL); + priv->emit_changed_idle = 0; + + return FALSE; +} + +static void +theme_manager_emit_changed (EmpathyThemeManager *manager) +{ + EmpathyThemeManagerPriv *priv = GET_PRIV (manager); + + /* We emit the signal in idle callback to be sure we emit it only once + * in the case both the name and adium_path changed */ + if (priv->emit_changed_idle == 0) { + priv->emit_changed_idle = g_idle_add ( + theme_manager_emit_changed_idle_cb, manager); + } +} + static void theme_manager_notify_name_cb (GSettings *gsettings_chat, const gchar *key, @@ -400,25 +446,29 @@ theme_manager_notify_name_cb (GSettings *gsettings_chat, EmpathyThemeManager *manager = EMPATHY_THEME_MANAGER (user_data); EmpathyThemeManagerPriv *priv = GET_PRIV (manager); gchar *name; + ThemeType old_type; + ThemeType new_type; name = g_settings_get_string (gsettings_chat, key); - if (!theme_manager_ensure_theme_exists (name) || - !tp_strdiff (priv->name, name)) { - if (!priv->name) { - priv->name = g_strdup ("classic"); - } + /* Fallback to classic theme if current setting does not exist */ + if (!theme_manager_ensure_theme_exists (name)) { + g_free (name); + name = g_strdup ("classic"); + } + /* If theme did not change, nothing to do */ + if (!tp_strdiff (priv->name, name)) { g_free (name); return; } + old_type = theme_type (priv->name); g_free (priv->name); priv->name = name; + new_type = theme_type (priv->name); - if (!tp_strdiff (priv->name, "simple") || - !tp_strdiff (priv->name, "clean") || - !tp_strdiff (priv->name, "blue")) { + if (new_type == THEME_TYPE_BOXED) { GList *l; /* The theme changes to a boxed one, we can update boxed views */ @@ -428,7 +478,15 @@ theme_manager_notify_name_cb (GSettings *gsettings_chat, } } - g_signal_emit (manager, signals[THEME_CHANGED], 0, NULL); + /* Do not emit theme-changed if theme type didn't change, or if it was + * unset (the manager is under construction). If theme changed from a + * boxed to another boxed, all view are updated in place. If theme + * changed from an adium to another adium, the signal will be emited + * from theme_manager_notify_adium_path_cb () + */ + if (old_type != new_type && old_type != THEME_TYPE_UNSET) { + theme_manager_emit_changed (manager); + } } static void @@ -439,6 +497,7 @@ theme_manager_notify_adium_path_cb (GSettings *gsettings_chat, EmpathyThemeManager *manager = EMPATHY_THEME_MANAGER (user_data); EmpathyThemeManagerPriv *priv = GET_PRIV (manager); gchar *adium_path = NULL; + gboolean was_set; adium_path = g_settings_get_string (gsettings_chat, key); @@ -447,10 +506,16 @@ theme_manager_notify_adium_path_cb (GSettings *gsettings_chat, return; } + was_set = (priv->adium_path != NULL); + g_free (priv->adium_path); priv->adium_path = adium_path; - g_signal_emit (manager, signals[THEME_CHANGED], 0, NULL); + /* Do not emit the signal if path was not set yet (the manager is under + * construction) */ + if (was_set) { + theme_manager_emit_changed (manager); + } } static void @@ -470,6 +535,10 @@ theme_manager_finalize (GObject *object) } g_list_free (priv->boxes_views); + if (priv->emit_changed_idle != 0) { + g_source_remove (priv->emit_changed_idle); + } + G_OBJECT_CLASS (empathy_theme_manager_parent_class)->finalize (object); } diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index 680094a54..620c479e2 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -1098,6 +1098,18 @@ empathy_contact_get_status (EmpathyContact *contact) } gboolean +empathy_contact_can_sms (EmpathyContact *contact) +{ + EmpathyContactPriv *priv; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE); + + priv = GET_PRIV (contact); + + return priv->capabilities & EMPATHY_CAPABILITIES_SMS; +} + +gboolean empathy_contact_can_voip (EmpathyContact *contact) { EmpathyContactPriv *priv; @@ -1189,6 +1201,9 @@ empathy_contact_can_do_action (EmpathyContact *self, case EMPATHY_ACTION_CHAT: sensitivity = TRUE; break; + case EMPATHY_ACTION_SMS: + sensitivity = empathy_contact_can_sms (self); + break; case EMPATHY_ACTION_AUDIO_CALL: sensitivity = empathy_contact_can_voip_audio (self); break; @@ -1729,6 +1744,12 @@ tp_caps_to_capabilities (TpCapabilities *caps) TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_VIDEO, NULL)) capabilities |= EMPATHY_CAPABILITIES_VIDEO; } + else if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT)) + { + if (tp_asv_get_boolean (fixed_prop, + TP_PROP_CHANNEL_INTERFACE_SMS_SMS_CHANNEL, NULL)) + capabilities |= EMPATHY_CAPABILITIES_SMS; + } } return capabilities; diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h index f9217c108..16b50e500 100644 --- a/libempathy/empathy-contact.h +++ b/libempathy/empathy-contact.h @@ -67,6 +67,7 @@ typedef enum { EMPATHY_CAPABILITIES_VIDEO = 1 << 1, EMPATHY_CAPABILITIES_FT = 1 << 2, EMPATHY_CAPABILITIES_RFB_STREAM_TUBE = 1 << 3, + EMPATHY_CAPABILITIES_SMS = 1 << 4, EMPATHY_CAPABILITIES_UNKNOWN = 1 << 7 } EmpathyCapabilities; @@ -94,6 +95,7 @@ void empathy_contact_set_is_user (EmpathyContact *contact, gboolean is_user); gboolean empathy_contact_is_online (EmpathyContact *contact); const gchar * empathy_contact_get_status (EmpathyContact *contact); +gboolean empathy_contact_can_sms (EmpathyContact *contact); gboolean empathy_contact_can_voip (EmpathyContact *contact); gboolean empathy_contact_can_voip_audio (EmpathyContact *contact); gboolean empathy_contact_can_voip_video (EmpathyContact *contact); @@ -102,6 +104,7 @@ gboolean empathy_contact_can_use_rfb_stream_tube (EmpathyContact *contact); typedef enum { EMPATHY_ACTION_CHAT, + EMPATHY_ACTION_SMS, EMPATHY_ACTION_AUDIO_CALL, EMPATHY_ACTION_VIDEO_CALL, EMPATHY_ACTION_VIEW_LOGS, diff --git a/libempathy/empathy-request-util.c b/libempathy/empathy-request-util.c index ea885dacc..6472230ab 100644 --- a/libempathy/empathy-request-util.c +++ b/libempathy/empathy-request-util.c @@ -58,9 +58,11 @@ ensure_text_channel_cb (GObject *source, } } -void -empathy_chat_with_contact_id (TpAccount *account, - const gchar *contact_id, +static void +create_text_channel (TpAccount *account, + TpHandleType target_handle_type, + const gchar *target_id, + gboolean sms_channel, gint64 timestamp) { GHashTable *request; @@ -69,39 +71,46 @@ empathy_chat_with_contact_id (TpAccount *account, request = tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, - TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT, - TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING, contact_id, + TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, target_handle_type, + TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING, target_id, NULL); + if (sms_channel) + tp_asv_set_boolean (request, + TP_PROP_CHANNEL_INTERFACE_SMS_SMS_CHANNEL, TRUE); + req = tp_account_channel_request_new (account, request, timestamp); - tp_account_channel_request_ensure_channel_async (req, EMPATHY_CHAT_BUS_NAME, - NULL, ensure_text_channel_cb, NULL); + tp_account_channel_request_ensure_channel_async (req, NULL, NULL, + ensure_text_channel_cb, NULL); g_hash_table_unref (request); g_object_unref (req); } void +empathy_chat_with_contact_id (TpAccount *account, + const gchar *contact_id, + gint64 timestamp) +{ + create_text_channel (account, TP_HANDLE_TYPE_CONTACT, + contact_id, FALSE, timestamp); +} + +void empathy_join_muc (TpAccount *account, const gchar *room_name, gint64 timestamp) { - GHashTable *request; - TpAccountChannelRequest *req; - - request = tp_asv_new ( - TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, - TP_IFACE_CHANNEL_TYPE_TEXT, - TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_ROOM, - TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING, room_name, - NULL); - - req = tp_account_channel_request_new (account, request, timestamp); - - tp_account_channel_request_ensure_channel_async (req, EMPATHY_CHAT_BUS_NAME, - NULL, ensure_text_channel_cb, NULL); + create_text_channel (account, TP_HANDLE_TYPE_ROOM, + room_name, FALSE, timestamp); +} - g_hash_table_unref (request); - g_object_unref (req); +void +empathy_sms_contact_id (TpAccount *account, + const gchar *contact_id, + gint64 timestamp) +{ + create_text_channel (account, TP_HANDLE_TYPE_CONTACT, + contact_id, TRUE, timestamp); } diff --git a/libempathy/empathy-request-util.h b/libempathy/empathy-request-util.h index afb8013cb..49b98a433 100644 --- a/libempathy/empathy-request-util.h +++ b/libempathy/empathy-request-util.h @@ -52,6 +52,11 @@ void empathy_join_muc (TpAccount *account, const gchar *roomname, gint64 timestamp); +/* Request a sms channel */ +void empathy_sms_contact_id (TpAccount *account, + const gchar *contact_id, + gint64 timestamp); + G_END_DECLS #endif /* __EMPATHY_DISPATCHER_H__ */ diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index a56c08a32..72c6bebf0 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -59,6 +59,10 @@ typedef struct { gboolean got_password_flags; gboolean ready; gboolean can_upgrade_to_muc; + gboolean got_sms_channel; + gboolean sms_channel; + + GHashTable *messages_being_sent; } EmpathyTpChatPriv; static void tp_chat_iface_init (EmpathyContactListIface *iface); @@ -70,6 +74,8 @@ enum { PROP_REMOTE_CONTACT, PROP_PASSWORD_NEEDED, PROP_READY, + PROP_SMS_CHANNEL, + PROP_N_MESSAGES_SENDING, }; enum { @@ -90,6 +96,40 @@ G_DEFINE_TYPE_WITH_CODE (EmpathyTpChat, empathy_tp_chat, G_TYPE_OBJECT, static void acknowledge_messages (EmpathyTpChat *chat, GArray *ids); static void +tp_chat_set_delivery_status (EmpathyTpChat *self, + const gchar *token, + EmpathyDeliveryStatus delivery_status) +{ + EmpathyTpChatPriv *priv = GET_PRIV (self); + TpDeliveryReportingSupportFlags flags = + tp_text_channel_get_delivery_reporting_support ( + TP_TEXT_CHANNEL (priv->channel)); + + /* channel must support receiving failures and successes */ + if (!tp_str_empty (token) && + flags & TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_FAILURES && + flags & TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_SUCCESSES) { + + DEBUG ("Delivery status (%s) = %u", token, delivery_status); + + switch (delivery_status) { + case EMPATHY_DELIVERY_STATUS_NONE: + g_hash_table_remove (priv->messages_being_sent, + token); + break; + + default: + g_hash_table_insert (priv->messages_being_sent, + g_strdup (token), + GUINT_TO_POINTER (delivery_status)); + break; + } + + g_object_notify (G_OBJECT (self), "n-messages-sending"); + } +} + +static void tp_chat_invalidated_cb (TpProxy *proxy, guint domain, gint code, @@ -319,19 +359,38 @@ handle_delivery_report (EmpathyTpChat *self, gboolean valid; GPtrArray *echo; const gchar *message_body = NULL; + const gchar *delivery_dbus_error; + const gchar *delivery_token = NULL; header = tp_message_peek (message, 0); if (header == NULL) goto out; + delivery_token = tp_asv_get_string (header, "delivery-token"); delivery_status = tp_asv_get_uint32 (header, "delivery-status", &valid); - if (!valid || delivery_status != TP_DELIVERY_STATUS_PERMANENTLY_FAILED) + + if (!valid) { + goto out; + } else if (delivery_status == TP_DELIVERY_STATUS_ACCEPTED) { + DEBUG ("Accepted %s", delivery_token); + tp_chat_set_delivery_status (self, delivery_token, + EMPATHY_DELIVERY_STATUS_ACCEPTED); goto out; + } else if (delivery_status == TP_DELIVERY_STATUS_DELIVERED) { + DEBUG ("Delivered %s", delivery_token); + tp_chat_set_delivery_status (self, delivery_token, + EMPATHY_DELIVERY_STATUS_NONE); + goto out; + } else if (delivery_status != TP_DELIVERY_STATUS_PERMANENTLY_FAILED) { + goto out; + } delivery_error = tp_asv_get_uint32 (header, "delivery-error", &valid); if (!valid) delivery_error = TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN; + delivery_dbus_error = tp_asv_get_string (header, "delivery-dbus-error"); + /* TODO: ideally we should use tp-glib API giving us the echoed message as a * TpMessage. (fdo #35884) */ echo = tp_asv_get_boxed (header, "delivery-echo", @@ -344,7 +403,10 @@ handle_delivery_report (EmpathyTpChat *self, message_body = tp_asv_get_string (echo_body, "content"); } - g_signal_emit (self, signals[SEND_ERROR], 0, message_body, delivery_error); + tp_chat_set_delivery_status (self, delivery_token, + EMPATHY_DELIVERY_STATUS_NONE); + g_signal_emit (self, signals[SEND_ERROR], 0, message_body, + delivery_error, delivery_dbus_error); out: tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (priv->channel), @@ -436,9 +498,10 @@ message_send_cb (GObject *source, { EmpathyTpChat *chat = user_data; TpTextChannel *channel = (TpTextChannel *) source; + gchar *token = NULL; GError *error = NULL; - if (!tp_text_channel_send_message_finish (channel, result, NULL, &error)) { + if (!tp_text_channel_send_message_finish (channel, result, &token, &error)) { DEBUG ("Error: %s", error->message); /* FIXME: we should use the body of the message as first argument of the @@ -446,10 +509,14 @@ message_send_cb (GObject *source, * we'll have rebased EmpathyTpChat on top of TpTextChannel we'll be able * to use the user_data pointer to pass the message and fix this. */ g_signal_emit (chat, signals[SEND_ERROR], 0, - NULL, error_to_text_send_error (error)); + NULL, error_to_text_send_error (error), NULL); g_error_free (error); } + + tp_chat_set_delivery_status (chat, token, + EMPATHY_DELIVERY_STATUS_SENDING); + g_free (token); } typedef struct { @@ -809,6 +876,7 @@ tp_chat_finalize (GObject *object) g_queue_free (priv->messages_queue); g_queue_free (priv->pending_messages_queue); + g_hash_table_destroy (priv->messages_being_sent); G_OBJECT_CLASS (empathy_tp_chat_parent_class)->finalize (object); } @@ -827,6 +895,9 @@ check_almost_ready (EmpathyTpChat *chat) if (!priv->got_password_flags) return; + if (!priv->got_sms_channel) + return; + /* We need either the members (room) or the remote contact (private chat). * If the chat is protected by a password we can't get these information so * consider the chat as ready so it can be presented to the user. */ @@ -1218,6 +1289,41 @@ got_password_flags_cb (TpChannel *proxy, check_almost_ready (EMPATHY_TP_CHAT (self)); } +static void +sms_channel_changed_cb (TpChannel *channel, + gboolean sms_channel, + gpointer user_data, + GObject *chat) +{ + EmpathyTpChatPriv *priv = GET_PRIV (chat); + + priv->sms_channel = sms_channel; + + g_object_notify (G_OBJECT (chat), "sms-channel"); +} + +static void +get_sms_channel_cb (TpProxy *channel, + const GValue *value, + const GError *in_error, + gpointer user_data, + GObject *chat) +{ + EmpathyTpChatPriv *priv = GET_PRIV (chat); + + if (in_error != NULL) { + DEBUG ("Failed to get SMSChannel: %s", in_error->message); + return; + } + + g_return_if_fail (G_VALUE_HOLDS_BOOLEAN (value)); + + priv->sms_channel = g_value_get_boolean (value); + priv->got_sms_channel = TRUE; + + check_almost_ready (EMPATHY_TP_CHAT (chat)); +} + static GObject * tp_chat_constructor (GType type, guint n_props, @@ -1327,6 +1433,22 @@ tp_chat_constructor (GType type, priv->got_password_flags = TRUE; } + /* Check if the chat is for SMS */ + if (tp_proxy_has_interface_by_id (priv->channel, + TP_IFACE_QUARK_CHANNEL_INTERFACE_SMS)) { + tp_cli_channel_interface_sms_connect_to_sms_channel_changed ( + priv->channel, + sms_channel_changed_cb, chat, NULL, G_OBJECT (chat), + NULL); + + tp_cli_dbus_properties_call_get (priv->channel, -1, + TP_IFACE_CHANNEL_INTERFACE_SMS, "SMSChannel", + get_sms_channel_cb, chat, NULL, G_OBJECT (chat)); + } else { + /* if there's no SMS support, then we're not waiting for it */ + priv->got_sms_channel = TRUE; + } + return chat; } @@ -1355,6 +1477,13 @@ tp_chat_get_property (GObject *object, case PROP_PASSWORD_NEEDED: g_value_set_boolean (value, empathy_tp_chat_password_needed (self)); break; + case PROP_SMS_CHANNEL: + g_value_set_boolean (value, priv->sms_channel); + break; + case PROP_N_MESSAGES_SENDING: + g_value_set_uint (value, + g_hash_table_size (priv->messages_being_sent)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; @@ -1436,6 +1565,22 @@ empathy_tp_chat_class_init (EmpathyTpChatClass *klass) FALSE, G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_SMS_CHANNEL, + g_param_spec_boolean ("sms-channel", + "SMS Channel", + "TRUE if channel is for sending SMSes", + FALSE, + G_PARAM_READABLE)); + + g_object_class_install_property (object_class, + PROP_N_MESSAGES_SENDING, + g_param_spec_uint ("n-messages-sending", + "Num Messages Sending", + "The number of messages being sent", + 0, G_MAXUINT, 0, + G_PARAM_READABLE)); + /* Signals */ signals[MESSAGE_RECEIVED] = g_signal_new ("message-received", @@ -1453,9 +1598,9 @@ empathy_tp_chat_class_init (EmpathyTpChatClass *klass) G_SIGNAL_RUN_LAST, 0, NULL, NULL, - _empathy_marshal_VOID__STRING_UINT, + _empathy_marshal_VOID__STRING_UINT_STRING, G_TYPE_NONE, - 2, G_TYPE_STRING, G_TYPE_UINT); + 3, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING); signals[CHAT_STATE_CHANGED] = g_signal_new ("chat-state-changed", @@ -1499,6 +1644,8 @@ empathy_tp_chat_init (EmpathyTpChat *chat) chat->priv = priv; priv->messages_queue = g_queue_new (); priv->pending_messages_queue = g_queue_new (); + priv->messages_being_sent = g_hash_table_new_full ( + g_str_hash, g_str_equal, g_free, NULL); } static void @@ -1607,7 +1754,8 @@ empathy_tp_chat_send (EmpathyTpChat *chat, DEBUG ("Sending message: %s", message_body); tp_text_channel_send_message_async (TP_TEXT_CHANNEL (priv->channel), - message, 0, message_send_cb, chat); + message, TP_MESSAGE_SENDING_FLAG_REPORT_DELIVERY, + message_send_cb, chat); g_free (message_body); } @@ -1909,3 +2057,15 @@ empathy_tp_chat_get_self_contact (EmpathyTpChat *self) return priv->user; } + +gboolean +empathy_tp_chat_is_sms_channel (EmpathyTpChat *self) +{ + EmpathyTpChatPriv *priv; + + g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), FALSE); + + priv = GET_PRIV (self); + + return priv->sms_channel; +} diff --git a/libempathy/empathy-tp-chat.h b/libempathy/empathy-tp-chat.h index 7c998a3fa..83c7fe7d1 100644 --- a/libempathy/empathy-tp-chat.h +++ b/libempathy/empathy-tp-chat.h @@ -59,6 +59,12 @@ typedef struct { GValue *value; } EmpathyTpChatProperty; +typedef enum { + EMPATHY_DELIVERY_STATUS_NONE, + EMPATHY_DELIVERY_STATUS_SENDING, + EMPATHY_DELIVERY_STATUS_ACCEPTED +} EmpathyDeliveryStatus; + GType empathy_tp_chat_get_type (void) G_GNUC_CONST; EmpathyTpChat *empathy_tp_chat_new (TpAccount *account, TpChannel *channel); @@ -112,6 +118,8 @@ TpChannelChatState EmpathyContact * empathy_tp_chat_get_self_contact (EmpathyTpChat *self); +gboolean empathy_tp_chat_is_sms_channel (EmpathyTpChat *chat); + G_END_DECLS #endif /* __EMPATHY_TP_CHAT_H__ */ diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index f8220ac31..8173f781d 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -29,6 +29,7 @@ #include "config.h" #include <string.h> +#include <math.h> #include <time.h> #include <sys/types.h> @@ -957,3 +958,77 @@ empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert) return NULL; } + +gchar * +empathy_format_currency (gint amount, + guint scale, + const gchar *currency) +{ +#define MINUS "\342\210\222" +#define EURO "\342\202\254" +#define YEN "\302\245" +#define POUND "\302\243" + + /* localised representations of currency */ + /* FIXME: check these, especially negatives and decimals */ + static const struct { + const char *currency; + const char *positive; + const char *negative; + const char *decimal; + } currencies[] = { + /* sym positive negative decimal */ + { "EUR", EURO "%s", MINUS EURO "%s", "." }, + { "USD", "$%s", MINUS "$%s", "." }, + { "JPY", YEN "%s" MINUS YEN "%s", "." }, + { "GBP", POUND "%s", MINUS POUND "%s", "." }, + { "PLN", "%s zl", MINUS "%s zl", "." }, + { "BRL", "R$%s", MINUS "R$%s", "." }, + { "SEK", "%s kr", MINUS "%s kr", "." }, + { "DKK", "kr %s", "kr " MINUS "%s", "." }, + { "HKD", "$%s", MINUS "$%s", "." }, + { "CHF", "%s Fr.", MINUS "%s Fr.", "." }, + { "NOK", "kr %s", "kr" MINUS "%s", "," }, + { "CAD", "$%s", MINUS "$%s", "." }, + { "TWD", "$%s", MINUS "$%s", "." }, + { "AUD", "$%s", MINUS "$%s", "." }, + }; + + const char *positive = "%s"; + const char *negative = MINUS "%s"; + const char *decimal = "."; + char *fmt_amount, *money; + guint i; + + /* get the localised currency format */ + for (i = 0; i < G_N_ELEMENTS (currencies); i++) { + if (!tp_strdiff (currency, currencies[i].currency)) { + positive = currencies[i].positive; + negative = currencies[i].negative; + decimal = currencies[i].decimal; + break; + } + } + + /* format the amount using the scale */ + if (scale == 0) { + /* no decimal point required */ + fmt_amount = g_strdup_printf ("%d", amount); + } else { + /* don't use floating point arithmatic, it's noisy; + * we take the absolute values, because we want the minus + * sign to appear before the $ */ + int divisor = pow (10, scale); + int dollars = abs (amount / divisor); + int cents = abs (amount % divisor); + + fmt_amount = g_strdup_printf ("%d%s%0*d", + dollars, decimal, scale, cents); + } + + money = g_strdup_printf (amount < 0 ? negative : positive, fmt_amount); + g_free (fmt_amount); + + return money; +} + diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h index de879021e..ac44535b8 100644 --- a/libempathy/empathy-utils.h +++ b/libempathy/empathy-utils.h @@ -117,6 +117,8 @@ gboolean empathy_folks_persona_is_interesting (FolksPersona *persona); gchar * empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert); +gchar *empathy_format_currency (gint amount, guint scale, const gchar *currency); + /* Copied from wocky/wocky-utils.h */ #define empathy_implement_finish_void(source, tag) \ diff --git a/po/POTFILES.in b/po/POTFILES.in index 12bec0898..7a78f2558 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -116,3 +116,4 @@ src/empathy-debugger.c src/empathy-chat.c src/empathy-notifications-approver.c src/empathy-call-observer.c +libempathy-gtk/empathy-search-bar.c @@ -1,23 +1,23 @@ # translation of empathy.master.po to Español # Copyright (C) 2003 Free Software Foundation # This file is distributed under the same license as the Gossip package. -# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010. # Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011. +# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010, 2011. # msgid "" msgstr "" "Project-Id-Version: empathy.master\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=empathy&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2011-04-26 12:21+0000\n" -"PO-Revision-Date: 2011-04-27 12:36+0200\n" -"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" +"product=empathy&keywords=I18N+L10N&component=General\n" +"POT-Creation-Date: 2011-05-05 17:44+0000\n" +"PO-Revision-Date: 2011-05-08 15:25+0200\n" +"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n" "Language-Team: Español <gnome-es-list@gnome.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" #: ../data/empathy.desktop.in.in.h:1 msgid "Chat on Google Talk, Facebook, MSN and many other chat services" @@ -72,7 +72,7 @@ msgstr "Criterio de ordenación de la lista de contactos" #: ../data/org.gnome.Empathy.gschema.xml.in.h:8 msgid "Default directory to select an avatar image from" -msgstr "Directorio predeterminado para seleccionar un avatar" +msgstr "Carpeta predeterminada para seleccionar un avatar" #: ../data/org.gnome.Empathy.gschema.xml.in.h:9 msgid "Disable popup notifications when away" @@ -213,122 +213,126 @@ msgid "Pop up notifications when a contact logs out" msgstr "Mostrar notificaciones emergentes cuando un contacto se desconecta" #: ../data/org.gnome.Empathy.gschema.xml.in.h:42 +msgid "Show Balance in roster" +msgstr "Mostrar crédito en la lista de contactos" + +#: ../data/org.gnome.Empathy.gschema.xml.in.h:43 msgid "Show avatars" msgstr "Mostrar avatares" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:43 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:44 msgid "Show contact list in rooms" msgstr "Mostrar lista de contactos en salas" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:44 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:45 msgid "Show hint about closing the main window" msgstr "Mostrar consejo sobre cómo cerrar la ventana principal" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:45 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:46 msgid "Show offline contacts" msgstr "Mostrar contactos no conectados" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:46 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:47 msgid "Show protocols" msgstr "Mostrar protocolos" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:47 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:48 msgid "Spell checking languages" msgstr "Idiomas para revisión ortográfica" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:48 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:49 msgid "The default folder to save file transfers in." msgstr "La carpeta predeterminada donde guardar los archivos transferidos." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:49 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:50 msgid "The last directory that an avatar image was chosen from." -msgstr "Último directorio del que fue elegido un avatar." +msgstr "Última carpeta de la que se eligió un avatar." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:50 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:51 msgid "The position for the chat window side pane" msgstr "La posición para el panel lateral de la ventana de charla" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:51 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:52 msgid "The stored position (in pixels) of the chat window side pane." msgstr "" "La posición almacenada (en píxeles) del panel lateral de la ventana de " "charla." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:52 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:53 msgid "The theme that is used to display the conversation in chat windows." msgstr "" "El tema que se usará para mostrar la conversación en las ventanas de chat." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:53 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:54 msgid "Use graphical smileys" msgstr "Usar emoticonos gráficos" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:54 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:55 msgid "Use notification sounds" msgstr "Usar sonidos de notificación" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:55 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:56 msgid "Use theme for chat rooms" msgstr "Usar tema para salas de chat" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:56 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:57 msgid "Whether Empathy can publish the user's location to their contacts." msgstr "" "Indica si Empathy puede publicar la ubicación del usuario a sus contactos." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:57 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:58 msgid "Whether Empathy can use the GPS to guess the location." msgstr "Indica si Empathy puede usar el GPS para deducir la ubicación." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:58 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:59 msgid "Whether Empathy can use the cellular network to guess the location." msgstr "" "Indica si Empathy puede usar la red telefónica móvil para deducir la " "ubicación." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:59 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:60 msgid "Whether Empathy can use the network to guess the location." msgstr "Indica si Empathy puede usar la red para deducir la ubicación." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:60 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:61 msgid "Whether Empathy has migrated butterfly logs." msgstr "Indica si Empathy ha migrado los registros de butterfly." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:61 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:62 msgid "Whether Empathy should automatically log into your accounts on startup." msgstr "" "Indica si Empathy debe iniciar sesión en sus cuentas automáticamente al " "inicio." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:62 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:63 msgid "" "Whether Empathy should go into away mode automatically if the user is idle." msgstr "" "Indica si Empathy debe entrar en modo de ausencia automáticamente si el " "usuario está inactivo." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:63 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:64 msgid "" "Whether Empathy should reduce the location's accuracy for privacy reasons." msgstr "" "Indica si Empathy debería reducir la precisión de la ubicación por motivos " "de privacidad." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:64 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:65 msgid "" "Whether Empathy should use the avatar of the contact as the chat window icon." msgstr "" "Indica si Empathy debería usar el avatar del contacto como el icono de la " "ventana de chat." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:65 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:66 msgid "" "Whether WebKit developer tools, such as the Web Inspector, should be enabled." msgstr "" "Indica si las herramientas de desarrollo de WebKit, tales como el Inspector " "web, den activarse." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:66 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:67 msgid "" "Whether connectivity managers should be used to automatically disconnect/" "reconnect." @@ -336,78 +340,78 @@ msgstr "" "Indica si se debe usan usar gestores de conectividad para desconectarse/" "reconectarse automáticamente." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:67 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:68 msgid "" "Whether to check words typed against the languages you want to check with." msgstr "" "Indica si se deben revisar las palabras tecleadas con respecto a los idiomas " "con los que quiere comprobarlo." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:68 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:69 msgid "Whether to convert smileys into graphical images in conversations." msgstr "" "Indica si se deben convertir los emoticonos en imágenes gráficas en las " "conversaciones." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:69 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:70 msgid "Whether to play a sound to notify of contacts logging into the network." msgstr "" "Indica si se debe reproducir un sonido para notificar los inicios de sesión " "de los contactos en la red." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:70 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:71 msgid "" "Whether to play a sound to notify of contacts logging out of the network." msgstr "" "Indica si se debe reproducir un sonido para notificar las finalizaciones de " "sesión de los contactos en la red." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:71 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:72 msgid "Whether to play a sound to notify of events." msgstr "Indica si se debe reproducir un sonido para notificar eventos." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:72 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:73 msgid "Whether to play a sound to notify of incoming messages." msgstr "" "Indica si se debe reproducir un sonido para notificar mensajes entrantes." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:73 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:74 msgid "Whether to play a sound to notify of new conversations." msgstr "" "Indica si se debe reproducir un sonido para notificar conversaciones nuevas." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:74 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:75 msgid "Whether to play a sound to notify of outgoing messages." msgstr "" "Indica si se debe reproducir un sonido para notificar mensajes salientes." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:75 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:76 msgid "Whether to play a sound when logging into a network." msgstr "Indica si se debe reproducir un sonido al iniciar sesión en una red." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:76 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:77 msgid "Whether to play a sound when logging out of a network." msgstr "Indica si se debe reproducir un sonido al finalizar sesión en una red." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:77 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:78 msgid "Whether to play sound notifications when away or busy." msgstr "" "Indica si se deben reproducir sonidos de notificaciones cuando se esté " "ausente u ocupado." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:78 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:79 msgid "Whether to show a popup notification when a contact goes offline." msgstr "" "Indica si se deben mostrar las notificaciones emergentes cuando un contacto " "se desconecta." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:79 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:80 msgid "Whether to show a popup notification when a contact goes online." msgstr "" "Indica si se deben mostrar las notificaciones emergentes cuando un contacto " "se conecta." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:80 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:81 msgid "" "Whether to show a popup notification when receiving a new message even if " "the chat is already opened, but not focused." @@ -415,46 +419,50 @@ msgstr "" "Indica si de deben mostrar notificaciones emergentes al recibir un mensaje " "nuevo incluso si la ventana de chat ya está abierta pero no tiene el foco." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:81 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:82 msgid "Whether to show a popup notification when receiving a new message." msgstr "" "Indica si se deben mostrar notificaciones emergentes al recibir un mensaje " "nuevo." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:82 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:83 +msgid "Whether to show account balances for in the contact roster." +msgstr "Indica si se debe mostrar el crédito en la lista de contactos." + +#: ../data/org.gnome.Empathy.gschema.xml.in.h:84 msgid "" "Whether to show avatars for contacts in the contact list and chat windows." msgstr "" "Indica si se deben mostrar los avatares para los contactos en la lista de " "contactos y ventanas de chat." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:83 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:85 msgid "Whether to show contacts that are offline in the contact list." msgstr "" "Indica si se debe mostrar los contactos que están desconectados en la lista " "de contactos." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:84 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:86 msgid "Whether to show popup notifications when away or busy." msgstr "" "Indica si se deben mostrar las notificaciones emergentes cuando se esté " "ausente u ocupado." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:85 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:87 msgid "Whether to show protocols for contacts in the contact list." msgstr "" "Indica si se deben mostrar los protocolos para los contactos en la lista de " "contactos." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:86 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:88 msgid "Whether to show the contact list in chat rooms." msgstr "Indica si se debe mostrar la lista de contactos en salas de chat." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:87 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:89 msgid "Whether to show the contact list in compact mode." msgstr "Indica si se debe mostrar la lista de contactos en modo compacto." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:88 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:90 msgid "" "Whether to show the message dialog about closing the main window with the " "'x' button in the title bar." @@ -462,11 +470,11 @@ msgstr "" "Indica si se debe mostrar un mensaje de diálogo sobre cómo cerrar la ventana " "principal con el botón «x» en la barra de título." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:89 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:91 msgid "Whether to use the theme for chat rooms." msgstr "Indica si se debe usar el tema para salas de chat." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:90 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:92 msgid "" "Which criterion to use when sorting the contact list. Default is to sort by " "the contact's name with the value \"name\". A value of \"state\" will sort " @@ -482,7 +490,7 @@ msgstr "Gestionar las cuentas de mensajería y Voz IP" #. Tweak the dialog #: ../data/empathy-accounts.desktop.in.in.h:2 -#: ../src/empathy-accounts-dialog.c:2340 +#: ../src/empathy-accounts-dialog.c:2320 msgid "Messaging and VoIP Accounts" msgstr "Cuentas de mensajería y Voz IP" @@ -530,144 +538,143 @@ msgstr "Error la intentar transferir el archivo" msgid "The other participant is unable to transfer the file" msgstr "El otro participante no puede transferir el archivo" -#: ../libempathy/empathy-tp-file.c:405 ../libempathy/empathy-utils.c:383 +#: ../libempathy/empathy-tp-file.c:405 ../libempathy/empathy-utils.c:384 msgid "Unknown reason" msgstr "Razón desconocida" -#: ../libempathy/empathy-utils.c:304 +#: ../libempathy/empathy-utils.c:305 msgid "Available" msgstr "Disponible" -#: ../libempathy/empathy-utils.c:306 +#: ../libempathy/empathy-utils.c:307 msgid "Busy" msgstr "Ocupado" -#: ../libempathy/empathy-utils.c:309 +#: ../libempathy/empathy-utils.c:310 msgid "Away" msgstr "Ausente" -#: ../libempathy/empathy-utils.c:311 +#: ../libempathy/empathy-utils.c:312 msgid "Invisible" msgstr "Invisible" -#: ../libempathy/empathy-utils.c:313 +#: ../libempathy/empathy-utils.c:314 msgid "Offline" msgstr "Desconectado" #. translators: presence type is unknown -#: ../libempathy/empathy-utils.c:316 -#| msgid "Unknown" +#: ../libempathy/empathy-utils.c:317 msgctxt "presence" msgid "Unknown" msgstr "Desconocido" -#: ../libempathy/empathy-utils.c:355 +#: ../libempathy/empathy-utils.c:356 msgid "No reason specified" msgstr "No se especificó ninguna razón" -#: ../libempathy/empathy-utils.c:357 ../libempathy/empathy-utils.c:413 +#: ../libempathy/empathy-utils.c:358 ../libempathy/empathy-utils.c:414 msgid "Status is set to offline" msgstr "El estado se ha establecido a desconectado" -#: ../libempathy/empathy-utils.c:359 ../libempathy/empathy-utils.c:393 +#: ../libempathy/empathy-utils.c:360 ../libempathy/empathy-utils.c:394 msgid "Network error" msgstr "Error de red" -#: ../libempathy/empathy-utils.c:361 ../libempathy/empathy-utils.c:395 +#: ../libempathy/empathy-utils.c:362 ../libempathy/empathy-utils.c:396 msgid "Authentication failed" msgstr "Falló la autenticación" -#: ../libempathy/empathy-utils.c:363 ../libempathy/empathy-utils.c:397 +#: ../libempathy/empathy-utils.c:364 ../libempathy/empathy-utils.c:398 msgid "Encryption error" msgstr "Error de cifrado" -#: ../libempathy/empathy-utils.c:365 +#: ../libempathy/empathy-utils.c:366 msgid "Name in use" msgstr "Nombre en uso" -#: ../libempathy/empathy-utils.c:367 ../libempathy/empathy-utils.c:399 +#: ../libempathy/empathy-utils.c:368 ../libempathy/empathy-utils.c:400 msgid "Certificate not provided" msgstr "No se proporcionó el certificado" -#: ../libempathy/empathy-utils.c:369 ../libempathy/empathy-utils.c:401 +#: ../libempathy/empathy-utils.c:370 ../libempathy/empathy-utils.c:402 msgid "Certificate untrusted" msgstr "Certificado sin confianza" -#: ../libempathy/empathy-utils.c:371 ../libempathy/empathy-utils.c:403 +#: ../libempathy/empathy-utils.c:372 ../libempathy/empathy-utils.c:404 msgid "Certificate expired" msgstr "El certificado ha expirado" -#: ../libempathy/empathy-utils.c:373 ../libempathy/empathy-utils.c:405 +#: ../libempathy/empathy-utils.c:374 ../libempathy/empathy-utils.c:406 msgid "Certificate not activated" msgstr "El certificado no está activado" -#: ../libempathy/empathy-utils.c:375 ../libempathy/empathy-utils.c:407 +#: ../libempathy/empathy-utils.c:376 ../libempathy/empathy-utils.c:408 msgid "Certificate hostname mismatch" msgstr "El nombre del equipo del certificado no coincide" -#: ../libempathy/empathy-utils.c:377 ../libempathy/empathy-utils.c:409 +#: ../libempathy/empathy-utils.c:378 ../libempathy/empathy-utils.c:410 msgid "Certificate fingerprint mismatch" msgstr "La huella del certificado no coincide" -#: ../libempathy/empathy-utils.c:379 ../libempathy/empathy-utils.c:411 +#: ../libempathy/empathy-utils.c:380 ../libempathy/empathy-utils.c:412 msgid "Certificate self-signed" msgstr "Certificado firmado consigo mismo" -#: ../libempathy/empathy-utils.c:381 +#: ../libempathy/empathy-utils.c:382 msgid "Certificate error" msgstr "Error del certificado" -#: ../libempathy/empathy-utils.c:415 +#: ../libempathy/empathy-utils.c:416 msgid "Encryption is not available" msgstr "El cifrado no está disponible" -#: ../libempathy/empathy-utils.c:417 +#: ../libempathy/empathy-utils.c:418 msgid "Certificate is invalid" msgstr "El certificado no es válido" -#: ../libempathy/empathy-utils.c:419 +#: ../libempathy/empathy-utils.c:420 msgid "Connection has been refused" msgstr "Se rechazó la conexión" -#: ../libempathy/empathy-utils.c:421 +#: ../libempathy/empathy-utils.c:422 msgid "Connection can't be established" msgstr "No se pudo establecer la conexión" -#: ../libempathy/empathy-utils.c:423 +#: ../libempathy/empathy-utils.c:424 msgid "Connection has been lost" msgstr "Se perdió la conexión" -#: ../libempathy/empathy-utils.c:425 +#: ../libempathy/empathy-utils.c:426 msgid "This resource is already connected to the server" msgstr "El recurso ya está conectado al servidor" -#: ../libempathy/empathy-utils.c:427 +#: ../libempathy/empathy-utils.c:428 msgid "" "Connection has been replaced by a new connection using the same resource" msgstr "" "Se ha reemplazado la conexión por una conexión nueva usando el mismo recurso" -#: ../libempathy/empathy-utils.c:430 +#: ../libempathy/empathy-utils.c:431 msgid "The account already exists on the server" msgstr "La cuenta ya existe en el servidor" -#: ../libempathy/empathy-utils.c:432 +#: ../libempathy/empathy-utils.c:433 msgid "Server is currently too busy to handle the connection" msgstr "" "Actualmente el servidor está demasiado ocupado para gestionar la conexión" -#: ../libempathy/empathy-utils.c:434 +#: ../libempathy/empathy-utils.c:435 msgid "Certificate has been revoked" msgstr "Se revocó el certificado" -#: ../libempathy/empathy-utils.c:436 +#: ../libempathy/empathy-utils.c:437 msgid "" "Certificate uses an insecure cipher algorithm or is cryptographically weak" msgstr "" "El certificado usa un algoritmo de cifrado inseguro o es criptográficamente " "débil" -#: ../libempathy/empathy-utils.c:439 +#: ../libempathy/empathy-utils.c:440 msgid "" "The length of the server certificate, or the depth of the server certificate " "chain, exceed the limits imposed by the cryptography library" @@ -676,20 +683,20 @@ msgstr "" "servidor de certificados exceden los límites impuestos por la biblioteca " "cripotográfica" -#: ../libempathy/empathy-utils.c:602 +#: ../libempathy/empathy-utils.c:603 #: ../libempathy-gtk/empathy-contact-list-store.h:73 msgid "People Nearby" msgstr "Gente cerca" -#: ../libempathy/empathy-utils.c:607 +#: ../libempathy/empathy-utils.c:608 msgid "Yahoo! Japan" msgstr "Yahoo Japón" -#: ../libempathy/empathy-utils.c:636 +#: ../libempathy/empathy-utils.c:637 msgid "Google Talk" msgstr "Google Talk" -#: ../libempathy/empathy-utils.c:637 +#: ../libempathy/empathy-utils.c:638 msgid "Facebook Chat" msgstr "Chat de Facebook" @@ -812,19 +819,19 @@ msgstr "Ca_ncelar" #. * like: "MyUserName on freenode". #. * You should reverse the order of these arguments if the #. * server should come before the login id in your locale. -#: ../libempathy-gtk/empathy-account-widget.c:2413 +#: ../libempathy-gtk/empathy-account-widget.c:2410 #, c-format msgid "%1$s on %2$s" msgstr "%1$s en %2$s" #. To translators: The parameter is the protocol name. The resulting #. * string will be something like: "Jabber Account" -#: ../libempathy-gtk/empathy-account-widget.c:2439 +#: ../libempathy-gtk/empathy-account-widget.c:2436 #, c-format msgid "%s Account" msgstr "Cuenta %s" -#: ../libempathy-gtk/empathy-account-widget.c:2443 +#: ../libempathy-gtk/empathy-account-widget.c:2440 msgid "New account" msgstr "Cuenta nueva" @@ -1252,35 +1259,35 @@ msgstr "Todos los archivos" msgid "Click to enlarge" msgstr "Pulse para agrandar" -#: ../libempathy-gtk/empathy-chat.c:652 +#: ../libempathy-gtk/empathy-chat.c:668 msgid "Failed to open private chat" msgstr "Falló al abrir el chat privado" -#: ../libempathy-gtk/empathy-chat.c:717 +#: ../libempathy-gtk/empathy-chat.c:733 msgid "Topic not supported on this conversation" msgstr "El tema no está soportado en esta conversación" -#: ../libempathy-gtk/empathy-chat.c:723 +#: ../libempathy-gtk/empathy-chat.c:739 msgid "You are not allowed to change the topic" msgstr "No le está permitido cambiar el tema" -#: ../libempathy-gtk/empathy-chat.c:932 +#: ../libempathy-gtk/empathy-chat.c:948 msgid "/clear: clear all messages from the current conversation" msgstr "/clear: limpiar todos los mensajes de la conversación actual" -#: ../libempathy-gtk/empathy-chat.c:935 +#: ../libempathy-gtk/empathy-chat.c:951 msgid "/topic <topic>: set the topic of the current conversation" msgstr "/topic <tema>: establecer el tema para la conversación actual" -#: ../libempathy-gtk/empathy-chat.c:938 +#: ../libempathy-gtk/empathy-chat.c:954 msgid "/join <chat room ID>: join a new chat room" msgstr "/join <id de sala de chat>: unirse a una sala de chat nueva" -#: ../libempathy-gtk/empathy-chat.c:941 +#: ../libempathy-gtk/empathy-chat.c:957 msgid "/j <chat room ID>: join a new chat room" msgstr "/j <id de sala de chat>: unirse a una sala de chat nueva" -#: ../libempathy-gtk/empathy-chat.c:946 +#: ../libempathy-gtk/empathy-chat.c:962 msgid "" "/part [<chat room ID>] [<reason>]: leave the chat room, by default the " "current one" @@ -1288,23 +1295,23 @@ msgstr "" "/part [<ID de la sala de chat>] [<razón>]: abandonar la sala de chat, la " "actual de manera predeterminada" -#: ../libempathy-gtk/empathy-chat.c:951 +#: ../libempathy-gtk/empathy-chat.c:967 msgid "/query <contact ID> [<message>]: open a private chat" msgstr "/query <id del contacto> [<mensaje>]: abrir un chat privado" -#: ../libempathy-gtk/empathy-chat.c:954 +#: ../libempathy-gtk/empathy-chat.c:970 msgid "/msg <contact ID> <message>: open a private chat" msgstr "/msg <id del contacto> <mensaje>: abrir un chat privado" -#: ../libempathy-gtk/empathy-chat.c:957 +#: ../libempathy-gtk/empathy-chat.c:973 msgid "/nick <nickname>: change your nickname on the current server" msgstr "/nick <apodo>: cambiar su apodo en el servidor actual" -#: ../libempathy-gtk/empathy-chat.c:960 +#: ../libempathy-gtk/empathy-chat.c:976 msgid "/me <message>: send an ACTION message to the current conversation" msgstr "/me <mensaje>: enviar un mensaje de ACCIÓN a la conversación actual" -#: ../libempathy-gtk/empathy-chat.c:963 +#: ../libempathy-gtk/empathy-chat.c:979 msgid "" "/say <message>: send <message> to the current conversation. This is used to " "send a message starting with a '/'. For example: \"/say /join is used to " @@ -1314,7 +1321,7 @@ msgstr "" "para enviar un mensaje comenzando por una «/». Por ejemplo: «/say /join se usa " "para unirse a una sala de chat nueva»" -#: ../libempathy-gtk/empathy-chat.c:968 +#: ../libempathy-gtk/empathy-chat.c:984 msgid "" "/help [<command>]: show all supported commands. If <command> is defined, " "show its usage." @@ -1322,104 +1329,111 @@ msgstr "" "/help [<comando>]: mostrar todos los comandos soportados. Si <comando> está " "definido, muestra su uso." -#: ../libempathy-gtk/empathy-chat.c:978 +#: ../libempathy-gtk/empathy-chat.c:994 #, c-format msgid "Usage: %s" msgstr "Uso: %s" -#: ../libempathy-gtk/empathy-chat.c:1017 +#: ../libempathy-gtk/empathy-chat.c:1033 msgid "Unknown command" msgstr "Comando desconocido" -#: ../libempathy-gtk/empathy-chat.c:1143 +#: ../libempathy-gtk/empathy-chat.c:1159 msgid "Unknown command; see /help for the available commands" msgstr "Comando desconocido; consulte /help para ver los comandos disponibles" -#: ../libempathy-gtk/empathy-chat.c:1281 +#: ../libempathy-gtk/empathy-chat.c:1297 +msgid "insufficient balance to send message" +msgstr "no tiene balance suficiente para enviar el mensaje" + +#: ../libempathy-gtk/empathy-chat.c:1299 +msgid "not capable" +msgstr "no es posible" + +#: ../libempathy-gtk/empathy-chat.c:1306 msgid "offline" msgstr "desconectado" -#: ../libempathy-gtk/empathy-chat.c:1284 +#: ../libempathy-gtk/empathy-chat.c:1309 msgid "invalid contact" msgstr "contacto no válido" -#: ../libempathy-gtk/empathy-chat.c:1287 +#: ../libempathy-gtk/empathy-chat.c:1312 msgid "permission denied" msgstr "permiso denegado" -#: ../libempathy-gtk/empathy-chat.c:1290 +#: ../libempathy-gtk/empathy-chat.c:1315 msgid "too long message" msgstr "mensaje demasiado largo" -#: ../libempathy-gtk/empathy-chat.c:1293 +#: ../libempathy-gtk/empathy-chat.c:1318 msgid "not implemented" msgstr "no implementado" -#: ../libempathy-gtk/empathy-chat.c:1297 +#: ../libempathy-gtk/empathy-chat.c:1322 msgid "unknown" msgstr "desconocido" -#: ../libempathy-gtk/empathy-chat.c:1302 +#: ../libempathy-gtk/empathy-chat.c:1328 #, c-format msgid "Error sending message '%s': %s" msgstr "Error al enviar el mensaje «%s»: %s" -#: ../libempathy-gtk/empathy-chat.c:1306 +#: ../libempathy-gtk/empathy-chat.c:1332 #, c-format -#| msgid "Error sending message '%s': %s" msgid "Error sending message: %s" msgstr "Error al enviar el mensaje: %s" -#: ../libempathy-gtk/empathy-chat.c:1367 ../src/empathy-chat-window.c:717 +#: ../libempathy-gtk/empathy-chat.c:1393 ../src/empathy-chat-window.c:760 msgid "Topic:" msgstr "Tema:" -#: ../libempathy-gtk/empathy-chat.c:1379 +#: ../libempathy-gtk/empathy-chat.c:1405 #, c-format msgid "Topic set to: %s" msgstr "El tema se ha establecido a: %s" -#: ../libempathy-gtk/empathy-chat.c:1381 +#: ../libempathy-gtk/empathy-chat.c:1407 msgid "No topic defined" msgstr "No se ha definido el tema" -#: ../libempathy-gtk/empathy-chat.c:1880 +#: ../libempathy-gtk/empathy-chat.c:1914 msgid "(No Suggestions)" msgstr "(Sin sugerencias)" #. translators: %s is the selected word -#: ../libempathy-gtk/empathy-chat.c:1948 +#: ../libempathy-gtk/empathy-chat.c:1982 #, c-format msgid "Add '%s' to Dictionary" msgstr "Añadir «%s» al diccionario" #. translators: first %s is the selected word, #. * second %s is the language name of the target dictionary -#: ../libempathy-gtk/empathy-chat.c:1985 +#: ../libempathy-gtk/empathy-chat.c:2019 #, c-format msgid "Add '%s' to %s Dictionary" msgstr "Añadir «%s» al diccionario de «%s»" -#: ../libempathy-gtk/empathy-chat.c:2042 +#: ../libempathy-gtk/empathy-chat.c:2076 msgid "Insert Smiley" msgstr "Insertar emoticono" #. send button -#: ../libempathy-gtk/empathy-chat.c:2060 +#: ../libempathy-gtk/empathy-chat.c:2094 #: ../libempathy-gtk/empathy-ui-utils.c:1808 msgid "_Send" msgstr "E_nviar" #. Spelling suggestions -#: ../libempathy-gtk/empathy-chat.c:2095 +#: ../libempathy-gtk/empathy-chat.c:2129 msgid "_Spelling Suggestions" msgstr "_Sugerencias ortográficas" -#: ../libempathy-gtk/empathy-chat.c:2184 +#: ../libempathy-gtk/empathy-chat.c:2218 msgid "Failed to retrieve recent logs" msgstr "Falló al recibir los registros recientes" -#: ../libempathy-gtk/empathy-chat.c:2295 +#: ../libempathy-gtk/empathy-chat.c:2329 #, c-format msgid "%s has disconnected" msgstr "%s se ha desconectado" @@ -1427,12 +1441,12 @@ msgstr "%s se ha desconectado" #. translators: reverse the order of these arguments #. * if the kicked should come before the kicker in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2302 +#: ../libempathy-gtk/empathy-chat.c:2336 #, c-format msgid "%1$s was kicked by %2$s" msgstr "%2$s expulsó a %1$s" -#: ../libempathy-gtk/empathy-chat.c:2305 +#: ../libempathy-gtk/empathy-chat.c:2339 #, c-format msgid "%s was kicked" msgstr "%s fue expulsado" @@ -1440,17 +1454,17 @@ msgstr "%s fue expulsado" #. translators: reverse the order of these arguments #. * if the banned should come before the banner in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2313 +#: ../libempathy-gtk/empathy-chat.c:2347 #, c-format msgid "%1$s was banned by %2$s" msgstr "%2$s vetó a %1$s" -#: ../libempathy-gtk/empathy-chat.c:2316 +#: ../libempathy-gtk/empathy-chat.c:2350 #, c-format msgid "%s was banned" msgstr "%s fue vetado" -#: ../libempathy-gtk/empathy-chat.c:2320 +#: ../libempathy-gtk/empathy-chat.c:2354 #, c-format msgid "%s has left the room" msgstr "%s ha dejado la sala" @@ -1460,93 +1474,100 @@ msgstr "%s ha dejado la sala" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:2329 +#: ../libempathy-gtk/empathy-chat.c:2363 #, c-format msgid " (%s)" msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:2354 +#: ../libempathy-gtk/empathy-chat.c:2388 #, c-format msgid "%s has joined the room" msgstr "%s ha entrado en la sala" -#: ../libempathy-gtk/empathy-chat.c:2379 +#: ../libempathy-gtk/empathy-chat.c:2413 #, c-format msgid "%s is now known as %s" msgstr "Ahora %s se llama %s" -#: ../libempathy-gtk/empathy-chat.c:2518 +#: ../libempathy-gtk/empathy-chat.c:2552 #: ../src/empathy-streamed-media-window.c:1957 -#: ../src/empathy-event-manager.c:1126 +#: ../src/empathy-event-manager.c:1116 msgid "Disconnected" msgstr "Desconectado" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3148 +#: ../libempathy-gtk/empathy-chat.c:3200 msgid "Would you like to store this password?" msgstr "¿Quiere guardar esta contraseña?" -#: ../libempathy-gtk/empathy-chat.c:3154 +#: ../libempathy-gtk/empathy-chat.c:3206 msgid "Remember" msgstr "Recordar" -#: ../libempathy-gtk/empathy-chat.c:3164 +#: ../libempathy-gtk/empathy-chat.c:3216 msgid "Not now" msgstr "Ahora no" -#: ../libempathy-gtk/empathy-chat.c:3208 +#: ../libempathy-gtk/empathy-chat.c:3260 msgid "Retry" msgstr "Volver a intentarlo" -#: ../libempathy-gtk/empathy-chat.c:3212 +#: ../libempathy-gtk/empathy-chat.c:3264 msgid "Wrong password; please try again:" msgstr "Contraseña incorrecta; inténtelo de nuevo:" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3329 +#: ../libempathy-gtk/empathy-chat.c:3381 msgid "This room is protected by a password:" msgstr "Esta sala está protegida por contraseña:" -#: ../libempathy-gtk/empathy-chat.c:3356 +#: ../libempathy-gtk/empathy-chat.c:3408 msgid "Join" msgstr "Unirse" -#: ../libempathy-gtk/empathy-chat.c:3526 ../src/empathy-event-manager.c:1147 +#: ../libempathy-gtk/empathy-chat.c:3600 ../src/empathy-event-manager.c:1137 msgid "Connected" msgstr "Conectado" -#: ../libempathy-gtk/empathy-chat.c:3579 +#: ../libempathy-gtk/empathy-chat.c:3655 #: ../libempathy-gtk/empathy-log-window.c:650 msgid "Conversation" msgstr "Conversación" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:422 +#. Translators: this string is a something like +#. * "Escher Cat (SMS)" +#: ../libempathy-gtk/empathy-chat.c:3660 +#, c-format +msgid "%s (SMS)" +msgstr "%s (SMS)" + +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:423 msgid "Unknown or invalid identifier" msgstr "Identificador desconocido o no válido" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:424 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:425 msgid "Contact blocking temporarily unavailable" msgstr "Bloqueo de contactos no disponible temporalmente" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:426 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:427 msgid "Contact blocking unavailable" msgstr "Bloqueo de contactos no disponible" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:428 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:429 msgid "Permission Denied" msgstr "Permiso denegado" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:432 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:433 msgid "Could not block contact" msgstr "No se pudo bloquear el contacto" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:701 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:702 msgid "Edit Blocked Contacts" msgstr "Editar contactos bloqueados" #. Account and Identifier #: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1 -#: ../libempathy-gtk/empathy-contact-search-dialog.c:520 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:521 #: ../libempathy-gtk/empathy-contact-widget.ui.h:2 #: ../libempathy-gtk/empathy-individual-widget.c:1479 #: ../libempathy-gtk/empathy-contact-selector-dialog.ui.h:1 @@ -1557,13 +1578,13 @@ msgstr "Cuenta:" #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:320 -#: ../libempathy-gtk/empathy-theme-adium.c:794 +#: ../libempathy-gtk/empathy-theme-adium.c:996 msgid "_Copy Link Address" msgstr "_Copiar la dirección del enlace" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:327 -#: ../libempathy-gtk/empathy-theme-adium.c:801 +#: ../libempathy-gtk/empathy-theme-adium.c:1003 msgid "_Open Link" msgstr "_Abrir enlace" @@ -1633,38 +1654,38 @@ msgid "Favorite People" msgstr "Gente favorita" #: ../libempathy-gtk/empathy-contact-list-view.c:1987 -#: ../libempathy-gtk/empathy-individual-view.c:2343 +#: ../libempathy-gtk/empathy-individual-view.c:2386 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "¿Realmente quiere quitar el grupo «%s»?" #: ../libempathy-gtk/empathy-contact-list-view.c:1989 -#: ../libempathy-gtk/empathy-individual-view.c:2346 +#: ../libempathy-gtk/empathy-individual-view.c:2389 msgid "Removing group" msgstr "Quitando grupo" #. Remove #: ../libempathy-gtk/empathy-contact-list-view.c:2038 #: ../libempathy-gtk/empathy-contact-list-view.c:2115 -#: ../libempathy-gtk/empathy-individual-view.c:2401 -#: ../libempathy-gtk/empathy-individual-view.c:2594 +#: ../libempathy-gtk/empathy-individual-view.c:2444 +#: ../libempathy-gtk/empathy-individual-view.c:2637 #: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Remove" msgstr "_Quitar" #: ../libempathy-gtk/empathy-contact-list-view.c:2068 -#: ../libempathy-gtk/empathy-individual-view.c:2465 +#: ../libempathy-gtk/empathy-individual-view.c:2508 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "¿Realmente quiere quitar el contacto «%s»?" #: ../libempathy-gtk/empathy-contact-list-view.c:2070 -#: ../libempathy-gtk/empathy-individual-view.c:2486 +#: ../libempathy-gtk/empathy-individual-view.c:2529 msgid "Removing contact" msgstr "Quitando el contacto" #: ../libempathy-gtk/empathy-contact-menu.c:219 -#: ../src/empathy-main-window.ui.h:13 +#: ../src/empathy-main-window.ui.h:14 msgid "_Add Contact…" msgstr "_Añadir contacto…" @@ -1673,48 +1694,48 @@ msgid "_Block Contact" msgstr "_Bloquear contacto" #: ../libempathy-gtk/empathy-contact-menu.c:328 -#: ../libempathy-gtk/empathy-individual-menu.c:517 -#: ../src/empathy-main-window.ui.h:15 +#: ../libempathy-gtk/empathy-individual-menu.c:536 +#: ../src/empathy-main-window.ui.h:16 msgid "_Chat" msgstr "_Chat" #: ../libempathy-gtk/empathy-contact-menu.c:359 -#: ../libempathy-gtk/empathy-individual-menu.c:560 +#: ../libempathy-gtk/empathy-individual-menu.c:625 msgctxt "menu item" msgid "_Audio Call" msgstr "Llamada de vo_z" #: ../libempathy-gtk/empathy-contact-menu.c:390 -#: ../libempathy-gtk/empathy-individual-menu.c:602 +#: ../libempathy-gtk/empathy-individual-menu.c:667 msgctxt "menu item" msgid "_Video Call" msgstr "Llamada de _vídeo" #: ../libempathy-gtk/empathy-contact-menu.c:436 -#: ../libempathy-gtk/empathy-individual-menu.c:645 -#: ../src/empathy-main-window.ui.h:26 +#: ../libempathy-gtk/empathy-individual-menu.c:710 +#: ../src/empathy-main-window.ui.h:27 msgid "_Previous Conversations" msgstr "Conversaciones an_teriores" #: ../libempathy-gtk/empathy-contact-menu.c:458 -#: ../libempathy-gtk/empathy-individual-menu.c:686 +#: ../libempathy-gtk/empathy-individual-menu.c:751 msgid "Send File" msgstr "Enviar archivo" #: ../libempathy-gtk/empathy-contact-menu.c:481 -#: ../libempathy-gtk/empathy-individual-menu.c:728 +#: ../libempathy-gtk/empathy-individual-menu.c:793 msgid "Share My Desktop" msgstr "Compartir mi escritorio" #: ../libempathy-gtk/empathy-contact-menu.c:521 -#: ../libempathy-gtk/empathy-contact-widget.c:1761 -#: ../libempathy-gtk/empathy-individual-menu.c:763 +#: ../libempathy-gtk/empathy-contact-widget.c:1751 +#: ../libempathy-gtk/empathy-individual-menu.c:828 #: ../libempathy-gtk/empathy-individual-widget.c:1370 msgid "Favorite" msgstr "Favorita" #: ../libempathy-gtk/empathy-contact-menu.c:550 -#: ../libempathy-gtk/empathy-individual-menu.c:791 +#: ../libempathy-gtk/empathy-individual-menu.c:856 msgid "Infor_mation" msgstr "Infor_mación" @@ -1724,30 +1745,30 @@ msgid "_Edit" msgstr "_Editar" #: ../libempathy-gtk/empathy-contact-menu.c:650 -#: ../libempathy-gtk/empathy-individual-menu.c:972 -#: ../src/empathy-chat-window.c:935 +#: ../libempathy-gtk/empathy-individual-menu.c:1037 +#: ../src/empathy-chat-window.c:986 msgid "Inviting you to this room" msgstr "Invitándolo a esta sala" #: ../libempathy-gtk/empathy-contact-menu.c:681 -#: ../libempathy-gtk/empathy-individual-menu.c:1019 +#: ../libempathy-gtk/empathy-individual-menu.c:1084 msgid "_Invite to Chat Room" msgstr "_Invitar a sala de chat" #. Title -#: ../libempathy-gtk/empathy-contact-search-dialog.c:513 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:514 msgid "Search contacts" msgstr "Buscar contactos" -#: ../libempathy-gtk/empathy-contact-search-dialog.c:543 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:544 msgid "Search: " msgstr "Buscar:" -#: ../libempathy-gtk/empathy-contact-search-dialog.c:601 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:602 msgid "_Add Contact" msgstr "_Añadir contacto" -#: ../libempathy-gtk/empathy-contact-search-dialog.c:619 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:620 msgid "No contacts found" msgstr "No se encontraron contactos" @@ -1900,8 +1921,8 @@ msgstr "Latitud:" msgid "Altitude:" msgstr "Altitud:" -#: ../libempathy-gtk/empathy-contact-widget.c:871 -#: ../libempathy-gtk/empathy-contact-widget.c:886 +#: ../libempathy-gtk/empathy-contact-widget.c:861 +#: ../libempathy-gtk/empathy-contact-widget.c:876 #: ../libempathy-gtk/empathy-individual-widget.c:616 #: ../libempathy-gtk/empathy-individual-widget.c:631 #: ../src/empathy-preferences.ui.h:12 @@ -1909,23 +1930,23 @@ msgid "Location" msgstr "Ubicación geográfica" #. translators: format is "Location, $date" -#: ../libempathy-gtk/empathy-contact-widget.c:888 +#: ../libempathy-gtk/empathy-contact-widget.c:878 #: ../libempathy-gtk/empathy-individual-widget.c:633 #, c-format msgid "%s, %s" msgstr "%s, %s" -#: ../libempathy-gtk/empathy-contact-widget.c:940 +#: ../libempathy-gtk/empathy-contact-widget.c:930 #: ../libempathy-gtk/empathy-individual-widget.c:682 msgid "%B %e, %Y at %R UTC" msgstr "%e de %B de %Y a las %R UTC" -#: ../libempathy-gtk/empathy-contact-widget.c:1022 +#: ../libempathy-gtk/empathy-contact-widget.c:1012 #: ../libempathy-gtk/empathy-individual-widget.c:917 msgid "Save Avatar" msgstr "Guardar avatar" -#: ../libempathy-gtk/empathy-contact-widget.c:1078 +#: ../libempathy-gtk/empathy-contact-widget.c:1068 #: ../libempathy-gtk/empathy-individual-widget.c:975 msgid "Unable to save avatar" msgstr "No se pudo guardar el avatar" @@ -1995,7 +2016,7 @@ msgid "Select" msgstr "Seleccionar" #: ../libempathy-gtk/empathy-groups-widget.c:408 -#: ../src/empathy-main-window.c:1436 +#: ../src/empathy-main-window.c:1770 msgid "Group" msgstr "Grupo" @@ -2038,23 +2059,29 @@ msgstr "" msgid "%s (%s)" msgstr "%s (%s)" -#: ../libempathy-gtk/empathy-individual-menu.c:839 +#. add an SMS button +#: ../libempathy-gtk/empathy-individual-menu.c:582 +#: ../libempathy-gtk/empathy-new-message-dialog.c:248 +msgid "_SMS" +msgstr "_SMS" + +#: ../libempathy-gtk/empathy-individual-menu.c:904 msgctxt "Edit individual (contextual menu)" msgid "_Edit" msgstr "_Editar" #. Translators: this is a verb meaning "to connect two contacts together #. * to form a meta-contact". -#: ../libempathy-gtk/empathy-individual-menu.c:865 +#: ../libempathy-gtk/empathy-individual-menu.c:930 msgctxt "Link individual (contextual menu)" msgid "_Link Contacts…" msgstr "_Enlazar contactos…" -#: ../libempathy-gtk/empathy-individual-view.c:2308 +#: ../libempathy-gtk/empathy-individual-view.c:2351 msgid "Delete and _Block" msgstr "Eliminar y _bloquear" -#: ../libempathy-gtk/empathy-individual-view.c:2474 +#: ../libempathy-gtk/empathy-individual-view.c:2517 #, c-format msgid "" "Do you really want to remove the linked contact '%s'? Note that this will " @@ -2186,12 +2213,12 @@ msgid "Contact ID:" msgstr "ID del contacto:" #. add chat button -#: ../libempathy-gtk/empathy-new-message-dialog.c:171 +#: ../libempathy-gtk/empathy-new-message-dialog.c:258 msgid "C_hat" msgstr "C_hat" #. Tweak the dialog -#: ../libempathy-gtk/empathy-new-message-dialog.c:181 +#: ../libempathy-gtk/empathy-new-message-dialog.c:277 msgid "New Conversation" msgstr "Conversación nueva" @@ -2333,19 +2360,23 @@ msgstr "Guardar mensaje de estado _nuevo" msgid "Saved Status Messages" msgstr "Mensajes de estado guardados" -#: ../libempathy-gtk/empathy-theme-manager.c:67 +#: ../libempathy-gtk/empathy-theme-adium.c:1462 +msgid "Normal" +msgstr "Normal" + +#: ../libempathy-gtk/empathy-theme-manager.c:68 msgid "Classic" msgstr "Clásico" -#: ../libempathy-gtk/empathy-theme-manager.c:68 +#: ../libempathy-gtk/empathy-theme-manager.c:69 msgid "Simple" msgstr "Simple" -#: ../libempathy-gtk/empathy-theme-manager.c:69 +#: ../libempathy-gtk/empathy-theme-manager.c:70 msgid "Clean" msgstr "Limpio" -#: ../libempathy-gtk/empathy-theme-manager.c:70 +#: ../libempathy-gtk/empathy-theme-manager.c:71 msgid "Blue" msgstr "Azul" @@ -2800,8 +2831,8 @@ msgid "Select the accounts you want to import:" msgstr "Seleccione las cuentas que quiere importar:" #: ../src/empathy-account-assistant.c:813 -#: ../src/empathy-new-chatroom-dialog.c:562 -#: ../src/empathy-new-chatroom-dialog.c:563 +#: ../src/empathy-new-chatroom-dialog.c:555 +#: ../src/empathy-new-chatroom-dialog.c:556 msgid "Yes" msgstr "Sí" @@ -2920,7 +2951,7 @@ msgstr "¿Quiere quitar %s de su equipo?" msgid "This will not remove your account on the server." msgstr "Esto no quitará su cuenta del servidor." -#: ../src/empathy-accounts-dialog.c:1434 +#: ../src/empathy-accounts-dialog.c:1432 msgid "" "You are about to select another account, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -2929,15 +2960,15 @@ msgstr "" "¿Seguro que quiere continuar?" #. Menu items: to enabled/disable the account -#: ../src/empathy-accounts-dialog.c:1652 +#: ../src/empathy-accounts-dialog.c:1643 msgid "_Enable" msgstr "_Activar" -#: ../src/empathy-accounts-dialog.c:1653 +#: ../src/empathy-accounts-dialog.c:1644 msgid "_Disable" msgstr "_Desactivar" -#: ../src/empathy-accounts-dialog.c:2174 +#: ../src/empathy-accounts-dialog.c:2154 msgid "" "You are about to close the window, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -2973,11 +3004,11 @@ msgstr "_Añadir…" msgid "_Import…" msgstr "_Importar…" -#: ../src/empathy-auth-client.c:250 +#: ../src/empathy-auth-client.c:249 msgid " - Empathy authentication client" msgstr ": Cliente de autenticación de Empathy" -#: ../src/empathy-auth-client.c:266 +#: ../src/empathy-auth-client.c:265 msgid "Empathy authentication client" msgstr "Cliente de autenticación de Empathy" @@ -3063,25 +3094,21 @@ msgid "The IP address of the multicast group" msgstr "La dirección IP del grupo multicast" #: ../src/empathy-streamed-media-window.c:1906 -#| msgid "Unknown" msgctxt "encoding video codec" msgid "Unknown" msgstr "Desconocido" #: ../src/empathy-streamed-media-window.c:1909 -#| msgid "Unknown" msgctxt "encoding audio codec" msgid "Unknown" msgstr "Desconocido" #: ../src/empathy-streamed-media-window.c:1912 -#| msgid "Unknown" msgctxt "decoding video codec" msgid "Unknown" msgstr "Desconocido" #: ../src/empathy-streamed-media-window.c:1915 -#| msgid "Unknown" msgctxt "decoding audio codec" msgid "Unknown" msgstr "Desconocido" @@ -3264,39 +3291,50 @@ msgstr "Vista preliminar del vídeo" msgid "_Call" msgstr "_Llamar" -#: ../src/empathy-call-window.ui.h:25 ../src/empathy-main-window.ui.h:29 +#: ../src/empathy-call-window.ui.h:25 ../src/empathy-main-window.ui.h:30 msgid "_View" msgstr "_Ver" -#: ../src/empathy-chat-window.c:474 ../src/empathy-chat-window.c:494 +#: ../src/empathy-chat-window.c:480 ../src/empathy-chat-window.c:500 #, c-format msgid "%s (%d unread)" msgid_plural "%s (%d unread)" msgstr[0] "%s (%d sin leer)" msgstr[1] "%s (%d sin leer)" -#: ../src/empathy-chat-window.c:486 +#: ../src/empathy-chat-window.c:492 #, c-format msgid "%s (and %u other)" msgid_plural "%s (and %u others)" msgstr[0] "%s (y otra)" msgstr[1] "%s (y otras %u)" -#: ../src/empathy-chat-window.c:502 +#: ../src/empathy-chat-window.c:508 #, c-format msgid "%s (%d unread from others)" msgid_plural "%s (%d unread from others)" msgstr[0] "%s (%d sin leer de otros)" msgstr[1] "%s (%d sin leer de otros)" -#: ../src/empathy-chat-window.c:511 +#: ../src/empathy-chat-window.c:517 #, c-format msgid "%s (%d unread from all)" msgid_plural "%s (%d unread from all)" msgstr[0] "%s (%d sin leer de todos)" msgstr[1] "%s (%d sin leer de todos)" -#: ../src/empathy-chat-window.c:721 +#: ../src/empathy-chat-window.c:732 +msgid "SMS:" +msgstr "SMS:" + +#: ../src/empathy-chat-window.c:742 +#, c-format +msgid "Sending %d message" +msgid_plural "Sending %d messages" +msgstr[0] "Enviando %d mensaje" +msgstr[1] "Enviando %d mensajes" + +#: ../src/empathy-chat-window.c:764 msgid "Typing a message." msgstr "Tecleando un mensaje." @@ -3332,7 +3370,7 @@ msgstr "Mover pestaña a la _derecha" msgid "Notify for All Messages" msgstr "Notificar para todos los mensajes" -#: ../src/empathy-chat-window.ui.h:9 ../src/empathy-main-window.ui.h:17 +#: ../src/empathy-chat-window.ui.h:9 ../src/empathy-main-window.ui.h:18 msgid "_Contents" msgstr "Índ_ice" @@ -3344,7 +3382,7 @@ msgstr "_Conversación" msgid "_Detach Tab" msgstr "_Desacoplar pestaña" -#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:19 +#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:20 msgid "_Edit" msgstr "_Editar" @@ -3352,7 +3390,7 @@ msgstr "_Editar" msgid "_Favorite Chat Room" msgstr "Sala de chat _favorita" -#: ../src/empathy-chat-window.ui.h:14 ../src/empathy-main-window.ui.h:21 +#: ../src/empathy-chat-window.ui.h:14 ../src/empathy-main-window.ui.h:22 msgid "_Help" msgstr "Ay_uda" @@ -3392,90 +3430,90 @@ msgstr "Autoconectar" msgid "Manage Favorite Rooms" msgstr "Gestionar salas favoritas" -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:504 msgid "Incoming video call" msgstr "Llamada de vídeo entrante" -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:504 msgid "Incoming call" msgstr "Llamada entrante" -#: ../src/empathy-event-manager.c:511 +#: ../src/empathy-event-manager.c:508 #, c-format msgid "%s is video calling you. Do you want to answer?" msgstr "%s le está llamando con vídeo. ¿Quiere responder?" -#: ../src/empathy-event-manager.c:512 +#: ../src/empathy-event-manager.c:509 #, c-format msgid "%s is calling you. Do you want to answer?" msgstr "%s le está llamando. ¿Quiere responder?" -#: ../src/empathy-event-manager.c:515 ../src/empathy-event-manager.c:667 +#: ../src/empathy-event-manager.c:512 ../src/empathy-event-manager.c:661 #, c-format msgid "Incoming call from %s" msgstr "Llamada entrante de %s" -#: ../src/empathy-event-manager.c:540 +#: ../src/empathy-event-manager.c:537 msgid "_Reject" msgstr "_Rechazar" -#: ../src/empathy-event-manager.c:546 +#: ../src/empathy-event-manager.c:543 msgid "_Answer" msgstr "Re_spuesta" -#: ../src/empathy-event-manager.c:667 +#: ../src/empathy-event-manager.c:661 #, c-format msgid "Incoming video call from %s" msgstr "Llamada de vídeo entrante de %s" -#: ../src/empathy-event-manager.c:744 +#: ../src/empathy-event-manager.c:734 msgid "Room invitation" msgstr "Invitación a una sala" -#: ../src/empathy-event-manager.c:746 +#: ../src/empathy-event-manager.c:736 #, c-format msgid "Invitation to join %s" msgstr "Invitación para unirse a %s" -#: ../src/empathy-event-manager.c:753 +#: ../src/empathy-event-manager.c:743 #, c-format msgid "%s is inviting you to join %s" msgstr "%s le está invitando a unirse a %s" -#: ../src/empathy-event-manager.c:761 +#: ../src/empathy-event-manager.c:751 msgid "_Decline" msgstr "_Rechazar" -#: ../src/empathy-event-manager.c:766 +#: ../src/empathy-event-manager.c:756 #: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "_Unirse" -#: ../src/empathy-event-manager.c:793 +#: ../src/empathy-event-manager.c:783 #, c-format msgid "%s invited you to join %s" msgstr "%s le ha invitado a unirse a %s" -#: ../src/empathy-event-manager.c:799 +#: ../src/empathy-event-manager.c:789 #, c-format msgid "You have been invited to join %s" msgstr "Le han invitado a unirse a %s" -#: ../src/empathy-event-manager.c:850 +#: ../src/empathy-event-manager.c:840 #, c-format msgid "Incoming file transfer from %s" msgstr "Transferencia de archivo entrante de %s" -#: ../src/empathy-event-manager.c:1020 ../src/empathy-main-window.c:370 +#: ../src/empathy-event-manager.c:1010 ../src/empathy-main-window.c:377 msgid "Password required" msgstr "Se requiere una contraseña" -#: ../src/empathy-event-manager.c:1076 +#: ../src/empathy-event-manager.c:1066 #, c-format msgid "%s would like permission to see when you are online" msgstr "%s quiere permiso para ver cuándo está en línea" -#: ../src/empathy-event-manager.c:1080 +#: ../src/empathy-event-manager.c:1070 #, c-format msgid "" "\n" @@ -3561,7 +3599,7 @@ msgstr "«%s» enviado a %s" msgid "File transfer completed" msgstr "Transferencia de archivo completada" -#: ../src/empathy-ft-manager.c:616 ../src/empathy-ft-manager.c:783 +#: ../src/empathy-ft-manager.c:616 ../src/empathy-ft-manager.c:780 msgid "Waiting for the other participant's response" msgstr "Esperando la respuesta del otro participante" @@ -3575,15 +3613,15 @@ msgstr "Comprobando la integridad de «%s»" msgid "Hashing \"%s\"" msgstr "Obteniendo el «hash» de «%s»" -#: ../src/empathy-ft-manager.c:1029 +#: ../src/empathy-ft-manager.c:1026 msgid "%" msgstr "%" -#: ../src/empathy-ft-manager.c:1041 +#: ../src/empathy-ft-manager.c:1038 msgid "File" msgstr "Archivo" -#: ../src/empathy-ft-manager.c:1063 +#: ../src/empathy-ft-manager.c:1060 msgid "Remaining" msgstr "Restantes" @@ -3622,39 +3660,55 @@ msgstr "Protocolo" msgid "Source" msgstr "Origen" -#: ../src/empathy-main-window.c:387 +#: ../src/empathy-main-window.c:394 msgid "Provide Password" msgstr "Escriba su contraseña" -#: ../src/empathy-main-window.c:393 +#: ../src/empathy-main-window.c:400 msgid "Disconnect" msgstr "Desconectar" -#: ../src/empathy-main-window.c:533 +#: ../src/empathy-main-window.c:540 msgid "No match found" msgstr "No se encontró ninguna coincidencia" -#: ../src/empathy-main-window.c:688 +#: ../src/empathy-main-window.c:695 msgid "Reconnect" msgstr "Reconectar" -#: ../src/empathy-main-window.c:694 +#: ../src/empathy-main-window.c:701 msgid "Edit Account" msgstr "Editar cuenta" -#: ../src/empathy-main-window.c:700 +#: ../src/empathy-main-window.c:707 msgid "Close" msgstr "Cerrar" -#: ../src/empathy-main-window.c:1418 +#. Translators: this string will be something like: +#. * Top up My Account ($1.23)..." +#: ../src/empathy-main-window.c:849 +#, c-format +msgid "Top up %s (%s)..." +msgstr "Recargar %s (%s)…" + +#: ../src/empathy-main-window.c:924 +msgid "Top up account credit" +msgstr "Recargar el saldo de la cuenta" + +#. top up button +#: ../src/empathy-main-window.c:999 +msgid "Top Up..." +msgstr "Recargar…" + +#: ../src/empathy-main-window.c:1752 msgid "Contact" msgstr "Contacto" -#: ../src/empathy-main-window.c:1765 +#: ../src/empathy-main-window.c:2101 msgid "Contact List" msgstr "Lista de contactos" -#: ../src/empathy-main-window.c:1881 +#: ../src/empathy-main-window.c:2219 msgid "Show and edit accounts" msgstr "Mostrar y editar cuentas" @@ -3663,86 +3717,90 @@ msgid "Contacts on a _Map" msgstr "Contactos en el _mapa" #: ../src/empathy-main-window.ui.h:2 +msgid "Credit Balance" +msgstr "Crédito" + +#: ../src/empathy-main-window.ui.h:3 msgid "Find in Contact _List" msgstr "_Buscar en la lista de contactos" -#: ../src/empathy-main-window.ui.h:3 +#: ../src/empathy-main-window.ui.h:4 msgid "Join _Favorites" msgstr "Unirse a _favoritas" -#: ../src/empathy-main-window.ui.h:4 +#: ../src/empathy-main-window.ui.h:5 msgid "Manage Favorites" msgstr "Gestionar favoritos" -#: ../src/empathy-main-window.ui.h:5 +#: ../src/empathy-main-window.ui.h:6 msgid "N_ormal Size" msgstr "Tamaño n_ormal" -#: ../src/empathy-main-window.ui.h:6 ../src/empathy-status-icon.ui.h:1 +#: ../src/empathy-main-window.ui.h:7 ../src/empathy-status-icon.ui.h:1 msgid "New _Call…" msgstr "_Llamada nueva…" -#: ../src/empathy-main-window.ui.h:7 +#: ../src/empathy-main-window.ui.h:8 msgid "Normal Size With _Avatars" msgstr "Tamaño normal con _avatares" -#: ../src/empathy-main-window.ui.h:8 +#: ../src/empathy-main-window.ui.h:9 msgid "P_references" msgstr "Prefere_ncias" -#: ../src/empathy-main-window.ui.h:9 +#: ../src/empathy-main-window.ui.h:10 msgid "Show P_rotocols" msgstr "Mostrar p_rotocolos" -#: ../src/empathy-main-window.ui.h:10 +#: ../src/empathy-main-window.ui.h:11 msgid "Sort by _Name" msgstr "Ordenar por _nombre" -#: ../src/empathy-main-window.ui.h:11 +#: ../src/empathy-main-window.ui.h:12 msgid "Sort by _Status" msgstr "Ordenar por es_tado" -#: ../src/empathy-main-window.ui.h:12 +#: ../src/empathy-main-window.ui.h:13 msgid "_Accounts" msgstr "_Cuentas" -#: ../src/empathy-main-window.ui.h:14 +#: ../src/empathy-main-window.ui.h:15 msgid "_Blocked Contacts" msgstr "Contactos _bloqueados" -#: ../src/empathy-main-window.ui.h:16 +#: ../src/empathy-main-window.ui.h:17 msgid "_Compact Size" msgstr "Tamaño _compacto" -#: ../src/empathy-main-window.ui.h:18 +#: ../src/empathy-main-window.ui.h:19 msgid "_Debug" msgstr "_Depurar" -#: ../src/empathy-main-window.ui.h:20 +#: ../src/empathy-main-window.ui.h:21 msgid "_File Transfers" msgstr "_Transferencias de archivos" -#: ../src/empathy-main-window.ui.h:22 +#: ../src/empathy-main-window.ui.h:23 msgid "_Join…" msgstr "_Unirse…" -#: ../src/empathy-main-window.ui.h:23 ../src/empathy-status-icon.ui.h:3 +#: ../src/empathy-main-window.ui.h:24 ../src/empathy-status-icon.ui.h:3 msgid "_New Conversation…" msgstr "Conversación _nueva…" -#: ../src/empathy-main-window.ui.h:24 +#: ../src/empathy-main-window.ui.h:25 msgid "_Offline Contacts" msgstr "Contactos _desconectados" -#: ../src/empathy-main-window.ui.h:25 +#: ../src/empathy-main-window.ui.h:26 msgid "_Personal Information" msgstr "Información p_ersonal" -#: ../src/empathy-main-window.ui.h:27 +#: ../src/empathy-main-window.ui.h:28 msgid "_Room" msgstr "_Sala" -#: ../src/empathy-main-window.ui.h:28 +#: ../src/empathy-main-window.ui.h:29 msgid "_Search for Contacts…" msgstr "_Buscar contactos…" @@ -3756,7 +3814,7 @@ msgstr "Miembros" #. Translators: Room/Join's roomlist tooltip. Parameters are a channel name, #. yes/no, yes/no and a number. -#: ../src/empathy-new-chatroom-dialog.c:560 +#: ../src/empathy-new-chatroom-dialog.c:553 #, c-format msgid "" "%s\n" @@ -3769,16 +3827,16 @@ msgstr "" "Se necesita contraseña: %s\n" "Miembros: %s" -#: ../src/empathy-new-chatroom-dialog.c:562 -#: ../src/empathy-new-chatroom-dialog.c:563 +#: ../src/empathy-new-chatroom-dialog.c:555 +#: ../src/empathy-new-chatroom-dialog.c:556 msgid "No" msgstr "No" -#: ../src/empathy-new-chatroom-dialog.c:591 +#: ../src/empathy-new-chatroom-dialog.c:584 msgid "Could not start room listing" msgstr "No se pudo iniciar la lista de la sala" -#: ../src/empathy-new-chatroom-dialog.c:601 +#: ../src/empathy-new-chatroom-dialog.c:594 msgid "Could not stop room listing" msgstr "No se pudo parar la lista de la sala" @@ -3813,39 +3871,79 @@ msgstr "Lista de salas" msgid "_Room:" msgstr "_Sala:" -#: ../src/empathy-preferences.c:139 +#: ../src/empathy-preferences.c:147 msgid "Message received" msgstr "Mensaje recibido" -#: ../src/empathy-preferences.c:140 +#: ../src/empathy-preferences.c:148 msgid "Message sent" msgstr "Mensaje enviado" -#: ../src/empathy-preferences.c:141 +#: ../src/empathy-preferences.c:149 msgid "New conversation" msgstr "Conversación nueva" -#: ../src/empathy-preferences.c:142 +#: ../src/empathy-preferences.c:150 msgid "Contact goes online" msgstr "El contacto se conecta" -#: ../src/empathy-preferences.c:143 +#: ../src/empathy-preferences.c:151 msgid "Contact goes offline" msgstr "El contacto se desconecta" -#: ../src/empathy-preferences.c:144 +#: ../src/empathy-preferences.c:152 msgid "Account connected" msgstr "Cuenta conectada" -#: ../src/empathy-preferences.c:145 +#: ../src/empathy-preferences.c:153 msgid "Account disconnected" msgstr "Cuenta desconectada" -#: ../src/empathy-preferences.c:446 +#: ../src/empathy-preferences.c:450 msgid "Language" msgstr "Idioma" -#: ../src/empathy-preferences.c:875 +#. translators: Contact name for the chat theme preview +#: ../src/empathy-preferences.c:700 +msgid "Juliet" +msgstr "Julieta" + +#. translators: Contact name for the chat theme preview +#: ../src/empathy-preferences.c:707 +msgid "Romeo" +msgstr "Romeo" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:713 +msgid "O Romeo, Romeo, wherefore art thou Romeo?" +msgstr "¡Oh, Romeo, Romeo!, ¿dónde estás que no te veo?" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:716 +msgid "Deny thy father and refuse thy name;" +msgstr "Niega a tu padre y rehúsa tu nombre;" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:719 +msgid "Or if thou wilt not, be but sworn my love" +msgstr "O, si no quieres, júrame tan sólo que me amas" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:722 +msgid "And I'll no longer be a Capulet." +msgstr "Y dejaré yo de ser una Capuleto" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:725 +msgid "Shall I hear more, or shall I speak at this?" +msgstr "¿Debo oír más o contestar a lo dicho?" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:728 +msgid "Juliet has disconnected" +msgstr "Julieta se ha desconectado" + +#: ../src/empathy-preferences.c:962 msgid "Preferences" msgstr "Preferencias" @@ -3948,43 +4046,47 @@ msgstr "" "diccionario instalado." #: ../src/empathy-preferences.ui.h:24 +msgid "Theme Variant:" +msgstr "Variante del tema:" + +#: ../src/empathy-preferences.ui.h:25 msgid "Themes" msgstr "Temas" -#: ../src/empathy-preferences.ui.h:25 +#: ../src/empathy-preferences.ui.h:26 msgid "_Automatically connect on startup" msgstr "C_onectarse automáticamente al inicio" -#: ../src/empathy-preferences.ui.h:26 +#: ../src/empathy-preferences.ui.h:27 msgid "_Cellphone" msgstr "Teléfono _móvil" -#: ../src/empathy-preferences.ui.h:27 +#: ../src/empathy-preferences.ui.h:28 msgid "_Enable bubble notifications" msgstr "_Activar notificaciones de burbuja" -#: ../src/empathy-preferences.ui.h:28 +#: ../src/empathy-preferences.ui.h:29 msgid "_Enable sound notifications" msgstr "_Activar notificaciones de sonido" -#: ../src/empathy-preferences.ui.h:29 +#: ../src/empathy-preferences.ui.h:30 msgid "_GPS" msgstr "_GPS" -#: ../src/empathy-preferences.ui.h:30 +#: ../src/empathy-preferences.ui.h:31 msgid "_Network (IP, Wi-Fi)" msgstr "_Red (IP, Wi-Fi)" -#: ../src/empathy-preferences.ui.h:31 +#: ../src/empathy-preferences.ui.h:32 msgid "_Open new chats in separate windows" msgstr "_Abrir charlas nuevas en ventanas separadas" -#: ../src/empathy-preferences.ui.h:32 +#: ../src/empathy-preferences.ui.h:33 msgid "_Publish location to my contacts" msgstr "_Publicar mi ubicación a mis contactos" #. To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees. -#: ../src/empathy-preferences.ui.h:34 +#: ../src/empathy-preferences.ui.h:35 msgid "_Reduce location accuracy" msgstr "_Reducir la precisión de la ubicación" @@ -4149,6 +4251,10 @@ msgstr "Llamada perdida de %s" msgid "%s just tried to call you, but you were in another call." msgstr "%s intentó llamarle, pero estaba en otra llamada." +#: ../libempathy-gtk/empathy-search-bar.c:282 +msgid "_Match case" +msgstr "_Coincidir con capitalización" + #~ msgid "_Enabled" #~ msgstr "_Activada" @@ -4281,9 +4387,6 @@ msgstr "%s intentó llamarle, pero estaba en otra llamada." #~ msgid "_Import…" #~ msgstr "_Importar…" -#~ msgid "Salut account is created" -#~ msgstr "Se creó la cuenta Salut" - #~ msgid "Whether the Salut account has been created on the first Empathy run." #~ msgstr "" #~ "Indica si la cuenta Salut se ha creado cuando ejecutó por primera vez " @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: empathy-master-po-gl-57278_.merged\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-04-30 23:08+0200\n" -"PO-Revision-Date: 2011-04-30 23:08+0200\n" +"POT-Creation-Date: 2011-05-09 12:52+0200\n" +"PO-Revision-Date: 2011-05-09 12:57+0200\n" "Last-Translator: Fran Diéguez <frandieguez@gnome.org>\n" "Language-Team: Galician <gnome-l10n-gl@gnome.org>\n" "Language: gl\n" @@ -253,113 +253,118 @@ msgstr "Facer emerxer unha notificación cando un contacto sae" # rever #: ../data/org.gnome.Empathy.gschema.xml.in.h:42 +msgid "Show Balance in contact list" +msgstr "Mostrar o balance na lista de contactos" + +# rever +#: ../data/org.gnome.Empathy.gschema.xml.in.h:43 msgid "Show avatars" msgstr "Mostrar os avatares" # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:43 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:44 msgid "Show contact list in rooms" msgstr "Mostrar a lista de contactos nas salas" # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:44 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:45 msgid "Show hint about closing the main window" msgstr "Mostrar unha indicación sobre pechar a xanela principal" # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:45 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:46 msgid "Show offline contacts" msgstr "Mostrar os contactos desconectados" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:46 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:47 msgid "Show protocols" msgstr "Mostrar os protocolos" # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:47 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:48 msgid "Spell checking languages" msgstr "Idiomas para a corrección ortográfica" # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:48 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:49 msgid "The default folder to save file transfers in." msgstr "" "O cartafol predeterminado en que gardar as transferencias de ficheiros." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:49 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:50 msgid "The last directory that an avatar image was chosen from." msgstr "O último cartafol desde onde foi escollida unha imaxe de avatar." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:50 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:51 msgid "The position for the chat window side pane" msgstr "A posición do panel lateral da xanela de conversa" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:51 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:52 msgid "The stored position (in pixels) of the chat window side pane." msgstr "" "A posición almacenada (en píxeles) do panel lateral da xanela de conversa." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:52 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:53 msgid "The theme that is used to display the conversation in chat windows." msgstr "O tema usado para mostrar as conversa nas xanelas de conversa." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:53 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:54 msgid "Use graphical smileys" msgstr "Usar emoticonas gráficas" # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:54 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:55 msgid "Use notification sounds" msgstr "Usar sons de notificación" # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:55 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:56 msgid "Use theme for chat rooms" msgstr "Usar un tema para as salas de conversa" # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:56 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:57 msgid "Whether Empathy can publish the user's location to their contacts." msgstr "" "Indica se o Empathy pode ou non publicar a localización do usuario aos seus " "contactos." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:57 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:58 msgid "Whether Empathy can use the GPS to guess the location." msgstr "" "Indica se o Empathy pode usar ou non o GPS para adiviñar a localización." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:58 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:59 msgid "Whether Empathy can use the cellular network to guess the location." msgstr "" "Indica se o Empathy pode ou non usar a rede de telefonía móbil para adiviñar " "a localización." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:59 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:60 msgid "Whether Empathy can use the network to guess the location." msgstr "" "Indica se o Empathy pode ou non usar a rede para adiviñar a localización." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:60 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:61 msgid "Whether Empathy has migrated butterfly logs." msgstr "Indica se Empathy migrou os seus rexistros de butterfly." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:61 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:62 msgid "Whether Empathy should automatically log into your accounts on startup." msgstr "" "Indica se o Empathy debería iniciar a sesión nas súas contas automaticamente " "ao inicio ou non." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:62 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:63 msgid "" "Whether Empathy should go into away mode automatically if the user is idle." msgstr "" @@ -367,7 +372,7 @@ msgstr "" "inactivo." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:63 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:64 msgid "" "Whether Empathy should reduce the location's accuracy for privacy reasons." msgstr "" @@ -375,14 +380,14 @@ msgstr "" "motivos de privacidade." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:64 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:65 msgid "" "Whether Empathy should use the avatar of the contact as the chat window icon." msgstr "" "Indica se o Empathy debería usar o avatar dos contactos como a icona da " "xanela da conversa ou non." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:65 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:66 msgid "" "Whether WebKit developer tools, such as the Web Inspector, should be enabled." msgstr "" @@ -390,7 +395,7 @@ msgstr "" "deberían ser activadas." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:66 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:67 msgid "" "Whether connectivity managers should be used to automatically disconnect/" "reconnect." @@ -399,7 +404,7 @@ msgstr "" "desconectarse automaticamente ou non." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:67 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:68 msgid "" "Whether to check words typed against the languages you want to check with." msgstr "" @@ -407,80 +412,80 @@ msgstr "" "as quere verificar." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:68 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:69 msgid "Whether to convert smileys into graphical images in conversations." msgstr "" "Indica se converter ou non as emoticonas en imaxes gráficas nas conversas." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:69 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:70 msgid "Whether to play a sound to notify of contacts logging into the network." msgstr "" "Indica se reproducir ou non un son para notificar que os contactos inician " "unha sesión na rede." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:70 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:71 msgid "" "Whether to play a sound to notify of contacts logging out of the network." msgstr "" "Indica se reproducir ou non un son para notificar que os contactos terminan " "unha sesión na rede." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:71 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:72 msgid "Whether to play a sound to notify of events." msgstr "Indica se reproducir ou non un son para notificar os eventos." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:72 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:73 msgid "Whether to play a sound to notify of incoming messages." msgstr "" "Indica se reproducir ou non un son para notificar as mensaxes entrantes." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:73 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:74 msgid "Whether to play a sound to notify of new conversations." msgstr "Indica se reproducir ou non un son para notificar as conversas novas." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:74 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:75 msgid "Whether to play a sound to notify of outgoing messages." msgstr "Indica se reproducir ou non un son para notificar as mensaxes saíntes." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:75 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:76 msgid "Whether to play a sound when logging into a network." msgstr "" "Indica se reproducir ou non un son cando se inicia unha sesión na rede." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:76 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:77 msgid "Whether to play a sound when logging out of a network." msgstr "Indica se reproducir ou non un son cando se sae da sesión na rede." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:77 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:78 msgid "Whether to play sound notifications when away or busy." msgstr "" "Indica se reproducir ou non un son para notificar cando se está ocupado ou " "ausente." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:78 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:79 msgid "Whether to show a popup notification when a contact goes offline." msgstr "" "Indica se mostrar ou non unha notificación emerxente cando un contacto está " "desconectado." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:79 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:80 msgid "Whether to show a popup notification when a contact goes online." msgstr "" "Indica se mostrar ou non unha notificación emerxente cando un contacto está " "conectado." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:80 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:81 msgid "" "Whether to show a popup notification when receiving a new message even if " "the chat is already opened, but not focused." @@ -489,14 +494,19 @@ msgstr "" "mensaxe nova, aínda cando a conversa xa estea aberta mais non estea enfocada." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:81 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:82 msgid "Whether to show a popup notification when receiving a new message." msgstr "" "Indica se mostrar ou non unha notificación emerxente cando se reciba unha " "mensaxe nova." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:82 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:83 +msgid "Whether to show account balances in the contact list." +msgstr "Indica se mostrar ou non os balances na lista de contactos." + +# rever +#: ../data/org.gnome.Empathy.gschema.xml.in.h:84 msgid "" "Whether to show avatars for contacts in the contact list and chat windows." msgstr "" @@ -504,38 +514,38 @@ msgstr "" "das xanelas de conversa." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:83 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:85 msgid "Whether to show contacts that are offline in the contact list." msgstr "" "Indica se mostrar ou non os contactos que están desconectados na lista de " "contactos." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:84 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:86 msgid "Whether to show popup notifications when away or busy." msgstr "" "Indica se mostrar ou non as notificacións emerxentes cando se está ausente " "ou ocupado." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:85 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:87 msgid "Whether to show protocols for contacts in the contact list." msgstr "" "Indica se mostrar ou non os protocolos para os contacto na lista de " "contactos." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:86 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:88 msgid "Whether to show the contact list in chat rooms." msgstr "Indica se mostrar ou non a lista de contactos nas salas de conversa." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:87 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:89 msgid "Whether to show the contact list in compact mode." msgstr "Indica se mostrar ou non a lista de contactos no modo compacto." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:88 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:90 msgid "" "Whether to show the message dialog about closing the main window with the " "'x' button in the title bar." @@ -544,12 +554,12 @@ msgstr "" "principal co botón 'x' da barra de título." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:89 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:91 msgid "Whether to use the theme for chat rooms." msgstr "Indica se usar ou non o tema para as salas de conversa." # rever -#: ../data/org.gnome.Empathy.gschema.xml.in.h:90 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:92 msgid "" "Which criterion to use when sorting the contact list. Default is to sort by " "the contact's name with the value \"name\". A value of \"state\" will sort " @@ -565,7 +575,7 @@ msgstr "Xestionar as contas de mensaxaría e VoIP" #. Tweak the dialog #: ../data/empathy-accounts.desktop.in.in.h:2 -#: ../src/empathy-accounts-dialog.c:2340 +#: ../src/empathy-accounts-dialog.c:2320 msgid "Messaging and VoIP Accounts" msgstr "Contas de mensaxaría e VoIP" @@ -620,158 +630,158 @@ msgstr "Produciuse un erro ao tentar transferir o ficheiro" msgid "The other participant is unable to transfer the file" msgstr "O outro participante non pode transferir o ficheiro" -#: ../libempathy/empathy-tp-file.c:405 ../libempathy/empathy-utils.c:383 +#: ../libempathy/empathy-tp-file.c:405 ../libempathy/empathy-utils.c:384 msgid "Unknown reason" msgstr "Motivo descoñecido" -#: ../libempathy/empathy-utils.c:304 +#: ../libempathy/empathy-utils.c:305 msgid "Available" msgstr "Dispoñíbel" -#: ../libempathy/empathy-utils.c:306 +#: ../libempathy/empathy-utils.c:307 msgid "Busy" msgstr "Ocupado" -#: ../libempathy/empathy-utils.c:309 +#: ../libempathy/empathy-utils.c:310 msgid "Away" msgstr "Ausente" -#: ../libempathy/empathy-utils.c:311 +#: ../libempathy/empathy-utils.c:312 msgid "Invisible" msgstr "Invisíbel" -#: ../libempathy/empathy-utils.c:313 +#: ../libempathy/empathy-utils.c:314 msgid "Offline" msgstr "Desconectado" #. translators: presence type is unknown -#: ../libempathy/empathy-utils.c:316 +#: ../libempathy/empathy-utils.c:317 msgctxt "presence" msgid "Unknown" msgstr "Descoñecido" # rever -#: ../libempathy/empathy-utils.c:355 +#: ../libempathy/empathy-utils.c:356 msgid "No reason specified" msgstr "Non se especificou un motivo" -#: ../libempathy/empathy-utils.c:357 ../libempathy/empathy-utils.c:413 +#: ../libempathy/empathy-utils.c:358 ../libempathy/empathy-utils.c:414 msgid "Status is set to offline" msgstr "O estado está definido a desconectado" # rever -#: ../libempathy/empathy-utils.c:359 ../libempathy/empathy-utils.c:393 +#: ../libempathy/empathy-utils.c:360 ../libempathy/empathy-utils.c:394 msgid "Network error" msgstr "Erro de rede" -#: ../libempathy/empathy-utils.c:361 ../libempathy/empathy-utils.c:395 +#: ../libempathy/empathy-utils.c:362 ../libempathy/empathy-utils.c:396 msgid "Authentication failed" msgstr "Fallou a autenticación" # rever -#: ../libempathy/empathy-utils.c:363 ../libempathy/empathy-utils.c:397 +#: ../libempathy/empathy-utils.c:364 ../libempathy/empathy-utils.c:398 msgid "Encryption error" msgstr "Erro de cifrado" # rever -#: ../libempathy/empathy-utils.c:365 +#: ../libempathy/empathy-utils.c:366 msgid "Name in use" msgstr "Nome en uso" # rever -#: ../libempathy/empathy-utils.c:367 ../libempathy/empathy-utils.c:399 +#: ../libempathy/empathy-utils.c:368 ../libempathy/empathy-utils.c:400 msgid "Certificate not provided" msgstr "Non se proporcionou o certificado" -#: ../libempathy/empathy-utils.c:369 ../libempathy/empathy-utils.c:401 +#: ../libempathy/empathy-utils.c:370 ../libempathy/empathy-utils.c:402 msgid "Certificate untrusted" msgstr "Certificado non fiábel" # rever -#: ../libempathy/empathy-utils.c:371 ../libempathy/empathy-utils.c:403 +#: ../libempathy/empathy-utils.c:372 ../libempathy/empathy-utils.c:404 msgid "Certificate expired" msgstr "O certificado caducou" # rever -#: ../libempathy/empathy-utils.c:373 ../libempathy/empathy-utils.c:405 +#: ../libempathy/empathy-utils.c:374 ../libempathy/empathy-utils.c:406 msgid "Certificate not activated" msgstr "O certificado non está activado" # rever -#: ../libempathy/empathy-utils.c:375 ../libempathy/empathy-utils.c:407 +#: ../libempathy/empathy-utils.c:376 ../libempathy/empathy-utils.c:408 msgid "Certificate hostname mismatch" msgstr "O nome do host do certificado non coincide" # rever -#: ../libempathy/empathy-utils.c:377 ../libempathy/empathy-utils.c:409 +#: ../libempathy/empathy-utils.c:378 ../libempathy/empathy-utils.c:410 msgid "Certificate fingerprint mismatch" msgstr "A impresión dixital do certificado non coincide" # rever -#: ../libempathy/empathy-utils.c:379 ../libempathy/empathy-utils.c:411 +#: ../libempathy/empathy-utils.c:380 ../libempathy/empathy-utils.c:412 msgid "Certificate self-signed" msgstr "Certificado autoasinado" # rever -#: ../libempathy/empathy-utils.c:381 +#: ../libempathy/empathy-utils.c:382 msgid "Certificate error" msgstr "Erro de certificado" -#: ../libempathy/empathy-utils.c:415 +#: ../libempathy/empathy-utils.c:416 msgid "Encryption is not available" msgstr "O cifrado non está dispoñíbel" # rever -#: ../libempathy/empathy-utils.c:417 +#: ../libempathy/empathy-utils.c:418 msgid "Certificate is invalid" msgstr "O certificado non é válido" # rever -#: ../libempathy/empathy-utils.c:419 +#: ../libempathy/empathy-utils.c:420 msgid "Connection has been refused" msgstr "Rexeitouse a conexión" # rever -#: ../libempathy/empathy-utils.c:421 +#: ../libempathy/empathy-utils.c:422 msgid "Connection can't be established" msgstr "Non é posíbel estabelecer a conexión" # rever -#: ../libempathy/empathy-utils.c:423 +#: ../libempathy/empathy-utils.c:424 msgid "Connection has been lost" msgstr "Perdeuse a conexión" -#: ../libempathy/empathy-utils.c:425 +#: ../libempathy/empathy-utils.c:426 msgid "This resource is already connected to the server" msgstr "Este recurso xa está conectado ao servidor" -#: ../libempathy/empathy-utils.c:427 +#: ../libempathy/empathy-utils.c:428 msgid "" "Connection has been replaced by a new connection using the same resource" msgstr "" "A conexión foi substituída por unha nova conexión empregando o mesmo recurso" -#: ../libempathy/empathy-utils.c:430 +#: ../libempathy/empathy-utils.c:431 msgid "The account already exists on the server" msgstr "Esta conta xa existe no servidor" -#: ../libempathy/empathy-utils.c:432 +#: ../libempathy/empathy-utils.c:433 msgid "Server is currently too busy to handle the connection" msgstr "Nestes intres o servidor está moi ocupado para xesionar a conexión" # rever -#: ../libempathy/empathy-utils.c:434 +#: ../libempathy/empathy-utils.c:435 msgid "Certificate has been revoked" msgstr "O certificado foi revocado" -#: ../libempathy/empathy-utils.c:436 +#: ../libempathy/empathy-utils.c:437 msgid "" "Certificate uses an insecure cipher algorithm or is cryptographically weak" msgstr "" "O certificado usa un algoritmo de cifrado inseguro ou cripotograficamente " "débil" -#: ../libempathy/empathy-utils.c:439 +#: ../libempathy/empathy-utils.c:440 msgid "" "The length of the server certificate, or the depth of the server certificate " "chain, exceed the limits imposed by the cryptography library" @@ -781,21 +791,21 @@ msgstr "" "criptografía." # rever -#: ../libempathy/empathy-utils.c:602 +#: ../libempathy/empathy-utils.c:603 #: ../libempathy-gtk/empathy-contact-list-store.h:73 msgid "People Nearby" msgstr "Persoas próximas" # rever -#: ../libempathy/empathy-utils.c:607 +#: ../libempathy/empathy-utils.c:608 msgid "Yahoo! Japan" msgstr "Yahoo! Japan" -#: ../libempathy/empathy-utils.c:636 +#: ../libempathy/empathy-utils.c:637 msgid "Google Talk" msgstr "Google Talk" -#: ../libempathy/empathy-utils.c:637 +#: ../libempathy/empathy-utils.c:638 msgid "Facebook Chat" msgstr "Chat de Facebook" @@ -920,20 +930,20 @@ msgstr "Ca_ncelar" #. * like: "MyUserName on freenode". #. * You should reverse the order of these arguments if the #. * server should come before the login id in your locale. -#: ../libempathy-gtk/empathy-account-widget.c:2413 +#: ../libempathy-gtk/empathy-account-widget.c:2410 #, c-format msgid "%1$s on %2$s" msgstr "%1$s sobre %2$s" #. To translators: The parameter is the protocol name. The resulting #. * string will be something like: "Jabber Account" -#: ../libempathy-gtk/empathy-account-widget.c:2439 +#: ../libempathy-gtk/empathy-account-widget.c:2436 #, c-format msgid "%s Account" msgstr "Conta %s" # rever -#: ../libempathy-gtk/empathy-account-widget.c:2443 +#: ../libempathy-gtk/empathy-account-widget.c:2440 msgid "New account" msgstr "Conta nova" @@ -1378,35 +1388,35 @@ msgstr "Todos os ficheiros" msgid "Click to enlarge" msgstr "Prema para ampliar" -#: ../libempathy-gtk/empathy-chat.c:652 +#: ../libempathy-gtk/empathy-chat.c:668 msgid "Failed to open private chat" msgstr "Produciuse un fallo ao abrir un chat privado" -#: ../libempathy-gtk/empathy-chat.c:717 +#: ../libempathy-gtk/empathy-chat.c:733 msgid "Topic not supported on this conversation" msgstr "Ese asunto non se admite nesta conversación" -#: ../libempathy-gtk/empathy-chat.c:723 +#: ../libempathy-gtk/empathy-chat.c:739 msgid "You are not allowed to change the topic" msgstr "Non se lle permite cambiar o asunto" -#: ../libempathy-gtk/empathy-chat.c:932 +#: ../libempathy-gtk/empathy-chat.c:948 msgid "/clear: clear all messages from the current conversation" msgstr "/clear, limpa todas as mensaxes da conversa actual" -#: ../libempathy-gtk/empathy-chat.c:935 +#: ../libempathy-gtk/empathy-chat.c:951 msgid "/topic <topic>: set the topic of the current conversation" msgstr "/topic <topic>, estabelece o asunto da conversa actual" -#: ../libempathy-gtk/empathy-chat.c:938 +#: ../libempathy-gtk/empathy-chat.c:954 msgid "/join <chat room ID>: join a new chat room" msgstr "/join <chatroom id>, unirse a unha nova sala de conversa" -#: ../libempathy-gtk/empathy-chat.c:941 +#: ../libempathy-gtk/empathy-chat.c:957 msgid "/j <chat room ID>: join a new chat room" msgstr "/j <chatroom id>, unirse a unha nova sala de conversa" -#: ../libempathy-gtk/empathy-chat.c:946 +#: ../libempathy-gtk/empathy-chat.c:962 msgid "" "/part [<chat room ID>] [<reason>]: leave the chat room, by default the " "current one" @@ -1414,23 +1424,23 @@ msgstr "" "/part [<chat room ID>] [<reason>]: abandonar a sala de char, por omisión a " "actual" -#: ../libempathy-gtk/empathy-chat.c:951 +#: ../libempathy-gtk/empathy-chat.c:967 msgid "/query <contact ID> [<message>]: open a private chat" msgstr "/query <contact id> [<message>], abre unha conversa privada" -#: ../libempathy-gtk/empathy-chat.c:954 +#: ../libempathy-gtk/empathy-chat.c:970 msgid "/msg <contact ID> <message>: open a private chat" msgstr "/msg <contact id> <message>, abre unha conversa privada" -#: ../libempathy-gtk/empathy-chat.c:957 +#: ../libempathy-gtk/empathy-chat.c:973 msgid "/nick <nickname>: change your nickname on the current server" msgstr "/nick <nickname>, cambia o seu nome de usuario no servidor actual" -#: ../libempathy-gtk/empathy-chat.c:960 +#: ../libempathy-gtk/empathy-chat.c:976 msgid "/me <message>: send an ACTION message to the current conversation" msgstr "/me <message>, envía unha mensaxe ACTION á conversa actual" -#: ../libempathy-gtk/empathy-chat.c:963 +#: ../libempathy-gtk/empathy-chat.c:979 msgid "" "/say <message>: send <message> to the current conversation. This is used to " "send a message starting with a '/'. For example: \"/say /join is used to " @@ -1440,7 +1450,7 @@ msgstr "" "unha mensaxe que comeza cunha '/'. Por exemplo: \"/say /join úsase para " "unirse a unha nova sala de conversa\"" -#: ../libempathy-gtk/empathy-chat.c:968 +#: ../libempathy-gtk/empathy-chat.c:984 msgid "" "/help [<command>]: show all supported commands. If <command> is defined, " "show its usage." @@ -1448,109 +1458,119 @@ msgstr "" "/help [<command>], mostra todas as ordes admitidas. Se <command> está " "definida, mostra o seu uso." -#: ../libempathy-gtk/empathy-chat.c:978 +#: ../libempathy-gtk/empathy-chat.c:994 #, c-format msgid "Usage: %s" msgstr "Uso: %s" -#: ../libempathy-gtk/empathy-chat.c:1017 +#: ../libempathy-gtk/empathy-chat.c:1033 msgid "Unknown command" msgstr "Orde descoñecida" -#: ../libempathy-gtk/empathy-chat.c:1143 +#: ../libempathy-gtk/empathy-chat.c:1159 msgid "Unknown command; see /help for the available commands" msgstr "Orde descoñecida, vexa /help para obter as ordes dispoñíbeis" -#: ../libempathy-gtk/empathy-chat.c:1281 +#. translators: error used when user doesn't have enough credit on his +#. * account to send the message. +#: ../libempathy-gtk/empathy-chat.c:1299 +msgid "insufficient balance to send message" +msgstr "non ten balance suficiente para enviar a mensaxe" + +#: ../libempathy-gtk/empathy-chat.c:1301 +msgid "not capable" +msgstr "non é posíbel" + +#: ../libempathy-gtk/empathy-chat.c:1308 msgid "offline" msgstr "desconectado" -#: ../libempathy-gtk/empathy-chat.c:1284 +#: ../libempathy-gtk/empathy-chat.c:1311 msgid "invalid contact" msgstr "contacto incorrecto" -#: ../libempathy-gtk/empathy-chat.c:1287 +#: ../libempathy-gtk/empathy-chat.c:1314 msgid "permission denied" msgstr "permiso denegado" # rever -#: ../libempathy-gtk/empathy-chat.c:1290 +#: ../libempathy-gtk/empathy-chat.c:1317 msgid "too long message" msgstr "a mensaxe é demasiado longa" -#: ../libempathy-gtk/empathy-chat.c:1293 +#: ../libempathy-gtk/empathy-chat.c:1320 msgid "not implemented" msgstr "non implementado" -#: ../libempathy-gtk/empathy-chat.c:1297 +#: ../libempathy-gtk/empathy-chat.c:1324 msgid "unknown" msgstr "descoñecido" # rever -#: ../libempathy-gtk/empathy-chat.c:1302 +#: ../libempathy-gtk/empathy-chat.c:1330 #, c-format msgid "Error sending message '%s': %s" msgstr "Produciuse un erro ao enviar a mensaxe '%s': %s" # rever -#: ../libempathy-gtk/empathy-chat.c:1306 +#: ../libempathy-gtk/empathy-chat.c:1334 #, c-format msgid "Error sending message: %s" msgstr "Produciuse un erro ao enviar a mensaxe: %s" -#: ../libempathy-gtk/empathy-chat.c:1367 ../src/empathy-chat-window.c:717 +#: ../libempathy-gtk/empathy-chat.c:1395 ../src/empathy-chat-window.c:760 msgid "Topic:" msgstr "Asunto:" # rever -#: ../libempathy-gtk/empathy-chat.c:1379 +#: ../libempathy-gtk/empathy-chat.c:1407 #, c-format msgid "Topic set to: %s" msgstr "Cambiouse o asunto a: %s" # rever -#: ../libempathy-gtk/empathy-chat.c:1381 +#: ../libempathy-gtk/empathy-chat.c:1409 msgid "No topic defined" msgstr "Non se definiu un asunto" -#: ../libempathy-gtk/empathy-chat.c:1888 +#: ../libempathy-gtk/empathy-chat.c:1916 msgid "(No Suggestions)" msgstr "(Sen suxestións)" #. translators: %s is the selected word -#: ../libempathy-gtk/empathy-chat.c:1956 +#: ../libempathy-gtk/empathy-chat.c:1984 #, c-format msgid "Add '%s' to Dictionary" msgstr "Engadir «%s» ao dicionario" #. translators: first %s is the selected word, #. * second %s is the language name of the target dictionary -#: ../libempathy-gtk/empathy-chat.c:1993 +#: ../libempathy-gtk/empathy-chat.c:2021 #, c-format msgid "Add '%s' to %s Dictionary" msgstr "Engadir «%s» ao dicionario de %s" -#: ../libempathy-gtk/empathy-chat.c:2050 +#: ../libempathy-gtk/empathy-chat.c:2078 msgid "Insert Smiley" msgstr "Inserir unha emoticona" #. send button -#: ../libempathy-gtk/empathy-chat.c:2068 +#: ../libempathy-gtk/empathy-chat.c:2096 #: ../libempathy-gtk/empathy-ui-utils.c:1808 msgid "_Send" msgstr "_Enviar" #. Spelling suggestions -#: ../libempathy-gtk/empathy-chat.c:2103 +#: ../libempathy-gtk/empathy-chat.c:2131 msgid "_Spelling Suggestions" msgstr "Suxestións de _ortografía" -#: ../libempathy-gtk/empathy-chat.c:2192 +#: ../libempathy-gtk/empathy-chat.c:2220 msgid "Failed to retrieve recent logs" msgstr "Produciuse un fallo ao obter os rexistros recentes" # rever -#: ../libempathy-gtk/empathy-chat.c:2303 +#: ../libempathy-gtk/empathy-chat.c:2331 #, c-format msgid "%s has disconnected" msgstr "%s desconectou" @@ -1558,12 +1578,12 @@ msgstr "%s desconectou" #. translators: reverse the order of these arguments #. * if the kicked should come before the kicker in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2310 +#: ../libempathy-gtk/empathy-chat.c:2338 #, c-format msgid "%1$s was kicked by %2$s" msgstr "%1$s foi expulsado por %2$s" -#: ../libempathy-gtk/empathy-chat.c:2313 +#: ../libempathy-gtk/empathy-chat.c:2341 #, c-format msgid "%s was kicked" msgstr "%s foi expulsado" @@ -1571,17 +1591,17 @@ msgstr "%s foi expulsado" #. translators: reverse the order of these arguments #. * if the banned should come before the banner in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2321 +#: ../libempathy-gtk/empathy-chat.c:2349 #, c-format msgid "%1$s was banned by %2$s" msgstr "%1$s foi vetado por %2$s" -#: ../libempathy-gtk/empathy-chat.c:2324 +#: ../libempathy-gtk/empathy-chat.c:2352 #, c-format msgid "%s was banned" msgstr "%s foi excluído" -#: ../libempathy-gtk/empathy-chat.c:2328 +#: ../libempathy-gtk/empathy-chat.c:2356 #, c-format msgid "%s has left the room" msgstr "%s deixou a sala" @@ -1591,95 +1611,102 @@ msgstr "%s deixou a sala" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:2337 +#: ../libempathy-gtk/empathy-chat.c:2365 #, c-format msgid " (%s)" msgstr " (%s)" # rever -#: ../libempathy-gtk/empathy-chat.c:2362 +#: ../libempathy-gtk/empathy-chat.c:2390 #, c-format msgid "%s has joined the room" msgstr "%s uniuse á sala" -#: ../libempathy-gtk/empathy-chat.c:2387 +#: ../libempathy-gtk/empathy-chat.c:2415 #, c-format msgid "%s is now known as %s" msgstr "%s agora é coñecido como %s" -#: ../libempathy-gtk/empathy-chat.c:2526 +#: ../libempathy-gtk/empathy-chat.c:2554 #: ../src/empathy-streamed-media-window.c:1957 -#: ../src/empathy-event-manager.c:1126 +#: ../src/empathy-event-manager.c:1116 msgid "Disconnected" msgstr "Desconectado" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3158 +#: ../libempathy-gtk/empathy-chat.c:3202 msgid "Would you like to store this password?" msgstr "Desexa gardar este contrasinal?" -#: ../libempathy-gtk/empathy-chat.c:3164 +#: ../libempathy-gtk/empathy-chat.c:3208 msgid "Remember" msgstr "Lembrar" -#: ../libempathy-gtk/empathy-chat.c:3174 +#: ../libempathy-gtk/empathy-chat.c:3218 msgid "Not now" msgstr "Agora non" -#: ../libempathy-gtk/empathy-chat.c:3218 +#: ../libempathy-gtk/empathy-chat.c:3262 msgid "Retry" msgstr "Reintentar" -#: ../libempathy-gtk/empathy-chat.c:3222 +#: ../libempathy-gtk/empathy-chat.c:3266 msgid "Wrong password; please try again:" msgstr "O contrasinal é incorrecto, ténteo de novo:" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3339 +#: ../libempathy-gtk/empathy-chat.c:3383 msgid "This room is protected by a password:" msgstr "Esta sala está protexida por un contrasinal:" -#: ../libempathy-gtk/empathy-chat.c:3366 +#: ../libempathy-gtk/empathy-chat.c:3410 msgid "Join" msgstr "Unirse" -#: ../libempathy-gtk/empathy-chat.c:3536 ../src/empathy-event-manager.c:1147 +#: ../libempathy-gtk/empathy-chat.c:3602 ../src/empathy-event-manager.c:1137 msgid "Connected" msgstr "Conectado" -#: ../libempathy-gtk/empathy-chat.c:3589 +#: ../libempathy-gtk/empathy-chat.c:3657 #: ../libempathy-gtk/empathy-log-window.c:650 msgid "Conversation" msgstr "Conversa" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:422 +#. Translators: this string is a something like +#. * "Escher Cat (SMS)" +#: ../libempathy-gtk/empathy-chat.c:3662 +#, c-format +msgid "%s (SMS)" +msgstr "%s (SMS)" + +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:423 msgid "Unknown or invalid identifier" msgstr "Identificador descoñecido ou non válido" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:424 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:425 msgid "Contact blocking temporarily unavailable" msgstr "Bloqueo de contactos non dispoñíbel temporalmente" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:426 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:427 msgid "Contact blocking unavailable" msgstr "Bloqueo de contactos non dispoñíbel" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:428 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:429 msgid "Permission Denied" msgstr "Permiso denegado" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:432 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:433 msgid "Could not block contact" msgstr "Non foi posíbel bloquear o contacto" # rever -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:701 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:702 msgid "Edit Blocked Contacts" msgstr "Editar os contactos bloqueados" #. Account and Identifier #: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1 -#: ../libempathy-gtk/empathy-contact-search-dialog.c:520 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:521 #: ../libempathy-gtk/empathy-contact-widget.ui.h:2 #: ../libempathy-gtk/empathy-individual-widget.c:1479 #: ../libempathy-gtk/empathy-contact-selector-dialog.ui.h:1 @@ -1690,13 +1717,13 @@ msgstr "Conta:" #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:320 -#: ../libempathy-gtk/empathy-theme-adium.c:962 +#: ../libempathy-gtk/empathy-theme-adium.c:996 msgid "_Copy Link Address" msgstr "_Copiar o enderezo da ligazón" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:327 -#: ../libempathy-gtk/empathy-theme-adium.c:969 +#: ../libempathy-gtk/empathy-theme-adium.c:1003 msgid "_Open Link" msgstr "_Abrir a ligazón" @@ -1770,41 +1797,41 @@ msgstr "Persoas favoritas" # rever #: ../libempathy-gtk/empathy-contact-list-view.c:1987 -#: ../libempathy-gtk/empathy-individual-view.c:2343 +#: ../libempathy-gtk/empathy-individual-view.c:2386 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "Está seguro de que quere eliminar o grupo '%s'?" # rever #: ../libempathy-gtk/empathy-contact-list-view.c:1989 -#: ../libempathy-gtk/empathy-individual-view.c:2346 +#: ../libempathy-gtk/empathy-individual-view.c:2389 msgid "Removing group" msgstr "Eliminando o grupo" #. Remove #: ../libempathy-gtk/empathy-contact-list-view.c:2038 #: ../libempathy-gtk/empathy-contact-list-view.c:2115 -#: ../libempathy-gtk/empathy-individual-view.c:2401 -#: ../libempathy-gtk/empathy-individual-view.c:2594 +#: ../libempathy-gtk/empathy-individual-view.c:2444 +#: ../libempathy-gtk/empathy-individual-view.c:2637 #: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Remove" msgstr "_Eliminar" # rever #: ../libempathy-gtk/empathy-contact-list-view.c:2068 -#: ../libempathy-gtk/empathy-individual-view.c:2465 +#: ../libempathy-gtk/empathy-individual-view.c:2508 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "Está seguro de quere eliminar o contacto '%s'?" #: ../libempathy-gtk/empathy-contact-list-view.c:2070 -#: ../libempathy-gtk/empathy-individual-view.c:2486 +#: ../libempathy-gtk/empathy-individual-view.c:2529 msgid "Removing contact" msgstr "Eliminando o contacto" # rever #: ../libempathy-gtk/empathy-contact-menu.c:219 -#: ../src/empathy-main-window.ui.h:13 +#: ../src/empathy-main-window.ui.h:14 msgid "_Add Contact…" msgstr "Eng_adir un contacto…" @@ -1814,50 +1841,50 @@ msgid "_Block Contact" msgstr "_Bloquear contacto" #: ../libempathy-gtk/empathy-contact-menu.c:328 -#: ../libempathy-gtk/empathy-individual-menu.c:517 -#: ../src/empathy-main-window.ui.h:15 +#: ../libempathy-gtk/empathy-individual-menu.c:536 +#: ../src/empathy-main-window.ui.h:16 msgid "_Chat" msgstr "_Conversa" #: ../libempathy-gtk/empathy-contact-menu.c:359 -#: ../libempathy-gtk/empathy-individual-menu.c:560 +#: ../libempathy-gtk/empathy-individual-menu.c:625 msgctxt "menu item" msgid "_Audio Call" msgstr "_Audiochamada" #: ../libempathy-gtk/empathy-contact-menu.c:390 -#: ../libempathy-gtk/empathy-individual-menu.c:602 +#: ../libempathy-gtk/empathy-individual-menu.c:667 msgctxt "menu item" msgid "_Video Call" msgstr "_Videochamada" # rever #: ../libempathy-gtk/empathy-contact-menu.c:436 -#: ../libempathy-gtk/empathy-individual-menu.c:645 -#: ../src/empathy-main-window.ui.h:26 +#: ../libempathy-gtk/empathy-individual-menu.c:710 +#: ../src/empathy-main-window.ui.h:27 msgid "_Previous Conversations" msgstr "Conversas _previas" #: ../libempathy-gtk/empathy-contact-menu.c:458 -#: ../libempathy-gtk/empathy-individual-menu.c:686 +#: ../libempathy-gtk/empathy-individual-menu.c:751 msgid "Send File" msgstr "Enviar ficheiro" #: ../libempathy-gtk/empathy-contact-menu.c:481 -#: ../libempathy-gtk/empathy-individual-menu.c:728 +#: ../libempathy-gtk/empathy-individual-menu.c:793 msgid "Share My Desktop" msgstr "Compartir o meu escritorio" # rever #: ../libempathy-gtk/empathy-contact-menu.c:521 -#: ../libempathy-gtk/empathy-contact-widget.c:1761 -#: ../libempathy-gtk/empathy-individual-menu.c:763 +#: ../libempathy-gtk/empathy-contact-widget.c:1751 +#: ../libempathy-gtk/empathy-individual-menu.c:828 #: ../libempathy-gtk/empathy-individual-widget.c:1370 msgid "Favorite" msgstr "Favorito" #: ../libempathy-gtk/empathy-contact-menu.c:550 -#: ../libempathy-gtk/empathy-individual-menu.c:791 +#: ../libempathy-gtk/empathy-individual-menu.c:856 msgid "Infor_mation" msgstr "Infor_mación" @@ -1868,34 +1895,34 @@ msgstr "_Editar" # rever #: ../libempathy-gtk/empathy-contact-menu.c:650 -#: ../libempathy-gtk/empathy-individual-menu.c:972 -#: ../src/empathy-chat-window.c:935 +#: ../libempathy-gtk/empathy-individual-menu.c:1037 +#: ../src/empathy-chat-window.c:986 msgid "Inviting you to this room" msgstr "Invítao a vostede a esta sala" # rever #: ../libempathy-gtk/empathy-contact-menu.c:681 -#: ../libempathy-gtk/empathy-individual-menu.c:1019 +#: ../libempathy-gtk/empathy-individual-menu.c:1084 msgid "_Invite to Chat Room" msgstr "Conv_idar a sala de conversa" # rever #. Title -#: ../libempathy-gtk/empathy-contact-search-dialog.c:513 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:514 msgid "Search contacts" msgstr "Buscar contactos" -#: ../libempathy-gtk/empathy-contact-search-dialog.c:543 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:544 msgid "Search: " msgstr "Buscar:" # rever -#: ../libempathy-gtk/empathy-contact-search-dialog.c:601 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:602 msgid "_Add Contact" msgstr "_Engadir contacto" # rever -#: ../libempathy-gtk/empathy-contact-search-dialog.c:619 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:620 msgid "No contacts found" msgstr "Non se atoparon contactos" @@ -2050,8 +2077,8 @@ msgstr "Latitude:" msgid "Altitude:" msgstr "Altitude:" -#: ../libempathy-gtk/empathy-contact-widget.c:871 -#: ../libempathy-gtk/empathy-contact-widget.c:886 +#: ../libempathy-gtk/empathy-contact-widget.c:861 +#: ../libempathy-gtk/empathy-contact-widget.c:876 #: ../libempathy-gtk/empathy-individual-widget.c:616 #: ../libempathy-gtk/empathy-individual-widget.c:631 #: ../src/empathy-preferences.ui.h:12 @@ -2059,25 +2086,25 @@ msgid "Location" msgstr "Localización" #. translators: format is "Location, $date" -#: ../libempathy-gtk/empathy-contact-widget.c:888 +#: ../libempathy-gtk/empathy-contact-widget.c:878 #: ../libempathy-gtk/empathy-individual-widget.c:633 #, c-format msgid "%s, %s" msgstr "%s, %s" -#: ../libempathy-gtk/empathy-contact-widget.c:940 +#: ../libempathy-gtk/empathy-contact-widget.c:930 #: ../libempathy-gtk/empathy-individual-widget.c:682 msgid "%B %e, %Y at %R UTC" msgstr "%B %e, %Y de %R UTC" # rever -#: ../libempathy-gtk/empathy-contact-widget.c:1022 +#: ../libempathy-gtk/empathy-contact-widget.c:1012 #: ../libempathy-gtk/empathy-individual-widget.c:917 msgid "Save Avatar" msgstr "Gardar o avatar" # rever -#: ../libempathy-gtk/empathy-contact-widget.c:1078 +#: ../libempathy-gtk/empathy-contact-widget.c:1068 #: ../libempathy-gtk/empathy-individual-widget.c:975 msgid "Unable to save avatar" msgstr "Non foi posíbel gardar o avatar" @@ -2150,7 +2177,7 @@ msgid "Select" msgstr "Seleccionar" #: ../libempathy-gtk/empathy-groups-widget.c:408 -#: ../src/empathy-main-window.c:1436 +#: ../src/empathy-main-window.c:1770 msgid "Group" msgstr "Grupo" @@ -2193,7 +2220,13 @@ msgstr "Ligaranse entre si os contactos seleccionados na lista da esquerda" msgid "%s (%s)" msgstr "%s (%s)" -#: ../libempathy-gtk/empathy-individual-menu.c:839 +#. add an SMS button +#: ../libempathy-gtk/empathy-individual-menu.c:582 +#: ../libempathy-gtk/empathy-new-message-dialog.c:248 +msgid "_SMS" +msgstr "_SMS" + +#: ../libempathy-gtk/empathy-individual-menu.c:904 msgctxt "Edit individual (contextual menu)" msgid "_Edit" msgstr "_Editar" @@ -2201,16 +2234,16 @@ msgstr "_Editar" # rever #. Translators: this is a verb meaning "to connect two contacts together #. * to form a meta-contact". -#: ../libempathy-gtk/empathy-individual-menu.c:865 +#: ../libempathy-gtk/empathy-individual-menu.c:930 msgctxt "Link individual (contextual menu)" msgid "_Link Contacts…" msgstr "_Ligar contactos…" -#: ../libempathy-gtk/empathy-individual-view.c:2308 +#: ../libempathy-gtk/empathy-individual-view.c:2351 msgid "Delete and _Block" msgstr "Eliminar e _bloquear" -#: ../libempathy-gtk/empathy-individual-view.c:2474 +#: ../libempathy-gtk/empathy-individual-view.c:2517 #, c-format msgid "" "Do you really want to remove the linked contact '%s'? Note that this will " @@ -2345,12 +2378,12 @@ msgid "Contact ID:" msgstr "ID do contacto:" #. add chat button -#: ../libempathy-gtk/empathy-new-message-dialog.c:171 +#: ../libempathy-gtk/empathy-new-message-dialog.c:258 msgid "C_hat" msgstr "Con_versa" #. Tweak the dialog -#: ../libempathy-gtk/empathy-new-message-dialog.c:181 +#: ../libempathy-gtk/empathy-new-message-dialog.c:277 msgid "New Conversation" msgstr "Conversa nova" @@ -2503,19 +2536,23 @@ msgstr "Gardar a mensaxe de estado _novo" msgid "Saved Status Messages" msgstr "Mensaxes de estado gardados" -#: ../libempathy-gtk/empathy-theme-manager.c:67 +#: ../libempathy-gtk/empathy-theme-adium.c:1462 +msgid "Normal" +msgstr "Normal" + +#: ../libempathy-gtk/empathy-theme-manager.c:68 msgid "Classic" msgstr "Clásico" -#: ../libempathy-gtk/empathy-theme-manager.c:68 +#: ../libempathy-gtk/empathy-theme-manager.c:69 msgid "Simple" msgstr "Simple" -#: ../libempathy-gtk/empathy-theme-manager.c:69 +#: ../libempathy-gtk/empathy-theme-manager.c:70 msgid "Clean" msgstr "Limpo" -#: ../libempathy-gtk/empathy-theme-manager.c:70 +#: ../libempathy-gtk/empathy-theme-manager.c:71 msgid "Blue" msgstr "Azul" @@ -2992,8 +3029,8 @@ msgid "Select the accounts you want to import:" msgstr "Seleccione as contas que quere importar:" #: ../src/empathy-account-assistant.c:813 -#: ../src/empathy-new-chatroom-dialog.c:562 -#: ../src/empathy-new-chatroom-dialog.c:563 +#: ../src/empathy-new-chatroom-dialog.c:555 +#: ../src/empathy-new-chatroom-dialog.c:556 msgid "Yes" msgstr "Si" @@ -3116,7 +3153,7 @@ msgid "This will not remove your account on the server." msgstr "Isto non eliminará a súa conta no servidor." # rever -#: ../src/empathy-accounts-dialog.c:1434 +#: ../src/empathy-accounts-dialog.c:1432 msgid "" "You are about to select another account, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -3125,16 +3162,16 @@ msgstr "" "Está seguro de que quere proceder?" #. Menu items: to enabled/disable the account -#: ../src/empathy-accounts-dialog.c:1652 +#: ../src/empathy-accounts-dialog.c:1643 msgid "_Enable" msgstr "_Activar" -#: ../src/empathy-accounts-dialog.c:1653 +#: ../src/empathy-accounts-dialog.c:1644 msgid "_Disable" msgstr "_Desactivar" # rever -#: ../src/empathy-accounts-dialog.c:2174 +#: ../src/empathy-accounts-dialog.c:2154 msgid "" "You are about to close the window, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -3174,11 +3211,11 @@ msgid "_Import…" msgstr "_Importar…" # rever -#: ../src/empathy-auth-client.c:250 +#: ../src/empathy-auth-client.c:249 msgid " - Empathy authentication client" msgstr "- Cliente de autenticación Empathy" -#: ../src/empathy-auth-client.c:266 +#: ../src/empathy-auth-client.c:265 msgid "Empathy authentication client" msgstr "Cliente de autenticación Empathy" @@ -3468,40 +3505,52 @@ msgstr "Previsualizar o vídeo" msgid "_Call" msgstr "_Chamar" -#: ../src/empathy-call-window.ui.h:25 ../src/empathy-main-window.ui.h:29 +#: ../src/empathy-call-window.ui.h:25 ../src/empathy-main-window.ui.h:30 msgid "_View" msgstr "_Ver" -#: ../src/empathy-chat-window.c:474 ../src/empathy-chat-window.c:494 +#: ../src/empathy-chat-window.c:480 ../src/empathy-chat-window.c:500 #, c-format msgid "%s (%d unread)" msgid_plural "%s (%d unread)" msgstr[0] "%s (%d non lido)" msgstr[1] "%s (%d non lidos)" -#: ../src/empathy-chat-window.c:486 +#: ../src/empathy-chat-window.c:492 #, c-format msgid "%s (and %u other)" msgid_plural "%s (and %u others)" msgstr[0] "%s (e outro %u)" msgstr[1] "%s (e outros %u)" -#: ../src/empathy-chat-window.c:502 +#: ../src/empathy-chat-window.c:508 #, c-format msgid "%s (%d unread from others)" msgid_plural "%s (%d unread from others)" msgstr[0] "%s (%d non lido de outros)" msgstr[1] "%s (%d non lidos de outros)" -#: ../src/empathy-chat-window.c:511 +#: ../src/empathy-chat-window.c:517 #, c-format msgid "%s (%d unread from all)" msgid_plural "%s (%d unread from all)" msgstr[0] "%s (%d non lido de todos)" msgstr[1] "%s (%d non lidos de todos)" +#: ../src/empathy-chat-window.c:732 +msgid "SMS:" +msgstr "SMS:" + +# rever +#: ../src/empathy-chat-window.c:742 +#, c-format +msgid "Sending %d message" +msgid_plural "Sending %d messages" +msgstr[0] "Enviando %d mensaxe." +msgstr[1] "Enviando %d mensaxes." + # rever -#: ../src/empathy-chat-window.c:721 +#: ../src/empathy-chat-window.c:764 msgid "Typing a message." msgstr "Escribindo unha mensaxe." @@ -3538,7 +3587,7 @@ msgstr "Mover a lapela á _dereita" msgid "Notify for All Messages" msgstr "Notificar todas as mensaxes" -#: ../src/empathy-chat-window.ui.h:9 ../src/empathy-main-window.ui.h:17 +#: ../src/empathy-chat-window.ui.h:9 ../src/empathy-main-window.ui.h:18 msgid "_Contents" msgstr "_Contidos" @@ -3550,7 +3599,7 @@ msgstr "_Conversa" msgid "_Detach Tab" msgstr "Des_prender lapela" -#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:19 +#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:20 msgid "_Edit" msgstr "_Editar" @@ -3559,7 +3608,7 @@ msgstr "_Editar" msgid "_Favorite Chat Room" msgstr "Sala de conversa _favorita" -#: ../src/empathy-chat-window.ui.h:14 ../src/empathy-main-window.ui.h:21 +#: ../src/empathy-chat-window.ui.h:14 ../src/empathy-main-window.ui.h:22 msgid "_Help" msgstr "A_xuda" @@ -3604,100 +3653,100 @@ msgid "Manage Favorite Rooms" msgstr "Xestionar as salas preferidas" # rever -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:504 msgid "Incoming video call" msgstr "Chamada de vídeo entrante" # rever -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:504 msgid "Incoming call" msgstr "Chamada entrante" # rever -#: ../src/empathy-event-manager.c:511 +#: ../src/empathy-event-manager.c:508 #, c-format msgid "%s is video calling you. Do you want to answer?" msgstr "%s solicítalle unha videochamada. Desexa responderlle?" # rever -#: ../src/empathy-event-manager.c:512 +#: ../src/empathy-event-manager.c:509 #, c-format msgid "%s is calling you. Do you want to answer?" msgstr "%s estao chamando. Quérelle responder?" -#: ../src/empathy-event-manager.c:515 ../src/empathy-event-manager.c:667 +#: ../src/empathy-event-manager.c:512 ../src/empathy-event-manager.c:661 #, c-format msgid "Incoming call from %s" msgstr "Chamada entrante de %s" -#: ../src/empathy-event-manager.c:540 +#: ../src/empathy-event-manager.c:537 msgid "_Reject" msgstr "_Rexeitar" # rever -#: ../src/empathy-event-manager.c:546 +#: ../src/empathy-event-manager.c:543 msgid "_Answer" msgstr "_Responder" -#: ../src/empathy-event-manager.c:667 +#: ../src/empathy-event-manager.c:661 #, c-format msgid "Incoming video call from %s" msgstr "Videochamada entrante de %s" # rever -#: ../src/empathy-event-manager.c:744 +#: ../src/empathy-event-manager.c:734 msgid "Room invitation" msgstr "Convite para unha sala" # rever -#: ../src/empathy-event-manager.c:746 +#: ../src/empathy-event-manager.c:736 #, c-format msgid "Invitation to join %s" msgstr "Invitación a unirse a %s" # rever -#: ../src/empathy-event-manager.c:753 +#: ../src/empathy-event-manager.c:743 #, c-format msgid "%s is inviting you to join %s" msgstr "%s estao convidando a unirse a %s" -#: ../src/empathy-event-manager.c:761 +#: ../src/empathy-event-manager.c:751 msgid "_Decline" msgstr "_Declinar" -#: ../src/empathy-event-manager.c:766 +#: ../src/empathy-event-manager.c:756 #: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "_Unirse" # rever -#: ../src/empathy-event-manager.c:793 +#: ../src/empathy-event-manager.c:783 #, c-format msgid "%s invited you to join %s" msgstr "%s convidouno a unirse a %s" # rever -#: ../src/empathy-event-manager.c:799 +#: ../src/empathy-event-manager.c:789 #, c-format msgid "You have been invited to join %s" msgstr "Vostede foi convidado a unirse a %s" # rever -#: ../src/empathy-event-manager.c:850 +#: ../src/empathy-event-manager.c:840 #, c-format msgid "Incoming file transfer from %s" msgstr "Transferencia de ficheiro entrante de %s" -#: ../src/empathy-event-manager.c:1020 ../src/empathy-main-window.c:370 +#: ../src/empathy-event-manager.c:1010 ../src/empathy-main-window.c:377 msgid "Password required" msgstr "Requírese o contrasinal" -#: ../src/empathy-event-manager.c:1076 +#: ../src/empathy-event-manager.c:1066 #, c-format msgid "%s would like permission to see when you are online" msgstr "%s solicita permiso para ver cando vostede está dispoñíbel" -#: ../src/empathy-event-manager.c:1080 +#: ../src/empathy-event-manager.c:1070 #, c-format msgid "" "\n" @@ -3793,7 +3842,7 @@ msgid "File transfer completed" msgstr "Transferencia de ficheiros rematada" # rever -#: ../src/empathy-ft-manager.c:616 ../src/empathy-ft-manager.c:783 +#: ../src/empathy-ft-manager.c:616 ../src/empathy-ft-manager.c:780 msgid "Waiting for the other participant's response" msgstr "Agardando pola resposta do outro participante" @@ -3807,15 +3856,15 @@ msgstr "Verificando a integridade de «%s»" msgid "Hashing \"%s\"" msgstr "Aplicando o hash «%s»" -#: ../src/empathy-ft-manager.c:1029 +#: ../src/empathy-ft-manager.c:1026 msgid "%" msgstr "%" -#: ../src/empathy-ft-manager.c:1041 +#: ../src/empathy-ft-manager.c:1038 msgid "File" msgstr "Ficheiro" -#: ../src/empathy-ft-manager.c:1063 +#: ../src/empathy-ft-manager.c:1060 msgid "Remaining" msgstr "Restantes" @@ -3857,41 +3906,57 @@ msgstr "Protocolo" msgid "Source" msgstr "Orixe" -#: ../src/empathy-main-window.c:387 +#: ../src/empathy-main-window.c:394 msgid "Provide Password" msgstr "Escriba o seu contrasinal" -#: ../src/empathy-main-window.c:393 +#: ../src/empathy-main-window.c:400 msgid "Disconnect" msgstr "Desconectar" # rever -#: ../src/empathy-main-window.c:533 +#: ../src/empathy-main-window.c:540 msgid "No match found" msgstr "Non se atopou ningunha coincidencia." -#: ../src/empathy-main-window.c:688 +#: ../src/empathy-main-window.c:695 msgid "Reconnect" msgstr "Reconectar" -#: ../src/empathy-main-window.c:694 +#: ../src/empathy-main-window.c:701 msgid "Edit Account" msgstr "Editar a conta" -#: ../src/empathy-main-window.c:700 +#: ../src/empathy-main-window.c:707 msgid "Close" msgstr "Pechar" -#: ../src/empathy-main-window.c:1418 +#. Translators: this string will be something like: +#. * Top up My Account ($1.23)..." +#: ../src/empathy-main-window.c:849 +#, c-format +msgid "Top up %s (%s)..." +msgstr "Recargar %s (%s)…" + +#: ../src/empathy-main-window.c:924 +msgid "Top up account credit" +msgstr "Recargar o saldo da conta" + +#. top up button +#: ../src/empathy-main-window.c:999 +msgid "Top Up..." +msgstr "Recargar…" + +#: ../src/empathy-main-window.c:1752 msgid "Contact" msgstr "Contacto" -#: ../src/empathy-main-window.c:1765 +#: ../src/empathy-main-window.c:2101 msgid "Contact List" msgstr "Lista de contactos" # rever -#: ../src/empathy-main-window.c:1881 +#: ../src/empathy-main-window.c:2219 msgid "Show and edit accounts" msgstr "Mostrar e editar contas" @@ -3900,92 +3965,96 @@ msgid "Contacts on a _Map" msgstr "Contactos no mapa" #: ../src/empathy-main-window.ui.h:2 +msgid "Credit Balance" +msgstr "Crédito" + +#: ../src/empathy-main-window.ui.h:3 msgid "Find in Contact _List" msgstr "_Buscar na lista de contactos" # rever -#: ../src/empathy-main-window.ui.h:3 +#: ../src/empathy-main-window.ui.h:4 msgid "Join _Favorites" msgstr "Unirse a pre_feridos" -#: ../src/empathy-main-window.ui.h:4 +#: ../src/empathy-main-window.ui.h:5 msgid "Manage Favorites" msgstr "Xestionar as preferidas" -#: ../src/empathy-main-window.ui.h:5 +#: ../src/empathy-main-window.ui.h:6 msgid "N_ormal Size" msgstr "Tamañ_o normal" -#: ../src/empathy-main-window.ui.h:6 ../src/empathy-status-icon.ui.h:1 +#: ../src/empathy-main-window.ui.h:7 ../src/empathy-status-icon.ui.h:1 msgid "New _Call…" msgstr "Nova _chamada…" -#: ../src/empathy-main-window.ui.h:7 +#: ../src/empathy-main-window.ui.h:8 msgid "Normal Size With _Avatars" msgstr "Tamaño normal con _avatares" -#: ../src/empathy-main-window.ui.h:8 +#: ../src/empathy-main-window.ui.h:9 msgid "P_references" msgstr "P_referencias" -#: ../src/empathy-main-window.ui.h:9 +#: ../src/empathy-main-window.ui.h:10 msgid "Show P_rotocols" msgstr "Mostrar os p_rotocolos" # rever -#: ../src/empathy-main-window.ui.h:10 +#: ../src/empathy-main-window.ui.h:11 msgid "Sort by _Name" msgstr "Ordenar por _nome" # rever -#: ../src/empathy-main-window.ui.h:11 +#: ../src/empathy-main-window.ui.h:12 msgid "Sort by _Status" msgstr "Ordenar por es_tado" -#: ../src/empathy-main-window.ui.h:12 +#: ../src/empathy-main-window.ui.h:13 msgid "_Accounts" msgstr "_Contas" # rever -#: ../src/empathy-main-window.ui.h:14 +#: ../src/empathy-main-window.ui.h:15 msgid "_Blocked Contacts" msgstr "Contactos _bloqueados" -#: ../src/empathy-main-window.ui.h:16 +#: ../src/empathy-main-window.ui.h:17 msgid "_Compact Size" msgstr "Ta_maño compacto" -#: ../src/empathy-main-window.ui.h:18 +#: ../src/empathy-main-window.ui.h:19 msgid "_Debug" msgstr "_Depuración" -#: ../src/empathy-main-window.ui.h:20 +#: ../src/empathy-main-window.ui.h:21 msgid "_File Transfers" msgstr "Trans_ferencias de ficheiros" -#: ../src/empathy-main-window.ui.h:22 +#: ../src/empathy-main-window.ui.h:23 msgid "_Join…" msgstr "_Unirse…" -#: ../src/empathy-main-window.ui.h:23 ../src/empathy-status-icon.ui.h:3 +#: ../src/empathy-main-window.ui.h:24 ../src/empathy-status-icon.ui.h:3 msgid "_New Conversation…" msgstr "_Nova conversa…" # rever -#: ../src/empathy-main-window.ui.h:24 +#: ../src/empathy-main-window.ui.h:25 msgid "_Offline Contacts" msgstr "Mostrar os contactos _desconectados" -#: ../src/empathy-main-window.ui.h:25 +#: ../src/empathy-main-window.ui.h:26 msgid "_Personal Information" msgstr "Información _persoal" -#: ../src/empathy-main-window.ui.h:27 +#: ../src/empathy-main-window.ui.h:28 msgid "_Room" msgstr "Sa_la" # rever -#: ../src/empathy-main-window.ui.h:28 +#: ../src/empathy-main-window.ui.h:29 msgid "_Search for Contacts…" msgstr "_Buscar contactos…" @@ -4000,7 +4069,7 @@ msgstr "Membros" #. Translators: Room/Join's roomlist tooltip. Parameters are a channel name, #. yes/no, yes/no and a number. -#: ../src/empathy-new-chatroom-dialog.c:560 +#: ../src/empathy-new-chatroom-dialog.c:553 #, c-format msgid "" "%s\n" @@ -4013,16 +4082,16 @@ msgstr "" "Contrasinal requirido: %s\n" "Membros: %s" -#: ../src/empathy-new-chatroom-dialog.c:562 -#: ../src/empathy-new-chatroom-dialog.c:563 +#: ../src/empathy-new-chatroom-dialog.c:555 +#: ../src/empathy-new-chatroom-dialog.c:556 msgid "No" msgstr "Non" -#: ../src/empathy-new-chatroom-dialog.c:591 +#: ../src/empathy-new-chatroom-dialog.c:584 msgid "Could not start room listing" msgstr "Non foi posíbel arrincar a lista da sala" -#: ../src/empathy-new-chatroom-dialog.c:601 +#: ../src/empathy-new-chatroom-dialog.c:594 msgid "Could not stop room listing" msgstr "Non foi posíbel deter a lista da sala" @@ -4060,43 +4129,84 @@ msgstr "Lista de _salas" msgid "_Room:" msgstr "Sa_la:" -#: ../src/empathy-preferences.c:139 +#: ../src/empathy-preferences.c:147 msgid "Message received" msgstr "Mensaxe recibida" -#: ../src/empathy-preferences.c:140 +#: ../src/empathy-preferences.c:148 msgid "Message sent" msgstr "Mensaxe enviada" -#: ../src/empathy-preferences.c:141 +#: ../src/empathy-preferences.c:149 msgid "New conversation" msgstr "Conversa nova" # rever -#: ../src/empathy-preferences.c:142 +#: ../src/empathy-preferences.c:150 msgid "Contact goes online" msgstr "O contacto conéctase" # rever -#: ../src/empathy-preferences.c:143 +#: ../src/empathy-preferences.c:151 msgid "Contact goes offline" msgstr "O contacto desconéctase" # rever -#: ../src/empathy-preferences.c:144 +#: ../src/empathy-preferences.c:152 msgid "Account connected" msgstr "Conta conectada" # rever -#: ../src/empathy-preferences.c:145 +#: ../src/empathy-preferences.c:153 msgid "Account disconnected" msgstr "Conta desconectada" -#: ../src/empathy-preferences.c:446 +#: ../src/empathy-preferences.c:450 msgid "Language" msgstr "Idioma" -#: ../src/empathy-preferences.c:875 +#. translators: Contact name for the chat theme preview +#: ../src/empathy-preferences.c:700 +msgid "Juliet" +msgstr "Xulieta" + +#. translators: Contact name for the chat theme preview +#: ../src/empathy-preferences.c:707 +msgid "Romeo" +msgstr "Romeo" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:713 +msgid "O Romeo, Romeo, wherefore art thou Romeo?" +msgstr "Oh, Romeo, Romeo!, ¿onde estás que non te vexo?" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:716 +msgid "Deny thy father and refuse thy name;" +msgstr "Nega ao teu pai e rexeita o teu nome;" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:719 +msgid "Or if thou wilt not, be but sworn my love" +msgstr "Ou, se non queres, xúrame tan só que me amas" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:722 +msgid "And I'll no longer be a Capulet." +msgstr "Y deixarei eu de ser unha Capuleto." + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:725 +msgid "Shall I hear more, or shall I speak at this?" +msgstr "Debo escoitar máis ou contestar ao dito?" + +# rever +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:728 +msgid "Juliet has disconnected" +msgstr "Xulieta desconectouse" + +#: ../src/empathy-preferences.c:962 msgid "Preferences" msgstr "Preferencias" @@ -4210,48 +4320,52 @@ msgstr "" "dicionario instalado." #: ../src/empathy-preferences.ui.h:24 +msgid "Theme Variant:" +msgstr "Variante do tema:" + +#: ../src/empathy-preferences.ui.h:25 msgid "Themes" msgstr "Temas" # rever -#: ../src/empathy-preferences.ui.h:25 +#: ../src/empathy-preferences.ui.h:26 msgid "_Automatically connect on startup" msgstr "_Conectar automaticamente ao iniciar" # rever -#: ../src/empathy-preferences.ui.h:26 +#: ../src/empathy-preferences.ui.h:27 msgid "_Cellphone" msgstr "_Teléfono móbil" # rever -#: ../src/empathy-preferences.ui.h:27 +#: ../src/empathy-preferences.ui.h:28 msgid "_Enable bubble notifications" msgstr "_Activar as burbullas de notificación" # rever -#: ../src/empathy-preferences.ui.h:28 +#: ../src/empathy-preferences.ui.h:29 msgid "_Enable sound notifications" msgstr "_Activar as notificacións de son" -#: ../src/empathy-preferences.ui.h:29 +#: ../src/empathy-preferences.ui.h:30 msgid "_GPS" msgstr "_GPS" -#: ../src/empathy-preferences.ui.h:30 +#: ../src/empathy-preferences.ui.h:31 msgid "_Network (IP, Wi-Fi)" msgstr "_Rede (IP, Wifi)" # rever -#: ../src/empathy-preferences.ui.h:31 +#: ../src/empathy-preferences.ui.h:32 msgid "_Open new chats in separate windows" msgstr "A_brir as conversas novas en xanelas separadas" -#: ../src/empathy-preferences.ui.h:32 +#: ../src/empathy-preferences.ui.h:33 msgid "_Publish location to my contacts" msgstr "_Publicar a miña localización aos meus contactos" #. To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees. -#: ../src/empathy-preferences.ui.h:34 +#: ../src/empathy-preferences.ui.h:35 msgid "_Reduce location accuracy" msgstr "_Reducir a precisión de localización" @@ -4406,7 +4520,7 @@ msgstr "Declinar" msgid "Accept" msgstr "Aceptar" -#: ../src/empathy-notifications-approver.c:223 +#: ../src/empathy-notifications-approver.c:226 msgid "Provide" msgstr "Fornecer" @@ -4420,6 +4534,10 @@ msgstr "Chamada perdida de %s" msgid "%s just tried to call you, but you were in another call." msgstr "%s tentou chamarlle, pero vostede estaba noutra chamada." +#: ../libempathy-gtk/empathy-search-bar.c:282 +msgid "_Match case" +msgstr "_Coincidir con capitalización" + #~ msgid "_Enabled" #~ msgstr "_Activado" @@ -6,10 +6,11 @@ msgid "" msgstr "" "Project-Id-Version: empathy\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-04-18 10:45+0300\n" -"PO-Revision-Date: 2011-04-18 10:46+0200\n" +"POT-Creation-Date: 2011-05-09 08:50+0300\n" +"PO-Revision-Date: 2011-05-09 09:21+0200\n" "Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -207,111 +208,115 @@ msgid "Pop up notifications when a contact logs out" msgstr "Pop up notifications when a contact logs out" #: ../data/org.gnome.Empathy.gschema.xml.in.h:42 +msgid "Show Balance in roster" +msgstr "Show Balance in roster" + +#: ../data/org.gnome.Empathy.gschema.xml.in.h:43 msgid "Show avatars" msgstr "Show avatars" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:43 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:44 msgid "Show contact list in rooms" msgstr "Show contact list in rooms" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:44 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:45 msgid "Show hint about closing the main window" msgstr "Show hint about closing the main window" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:45 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:46 msgid "Show offline contacts" msgstr "Show offline contacts" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:46 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:47 msgid "Show protocols" msgstr "Show protocols" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:47 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:48 msgid "Spell checking languages" msgstr "Spell checking languages" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:48 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:49 msgid "The default folder to save file transfers in." msgstr "The default folder to save file transfers in." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:49 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:50 msgid "The last directory that an avatar image was chosen from." msgstr "The last directory that an avatar image was chosen from." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:50 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:51 msgid "The position for the chat window side pane" msgstr "The position for the chat window side pane" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:51 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:52 msgid "The stored position (in pixels) of the chat window side pane." msgstr "The stored position (in pixels) of the chat window side pane." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:52 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:53 msgid "The theme that is used to display the conversation in chat windows." msgstr "The theme that is used to display the conversation in chat windows." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:53 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:54 msgid "Use graphical smileys" msgstr "Use graphical smileys" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:54 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:55 msgid "Use notification sounds" msgstr "Use notification sounds" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:55 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:56 msgid "Use theme for chat rooms" msgstr "Use theme for chat rooms" -#: ../data/org.gnome.Empathy.gschema.xml.in.h:56 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:57 msgid "Whether Empathy can publish the user's location to their contacts." msgstr "Whether Empathy can publish the user's location to their contacts." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:57 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:58 msgid "Whether Empathy can use the GPS to guess the location." msgstr "Whether Empathy can use the GPS to guess the location." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:58 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:59 msgid "Whether Empathy can use the cellular network to guess the location." msgstr "Whether Empathy can use the cellular network to guess the location." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:59 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:60 msgid "Whether Empathy can use the network to guess the location." msgstr "Whether Empathy can use the network to guess the location." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:60 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:61 msgid "Whether Empathy has migrated butterfly logs." msgstr "Whether Empathy has migrated butterfly logs." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:61 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:62 msgid "Whether Empathy should automatically log into your accounts on startup." msgstr "" "Whether Empathy should automatically log into your accounts on startup." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:62 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:63 msgid "" "Whether Empathy should go into away mode automatically if the user is idle." msgstr "" "Whether Empathy should go into away mode automatically if the user is idle." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:63 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:64 msgid "" "Whether Empathy should reduce the location's accuracy for privacy reasons." msgstr "" "Whether Empathy should reduce the location's accuracy for privacy reasons." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:64 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:65 msgid "" "Whether Empathy should use the avatar of the contact as the chat window icon." msgstr "" "Whether Empathy should use the avatar of the contact as the chat window icon." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:65 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:66 msgid "" "Whether WebKit developer tools, such as the Web Inspector, should be enabled." msgstr "" "Whether WebKit developer tools, such as the Web Inspector, should be enabled." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:66 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:67 msgid "" "Whether connectivity managers should be used to automatically disconnect/" "reconnect." @@ -319,64 +324,64 @@ msgstr "" "Whether connectivity managers should be used to automatically disconnect/" "reconnect." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:67 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:68 msgid "" "Whether to check words typed against the languages you want to check with." msgstr "" "Whether to check words typed against the languages you want to check with." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:68 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:69 msgid "Whether to convert smileys into graphical images in conversations." msgstr "Whether to convert smileys into graphical images in conversations." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:69 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:70 msgid "Whether to play a sound to notify of contacts logging into the network." msgstr "" "Whether to play a sound to notify of contacts logging into the network." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:70 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:71 msgid "" "Whether to play a sound to notify of contacts logging out of the network." msgstr "" "Whether to play a sound to notify of contacts logging out of the network." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:71 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:72 msgid "Whether to play a sound to notify of events." msgstr "Whether to play a sound to notify of events." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:72 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:73 msgid "Whether to play a sound to notify of incoming messages." msgstr "Whether to play a sound to notify of incoming messages." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:73 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:74 msgid "Whether to play a sound to notify of new conversations." msgstr "Whether to play a sound to notify of new conversations." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:74 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:75 msgid "Whether to play a sound to notify of outgoing messages." msgstr "Whether to play a sound to notify of outgoing messages." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:75 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:76 msgid "Whether to play a sound when logging into a network." msgstr "Whether to play a sound when logging into a network." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:76 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:77 msgid "Whether to play a sound when logging out of a network." msgstr "Whether to play a sound when logging out of a network." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:77 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:78 msgid "Whether to play sound notifications when away or busy." msgstr "Whether to play sound notifications when away or busy." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:78 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:79 msgid "Whether to show a popup notification when a contact goes offline." msgstr "Whether to show a popup notification when a contact goes offline." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:79 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:80 msgid "Whether to show a popup notification when a contact goes online." msgstr "Whether to show a popup notification when a contact goes online." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:80 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:81 msgid "" "Whether to show a popup notification when receiving a new message even if " "the chat is already opened, but not focused." @@ -384,37 +389,41 @@ msgstr "" "Whether to show a popup notification when receiving a new message even if " "the chat is already opened, but not focused." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:81 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:82 msgid "Whether to show a popup notification when receiving a new message." msgstr "Whether to show a popup notification when receiving a new message." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:82 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:83 +msgid "Whether to show account balances for in the contact roster." +msgstr "Whether to show account balances for in the contact roster." + +#: ../data/org.gnome.Empathy.gschema.xml.in.h:84 msgid "" "Whether to show avatars for contacts in the contact list and chat windows." msgstr "" "Whether to show avatars for contacts in the contact list and chat windows." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:83 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:85 msgid "Whether to show contacts that are offline in the contact list." msgstr "Whether to show contacts that are offline in the contact list." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:84 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:86 msgid "Whether to show popup notifications when away or busy." msgstr "Whether to show popup notifications when away or busy." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:85 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:87 msgid "Whether to show protocols for contacts in the contact list." msgstr "Whether to show protocols for contacts in the contact list." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:86 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:88 msgid "Whether to show the contact list in chat rooms." msgstr "Whether to show the contact list in chat rooms." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:87 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:89 msgid "Whether to show the contact list in compact mode." msgstr "Whether to show the contact list in compact mode." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:88 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:90 msgid "" "Whether to show the message dialog about closing the main window with the " "'x' button in the title bar." @@ -422,11 +431,11 @@ msgstr "" "Whether to show the message dialog about closing the main window with the " "'x' button in the title bar." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:89 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:91 msgid "Whether to use the theme for chat rooms." msgstr "Whether to use the theme for chat rooms." -#: ../data/org.gnome.Empathy.gschema.xml.in.h:90 +#: ../data/org.gnome.Empathy.gschema.xml.in.h:92 msgid "" "Which criterion to use when sorting the contact list. Default is to sort by " "the contact's name with the value \"name\". A value of \"state\" will sort " @@ -442,7 +451,7 @@ msgstr "ניהול חשבונות התכתבות ו־VoIP" #. Tweak the dialog #: ../data/empathy-accounts.desktop.in.in.h:2 -#: ../src/empathy-accounts-dialog.c:2269 +#: ../src/empathy-accounts-dialog.c:2320 msgid "Messaging and VoIP Accounts" msgstr "חשבונות התכתבות ו־VoIP" @@ -490,148 +499,140 @@ msgstr "התרחשה שגיאה בזמן ניסיון העברת הקובץ" msgid "The other participant is unable to transfer the file" msgstr "המשתתף האחר לא יכול להעביר את הקובץ" -#: ../libempathy/empathy-tp-file.c:405 ../libempathy/empathy-utils.c:383 +#: ../libempathy/empathy-tp-file.c:405 ../libempathy/empathy-utils.c:384 msgid "Unknown reason" msgstr "סיבה לא ידועה" -#: ../libempathy/empathy-utils.c:304 +#: ../libempathy/empathy-utils.c:305 msgid "Available" msgstr "זמין" -#: ../libempathy/empathy-utils.c:306 +#: ../libempathy/empathy-utils.c:307 msgid "Busy" msgstr "עסוק" -#: ../libempathy/empathy-utils.c:309 +#: ../libempathy/empathy-utils.c:310 msgid "Away" msgstr "מרוחק" -#: ../libempathy/empathy-utils.c:311 +#: ../libempathy/empathy-utils.c:312 msgid "Invisible" msgstr "בלתי נראה" -#: ../libempathy/empathy-utils.c:313 +#: ../libempathy/empathy-utils.c:314 msgid "Offline" msgstr "לא מחובר" #. translators: presence type is unknown -#. translators: encoding video codec is unknown -#. translators: encoding audio codec is unknown -#. translators: decoding video codec is unknown -#. translators: decoding audio codec is unknown -#: ../libempathy/empathy-utils.c:316 -#: ../src/empathy-streamed-media-window.c:1905 -#: ../src/empathy-streamed-media-window.c:1907 -#: ../src/empathy-streamed-media-window.c:1909 -#: ../src/empathy-streamed-media-window.c:1911 -#: ../src/empathy-call-window.ui.h:18 +#: ../libempathy/empathy-utils.c:317 +msgctxt "presence" msgid "Unknown" msgstr "לא ידוע" -#: ../libempathy/empathy-utils.c:355 +#: ../libempathy/empathy-utils.c:356 msgid "No reason specified" msgstr "לא צויינה סיבה" -#: ../libempathy/empathy-utils.c:357 ../libempathy/empathy-utils.c:413 +#: ../libempathy/empathy-utils.c:358 ../libempathy/empathy-utils.c:414 msgid "Status is set to offline" msgstr "המצב מוגדר כמנותק" -#: ../libempathy/empathy-utils.c:359 ../libempathy/empathy-utils.c:393 +#: ../libempathy/empathy-utils.c:360 ../libempathy/empathy-utils.c:394 msgid "Network error" msgstr "שגיאת רשת" -#: ../libempathy/empathy-utils.c:361 ../libempathy/empathy-utils.c:395 +#: ../libempathy/empathy-utils.c:362 ../libempathy/empathy-utils.c:396 msgid "Authentication failed" msgstr "האימות נכשל" -#: ../libempathy/empathy-utils.c:363 ../libempathy/empathy-utils.c:397 +#: ../libempathy/empathy-utils.c:364 ../libempathy/empathy-utils.c:398 msgid "Encryption error" msgstr "שגיאת הצפנה" -#: ../libempathy/empathy-utils.c:365 +#: ../libempathy/empathy-utils.c:366 msgid "Name in use" msgstr "השם בשימוש" -#: ../libempathy/empathy-utils.c:367 ../libempathy/empathy-utils.c:399 +#: ../libempathy/empathy-utils.c:368 ../libempathy/empathy-utils.c:400 msgid "Certificate not provided" msgstr "לא סופקה תעודה" -#: ../libempathy/empathy-utils.c:369 ../libempathy/empathy-utils.c:401 +#: ../libempathy/empathy-utils.c:370 ../libempathy/empathy-utils.c:402 msgid "Certificate untrusted" msgstr "התעודה אינה מאובטחת" -#: ../libempathy/empathy-utils.c:371 ../libempathy/empathy-utils.c:403 +#: ../libempathy/empathy-utils.c:372 ../libempathy/empathy-utils.c:404 msgid "Certificate expired" msgstr "התעודה לא תקפה" -#: ../libempathy/empathy-utils.c:373 ../libempathy/empathy-utils.c:405 +#: ../libempathy/empathy-utils.c:374 ../libempathy/empathy-utils.c:406 msgid "Certificate not activated" msgstr "התעודה אינה פעילה" -#: ../libempathy/empathy-utils.c:375 ../libempathy/empathy-utils.c:407 +#: ../libempathy/empathy-utils.c:376 ../libempathy/empathy-utils.c:408 msgid "Certificate hostname mismatch" msgstr "שם המארח בתעודה לא תואם" -#: ../libempathy/empathy-utils.c:377 ../libempathy/empathy-utils.c:409 +#: ../libempathy/empathy-utils.c:378 ../libempathy/empathy-utils.c:410 msgid "Certificate fingerprint mismatch" msgstr "טביעת האצבע של התעודה אינה תואמת" -#: ../libempathy/empathy-utils.c:379 ../libempathy/empathy-utils.c:411 +#: ../libempathy/empathy-utils.c:380 ../libempathy/empathy-utils.c:412 msgid "Certificate self-signed" msgstr "תעודה בחתימה עצמית" -#: ../libempathy/empathy-utils.c:381 +#: ../libempathy/empathy-utils.c:382 msgid "Certificate error" msgstr "שגיאת תעודה" -#: ../libempathy/empathy-utils.c:415 +#: ../libempathy/empathy-utils.c:416 msgid "Encryption is not available" msgstr "אין הצפנה זמינה" -#: ../libempathy/empathy-utils.c:417 +#: ../libempathy/empathy-utils.c:418 msgid "Certificate is invalid" msgstr "התעודה שגויה" -#: ../libempathy/empathy-utils.c:419 +#: ../libempathy/empathy-utils.c:420 msgid "Connection has been refused" msgstr "החיבור נתקל בסירוב" -#: ../libempathy/empathy-utils.c:421 +#: ../libempathy/empathy-utils.c:422 msgid "Connection can't be established" msgstr "לא ניתן לקיים את החיבור" -#: ../libempathy/empathy-utils.c:423 +#: ../libempathy/empathy-utils.c:424 msgid "Connection has been lost" msgstr "החיבור נקטע" -#: ../libempathy/empathy-utils.c:425 +#: ../libempathy/empathy-utils.c:426 msgid "This resource is already connected to the server" msgstr "המשאב כבר מחובר לשרת" -#: ../libempathy/empathy-utils.c:427 +#: ../libempathy/empathy-utils.c:428 msgid "" "Connection has been replaced by a new connection using the same resource" msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב" -#: ../libempathy/empathy-utils.c:430 +#: ../libempathy/empathy-utils.c:431 msgid "The account already exists on the server" msgstr "החשבון כבר קיים בשרת" -#: ../libempathy/empathy-utils.c:432 +#: ../libempathy/empathy-utils.c:433 msgid "Server is currently too busy to handle the connection" msgstr "השרת עסוק מכדי לטפל בחיבור" -#: ../libempathy/empathy-utils.c:434 +#: ../libempathy/empathy-utils.c:435 msgid "Certificate has been revoked" msgstr "התעודה נשללה" -#: ../libempathy/empathy-utils.c:436 +#: ../libempathy/empathy-utils.c:437 msgid "" "Certificate uses an insecure cipher algorithm or is cryptographically weak" msgstr "" "התעודה משתמשת באלגוריתם הצפנה בלתי מאובטח או שהוא חלש מבחינה קריפטוגרפית" -#: ../libempathy/empathy-utils.c:439 +#: ../libempathy/empathy-utils.c:440 msgid "" "The length of the server certificate, or the depth of the server certificate " "chain, exceed the limits imposed by the cryptography library" @@ -639,66 +640,66 @@ msgstr "" "אורך אישור האבטחה של השרת או עומק מחרוזת אישור האבטחה של השרת חורגים " "מהמגבלות שהוצבו על ידי ספריית ההצפנה" -#: ../libempathy/empathy-utils.c:602 +#: ../libempathy/empathy-utils.c:603 #: ../libempathy-gtk/empathy-contact-list-store.h:73 msgid "People Nearby" msgstr "אנשים בקרבתי" -#: ../libempathy/empathy-utils.c:607 +#: ../libempathy/empathy-utils.c:608 msgid "Yahoo! Japan" msgstr "Yahoo! יפן" -#: ../libempathy/empathy-utils.c:636 +#: ../libempathy/empathy-utils.c:637 msgid "Google Talk" msgstr "Google Talk" -#: ../libempathy/empathy-utils.c:637 +#: ../libempathy/empathy-utils.c:638 msgid "Facebook Chat" msgstr "צ׳אט Facebook" -#: ../libempathy/empathy-time.c:137 +#: ../libempathy/empathy-time.c:100 #, c-format msgid "%d second ago" msgid_plural "%d seconds ago" msgstr[0] "לפני שנייה" msgstr[1] "לפני %d שניות" -#: ../libempathy/empathy-time.c:142 +#: ../libempathy/empathy-time.c:105 #, c-format msgid "%d minute ago" msgid_plural "%d minutes ago" msgstr[0] "לפני דקה" msgstr[1] "לפני %d דקות" -#: ../libempathy/empathy-time.c:147 +#: ../libempathy/empathy-time.c:110 #, c-format msgid "%d hour ago" msgid_plural "%d hours ago" msgstr[0] "לפני שעה" msgstr[1] "לפני %d שעות" -#: ../libempathy/empathy-time.c:152 +#: ../libempathy/empathy-time.c:115 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "לפני יום" msgstr[1] "לפני %d ימים" -#: ../libempathy/empathy-time.c:157 +#: ../libempathy/empathy-time.c:120 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "לפני שבוע" msgstr[1] "לפני %d שבועות" -#: ../libempathy/empathy-time.c:162 +#: ../libempathy/empathy-time.c:125 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "לפני חודש" msgstr[1] "לפני %d חודשים" -#: ../libempathy/empathy-time.c:167 +#: ../libempathy/empathy-time.c:130 msgid "in the future" msgstr "בעתיד" @@ -706,85 +707,67 @@ msgstr "בעתיד" msgid "All" msgstr "הכול" -#: ../libempathy-gtk/empathy-account-widget.c:682 +#: ../libempathy-gtk/empathy-account-widget.c:678 #: ../libempathy-gtk/empathy-log-window.c:643 #: ../src/empathy-import-widget.c:321 msgid "Account" msgstr "חשבון" -#: ../libempathy-gtk/empathy-account-widget.c:683 +#: ../libempathy-gtk/empathy-account-widget.c:679 msgid "Password" msgstr "ססמה" -#: ../libempathy-gtk/empathy-account-widget.c:684 +#: ../libempathy-gtk/empathy-account-widget.c:680 #: ../libempathy-gtk/empathy-irc-network-dialog.c:507 msgid "Server" msgstr "שרת" -#: ../libempathy-gtk/empathy-account-widget.c:685 +#: ../libempathy-gtk/empathy-account-widget.c:681 #: ../libempathy-gtk/empathy-irc-network-dialog.c:522 msgid "Port" msgstr "פתחה" -#: ../libempathy-gtk/empathy-account-widget.c:757 -#: ../libempathy-gtk/empathy-account-widget.c:814 +#: ../libempathy-gtk/empathy-account-widget.c:753 +#: ../libempathy-gtk/empathy-account-widget.c:810 #, c-format msgid "%s:" msgstr "%s:" -#: ../libempathy-gtk/empathy-account-widget.c:1166 +#: ../libempathy-gtk/empathy-account-widget.c:1151 #, c-format msgid "The account %s is edited via My Web Accounts." msgstr "החשבון %s נערך דרך החשבונות המקוונים שלי." -#: ../libempathy-gtk/empathy-account-widget.c:1172 +#: ../libempathy-gtk/empathy-account-widget.c:1157 #, c-format msgid "The account %s cannot be edited in Empathy." msgstr "לא ניתן לערוך את החשבון %s ב־Empathy." -#: ../libempathy-gtk/empathy-account-widget.c:1192 +#: ../libempathy-gtk/empathy-account-widget.c:1177 msgid "Launch My Web Accounts" msgstr "טעינת החשבונות המקוונים שלי" -#: ../libempathy-gtk/empathy-account-widget.c:1530 +#: ../libempathy-gtk/empathy-account-widget.c:1515 msgid "Username:" msgstr "ש_ם משתמש:" -#: ../libempathy-gtk/empathy-account-widget.c:1897 +#: ../libempathy-gtk/empathy-account-widget.c:1833 msgid "A_pply" msgstr "ה_חלה" -#: ../libempathy-gtk/empathy-account-widget.c:1927 +#: ../libempathy-gtk/empathy-account-widget.c:1863 msgid "L_og in" msgstr "_כניסה" -#. Account and Identifier -#: ../libempathy-gtk/empathy-account-widget.c:1993 -#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1 -#: ../libempathy-gtk/empathy-contact-search-dialog.c:520 -#: ../libempathy-gtk/empathy-contact-widget.ui.h:2 -#: ../libempathy-gtk/empathy-individual-widget.c:1481 -#: ../libempathy-gtk/empathy-contact-selector-dialog.ui.h:1 -#: ../src/empathy-chatrooms-window.ui.h:1 -#: ../src/empathy-new-chatroom-dialog.ui.h:1 -msgid "Account:" -msgstr "חשבון:" - -#. translators: this is the label of a checkbox used to enable/disable IM -#. * accounts -#: ../libempathy-gtk/empathy-account-widget.c:2006 -msgid "_Enabled" -msgstr "מו_פעל" - -#: ../libempathy-gtk/empathy-account-widget.c:2071 +#: ../libempathy-gtk/empathy-account-widget.c:1937 msgid "This account already exists on the server" msgstr "חשבון זה כבר קיים על השרת" -#: ../libempathy-gtk/empathy-account-widget.c:2074 +#: ../libempathy-gtk/empathy-account-widget.c:1940 msgid "Create a new account on the server" msgstr "יצירת חשבון חדש על השרת" -#: ../libempathy-gtk/empathy-account-widget.c:2266 +#: ../libempathy-gtk/empathy-account-widget.c:2132 msgid "Ca_ncel" msgstr "_ביטול" @@ -793,19 +776,19 @@ msgstr "_ביטול" #. * like: "MyUserName on freenode". #. * You should reverse the order of these arguments if the #. * server should come before the login id in your locale. -#: ../libempathy-gtk/empathy-account-widget.c:2563 +#: ../libempathy-gtk/empathy-account-widget.c:2410 #, c-format msgid "%1$s on %2$s" msgstr "%1$s על גבי %2$s" #. To translators: The parameter is the protocol name. The resulting #. * string will be something like: "Jabber Account" -#: ../libempathy-gtk/empathy-account-widget.c:2589 +#: ../libempathy-gtk/empathy-account-widget.c:2436 #, c-format msgid "%s Account" msgstr "חשבון %s" -#: ../libempathy-gtk/empathy-account-widget.c:2593 +#: ../libempathy-gtk/empathy-account-widget.c:2440 msgid "New account" msgstr "חשבון חדש" @@ -1233,57 +1216,57 @@ msgstr "כל הקבצים" msgid "Click to enlarge" msgstr "יש ללחוץ כדי להגדיל" -#: ../libempathy-gtk/empathy-chat.c:652 +#: ../libempathy-gtk/empathy-chat.c:668 msgid "Failed to open private chat" msgstr "ארע כשל בפתיחת שיחה פרטית" -#: ../libempathy-gtk/empathy-chat.c:717 +#: ../libempathy-gtk/empathy-chat.c:733 msgid "Topic not supported on this conversation" msgstr "אין תמיכה בשימוש בנושא בדיון זה" -#: ../libempathy-gtk/empathy-chat.c:723 +#: ../libempathy-gtk/empathy-chat.c:739 msgid "You are not allowed to change the topic" msgstr "אין לך הרשאה לשנות את הנושא" -#: ../libempathy-gtk/empathy-chat.c:930 +#: ../libempathy-gtk/empathy-chat.c:948 msgid "/clear: clear all messages from the current conversation" msgstr "/clear: פינוי כל ההודעות מהדיון הנוכחי" -#: ../libempathy-gtk/empathy-chat.c:933 +#: ../libempathy-gtk/empathy-chat.c:951 msgid "/topic <topic>: set the topic of the current conversation" msgstr "/topic <נושא>: הגדרת נושא השיחה הנוכחית" -#: ../libempathy-gtk/empathy-chat.c:936 +#: ../libempathy-gtk/empathy-chat.c:954 msgid "/join <chat room ID>: join a new chat room" msgstr "/join <זיהוי החדר>: הצטרפות לחדר שיחה חדש" -#: ../libempathy-gtk/empathy-chat.c:939 +#: ../libempathy-gtk/empathy-chat.c:957 msgid "/j <chat room ID>: join a new chat room" msgstr "/j <זיהוי החדר>: הצטרפות לחדר שיחה חדש" -#: ../libempathy-gtk/empathy-chat.c:944 +#: ../libempathy-gtk/empathy-chat.c:962 msgid "" "/part [<chat room ID>] [<reason>]: leave the chat room, by default the " "current one" msgstr "/part [<זיהוי החדר>] [<סיבה>]: עזיבת ערוץ השיחה, הנוכחי הוא בררת המחדל" -#: ../libempathy-gtk/empathy-chat.c:949 +#: ../libempathy-gtk/empathy-chat.c:967 msgid "/query <contact ID> [<message>]: open a private chat" msgstr "/query <זיהוי איש הקשר> [<הודעה>]: פתיחת צ'אט אישי" -#: ../libempathy-gtk/empathy-chat.c:952 +#: ../libempathy-gtk/empathy-chat.c:970 msgid "/msg <contact ID> <message>: open a private chat" msgstr "/msg <זיהוי איש הקשר> <הודעה>: פתיחת צ'אט פרטי" -#: ../libempathy-gtk/empathy-chat.c:955 +#: ../libempathy-gtk/empathy-chat.c:973 msgid "/nick <nickname>: change your nickname on the current server" msgstr "/nick <כינוי>: שינוי הכינוי שלך בשרת הנוכחי" -#: ../libempathy-gtk/empathy-chat.c:958 +#: ../libempathy-gtk/empathy-chat.c:976 msgid "/me <message>: send an ACTION message to the current conversation" msgstr "/me <הודעה>: שליחת הודעת ACTION לדיון הנוכחי" -#: ../libempathy-gtk/empathy-chat.c:961 +#: ../libempathy-gtk/empathy-chat.c:979 msgid "" "/say <message>: send <message> to the current conversation. This is used to " "send a message starting with a '/'. For example: \"/say /join is used to " @@ -1292,7 +1275,7 @@ msgstr "" "/say <הודעה>: שליחת <הודעה> לדיון הנוכחי. פקודה זו משמשת לשליחת הודעות " "המתחילות ב־'/'. לדוגמה: \"/say /join משמשת לצורך התחברות לחדר שיחה חדש\"" -#: ../libempathy-gtk/empathy-chat.c:966 +#: ../libempathy-gtk/empathy-chat.c:984 msgid "" "/help [<command>]: show all supported commands. If <command> is defined, " "show its usage." @@ -1300,98 +1283,111 @@ msgstr "" "/help [<פקודה>]: הצגת כל הפקודות הנתמכות. אם יש הגדרה ל־<פקודה> יוצג אופן " "הפעלתה." -#: ../libempathy-gtk/empathy-chat.c:976 +#: ../libempathy-gtk/empathy-chat.c:994 #, c-format msgid "Usage: %s" msgstr "שימוש: %s" -#: ../libempathy-gtk/empathy-chat.c:1015 +#: ../libempathy-gtk/empathy-chat.c:1033 msgid "Unknown command" msgstr "פקודה לא ידועה" -#: ../libempathy-gtk/empathy-chat.c:1141 +#: ../libempathy-gtk/empathy-chat.c:1159 msgid "Unknown command; see /help for the available commands" msgstr "פקודה בלתי מוכרת; יש לעיין ב־/help לצפייה בפקודות הזמינות" -#: ../libempathy-gtk/empathy-chat.c:1278 +#: ../libempathy-gtk/empathy-chat.c:1297 +msgid "insufficient balance to send message" +msgstr "המאזן אינו מאפשר לשלוח הודעה" + +#: ../libempathy-gtk/empathy-chat.c:1299 +msgid "not capable" +msgstr "ללא יכולת" + +#: ../libempathy-gtk/empathy-chat.c:1306 msgid "offline" msgstr "לא מחובר" -#: ../libempathy-gtk/empathy-chat.c:1281 +#: ../libempathy-gtk/empathy-chat.c:1309 msgid "invalid contact" msgstr "איש קשר לא תקין" -#: ../libempathy-gtk/empathy-chat.c:1284 +#: ../libempathy-gtk/empathy-chat.c:1312 msgid "permission denied" msgstr "איש קשר לא תקין" -#: ../libempathy-gtk/empathy-chat.c:1287 +#: ../libempathy-gtk/empathy-chat.c:1315 msgid "too long message" msgstr "הודעה ארוכה מדי" -#: ../libempathy-gtk/empathy-chat.c:1290 +#: ../libempathy-gtk/empathy-chat.c:1318 msgid "not implemented" msgstr "לא ממומש" -#: ../libempathy-gtk/empathy-chat.c:1294 +#: ../libempathy-gtk/empathy-chat.c:1322 msgid "unknown" msgstr "לא ידוע" -#: ../libempathy-gtk/empathy-chat.c:1298 +#: ../libempathy-gtk/empathy-chat.c:1328 #, c-format msgid "Error sending message '%s': %s" msgstr "שגיאה בשליחת ההודעה '%s': %s" -#: ../libempathy-gtk/empathy-chat.c:1359 ../src/empathy-chat-window.c:717 +#: ../libempathy-gtk/empathy-chat.c:1332 +#, c-format +msgid "Error sending message: %s" +msgstr "שגיאה בשליחת ההודעה: %s" + +#: ../libempathy-gtk/empathy-chat.c:1393 ../src/empathy-chat-window.c:760 msgid "Topic:" msgstr "נושא:" -#: ../libempathy-gtk/empathy-chat.c:1371 +#: ../libempathy-gtk/empathy-chat.c:1405 #, c-format msgid "Topic set to: %s" msgstr "הנושא הוגדר ל־: %s" -#: ../libempathy-gtk/empathy-chat.c:1373 +#: ../libempathy-gtk/empathy-chat.c:1407 msgid "No topic defined" msgstr "לא נקבע נושא" -#: ../libempathy-gtk/empathy-chat.c:1872 +#: ../libempathy-gtk/empathy-chat.c:1914 msgid "(No Suggestions)" msgstr "(אין הצעות)" #. translators: %s is the selected word -#: ../libempathy-gtk/empathy-chat.c:1940 +#: ../libempathy-gtk/empathy-chat.c:1982 #, c-format msgid "Add '%s' to Dictionary" msgstr "הוספת '%s' למילון" #. translators: first %s is the selected word, #. * second %s is the language name of the target dictionary -#: ../libempathy-gtk/empathy-chat.c:1977 +#: ../libempathy-gtk/empathy-chat.c:2019 #, c-format msgid "Add '%s' to %s Dictionary" msgstr "הוספת '%s' למילון %s" -#: ../libempathy-gtk/empathy-chat.c:2034 +#: ../libempathy-gtk/empathy-chat.c:2076 msgid "Insert Smiley" msgstr "הכנס סמיילי" #. send button -#: ../libempathy-gtk/empathy-chat.c:2052 +#: ../libempathy-gtk/empathy-chat.c:2094 #: ../libempathy-gtk/empathy-ui-utils.c:1808 msgid "_Send" msgstr "_שלח" #. Spelling suggestions -#: ../libempathy-gtk/empathy-chat.c:2087 +#: ../libempathy-gtk/empathy-chat.c:2129 msgid "_Spelling Suggestions" msgstr "הצעות _איות" -#: ../libempathy-gtk/empathy-chat.c:2176 +#: ../libempathy-gtk/empathy-chat.c:2218 msgid "Failed to retrieve recent logs" msgstr "ארע כשל בקבלת הדוחות האחרונים" -#: ../libempathy-gtk/empathy-chat.c:2287 +#: ../libempathy-gtk/empathy-chat.c:2329 #, c-format msgid "%s has disconnected" msgstr "%s התנתק" @@ -1399,12 +1395,12 @@ msgstr "%s התנתק" #. translators: reverse the order of these arguments #. * if the kicked should come before the kicker in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2294 +#: ../libempathy-gtk/empathy-chat.c:2336 #, c-format msgid "%1$s was kicked by %2$s" msgstr "%1$s סולק על ידי %2$s" -#: ../libempathy-gtk/empathy-chat.c:2297 +#: ../libempathy-gtk/empathy-chat.c:2339 #, c-format msgid "%s was kicked" msgstr "%s סולק" @@ -1412,17 +1408,17 @@ msgstr "%s סולק" #. translators: reverse the order of these arguments #. * if the banned should come before the banner in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2305 +#: ../libempathy-gtk/empathy-chat.c:2347 #, c-format msgid "%1$s was banned by %2$s" msgstr "%1$s נחסם על ידי %2$s" -#: ../libempathy-gtk/empathy-chat.c:2308 +#: ../libempathy-gtk/empathy-chat.c:2350 #, c-format msgid "%s was banned" msgstr "%s נחסם" -#: ../libempathy-gtk/empathy-chat.c:2312 +#: ../libempathy-gtk/empathy-chat.c:2354 #, c-format msgid "%s has left the room" msgstr "%s עזב את החדר" @@ -1432,105 +1428,123 @@ msgstr "%s עזב את החדר" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:2321 +#: ../libempathy-gtk/empathy-chat.c:2363 #, c-format msgid " (%s)" msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:2346 +#: ../libempathy-gtk/empathy-chat.c:2388 #, c-format msgid "%s has joined the room" msgstr "%s הצטרף לחדר" -#: ../libempathy-gtk/empathy-chat.c:2371 +#: ../libempathy-gtk/empathy-chat.c:2413 #, c-format msgid "%s is now known as %s" msgstr "%s נודע כעת בכינוי %s" -#: ../libempathy-gtk/empathy-chat.c:2510 -#: ../src/empathy-streamed-media-window.c:1953 -#: ../src/empathy-event-manager.c:1126 +#: ../libempathy-gtk/empathy-chat.c:2552 +#: ../src/empathy-streamed-media-window.c:1957 +#: ../src/empathy-event-manager.c:1116 msgid "Disconnected" msgstr "מנותק" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3140 +#: ../libempathy-gtk/empathy-chat.c:3200 msgid "Would you like to store this password?" msgstr "האם ברצונך לאחסן ססמה זו?" -#: ../libempathy-gtk/empathy-chat.c:3146 +#: ../libempathy-gtk/empathy-chat.c:3206 msgid "Remember" msgstr "שמירה" -#: ../libempathy-gtk/empathy-chat.c:3156 +#: ../libempathy-gtk/empathy-chat.c:3216 msgid "Not now" msgstr "לא כעת" -#: ../libempathy-gtk/empathy-chat.c:3200 +#: ../libempathy-gtk/empathy-chat.c:3260 msgid "Retry" msgstr "ניסיון חוזר" -#: ../libempathy-gtk/empathy-chat.c:3204 +#: ../libempathy-gtk/empathy-chat.c:3264 msgid "Wrong password; please try again:" msgstr "ססמה שגויה; נא לנסות שוב:" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3321 +#: ../libempathy-gtk/empathy-chat.c:3381 msgid "This room is protected by a password:" msgstr "חדר זה מוגן בססמה:" -#: ../libempathy-gtk/empathy-chat.c:3348 +#: ../libempathy-gtk/empathy-chat.c:3408 msgid "Join" msgstr "הצטרפות" -#: ../libempathy-gtk/empathy-chat.c:3518 ../src/empathy-event-manager.c:1147 +#: ../libempathy-gtk/empathy-chat.c:3600 ../src/empathy-event-manager.c:1137 msgid "Connected" msgstr "מחובר" -#: ../libempathy-gtk/empathy-chat.c:3571 +#: ../libempathy-gtk/empathy-chat.c:3655 #: ../libempathy-gtk/empathy-log-window.c:650 msgid "Conversation" msgstr "שיחה" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:422 +#. Translators: this string is a something like +#. * "Escher Cat (SMS)" +#: ../libempathy-gtk/empathy-chat.c:3660 +#, c-format +msgid "%s (SMS)" +msgstr "%s (SMS)" + +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:423 msgid "Unknown or invalid identifier" msgstr "המזהה אינו ידוע או שגוי" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:424 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:425 msgid "Contact blocking temporarily unavailable" msgstr "חסימת אנשי קשר אינה זמינה כרגע" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:426 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:427 msgid "Contact blocking unavailable" msgstr "חסימת אנשי קשר אינה זמינה" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:428 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:429 msgid "Permission Denied" msgstr "ההרשאה נדחתה" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:432 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:433 msgid "Could not block contact" msgstr "לא ניתן לחסום את איש הקשר" -#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:701 +#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:702 msgid "Edit Blocked Contacts" msgstr "עריכת אנשי הקשר החסומים" +#. Account and Identifier +#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:521 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:2 +#: ../libempathy-gtk/empathy-individual-widget.c:1479 +#: ../libempathy-gtk/empathy-contact-selector-dialog.ui.h:1 +#: ../src/empathy-chatrooms-window.ui.h:1 +#: ../src/empathy-new-chatroom-dialog.ui.h:1 +msgid "Account:" +msgstr "חשבון:" + #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:320 -#: ../libempathy-gtk/empathy-theme-adium.c:794 +#: ../libempathy-gtk/empathy-theme-adium.c:996 msgid "_Copy Link Address" msgstr "העתקת _מיקום הקישור" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:327 -#: ../libempathy-gtk/empathy-theme-adium.c:801 +#: ../libempathy-gtk/empathy-theme-adium.c:1003 msgid "_Open Link" msgstr "_פתיחת קישור" #. Translators: timestamp displayed between conversations in #. * chat windows (strftime format string) -#: ../libempathy-gtk/empathy-chat-text-view.c:420 +#: ../libempathy-gtk/empathy-chat-text-view.c:415 msgid "%A %B %d %Y" msgstr "%A %d ב%B %Y" @@ -1593,38 +1607,38 @@ msgid "Favorite People" msgstr "אנשים מועדפים" #: ../libempathy-gtk/empathy-contact-list-view.c:1987 -#: ../libempathy-gtk/empathy-individual-view.c:2343 +#: ../libempathy-gtk/empathy-individual-view.c:2386 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "האם להסיר את הקבוצה '%s'?" #: ../libempathy-gtk/empathy-contact-list-view.c:1989 -#: ../libempathy-gtk/empathy-individual-view.c:2346 +#: ../libempathy-gtk/empathy-individual-view.c:2389 msgid "Removing group" msgstr "הקבוצה מוסרת" #. Remove #: ../libempathy-gtk/empathy-contact-list-view.c:2038 #: ../libempathy-gtk/empathy-contact-list-view.c:2115 -#: ../libempathy-gtk/empathy-individual-view.c:2401 -#: ../libempathy-gtk/empathy-individual-view.c:2595 +#: ../libempathy-gtk/empathy-individual-view.c:2444 +#: ../libempathy-gtk/empathy-individual-view.c:2637 #: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Remove" msgstr "ה_סרה" #: ../libempathy-gtk/empathy-contact-list-view.c:2068 -#: ../libempathy-gtk/empathy-individual-view.c:2465 +#: ../libempathy-gtk/empathy-individual-view.c:2508 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "להסיר את איש הקשר '%s'?" #: ../libempathy-gtk/empathy-contact-list-view.c:2070 -#: ../libempathy-gtk/empathy-individual-view.c:2486 +#: ../libempathy-gtk/empathy-individual-view.c:2529 msgid "Removing contact" msgstr "איש קשר מוסר" #: ../libempathy-gtk/empathy-contact-menu.c:219 -#: ../src/empathy-main-window.ui.h:13 +#: ../src/empathy-main-window.ui.h:14 msgid "_Add Contact…" msgstr "הוספת _איש קשר…" @@ -1633,48 +1647,48 @@ msgid "_Block Contact" msgstr "ח_סימת איש קשר" #: ../libempathy-gtk/empathy-contact-menu.c:328 -#: ../libempathy-gtk/empathy-individual-menu.c:517 -#: ../src/empathy-main-window.ui.h:15 +#: ../libempathy-gtk/empathy-individual-menu.c:536 +#: ../src/empathy-main-window.ui.h:16 msgid "_Chat" msgstr "_שיחה" #: ../libempathy-gtk/empathy-contact-menu.c:359 -#: ../libempathy-gtk/empathy-individual-menu.c:560 +#: ../libempathy-gtk/empathy-individual-menu.c:625 msgctxt "menu item" msgid "_Audio Call" msgstr "שיחה _קולית" #: ../libempathy-gtk/empathy-contact-menu.c:390 -#: ../libempathy-gtk/empathy-individual-menu.c:602 +#: ../libempathy-gtk/empathy-individual-menu.c:667 msgctxt "menu item" msgid "_Video Call" msgstr "שיחת _וידאו" #: ../libempathy-gtk/empathy-contact-menu.c:436 -#: ../libempathy-gtk/empathy-individual-menu.c:645 -#: ../src/empathy-main-window.ui.h:26 +#: ../libempathy-gtk/empathy-individual-menu.c:710 +#: ../src/empathy-main-window.ui.h:27 msgid "_Previous Conversations" msgstr "שיחות _קודמות" #: ../libempathy-gtk/empathy-contact-menu.c:458 -#: ../libempathy-gtk/empathy-individual-menu.c:686 +#: ../libempathy-gtk/empathy-individual-menu.c:751 msgid "Send File" msgstr "שליחת קובץ" #: ../libempathy-gtk/empathy-contact-menu.c:481 -#: ../libempathy-gtk/empathy-individual-menu.c:728 +#: ../libempathy-gtk/empathy-individual-menu.c:793 msgid "Share My Desktop" msgstr "שיתוף שולחן העבודה שלי" #: ../libempathy-gtk/empathy-contact-menu.c:521 -#: ../libempathy-gtk/empathy-contact-widget.c:1763 -#: ../libempathy-gtk/empathy-individual-menu.c:763 -#: ../libempathy-gtk/empathy-individual-widget.c:1372 +#: ../libempathy-gtk/empathy-contact-widget.c:1751 +#: ../libempathy-gtk/empathy-individual-menu.c:828 +#: ../libempathy-gtk/empathy-individual-widget.c:1370 msgid "Favorite" msgstr "מועדף" #: ../libempathy-gtk/empathy-contact-menu.c:550 -#: ../libempathy-gtk/empathy-individual-menu.c:791 +#: ../libempathy-gtk/empathy-individual-menu.c:856 msgid "Infor_mation" msgstr "_מידע" @@ -1684,30 +1698,30 @@ msgid "_Edit" msgstr "ע_ריכה" #: ../libempathy-gtk/empathy-contact-menu.c:650 -#: ../libempathy-gtk/empathy-individual-menu.c:972 -#: ../src/empathy-chat-window.c:935 +#: ../libempathy-gtk/empathy-individual-menu.c:1037 +#: ../src/empathy-chat-window.c:986 msgid "Inviting you to this room" msgstr "מזמין/ה אותך לחדר זה" #: ../libempathy-gtk/empathy-contact-menu.c:681 -#: ../libempathy-gtk/empathy-individual-menu.c:1019 +#: ../libempathy-gtk/empathy-individual-menu.c:1084 msgid "_Invite to Chat Room" msgstr "ה_זמנה לחדר שיחה" #. Title -#: ../libempathy-gtk/empathy-contact-search-dialog.c:513 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:514 msgid "Search contacts" msgstr "חיפוש בין אנשי הקשר" -#: ../libempathy-gtk/empathy-contact-search-dialog.c:543 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:544 msgid "Search: " msgstr "חיפוש:" -#: ../libempathy-gtk/empathy-contact-search-dialog.c:601 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:602 msgid "_Add Contact" msgstr "הוספת _איש קשר" -#: ../libempathy-gtk/empathy-contact-search-dialog.c:619 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:620 msgid "No contacts found" msgstr "לא נמצאו אנשי קשר" @@ -1860,33 +1874,33 @@ msgstr "קו רוחב:" msgid "Altitude:" msgstr "גובה:" -#: ../libempathy-gtk/empathy-contact-widget.c:871 -#: ../libempathy-gtk/empathy-contact-widget.c:888 +#: ../libempathy-gtk/empathy-contact-widget.c:861 +#: ../libempathy-gtk/empathy-contact-widget.c:876 #: ../libempathy-gtk/empathy-individual-widget.c:616 -#: ../libempathy-gtk/empathy-individual-widget.c:633 +#: ../libempathy-gtk/empathy-individual-widget.c:631 #: ../src/empathy-preferences.ui.h:12 msgid "Location" msgstr "מיקום" #. translators: format is "Location, $date" -#: ../libempathy-gtk/empathy-contact-widget.c:890 -#: ../libempathy-gtk/empathy-individual-widget.c:635 +#: ../libempathy-gtk/empathy-contact-widget.c:878 +#: ../libempathy-gtk/empathy-individual-widget.c:633 #, c-format msgid "%s, %s" msgstr "%s, %s" -#: ../libempathy-gtk/empathy-contact-widget.c:942 -#: ../libempathy-gtk/empathy-individual-widget.c:684 +#: ../libempathy-gtk/empathy-contact-widget.c:930 +#: ../libempathy-gtk/empathy-individual-widget.c:682 msgid "%B %e, %Y at %R UTC" msgstr "%B %e, %Y ב־%R UTC" -#: ../libempathy-gtk/empathy-contact-widget.c:1024 -#: ../libempathy-gtk/empathy-individual-widget.c:919 +#: ../libempathy-gtk/empathy-contact-widget.c:1012 +#: ../libempathy-gtk/empathy-individual-widget.c:917 msgid "Save Avatar" msgstr "שמירת תמונה אישית" -#: ../libempathy-gtk/empathy-contact-widget.c:1080 -#: ../libempathy-gtk/empathy-individual-widget.c:977 +#: ../libempathy-gtk/empathy-contact-widget.c:1068 +#: ../libempathy-gtk/empathy-individual-widget.c:975 msgid "Unable to save avatar" msgstr "לא ניתן לשמור תמונה אישית" @@ -1896,7 +1910,7 @@ msgstr "<b>מיקום</b> ב(תאריך)\t" #. Alias #: ../libempathy-gtk/empathy-contact-widget.ui.h:3 -#: ../libempathy-gtk/empathy-individual-widget.c:1307 +#: ../libempathy-gtk/empathy-individual-widget.c:1305 msgid "Alias:" msgstr "כינוי:" @@ -1916,7 +1930,7 @@ msgstr "פרטי איש קשר" #. Identifier to connect to Instant Messaging network #. Translators: Identifier to connect to Instant Messaging network #: ../libempathy-gtk/empathy-contact-widget.ui.h:8 -#: ../libempathy-gtk/empathy-individual-widget.c:1511 +#: ../libempathy-gtk/empathy-individual-widget.c:1509 msgid "Identifier:" msgstr "מזהה:" @@ -1955,7 +1969,7 @@ msgid "Select" msgstr "בחירה" #: ../libempathy-gtk/empathy-groups-widget.c:408 -#: ../src/empathy-main-window.c:1436 +#: ../src/empathy-main-window.c:1770 msgid "Group" msgstr "קבוצה" @@ -1996,23 +2010,29 @@ msgstr "אנשי הקשר שנבחרו ברשימה שמימין יקושרו ז msgid "%s (%s)" msgstr "%s (%s)" -#: ../libempathy-gtk/empathy-individual-menu.c:839 +#. add an SMS button +#: ../libempathy-gtk/empathy-individual-menu.c:582 +#: ../libempathy-gtk/empathy-new-message-dialog.c:248 +msgid "_SMS" +msgstr "_SMS" + +#: ../libempathy-gtk/empathy-individual-menu.c:904 msgctxt "Edit individual (contextual menu)" msgid "_Edit" msgstr "ע_ריכה" #. Translators: this is a verb meaning "to connect two contacts together #. * to form a meta-contact". -#: ../libempathy-gtk/empathy-individual-menu.c:865 +#: ../libempathy-gtk/empathy-individual-menu.c:930 msgctxt "Link individual (contextual menu)" msgid "_Link Contacts…" msgstr "_קישור אנשי קשר…" -#: ../libempathy-gtk/empathy-individual-view.c:2308 +#: ../libempathy-gtk/empathy-individual-view.c:2351 msgid "Delete and _Block" msgstr "מחיקה ו_חסימה" -#: ../libempathy-gtk/empathy-individual-view.c:2474 +#: ../libempathy-gtk/empathy-individual-view.c:2517 #, c-format msgid "" "Do you really want to remove the linked contact '%s'? Note that this will " @@ -2021,7 +2041,7 @@ msgstr "" "האם אכן ברצונך להסיר את איש הקשר המקושר '%s'? נא לשים לב שפעולה זו תסיר את " "כל אנשי הקשר המתאגדים לאיש קשר מקושר זה." -#: ../libempathy-gtk/empathy-individual-widget.c:1652 +#: ../libempathy-gtk/empathy-individual-widget.c:1650 #, c-format msgid "Linked contact containing %u contact" msgid_plural "Linked contacts containing %u contacts" @@ -2142,12 +2162,12 @@ msgid "Contact ID:" msgstr "מזהה איש הקשר:" #. add chat button -#: ../libempathy-gtk/empathy-new-message-dialog.c:171 +#: ../libempathy-gtk/empathy-new-message-dialog.c:258 msgid "C_hat" msgstr "שי_חה" #. Tweak the dialog -#: ../libempathy-gtk/empathy-new-message-dialog.c:181 +#: ../libempathy-gtk/empathy-new-message-dialog.c:277 msgid "New Conversation" msgstr "שיחה חדשה" @@ -2289,19 +2309,23 @@ msgstr "שמירת הודעת המ_צב החדשה" msgid "Saved Status Messages" msgstr "הודעות המצב שנשמרו" -#: ../libempathy-gtk/empathy-theme-manager.c:67 +#: ../libempathy-gtk/empathy-theme-adium.c:1462 +msgid "Normal" +msgstr "רגיל" + +#: ../libempathy-gtk/empathy-theme-manager.c:68 msgid "Classic" msgstr "קלאסי" -#: ../libempathy-gtk/empathy-theme-manager.c:68 +#: ../libempathy-gtk/empathy-theme-manager.c:69 msgid "Simple" msgstr "פשוט" -#: ../libempathy-gtk/empathy-theme-manager.c:69 +#: ../libempathy-gtk/empathy-theme-manager.c:70 msgid "Clean" msgstr "נקי" -#: ../libempathy-gtk/empathy-theme-manager.c:70 +#: ../libempathy-gtk/empathy-theme-manager.c:71 msgid "Blue" msgstr "כחול" @@ -2754,8 +2778,8 @@ msgid "Select the accounts you want to import:" msgstr "נא לבחור את החשבון שברצונך לייבא:" #: ../src/empathy-account-assistant.c:813 -#: ../src/empathy-new-chatroom-dialog.c:562 -#: ../src/empathy-new-chatroom-dialog.c:563 +#: ../src/empathy-new-chatroom-dialog.c:555 +#: ../src/empathy-new-chatroom-dialog.c:556 msgid "Yes" msgstr "כן" @@ -2827,34 +2851,34 @@ msgstr "ישנם שינויים שלא נשמרו בחשבון ה־%s שלך." msgid "Your new account has not been saved yet." msgstr "החשבון החדש שלך לא נשמר עדיין." -#: ../src/empathy-accounts-dialog.c:286 +#: ../src/empathy-accounts-dialog.c:345 #: ../src/empathy-streamed-media-window.c:809 msgid "Connecting…" msgstr "בהתחברות…" -#: ../src/empathy-accounts-dialog.c:327 +#: ../src/empathy-accounts-dialog.c:386 #, c-format msgid "Offline — %s" msgstr "לא מחובר — %s" -#: ../src/empathy-accounts-dialog.c:339 +#: ../src/empathy-accounts-dialog.c:398 #, c-format msgid "Disconnected — %s" msgstr "מנותק — %s" -#: ../src/empathy-accounts-dialog.c:350 +#: ../src/empathy-accounts-dialog.c:409 msgid "Offline — No Network Connection" msgstr "מנותק — אין חיבור לרשת" -#: ../src/empathy-accounts-dialog.c:357 +#: ../src/empathy-accounts-dialog.c:416 msgid "Unknown Status" msgstr "מצב לא ידוע" -#: ../src/empathy-accounts-dialog.c:369 +#: ../src/empathy-accounts-dialog.c:428 msgid "Offline — Account Disabled" msgstr "מנותק — החשבון מנוטרל" -#: ../src/empathy-accounts-dialog.c:772 +#: ../src/empathy-accounts-dialog.c:831 msgid "" "You are about to create a new account, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -2862,16 +2886,16 @@ msgstr "" "עומד להיווצר חשבון חדש, מה שיבטל\n" "את השינויים שלך. האם ברצונך להמשיך?" -#: ../src/empathy-accounts-dialog.c:1133 +#: ../src/empathy-accounts-dialog.c:1192 #, c-format msgid "Do you want to remove %s from your computer?" msgstr "האם ברצונך להסיר את החשבון '%s' ממחשבך?" -#: ../src/empathy-accounts-dialog.c:1137 +#: ../src/empathy-accounts-dialog.c:1196 msgid "This will not remove your account on the server." msgstr "פעולה זו לא תסיר את חשבונך מהשרת." -#: ../src/empathy-accounts-dialog.c:1375 +#: ../src/empathy-accounts-dialog.c:1432 msgid "" "You are about to select another account, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -2880,15 +2904,15 @@ msgstr "" "את השינויים שלך. האת אתה בטוח שברצונך להמשיך?" #. Menu items: to enabled/disable the account -#: ../src/empathy-accounts-dialog.c:1593 +#: ../src/empathy-accounts-dialog.c:1643 msgid "_Enable" msgstr "ה_פעלה" -#: ../src/empathy-accounts-dialog.c:1594 +#: ../src/empathy-accounts-dialog.c:1644 msgid "_Disable" msgstr "נ_טרול" -#: ../src/empathy-accounts-dialog.c:2113 +#: ../src/empathy-accounts-dialog.c:2154 msgid "" "You are about to close the window, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -2923,11 +2947,11 @@ msgstr "הו_ספה…" msgid "_Import…" msgstr "י_בוא…" -#: ../src/empathy-auth-client.c:250 +#: ../src/empathy-auth-client.c:249 msgid " - Empathy authentication client" msgstr "- לקוח האימות של Empathy" -#: ../src/empathy-auth-client.c:266 +#: ../src/empathy-auth-client.c:265 msgid "Empathy authentication client" msgstr "לקוח האימות של Empathy" @@ -3012,31 +3036,51 @@ msgstr "כתובת ה־IP של שרת הממסר" msgid "The IP address of the multicast group" msgstr "כתובת ה־IP של קבוצת התשדורת" +#: ../src/empathy-streamed-media-window.c:1906 +msgctxt "encoding video codec" +msgid "Unknown" +msgstr "לא ידוע" + +#: ../src/empathy-streamed-media-window.c:1909 +msgctxt "encoding audio codec" +msgid "Unknown" +msgstr "לא ידוע" + +#: ../src/empathy-streamed-media-window.c:1912 +msgctxt "decoding video codec" +msgid "Unknown" +msgstr "לא ידוע" + +#: ../src/empathy-streamed-media-window.c:1915 +msgctxt "decoding audio codec" +msgid "Unknown" +msgstr "לא ידוע" + #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-streamed-media-window.c:2270 +#: ../src/empathy-streamed-media-window.c:2274 #, c-format msgid "Connected — %d:%02dm" msgstr "מחובר — %d:%02d דק׳" -#: ../src/empathy-streamed-media-window.c:2331 +#: ../src/empathy-streamed-media-window.c:2335 msgid "Technical Details" msgstr "פרטים טכניים" -#: ../src/empathy-streamed-media-window.c:2369 +#: ../src/empathy-streamed-media-window.c:2373 #, c-format msgid "" "%s's software does not understand any of the audio formats supported by your " "computer" msgstr "התכנה של %s אינה מבינה את מבני השמע הנתמכים על ידי המחשב שלך" -#: ../src/empathy-streamed-media-window.c:2374 +#: ../src/empathy-streamed-media-window.c:2378 #, c-format msgid "" "%s's software does not understand any of the video formats supported by your " "computer" msgstr "התכנה של %s אינה מבינה את מבני הווידאו הנתמכים על ידי המחשב שלך" -#: ../src/empathy-streamed-media-window.c:2380 +#: ../src/empathy-streamed-media-window.c:2384 #, c-format msgid "" "Can't establish a connection to %s. One of you might be on a network that " @@ -3045,21 +3089,21 @@ msgstr "" "לא ניתן להפעיל את החיבור אל %s. כנראה אחד ממשתתפי השיחה מחובר לרשת שאינה " "מאפשרת חיבורים ישירים." -#: ../src/empathy-streamed-media-window.c:2386 +#: ../src/empathy-streamed-media-window.c:2390 msgid "There was a failure on the network" msgstr "אירעה שגיאה ברשת" -#: ../src/empathy-streamed-media-window.c:2390 +#: ../src/empathy-streamed-media-window.c:2394 msgid "" "The audio formats necessary for this call are not installed on your computer" msgstr "מבני השמע הדרושים לקיום שיחה זו אינם מותקנים במחשבך" -#: ../src/empathy-streamed-media-window.c:2393 +#: ../src/empathy-streamed-media-window.c:2397 msgid "" "The video formats necessary for this call are not installed on your computer" msgstr "מבני הווידאו הדרושים לקיום שיחה זו אינם מותקנים במחשבך" -#: ../src/empathy-streamed-media-window.c:2403 +#: ../src/empathy-streamed-media-window.c:2407 #, c-format msgid "" "Something unexpected happened in a Telepathy component. Please <a href=\"%s" @@ -3069,19 +3113,19 @@ msgstr "" "משהו בלתי צפוי ארע ברכיב של Telepathy. נא <a href=\"%s\">לדווח על באג זה</a> " "ולהוסיף דוחות שנאספו מחלון 'ניפוי השגיאות' שבתפריט העזרה." -#: ../src/empathy-streamed-media-window.c:2411 +#: ../src/empathy-streamed-media-window.c:2415 msgid "There was a failure in the call engine" msgstr "אירעה שגיאה במנוע הקריאה" -#: ../src/empathy-streamed-media-window.c:2414 +#: ../src/empathy-streamed-media-window.c:2418 msgid "The end of the stream was reached" msgstr "התזרים הגיע לסיומו" -#: ../src/empathy-streamed-media-window.c:2454 +#: ../src/empathy-streamed-media-window.c:2458 msgid "Can't establish audio stream" msgstr "לא ניתן לקיים תזרים שמע" -#: ../src/empathy-streamed-media-window.c:2464 +#: ../src/empathy-streamed-media-window.c:2468 msgid "Can't establish video stream" msgstr "לא ניתן לקיים תזרים וידאו" @@ -3153,6 +3197,10 @@ msgstr "שלח צליל" msgid "Toggle audio transmission" msgstr "החלפה בין העברה ואי העברה של שמע" +#: ../src/empathy-call-window.ui.h:18 +msgid "Unknown" +msgstr "לא ידוע" + #: ../src/empathy-call-window.ui.h:19 msgid "V_ideo" msgstr "_וידאו" @@ -3177,39 +3225,50 @@ msgstr "תצוגה מקדימה לווידאו" msgid "_Call" msgstr "_שיחה" -#: ../src/empathy-call-window.ui.h:25 ../src/empathy-main-window.ui.h:29 +#: ../src/empathy-call-window.ui.h:25 ../src/empathy-main-window.ui.h:30 msgid "_View" msgstr "_תצוגה" -#: ../src/empathy-chat-window.c:474 ../src/empathy-chat-window.c:494 +#: ../src/empathy-chat-window.c:480 ../src/empathy-chat-window.c:500 #, c-format msgid "%s (%d unread)" msgid_plural "%s (%d unread)" msgstr[0] "%s (אחת שלא נקראה)" msgstr[1] "%s (%d שלא נקראו)" -#: ../src/empathy-chat-window.c:486 +#: ../src/empathy-chat-window.c:492 #, c-format msgid "%s (and %u other)" msgid_plural "%s (and %u others)" msgstr[0] "%s (ואחד נוסף)" msgstr[1] "%s (ו־%u נוספים)" -#: ../src/empathy-chat-window.c:502 +#: ../src/empathy-chat-window.c:508 #, c-format msgid "%s (%d unread from others)" msgid_plural "%s (%d unread from others)" msgstr[0] "%s (אחת שלא נקראה מאחרים)" msgstr[1] "%s (%d שלא נקראו מאחרים)" -#: ../src/empathy-chat-window.c:511 +#: ../src/empathy-chat-window.c:517 #, c-format msgid "%s (%d unread from all)" msgid_plural "%s (%d unread from all)" msgstr[0] "%s (אחת שלא נקראה מכולם)" msgstr[1] "%s (%d שלא נקראו מכולם)" -#: ../src/empathy-chat-window.c:721 +#: ../src/empathy-chat-window.c:732 +msgid "SMS:" +msgstr "SMS:" + +#: ../src/empathy-chat-window.c:742 +#, c-format +msgid "Sending %d message" +msgid_plural "Sending %d messages" +msgstr[0] "נשלחת הודעה אחת" +msgstr[1] "נשלחות %d הודעות" + +#: ../src/empathy-chat-window.c:764 msgid "Typing a message." msgstr "הודעה מוקלדת." @@ -3245,7 +3304,7 @@ msgstr "הזזת הלשונית _ימינה" msgid "Notify for All Messages" msgstr "התרעה עבור כל ההודעות" -#: ../src/empathy-chat-window.ui.h:9 ../src/empathy-main-window.ui.h:17 +#: ../src/empathy-chat-window.ui.h:9 ../src/empathy-main-window.ui.h:18 msgid "_Contents" msgstr "_תכנים" @@ -3257,7 +3316,7 @@ msgstr "_שיחה" msgid "_Detach Tab" msgstr "_ניתוק הלשונית" -#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:19 +#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:20 msgid "_Edit" msgstr "ע_ריכה" @@ -3265,7 +3324,7 @@ msgstr "ע_ריכה" msgid "_Favorite Chat Room" msgstr "_הוספת חדר השיחה למועדפים" -#: ../src/empathy-chat-window.ui.h:14 ../src/empathy-main-window.ui.h:21 +#: ../src/empathy-chat-window.ui.h:14 ../src/empathy-main-window.ui.h:22 msgid "_Help" msgstr "ע_זרה" @@ -3305,90 +3364,90 @@ msgstr "חיבור אוטומטי" msgid "Manage Favorite Rooms" msgstr "ניהול חדרי שיחה מועדפים" -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:504 msgid "Incoming video call" msgstr "שיחה קולית נכנסת" -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:504 msgid "Incoming call" msgstr "שיחה נכנסת" -#: ../src/empathy-event-manager.c:511 +#: ../src/empathy-event-manager.c:508 #, c-format msgid "%s is video calling you. Do you want to answer?" msgstr "%s מתקשר אליך עם וידאו, האם ברצונך לענות?" -#: ../src/empathy-event-manager.c:512 +#: ../src/empathy-event-manager.c:509 #, c-format msgid "%s is calling you. Do you want to answer?" msgstr "%s מתקשר אליך, האם ברצונך לענות?" -#: ../src/empathy-event-manager.c:515 ../src/empathy-event-manager.c:667 +#: ../src/empathy-event-manager.c:512 ../src/empathy-event-manager.c:661 #, c-format msgid "Incoming call from %s" msgstr "שיחה נכנסת מ־%s" -#: ../src/empathy-event-manager.c:540 +#: ../src/empathy-event-manager.c:537 msgid "_Reject" msgstr "_דחייה" -#: ../src/empathy-event-manager.c:546 +#: ../src/empathy-event-manager.c:543 msgid "_Answer" msgstr "_מענה" -#: ../src/empathy-event-manager.c:667 +#: ../src/empathy-event-manager.c:661 #, c-format msgid "Incoming video call from %s" msgstr "שיחת וידאו נכנסת מ־%s" -#: ../src/empathy-event-manager.c:744 +#: ../src/empathy-event-manager.c:734 msgid "Room invitation" msgstr "הזמנה לחדר" -#: ../src/empathy-event-manager.c:746 +#: ../src/empathy-event-manager.c:736 #, c-format msgid "Invitation to join %s" msgstr "הזמנה להצטרף ל־%s" -#: ../src/empathy-event-manager.c:753 +#: ../src/empathy-event-manager.c:743 #, c-format msgid "%s is inviting you to join %s" msgstr "%s מזמין/ה אותך להצטרף אל %s" -#: ../src/empathy-event-manager.c:761 +#: ../src/empathy-event-manager.c:751 msgid "_Decline" msgstr "_סירוב" -#: ../src/empathy-event-manager.c:766 +#: ../src/empathy-event-manager.c:756 #: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "ה_צטרפות" -#: ../src/empathy-event-manager.c:793 +#: ../src/empathy-event-manager.c:783 #, c-format msgid "%s invited you to join %s" msgstr "%s הזמין/ה אותך להצטרף אל %s" -#: ../src/empathy-event-manager.c:799 +#: ../src/empathy-event-manager.c:789 #, c-format msgid "You have been invited to join %s" msgstr "הוזמנת להצטרף אל %s" -#: ../src/empathy-event-manager.c:850 +#: ../src/empathy-event-manager.c:840 #, c-format msgid "Incoming file transfer from %s" msgstr "העברת קבצים נכנסת מ־%s" -#: ../src/empathy-event-manager.c:1020 ../src/empathy-main-window.c:370 +#: ../src/empathy-event-manager.c:1010 ../src/empathy-main-window.c:377 msgid "Password required" msgstr "נדרשת ססמה" -#: ../src/empathy-event-manager.c:1076 +#: ../src/empathy-event-manager.c:1066 #, c-format msgid "%s would like permission to see when you are online" msgstr "%s רוצה הרשאות לצפייה מתי המשתמש שלך מחובר" -#: ../src/empathy-event-manager.c:1080 +#: ../src/empathy-event-manager.c:1070 #, c-format msgid "" "\n" @@ -3474,7 +3533,7 @@ msgstr "הקובץ \"%s\" נשלח אל %s" msgid "File transfer completed" msgstr "העברת קובץ הושלמה" -#: ../src/empathy-ft-manager.c:616 ../src/empathy-ft-manager.c:783 +#: ../src/empathy-ft-manager.c:616 ../src/empathy-ft-manager.c:780 msgid "Waiting for the other participant's response" msgstr "בהמתנה לתגובה של משתתפים נוספים" @@ -3488,15 +3547,15 @@ msgstr "נבדקת השלמות של \"%s\"" msgid "Hashing \"%s\"" msgstr "מתבצע גיבוב ל־\"%s\"" -#: ../src/empathy-ft-manager.c:1029 +#: ../src/empathy-ft-manager.c:1026 msgid "%" msgstr "%" -#: ../src/empathy-ft-manager.c:1041 +#: ../src/empathy-ft-manager.c:1038 msgid "File" msgstr "קובץ" -#: ../src/empathy-ft-manager.c:1063 +#: ../src/empathy-ft-manager.c:1060 msgid "Remaining" msgstr "נותר" @@ -3532,39 +3591,55 @@ msgstr "פרוטוקול" msgid "Source" msgstr "מקור" -#: ../src/empathy-main-window.c:387 +#: ../src/empathy-main-window.c:394 msgid "Provide Password" msgstr "הזנת ססמה" -#: ../src/empathy-main-window.c:393 +#: ../src/empathy-main-window.c:400 msgid "Disconnect" msgstr "ניתוק" -#: ../src/empathy-main-window.c:533 +#: ../src/empathy-main-window.c:540 msgid "No match found" msgstr "לא נמצאה התאמה" -#: ../src/empathy-main-window.c:688 +#: ../src/empathy-main-window.c:695 msgid "Reconnect" msgstr "התחברות מחדש" -#: ../src/empathy-main-window.c:694 +#: ../src/empathy-main-window.c:701 msgid "Edit Account" msgstr "עריכת חשבון" -#: ../src/empathy-main-window.c:700 +#: ../src/empathy-main-window.c:707 msgid "Close" msgstr "סגירה" -#: ../src/empathy-main-window.c:1418 +#. Translators: this string will be something like: +#. * Top up My Account ($1.23)..." +#: ../src/empathy-main-window.c:849 +#, c-format +msgid "Top up %s (%s)..." +msgstr "Top up %s (%s)..." + +#: ../src/empathy-main-window.c:924 +msgid "Top up account credit" +msgstr "אשראי חשבון ה־Top up" + +#. top up button +#: ../src/empathy-main-window.c:999 +msgid "Top Up..." +msgstr "Top Up..." + +#: ../src/empathy-main-window.c:1752 msgid "Contact" msgstr "איש קשר" -#: ../src/empathy-main-window.c:1765 +#: ../src/empathy-main-window.c:2101 msgid "Contact List" msgstr "רשימת אנשי קשר" -#: ../src/empathy-main-window.c:1881 +#: ../src/empathy-main-window.c:2219 msgid "Show and edit accounts" msgstr "הצגה ועריכה של חשבונות" @@ -3573,86 +3648,90 @@ msgid "Contacts on a _Map" msgstr "אנשי קשר על ה_מפה" #: ../src/empathy-main-window.ui.h:2 +msgid "Credit Balance" +msgstr "מאזן האשראי" + +#: ../src/empathy-main-window.ui.h:3 msgid "Find in Contact _List" msgstr "_חיפוש ברשימת אנשי הקשר" -#: ../src/empathy-main-window.ui.h:3 +#: ../src/empathy-main-window.ui.h:4 msgid "Join _Favorites" msgstr "_צירוף למועדפים" -#: ../src/empathy-main-window.ui.h:4 +#: ../src/empathy-main-window.ui.h:5 msgid "Manage Favorites" msgstr "ניהול מועדפים" -#: ../src/empathy-main-window.ui.h:5 +#: ../src/empathy-main-window.ui.h:6 msgid "N_ormal Size" msgstr "גודל _רגיל" -#: ../src/empathy-main-window.ui.h:6 ../src/empathy-status-icon.ui.h:1 +#: ../src/empathy-main-window.ui.h:7 ../src/empathy-status-icon.ui.h:1 msgid "New _Call…" msgstr "_שיחה חדשה…" -#: ../src/empathy-main-window.ui.h:7 +#: ../src/empathy-main-window.ui.h:8 msgid "Normal Size With _Avatars" msgstr "גודל רגיל עם _תמונות אישיות" -#: ../src/empathy-main-window.ui.h:8 +#: ../src/empathy-main-window.ui.h:9 msgid "P_references" msgstr "העד_פות" -#: ../src/empathy-main-window.ui.h:9 +#: ../src/empathy-main-window.ui.h:10 msgid "Show P_rotocols" msgstr "הצגת פ_רוטוקולים" -#: ../src/empathy-main-window.ui.h:10 +#: ../src/empathy-main-window.ui.h:11 msgid "Sort by _Name" msgstr "מיון לפי _שם" -#: ../src/empathy-main-window.ui.h:11 +#: ../src/empathy-main-window.ui.h:12 msgid "Sort by _Status" msgstr "מיון לפי _מצב" -#: ../src/empathy-main-window.ui.h:12 +#: ../src/empathy-main-window.ui.h:13 msgid "_Accounts" msgstr "_חשבונות" -#: ../src/empathy-main-window.ui.h:14 +#: ../src/empathy-main-window.ui.h:15 msgid "_Blocked Contacts" msgstr "אנשי קשר _חסומים" -#: ../src/empathy-main-window.ui.h:16 +#: ../src/empathy-main-window.ui.h:17 msgid "_Compact Size" msgstr "גודל _קומפקטי" -#: ../src/empathy-main-window.ui.h:18 +#: ../src/empathy-main-window.ui.h:19 msgid "_Debug" msgstr "_ניפוי שגיאות" -#: ../src/empathy-main-window.ui.h:20 +#: ../src/empathy-main-window.ui.h:21 msgid "_File Transfers" msgstr "העברות _קבצים" -#: ../src/empathy-main-window.ui.h:22 +#: ../src/empathy-main-window.ui.h:23 msgid "_Join…" msgstr "ה_צטרפות…" -#: ../src/empathy-main-window.ui.h:23 ../src/empathy-status-icon.ui.h:3 +#: ../src/empathy-main-window.ui.h:24 ../src/empathy-status-icon.ui.h:3 msgid "_New Conversation…" msgstr "_שיחה חדשה…" -#: ../src/empathy-main-window.ui.h:24 +#: ../src/empathy-main-window.ui.h:25 msgid "_Offline Contacts" msgstr "אנשי קשר _לא מחוברים" -#: ../src/empathy-main-window.ui.h:25 +#: ../src/empathy-main-window.ui.h:26 msgid "_Personal Information" msgstr "מידע _אישי" -#: ../src/empathy-main-window.ui.h:27 +#: ../src/empathy-main-window.ui.h:28 msgid "_Room" msgstr "_חדר" -#: ../src/empathy-main-window.ui.h:28 +#: ../src/empathy-main-window.ui.h:29 msgid "_Search for Contacts…" msgstr "_חיפוש אחר אנשי קשר…" @@ -3666,7 +3745,7 @@ msgstr "חברים" #. Translators: Room/Join's roomlist tooltip. Parameters are a channel name, #. yes/no, yes/no and a number. -#: ../src/empathy-new-chatroom-dialog.c:560 +#: ../src/empathy-new-chatroom-dialog.c:553 #, c-format msgid "" "%s\n" @@ -3679,16 +3758,16 @@ msgstr "" "נדרשת ססמה: %s\n" "חברים: %s" -#: ../src/empathy-new-chatroom-dialog.c:562 -#: ../src/empathy-new-chatroom-dialog.c:563 +#: ../src/empathy-new-chatroom-dialog.c:555 +#: ../src/empathy-new-chatroom-dialog.c:556 msgid "No" msgstr "לא" -#: ../src/empathy-new-chatroom-dialog.c:591 +#: ../src/empathy-new-chatroom-dialog.c:584 msgid "Could not start room listing" msgstr "לא ניתן להתחיל את הצגת החדרים" -#: ../src/empathy-new-chatroom-dialog.c:601 +#: ../src/empathy-new-chatroom-dialog.c:594 msgid "Could not stop room listing" msgstr "לא ניתן לעצור את הצגת החדרים" @@ -3722,39 +3801,79 @@ msgstr "רשימת חדרים" msgid "_Room:" msgstr "_חדר:" -#: ../src/empathy-preferences.c:139 +#: ../src/empathy-preferences.c:147 msgid "Message received" msgstr "התקבלה הודעה" -#: ../src/empathy-preferences.c:140 +#: ../src/empathy-preferences.c:148 msgid "Message sent" msgstr "הודעה נשלחה" -#: ../src/empathy-preferences.c:141 +#: ../src/empathy-preferences.c:149 msgid "New conversation" msgstr "שיחה חדשה" -#: ../src/empathy-preferences.c:142 +#: ../src/empathy-preferences.c:150 msgid "Contact goes online" msgstr "איש קשר מתחבר" -#: ../src/empathy-preferences.c:143 +#: ../src/empathy-preferences.c:151 msgid "Contact goes offline" msgstr "איש קשר מתנתק" -#: ../src/empathy-preferences.c:144 +#: ../src/empathy-preferences.c:152 msgid "Account connected" msgstr "חשבון מחובר" -#: ../src/empathy-preferences.c:145 +#: ../src/empathy-preferences.c:153 msgid "Account disconnected" msgstr "חשבון נותק" -#: ../src/empathy-preferences.c:446 +#: ../src/empathy-preferences.c:450 msgid "Language" msgstr "שפה" -#: ../src/empathy-preferences.c:875 +#. translators: Contact name for the chat theme preview +#: ../src/empathy-preferences.c:700 +msgid "Juliet" +msgstr "יוליה" + +#. translators: Contact name for the chat theme preview +#: ../src/empathy-preferences.c:707 +msgid "Romeo" +msgstr "רומיאו" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:713 +msgid "O Romeo, Romeo, wherefore art thou Romeo?" +msgstr "הו רומיאו, רומיאו, מן אין שבת רומיאו?" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:716 +msgid "Deny thy father and refuse thy name;" +msgstr "" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:719 +msgid "Or if thou wilt not, be but sworn my love" +msgstr "" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:722 +msgid "And I'll no longer be a Capulet." +msgstr "" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:725 +msgid "Shall I hear more, or shall I speak at this?" +msgstr "" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:728 +msgid "Juliet has disconnected" +msgstr "יוליה התנתקה" + +#: ../src/empathy-preferences.c:962 msgid "Preferences" msgstr "העדפות" @@ -3854,43 +3973,47 @@ msgid "" msgstr "ברשימת השפות מוצגות שפות שעבורן מותקנים אצלך מילונים." #: ../src/empathy-preferences.ui.h:24 +msgid "Theme Variant:" +msgstr "הגוון הערכה:" + +#: ../src/empathy-preferences.ui.h:25 msgid "Themes" msgstr "ערכות נושא" -#: ../src/empathy-preferences.ui.h:25 +#: ../src/empathy-preferences.ui.h:26 msgid "_Automatically connect on startup" msgstr "התחברות _אוטומטית עם ההפעלה" -#: ../src/empathy-preferences.ui.h:26 +#: ../src/empathy-preferences.ui.h:27 msgid "_Cellphone" msgstr "טלפון _סלולרי" -#: ../src/empathy-preferences.ui.h:27 +#: ../src/empathy-preferences.ui.h:28 msgid "_Enable bubble notifications" msgstr "ה_פעלת התרעות בתוך בועה" -#: ../src/empathy-preferences.ui.h:28 +#: ../src/empathy-preferences.ui.h:29 msgid "_Enable sound notifications" msgstr "ה_פעלת התרעות קוליות" -#: ../src/empathy-preferences.ui.h:29 +#: ../src/empathy-preferences.ui.h:30 msgid "_GPS" msgstr "_GPS" -#: ../src/empathy-preferences.ui.h:30 +#: ../src/empathy-preferences.ui.h:31 msgid "_Network (IP, Wi-Fi)" msgstr "_רשת (IP, אלחוטית)" -#: ../src/empathy-preferences.ui.h:31 +#: ../src/empathy-preferences.ui.h:32 msgid "_Open new chats in separate windows" msgstr "_פתיחת שיחות חדשות בחלונות נפרדים" -#: ../src/empathy-preferences.ui.h:32 +#: ../src/empathy-preferences.ui.h:33 msgid "_Publish location to my contacts" msgstr "_פרסום המיקום שלי לאנשי הקשר שלי" #. To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees. -#: ../src/empathy-preferences.ui.h:34 +#: ../src/empathy-preferences.ui.h:35 msgid "_Reduce location accuracy" msgstr "ה_פחתת דיוק המיקום" @@ -3902,7 +4025,7 @@ msgstr "מצב" msgid "_Quit" msgstr "יצי_אה" -#: ../src/empathy-map-view.c:442 +#: ../src/empathy-map-view.c:448 msgid "Contact Map View" msgstr "מפת אנשי קשר" @@ -4052,6 +4175,13 @@ msgstr "שיחה שלא נענתה מאת %s" msgid "%s just tried to call you, but you were in another call." msgstr "התקבלה בקשת שיחה מאת %s, אך באותו הזמן כבר היית בשיחה אחרת." +#: ../libempathy-gtk/empathy-search-bar.c:282 +msgid "_Match case" +msgstr "התאמת _רישיות" + +#~ msgid "_Enabled" +#~ msgstr "מו_פעל" + #~ msgid "%s is now offline." #~ msgstr "%s מנותק/ת כעת." @@ -4127,9 +4257,6 @@ msgstr "התקבלה בקשת שיחה מאת %s, אך באותו הזמן כב #~ msgid "%s account" #~ msgstr "חשבון %s" -#~ msgid "Salut account is created" -#~ msgstr "Salut account is created" - #~ msgid "Whether the Salut account has been created on the first Empathy run." #~ msgstr "" #~ "Whether the Salut account has been created on the first Empathy run." @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: empathy 2.92.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-20 11:24+0100\n" -"PO-Revision-Date: 2011-03-17 09:53+0100\n" +"POT-Creation-Date: 2011-05-04 11:11+0200\n" +"PO-Revision-Date: 2011-05-04 11:14+0200\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n" "Language: no\n" @@ -441,7 +441,7 @@ msgstr "Håndter meldings- og VoIP-kontoer" #. Tweak the dialog #: ../data/empathy-accounts.desktop.in.in.h:2 -#: ../src/empathy-accounts-dialog.c:2242 +#: ../src/empathy-accounts-dialog.c:2340 msgid "Messaging and VoIP Accounts" msgstr "Meldings- og VoIP-kontoer" @@ -489,7 +489,7 @@ msgstr "Feil under overføring av filen" msgid "The other participant is unable to transfer the file" msgstr "Avsender kan ikke overføre filen" -#: ../libempathy/empathy-tp-file.c:405 ../libempathy/empathy-utils.c:382 +#: ../libempathy/empathy-tp-file.c:405 ../libempathy/empathy-utils.c:383 msgid "Unknown reason" msgstr "Ukjent årsak" @@ -513,120 +513,117 @@ msgstr "Usynlig" msgid "Offline" msgstr "Frakoblet" -#: ../libempathy/empathy-utils.c:315 -#: ../src/empathy-streamed-media-window.c:1904 -#: ../src/empathy-streamed-media-window.c:1905 -#: ../src/empathy-streamed-media-window.c:1906 -#: ../src/empathy-streamed-media-window.c:1907 -#: ../src/empathy-call-window.ui.h:18 +#. translators: presence type is unknown +#: ../libempathy/empathy-utils.c:316 +msgctxt "presence" msgid "Unknown" msgstr "Ukjent" -#: ../libempathy/empathy-utils.c:354 +#: ../libempathy/empathy-utils.c:355 msgid "No reason specified" msgstr "Ingen årsak oppgitt" -#: ../libempathy/empathy-utils.c:356 ../libempathy/empathy-utils.c:412 +#: ../libempathy/empathy-utils.c:357 ../libempathy/empathy-utils.c:413 msgid "Status is set to offline" msgstr "Status er satt til frakoblet" -#: ../libempathy/empathy-utils.c:358 ../libempathy/empathy-utils.c:392 +#: ../libempathy/empathy-utils.c:359 ../libempathy/empathy-utils.c:393 msgid "Network error" msgstr "Nettverksfeil" -#: ../libempathy/empathy-utils.c:360 ../libempathy/empathy-utils.c:394 +#: ../libempathy/empathy-utils.c:361 ../libempathy/empathy-utils.c:395 msgid "Authentication failed" msgstr "Autentiseringen feilet" -#: ../libempathy/empathy-utils.c:362 ../libempathy/empathy-utils.c:396 +#: ../libempathy/empathy-utils.c:363 ../libempathy/empathy-utils.c:397 msgid "Encryption error" msgstr "Krypteringsfeil" -#: ../libempathy/empathy-utils.c:364 +#: ../libempathy/empathy-utils.c:365 msgid "Name in use" msgstr "Navn i bruk" -#: ../libempathy/empathy-utils.c:366 ../libempathy/empathy-utils.c:398 +#: ../libempathy/empathy-utils.c:367 ../libempathy/empathy-utils.c:399 msgid "Certificate not provided" msgstr "Sertifikat ikke oppgitt" -#: ../libempathy/empathy-utils.c:368 ../libempathy/empathy-utils.c:400 +#: ../libempathy/empathy-utils.c:369 ../libempathy/empathy-utils.c:401 msgid "Certificate untrusted" msgstr "Stoler ikke på sertifikat" -#: ../libempathy/empathy-utils.c:370 ../libempathy/empathy-utils.c:402 +#: ../libempathy/empathy-utils.c:371 ../libempathy/empathy-utils.c:403 msgid "Certificate expired" msgstr "Sertifikat utgått" -#: ../libempathy/empathy-utils.c:372 ../libempathy/empathy-utils.c:404 +#: ../libempathy/empathy-utils.c:373 ../libempathy/empathy-utils.c:405 msgid "Certificate not activated" msgstr "Sertifikat ikke aktivert" -#: ../libempathy/empathy-utils.c:374 ../libempathy/empathy-utils.c:406 +#: ../libempathy/empathy-utils.c:375 ../libempathy/empathy-utils.c:407 msgid "Certificate hostname mismatch" msgstr "Feil vertsnavn i forhold til sertifikat" -#: ../libempathy/empathy-utils.c:376 ../libempathy/empathy-utils.c:408 +#: ../libempathy/empathy-utils.c:377 ../libempathy/empathy-utils.c:409 msgid "Certificate fingerprint mismatch" msgstr "Fingeravtrykk stemmer ikke for sertifikat" -#: ../libempathy/empathy-utils.c:378 ../libempathy/empathy-utils.c:410 +#: ../libempathy/empathy-utils.c:379 ../libempathy/empathy-utils.c:411 msgid "Certificate self-signed" msgstr "Selvsignert sertifikat" -#: ../libempathy/empathy-utils.c:380 +#: ../libempathy/empathy-utils.c:381 msgid "Certificate error" msgstr "Sertifikatsfeil" -#: ../libempathy/empathy-utils.c:414 +#: ../libempathy/empathy-utils.c:415 msgid "Encryption is not available" msgstr "Kryptering er ikke tilgjengelig" -#: ../libempathy/empathy-utils.c:416 +#: ../libempathy/empathy-utils.c:417 msgid "Certificate is invalid" msgstr "Sertifikatet ikke ugyldig" -#: ../libempathy/empathy-utils.c:418 +#: ../libempathy/empathy-utils.c:419 msgid "Connection has been refused" msgstr "Tilkobling nektes" -#: ../libempathy/empathy-utils.c:420 +#: ../libempathy/empathy-utils.c:421 msgid "Connection can't be established" msgstr "Tilkobling kan ikke etableres" -#: ../libempathy/empathy-utils.c:422 +#: ../libempathy/empathy-utils.c:423 msgid "Connection has been lost" msgstr "Tilkobling mistet" -#: ../libempathy/empathy-utils.c:424 +#: ../libempathy/empathy-utils.c:425 msgid "This resource is already connected to the server" msgstr "Denne ressursen er allerede koblet til tjeneren" -#: ../libempathy/empathy-utils.c:426 +#: ../libempathy/empathy-utils.c:427 msgid "" "Connection has been replaced by a new connection using the same resource" msgstr "" "Tilkoblingen er erstattet med en ny tilkobling som bruker samme ressurs" -#: ../libempathy/empathy-utils.c:429 +#: ../libempathy/empathy-utils.c:430 msgid "The account already exists on the server" msgstr "Kontoen eksisterer allerede på tjeneren" -#: ../libempathy/empathy-utils.c:431 +#: ../libempathy/empathy-utils.c:432 msgid "Server is currently too busy to handle the connection" msgstr "Tjeneren er for opptatt til å håndtere tilkoblingen" -#: ../libempathy/empathy-utils.c:433 +#: ../libempathy/empathy-utils.c:434 msgid "Certificate has been revoked" msgstr "Sertifikatet er trukket tilbake" -#: ../libempathy/empathy-utils.c:435 +#: ../libempathy/empathy-utils.c:436 msgid "" "Certificate uses an insecure cipher algorithm or is cryptographically weak" msgstr "" "Sertifikatet bruker en usikker cipher-algoritme eller er kryptografisk svakt" -#: ../libempathy/empathy-utils.c:438 +#: ../libempathy/empathy-utils.c:439 msgid "" "The length of the server certificate, or the depth of the server certificate " "chain, exceed the limits imposed by the cryptography library" @@ -634,66 +631,66 @@ msgstr "" "Lengden på tjenersertifikatet eller dybden på sertifikatkjeden på tjeneren " "oversteg grensen som settes av kryptografibiblioteket" -#: ../libempathy/empathy-utils.c:601 +#: ../libempathy/empathy-utils.c:602 #: ../libempathy-gtk/empathy-contact-list-store.h:73 msgid "People Nearby" msgstr "Personer i nærheten" -#: ../libempathy/empathy-utils.c:606 +#: ../libempathy/empathy-utils.c:607 msgid "Yahoo! Japan" msgstr "Yahoo! Japan" -#: ../libempathy/empathy-utils.c:635 +#: ../libempathy/empathy-utils.c:636 msgid "Google Talk" msgstr "Google Talk" -#: ../libempathy/empathy-utils.c:636 +#: ../libempathy/empathy-utils.c:637 msgid "Facebook Chat" msgstr "Facebook-prat" -#: ../libempathy/empathy-time.c:137 +#: ../libempathy/empathy-time.c:100 #, c-format msgid "%d second ago" msgid_plural "%d seconds ago" msgstr[0] "%d sekund siden" msgstr[1] "%d sekunder siden" -#: ../libempathy/empathy-time.c:142 +#: ../libempathy/empathy-time.c:105 #, c-format msgid "%d minute ago" msgid_plural "%d minutes ago" msgstr[0] "%d minutt siden" msgstr[1] "%d minutter siden" -#: ../libempathy/empathy-time.c:147 +#: ../libempathy/empathy-time.c:110 #, c-format msgid "%d hour ago" msgid_plural "%d hours ago" msgstr[0] "%d time siden" msgstr[1] "%d timer siden" -#: ../libempathy/empathy-time.c:152 +#: ../libempathy/empathy-time.c:115 #, c-format msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d dag siden" msgstr[1] "%d dager siden" -#: ../libempathy/empathy-time.c:157 +#: ../libempathy/empathy-time.c:120 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" msgstr[0] "%d uke siden" msgstr[1] "%d uker siden" -#: ../libempathy/empathy-time.c:162 +#: ../libempathy/empathy-time.c:125 #, c-format msgid "%d month ago" msgid_plural "%d months ago" msgstr[0] "%d måned siden" msgstr[1] "%d måneder siden" -#: ../libempathy/empathy-time.c:167 +#: ../libempathy/empathy-time.c:130 msgid "in the future" msgstr "i fremtiden" @@ -701,83 +698,67 @@ msgstr "i fremtiden" msgid "All" msgstr "Alle" -#: ../libempathy-gtk/empathy-account-widget.c:682 +#: ../libempathy-gtk/empathy-account-widget.c:678 #: ../libempathy-gtk/empathy-log-window.c:643 #: ../src/empathy-import-widget.c:321 msgid "Account" msgstr "Konto" -#: ../libempathy-gtk/empathy-account-widget.c:683 +#: ../libempathy-gtk/empathy-account-widget.c:679 msgid "Password" msgstr "Passord" -#: ../libempathy-gtk/empathy-account-widget.c:684 +#: ../libempathy-gtk/empathy-account-widget.c:680 #: ../libempathy-gtk/empathy-irc-network-dialog.c:507 msgid "Server" msgstr "Tjener" -#: ../libempathy-gtk/empathy-account-widget.c:685 +#: ../libempathy-gtk/empathy-account-widget.c:681 #: ../libempathy-gtk/empathy-irc-network-dialog.c:522 msgid "Port" msgstr "Port" -#: ../libempathy-gtk/empathy-account-widget.c:757 -#: ../libempathy-gtk/empathy-account-widget.c:814 +#: ../libempathy-gtk/empathy-account-widget.c:753 +#: ../libempathy-gtk/empathy-account-widget.c:810 #, c-format msgid "%s:" msgstr "%s:" -#: ../libempathy-gtk/empathy-account-widget.c:1166 +#: ../libempathy-gtk/empathy-account-widget.c:1151 #, c-format msgid "The account %s is edited via My Web Accounts." msgstr "Konto %s er redigert via Mine nettkontoer." -#: ../libempathy-gtk/empathy-account-widget.c:1172 +#: ../libempathy-gtk/empathy-account-widget.c:1157 #, c-format msgid "The account %s cannot be edited in Empathy." msgstr "Konto %s kan ikke redigeres i Empathy." -#: ../libempathy-gtk/empathy-account-widget.c:1192 +#: ../libempathy-gtk/empathy-account-widget.c:1177 msgid "Launch My Web Accounts" msgstr "Start Mine nettkontoer" -#: ../libempathy-gtk/empathy-account-widget.c:1530 +#: ../libempathy-gtk/empathy-account-widget.c:1515 msgid "Username:" msgstr "Brukernavn:" -#: ../libempathy-gtk/empathy-account-widget.c:1897 +#: ../libempathy-gtk/empathy-account-widget.c:1833 msgid "A_pply" msgstr "_Bruk" -#: ../libempathy-gtk/empathy-account-widget.c:1927 +#: ../libempathy-gtk/empathy-account-widget.c:1863 msgid "L_og in" msgstr "L_ogg inn" -#. Account and Identifier -#: ../libempathy-gtk/empathy-account-widget.c:1993 -#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1 -#: ../libempathy-gtk/empathy-contact-search-dialog.c:520 -#: ../libempathy-gtk/empathy-contact-widget.ui.h:2 -#: ../libempathy-gtk/empathy-individual-widget.c:1481 -#: ../libempathy-gtk/empathy-contact-selector-dialog.ui.h:1 -#: ../src/empathy-chatrooms-window.ui.h:1 -#: ../src/empathy-new-chatroom-dialog.ui.h:1 -msgid "Account:" -msgstr "Konto:" - -#: ../libempathy-gtk/empathy-account-widget.c:2004 -msgid "_Enabled" -msgstr "Slått _på" - -#: ../libempathy-gtk/empathy-account-widget.c:2069 +#: ../libempathy-gtk/empathy-account-widget.c:1937 msgid "This account already exists on the server" msgstr "Denne kontoen eksisterer allerede på tjeneren" -#: ../libempathy-gtk/empathy-account-widget.c:2072 +#: ../libempathy-gtk/empathy-account-widget.c:1940 msgid "Create a new account on the server" msgstr "Lag en ny konto på tjeneren" -#: ../libempathy-gtk/empathy-account-widget.c:2264 +#: ../libempathy-gtk/empathy-account-widget.c:2132 msgid "Ca_ncel" msgstr "A_vbryt" @@ -786,19 +767,19 @@ msgstr "A_vbryt" #. * like: "MyUserName on freenode". #. * You should reverse the order of these arguments if the #. * server should come before the login id in your locale. -#: ../libempathy-gtk/empathy-account-widget.c:2561 +#: ../libempathy-gtk/empathy-account-widget.c:2413 #, c-format msgid "%1$s on %2$s" msgstr "%1$s av %2$s" #. To translators: The parameter is the protocol name. The resulting #. * string will be something like: "Jabber Account" -#: ../libempathy-gtk/empathy-account-widget.c:2587 +#: ../libempathy-gtk/empathy-account-widget.c:2439 #, c-format msgid "%s Account" msgstr "%s-konto" -#: ../libempathy-gtk/empathy-account-widget.c:2591 +#: ../libempathy-gtk/empathy-account-widget.c:2443 msgid "New account" msgstr "Ny konto" @@ -1238,23 +1219,23 @@ msgstr "Emne er ikke støttet for denne samtalen" msgid "You are not allowed to change the topic" msgstr "Du har ikke lov til å bytte emne" -#: ../libempathy-gtk/empathy-chat.c:906 +#: ../libempathy-gtk/empathy-chat.c:932 msgid "/clear: clear all messages from the current conversation" msgstr "/clear: tøm alle meldinger fra aktiv samtale" -#: ../libempathy-gtk/empathy-chat.c:909 +#: ../libempathy-gtk/empathy-chat.c:935 msgid "/topic <topic>: set the topic of the current conversation" msgstr "/topic <emne>: sett emne for aktiv samtale" -#: ../libempathy-gtk/empathy-chat.c:912 +#: ../libempathy-gtk/empathy-chat.c:938 msgid "/join <chat room ID>: join a new chat room" msgstr "/join <ID for praterom>: bli med i et nytt praterom" -#: ../libempathy-gtk/empathy-chat.c:915 +#: ../libempathy-gtk/empathy-chat.c:941 msgid "/j <chat room ID>: join a new chat room" msgstr "/j <prateroms-ID>: bli med i et nytt praterom" -#: ../libempathy-gtk/empathy-chat.c:920 +#: ../libempathy-gtk/empathy-chat.c:946 msgid "" "/part [<chat room ID>] [<reason>]: leave the chat room, by default the " "current one" @@ -1262,23 +1243,23 @@ msgstr "" "/part [<praterom-ID>] [<årsak>]: forlat praterommet, forvalg er det aktive " "rommet" -#: ../libempathy-gtk/empathy-chat.c:925 +#: ../libempathy-gtk/empathy-chat.c:951 msgid "/query <contact ID> [<message>]: open a private chat" msgstr "/query <kontakt-ID> [<melding>]: åpne en privat samtale" -#: ../libempathy-gtk/empathy-chat.c:928 +#: ../libempathy-gtk/empathy-chat.c:954 msgid "/msg <contact ID> <message>: open a private chat" msgstr "/msg <kontakt-ID> <melding>: åpne en privat samtale" -#: ../libempathy-gtk/empathy-chat.c:931 +#: ../libempathy-gtk/empathy-chat.c:957 msgid "/nick <nickname>: change your nickname on the current server" msgstr "/nick <kallenavn>: bytt kallenavn på denne tjeneren" -#: ../libempathy-gtk/empathy-chat.c:934 +#: ../libempathy-gtk/empathy-chat.c:960 msgid "/me <message>: send an ACTION message to the current conversation" msgstr "/me <melding>: send en HANDLINGS-melding til aktiv samtale" -#: ../libempathy-gtk/empathy-chat.c:937 +#: ../libempathy-gtk/empathy-chat.c:963 msgid "" "/say <message>: send <message> to the current conversation. This is used to " "send a message starting with a '/'. For example: \"/say /join is used to " @@ -1288,7 +1269,7 @@ msgstr "" "sende en melding som starter med tegnet «/». For eksempel: «/say /join " "brukes til å bli med i et nytt praterom»" -#: ../libempathy-gtk/empathy-chat.c:942 +#: ../libempathy-gtk/empathy-chat.c:968 msgid "" "/help [<command>]: show all supported commands. If <command> is defined, " "show its usage." @@ -1296,98 +1277,103 @@ msgstr "" "/help [<kommando>]: vis alle støttede kommandoer. Vis hjelp for <kommando> " "hvis den er definert." -#: ../libempathy-gtk/empathy-chat.c:952 +#: ../libempathy-gtk/empathy-chat.c:978 #, c-format msgid "Usage: %s" msgstr "Bruk: %s" -#: ../libempathy-gtk/empathy-chat.c:991 +#: ../libempathy-gtk/empathy-chat.c:1017 msgid "Unknown command" msgstr "Ukjent kommando" -#: ../libempathy-gtk/empathy-chat.c:1117 +#: ../libempathy-gtk/empathy-chat.c:1143 msgid "Unknown command; see /help for the available commands" msgstr "Ukjent kommando; se /help for tilgjengelige kommandoer" -#: ../libempathy-gtk/empathy-chat.c:1254 +#: ../libempathy-gtk/empathy-chat.c:1281 msgid "offline" msgstr "frakoblet" -#: ../libempathy-gtk/empathy-chat.c:1257 +#: ../libempathy-gtk/empathy-chat.c:1284 msgid "invalid contact" msgstr "ugyldig kontakt" -#: ../libempathy-gtk/empathy-chat.c:1260 +#: ../libempathy-gtk/empathy-chat.c:1287 msgid "permission denied" msgstr "tilgang nektet" -#: ../libempathy-gtk/empathy-chat.c:1263 +#: ../libempathy-gtk/empathy-chat.c:1290 msgid "too long message" msgstr "meldingen er for lang" -#: ../libempathy-gtk/empathy-chat.c:1266 +#: ../libempathy-gtk/empathy-chat.c:1293 msgid "not implemented" msgstr "ikke implementert" -#: ../libempathy-gtk/empathy-chat.c:1270 +#: ../libempathy-gtk/empathy-chat.c:1297 msgid "unknown" msgstr "ukjent" -#: ../libempathy-gtk/empathy-chat.c:1274 +#: ../libempathy-gtk/empathy-chat.c:1302 #, c-format msgid "Error sending message '%s': %s" msgstr "Feil ved sending av melding «%s»: %s" -#: ../libempathy-gtk/empathy-chat.c:1335 ../src/empathy-chat-window.c:717 +#: ../libempathy-gtk/empathy-chat.c:1306 +#, c-format +msgid "Error sending message: %s" +msgstr "Feil ved sending av melding: %s" + +#: ../libempathy-gtk/empathy-chat.c:1367 ../src/empathy-chat-window.c:717 msgid "Topic:" msgstr "Emne:" -#: ../libempathy-gtk/empathy-chat.c:1347 +#: ../libempathy-gtk/empathy-chat.c:1379 #, c-format msgid "Topic set to: %s" msgstr "Emnet er satt til: %s" -#: ../libempathy-gtk/empathy-chat.c:1349 +#: ../libempathy-gtk/empathy-chat.c:1381 msgid "No topic defined" msgstr "Emne ikke definert" -#: ../libempathy-gtk/empathy-chat.c:1848 +#: ../libempathy-gtk/empathy-chat.c:1888 msgid "(No Suggestions)" msgstr "(Ingen forslag)" #. translators: %s is the selected word -#: ../libempathy-gtk/empathy-chat.c:1916 +#: ../libempathy-gtk/empathy-chat.c:1956 #, c-format msgid "Add '%s' to Dictionary" msgstr "Legg til «%s» i ordboken" #. translators: first %s is the selected word, #. * second %s is the language name of the target dictionary -#: ../libempathy-gtk/empathy-chat.c:1953 +#: ../libempathy-gtk/empathy-chat.c:1993 #, c-format msgid "Add '%s' to %s Dictionary" msgstr "Legg til «%s» i ordbok for %s" -#: ../libempathy-gtk/empathy-chat.c:2010 +#: ../libempathy-gtk/empathy-chat.c:2050 msgid "Insert Smiley" msgstr "Sett inn smilefjes" #. send button -#: ../libempathy-gtk/empathy-chat.c:2028 +#: ../libempathy-gtk/empathy-chat.c:2068 #: ../libempathy-gtk/empathy-ui-utils.c:1808 msgid "_Send" msgstr "_Send" #. Spelling suggestions -#: ../libempathy-gtk/empathy-chat.c:2063 +#: ../libempathy-gtk/empathy-chat.c:2103 msgid "_Spelling Suggestions" msgstr "_Staveforslag" -#: ../libempathy-gtk/empathy-chat.c:2152 +#: ../libempathy-gtk/empathy-chat.c:2192 msgid "Failed to retrieve recent logs" msgstr "Klarte ikke å hente siste logger" -#: ../libempathy-gtk/empathy-chat.c:2263 +#: ../libempathy-gtk/empathy-chat.c:2303 #, c-format msgid "%s has disconnected" msgstr "%s har koblet fra" @@ -1395,12 +1381,12 @@ msgstr "%s har koblet fra" #. translators: reverse the order of these arguments #. * if the kicked should come before the kicker in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2270 +#: ../libempathy-gtk/empathy-chat.c:2310 #, c-format msgid "%1$s was kicked by %2$s" msgstr "%1$s ble sparket av %2$s" -#: ../libempathy-gtk/empathy-chat.c:2273 +#: ../libempathy-gtk/empathy-chat.c:2313 #, c-format msgid "%s was kicked" msgstr "%s ble sparket" @@ -1408,17 +1394,17 @@ msgstr "%s ble sparket" #. translators: reverse the order of these arguments #. * if the banned should come before the banner in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2281 +#: ../libempathy-gtk/empathy-chat.c:2321 #, c-format msgid "%1$s was banned by %2$s" msgstr "%1$s ble bannlyst av %2$s" -#: ../libempathy-gtk/empathy-chat.c:2284 +#: ../libempathy-gtk/empathy-chat.c:2324 #, c-format msgid "%s was banned" msgstr "%s ble bannlyst" -#: ../libempathy-gtk/empathy-chat.c:2288 +#: ../libempathy-gtk/empathy-chat.c:2328 #, c-format msgid "%s has left the room" msgstr "%s har forlatt rommet" @@ -1428,62 +1414,62 @@ msgstr "%s har forlatt rommet" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:2297 +#: ../libempathy-gtk/empathy-chat.c:2337 #, c-format msgid " (%s)" msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:2322 +#: ../libempathy-gtk/empathy-chat.c:2362 #, c-format msgid "%s has joined the room" msgstr "%s har blitt med i rommet" -#: ../libempathy-gtk/empathy-chat.c:2347 +#: ../libempathy-gtk/empathy-chat.c:2387 #, c-format msgid "%s is now known as %s" msgstr "%s er nå kjent som %s" -#: ../libempathy-gtk/empathy-chat.c:2486 -#: ../src/empathy-streamed-media-window.c:1949 -#: ../src/empathy-event-manager.c:1122 +#: ../libempathy-gtk/empathy-chat.c:2526 +#: ../src/empathy-streamed-media-window.c:1957 +#: ../src/empathy-event-manager.c:1126 msgid "Disconnected" msgstr "Koblet fra" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3116 +#: ../libempathy-gtk/empathy-chat.c:3158 msgid "Would you like to store this password?" msgstr "Vil du lagre dette passordet?" -#: ../libempathy-gtk/empathy-chat.c:3122 +#: ../libempathy-gtk/empathy-chat.c:3164 msgid "Remember" msgstr "Husk" -#: ../libempathy-gtk/empathy-chat.c:3132 +#: ../libempathy-gtk/empathy-chat.c:3174 msgid "Not now" msgstr "Ikke nå" -#: ../libempathy-gtk/empathy-chat.c:3176 +#: ../libempathy-gtk/empathy-chat.c:3218 msgid "Retry" msgstr "Prøv igjen" -#: ../libempathy-gtk/empathy-chat.c:3180 +#: ../libempathy-gtk/empathy-chat.c:3222 msgid "Wrong password; please try again:" msgstr "Feil passord; vennligst prøv igjen:" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3297 +#: ../libempathy-gtk/empathy-chat.c:3339 msgid "This room is protected by a password:" msgstr "Dette rommet er beskyttet med et passord:" -#: ../libempathy-gtk/empathy-chat.c:3324 +#: ../libempathy-gtk/empathy-chat.c:3366 msgid "Join" msgstr "Bli med" -#: ../libempathy-gtk/empathy-chat.c:3494 ../src/empathy-event-manager.c:1144 +#: ../libempathy-gtk/empathy-chat.c:3536 ../src/empathy-event-manager.c:1147 msgid "Connected" msgstr "Koblet til" -#: ../libempathy-gtk/empathy-chat.c:3547 +#: ../libempathy-gtk/empathy-chat.c:3589 #: ../libempathy-gtk/empathy-log-window.c:650 msgid "Conversation" msgstr "Samtale" @@ -1512,21 +1498,32 @@ msgstr "Kunne ikke blokkere kontakt" msgid "Edit Blocked Contacts" msgstr "Rediger blokkerte kontakter" +#. Account and Identifier +#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1 +#: ../libempathy-gtk/empathy-contact-search-dialog.c:520 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:2 +#: ../libempathy-gtk/empathy-individual-widget.c:1479 +#: ../libempathy-gtk/empathy-contact-selector-dialog.ui.h:1 +#: ../src/empathy-chatrooms-window.ui.h:1 +#: ../src/empathy-new-chatroom-dialog.ui.h:1 +msgid "Account:" +msgstr "Konto:" + #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:320 -#: ../libempathy-gtk/empathy-theme-adium.c:794 +#: ../libempathy-gtk/empathy-theme-adium.c:1026 msgid "_Copy Link Address" msgstr "_Kopier lenkens adresse" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:327 -#: ../libempathy-gtk/empathy-theme-adium.c:801 +#: ../libempathy-gtk/empathy-theme-adium.c:1033 msgid "_Open Link" msgstr "_Åpne lenke" #. Translators: timestamp displayed between conversations in #. * chat windows (strftime format string) -#: ../libempathy-gtk/empathy-chat-text-view.c:420 +#: ../libempathy-gtk/empathy-chat-text-view.c:415 msgid "%A %B %d %Y" msgstr "%A %d %B %Y" @@ -1544,24 +1541,24 @@ msgstr "Personlig informasjon" msgid "New Contact" msgstr "Ny kontakt" -#: ../libempathy-gtk/empathy-contact-dialogs.c:532 +#: ../libempathy-gtk/empathy-contact-dialogs.c:533 #: ../libempathy-gtk/empathy-individual-dialogs.c:199 #, c-format msgid "Block %s?" msgstr "Blokker %s?" -#: ../libempathy-gtk/empathy-contact-dialogs.c:537 +#: ../libempathy-gtk/empathy-contact-dialogs.c:538 #: ../libempathy-gtk/empathy-individual-dialogs.c:247 #, c-format msgid "Are you sure you want to block '%s' from contacting you again?" msgstr "Er du sikker på at du vil blokkere «%s» fra å kontakte deg igjen?" -#: ../libempathy-gtk/empathy-contact-dialogs.c:542 +#: ../libempathy-gtk/empathy-contact-dialogs.c:543 #: ../libempathy-gtk/empathy-individual-dialogs.c:269 msgid "_Block" msgstr "_Blokker" -#: ../libempathy-gtk/empathy-contact-dialogs.c:552 +#: ../libempathy-gtk/empathy-contact-dialogs.c:559 #: ../libempathy-gtk/empathy-individual-dialogs.c:278 msgid "_Report this contact as abusive" msgid_plural "_Report these contacts as abusive" @@ -1588,34 +1585,34 @@ msgstr "Ikke gruppert" msgid "Favorite People" msgstr "Favorittpersoner" -#: ../libempathy-gtk/empathy-contact-list-view.c:2001 -#: ../libempathy-gtk/empathy-individual-view.c:2336 +#: ../libempathy-gtk/empathy-contact-list-view.c:1987 +#: ../libempathy-gtk/empathy-individual-view.c:2386 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "Vil du virkelig fjerne gruppen «%s»?" -#: ../libempathy-gtk/empathy-contact-list-view.c:2003 -#: ../libempathy-gtk/empathy-individual-view.c:2339 +#: ../libempathy-gtk/empathy-contact-list-view.c:1989 +#: ../libempathy-gtk/empathy-individual-view.c:2389 msgid "Removing group" msgstr "Fjerner gruppe" #. Remove -#: ../libempathy-gtk/empathy-contact-list-view.c:2052 -#: ../libempathy-gtk/empathy-contact-list-view.c:2129 -#: ../libempathy-gtk/empathy-individual-view.c:2394 -#: ../libempathy-gtk/empathy-individual-view.c:2588 +#: ../libempathy-gtk/empathy-contact-list-view.c:2038 +#: ../libempathy-gtk/empathy-contact-list-view.c:2115 +#: ../libempathy-gtk/empathy-individual-view.c:2444 +#: ../libempathy-gtk/empathy-individual-view.c:2637 #: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Remove" msgstr "Fje_rn" -#: ../libempathy-gtk/empathy-contact-list-view.c:2082 -#: ../libempathy-gtk/empathy-individual-view.c:2458 +#: ../libempathy-gtk/empathy-contact-list-view.c:2068 +#: ../libempathy-gtk/empathy-individual-view.c:2508 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "Vil du virkelig fjerne kontakten «%s»?" -#: ../libempathy-gtk/empathy-contact-list-view.c:2084 -#: ../libempathy-gtk/empathy-individual-view.c:2479 +#: ../libempathy-gtk/empathy-contact-list-view.c:2070 +#: ../libempathy-gtk/empathy-individual-view.c:2529 msgid "Removing contact" msgstr "Fjerner kontakt" @@ -1624,68 +1621,68 @@ msgstr "Fjerner kontakt" msgid "_Add Contact…" msgstr "_Legg til kontakt …" -#: ../libempathy-gtk/empathy-contact-menu.c:296 +#: ../libempathy-gtk/empathy-contact-menu.c:299 msgid "_Block Contact" msgstr "_Blokker kontakt" -#: ../libempathy-gtk/empathy-contact-menu.c:325 +#: ../libempathy-gtk/empathy-contact-menu.c:328 #: ../libempathy-gtk/empathy-individual-menu.c:517 #: ../src/empathy-main-window.ui.h:15 msgid "_Chat" msgstr "_Prat" -#: ../libempathy-gtk/empathy-contact-menu.c:356 +#: ../libempathy-gtk/empathy-contact-menu.c:359 #: ../libempathy-gtk/empathy-individual-menu.c:560 msgctxt "menu item" msgid "_Audio Call" msgstr "_Lydsamtale" -#: ../libempathy-gtk/empathy-contact-menu.c:387 +#: ../libempathy-gtk/empathy-contact-menu.c:390 #: ../libempathy-gtk/empathy-individual-menu.c:602 msgctxt "menu item" msgid "_Video Call" msgstr "_Videosamtale" -#: ../libempathy-gtk/empathy-contact-menu.c:433 +#: ../libempathy-gtk/empathy-contact-menu.c:436 #: ../libempathy-gtk/empathy-individual-menu.c:645 #: ../src/empathy-main-window.ui.h:26 msgid "_Previous Conversations" msgstr "_Tidligere samtaler" -#: ../libempathy-gtk/empathy-contact-menu.c:455 +#: ../libempathy-gtk/empathy-contact-menu.c:458 #: ../libempathy-gtk/empathy-individual-menu.c:686 msgid "Send File" msgstr "Send fil" -#: ../libempathy-gtk/empathy-contact-menu.c:478 +#: ../libempathy-gtk/empathy-contact-menu.c:481 #: ../libempathy-gtk/empathy-individual-menu.c:728 msgid "Share My Desktop" msgstr "Del mitt skrivebord" -#: ../libempathy-gtk/empathy-contact-menu.c:518 -#: ../libempathy-gtk/empathy-contact-widget.c:1763 +#: ../libempathy-gtk/empathy-contact-menu.c:521 +#: ../libempathy-gtk/empathy-contact-widget.c:1761 #: ../libempathy-gtk/empathy-individual-menu.c:763 -#: ../libempathy-gtk/empathy-individual-widget.c:1372 +#: ../libempathy-gtk/empathy-individual-widget.c:1370 msgid "Favorite" msgstr "Favoritt" -#: ../libempathy-gtk/empathy-contact-menu.c:547 +#: ../libempathy-gtk/empathy-contact-menu.c:550 #: ../libempathy-gtk/empathy-individual-menu.c:791 msgid "Infor_mation" msgstr "Infor_masjon" -#: ../libempathy-gtk/empathy-contact-menu.c:593 +#: ../libempathy-gtk/empathy-contact-menu.c:596 msgctxt "Edit contact (contextual menu)" msgid "_Edit" msgstr "R_ediger" -#: ../libempathy-gtk/empathy-contact-menu.c:647 +#: ../libempathy-gtk/empathy-contact-menu.c:650 #: ../libempathy-gtk/empathy-individual-menu.c:972 #: ../src/empathy-chat-window.c:935 msgid "Inviting you to this room" msgstr "Inviterer deg til dette rommet" -#: ../libempathy-gtk/empathy-contact-menu.c:678 +#: ../libempathy-gtk/empathy-contact-menu.c:681 #: ../libempathy-gtk/empathy-individual-menu.c:1019 msgid "_Invite to Chat Room" msgstr "_Inviter til praterom" @@ -1857,32 +1854,32 @@ msgid "Altitude:" msgstr "Høyde:" #: ../libempathy-gtk/empathy-contact-widget.c:871 -#: ../libempathy-gtk/empathy-contact-widget.c:888 +#: ../libempathy-gtk/empathy-contact-widget.c:886 #: ../libempathy-gtk/empathy-individual-widget.c:616 -#: ../libempathy-gtk/empathy-individual-widget.c:633 +#: ../libempathy-gtk/empathy-individual-widget.c:631 #: ../src/empathy-preferences.ui.h:12 msgid "Location" msgstr "Sted" #. translators: format is "Location, $date" -#: ../libempathy-gtk/empathy-contact-widget.c:890 -#: ../libempathy-gtk/empathy-individual-widget.c:635 +#: ../libempathy-gtk/empathy-contact-widget.c:888 +#: ../libempathy-gtk/empathy-individual-widget.c:633 #, c-format msgid "%s, %s" msgstr "%s, %s" -#: ../libempathy-gtk/empathy-contact-widget.c:942 -#: ../libempathy-gtk/empathy-individual-widget.c:684 +#: ../libempathy-gtk/empathy-contact-widget.c:940 +#: ../libempathy-gtk/empathy-individual-widget.c:682 msgid "%B %e, %Y at %R UTC" msgstr "%B %e, %Y, %R UTC" -#: ../libempathy-gtk/empathy-contact-widget.c:1024 -#: ../libempathy-gtk/empathy-individual-widget.c:919 +#: ../libempathy-gtk/empathy-contact-widget.c:1022 +#: ../libempathy-gtk/empathy-individual-widget.c:917 msgid "Save Avatar" msgstr "Lagre personbilder" -#: ../libempathy-gtk/empathy-contact-widget.c:1080 -#: ../libempathy-gtk/empathy-individual-widget.c:977 +#: ../libempathy-gtk/empathy-contact-widget.c:1078 +#: ../libempathy-gtk/empathy-individual-widget.c:975 msgid "Unable to save avatar" msgstr "Kan ikke lagre personbilde" @@ -1892,7 +1889,7 @@ msgstr "<b>Plassering</b> (dato)\t" #. Alias #: ../libempathy-gtk/empathy-contact-widget.ui.h:3 -#: ../libempathy-gtk/empathy-individual-widget.c:1307 +#: ../libempathy-gtk/empathy-individual-widget.c:1305 msgid "Alias:" msgstr "Alias:" @@ -1912,7 +1909,7 @@ msgstr "Kontaktdetaljer" #. Identifier to connect to Instant Messaging network #. Translators: Identifier to connect to Instant Messaging network #: ../libempathy-gtk/empathy-contact-widget.ui.h:8 -#: ../libempathy-gtk/empathy-individual-widget.c:1511 +#: ../libempathy-gtk/empathy-individual-widget.c:1509 msgid "Identifier:" msgstr "Identifikator:" @@ -1951,7 +1948,7 @@ msgid "Select" msgstr "Velg" #: ../libempathy-gtk/empathy-groups-widget.c:408 -#: ../src/empathy-main-window.c:1436 +#: ../src/empathy-main-window.c:1439 msgid "Group" msgstr "Gruppe" @@ -2004,11 +2001,11 @@ msgctxt "Link individual (contextual menu)" msgid "_Link Contacts…" msgstr "Koble kontakter …" -#: ../libempathy-gtk/empathy-individual-view.c:2301 +#: ../libempathy-gtk/empathy-individual-view.c:2351 msgid "Delete and _Block" msgstr "Slett og _blokker" -#: ../libempathy-gtk/empathy-individual-view.c:2467 +#: ../libempathy-gtk/empathy-individual-view.c:2517 #, c-format msgid "" "Do you really want to remove the linked contact '%s'? Note that this will " @@ -2017,7 +2014,7 @@ msgstr "" "Vil du virkelig fjerne lenket kontakt «%s»? Merk at dette vil fjerne alle " "kontaktene den lenkede kontakten består av." -#: ../libempathy-gtk/empathy-individual-widget.c:1652 +#: ../libempathy-gtk/empathy-individual-widget.c:1650 #, c-format msgid "Linked contact containing %u contact" msgid_plural "Linked contacts containing %u contacts" @@ -2285,19 +2282,19 @@ msgstr "Lagre _nye statusmeldinger" msgid "Saved Status Messages" msgstr "Lagrede statusmeldinger" -#: ../libempathy-gtk/empathy-theme-manager.c:67 +#: ../libempathy-gtk/empathy-theme-manager.c:68 msgid "Classic" msgstr "Klassisk" -#: ../libempathy-gtk/empathy-theme-manager.c:68 +#: ../libempathy-gtk/empathy-theme-manager.c:69 msgid "Simple" msgstr "Enkel" -#: ../libempathy-gtk/empathy-theme-manager.c:69 +#: ../libempathy-gtk/empathy-theme-manager.c:70 msgid "Clean" msgstr "Tøm" -#: ../libempathy-gtk/empathy-theme-manager.c:70 +#: ../libempathy-gtk/empathy-theme-manager.c:71 msgid "Blue" msgstr "Blå" @@ -2827,34 +2824,34 @@ msgstr "Det finnes ikke-lagrede endringer for din %s-konto." msgid "Your new account has not been saved yet." msgstr "Din nye konto er ikke lagret ennå." -#: ../src/empathy-accounts-dialog.c:286 +#: ../src/empathy-accounts-dialog.c:345 #: ../src/empathy-streamed-media-window.c:809 msgid "Connecting…" msgstr "Kobler til …" -#: ../src/empathy-accounts-dialog.c:327 +#: ../src/empathy-accounts-dialog.c:386 #, c-format msgid "Offline — %s" msgstr "Frakoblet - %s" -#: ../src/empathy-accounts-dialog.c:339 +#: ../src/empathy-accounts-dialog.c:398 #, c-format msgid "Disconnected — %s" msgstr "Koblet fra - %s" -#: ../src/empathy-accounts-dialog.c:350 +#: ../src/empathy-accounts-dialog.c:409 msgid "Offline — No Network Connection" msgstr "Frakoblet - Ingen nettverkstilkobling" -#: ../src/empathy-accounts-dialog.c:357 +#: ../src/empathy-accounts-dialog.c:416 msgid "Unknown Status" msgstr "Ukjent status" -#: ../src/empathy-accounts-dialog.c:369 +#: ../src/empathy-accounts-dialog.c:428 msgid "Offline — Account Disabled" msgstr "Frakoblet - Konto deaktivert" -#: ../src/empathy-accounts-dialog.c:772 +#: ../src/empathy-accounts-dialog.c:831 msgid "" "You are about to create a new account, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -2862,16 +2859,16 @@ msgstr "" "Du er i ferd med å lage en ny konto hvilket vil forkaste\n" "dine endringer. Er du sikker på at du vil fortsette?" -#: ../src/empathy-accounts-dialog.c:1133 +#: ../src/empathy-accounts-dialog.c:1192 #, c-format msgid "Do you want to remove %s from your computer?" msgstr "Vil du fjerne %s fra din datamaskin?" -#: ../src/empathy-accounts-dialog.c:1137 +#: ../src/empathy-accounts-dialog.c:1196 msgid "This will not remove your account on the server." msgstr "Dette vil ikke fjerne din konto på tjeneren." -#: ../src/empathy-accounts-dialog.c:1375 +#: ../src/empathy-accounts-dialog.c:1434 msgid "" "You are about to select another account, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -2880,15 +2877,15 @@ msgstr "" "dine endringer. Er du sikker på at du vil fortsette?" #. Menu items: to enabled/disable the account -#: ../src/empathy-accounts-dialog.c:1571 +#: ../src/empathy-accounts-dialog.c:1652 msgid "_Enable" msgstr "Slå _på" -#: ../src/empathy-accounts-dialog.c:1572 +#: ../src/empathy-accounts-dialog.c:1653 msgid "_Disable" msgstr "Slå _av" -#: ../src/empathy-accounts-dialog.c:2086 +#: ../src/empathy-accounts-dialog.c:2174 msgid "" "You are about to close the window, which will discard\n" "your changes. Are you sure you want to proceed?" @@ -2924,11 +2921,11 @@ msgstr "_Legg til …" msgid "_Import…" msgstr "_Importer …" -#: ../src/empathy-auth-client.c:246 +#: ../src/empathy-auth-client.c:250 msgid " - Empathy authentication client" msgstr "- Empathy autentiseringsklient" -#: ../src/empathy-auth-client.c:262 +#: ../src/empathy-auth-client.c:266 msgid "Empathy authentication client" msgstr "Empathy autentiseringsklient" @@ -3013,17 +3010,37 @@ msgstr "IP-adresse for en relay-tjener" msgid "The IP address of the multicast group" msgstr "IP-adresse for multicast-gruppe" +#: ../src/empathy-streamed-media-window.c:1906 +msgctxt "encoding video codec" +msgid "Unknown" +msgstr "Ukjent" + +#: ../src/empathy-streamed-media-window.c:1909 +msgctxt "encoding audio codec" +msgid "Unknown" +msgstr "Ukjent" + +#: ../src/empathy-streamed-media-window.c:1912 +msgctxt "decoding video codec" +msgid "Unknown" +msgstr "Ukjent" + +#: ../src/empathy-streamed-media-window.c:1915 +msgctxt "decoding audio codec" +msgid "Unknown" +msgstr "Ukjent" + #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-streamed-media-window.c:2266 +#: ../src/empathy-streamed-media-window.c:2274 #, c-format msgid "Connected — %d:%02dm" msgstr "Koblet til - %d:%02dm" -#: ../src/empathy-streamed-media-window.c:2327 +#: ../src/empathy-streamed-media-window.c:2335 msgid "Technical Details" msgstr "Tekniske detaljer" -#: ../src/empathy-streamed-media-window.c:2365 +#: ../src/empathy-streamed-media-window.c:2373 #, c-format msgid "" "%s's software does not understand any of the audio formats supported by your " @@ -3032,7 +3049,7 @@ msgstr "" "Programvaren til %s forstår ikke noen av lydformatene som støttes av din " "datamaskin" -#: ../src/empathy-streamed-media-window.c:2370 +#: ../src/empathy-streamed-media-window.c:2378 #, c-format msgid "" "%s's software does not understand any of the video formats supported by your " @@ -3041,7 +3058,7 @@ msgstr "" "Programvaren til %s forstår ikke noen av videoformatene som støttes av din " "datamaskin" -#: ../src/empathy-streamed-media-window.c:2376 +#: ../src/empathy-streamed-media-window.c:2384 #, c-format msgid "" "Can't establish a connection to %s. One of you might be on a network that " @@ -3050,25 +3067,25 @@ msgstr "" "Kan ikke etablere tilkobling til %s. En av dere kan være på et nettverk som " "ikke tillater direkte tilkoblinger." -#: ../src/empathy-streamed-media-window.c:2382 +#: ../src/empathy-streamed-media-window.c:2390 msgid "There was a failure on the network" msgstr "Det oppsto en feil på nettverket" -#: ../src/empathy-streamed-media-window.c:2386 +#: ../src/empathy-streamed-media-window.c:2394 msgid "" "The audio formats necessary for this call are not installed on your computer" msgstr "" "Lydformatene som kreves for denne samtalen er ikke installert på din " "datamaskin" -#: ../src/empathy-streamed-media-window.c:2389 +#: ../src/empathy-streamed-media-window.c:2397 msgid "" "The video formats necessary for this call are not installed on your computer" msgstr "" "Videoformatene som kreves for denne samtalen er ikke installert på din " "datamaskin" -#: ../src/empathy-streamed-media-window.c:2399 +#: ../src/empathy-streamed-media-window.c:2407 #, c-format msgid "" "Something unexpected happened in a Telepathy component. Please <a href=\"%s" @@ -3079,19 +3096,19 @@ msgstr "" "\">rapporter denne feilen</a> og legg ved loggene som samles inn i " "«Feilsøking»-vinduet i Hjelp-menyen." -#: ../src/empathy-streamed-media-window.c:2407 +#: ../src/empathy-streamed-media-window.c:2415 msgid "There was a failure in the call engine" msgstr "Det oppsto en feil i samtalemotoren" -#: ../src/empathy-streamed-media-window.c:2410 +#: ../src/empathy-streamed-media-window.c:2418 msgid "The end of the stream was reached" msgstr "Slutt på strømmen ble nådd" -#: ../src/empathy-streamed-media-window.c:2450 +#: ../src/empathy-streamed-media-window.c:2458 msgid "Can't establish audio stream" msgstr "Kan ikke etablere lydstrøm" -#: ../src/empathy-streamed-media-window.c:2460 +#: ../src/empathy-streamed-media-window.c:2468 msgid "Can't establish video stream" msgstr "Kan ikke etablere videostrøm" @@ -3163,6 +3180,10 @@ msgstr "Send lyd" msgid "Toggle audio transmission" msgstr "Slå av/på overføring av lyd" +#: ../src/empathy-call-window.ui.h:18 +msgid "Unknown" +msgstr "Ukjent" + #: ../src/empathy-call-window.ui.h:19 msgid "V_ideo" msgstr "V_ideo" @@ -3333,7 +3354,7 @@ msgstr "%s ringer deg med video. Vil du svare?" msgid "%s is calling you. Do you want to answer?" msgstr "%s ringer deg. Vil du svare?" -#: ../src/empathy-event-manager.c:515 ../src/empathy-event-manager.c:660 +#: ../src/empathy-event-manager.c:515 ../src/empathy-event-manager.c:667 #, c-format msgid "Incoming call from %s" msgstr "Innkommende samtale fra %s" @@ -3346,59 +3367,59 @@ msgstr "Av_vis" msgid "_Answer" msgstr "Sv_ar" -#: ../src/empathy-event-manager.c:660 +#: ../src/empathy-event-manager.c:667 #, c-format msgid "Incoming video call from %s" msgstr "Innkommende videosamtale fra %s" -#: ../src/empathy-event-manager.c:737 +#: ../src/empathy-event-manager.c:744 msgid "Room invitation" msgstr "Invitasjon til rom" -#: ../src/empathy-event-manager.c:739 +#: ../src/empathy-event-manager.c:746 #, c-format msgid "Invitation to join %s" msgstr "Invitasjon til å bli med i %s" -#: ../src/empathy-event-manager.c:746 +#: ../src/empathy-event-manager.c:753 #, c-format msgid "%s is inviting you to join %s" msgstr "%s inviterer deg til å bli med i %s" -#: ../src/empathy-event-manager.c:754 +#: ../src/empathy-event-manager.c:761 msgid "_Decline" msgstr "_Avslå" -#: ../src/empathy-event-manager.c:759 +#: ../src/empathy-event-manager.c:766 #: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "_Bli med" -#: ../src/empathy-event-manager.c:786 +#: ../src/empathy-event-manager.c:793 #, c-format msgid "%s invited you to join %s" msgstr "%s inviterte deg til å bli med i %s" -#: ../src/empathy-event-manager.c:792 +#: ../src/empathy-event-manager.c:799 #, c-format msgid "You have been invited to join %s" msgstr "Du har blitt invitert til å bli med i %s" -#: ../src/empathy-event-manager.c:843 +#: ../src/empathy-event-manager.c:850 #, c-format msgid "Incoming file transfer from %s" msgstr "Innkommende filoverføring fra %s" -#: ../src/empathy-event-manager.c:1013 ../src/empathy-main-window.c:370 +#: ../src/empathy-event-manager.c:1020 ../src/empathy-main-window.c:373 msgid "Password required" msgstr "Passord kreves" -#: ../src/empathy-event-manager.c:1069 +#: ../src/empathy-event-manager.c:1076 #, c-format msgid "%s would like permission to see when you are online" msgstr "%s ønsker rettigheter til å se når du er tilkoblet" -#: ../src/empathy-event-manager.c:1073 +#: ../src/empathy-event-manager.c:1080 #, c-format msgid "" "\n" @@ -3408,105 +3429,105 @@ msgstr "" "Melding: %s" #. Translators: time left, when it is more than one hour -#: ../src/empathy-ft-manager.c:99 +#: ../src/empathy-ft-manager.c:100 #, c-format msgid "%u:%02u.%02u" msgstr "%u:%02u.%02u" #. Translators: time left, when is is less than one hour -#: ../src/empathy-ft-manager.c:102 +#: ../src/empathy-ft-manager.c:103 #, c-format msgid "%02u.%02u" msgstr "%02u.%02u" -#: ../src/empathy-ft-manager.c:178 +#: ../src/empathy-ft-manager.c:179 msgctxt "file transfer percent" msgid "Unknown" msgstr "Ukjent" -#: ../src/empathy-ft-manager.c:273 +#: ../src/empathy-ft-manager.c:274 #, c-format msgid "%s of %s at %s/s" msgstr "%s av %s med %s/s" -#: ../src/empathy-ft-manager.c:274 +#: ../src/empathy-ft-manager.c:275 #, c-format msgid "%s of %s" msgstr "%s av %s" #. translators: first %s is filename, second %s is the contact name -#: ../src/empathy-ft-manager.c:305 +#: ../src/empathy-ft-manager.c:306 #, c-format msgid "Receiving \"%s\" from %s" msgstr "Mottar «%s» fra %s" #. translators: first %s is filename, second %s is the contact name -#: ../src/empathy-ft-manager.c:308 +#: ../src/empathy-ft-manager.c:309 #, c-format msgid "Sending \"%s\" to %s" msgstr "Sender «%s» til %s" #. translators: first %s is filename, second %s #. * is the contact name -#: ../src/empathy-ft-manager.c:338 +#: ../src/empathy-ft-manager.c:339 #, c-format msgid "Error receiving \"%s\" from %s" msgstr "Feil ved mottak av «%s» fra %s" -#: ../src/empathy-ft-manager.c:341 +#: ../src/empathy-ft-manager.c:342 msgid "Error receiving a file" msgstr "Feil ved mottak av en fil" -#: ../src/empathy-ft-manager.c:346 +#: ../src/empathy-ft-manager.c:347 #, c-format msgid "Error sending \"%s\" to %s" msgstr "Feil ved sending av «%s» til %s" -#: ../src/empathy-ft-manager.c:349 +#: ../src/empathy-ft-manager.c:350 msgid "Error sending a file" msgstr "Feil ved sending av en fil" #. translators: first %s is filename, second %s #. * is the contact name -#: ../src/empathy-ft-manager.c:488 +#: ../src/empathy-ft-manager.c:489 #, c-format msgid "\"%s\" received from %s" msgstr "«%s» mottatt fra %s" #. translators: first %s is filename, second %s #. * is the contact name -#: ../src/empathy-ft-manager.c:493 +#: ../src/empathy-ft-manager.c:494 #, c-format msgid "\"%s\" sent to %s" msgstr "«%s» sendt til %s" -#: ../src/empathy-ft-manager.c:496 +#: ../src/empathy-ft-manager.c:497 msgid "File transfer completed" msgstr "Filoverføring fullført" -#: ../src/empathy-ft-manager.c:615 ../src/empathy-ft-manager.c:782 +#: ../src/empathy-ft-manager.c:616 ../src/empathy-ft-manager.c:783 msgid "Waiting for the other participant's response" msgstr "Venter på svar fra motparten" -#: ../src/empathy-ft-manager.c:641 ../src/empathy-ft-manager.c:679 +#: ../src/empathy-ft-manager.c:642 ../src/empathy-ft-manager.c:680 #, c-format msgid "Checking integrity of \"%s\"" msgstr "Sjekker integriteten for «%s»" -#: ../src/empathy-ft-manager.c:644 ../src/empathy-ft-manager.c:682 +#: ../src/empathy-ft-manager.c:645 ../src/empathy-ft-manager.c:683 #, c-format msgid "Hashing \"%s\"" msgstr "Hasher «%s»" -#: ../src/empathy-ft-manager.c:1016 +#: ../src/empathy-ft-manager.c:1029 msgid "%" msgstr "%" -#: ../src/empathy-ft-manager.c:1028 +#: ../src/empathy-ft-manager.c:1041 msgid "File" msgstr "Fil" -#: ../src/empathy-ft-manager.c:1050 +#: ../src/empathy-ft-manager.c:1063 msgid "Remaining" msgstr "Gjenstår" @@ -3541,39 +3562,39 @@ msgstr "Protokoll" msgid "Source" msgstr "Kilde" -#: ../src/empathy-main-window.c:387 +#: ../src/empathy-main-window.c:390 msgid "Provide Password" msgstr "Oppgi passord" -#: ../src/empathy-main-window.c:393 +#: ../src/empathy-main-window.c:396 msgid "Disconnect" msgstr "Koble fra" -#: ../src/empathy-main-window.c:533 +#: ../src/empathy-main-window.c:536 msgid "No match found" msgstr "Ingen treff funnet" -#: ../src/empathy-main-window.c:688 +#: ../src/empathy-main-window.c:691 msgid "Reconnect" msgstr "Koble til på nytt" -#: ../src/empathy-main-window.c:694 +#: ../src/empathy-main-window.c:697 msgid "Edit Account" msgstr "Rediger konto" -#: ../src/empathy-main-window.c:700 +#: ../src/empathy-main-window.c:703 msgid "Close" msgstr "Lukk" -#: ../src/empathy-main-window.c:1418 +#: ../src/empathy-main-window.c:1421 msgid "Contact" msgstr "Kontakt" -#: ../src/empathy-main-window.c:1765 +#: ../src/empathy-main-window.c:1768 msgid "Contact List" msgstr "Kontaktliste" -#: ../src/empathy-main-window.c:1881 +#: ../src/empathy-main-window.c:1884 msgid "Show and edit accounts" msgstr "Vis og rediger kontoer" @@ -3732,39 +3753,79 @@ msgstr "Romliste" msgid "_Room:" msgstr "_Rom:" -#: ../src/empathy-preferences.c:139 +#: ../src/empathy-preferences.c:147 msgid "Message received" msgstr "Melding mottatt" -#: ../src/empathy-preferences.c:140 +#: ../src/empathy-preferences.c:148 msgid "Message sent" msgstr "Melding sendt" -#: ../src/empathy-preferences.c:141 +#: ../src/empathy-preferences.c:149 msgid "New conversation" msgstr "Ny samtale" -#: ../src/empathy-preferences.c:142 +#: ../src/empathy-preferences.c:150 msgid "Contact goes online" msgstr "Kontakt kobler til" -#: ../src/empathy-preferences.c:143 +#: ../src/empathy-preferences.c:151 msgid "Contact goes offline" msgstr "Kontakt kobler fra" -#: ../src/empathy-preferences.c:144 +#: ../src/empathy-preferences.c:152 msgid "Account connected" msgstr "Konto koblet til" -#: ../src/empathy-preferences.c:145 +#: ../src/empathy-preferences.c:153 msgid "Account disconnected" msgstr "Konto koblet fra" -#: ../src/empathy-preferences.c:446 +#: ../src/empathy-preferences.c:454 msgid "Language" msgstr "Språk" -#: ../src/empathy-preferences.c:875 +#. translators: Contact name for the chat theme preview +#: ../src/empathy-preferences.c:704 +msgid "Juliet" +msgstr "Juliet" + +#. translators: Contact name for the chat theme preview +#: ../src/empathy-preferences.c:711 +msgid "Romeo" +msgstr "Romeo" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:717 +msgid "O Romeo, Romeo, wherefore art thou Romeo?" +msgstr "O Romeo, Romeo, wherefore art thou Romeo?" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:720 +msgid "Deny thy father and refuse thy name;" +msgstr "Deny thy father and refuse thy name;" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:723 +msgid "Or if thou wilt not, be but sworn my love" +msgstr "Or if thou wilt not, be but sworn my love" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:726 +msgid "And I'll no longer be a Capulet." +msgstr "And I'll no longer be a Capulet." + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:729 +msgid "Shall I hear more, or shall I speak at this?" +msgstr "Shall I hear more, or shall I speak at this?" + +#. translators: Quote from Romeo & Julier, for chat theme preview +#: ../src/empathy-preferences.c:732 +msgid "Juliet has disconnected" +msgstr "Juliet har koblet fra" + +#: ../src/empathy-preferences.c:966 msgid "Preferences" msgstr "Brukervalg" @@ -3865,43 +3926,47 @@ msgstr "" "Listen med språk viser bare de språkene det er installert ordliste for." #: ../src/empathy-preferences.ui.h:24 +msgid "Theme Variant:" +msgstr "Temavariant:" + +#: ../src/empathy-preferences.ui.h:25 msgid "Themes" msgstr "Temaer" -#: ../src/empathy-preferences.ui.h:25 +#: ../src/empathy-preferences.ui.h:26 msgid "_Automatically connect on startup" msgstr "Koble til _automatisk ved oppstart" -#: ../src/empathy-preferences.ui.h:26 +#: ../src/empathy-preferences.ui.h:27 msgid "_Cellphone" msgstr "_Mobiltelefon" -#: ../src/empathy-preferences.ui.h:27 +#: ../src/empathy-preferences.ui.h:28 msgid "_Enable bubble notifications" msgstr "_Aktiver varsling med bobler" -#: ../src/empathy-preferences.ui.h:28 +#: ../src/empathy-preferences.ui.h:29 msgid "_Enable sound notifications" msgstr "_Aktiver varsling med lyder" -#: ../src/empathy-preferences.ui.h:29 +#: ../src/empathy-preferences.ui.h:30 msgid "_GPS" msgstr "_GPS" -#: ../src/empathy-preferences.ui.h:30 +#: ../src/empathy-preferences.ui.h:31 msgid "_Network (IP, Wi-Fi)" msgstr "_Nettverk (IP, Wi-Fi)" -#: ../src/empathy-preferences.ui.h:31 +#: ../src/empathy-preferences.ui.h:32 msgid "_Open new chats in separate windows" msgstr "_Åpne nye samtaler i egne vinduer" -#: ../src/empathy-preferences.ui.h:32 +#: ../src/empathy-preferences.ui.h:33 msgid "_Publish location to my contacts" msgstr "_Publiser plassering til mine kontakter" #. To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees. -#: ../src/empathy-preferences.ui.h:34 +#: ../src/empathy-preferences.ui.h:35 msgid "_Reduce location accuracy" msgstr "_Reduser nøyaktighet for plassering" @@ -3913,7 +3978,7 @@ msgstr "Status" msgid "_Quit" msgstr "_Avslutt" -#: ../src/empathy-map-view.c:442 +#: ../src/empathy-map-view.c:448 msgid "Contact Map View" msgstr "Kartvisning for kontakter" @@ -4051,6 +4116,10 @@ msgstr "Avslå" msgid "Accept" msgstr "Godta" +#: ../src/empathy-notifications-approver.c:223 +msgid "Provide" +msgstr "Oppgi" + #: ../src/empathy-call-observer.c:130 #, c-format msgid "Missed call from %s" @@ -4060,3 +4129,7 @@ msgstr "Tapt anrop fra %s" #, c-format msgid "%s just tried to call you, but you were in another call." msgstr "%s prøvde å ringe deg, men du var i en annen samtale." + +#: ../libempathy-gtk/empathy-search-bar.c:282 +msgid "_Match case" +msgstr "Skill _mellom små/store bokstaver" @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: empathy\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=empathy&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2011-04-21 09:08+0000\n" -"PO-Revision-Date: 2011-04-26 15:19+0300\n" +"POT-Creation-Date: 2011-05-02 12:56+0000\n" +"PO-Revision-Date: 2011-05-03 11:22+0300\n" "Last-Translator: Muhammet Kara <muhammet.k@gmail.com>\n" "Language-Team: Turkish <gnome-turk@gnome.org>\n" "MIME-Version: 1.0\n" @@ -536,7 +536,6 @@ msgstr "Çevrimdışı" #. translators: presence type is unknown #: ../libempathy/empathy-utils.c:316 -#| msgid "Unknown" msgctxt "presence" msgid "Unknown" msgstr "Bilinmiyor" @@ -1338,7 +1337,6 @@ msgstr "'%s' mesajı gönderilirken hata : %s" #: ../libempathy-gtk/empathy-chat.c:1306 #, c-format -#| msgid "Error sending message '%s': %s" msgid "Error sending message: %s" msgstr "Mesaj gönderme hatası: %s" @@ -1355,43 +1353,43 @@ msgstr "Başlık değiştirildi: %s" msgid "No topic defined" msgstr "Başlık belirtilmemiş" -#: ../libempathy-gtk/empathy-chat.c:1880 +#: ../libempathy-gtk/empathy-chat.c:1888 msgid "(No Suggestions)" msgstr "(Öneri Yok)" #. translators: %s is the selected word -#: ../libempathy-gtk/empathy-chat.c:1948 +#: ../libempathy-gtk/empathy-chat.c:1956 #, c-format msgid "Add '%s' to Dictionary" msgstr "'%s' kelimesini Sözlüğe ekle" #. translators: first %s is the selected word, #. * second %s is the language name of the target dictionary -#: ../libempathy-gtk/empathy-chat.c:1985 +#: ../libempathy-gtk/empathy-chat.c:1993 #, c-format msgid "Add '%s' to %s Dictionary" msgstr "'%s' kelimesini %s Sözlüğe ekle" -#: ../libempathy-gtk/empathy-chat.c:2042 +#: ../libempathy-gtk/empathy-chat.c:2050 msgid "Insert Smiley" msgstr "Gülümseme Ekle" #. send button -#: ../libempathy-gtk/empathy-chat.c:2060 +#: ../libempathy-gtk/empathy-chat.c:2068 #: ../libempathy-gtk/empathy-ui-utils.c:1808 msgid "_Send" msgstr "_Gönder" #. Spelling suggestions -#: ../libempathy-gtk/empathy-chat.c:2095 +#: ../libempathy-gtk/empathy-chat.c:2103 msgid "_Spelling Suggestions" msgstr "_Yazım Önerileri" -#: ../libempathy-gtk/empathy-chat.c:2184 +#: ../libempathy-gtk/empathy-chat.c:2192 msgid "Failed to retrieve recent logs" msgstr "Son kayıtlara erişme başarısız oldu" -#: ../libempathy-gtk/empathy-chat.c:2295 +#: ../libempathy-gtk/empathy-chat.c:2303 #, c-format msgid "%s has disconnected" msgstr "%s bağlantısını kesti" @@ -1399,12 +1397,12 @@ msgstr "%s bağlantısını kesti" #. translators: reverse the order of these arguments #. * if the kicked should come before the kicker in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2302 +#: ../libempathy-gtk/empathy-chat.c:2310 #, c-format msgid "%1$s was kicked by %2$s" msgstr "%2$s tarafından %1$s kanaldan atıldı" -#: ../libempathy-gtk/empathy-chat.c:2305 +#: ../libempathy-gtk/empathy-chat.c:2313 #, c-format msgid "%s was kicked" msgstr "%s kanaldan atıldı" @@ -1412,17 +1410,17 @@ msgstr "%s kanaldan atıldı" #. translators: reverse the order of these arguments #. * if the banned should come before the banner in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:2313 +#: ../libempathy-gtk/empathy-chat.c:2321 #, c-format msgid "%1$s was banned by %2$s" msgstr "%2$s tarafından %1$s yasaklandı" -#: ../libempathy-gtk/empathy-chat.c:2316 +#: ../libempathy-gtk/empathy-chat.c:2324 #, c-format msgid "%s was banned" msgstr "%s yasaklandı" -#: ../libempathy-gtk/empathy-chat.c:2320 +#: ../libempathy-gtk/empathy-chat.c:2328 #, c-format msgid "%s has left the room" msgstr "%s odayı terk etti" @@ -1432,62 +1430,62 @@ msgstr "%s odayı terk etti" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:2329 +#: ../libempathy-gtk/empathy-chat.c:2337 #, c-format msgid " (%s)" msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:2354 +#: ../libempathy-gtk/empathy-chat.c:2362 #, c-format msgid "%s has joined the room" msgstr "%s odaya katıldı" -#: ../libempathy-gtk/empathy-chat.c:2379 +#: ../libempathy-gtk/empathy-chat.c:2387 #, c-format msgid "%s is now known as %s" msgstr "%s şimdi %s olarak biliniyor" -#: ../libempathy-gtk/empathy-chat.c:2518 +#: ../libempathy-gtk/empathy-chat.c:2526 #: ../src/empathy-streamed-media-window.c:1957 #: ../src/empathy-event-manager.c:1126 msgid "Disconnected" msgstr "Bağlı Değil" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3148 +#: ../libempathy-gtk/empathy-chat.c:3158 msgid "Would you like to store this password?" msgstr "Bu parolayı kaydetmek istiyor musunuz?" -#: ../libempathy-gtk/empathy-chat.c:3154 +#: ../libempathy-gtk/empathy-chat.c:3164 msgid "Remember" msgstr "Hatırla" -#: ../libempathy-gtk/empathy-chat.c:3164 +#: ../libempathy-gtk/empathy-chat.c:3174 msgid "Not now" msgstr "Şimdi değil" -#: ../libempathy-gtk/empathy-chat.c:3208 +#: ../libempathy-gtk/empathy-chat.c:3218 msgid "Retry" msgstr "Yeniden Dene" -#: ../libempathy-gtk/empathy-chat.c:3212 +#: ../libempathy-gtk/empathy-chat.c:3222 msgid "Wrong password; please try again:" msgstr "Yanlış parola: lütfen tekrar deneyin:" #. Add message -#: ../libempathy-gtk/empathy-chat.c:3329 +#: ../libempathy-gtk/empathy-chat.c:3339 msgid "This room is protected by a password:" msgstr "Bu oda bir parolayla korunuyor:" -#: ../libempathy-gtk/empathy-chat.c:3356 +#: ../libempathy-gtk/empathy-chat.c:3366 msgid "Join" msgstr "Katıl" -#: ../libempathy-gtk/empathy-chat.c:3526 ../src/empathy-event-manager.c:1147 +#: ../libempathy-gtk/empathy-chat.c:3536 ../src/empathy-event-manager.c:1147 msgid "Connected" msgstr "Bağlı" -#: ../libempathy-gtk/empathy-chat.c:3579 +#: ../libempathy-gtk/empathy-chat.c:3589 #: ../libempathy-gtk/empathy-log-window.c:650 msgid "Conversation" msgstr "Konuşma" @@ -1529,13 +1527,13 @@ msgstr "Hesap:" #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:320 -#: ../libempathy-gtk/empathy-theme-adium.c:794 +#: ../libempathy-gtk/empathy-theme-adium.c:1010 msgid "_Copy Link Address" msgstr "Bağ Adresini _Kopyala" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:327 -#: ../libempathy-gtk/empathy-theme-adium.c:801 +#: ../libempathy-gtk/empathy-theme-adium.c:1017 msgid "_Open Link" msgstr "_Bağı Aç" @@ -1605,33 +1603,33 @@ msgid "Favorite People" msgstr "Sık Görüşülen Kişiler" #: ../libempathy-gtk/empathy-contact-list-view.c:1987 -#: ../libempathy-gtk/empathy-individual-view.c:2343 +#: ../libempathy-gtk/empathy-individual-view.c:2386 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "Gerçekten '%s' grubunu kaldırmak istiyor musunuz?" #: ../libempathy-gtk/empathy-contact-list-view.c:1989 -#: ../libempathy-gtk/empathy-individual-view.c:2346 +#: ../libempathy-gtk/empathy-individual-view.c:2389 msgid "Removing group" msgstr "Grup kaldırılıyor" #. Remove #: ../libempathy-gtk/empathy-contact-list-view.c:2038 #: ../libempathy-gtk/empathy-contact-list-view.c:2115 -#: ../libempathy-gtk/empathy-individual-view.c:2401 -#: ../libempathy-gtk/empathy-individual-view.c:2594 +#: ../libempathy-gtk/empathy-individual-view.c:2444 +#: ../libempathy-gtk/empathy-individual-view.c:2637 #: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Remove" msgstr "Kaldı_r" #: ../libempathy-gtk/empathy-contact-list-view.c:2068 -#: ../libempathy-gtk/empathy-individual-view.c:2465 +#: ../libempathy-gtk/empathy-individual-view.c:2508 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "Gerçekten '%s' bağlantısını kaldırmak istiyor musunuz?" #: ../libempathy-gtk/empathy-contact-list-view.c:2070 -#: ../libempathy-gtk/empathy-individual-view.c:2486 +#: ../libempathy-gtk/empathy-individual-view.c:2529 msgid "Removing contact" msgstr "Bağlantı kaldırılıyor" @@ -1967,7 +1965,7 @@ msgid "Select" msgstr "Seç" #: ../libempathy-gtk/empathy-groups-widget.c:408 -#: ../src/empathy-main-window.c:1436 +#: ../src/empathy-main-window.c:1439 msgid "Group" msgstr "Grup" @@ -2018,11 +2016,11 @@ msgctxt "Link individual (contextual menu)" msgid "_Link Contacts…" msgstr "_Kişileri Bağla..." -#: ../libempathy-gtk/empathy-individual-view.c:2308 +#: ../libempathy-gtk/empathy-individual-view.c:2351 msgid "Delete and _Block" msgstr "Sil ve _Engelle" -#: ../libempathy-gtk/empathy-individual-view.c:2474 +#: ../libempathy-gtk/empathy-individual-view.c:2517 #, c-format msgid "" "Do you really want to remove the linked contact '%s'? Note that this will " @@ -2667,7 +2665,7 @@ msgstr "" "Deniz Koçak <deniz.kocak@linux.org.tr>\n" "Barış Çiçek <baris@teamforce.name.tr>\n" "Muhammet Kara <muhammet.k@gmail.com>\n" -"Ubuntu'yu Türkçe'ye Çevirenler Takımı" +"Launchpad Çevirmenleri" #: ../src/empathy-account-assistant.c:167 msgid "There was an error while importing the accounts." @@ -3027,25 +3025,21 @@ msgid "The IP address of the multicast group" msgstr "Çoklu yayın grubunun IP adresi" #: ../src/empathy-streamed-media-window.c:1906 -#| msgid "Unknown" msgctxt "encoding video codec" msgid "Unknown" msgstr "Bilinmiyor" #: ../src/empathy-streamed-media-window.c:1909 -#| msgid "Unknown" msgctxt "encoding audio codec" msgid "Unknown" msgstr "Bilinmiyor" #: ../src/empathy-streamed-media-window.c:1912 -#| msgid "Unknown" msgctxt "decoding video codec" msgid "Unknown" msgstr "Bilinmiyor" #: ../src/empathy-streamed-media-window.c:1915 -#| msgid "Unknown" msgctxt "decoding audio codec" msgid "Unknown" msgstr "Bilinmiyor" @@ -3423,7 +3417,7 @@ msgstr "%s'e katılmaya davet edildiniz" msgid "Incoming file transfer from %s" msgstr "%s kişisinden gelen dosya transferi" -#: ../src/empathy-event-manager.c:1020 ../src/empathy-main-window.c:370 +#: ../src/empathy-event-manager.c:1020 ../src/empathy-main-window.c:373 msgid "Password required" msgstr "Parola gerekli" @@ -3578,39 +3572,39 @@ msgstr "Protokol" msgid "Source" msgstr "Kaynak" -#: ../src/empathy-main-window.c:387 +#: ../src/empathy-main-window.c:390 msgid "Provide Password" msgstr "Parola Gir" -#: ../src/empathy-main-window.c:393 +#: ../src/empathy-main-window.c:396 msgid "Disconnect" msgstr "Bağlantıyı kes" -#: ../src/empathy-main-window.c:533 +#: ../src/empathy-main-window.c:536 msgid "No match found" msgstr "Eşleşme bulunamadı" -#: ../src/empathy-main-window.c:688 +#: ../src/empathy-main-window.c:691 msgid "Reconnect" msgstr "Yeniden Bağlan" -#: ../src/empathy-main-window.c:694 +#: ../src/empathy-main-window.c:697 msgid "Edit Account" msgstr "Hesabı Düzenle" -#: ../src/empathy-main-window.c:700 +#: ../src/empathy-main-window.c:703 msgid "Close" msgstr "Kapat" -#: ../src/empathy-main-window.c:1418 +#: ../src/empathy-main-window.c:1421 msgid "Contact" msgstr "Bağlantı" -#: ../src/empathy-main-window.c:1765 +#: ../src/empathy-main-window.c:1768 msgid "Contact List" msgstr "Bağlantı Listesi" -#: ../src/empathy-main-window.c:1881 +#: ../src/empathy-main-window.c:1884 msgid "Show and edit accounts" msgstr "Hesapları göster ve düzenle" @@ -4091,7 +4085,6 @@ msgid "Accept" msgstr "Kabul Et" #: ../src/empathy-notifications-approver.c:223 -#| msgid "Preview" msgid "Provide" msgstr "Sağla" @@ -4105,6 +4098,11 @@ msgstr "Cevapsız çağrı %s" msgid "%s just tried to call you, but you were in another call." msgstr "%s sizi aramayı denedi, fakat siz başka bir arama ile meşguldünüz." +#: ../libempathy-gtk/empathy-search-bar.c:282 +#| msgid "Match case" +msgid "_Match case" +msgstr "_BÜYÜK/küçük harf eşleştir" + #~ msgid "_Enabled" #~ msgstr "_Etkin" diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index 734809f80..14de1d3c5 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -1209,12 +1209,10 @@ accounts_dialog_button_remove_clicked_cb (GtkWidget *button, { EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); GtkTreeView *view; - GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; view = GTK_TREE_VIEW (priv->treeview); - model = gtk_tree_view_get_model (view); selection = gtk_tree_view_get_selection (view); if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) return; @@ -1491,14 +1489,12 @@ accounts_dialog_get_settings_iter (EmpathyAccountsDialog *dialog, GtkTreeIter *iter) { GtkTreeView *view; - GtkTreeSelection *selection; GtkTreeModel *model; gboolean ok; EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); /* Update the status in the model */ view = GTK_TREE_VIEW (priv->treeview); - selection = gtk_tree_view_get_selection (view); model = gtk_tree_view_get_model (view); for (ok = gtk_tree_model_get_iter_first (model, iter); @@ -1528,14 +1524,12 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog, GtkTreeIter *iter) { GtkTreeView *view; - GtkTreeSelection *selection; GtkTreeModel *model; gboolean ok; EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); /* Update the status in the model */ view = GTK_TREE_VIEW (priv->treeview); - selection = gtk_tree_view_get_selection (view); model = gtk_tree_view_get_model (view); for (ok = gtk_tree_model_get_iter_first (model, iter); @@ -1585,11 +1579,8 @@ static void accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog, EmpathyAccountSettings *settings) { - GtkTreeSelection *selection; GtkTreeIter iter; - EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); if (accounts_dialog_get_settings_iter (dialog, settings, &iter)) select_and_scroll_to_iter (dialog, &iter); } @@ -1831,14 +1822,12 @@ accounts_dialog_add_account (EmpathyAccountsDialog *dialog, GtkTreeIter iter; TpConnectionStatus status; const gchar *name; - gboolean enabled; EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); gboolean selected = FALSE; model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); status = tp_account_get_connection_status (account, NULL); name = tp_account_get_display_name (account); - enabled = tp_account_is_enabled (account); settings = empathy_account_settings_new_for_account (account); @@ -1968,12 +1957,6 @@ enable_or_disable_account (EmpathyAccountsDialog *dialog, TpAccount *account, gboolean enabled) { - GtkTreeModel *model; - EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - - /* Update the status in the model */ - model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); - /* Update the status-infobar in the details view */ accounts_dialog_update_status_infobar (dialog, account); @@ -2036,11 +2019,8 @@ static void accounts_dialog_set_selected_account (EmpathyAccountsDialog *dialog, TpAccount *account) { - GtkTreeSelection *selection; GtkTreeIter iter; - EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); if (accounts_dialog_get_account_iter (dialog, account, &iter)) select_and_scroll_to_iter (dialog, &iter); } diff --git a/src/empathy-auth-client.c b/src/empathy-auth-client.c index 68c4543a8..b7988e07e 100644 --- a/src/empathy-auth-client.c +++ b/src/empathy-auth-client.c @@ -159,7 +159,6 @@ verifier_verify_cb (GObject *source, GAsyncResult *result, gpointer user_data) { - gboolean res; EmpTLSCertificateRejectReason reason; GError *error = NULL; EmpathyTLSCertificate *certificate = NULL; @@ -170,7 +169,7 @@ verifier_verify_cb (GObject *source, "certificate", &certificate, NULL); - res = empathy_tls_verifier_verify_finish (EMPATHY_TLS_VERIFIER (source), + empathy_tls_verifier_verify_finish (EMPATHY_TLS_VERIFIER (source), result, &reason, &details, &error); if (error != NULL) diff --git a/src/empathy-chat-manager.c b/src/empathy-chat-manager.c index 6c92c25cb..a90c2d08c 100644 --- a/src/empathy-chat-manager.c +++ b/src/empathy-chat-manager.c @@ -32,7 +32,7 @@ enum { CLOSED_CHATS_CHANGED, - HANDLED_CHATS_CHANGED, + DISPLAYED_CHATS_CHANGED, LAST_SIGNAL }; @@ -49,7 +49,7 @@ struct _EmpathyChatManagerPriv /* Queue of (ChatData *) representing the closed chats */ GQueue *closed_queue; - guint num_handled_channels; + guint num_displayed_chat; TpBaseClient *handler; }; @@ -100,18 +100,36 @@ chat_data_free (ChatData *data) } static void +chat_destroyed_cb (gpointer data, + GObject *object) +{ + EmpathyChatManager *self = data; + EmpathyChatManagerPriv *priv = GET_PRIV (self); + + priv->num_displayed_chat--; + + DEBUG ("Chat destroyed; we are now displaying %u chats", + priv->num_displayed_chat); + + g_signal_emit (self, signals[DISPLAYED_CHATS_CHANGED], 0, + priv->num_displayed_chat); +} + +static void process_tp_chat (EmpathyChatManager *self, EmpathyTpChat *tp_chat, TpAccount *account, gint64 user_action_time) { + EmpathyChatManagerPriv *priv = GET_PRIV (self); EmpathyChat *chat = NULL; const gchar *id; id = empathy_tp_chat_get_id (tp_chat); if (!tp_str_empty (id)) { - chat = empathy_chat_window_find_chat (account, id); + chat = empathy_chat_window_find_chat (account, id, + empathy_tp_chat_is_sms_channel (tp_chat)); } if (chat != NULL) @@ -124,6 +142,16 @@ process_tp_chat (EmpathyChatManager *self, /* empathy_chat_new returns a floating reference as EmpathyChat is * a GtkWidget. This reference will be taken by a container * (a GtkNotebook) when we'll call empathy_chat_window_present_chat */ + + priv->num_displayed_chat++; + + DEBUG ("Chat displayed; we are now displaying %u chat", + priv->num_displayed_chat); + + g_signal_emit (self, signals[DISPLAYED_CHATS_CHANGED], 0, + priv->num_displayed_chat); + + g_object_weak_ref ((GObject *) chat, chat_destroyed_cb, self); } empathy_chat_window_present_chat (chat, user_action_time); @@ -191,24 +219,6 @@ tp_chat_ready_cb (GObject *object, } static void -channel_invalidated (TpChannel *channel, - guint domain, - gint code, - gchar *message, - EmpathyChatManager *self) -{ - EmpathyChatManagerPriv *priv = GET_PRIV (self); - - priv->num_handled_channels--; - - DEBUG ("Channel closed; we are now handling %u text channels", - priv->num_handled_channels); - - g_signal_emit (self, signals[HANDLED_CHATS_CHANGED], 0, - priv->num_handled_channels); -} - -static void handle_channels (TpSimpleHandler *handler, TpAccount *account, TpConnection *connection, @@ -219,9 +229,7 @@ handle_channels (TpSimpleHandler *handler, gpointer user_data) { EmpathyChatManager *self = (EmpathyChatManager *) user_data; - EmpathyChatManagerPriv *priv = GET_PRIV (self); GList *l; - gboolean handling = FALSE; for (l = channels; l != NULL; l = g_list_next (l)) { @@ -238,7 +246,7 @@ handle_channels (TpSimpleHandler *handler, continue; } - handling = TRUE; + DEBUG ("Now handling channel %s", tp_proxy_get_object_path (channel)); tp_chat = empathy_tp_chat_new (account, channel); @@ -254,23 +262,9 @@ handle_channels (TpSimpleHandler *handler, ctx->sig_id = g_signal_connect (tp_chat, "notify::ready", G_CALLBACK (tp_chat_ready_cb), ctx); } - - priv->num_handled_channels++; - - g_signal_connect (channel, "invalidated", - G_CALLBACK (channel_invalidated), self); } tp_handle_channels_context_accept (context); - - if (handling) - { - DEBUG ("Channels handled; we are now handling %u text channels", - priv->num_handled_channels); - - g_signal_emit (self, signals[HANDLED_CHATS_CHANGED], 0, - priv->num_handled_channels); - } } static void @@ -387,8 +381,8 @@ empathy_chat_manager_class_init ( G_TYPE_NONE, 1, G_TYPE_UINT, NULL); - signals[HANDLED_CHATS_CHANGED] = - g_signal_new ("handled-chats-changed", + signals[DISPLAYED_CHATS_CHANGED] = + g_signal_new ("displayed-chats-changed", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, 0, @@ -459,11 +453,3 @@ empathy_chat_manager_get_num_closed_chats (EmpathyChatManager *self) return g_queue_get_length (priv->closed_queue); } - -guint -empathy_chat_manager_get_num_handled_chats (EmpathyChatManager *self) -{ - EmpathyChatManagerPriv *priv = GET_PRIV (self); - - return priv->num_handled_channels; -} diff --git a/src/empathy-chat-manager.h b/src/empathy-chat-manager.h index ee43857f4..6d249b3e4 100644 --- a/src/empathy-chat-manager.h +++ b/src/empathy-chat-manager.h @@ -65,8 +65,6 @@ void empathy_chat_manager_closed_chat (EmpathyChatManager *self, void empathy_chat_manager_undo_closed_chat (EmpathyChatManager *self); guint empathy_chat_manager_get_num_closed_chats (EmpathyChatManager *self); -guint empathy_chat_manager_get_num_handled_chats (EmpathyChatManager *self); - G_END_DECLS #endif /* #ifndef __EMPATHY_CHAT_MANAGER_H__*/ diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index 94f93e2bf..be83f4a29 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -259,7 +259,6 @@ chat_window_create_label (EmpathyChatWindow *window, EmpathyChat *chat, gboolean is_tab_label) { - EmpathyChatWindowPriv *priv; GtkWidget *hbox; GtkWidget *name_label; GtkWidget *status_image; @@ -268,8 +267,6 @@ chat_window_create_label (EmpathyChatWindow *window, PangoAttrList *attr_list; PangoAttribute *attr; - priv = GET_PRIV (window); - /* The spacing between the button and the label. */ hbox = gtk_hbox_new (FALSE, 0); @@ -314,6 +311,15 @@ chat_window_create_label (EmpathyChatWindow *window, if (is_tab_label) { GtkWidget *close_button; + GtkWidget *sending_spinner; + + sending_spinner = gtk_spinner_new (); + + gtk_box_pack_start (GTK_BOX (hbox), sending_spinner, + FALSE, FALSE, 0); + g_object_set_data (G_OBJECT (chat), + "chat-window-tab-sending-spinner", + sending_spinner); close_button = gedit_close_button_new (); g_object_set_data (G_OBJECT (chat), "chat-window-tab-close-button", close_button); @@ -453,14 +459,14 @@ get_all_unread_messages (EmpathyChatWindowPriv *priv) static gchar * get_window_title_name (EmpathyChatWindowPriv *priv) { - const gchar *active_name; + gchar *active_name, *ret; guint nb_chats; guint current_unread_msgs; nb_chats = g_list_length (priv->chats); g_assert (nb_chats > 0); - active_name = empathy_chat_get_name (priv->current_chat); + active_name = empathy_chat_dup_name (priv->current_chat); current_unread_msgs = empathy_chat_get_nb_unread_messages ( priv->current_chat); @@ -468,9 +474,9 @@ get_window_title_name (EmpathyChatWindowPriv *priv) if (nb_chats == 1) { /* only one tab */ if (current_unread_msgs == 0) - return g_strdup (active_name); + ret = g_strdup (active_name); else - return g_strdup_printf (ngettext ( + ret = g_strdup_printf (ngettext ( "%s (%d unread)", "%s (%d unread)", current_unread_msgs), active_name, current_unread_msgs); @@ -482,7 +488,7 @@ get_window_title_name (EmpathyChatWindowPriv *priv) if (all_unread_msgs == 0) { /* no unread message */ - return g_strdup_printf (ngettext ( + ret = g_strdup_printf (ngettext ( "%s (and %u other)", "%s (and %u others)", nb_others), active_name, nb_others); @@ -490,7 +496,7 @@ get_window_title_name (EmpathyChatWindowPriv *priv) else if (all_unread_msgs == current_unread_msgs) { /* unread messages are in the current tab */ - return g_strdup_printf (ngettext ( + ret = g_strdup_printf (ngettext ( "%s (%d unread)", "%s (%d unread)", current_unread_msgs), active_name, current_unread_msgs); @@ -498,7 +504,7 @@ get_window_title_name (EmpathyChatWindowPriv *priv) else if (current_unread_msgs == 0) { /* unread messages are in other tabs */ - return g_strdup_printf (ngettext ( + ret = g_strdup_printf (ngettext ( "%s (%d unread from others)", "%s (%d unread from others)", all_unread_msgs), @@ -507,13 +513,17 @@ get_window_title_name (EmpathyChatWindowPriv *priv) else { /* unread messages are in all the tabs */ - return g_strdup_printf (ngettext ( + ret = g_strdup_printf (ngettext ( "%s (%d unread from all)", "%s (%d unread from all)", all_unread_msgs), active_name, all_unread_msgs); } } + + g_free (active_name); + + return ret; } static void @@ -637,7 +647,7 @@ chat_window_update_chat_tab_full (EmpathyChat *chat, EmpathyChatWindow *window; EmpathyChatWindowPriv *priv; EmpathyContact *remote_contact; - const gchar *name; + gchar *name; const gchar *id; TpAccount *account; const gchar *subject; @@ -648,6 +658,8 @@ chat_window_update_chat_tab_full (EmpathyChat *chat, const gchar *icon_name; GtkWidget *tab_image; GtkWidget *menu_image; + GtkWidget *sending_spinner; + guint nb_sending; window = chat_window_find_chat (chat); if (!window) { @@ -656,7 +668,7 @@ chat_window_update_chat_tab_full (EmpathyChat *chat, priv = GET_PRIV (window); /* Get information */ - name = empathy_chat_get_name (chat); + name = empathy_chat_dup_name (chat); account = empathy_chat_get_account (chat); subject = empathy_chat_get_subject (chat); remote_contact = empathy_chat_get_remote_contact (chat); @@ -675,6 +687,9 @@ chat_window_update_chat_tab_full (EmpathyChat *chat, else if (remote_contact && empathy_chat_is_composing (chat)) { icon_name = EMPATHY_IMAGE_TYPING; } + else if (empathy_chat_is_sms_channel (chat)) { + icon_name = EMPATHY_IMAGE_SMS; + } else if (remote_contact) { icon_name = empathy_icon_name_for_contact (remote_contact); } else { @@ -693,6 +708,16 @@ chat_window_update_chat_tab_full (EmpathyChat *chat, gtk_widget_hide (menu_image); } + /* Update the sending spinner */ + nb_sending = empathy_chat_get_n_messages_sending (chat); + sending_spinner = g_object_get_data (G_OBJECT (chat), + "chat-window-tab-sending-spinner"); + + g_object_set (sending_spinner, + "active", nb_sending > 0, + "visible", nb_sending > 0, + NULL); + /* Update tab tooltip */ tooltip = g_string_new (NULL); @@ -703,11 +728,29 @@ chat_window_update_chat_tab_full (EmpathyChat *chat, id = name; } + if (empathy_chat_is_sms_channel (chat)) { + append_markup_printf (tooltip, "%s ", _("SMS:")); + } + append_markup_printf (tooltip, "<b>%s</b><small> (%s)</small>", id, tp_account_get_display_name (account)); + if (nb_sending > 0) { + char *tmp = g_strdup_printf ( + ngettext ("Sending %d message", + "Sending %d messages", + nb_sending), + nb_sending); + + g_string_append (tooltip, "\n"); + g_string_append (tooltip, tmp); + + gtk_widget_set_tooltip_text (sending_spinner, tmp); + g_free (tmp); + } + if (!EMP_STR_EMPTY (status)) { append_markup_printf (tooltip, "\n<i>%s</i>", status); } @@ -738,6 +781,8 @@ chat_window_update_chat_tab_full (EmpathyChat *chat, if (priv->current_chat == chat) { chat_window_update (window, update_contact_menu); } + + g_free (name); } static void @@ -865,21 +910,24 @@ chat_window_favorite_toggled_cb (GtkToggleAction *toggle_action, EmpathyChatWindowPriv *priv = GET_PRIV (window); gboolean active; TpAccount *account; + gchar *name; const gchar *room; EmpathyChatroom *chatroom; active = gtk_toggle_action_get_active (toggle_action); account = empathy_chat_get_account (priv->current_chat); room = empathy_chat_get_id (priv->current_chat); + name = empathy_chat_dup_name (priv->current_chat); chatroom = empathy_chatroom_manager_ensure_chatroom ( priv->chatroom_manager, account, room, - empathy_chat_get_name (priv->current_chat)); + name); empathy_chatroom_set_favorite (chatroom, active); g_object_unref (chatroom); + g_free (name); } static void @@ -889,21 +937,24 @@ chat_window_always_urgent_toggled_cb (GtkToggleAction *toggle_action, EmpathyChatWindowPriv *priv = GET_PRIV (window); gboolean active; TpAccount *account; + gchar *name; const gchar *room; EmpathyChatroom *chatroom; active = gtk_toggle_action_get_active (toggle_action); account = empathy_chat_get_account (priv->current_chat); room = empathy_chat_get_id (priv->current_chat); + name = empathy_chat_dup_name (priv->current_chat); chatroom = empathy_chatroom_manager_ensure_chatroom ( priv->chatroom_manager, account, room, - empathy_chat_get_name (priv->current_chat)); + name); empathy_chatroom_set_always_urgent (chatroom, active); g_object_unref (chatroom); + g_free (name); } static void @@ -1086,7 +1137,6 @@ chat_window_tabs_next_activate_cb (GtkAction *action, EmpathyChatWindow *window) { EmpathyChatWindowPriv *priv; - EmpathyChat *chat; gint index_, numPages; gboolean wrap_around; @@ -1095,7 +1145,6 @@ chat_window_tabs_next_activate_cb (GtkAction *action, g_object_get (gtk_settings_get_default (), "gtk-keynav-wrap-around", &wrap_around, NULL); - chat = priv->current_chat; index_ = gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)); numPages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)); @@ -1112,7 +1161,6 @@ chat_window_tabs_previous_activate_cb (GtkAction *action, EmpathyChatWindow *window) { EmpathyChatWindowPriv *priv; - EmpathyChat *chat; gint index_, numPages; gboolean wrap_around; @@ -1121,7 +1169,6 @@ chat_window_tabs_previous_activate_cb (GtkAction *action, g_object_get (gtk_settings_get_default (), "gtk-keynav-wrap-around", &wrap_around, NULL); - chat = priv->current_chat; index_ = gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)); numPages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook)); @@ -1335,8 +1382,9 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window, G_CALLBACK (chat_window_notification_closed_cb), window, 0); if (has_x_canonical_append) { + /* We have to set a not empty string to keep libnotify happy */ notify_notification_set_hint_string (notification, - EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND, ""); + EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND, "1"); } } @@ -1356,15 +1404,16 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window, static void chat_window_set_highlight_room_labels (EmpathyChat *chat) { - gchar *markup; + gchar *markup, *name; GtkWidget *widget; if (!empathy_chat_is_room (chat)) return; + name = empathy_chat_dup_name (chat); markup = g_markup_printf_escaped ( "<span color=\"red\" weight=\"bold\">%s</span>", - empathy_chat_get_name (chat)); + name); widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-label"); gtk_label_set_markup (GTK_LABEL (widget), markup); @@ -1372,6 +1421,7 @@ chat_window_set_highlight_room_labels (EmpathyChat *chat) widget = g_object_get_data (G_OBJECT (chat), "chat-window-menu-label"); gtk_label_set_markup (GTK_LABEL (widget), markup); + g_free (name); g_free (markup); } @@ -1765,7 +1815,7 @@ chat_window_drag_data_received (GtkWidget *widget, account = tp_account_manager_ensure_account (account_manager, account_id); if (account != NULL) - chat = empathy_chat_window_find_chat (account, contact_id); + chat = empathy_chat_window_find_chat (account, contact_id, FALSE); } if (account == NULL) { @@ -2131,13 +2181,11 @@ empathy_chat_window_get_default (gboolean room) } for (l = chat_windows; l; l = l->next) { - EmpathyChatWindowPriv *priv; EmpathyChatWindow *chat_window; GtkWidget *dialog; guint nb_rooms, nb_private; chat_window = l->data; - priv = GET_PRIV (chat_window); dialog = empathy_chat_window_get_dialog (chat_window); @@ -2227,6 +2275,12 @@ empathy_chat_window_add_chat (EmpathyChatWindow *window, g_signal_connect (chat, "notify::remote-contact", G_CALLBACK (chat_window_chat_notify_cb), NULL); + g_signal_connect (chat, "notify::sms-channel", + G_CALLBACK (chat_window_chat_notify_cb), + NULL); + g_signal_connect (chat, "notify::n-messages-sending", + G_CALLBACK (chat_window_chat_notify_cb), + NULL); chat_window_chat_notify_cb (chat); gtk_notebook_append_page_menu (GTK_NOTEBOOK (priv->notebook), child, label, popup_label); @@ -2330,7 +2384,8 @@ empathy_chat_window_switch_to_chat (EmpathyChatWindow *window, EmpathyChat * empathy_chat_window_find_chat (TpAccount *account, - const gchar *id) + const gchar *id, + gboolean sms_channel) { GList *l; @@ -2350,7 +2405,8 @@ empathy_chat_window_find_chat (TpAccount *account, chat = ll->data; if (account == empathy_chat_get_account (chat) && - !tp_strdiff (id, empathy_chat_get_id (chat))) { + !tp_strdiff (id, empathy_chat_get_id (chat)) && + sms_channel == empathy_chat_is_sms_channel (chat)) { return chat; } } diff --git a/src/empathy-chat-window.h b/src/empathy-chat-window.h index 5477479ac..2112b6647 100644 --- a/src/empathy-chat-window.h +++ b/src/empathy-chat-window.h @@ -59,7 +59,8 @@ struct _EmpathyChatWindowClass { GType empathy_chat_window_get_type (void); EmpathyChat * empathy_chat_window_find_chat (TpAccount *account, - const gchar *id); + const gchar *id, + gboolean sms_channel); void empathy_chat_window_present_chat (EmpathyChat *chat, gint64 timestamp); diff --git a/src/empathy-chat.c b/src/empathy-chat.c index 73d8ce87c..43ab00270 100644 --- a/src/empathy-chat.c +++ b/src/empathy-chat.c @@ -52,7 +52,7 @@ static gboolean use_timer = TRUE; static EmpathyChatManager *chat_mgr = NULL; static void -handled_chats_changed_cb (EmpathyChatManager *mgr, +displayed_chats_changed_cb (EmpathyChatManager *mgr, guint nb_chats, gpointer user_data) { @@ -81,8 +81,8 @@ activate_cb (GApplication *application) g_assert (chat_mgr == NULL); chat_mgr = empathy_chat_manager_dup_singleton (); - g_signal_connect (chat_mgr, "handled-chats-changed", - G_CALLBACK (handled_chats_changed_cb), GUINT_TO_POINTER (1)); + g_signal_connect (chat_mgr, "displayed-chats-changed", + G_CALLBACK (displayed_chats_changed_cb), GUINT_TO_POINTER (1)); } int diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c index 6125ec895..2786e0738 100644 --- a/src/empathy-event-manager.c +++ b/src/empathy-event-manager.c @@ -335,9 +335,6 @@ static void event_text_channel_process_func (EventPriv *event) { EmpathyTpChat *tp_chat; - gint64 timestamp; - - timestamp = tp_user_action_time_from_x11 (gtk_get_current_event_time ()); if (event->approval->handler != 0) { @@ -566,7 +563,6 @@ event_manager_chat_message_received_cb (EmpathyTpChat *tp_chat, EmpathyContact *sender; const gchar *header; const gchar *msg; - TpChannel *channel; EventPriv *event; EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager); @@ -583,8 +579,6 @@ event_manager_chat_message_received_cb (EmpathyTpChat *tp_chat, header = empathy_contact_get_alias (sender); msg = empathy_message_get_body (message); - channel = empathy_tp_chat_get_channel (tp_chat); - if (event != NULL) event_update (approval->manager, event, EMPATHY_IMAGE_NEW_MESSAGE, header, msg); @@ -703,13 +697,9 @@ invite_dialog_response_cb (GtkDialog *dialog, gint response, EventManagerApproval *approval) { - EmpathyTpChat *tp_chat; - gtk_widget_destroy (GTK_WIDGET (approval->dialog)); approval->dialog = NULL; - tp_chat = EMPATHY_TP_CHAT (approval->handler_instance); - if (response != GTK_RESPONSE_OK) { /* close channel */ diff --git a/src/empathy-ft-manager.c b/src/empathy-ft-manager.c index edb470cbb..e23b0b45a 100644 --- a/src/empathy-ft-manager.c +++ b/src/empathy-ft-manager.c @@ -696,11 +696,8 @@ static void ft_manager_start_transfer (EmpathyFTManager *manager, EmpathyFTHandler *handler) { - EmpathyFTManagerPriv *priv; gboolean is_outgoing; - priv = GET_PRIV (manager); - is_outgoing = !empathy_ft_handler_is_incoming (handler); DEBUG ("Start transfer, is outgoing %s", diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c index b4c1254df..0cef0e10f 100644 --- a/src/empathy-main-window.c +++ b/src/empathy-main-window.c @@ -145,6 +145,10 @@ struct _EmpathyMainWindowPriv { GtkWidget *edit_context; GtkWidget *edit_context_separator; + GtkActionGroup *balance_action_group; + GtkAction *view_balance_show_in_roster; + GtkWidget *balance_vbox; + guint size_timeout_id; /* reffed TpAccount* => visible GtkInfoBar* */ @@ -220,6 +224,8 @@ main_window_flash_foreach (GtkTreeModel *model, pixbuf = empathy_individual_store_get_individual_status_icon ( GET_PRIV (data->window)->individual_store, individual); + if (pixbuf != NULL) + g_object_ref (pixbuf); } gtk_tree_store_set (GTK_TREE_STORE (model), iter, @@ -240,6 +246,7 @@ main_window_flash_foreach (GtkTreeModel *model, g_object_unref (individual); tp_clear_object (&contact); + tp_clear_object (&pixbuf); return FALSE; } @@ -780,6 +787,294 @@ main_window_update_status (EmpathyMainWindow *window) g_list_free (children); } +static char * +main_window_account_to_action_name (TpAccount *account) +{ + char *r; + + /* action names can't have '/' in them, replace it with '.' */ + r = g_strdup (tp_account_get_path_suffix (account)); + r = g_strdelimit (r, "/", '.'); + + return r; +} + +static void +main_window_balance_activate_cb (GtkAction *action, + EmpathyMainWindow *window) +{ + const char *uri; + + uri = g_object_get_data (G_OBJECT (action), "manage-credit-uri"); + + if (!tp_str_empty (uri)) { + DEBUG ("Top-up credit URI: %s", uri); + empathy_url_show (GTK_WIDGET (window), uri); + } else { + DEBUG ("unknown protocol for top-up"); + } +} + +static void +main_window_balance_update_balance (GtkAction *action, + GValueArray *balance) +{ + TpAccount *account = g_object_get_data (G_OBJECT (action), "account"); + GtkWidget *label; + int amount = 0; + guint scale = G_MAXINT32; + const char *currency = ""; + char *money, *str; + + if (balance != NULL) + tp_value_array_unpack (balance, 3, + &amount, + &scale, + ¤cy); + + if (amount == 0 && + scale == G_MAXINT32 && + tp_str_empty (currency)) { + /* unknown balance */ + money = g_strdup ("--"); + } else { + char *tmp = empathy_format_currency (amount, scale, currency); + + money = g_strdup_printf ("%s %s", currency, tmp); + g_free (tmp); + } + + /* Translators: this string will be something like: + * Top up My Account ($1.23)..." */ + str = g_strdup_printf (_("Top up %s (%s)..."), + tp_account_get_display_name (account), + money); + + gtk_action_set_label (action, str); + g_free (str); + + /* update the money label in the roster */ + label = g_object_get_data (G_OBJECT (action), "money-label"); + + gtk_label_set_text (GTK_LABEL (label), money); + g_free (money); +} + +static void +main_window_setup_balance_got_balance_props (TpProxy *conn, + GHashTable *props, + const GError *in_error, + gpointer user_data, + GObject *action) +{ + GValueArray *balance = NULL; + const char *uri; + + if (in_error != NULL) { + DEBUG ("Failed to get account balance properties: %s", + in_error->message); + goto finally; + } + + balance = tp_asv_get_boxed (props, "AccountBalance", + TP_STRUCT_TYPE_CURRENCY_AMOUNT); + uri = tp_asv_get_string (props, "ManageCreditURI"); + + g_object_set_data_full (action, "manage-credit-uri", + g_strdup (uri), g_free); + gtk_action_set_sensitive (GTK_ACTION (action), !tp_str_empty (uri)); + +finally: + main_window_balance_update_balance (GTK_ACTION (action), balance); +} + +static void +main_window_balance_changed_cb (TpConnection *conn, + const GValueArray *balance, + gpointer user_data, + GObject *action) +{ + main_window_balance_update_balance (GTK_ACTION (action), + (GValueArray *) balance); +} + +static GtkAction * +main_window_setup_balance_create_action (EmpathyMainWindow *window, + TpAccount *account) +{ + EmpathyMainWindowPriv *priv = GET_PRIV (window); + GtkAction *action; + char *name, *ui; + guint merge_id; + GError *error = NULL; + + /* create the action group if required */ + if (priv->balance_action_group == NULL) { + priv->balance_action_group = + gtk_action_group_new ("balance-action-group"); + + gtk_ui_manager_insert_action_group (priv->ui_manager, + priv->balance_action_group, -1); + } + + /* create the action */ + name = main_window_account_to_action_name (account); + action = gtk_action_new (name, + tp_account_get_display_name (account), + _("Top up account credit"), + NULL); + g_object_bind_property (account, "icon-name", action, "icon-name", + G_BINDING_SYNC_CREATE); + + g_object_set_data (G_OBJECT (action), "account", account); + g_signal_connect (action, "activate", + G_CALLBACK (main_window_balance_activate_cb), window); + + gtk_action_group_add_action (priv->balance_action_group, action); + g_object_unref (action); + + ui = g_strdup_printf ( + "<ui>" + " <menubar name='menubar'>" + " <menu action='view'>" + " <placeholder name='view_balance_placeholder'>" + " <menuitem action='%s'/>" + " </placeholder>" + " </menu>" + " </menubar>" + "</ui>", + name); + + merge_id = gtk_ui_manager_add_ui_from_string (priv->ui_manager, + ui, -1, &error); + if (error != NULL) { + DEBUG ("Failed to add balance UI for %s: %s", + tp_account_get_display_name (account), + error->message); + g_error_free (error); + } + + g_object_set_data (G_OBJECT (action), + "merge-id", GUINT_TO_POINTER (merge_id)); + + g_free (name); + g_free (ui); + + return action; +} + +static GtkWidget * +main_window_setup_balance_create_widget (EmpathyMainWindow *window, + GtkAction *action) +{ + EmpathyMainWindowPriv *priv = GET_PRIV (window); + TpAccount *account; + GtkWidget *hbox, *image, *label, *button; + + account = g_object_get_data (G_OBJECT (action), "account"); + g_return_val_if_fail (TP_IS_ACCOUNT (account), NULL); + + hbox = gtk_hbox_new (FALSE, 6); + + /* protocol icon */ + image = gtk_image_new (); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0); + g_object_bind_property (action, "icon-name", image, "icon-name", + G_BINDING_SYNC_CREATE); + + /* account name label */ + label = gtk_label_new (""); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); + g_object_bind_property (account, "display-name", label, "label", + G_BINDING_SYNC_CREATE); + + /* balance label */ + label = gtk_label_new (""); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); + g_object_set_data (G_OBJECT (action), "money-label", label); + + /* top up button */ + button = gtk_button_new_with_label (_("Top Up...")); + gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0); + g_signal_connect_swapped (button, "clicked", + G_CALLBACK (gtk_action_activate), action); + + gtk_box_pack_start (GTK_BOX (priv->balance_vbox), hbox, FALSE, TRUE, 0); + gtk_widget_show_all (hbox); + + /* tie the lifetime of the widget to the lifetime of the action */ + g_object_weak_ref (G_OBJECT (action), + (GWeakNotify) gtk_widget_destroy, hbox); + + return hbox; +} + +static void +main_window_setup_balance_conn_ready (GObject *conn, + GAsyncResult *result, + gpointer user_data) +{ + EmpathyMainWindow *window = user_data; + EmpathyMainWindowPriv *priv = GET_PRIV (window); + TpAccount *account = g_object_get_data (conn, "account"); + GtkAction *action; + GError *error = NULL; + + if (!tp_proxy_prepare_finish (conn, result, &error)) { + DEBUG ("Failed to prepare connection: %s", error->message); + + g_error_free (error); + return; + } + + if (!tp_proxy_has_interface_by_id (conn, + TP_IFACE_QUARK_CONNECTION_INTERFACE_BALANCE)) { + return; + } + + DEBUG ("Setting up balance for acct: %s", + tp_account_get_display_name (account)); + + /* create the action */ + action = main_window_setup_balance_create_action (window, account); + + if (action == NULL) + return; + + gtk_action_set_visible (priv->view_balance_show_in_roster, TRUE); + + /* create the display widget */ + main_window_setup_balance_create_widget (window, action); + + /* request the current balance and monitor for any changes */ + tp_cli_dbus_properties_call_get_all (conn, -1, + TP_IFACE_CONNECTION_INTERFACE_BALANCE, + main_window_setup_balance_got_balance_props, + window, NULL, G_OBJECT (action)); + + tp_cli_connection_interface_balance_connect_to_balance_changed ( + TP_CONNECTION (conn), main_window_balance_changed_cb, + window, NULL, G_OBJECT (action), NULL); +} + +static void +main_window_setup_balance (EmpathyMainWindow *window, + TpAccount *account) +{ + TpConnection *conn = tp_account_get_connection (account); + + if (conn == NULL) + return; + + /* need to prepare the connection: + * store the account on the connection */ + g_object_set_data (G_OBJECT (conn), "account", account); + tp_proxy_prepare_async (conn, NULL, + main_window_setup_balance_conn_ready, window); +} + static void main_window_connection_changed_cb (TpAccount *account, guint old_status, @@ -801,6 +1096,44 @@ main_window_connection_changed_cb (TpAccount *account, if (current == TP_CONNECTION_STATUS_DISCONNECTED) { empathy_sound_manager_play (priv->sound_mgr, GTK_WIDGET (window), EMPATHY_SOUND_ACCOUNT_DISCONNECTED); + + /* remove balance action if required */ + if (priv->balance_action_group != NULL) { + GtkAction *action; + char *name; + GList *a; + + name = main_window_account_to_action_name (account); + + action = gtk_action_group_get_action ( + priv->balance_action_group, name); + + if (action != NULL) { + guint merge_id; + + DEBUG ("Removing action"); + + merge_id = GPOINTER_TO_UINT (g_object_get_data ( + G_OBJECT (action), + "merge-id")); + + gtk_ui_manager_remove_ui (priv->ui_manager, + merge_id); + gtk_action_group_remove_action ( + priv->balance_action_group, action); + } + + g_free (name); + + a = gtk_action_group_list_actions ( + priv->balance_action_group); + + gtk_action_set_visible ( + priv->view_balance_show_in_roster, + g_list_length (a) > 0); + + g_list_free (a); + } } if (current == TP_CONNECTION_STATUS_CONNECTED) { @@ -809,6 +1142,7 @@ main_window_connection_changed_cb (TpAccount *account, /* Account connected without error, remove error message if any */ main_window_remove_error (window, account); + main_window_setup_balance (window, account); } } @@ -1674,6 +2008,8 @@ account_manager_prepared_cb (GObject *source_object, window); g_hash_table_insert (priv->status_changed_handlers, account, GUINT_TO_POINTER (handler_id)); + + main_window_setup_balance (window, account); } g_signal_connect (manager, "account-validity-changed", @@ -1770,6 +2106,7 @@ empathy_main_window_init (EmpathyMainWindow *window) filename = empathy_file_lookup ("empathy-main-window.ui", "src"); gui = empathy_builder_get_file (filename, "main_vbox", &priv->main_vbox, + "balance_vbox", &priv->balance_vbox, "errors_vbox", &priv->errors_vbox, "auth_vbox", &priv->auth_vbox, "ui_manager", &priv->ui_manager, @@ -1787,6 +2124,7 @@ empathy_main_window_init (EmpathyMainWindow *window) "notebook", &priv->notebook, "no_entry_label", &priv->no_entry_label, "roster_scrolledwindow", &sw, + "view_balance_show_in_roster", &priv->view_balance_show_in_roster, NULL); g_free (filename); @@ -1947,6 +2285,14 @@ empathy_main_window_init (EmpathyMainWindow *window) /* Set window size. */ empathy_geometry_bind (GTK_WINDOW (window), GEOMETRY_NAME); + /* bind view_balance_show_in_roster */ + g_settings_bind (priv->gsettings_ui, "show-balance-in-roster", + priv->view_balance_show_in_roster, "active", + G_SETTINGS_BIND_DEFAULT); + g_object_bind_property (priv->view_balance_show_in_roster, "active", + priv->balance_vbox, "visible", + G_BINDING_SYNC_CREATE); + /* Enable event handling */ priv->call_observer = empathy_call_observer_dup_singleton (); priv->event_manager = empathy_event_manager_dup_singleton (); diff --git a/src/empathy-main-window.ui b/src/empathy-main-window.ui index 864be1d28..b21a07bac 100644 --- a/src/empathy-main-window.ui +++ b/src/empathy-main-window.ui @@ -70,6 +70,13 @@ </object> </child> <child> + <object class="GtkToggleAction" id="view_balance_show_in_roster"> + <property name="name">view_balance_show_in_roster</property> + <property name="label" translatable="yes">Credit Balance</property> + <property name="visible">False</property> + </object> + </child> + <child> <object class="GtkAction" id="view_show_map"> <property name="name">view_show_map</property> <property name="label" translatable="yes">Contacts on a _Map</property> @@ -265,6 +272,9 @@ <menuitem action="view_show_offline"/> <menuitem action="view_show_protocols"/> <separator/> + <menuitem action="view_balance_show_in_roster"/> + <placeholder name="view_balance_placeholder"/> + <separator/> <menuitem action="view_sort_by_name"/> <menuitem action="view_sort_by_status"/> <separator/> @@ -317,7 +327,8 @@ </packing> </child> <child> - <object class="GtkVBox" id="errors_vbox"> + <object class="GtkVBox" id="balance_vbox"> + <property name="spacing">3</property> <child> <placeholder/> </child> @@ -329,7 +340,7 @@ </packing> </child> <child> - <object class="GtkVBox" id="auth_vbox"> + <object class="GtkVBox" id="errors_vbox"> <child> <placeholder/> </child> @@ -341,6 +352,18 @@ </packing> </child> <child> + <object class="GtkVBox" id="auth_vbox"> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> <object class="GtkNotebook" id="notebook"> <property name="visible">True</property> <property name="can_focus">True</property> @@ -372,7 +395,7 @@ </child> </object> <packing> - <property name="position">4</property> + <property name="position">5</property> </packing> </child> </object> diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c index f27e8de03..388a1e506 100644 --- a/src/empathy-new-chatroom-dialog.c +++ b/src/empathy-new-chatroom-dialog.c @@ -386,11 +386,8 @@ out: static void new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog) { - EmpathyAccountChooser *account_chooser; const gchar *protocol; - account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); - if (dialog->account == NULL) return; @@ -535,8 +532,6 @@ new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, EmpathyChatroom *chatroom, EmpathyNewChatroomDialog *dialog) { - GtkTreeView *view; - GtkTreeSelection *selection; GtkListStore *store; GtkTreeIter iter; gchar *members; @@ -550,8 +545,6 @@ new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, empathy_chatroom_get_room (chatroom)); /* Add to model */ - view = GTK_TREE_VIEW (dialog->treeview); - selection = gtk_tree_view_get_selection (view); store = GTK_LIST_STORE (dialog->model); members = g_strdup_printf ("%d", empathy_chatroom_get_members_count (chatroom)); tmp = g_strdup_printf ("<b>%s</b>", empathy_chatroom_get_name (chatroom)); diff --git a/src/empathy-notifications-approver.c b/src/empathy-notifications-approver.c index a87a6d30e..af6c139d2 100644 --- a/src/empathy-notifications-approver.c +++ b/src/empathy-notifications-approver.c @@ -219,6 +219,9 @@ add_notification_actions (EmpathyNotificationsApprover *self, break; case EMPATHY_EVENT_TYPE_AUTH: + /* translators: the 'Provide' button is displayed in a notification + * bubble when Empathy is asking for an account password; clicking on it + * brings the password popup. */ notify_notification_add_action (notification, "provide", _("Provide"), (NotifyActionCallback) notification_approve_cb, self, NULL); @@ -335,8 +338,9 @@ update_notification (EmpathyNotificationsApprover *self) NOTIFY_EXPIRES_DEFAULT); if (has_x_canonical_append) + /* We have to set a not empty string to keep libnotify happy */ notify_notification_set_hint_string (notification, - EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND, ""); + EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND, "1"); if (empathy_notify_manager_has_capability (self->priv->notify_mgr, EMPATHY_NOTIFY_MANAGER_CAP_ACTIONS)) diff --git a/src/empathy-preferences.c b/src/empathy-preferences.c index 813637dca..f90724c7f 100644 --- a/src/empathy-preferences.c +++ b/src/empathy-preferences.c @@ -48,6 +48,9 @@ #include "empathy-preferences.h" +#define DEBUG_FLAG EMPATHY_DEBUG_OTHER +#include <libempathy/empathy-debug.h> + G_DEFINE_TYPE (EmpathyPreferences, empathy_preferences, GTK_TYPE_DIALOG); #define GET_PRIV(self) ((EmpathyPreferencesPriv *)((EmpathyPreferences *) self)->priv) @@ -57,7 +60,6 @@ struct _EmpathyPreferencesPriv { GtkWidget *checkbutton_show_smileys; GtkWidget *checkbutton_show_contacts_in_rooms; - GtkWidget *combobox_chat_theme; GtkWidget *checkbutton_separate_chat_windows; GtkWidget *checkbutton_events_notif_area; GtkWidget *checkbutton_autoconnect; @@ -81,6 +83,12 @@ struct _EmpathyPreferencesPriv { GtkWidget *checkbutton_location_resource_cell; GtkWidget *checkbutton_location_resource_gps; + GtkWidget *vbox_chat_theme; + GtkWidget *combobox_chat_theme; + GtkWidget *sw_chat_theme_preview; + EmpathyChatView *chat_theme_preview; + EmpathyThemeManager *theme_manager; + GSettings *gsettings; GSettings *gsettings_chat; GSettings *gsettings_loc; @@ -115,11 +123,11 @@ enum { }; enum { - COL_COMBO_IS_ADIUM, - COL_COMBO_VISIBLE_NAME, - COL_COMBO_NAME, - COL_COMBO_PATH, - COL_COMBO_COUNT + COL_THEME_VISIBLE_NAME, + COL_THEME_NAME, + COL_THEME_IS_ADIUM, + COL_THEME_ADIUM_PATH, + COL_THEME_COUNT }; enum { @@ -312,7 +320,7 @@ preferences_sound_cell_toggled_cb (GtkCellRendererToggle *toggle, { EmpathyPreferencesPriv *priv = GET_PRIV (preferences); GtkTreePath *path; - gboolean toggled, instore; + gboolean instore; GtkTreeIter iter; GtkTreeView *view; GtkTreeModel *model; @@ -322,7 +330,6 @@ preferences_sound_cell_toggled_cb (GtkCellRendererToggle *toggle, model = gtk_tree_view_get_model (view); path = gtk_tree_path_new_from_string (path_string); - toggled = gtk_cell_renderer_toggle_get_active (toggle); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, COL_SOUND_KEY, &key, @@ -411,7 +418,6 @@ preferences_languages_setup (EmpathyPreferences *preferences) GtkTreeView *view; GtkListStore *store; GtkTreeSelection *selection; - GtkTreeModel *model; GtkTreeViewColumn *column; GtkCellRenderer *renderer; guint col_offset; @@ -428,8 +434,6 @@ preferences_languages_setup (EmpathyPreferences *preferences) selection = gtk_tree_view_get_selection (view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); - model = GTK_TREE_MODEL (store); - renderer = gtk_cell_renderer_toggle_new (); g_signal_connect (renderer, "toggled", G_CALLBACK (preferences_languages_cell_toggled_cb), @@ -646,6 +650,124 @@ preferences_languages_cell_toggled_cb (GtkCellRendererToggle *cell, } static void +preferences_preview_theme_append_message (EmpathyChatView *view, + EmpathyContact *sender, + EmpathyContact *receiver, + const gchar *text) +{ + EmpathyMessage *message; + + message = g_object_new (EMPATHY_TYPE_MESSAGE, + "sender", sender, + "receiver", receiver, + "body", text, + NULL); + + empathy_chat_view_append_message (view, message); + g_object_unref (message); +} + +static void +preferences_preview_theme_changed_cb (EmpathyThemeManager *manager, + EmpathyPreferences *preferences) +{ + EmpathyPreferencesPriv *priv = GET_PRIV (preferences); + TpDBusDaemon *dbus; + TpAccount *account; + EmpathyContact *juliet; + EmpathyContact *romeo; + + DEBUG ("Theme changed, update preview widget"); + + if (priv->chat_theme_preview != NULL) { + gtk_widget_destroy (GTK_WIDGET (priv->chat_theme_preview)); + } + priv->chat_theme_preview = empathy_theme_manager_create_view (manager); + gtk_container_add (GTK_CONTAINER (priv->sw_chat_theme_preview), + GTK_WIDGET (priv->chat_theme_preview)); + gtk_widget_show (GTK_WIDGET (priv->chat_theme_preview)); + + /* FIXME: It is ugly to add a fake conversation like that. + * Would be cool if we could request a TplLogManager for a fake + * conversation */ + dbus = tp_dbus_daemon_dup (NULL); + account = tp_account_new (dbus, + TP_ACCOUNT_OBJECT_PATH_BASE "cm/jabber/account", NULL); + juliet = g_object_new (EMPATHY_TYPE_CONTACT, + "account", account, + "id", "juliet", + /* translators: Contact name for the chat theme preview */ + "alias", _("Juliet"), + "is-user", FALSE, + NULL); + romeo = g_object_new (EMPATHY_TYPE_CONTACT, + "account", account, + "id", "romeo", + /* translators: Contact name for the chat theme preview */ + "alias", _("Romeo"), + "is-user", TRUE, + NULL); + + preferences_preview_theme_append_message (priv->chat_theme_preview, + /* translators: Quote from Romeo & Julier, for chat theme preview */ + juliet, romeo, _("O Romeo, Romeo, wherefore art thou Romeo?")); + preferences_preview_theme_append_message (priv->chat_theme_preview, + /* translators: Quote from Romeo & Julier, for chat theme preview */ + juliet, romeo, _("Deny thy father and refuse thy name;")); + preferences_preview_theme_append_message (priv->chat_theme_preview, + /* translators: Quote from Romeo & Julier, for chat theme preview */ + juliet, romeo, _("Or if thou wilt not, be but sworn my love")); + preferences_preview_theme_append_message (priv->chat_theme_preview, + /* translators: Quote from Romeo & Julier, for chat theme preview */ + juliet, romeo, _("And I'll no longer be a Capulet.")); + preferences_preview_theme_append_message (priv->chat_theme_preview, + /* translators: Quote from Romeo & Julier, for chat theme preview */ + romeo, juliet, _("Shall I hear more, or shall I speak at this?")); + + /* translators: Quote from Romeo & Julier, for chat theme preview */ + empathy_chat_view_append_event (priv->chat_theme_preview, _("Juliet has disconnected")); + + g_object_unref (juliet); + g_object_unref (romeo); + g_object_unref (account); + g_object_unref (dbus); +} + +static void +preferences_theme_changed_cb (GtkComboBox *combo, + EmpathyPreferences *preferences) +{ + EmpathyPreferencesPriv *priv = GET_PRIV (preferences); + GtkTreeIter iter; + + if (gtk_combo_box_get_active_iter (combo, &iter)) { + GtkTreeModel *model; + gboolean is_adium; + gchar *name; + gchar *path; + + model = gtk_combo_box_get_model (combo); + gtk_tree_model_get (model, &iter, + COL_THEME_IS_ADIUM, &is_adium, + COL_THEME_NAME, &name, + COL_THEME_ADIUM_PATH, &path, + -1); + + g_settings_set_string (priv->gsettings_chat, + EMPATHY_PREFS_CHAT_THEME, + name); + if (is_adium) { + g_settings_set_string (priv->gsettings_chat, + EMPATHY_PREFS_CHAT_ADIUM_PATH, + path); + } + + g_free (name); + g_free (path); + } +} + +static void preferences_theme_notify_cb (GSettings *gsettings, const gchar *key, gpointer user_data) @@ -658,38 +780,34 @@ preferences_theme_notify_cb (GSettings *gsettings, GtkTreeModel *model; GtkTreeIter iter; gboolean found = FALSE; + gboolean ok; conf_name = g_settings_get_string (gsettings, EMPATHY_PREFS_CHAT_THEME); conf_path = g_settings_get_string (gsettings, EMPATHY_PREFS_CHAT_ADIUM_PATH); combo = GTK_COMBO_BOX (priv->combobox_chat_theme); model = gtk_combo_box_get_model (combo); - if (gtk_tree_model_get_iter_first (model, &iter)) { + for (ok = gtk_tree_model_get_iter_first (model, &iter); + ok && !found; + ok = gtk_tree_model_iter_next (model, &iter)) { gboolean is_adium; gchar *name; gchar *path; - do { - gtk_tree_model_get (model, &iter, - COL_COMBO_IS_ADIUM, &is_adium, - COL_COMBO_NAME, &name, - COL_COMBO_PATH, &path, - -1); - - if (!tp_strdiff (name, conf_name)) { - if (tp_strdiff (name, "adium") || - !tp_strdiff (path, conf_path)) { - found = TRUE; - gtk_combo_box_set_active_iter (combo, &iter); - g_free (name); - g_free (path); - break; - } - } - - g_free (name); - g_free (path); - } while (gtk_tree_model_iter_next (model, &iter)); + gtk_tree_model_get (model, &iter, + COL_THEME_IS_ADIUM, &is_adium, + COL_THEME_NAME, &name, + COL_THEME_ADIUM_PATH, &path, + -1); + + if (!tp_strdiff (name, conf_name) && + (!is_adium || !tp_strdiff (path, conf_path))) { + found = TRUE; + gtk_combo_box_set_active_iter (combo, &iter); + } + + g_free (name); + g_free (path); } /* Fallback to the first one. */ @@ -704,38 +822,6 @@ preferences_theme_notify_cb (GSettings *gsettings, } static void -preferences_theme_changed_cb (GtkComboBox *combo, - EmpathyPreferences *preferences) -{ - EmpathyPreferencesPriv *priv = GET_PRIV (preferences); - GtkTreeModel *model; - GtkTreeIter iter; - gboolean is_adium; - gchar *name; - gchar *path; - - if (gtk_combo_box_get_active_iter (combo, &iter)) { - model = gtk_combo_box_get_model (combo); - - gtk_tree_model_get (model, &iter, - COL_COMBO_IS_ADIUM, &is_adium, - COL_COMBO_NAME, &name, - COL_COMBO_PATH, &path, - -1); - - g_settings_set_string (priv->gsettings_chat, - EMPATHY_PREFS_CHAT_THEME, - name); - if (is_adium == TRUE) - g_settings_set_string (priv->gsettings_chat, - EMPATHY_PREFS_CHAT_ADIUM_PATH, - path); - g_free (name); - g_free (path); - } -} - -static void preferences_themes_setup (EmpathyPreferences *preferences) { EmpathyPreferencesPriv *priv = GET_PRIV (preferences); @@ -751,22 +837,21 @@ preferences_themes_setup (EmpathyPreferences *preferences) cell_layout = GTK_CELL_LAYOUT (combo); /* Create the model */ - store = gtk_list_store_new (COL_COMBO_COUNT, - G_TYPE_BOOLEAN, /* Is an Adium theme */ - G_TYPE_STRING, /* Display name */ - G_TYPE_STRING, /* Theme name */ - G_TYPE_STRING); /* Theme path */ + store = gtk_list_store_new (COL_THEME_COUNT, + G_TYPE_STRING, /* Display name */ + G_TYPE_STRING, /* Theme name */ + G_TYPE_BOOLEAN, /* Is an Adium theme */ + G_TYPE_STRING); /* Adium theme path */ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), - COL_COMBO_VISIBLE_NAME, GTK_SORT_ASCENDING); + COL_THEME_VISIBLE_NAME, GTK_SORT_ASCENDING); /* Fill the model */ themes = empathy_theme_manager_get_themes (); for (i = 0; themes[i]; i += 2) { gtk_list_store_insert_with_values (store, NULL, -1, - COL_COMBO_IS_ADIUM, FALSE, - COL_COMBO_VISIBLE_NAME, _(themes[i + 1]), - COL_COMBO_NAME, themes[i], - COL_COMBO_PATH, NULL, + COL_THEME_VISIBLE_NAME, _(themes[i + 1]), + COL_THEME_NAME, themes[i], + COL_THEME_IS_ADIUM, FALSE, -1); } @@ -782,10 +867,10 @@ preferences_themes_setup (EmpathyPreferences *preferences) if (name != NULL && path != NULL) { gtk_list_store_insert_with_values (store, NULL, -1, - COL_COMBO_IS_ADIUM, TRUE, - COL_COMBO_VISIBLE_NAME, name, - COL_COMBO_NAME, "adium", - COL_COMBO_PATH, path, + COL_THEME_VISIBLE_NAME, name, + COL_THEME_NAME, "adium", + COL_THEME_IS_ADIUM, TRUE, + COL_THEME_ADIUM_PATH, path, -1); } g_hash_table_unref (info); @@ -796,7 +881,7 @@ preferences_themes_setup (EmpathyPreferences *preferences) renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (cell_layout, renderer, TRUE); gtk_cell_layout_set_attributes (cell_layout, renderer, - "text", COL_COMBO_VISIBLE_NAME, NULL); + "text", COL_THEME_VISIBLE_NAME, NULL); gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store)); g_object_unref (store); @@ -832,6 +917,8 @@ empathy_preferences_finalize (GObject *self) { EmpathyPreferencesPriv *priv = GET_PRIV (self); + g_object_unref (priv->theme_manager); + g_object_unref (priv->gsettings); g_object_unref (priv->gsettings_chat); g_object_unref (priv->gsettings_loc); @@ -883,7 +970,9 @@ empathy_preferences_init (EmpathyPreferences *preferences) "notebook", &priv->notebook, "checkbutton_show_smileys", &priv->checkbutton_show_smileys, "checkbutton_show_contacts_in_rooms", &priv->checkbutton_show_contacts_in_rooms, + "vbox_chat_theme", &priv->vbox_chat_theme, "combobox_chat_theme", &priv->combobox_chat_theme, + "sw_chat_theme_preview", &priv->sw_chat_theme_preview, "checkbutton_separate_chat_windows", &priv->checkbutton_separate_chat_windows, "checkbutton_events_notif_area", &priv->checkbutton_events_notif_area, "checkbutton_autoconnect", &priv->checkbutton_autoconnect, @@ -918,6 +1007,13 @@ empathy_preferences_init (EmpathyPreferences *preferences) priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA); priv->gsettings_logger = g_settings_new (EMPATHY_PREFS_LOGGER_SCHEMA); + /* Create chat theme preview, and track changes */ + priv->theme_manager = empathy_theme_manager_dup_singleton (); + tp_g_signal_connect_object (priv->theme_manager, "theme-changed", + G_CALLBACK (preferences_preview_theme_changed_cb), + preferences, 0); + preferences_preview_theme_changed_cb (priv->theme_manager, preferences); + preferences_themes_setup (preferences); preferences_setup_widgets (preferences); diff --git a/src/empathy-preferences.ui b/src/empathy-preferences.ui index 4acc6f3c7..6bc17b761 100644 --- a/src/empathy-preferences.ui +++ b/src/empathy-preferences.ui @@ -1,308 +1,606 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <interface> <requires lib="gtk+" version="2.16"/> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkNotebook" id="notebook"> + <object class="GtkNotebook" id="notebook"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">5</property> + <child> + <object class="GtkBox" id="vbox197"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkFrame" id="frame3"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="border_width">5</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> <child> - <object class="GtkBox" id="vbox197"> + <object class="GtkAlignment" id="alignment11"> <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">18</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> <child> - <object class="GtkFrame" id="frame3"> + <object class="GtkBox" id="vbox199"> <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkAlignment" id="alignment11"> + <object class="GtkCheckButton" id="checkbutton_show_smileys"> + <property name="label" translatable="yes">Show _smileys as images</property> <property name="visible">True</property> - <property name="top_padding">6</property> - <property name="left_padding">12</property> - <child> - <object class="GtkBox" id="vbox199"> - <property name="visible">True</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkCheckButton" id="checkbutton_show_smileys"> - <property name="label" translatable="yes">Show _smileys as images</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkbutton_show_contacts_in_rooms"> - <property name="label" translatable="yes">Show contact _list in rooms</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> - </child> - </object> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label611"> + <child> + <object class="GtkCheckButton" id="checkbutton_show_contacts_in_rooms"> + <property name="label" translatable="yes">Show contact _list in rooms</property> <property name="visible">True</property> - <property name="label" translatable="yes">Appearance</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label611"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Appearance</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment12"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> <child> - <object class="GtkFrame" id="frame4"> + <object class="GtkBox" id="vbox218"> <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkAlignment" id="alignment12"> + <object class="GtkCheckButton" id="checkbutton_separate_chat_windows"> + <property name="label" translatable="yes">_Open new chats in separate windows</property> <property name="visible">True</property> - <property name="top_padding">6</property> - <property name="left_padding">12</property> - <child> - <object class="GtkBox" id="vbox218"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <child> - <object class="GtkCheckButton" id="checkbutton_separate_chat_windows"> - <property name="label" translatable="yes">_Open new chats in separate windows</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkbutton_events_notif_area"> - <property name="label" translatable="yes">Display incoming events in the notification area</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkbutton_autoconnect"> - <property name="label" translatable="yes">_Automatically connect on startup</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkbutton_logging"> - <property name="label" translatable="yes">Log conversations</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="position">3</property> - </packing> - </child> - </object> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label612"> + <child> + <object class="GtkCheckButton" id="checkbutton_events_notif_area"> + <property name="label" translatable="yes">Display incoming events in the notification area</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkbutton_autoconnect"> + <property name="label" translatable="yes">_Automatically connect on startup</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkbutton_logging"> + <property name="label" translatable="yes">Log conversations</property> <property name="visible">True</property> - <property name="label" translatable="yes">Behavior</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> </child> </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label612"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Behavior</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label602"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">General</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkBox" id="vbox2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="checkbutton_notifications_enabled"> + <property name="label" translatable="yes">_Enable bubble notifications</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="left_padding">12</property> + <child> + <object class="GtkBox" id="vbox3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="checkbutton_notifications_disabled_away"> + <property name="label" translatable="yes">Disable notifications when _away or busy</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkbutton_notifications_focus"> + <property name="label" translatable="yes">Enable notifications when the _chat is not focused</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> + <property name="fill">True</property> <property name="position">1</property> </packing> </child> + <child> + <object class="GtkCheckButton" id="checkbutton_notifications_contact_signin"> + <property name="label" translatable="yes">Enable notifications when a contact comes online</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkbutton_notifications_contact_signout"> + <property name="label" translatable="yes">Enable notifications when a contact goes offline</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> </object> </child> - <child type="tab"> - <object class="GtkLabel" id="label602"> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Notifications</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkBox" id="outer_vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkBox" id="vbox219"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="checkbutton_sounds_enabled"> + <property name="label" translatable="yes">_Enable sound notifications</property> <property name="visible">True</property> - <property name="label" translatable="yes">General</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="tab_fill">False</property> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkBox" id="vbox2"> + <object class="GtkAlignment" id="alignment32"> <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">6</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> + <property name="left_padding">12</property> <child> - <object class="GtkCheckButton" id="checkbutton_notifications_enabled"> - <property name="label" translatable="yes">_Enable bubble notifications</property> + <object class="GtkCheckButton" id="checkbutton_sounds_disabled_away"> + <property name="label" translatable="yes">Disable sounds when _away or busy</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="draw_indicator">True</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="vbox221"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label645"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Play sound for events</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment33"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="left_padding">12</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow19"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="treeview_sounds"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection1"/> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label607"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Sounds</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkBox" id="vbox1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkCheckButton" id="checkbutton_location_publish"> + <property name="label" translatable="yes">_Publish location to my contacts</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> <child> - <object class="GtkAlignment" id="alignment1"> + <object class="GtkBox" id="vbox4"> <property name="visible">True</property> - <property name="left_padding">12</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkBox" id="vbox3"> + <object class="GtkBox" id="hbox1"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="spacing">6</property> - <property name="orientation">vertical</property> <child> - <object class="GtkCheckButton" id="checkbutton_notifications_disabled_away"> - <property name="label" translatable="yes">Disable notifications when _away or busy</property> + <object class="GtkImage" id="image1"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="can_focus">False</property> + <property name="yalign">0</property> + <property name="stock">gtk-dialog-info</property> </object> <packing> + <property name="expand">False</property> + <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkCheckButton" id="checkbutton_notifications_focus"> - <property name="label" translatable="yes">Enable notifications when the _chat is not focused</property> + <object class="GtkLabel" id="label6"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Reduced location accuracy means that nothing more precise than your city, state and country will be published. GPS coordinates will be accurate to 1 decimal place.</property> + <property name="wrap">True</property> + <attributes> + <attribute name="scale" value="0.80000000000000004"/> + </attributes> </object> <packing> + <property name="expand">False</property> + <property name="fill">True</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkCheckButton" id="checkbutton_notifications_contact_signin"> - <property name="label" translatable="yes">Enable notifications when a contact comes online</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkbutton_notifications_contact_signout"> - <property name="label" translatable="yes">Enable notifications when a contact goes offline</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="position">3</property> - </packing> - </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkbutton_location_reduce_accuracy"> + <property name="label" translatable="yes" comments="To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees.">_Reduce location accuracy</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> </child> </object> - <packing> - <property name="position">1</property> - </packing> </child> - <child type="tab"> - <object class="GtkLabel" id="label1"> + <child type="label"> + <object class="GtkLabel" id="label3"> <property name="visible">True</property> - <property name="label" translatable="yes">Notifications</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Privacy</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> - <packing> - <property name="position">1</property> - <property name="tab_fill">False</property> - </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> <child> - <object class="GtkBox" id="outer_vbox"> + <object class="GtkAlignment" id="alignment4"> <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">18</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> <child> - <object class="GtkBox" id="vbox219"> + <object class="GtkBox" id="vbox5"> <property name="visible">True</property> - <property name="spacing">6</property> + <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> - <object class="GtkCheckButton" id="checkbutton_sounds_enabled"> - <property name="label" translatable="yes">_Enable sound notifications</property> + <object class="GtkCheckButton" id="checkbutton_location_resource_gps"> + <property name="label" translatable="yes">_GPS</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> <property name="use_underline">True</property> <property name="draw_indicator">True</property> </object> @@ -313,500 +611,355 @@ </packing> </child> <child> - <object class="GtkAlignment" id="alignment32"> + <object class="GtkCheckButton" id="checkbutton_location_resource_cell"> + <property name="label" translatable="yes">_Cellphone</property> <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkCheckButton" id="checkbutton_sounds_disabled_away"> - <property name="label" translatable="yes">Disable sounds when _away or busy</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - </child> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> </object> <packing> + <property name="expand">False</property> + <property name="fill">False</property> <property name="position">1</property> </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkBox" id="vbox221"> - <property name="visible">True</property> - <property name="spacing">6</property> - <property name="orientation">vertical</property> <child> - <object class="GtkLabel" id="label645"> + <object class="GtkCheckButton" id="checkbutton_location_resource_network"> + <property name="label" translatable="yes">_Network (IP, Wi-Fi)</property> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Play sound for events</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment33"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow19"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> - <child> - <object class="GtkTreeView" id="treeview_sounds"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="position">1</property> - <property name="expand">True</property> + <property name="position">2</property> </packing> </child> </object> - <packing> - <property name="position">1</property> - </packing> </child> </object> - <packing> - <property name="position">2</property> - </packing> </child> - <child type="tab"> - <object class="GtkLabel" id="label607"> + <child type="label"> + <object class="GtkLabel" id="label5"> <property name="visible">True</property> - <property name="label" translatable="yes">Sounds</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Location sources:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> - <packing> - <property name="position">2</property> - <property name="tab_fill">False</property> - </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Location</property> + </object> + <packing> + <property name="position">3</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkBox" id="vbox168"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkFrame" id="frame7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> <child> - <object class="GtkBox" id="vbox1"> + <object class="GtkAlignment" id="alignment15"> <property name="visible">True</property> - <property name="border_width">12</property> - <property name="orientation">vertical</property> - <property name="spacing">18</property> - <child> - <object class="GtkCheckButton" id="checkbutton_location_publish"> - <property name="label" translatable="yes">_Publish location to my contacts</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> + <property name="can_focus">False</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> <child> - <object class="GtkFrame" id="frame1"> + <object class="GtkBox" id="vbox201"> <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkAlignment" id="alignment2"> + <object class="GtkScrolledWindow" id="scrolledwindow18"> <property name="visible">True</property> - <property name="top_padding">6</property> - <property name="left_padding">12</property> + <property name="can_focus">False</property> + <property name="shadow_type">in</property> <child> - <object class="GtkBox" id="vbox4"> + <object class="GtkTreeView" id="treeview_spell_checker"> <property name="visible">True</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <child> - <object class="GtkBox" id="hbox1"> - <property name="visible">True</property> - <property name="spacing">6</property> - <property name="orientation">horizontal</property> - <child> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="yalign">0</property> - <property name="stock">gtk-dialog-info</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label6"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="wrap">True</property> - <property name="label" translatable="yes">Reduced location accuracy means that nothing more precise than your city, state and country will be published. GPS coordinates will be accurate to 1 decimal place.</property> - <attributes> - <attribute name="scale" value="0.8"/> - </attributes> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkbutton_location_reduce_accuracy"> - <property name="label" translatable="yes" comments="To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees.">_Reduce location accuracy</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection2"/> </child> </object> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="label" translatable="yes">Privacy</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="frame5"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment4"> + <object class="GtkBox" id="hbox155"> <property name="visible">True</property> - <property name="top_padding">6</property> - <property name="left_padding">12</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> <child> - <object class="GtkBox" id="vbox5"> + <object class="GtkImage" id="image422"> <property name="visible">True</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkCheckButton" id="checkbutton_location_resource_gps"> - <property name="label" translatable="yes">_GPS</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkbutton_location_resource_cell"> - <property name="label" translatable="yes">_Cellphone</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="checkbutton_location_resource_network"> - <property name="label" translatable="yes">_Network (IP, Wi-Fi)</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> + <property name="can_focus">False</property> + <property name="yalign">0</property> + <property name="stock">gtk-dialog-info</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label616"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">The list of languages reflects only the languages for which you have a dictionary installed.</property> + <property name="wrap">True</property> + <attributes> + <attribute name="scale" value="0.80000000000000004"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label5"> - <property name="visible">True</property> - <property name="label" translatable="yes">Location sources:</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="position">2</property> - </packing> </child> </object> - <packing> - <property name="position">3</property> - </packing> </child> - <child type="tab"> - <object class="GtkLabel" id="label2"> + <child type="label"> + <object class="GtkLabel" id="label615"> <property name="visible">True</property> - <property name="label" translatable="yes">Location</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Enable spell checking for languages:</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> - <packing> - <property name="position">3</property> - <property name="tab_fill">False</property> - </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">4</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label567"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Spell Checking</property> + </object> + <packing> + <property name="position">4</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkBox" id="vbox206"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkFrame" id="frame11"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> <child> - <object class="GtkBox" id="vbox168"> + <object class="GtkAlignment" id="alignment19"> <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">18</property> - <property name="orientation">vertical</property> + <property name="can_focus">False</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> <child> - <object class="GtkFrame" id="frame7"> + <object class="GtkBox" id="vbox_chat_theme"> <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> - <object class="GtkAlignment" id="alignment15"> + <object class="GtkBox" id="hbox139"> <property name="visible">True</property> - <property name="top_padding">6</property> - <property name="left_padding">12</property> + <property name="can_focus">False</property> + <property name="spacing">12</property> <child> - <object class="GtkBox" id="vbox201"> + <object class="GtkLabel" id="label586"> <property name="visible">True</property> - <property name="spacing">6</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow18"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> - <child> - <object class="GtkTreeView" id="treeview_spell_checker"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - </object> - </child> - </object> - <packing> - <property name="position">0</property> - <property name="expand">True</property> - </packing> - </child> - <child> - <object class="GtkBox" id="hbox155"> - <property name="visible">True</property> - <property name="spacing">6</property> - <property name="orientation">horizontal</property> - <child> - <object class="GtkImage" id="image422"> - <property name="visible">True</property> - <property name="yalign">0</property> - <property name="stock">gtk-dialog-info</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label616"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="wrap">True</property> - <property name="label" translatable="yes">The list of languages reflects only the languages for which you have a dictionary installed.</property> - <attributes> - <attribute name="scale" value="0.8"/> - </attributes> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Chat Th_eme:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">combobox_chat_theme</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="combobox_chat_theme"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label615"> - <property name="visible">True</property> - <property name="label" translatable="yes">Enable spell checking for languages:</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - </child> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="position">4</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label567"> - <property name="visible">True</property> - <property name="label" translatable="yes">Spell Checking</property> - </object> - <packing> - <property name="position">4</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkBox" id="vbox206"> - <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">18</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkFrame" id="frame11"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment19"> - <property name="visible">True</property> - <property name="top_padding">6</property> - <property name="left_padding">12</property> + <object class="GtkBox" id="hbox_chat_theme_variant"> + <property name="visible">False</property> + <property name="can_focus">False</property> + <property name="spacing">12</property> <child> - <object class="GtkBox" id="vbox207"> + <object class="GtkLabel" id="label4"> <property name="visible">True</property> - <property name="spacing">6</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkBox" id="hbox139"> - <property name="visible">True</property> - <property name="spacing">12</property> - <property name="orientation">horizontal</property> - <child> - <object class="GtkLabel" id="label586"> - <property name="visible">True</property> - <property name="label" translatable="yes">Chat Th_eme:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">combobox_chat_theme</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="combobox_chat_theme"> - <property name="visible">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Theme Variant:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">combobox_chat_theme_variant</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="combobox_chat_theme_variant"> + <property name="visible">True</property> + <property name="can_focus">False</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label626"> + <child> + <object class="GtkScrolledWindow" id="sw_chat_theme_preview"> <property name="visible">True</property> - <property name="label" translatable="yes">Appearance</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> + <property name="can_focus">True</property> + <property name="shadow_type">in</property> + <child> + <placeholder/> + </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> </child> </object> - <packing> - <property name="position">5</property> - </packing> </child> - <child type="tab"> - <object class="GtkLabel" id="label624"> + <child type="label"> + <object class="GtkLabel" id="label626"> <property name="visible">True</property> - <property name="label" translatable="yes">Themes</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Appearance</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> - <packing> - <property name="position">5</property> - <property name="tab_fill">False</property> - </packing> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="position">5</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label624"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Themes</property> + </object> + <packing> + <property name="position">5</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> </interface> diff --git a/src/ev-sidebar.c b/src/ev-sidebar.c index d0dd2b615..9c805372d 100644 --- a/src/ev-sidebar.c +++ b/src/ev-sidebar.c @@ -64,10 +64,8 @@ static void ev_sidebar_class_init (EvSidebarClass *ev_sidebar_class) { GObjectClass *g_object_class; - GtkWidgetClass *widget_class; g_object_class = G_OBJECT_CLASS (ev_sidebar_class); - widget_class = GTK_WIDGET_CLASS (ev_sidebar_class); g_type_class_add_private (g_object_class, sizeof (EvSidebarPrivate)); diff --git a/tests/interactive/contact-manager.c b/tests/interactive/contact-manager.c index 7793b44d9..e391df634 100644 --- a/tests/interactive/contact-manager.c +++ b/tests/interactive/contact-manager.c @@ -12,7 +12,6 @@ int main (int argc, char **argv) { EmpathyContactManager *manager; - GMainLoop *main_loop; EmpathyContactListStore *store; GtkWidget *combo; GtkWidget *window; @@ -22,7 +21,7 @@ main (int argc, char **argv) empathy_gtk_init (); empathy_debug_set_flags (g_getenv ("EMPATHY_DEBUG")); - main_loop = g_main_loop_new (NULL, FALSE); + g_main_loop_new (NULL, FALSE); manager = empathy_contact_manager_dup_singleton (); store = empathy_contact_list_store_new (EMPATHY_CONTACT_LIST (manager)); empathy_contact_list_store_set_is_compact (store, TRUE); |