]> git.0d.be Git - empathy.git/commitdiff
Merge commit 'elliot/bug-584703-c'
authorXavier Claessens <xclaesse@gmail.com>
Sun, 28 Jun 2009 07:58:53 +0000 (09:58 +0200)
committerXavier Claessens <xclaesse@gmail.com>
Sun, 28 Jun 2009 07:58:53 +0000 (09:58 +0200)
148 files changed:
NEWS
configure.ac
data/Makefile.am
data/Template.html [new file with mode: 0644]
data/empathy.schemas.in
data/icons/Makefile.am
data/icons/hicolor_apps_16x16_im-meanwhile.png [new file with mode: 0644]
data/icons/hicolor_apps_22x22_im-meanwhile.png [new file with mode: 0644]
data/icons/hicolor_apps_48x48_im-meanwhile.png [new file with mode: 0644]
data/icons/hicolor_apps_scalable_im-meanwhile.svg [new file with mode: 0644]
data/sametime.profile [new file with mode: 0644]
docs/libempathy-gtk/Makefile.am
docs/libempathy-gtk/libempathy-gtk-docs.sgml
docs/libempathy-gtk/libempathy-gtk.types
docs/libempathy/libempathy-docs.sgml
docs/libempathy/libempathy.types
libempathy-gtk/Makefile.am
libempathy-gtk/empathy-account-chooser.c
libempathy-gtk/empathy-account-chooser.h
libempathy-gtk/empathy-account-widget-aim.ui
libempathy-gtk/empathy-account-widget-generic.ui
libempathy-gtk/empathy-account-widget-groupwise.ui
libempathy-gtk/empathy-account-widget-icq.ui
libempathy-gtk/empathy-account-widget-irc.h
libempathy-gtk/empathy-account-widget-irc.ui
libempathy-gtk/empathy-account-widget-jabber.ui
libempathy-gtk/empathy-account-widget-msn.ui
libempathy-gtk/empathy-account-widget-salut.ui
libempathy-gtk/empathy-account-widget-sip.h
libempathy-gtk/empathy-account-widget-sip.ui
libempathy-gtk/empathy-account-widget-yahoo.ui
libempathy-gtk/empathy-account-widget.c
libempathy-gtk/empathy-avatar-chooser.c
libempathy-gtk/empathy-avatar-chooser.h
libempathy-gtk/empathy-avatar-image.h
libempathy-gtk/empathy-cell-renderer-activatable.c
libempathy-gtk/empathy-cell-renderer-activatable.h
libempathy-gtk/empathy-cell-renderer-expander.c
libempathy-gtk/empathy-cell-renderer-expander.h
libempathy-gtk/empathy-cell-renderer-text.h
libempathy-gtk/empathy-chat-text-view.c
libempathy-gtk/empathy-chat-text-view.h
libempathy-gtk/empathy-chat-view.c
libempathy-gtk/empathy-chat-view.h
libempathy-gtk/empathy-chat.c
libempathy-gtk/empathy-chat.h
libempathy-gtk/empathy-chat.ui
libempathy-gtk/empathy-conf.h
libempathy-gtk/empathy-contact-dialogs.c
libempathy-gtk/empathy-contact-list-store.c
libempathy-gtk/empathy-contact-list-store.h
libempathy-gtk/empathy-contact-list-view.c
libempathy-gtk/empathy-contact-list-view.h
libempathy-gtk/empathy-contact-menu.c
libempathy-gtk/empathy-contact-menu.h
libempathy-gtk/empathy-contact-widget.c
libempathy-gtk/empathy-contact-widget.ui
libempathy-gtk/empathy-irc-network-dialog.h
libempathy-gtk/empathy-location-manager.c
libempathy-gtk/empathy-log-window.c
libempathy-gtk/empathy-new-message-dialog.c
libempathy-gtk/empathy-new-message-dialog.h
libempathy-gtk/empathy-plist.c [new file with mode: 0644]
libempathy-gtk/empathy-plist.h [new file with mode: 0644]
libempathy-gtk/empathy-presence-chooser.c
libempathy-gtk/empathy-smiley-manager.c
libempathy-gtk/empathy-smiley-manager.h
libempathy-gtk/empathy-sound.c [new file with mode: 0644]
libempathy-gtk/empathy-sound.h [new file with mode: 0644]
libempathy-gtk/empathy-spell.c
libempathy-gtk/empathy-theme-adium.c [new file with mode: 0644]
libempathy-gtk/empathy-theme-adium.h [new file with mode: 0644]
libempathy-gtk/empathy-theme-boxes.c
libempathy-gtk/empathy-theme-irc.c
libempathy-gtk/empathy-theme-manager.c
libempathy-gtk/empathy-theme.c [deleted file]
libempathy-gtk/empathy-ui-utils.c
libempathy-gtk/empathy-ui-utils.h
libempathy-gtk/empathy-video-widget.c
libempathy/Makefile.am
libempathy/empathy-call-handler.c
libempathy/empathy-call-handler.h
libempathy/empathy-chatroom-manager.c
libempathy/empathy-chatroom.c
libempathy/empathy-contact-manager.c
libempathy/empathy-contact.c
libempathy/empathy-contact.h
libempathy/empathy-debug.c
libempathy/empathy-debug.h
libempathy/empathy-debugger.c [new file with mode: 0644]
libempathy/empathy-debugger.h [new file with mode: 0644]
libempathy/empathy-dispatcher.c
libempathy/empathy-ft-handler.c
libempathy/empathy-idle.c
libempathy/empathy-status-presets.c
libempathy/empathy-status-presets.h
libempathy/empathy-time.c
libempathy/empathy-tp-call.c
libempathy/empathy-tp-call.h
libempathy/empathy-tp-chat.c
libempathy/empathy-tp-contact-list.c
libempathy/empathy-tp-file.c
libempathy/empathy-tp-file.h
libempathy/empathy-tp-tube.c [deleted file]
libempathy/empathy-tp-tube.h [deleted file]
libempathy/empathy-tube-handler.c
libempathy/empathy-utils.c
po/POTFILES.in
po/bn_IN.po
po/es.po
po/he.po
po/nb.po
po/ta.po
python/pyempathy/pyempathy.defs
python/pyempathy/pyempathy.override
python/pyempathygtk/pyempathygtk.defs
python/update-binding.sh
release.py
src/Makefile.am
src/empathy-about-dialog.c
src/empathy-about-dialog.h
src/empathy-accounts-dialog.c
src/empathy-accounts-dialog.h
src/empathy-accounts-dialog.ui
src/empathy-call-window.c
src/empathy-call-window.ui
src/empathy-chat-window.c
src/empathy-chat-window.h
src/empathy-chat-window.ui
src/empathy-debug-dialog.c
src/empathy-event-manager.c
src/empathy-event-manager.h
src/empathy-ft-manager.ui
src/empathy-main-window.c
src/empathy-main-window.h
src/empathy-map-view.c
src/empathy-map-view.h
src/empathy-map-view.ui
src/empathy-new-chatroom-dialog.c
src/empathy-preferences.c
src/empathy-preferences.h
src/empathy-preferences.ui
src/empathy-sidebar.c
src/empathy-status-icon.c
src/empathy.c
src/ephy-spinner.c
src/ephy-spinner.h
tools/check-whitespace.sh

diff --git a/NEWS b/NEWS
index 2187b450c42ff4d47cf8db0e818aba8e54bf92fb..444fa3d2c6a796f9bd9f0dacb3a11268f48419a2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,64 @@
+NEW in 2.27.3
+==============
+Bugs fixed:
+ - Fixed #522069, Improve message styles with themes/plugins (ala Adium)
+ - Fixed #548707, "New Account" title and "I already have an account" checkbox are contradictory (Guillaume Desmottes)
+ - Fixed #548716, First text field when adding account (e.g. "Login ID") isn't focused by default (Dimitris Zenios)
+ - Fixed #560787, Should support IPv4 file transfer
+ - Fixed #562981, make sametime support official (Guillaume Desmottes)
+ - Fixed #563675, Does not show any error messages when FT channel request fails
+ - Fixed #563896, "Conditional jump or move depends on uninitialised value" when sending a file
+ - Fixed #564259, Tooltips in the MUC user list
+ - Fixed #574478, Conversation not showing up in taskbar
+ - Fixed #574878, can't rename account while the account is connecting
+ - Fixed #574980, Audio/Video Chat windows don't show contact name
+ - Fixed #575415, Should switch from libglade to GtkBuilder
+ - Fixed #576405, Crash when a FT was cancelled
+ - Fixed #578497, failure to cancel file transfer
+ - Fixed #579725, Implement debug dialog using o.fd.Tp.Debug
+ - Fixed #579992, Import of XMPP accounts sets port (Jonny Lamb)
+ - Fixed #580921, Weird behaviour with MUC members in current master
+ - Fixed #582191, The call windows should have a "redial" button.
+ - Fixed #582736, Merge ft_rework branch
+ - Fixed #582773, Empathy puts cheesy strings in my subscription requests
+ - Fixed #582774, When no video is being sent, the video output and preview should show an icon instead of being black.
+ - Fixed #583548, Python exemple is broken
+ - Fixed #583785, Display a summary at the end of configure
+ - Fixed #584061, IRC server for FreeNode is out of date (Guillaume Desmottes)
+ - Fixed #584102, New tube API is now stable
+ - Fixed #584147, The Map View doesn't have a loading throbber
+ - Fixed #584206, Add the method empathy_contact_can_stream_tubes in the empathy-tp-contact-factory
+ - Fixed #584462, user list stays empty
+ - Fixed #584463, Contact menu is empty
+ - Fixed #584518, Critical error in publish_to_all_connections
+ - Fixed #584635, Sorting contacts by State doesn't place Available as top
+ - Fixed #584639, Remove "View"/"Show" prefixes from View menu items
+ - Fixed #584672, Add a right-click menu to conversation window tabs
+ - Fixed #584755, Empathy doesn't show buddy list in IRC
+ - Fixed #584807, EmpathyTpTube must die
+ - Fixed #584830, Invalid read in new_connection_cb
+ - Fixed #584924, GObjectify EmpathyProfileChooser
+ - Fixed #584989, Asserts if a new group appears with the same name as an old one.
+ - Fixed #585055, make distcheck is broken
+ - Fixed #585078, Doesn't use address from Hostip
+ - Fixed #585080, Lot of contacts are missing avatars
+ - Fixed #585092, Tab tooltips show "(null)" for contacts without presence
+ - Fixed #585201, Crashed when I disconnected
+ - Fixed #585231, Asserts in dispatcher_start_dispatching when I reconnect to IRC (Will Thompson)
+ - Fixed #585279, Crashed when accepting a FT failed
+ - Fixed #585640, Only English should be used for i18n
+ - Fixed #585669, GNOME Goal: Clean up GLib and GTK+ includes in empathy (Luis Menina)
+ - Fixed #585788, Capitalisation incorrect (Guillaume Desmottes)
+ - Fixed #571666, [2/3] Empathy should publish my geolocation
+ - Fixed #571667, [3/3] Empathy should display my location
+
+Translations:
+ - Updated es Translation (Jorge Gonzalez)
+ - Updated he Translation (Mark Krapivner)
+ - Updated hu Translation (Gabor Kelemen)
+ - Updated nb Translation (Kjartan Maraas)
+ - Updated pa Translation (A S Alam)
+
 NEW in 2.27.2
 ==============
 Bugs fixed:
index 8a85a75252a549135b07cced7cb79bb4dff017e7..df6ec7ec0e49f8764fbe4a04cad0bab76584f436 100644 (file)
@@ -1,4 +1,4 @@
-AC_INIT(Empathy, 2.27.3, http://bugzilla.gnome.org/browse.cgi?product=empathy)
+AC_INIT(Empathy, 2.27.4, http://bugzilla.gnome.org/browse.cgi?product=empathy)
 AC_PREREQ(2.59)
 AC_COPYRIGHT([
   Copyright (C) 2003-2007 Imendio AB
@@ -9,11 +9,11 @@ AC_COPYRIGHT([
 #   (Interfaces removed:    CURRENT++, AGE=0, REVISION=0)
 #   (Interfaces added:      CURRENT++, AGE++, REVISION=0)
 #   (No interfaces changed:                   REVISION++)
-LIBEMPATHY_CURRENT=25
+LIBEMPATHY_CURRENT=26
 LIBEMPATHY_AGE=0
 LIBEMPATHY_REVISION=0
 
-LIBEMPATHY_GTK_CURRENT=23
+LIBEMPATHY_GTK_CURRENT=24
 LIBEMPATHY_GTK_AGE=0
 LIBEMPATHY_GTK_REVISION=0
 
@@ -35,10 +35,11 @@ ENCHANT_REQUIRED=1.2.0
 ISO_CODES_REQUIRED=0.35
 LIBNOTIFY_REQUIRED=0.4.4
 LIBCANBERRA_GTK_REQUIRED=0.4
-LIBCHAMPLAIN_REQUIRED=0.3.0
-LIBCHAMPLAIN_GTK_REQUIRED=0.3.0
+LIBCHAMPLAIN_REQUIRED=0.3.3
+LIBCHAMPLAIN_GTK_REQUIRED=0.3.3
 CLUTTER_GTK_REQUIRED=0.8.2
 GEOCLUE_REQUIRED=0.11
+WEBKIT_REQUIRED=1.1.7
 
 # Use --enable-maintainer-mode to disabled deprecated symbols
 GNOME_MAINTAINER_MODE_DEFINES
@@ -95,6 +96,8 @@ PKG_CHECK_MODULES(LIBEMPATHY,
    telepathy-glib >= $TELEPATHY_GLIB_REQUIRED
    libmissioncontrol >= $MISSION_CONTROL_REQUIRED
    telepathy-farsight
+   farsight2-0.10
+   gstreamer-0.10
 ])
 
 PKG_CHECK_MODULES(LIBEMPATHYGTK,
@@ -108,7 +111,6 @@ PKG_CHECK_MODULES(LIBEMPATHYGTK,
    libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED
    telepathy-glib >= $TELEPATHY_GLIB_REQUIRED
    libmissioncontrol >= $MISSION_CONTROL_REQUIRED
-   telepathy-farsight
    farsight2-0.10
    gstreamer-0.10
    gstreamer-interfaces-0.10
@@ -119,16 +121,14 @@ PKG_CHECK_MODULES(EMPATHY,
    glib-2.0 >= $GLIB_REQUIRED
    gobject-2.0
    gio-2.0 >= $GLIB_REQUIRED
-   gconf-2.0 >= $GCONF_REQUIRED
-   x11
+   gdk-x11-2.0
    gtk+-2.0 >= $GTK_REQUIRED
-   libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED
    libebook-1.2
+   dbus-glib-1
    telepathy-glib >= $TELEPATHY_GLIB_REQUIRED
    libmissioncontrol >= $MISSION_CONTROL_REQUIRED
    telepathy-farsight
    gstreamer-0.10
-   gstreamer-interfaces-0.10
 ])
 
 PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= $LIBNOTIFY_REQUIRED)
@@ -155,6 +155,33 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package name])
 
 AM_GLIB_GNU_GETTEXT
 
+# -----------------------------------------------------------
+# Webkit
+# -----------------------------------------------------------
+AC_ARG_ENABLE(webkit,
+              AS_HELP_STRING([--enable-webkit=@<:@no/yes/auto@:>@],
+                             [build with webkit support]), ,
+                             enable_webkit=auto)
+
+if test "x$enable_webkit" != "xno"; then
+   PKG_CHECK_MODULES(WEBKIT,
+   [
+      webkit-1.0 >= $WEBKIT_REQUIRED
+   ], have_webkit="yes", have_webkit="no")
+
+   if test "x$have_webkit" = "xyes"; then
+      AC_DEFINE(HAVE_WEBKIT, 1, [Define if you have libwebkitgtk])
+   fi
+else
+   have_webkit=no
+fi
+
+if test "x$enable_webkit" = "xyes" -a "x$have_webkit" != "xyes"; then
+   AC_MSG_ERROR([Couldn't find webkit dependencies.])
+fi
+
+AM_CONDITIONAL(HAVE_WEBKIT, test "x$have_webkit" = "xyes")
+
 # -----------------------------------------------------------
 # spellchecking checks: enchant and iso-codes
 # -----------------------------------------------------------
@@ -425,6 +452,7 @@ Configure summary:
        Spell checking (enchant)....:  ${have_enchant}
        Display maps (libchamplain).:  ${have_libchamplain}
        Location awareness (Geoclue):  ${have_geoclue}
+       Adium themes (Webkit).......:  ${have_webkit}
 
     Extras:
        Documentation...............:  ${enable_gtk_doc}
index 48cc350ccddd90afd02ac42c04745dc450ebaf44..52108fbe7f725ef73640b27f65ac94e85eec4ed4 100644 (file)
@@ -17,7 +17,8 @@ profile_DATA =                                \
        sipphone.profile                \
        groupwise.profile               \
        gadugadu.profile                \
-       qq.profile
+       qq.profile                      \
+       sametime.profile
 
 desktopdir = $(datadir)/applications
 desktop_in_files = empathy.desktop.in
@@ -40,12 +41,16 @@ else
 install-data-local:
 endif
 
+htmldir = $(datadir)/empathy
+html_DATA = Template.html
+
 EXTRA_DIST =                           \
        $(profile_DATA)                 \
        $(desktop_in_files)             \
-       $(desktop_DATA)         \
+       $(desktop_DATA)                 \
        $(schemas_in_files)             \
-       $(schemas_DATA)
+       $(schemas_DATA)                 \
+       $(html_DATA)
 
 DISTCLEANFILES =                       \
        $(desktop_DATA)         \
diff --git a/data/Template.html b/data/Template.html
new file mode 100644 (file)
index 0000000..708e85b
--- /dev/null
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<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();
+               
+                       //Remove any existing insertion point
+                       insert = document.getElementById("insert");
+                       if(insert) insert.parentNode.removeChild(insert);
+
+                       //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);
+                       
+                       alignChat(shouldScroll);
+               }
+               function appendMessageNoScroll(html) {
+                       //Remove any existing insertion point
+                       insert = document.getElementById("insert");
+                       if(insert) insert.parentNode.removeChild(insert);
+
+                       //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);
+               }
+               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 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);
+               }
+               
+               //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 ) ) );
+               }
+               function scrollToBottom() {
+                       document.body.scrollTop = document.body.offsetHeight;
+               }
+
+               //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 + "\" );";
+                       code += "</style>";
+                       range = document.createRange();
+                       head = document.getElementsByTagName( "head" ).item(0);
+                       range.selectNode( head );
+                       documentFragment = range.createContextualFragment( code );
+                       head.removeChild( document.getElementById( id ) );
+                       head.appendChild( documentFragment );
+               }
+               
+               //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);
+                       }
+               }
+
+               function imageSwap(node) {
+                       shouldScroll = nearBottom();
+
+                       //Swap the image/text
+                       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);
+               }
+               
+               //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;
+                               if (windowHeight - contentHeight > 0) {
+                                       contentElement.style.position = 'relative';
+                                       contentElement.style.top = (windowHeight - contentHeight) + 'px';
+                               } else {
+                                       contentElement.style.position = 'static';
+                               }
+                       }
+                       
+                       if (shouldScroll) scrollToBottom();
+               }
+               
+               function windowDidResize(){
+                       alignChat(true/*nearBottom()*/); //nearBottom buggy with inactive tabs
+               }
+               
+               window.onresize = windowDidResize;
+       </script>
+       
+       <!-- 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>
+       
+       <!-- Although we call this mainStyle for legacy reasons, it's actually the variant style !-->
+       <style id="mainStyle" type="text/css" media="screen,print">     
+               @import url( "%@" );
+       </style>
+
+</head>
+<body onload="alignChat(true);" style="==bodyBackground==">
+%@
+<div id="Chat">
+</div>
+%@
+</body>
+</html>
index 572eb887117430a580f6dbe5ea7720c2219a728f..fb068e5bd4299ee261709c02ba66abb786f0e102 100644 (file)
          </long>
       </locale>
     </schema>
-    
+
     <schema>
       <key>/schemas/apps/empathy/sounds/sounds_contact_logout</key>
       <applyto>/apps/empathy/sounds/sounds_contact_logout</applyto>
          </long>
       </locale>
     </schema>
-    
+
     <schema>
       <key>/schemas/apps/empathy/sounds/sounds_service_logout</key>
       <applyto>/apps/empathy/sounds/sounds_service_logout</applyto>
       </locale>
     </schema>
 
+    <schema>
+      <key>/schemas/apps/empathy/notifications/notifications_contact_signin</key>
+      <applyto>/apps/empathy/notifications/notifications_contact_signin</applyto>
+      <owner>empathy</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+         <short>Popup notifications when a contact sign in</short>
+         <long>
+         Whether or not to show a popup notification when a contact goes
+         online.
+         </long>
+      </locale>
+    </schema>
+
+    <schema>
+      <key>/schemas/apps/empathy/notifications/notifications_contact_signout</key>
+      <applyto>/apps/empathy/notifications/notifications_contact_signout</applyto>
+      <owner>empathy</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+         <short>Popup notifications when a contact sign out</short>
+         <long>
+         Whether or not to show a popup notification when a contact goes
+         offline.
+         </long>
+      </locale>
+    </schema>
+
     <schema>
        <key>/schemas/apps/empathy/ui/separate_chat_windows</key>
        <applyto>/apps/empathy/ui/separate_chat_windows</applyto>
       </locale>
     </schema>
 
+    <schema>
+      <key>/schemas/apps/empathy/conversation/show_contacts_in_rooms</key>
+      <applyto>/apps/empathy/conversation/show_contacts_in_rooms</applyto>
+      <owner>empathy</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+         <short>Show contact list in rooms</short>
+         <long>
+         Whether or not to show the contact list in chat rooms.
+         </long>
+      </locale>
+    </schema>
+
     <schema>
       <key>/schemas/apps/empathy/conversation/theme</key>
       <applyto>/apps/empathy/conversation/theme</applyto>
       </locale>
     </schema>
 
+    <schema>
+      <key>/schemas/apps/empathy/conversation/adium_path</key>
+      <applyto>/apps/empathy/conversation/adium_path</applyto>
+      <owner>empathy</owner>
+      <type>string</type>
+      <default></default>
+      <locale name="C">
+         <short>Path of the adium theme to use</short>
+         <long>
+           Path of the adium theme to use if the theme used for chat is adium.
+         </long>
+      </locale>
+    </schema>
+
     <schema>
       <key>/schemas/apps/empathy/conversation/theme_chat_room</key>
       <applyto>/apps/empathy/conversation/theme_chat_room</applyto>
         Character to add after nickname when using nick completion (tab)
         in group chat.
         </long>
-        
+
       </locale>
     </schema>
 
         </long>
       </locale>
     </schema>
-    
+
     <schema>
       <key>/schemas/apps/empathy/autoconnect</key>
       <applyto>/apps/empathy/autoconnect</applyto>
index 81aa8446afcf131b2048088bf1207b7ee06224f3..cbd022d8453815fb8ca6abefc346c56ab833841f 100644 (file)
@@ -33,6 +33,7 @@ private_icons = \
        hicolor_apps_16x16_im-local-xmpp.png \
        hicolor_apps_16x16_im-gadugadu.png \
        hicolor_apps_16x16_im-qq.png \
+       hicolor_apps_16x16_im-meanwhile.png \
        hicolor_apps_16x16_empathy-starred.png \
        hicolor_apps_16x16_empathy-unstarred.png \
        hicolor_apps_22x22_im-ekiga.png \
@@ -45,6 +46,7 @@ private_icons = \
        hicolor_apps_22x22_im-local-xmpp.png \
        hicolor_apps_22x22_im-gadugadu.png \
        hicolor_apps_22x22_im-qq.png \
+       hicolor_apps_22x22_im-meanwhile.png \
        hicolor_apps_22x22_empathy-starred.png \
        hicolor_apps_22x22_empathy-unstarred.png \
        hicolor_apps_24x24_im-ekiga.png \
@@ -81,6 +83,7 @@ private_icons = \
        hicolor_apps_48x48_im-local-xmpp.png \
        hicolor_apps_48x48_im-gadugadu.png \
        hicolor_apps_48x48_im-qq.png \
+       hicolor_apps_48x48_im-meanwhile.png \
        hicolor_apps_48x48_empathy-starred.png \
        hicolor_apps_48x48_empathy-unstarred.png \
        hicolor_apps_scalable_im-ekiga.svg \
@@ -93,6 +96,7 @@ private_icons = \
        hicolor_apps_scalable_im-local-xmpp.svg \
        hicolor_apps_scalable_im-gadugadu.svg \
        hicolor_apps_scalable_im-qq.svg \
+       hicolor_apps_scalable_im-meanwhile.svg \
        hicolor_status_16x16_empathy-available.png \
        hicolor_status_16x16_empathy-away.png \
        hicolor_status_16x16_empathy-busy.png \
diff --git a/data/icons/hicolor_apps_16x16_im-meanwhile.png b/data/icons/hicolor_apps_16x16_im-meanwhile.png
new file mode 100644 (file)
index 0000000..99d1722
Binary files /dev/null and b/data/icons/hicolor_apps_16x16_im-meanwhile.png differ
diff --git a/data/icons/hicolor_apps_22x22_im-meanwhile.png b/data/icons/hicolor_apps_22x22_im-meanwhile.png
new file mode 100644 (file)
index 0000000..d6da494
Binary files /dev/null and b/data/icons/hicolor_apps_22x22_im-meanwhile.png differ
diff --git a/data/icons/hicolor_apps_48x48_im-meanwhile.png b/data/icons/hicolor_apps_48x48_im-meanwhile.png
new file mode 100644 (file)
index 0000000..f747a56
Binary files /dev/null and b/data/icons/hicolor_apps_48x48_im-meanwhile.png differ
diff --git a/data/icons/hicolor_apps_scalable_im-meanwhile.svg b/data/icons/hicolor_apps_scalable_im-meanwhile.svg
new file mode 100644 (file)
index 0000000..9224409
--- /dev/null
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/protocols/48"
+   sodipodi:docname="meanwhile.svg"
+   inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/protocols/48/meanwhile.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2195">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop2197" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop2199" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2230">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop2232" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop2234" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3150">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop3152" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop3154" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3150"
+       id="radialGradient4330"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)"
+       cx="10.748654"
+       cy="10.457643"
+       fx="10.748654"
+       fy="10.457643"
+       r="6.6449099" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2230"
+       id="linearGradient2236"
+       x1="10.177145"
+       y1="-1.3535745"
+       x2="10.177145"
+       y2="8.1371298"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2195"
+       id="radialGradient2211"
+       cx="30.5625"
+       cy="23.172834"
+       fx="30.5625"
+       fy="23.172834"
+       r="23.5"
+       gradientTransform="matrix(1.330958,-1.200379e-32,1.144509e-32,1.269011,-10.11491,-9.053927)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16.976026"
+     inkscape:cx="38.972041"
+     inkscape:cy="25.781032"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     fill="#f57900"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1268"
+     inkscape:window-height="971"
+     inkscape:window-x="6"
+     inkscape:window-y="21" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.3;fill:url(#radialGradient4330);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3140"
+       sodipodi:cx="10.748654"
+       sodipodi:cy="10.457643"
+       sodipodi:rx="6.6449099"
+       sodipodi:ry="2.3675451"
+       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
+       transform="matrix(3.583369,0,0,3.000545,-14.70523,9.779617)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#f57900;fill-opacity:1;stroke:#ce5c00;stroke-width:0.67679459;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4302"
+       sodipodi:cx="10.555883"
+       sodipodi:cy="4.0385542"
+       sodipodi:rx="5.074944"
+       sodipodi:ry="5.074944"
+       d="M 15.630827 4.0385542 A 5.074944 5.074944 0 1 1  5.4809394,4.0385542 A 5.074944 5.074944 0 1 1  15.630827 4.0385542 z"
+       transform="matrix(1.477556,0,0,1.477551,8.403577,4.033323)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.6;fill:url(#linearGradient2236);fill-opacity:1;stroke:#ffffff;stroke-width:0.78084576;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4273"
+       sodipodi:cx="10.555883"
+       sodipodi:cy="4.0385542"
+       sodipodi:rx="5.074944"
+       sodipodi:ry="5.074944"
+       d="M 15.630827 4.0385542 A 5.074944 5.074944 0 1 1  5.4809394,4.0385542 A 5.074944 5.074944 0 1 1  15.630827 4.0385542 z"
+       transform="matrix(1.280662,0,0,1.280662,10.48149,4.827989)" />
+    <path
+       style="fill:#f57900;fill-opacity:1;stroke:#ce5c00;stroke-width:1.00000119;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 34.49131,8.6205284 C 34.49131,13.938683 32.849731,20.518688 23.898198,20.518688 C 15.00451,20.518688 13.526711,13.679495 13.526711,8.6600767 L 5.4949228,9.8762415 C 5.4949228,23.237275 17.664236,26.553794 17.664236,26.553794 C 17.664236,26.553794 9.1712538,34.298165 9.1712538,44.405547 L 19.237281,44.498262 C 19.237281,44.498262 21.456328,35.564348 25.010569,35.564348 C 28.652494,35.564348 30.6887,44.471546 30.6887,44.471546 L 40.362294,44.503507 C 40.362294,33.010164 30.381957,26.578174 30.381957,26.578174 C 30.381957,26.578174 42.614757,23.170121 42.614757,9.5035195 L 34.49131,8.6205284 z "
+       id="rect2213"
+       sodipodi:nodetypes="czccccczccccc" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-0.9525249"
+       inkscape:original="M 34.5 8.625 C 34.5 13.943155 32.857783 20.53125 23.90625 20.53125 C 15.012563 20.53125 13.53125 13.675668 13.53125 8.65625 L 5.5 9.875 C 5.5000002 23.236033 17.65625 26.5625 17.65625 26.5625 C 17.65625 26.562499 9.15625 34.298868 9.15625 44.40625 L 19.25 44.5 C 19.249999 44.500002 21.445759 35.5625 25 35.5625 C 28.641925 35.562502 30.6875 44.46875 30.6875 44.46875 L 40.375 44.5 C 40.375001 33.006658 30.375 26.59375 30.375 26.59375 C 30.375001 26.593749 42.625 23.166602 42.625 9.5 L 34.5 8.625 z "
+       xlink:href="#rect2213"
+       style="opacity:0.6;fill:url(#radialGradient2211);fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path2220"
+       inkscape:href="#rect2213"
+       d="M 45.40625,11.75 C 45.26383,14.467634 44.656918,17.754917 42.6875,20.65625 C 40.459732,23.938183 36.552927,26.5 30.5,26.5 C 24.488156,26.5 20.637234,23.994802 18.4375,20.75 C 16.4845,17.869153 15.883719,14.581533 15.75,11.84375 L 7.5625,13.15625 C 7.8022289,20.855399 11.189172,25.378007 14.65625,28.03125 C 18.250337,30.781689 21.8125,31.5 21.8125,31.5 C 22.153479,31.568346 22.430121,31.817069 22.53422,32.148884 C 22.638319,32.4807 22.553332,32.842875 22.3125,33.09375 C 22.3125,33.09375 12.834342,43.464627 12.34375,55.4375 L 23.625,55.5625 C 23.775583,54.968024 24.284703,52.850143 25.46875,50.125 C 26.139238,48.581838 26.957479,47.047605 27.96875,45.8125 C 28.980021,44.577395 30.249533,43.59375 31.8125,43.59375 C 33.392834,43.59375 34.682884,44.544922 35.6875,45.78125 C 36.692116,47.017578 37.481015,48.583576 38.125,50.125 C 39.262583,52.847886 39.73782,54.93884 39.875,55.53125 L 50.59375,55.5625 C 49.991815,42.90975 37.8125,33.21875 37.8125,33.21875 C 37.516383,32.984647 37.386427,32.597781 37.481159,32.232384 C 37.575892,31.866987 37.877442,31.591993 38.25,31.53125 C 38.25,31.53125 42.11079,30.902899 45.96875,28.21875 C 49.692789,25.627775 53.310428,21.149688 53.5625,13.28125 L 45.40625,11.75 z " />
+  </g>
+</svg>
diff --git a/data/sametime.profile b/data/sametime.profile
new file mode 100644 (file)
index 0000000..aec7989
--- /dev/null
@@ -0,0 +1,11 @@
+[Profile]
+Manager=haze
+Protocol=sametime
+IconName = im-meanwhile
+DisplayName = Sametime
+ConfigurationUI = sametime
+Capabilities = chat-p2p, supports-alias, supports-roster
+VCardDefault = 1
+VCardField = X-Sametime
+SupportedPresences = away,hidden,do-not-disturb
+
index 1a666bafb171e1849fd46d4ae4d704c0af22a01a..14e7396f95a344d7e5809a2d84a5ef651e85e6f1 100644 (file)
@@ -10,6 +10,7 @@ DOC_MAIN_SGML_FILE=libempathy-gtk-docs.sgml
 
 # Extra options to supply to gtkdoc-scan
 SCAN_OPTIONS=--deprecated-guards="G_DISABLE_DEPRECATED"
+SCANGOBJ_OPTIONS=--type-init-func="g_type_init();g_thread_init(NULL);"
 
 # The directory containing the source code. Relative to $(srcdir)
 DOC_SOURCE_DIR=$(top_srcdir)/libempathy-gtk
index c7b630b1416fff76d58804421887021eef5cd36c..edb31afb94d8b2bc1c5b8007a1cc92accda48fb1 100644 (file)
@@ -48,7 +48,9 @@
       <xi:include href="xml/empathy-profile-chooser.xml"/>
       <xi:include href="xml/empathy-smiley-manager.xml"/>
       <xi:include href="xml/empathy-spell.xml"/>
+      <xi:include href="xml/empathy-sound.xml"/>
       <xi:include href="xml/empathy-status-preset-dialog.xml"/>
+      <xi:include href="xml/empathy-theme-adium.xml"/>
       <xi:include href="xml/empathy-theme-boxes.xml"/>
       <xi:include href="xml/empathy-theme-irc.xml"/>
       <xi:include href="xml/empathy-theme-manager.xml"/>
index 9f3642193c487e3353911dfc136d4afa3f59b271..ead69316bf7852575dea744965e1528d54633335 100644 (file)
@@ -1,4 +1,5 @@
 empathy_account_chooser_get_type
+empathy_adium_data_get_type
 empathy_audio_sink_get_type
 empathy_audio_src_get_type
 empathy_avatar_chooser_get_type
@@ -24,6 +25,7 @@ empathy_presence_chooser_get_type
 empathy_profile_chooser_get_type
 empathy_smiley_manager_get_type
 empathy_status_preset_dialog_get_type
+empathy_theme_adium_get_type
 empathy_theme_boxes_get_type
 empathy_theme_irc_get_type
 empathy_theme_manager_get_type
index 5c6c3ca4ef251d2bb7d3c81bcac7c5552d9a0ac7..41c7add8ddc195d4fa91476f554690eceeef2815 100644 (file)
@@ -50,7 +50,6 @@
       <xi:include href="xml/empathy-tp-contact-list.xml"/>
       <xi:include href="xml/empathy-tp-file.xml"/>
       <xi:include href="xml/empathy-tp-roomlist.xml"/>
-      <xi:include href="xml/empathy-tp-tube.xml"/>
       <xi:include href="xml/empathy-tube-handler.xml"/>
       <xi:include href="xml/empathy-types.xml"/>
       <xi:include href="xml/empathy-utils.xml"/>
index 9da0bbe181764047eb7d13478f6aeccbd2caa67b..878e68033535c83ef40c7ec72a8400087a73ff38 100644 (file)
@@ -31,6 +31,5 @@ empathy_tp_contact_factory_get_type
 empathy_tp_contact_list_get_type
 empathy_tp_file_get_type
 empathy_tp_roomlist_get_type
-empathy_tp_tube_get_type
 empathy_tube_handler_get_type
 
index 80c9a792d9ca868466444ce5c137bb3064b7d336..10931012a5bac1e338b788b4551f83e038919f33 100644 (file)
@@ -10,6 +10,7 @@ AM_CPPFLAGS =                                           \
        $(ENCHANT_CFLAGS)                               \
        $(LIBCHAMPLAIN_CFLAGS)                          \
        $(GEOCLUE_CFLAGS)                               \
+       $(WEBKIT_CFLAGS)                                \
        $(WARN_CFLAGS)                                  \
        $(DISABLE_DEPRECATED)
 
@@ -53,6 +54,7 @@ libempathy_gtk_handwritten_source =                   \
        empathy-presence-chooser.c              \
        empathy-profile-chooser.c               \
        empathy-smiley-manager.c                \
+       empathy-sound.c                         \
        empathy-spell.c                         \
        empathy-status-preset-dialog.c          \
        empathy-theme-boxes.c                   \
@@ -73,6 +75,7 @@ libempathy_gtk_la_LIBADD =                    \
        $(ENCHANT_LIBS)                         \
        $(LIBCHAMPLAIN_LIBS)                    \
        $(GEOCLUE_LIBS)                         \
+       $(WEBKIT_LIBS)                          \
        $(top_builddir)/libempathy/libempathy.la
 
 libempathy_gtk_la_LDFLAGS =                \
@@ -111,6 +114,7 @@ libempathy_gtk_headers =                    \
        empathy-presence-chooser.h              \
        empathy-profile-chooser.h               \
        empathy-smiley-manager.h                \
+       empathy-sound.h                         \
        empathy-spell.h                         \
        empathy-status-preset-dialog.h          \
        empathy-theme-boxes.h                   \
@@ -118,14 +122,6 @@ libempathy_gtk_headers =                   \
        empathy-theme-manager.h                 \
        empathy-ui-utils.h
 
-if HAVE_GEOCLUE
-libempathy_gtk_handwritten_source +=           \
-       empathy-location-manager.c
-
-libempathy_gtk_headers +=                      \
-       empathy-location-manager.h
-endif
-
 check_c_sources = \
     $(libempathy_gtk_handwritten_source) \
     $(libempathy_gtk_headers)
@@ -218,6 +214,33 @@ pkgconfig_DATA = libempathy-gtk.pc
 EXTRA_DIST =                   \
        $(ui_DATA)
 
+if HAVE_GEOCLUE
+libempathy_gtk_handwritten_source +=           \
+       empathy-location-manager.c
+
+libempathy_gtk_headers +=                      \
+       empathy-location-manager.h
+else
+EXTRA_DIST +=                                  \
+       empathy-location-manager.c              \
+       empathy-location-manager.h
+endif
+
+if HAVE_WEBKIT
+libempathy_gtk_handwritten_source +=           \
+       empathy-plist.c                         \
+       empathy-theme-adium.c
+libempathy_gtk_headers +=                      \
+       empathy-plist.h                         \
+       empathy-theme-adium.h
+else
+EXTRA_DIST +=                                  \
+       empathy-plist.c                         \
+       empathy-plist.h                         \
+       empathy-theme-adium.c                   \
+       empathy-theme-adium.h
+endif
+
 CLEANFILES =                           \
        $(BUILT_SOURCES)                \
        stamp-empathy-gtk-enum-types.h
index 915b37b23d4b9c2847b455888fdb62736bc2cfa3..488486fdf617504e150c64b05b57db9a880a0ce3 100644 (file)
@@ -361,7 +361,7 @@ empathy_account_chooser_get_has_all_option (EmpathyAccountChooser *chooser)
        g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser), FALSE);
 
        priv = GET_PRIV (chooser);
-       
+
        return priv->has_all_option;
 }
 
@@ -653,11 +653,11 @@ account_chooser_separator_func (GtkTreeModel         *model,
        gboolean                  is_separator;
 
        priv = GET_PRIV (chooser);
-       
+
        if (!priv->has_all_option) {
                return FALSE;
        }
-       
+
        gtk_tree_model_get (model, iter, COL_ACCOUNT_TEXT, &text, -1);
        is_separator = text == NULL;
        g_free (text);
index 004a3e87f4cc1e7ecbdbfd30a25756cd37a0e1e3..c2105406abcd5bddd7648ed78e85410ab10efc48 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef __EMPATHY_ACCOUNT_CHOOSER_H__
 #define __EMPATHY_ACCOUNT_CHOOSER_H__
 
-#include <gtk/gtkcombobox.h>
+#include <gtk/gtk.h>
 
 #include <libmissioncontrol/mc-account.h>
 
index 643b26d7dafdec0f644d3a13a06a77f7ecc92909..7f7ac3a6082b9213dd8434039c97707ae3e90dae 100644 (file)
         <child type="label">
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index 8659d47c107009f215aebfa99694af3329bc18de..649307e0608aab97e87de765f16dc506b2a4b2f2 100644 (file)
         <child type="label">
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index 4f2630461c7d16dfde2d823be6adf197a11b7469..84157527d0026685d462f0d344b348b8def78fa3 100644 (file)
         <child type="label">
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index 7c6ab42b209fb71dc1123128de8ba39d19b204bd..5eab0b75b747a17487fb3aab283e0290a22c5b17 100644 (file)
         <child type="label">
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index 6ead048ebf3af71cfaba6b627fb6582f3a02b818..a89081fc07d54ba0de23c9c608baed4fb7f7249b 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef __EMPATHY_ACCOUNT_WIDGET_IRC_H__
 #define __EMPATHY_ACCOUNT_WIDGET_IRC_H__
 
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 #include <libmissioncontrol/mc-account.h>
 
 G_BEGIN_DECLS
index 76c67f711719697245643c28da0a7e3e8a44a170..abb1c9362b9d20bb7e431e6a6ae3a8466ab0fce1 100644 (file)
             <child type="label">
               <object class="GtkLabel" id="label_network1">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">&lt;b&gt;Network&lt;/b&gt;</property>
-                <property name="use_markup">True</property>
+                <property name="label" translatable="yes">Network</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
               </object>
             </child>
           </object>
             <child type="label">
               <object class="GtkLabel" id="label_servers">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">&lt;b&gt;Servers&lt;/b&gt;</property>
-                <property name="use_markup">True</property>
+                <property name="label" translatable="yes">Servers</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
               </object>
             </child>
           </object>
index 083479c2b1d0313e62ebd1b0e06796e55efe0d06..4b0aa15ad29c144dbd91592d8f11fae53e3de8f4 100644 (file)
                 <child type="label">
                   <object class="GtkLabel" id="label2">
                     <property name="visible">True</property>
-                    <property name="label" translatable="yes">&lt;b&gt;Override server settings&lt;/b&gt;</property>
-                    <property name="use_markup">True</property>
+                    <property name="label" translatable="yes">Override server settings</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
                   </object>
                 </child>
               </object>
         <child type="label">
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index c9084ff6e3eb0f2847b3a38abfa202572925b12d..1d7bde038d77da586178415be85904a065d9b76c 100644 (file)
         <child type="label">
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index 56626a9b5b31ad08324e6a2179e00f726cbec98f..ca633309db2f45542ebf7750f6be72776358a1d6 100644 (file)
         <child type="label">
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index 7e8e5a216766ce341da89401c4db6763cbb7c895..9187c1e0c4ee015d93567a14046c552921766677 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef __EMPATHY_ACCOUNT_WIDGET_SIP_H__
 #define __EMPATHY_ACCOUNT_WIDGET_SIP_H__
 
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 #include <libmissioncontrol/mc-account.h>
 
 G_BEGIN_DECLS
index 259c9bdabf49344c6b772adaf3b133f53c13dd6a..406f22c949282ee632f983970f9eaa30726b3ac0 100644 (file)
         <child type="label">
           <object class="GtkLabel" id="label_expander">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index ed91bc7f8f4b42251431965cc2336c7591b80925..31e93267436c4636cb72f1919de1a76ecc14aed7 100644 (file)
         <child type="label">
           <object class="GtkLabel" id="label1">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Advanced</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
         </child>
       </object>
index 669869a4dd4fe06eec2d6ac0b9b4bdda6d31f734..b0d7f8de560dca18263bd0ed6603ea917266fd50 100644 (file)
@@ -238,11 +238,11 @@ account_widget_generic_format_param_name (const gchar *param_name)
        gchar *p;
 
        str = g_strdup (param_name);
-       
+
        if (str && g_ascii_isalpha (str[0])) {
                str[0] = g_ascii_toupper (str[0]);
        }
-       
+
        while ((p = strchr (str, '-')) != NULL) {
                if (p[1] != '\0' && g_ascii_isalpha (p[1])) {
                        p[0] = ' ';
@@ -251,7 +251,7 @@ account_widget_generic_format_param_name (const gchar *param_name)
 
                p++;
        }
-       
+
        return str;
 }
 
@@ -448,7 +448,7 @@ empathy_account_widget_add_forget_button (McAccount   *account,
        GtkWidget *button_forget;
        GtkWidget *entry_password;
        gchar   *password = NULL;
-       
+
        button_forget = GTK_WIDGET (gtk_builder_get_object (gui, button));
        entry_password = GTK_WIDGET (gtk_builder_get_object (gui, entry));
 
index 0f4311e07a3dc7aca09a9c13e144a3921a07813d..83475b5659fcbb30a98e1bf401b2fa0ec2bf2490 100644 (file)
@@ -555,7 +555,7 @@ avatar_chooser_maybe_convert_and_scale (EmpathyAvatarChooser *chooser,
 
        /* Takes ownership of new_mime_type and converted_image_data */
        avatar = empathy_avatar_new (converted_image_data,
-               converted_image_size, new_mime_type, NULL);
+               converted_image_size, new_mime_type, NULL, NULL);
 
        return avatar;
 }
@@ -598,7 +598,7 @@ avatar_chooser_set_image_from_data (EmpathyAvatarChooser *chooser,
        }
 
        /* avatar takes ownership of data and mime_type */
-       avatar = empathy_avatar_new (data, size, mime_type, NULL);
+       avatar = empathy_avatar_new (data, size, mime_type, NULL, NULL);
 
        avatar_chooser_set_image (chooser, avatar, pixbuf, set_locally);
 }
@@ -810,14 +810,14 @@ avatar_chooser_drag_data_received_cb (GtkWidget          *widget,
 
                if (input_stream != NULL) {
                        GFileInfo *info;
-                       
+
                        info = g_file_query_info (file,
                                                  G_FILE_ATTRIBUTE_STANDARD_SIZE,
                                                  0, NULL, NULL);
                        if (info != NULL) {
                                goffset size;
                                gssize bytes_read;
-                               
+
                                size = g_file_info_get_size (info);
                                data = g_malloc (size);
 
@@ -838,7 +838,7 @@ avatar_chooser_drag_data_received_cb (GtkWidget          *widget,
 
                        g_object_unref (input_stream);
                }
-               
+
                g_object_unref (file);
        }
 
index f4e40a8b0aef963ee9323aab381d879b9ed58c24..1a502304775aa52fe6b38141a08d28587843dd86 100644 (file)
@@ -24,7 +24,7 @@
 #ifndef __EMPATHY_AVATAR_CHOOSER_H__
 #define __EMPATHY_AVATAR_CHOOSER_H__
 
-#include <gtk/gtkbutton.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-contact.h>
 
index ddb446a60c89f5c70da8bf969a14842be5771a4a..2271ecc72aca7cbfbfce3f212bed036f8c24f8a1 100644 (file)
@@ -24,7 +24,7 @@
 #ifndef __EMPATHY_AVATAR_IMAGE_H__
 #define __EMPATHY_AVATAR_IMAGE_H__
 
-#include <gtk/gtkeventbox.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-contact.h>
 
index 2883c4ded35f5e4e5c76d24a41bf73c97d35a874..6c7982682bcedac72269639d9f44dd51d087b803 100644 (file)
@@ -20,7 +20,7 @@
  * Authors: Raphael Slinckx <raphael@slinckx.net>
  */
 
-#include <gtk/gtktreeview.h>
+#include <gtk/gtk.h>
 
 #include "empathy-cell-renderer-activatable.h"
 
index 5962c200f23952b22fd1499908e03167ec92ac5c..d58a082da9f0943c298e978903b01dad8cc42bf7 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef __EMPATHY_CELL_RENDERER_ACTIVATABLE_H__
 #define __EMPATHY_CELL_RENDERER_ACTIVATABLE_H__
 
-#include <gtk/gtkcellrendererpixbuf.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
index 09fe8bd4f010f0e52f1d9effe95f34e4df388fe9..6fb7cfded3f0d3ea2bd6cb00225953e77cbf9edb 100644 (file)
@@ -29,7 +29,7 @@
  *     start the new one).
  */
 
-#include <gtk/gtktreeview.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-utils.h>
 #include "empathy-cell-renderer-expander.h"
index fc569ded29126f6a7b6d33fbc925656671d98433..00e36f545d38b8de6511447b8585fccf3e2548c1 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef __EMPATHY_CELL_RENDERER_EXPANDER_H__
 #define __EMPATHY_CELL_RENDERER_EXPANDER_H__
 
-#include <gtk/gtkcellrenderer.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
index 540c2ebb990d60f4a84294f4d2738d9aa99268e9..48ded96260c08247d71691902ac4efeaa94ae361 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef __EMPATHY_CELL_RENDERER_TEXT_H__
 #define __EMPATHY_CELL_RENDERER_TEXT_H__
 
-#include <gtk/gtkcellrenderertext.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
index 8874b7aceb28b3274ec402bc9c4856050f332bee..c47b5474ff3621b5349b1d0f33aa474f421e0a33 100644 (file)
@@ -103,10 +103,10 @@ chat_text_view_url_event_cb (GtkTextTag          *tag,
        if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end)) {
                return FALSE;
        }
-       
+
        if (event->type == GDK_BUTTON_RELEASE && event->button.button == 1) {
                start = end = *iter;
-               
+
                if (gtk_text_iter_backward_to_tag_toggle (&start, tag) &&
                    gtk_text_iter_forward_to_tag_toggle (&end, tag)) {
                            str = gtk_text_buffer_get_text (priv->buffer,
@@ -118,7 +118,7 @@ chat_text_view_url_event_cb (GtkTextTag          *tag,
                            g_free (str);
                    }
        }
-       
+
        return FALSE;
 }
 
@@ -133,31 +133,31 @@ chat_text_view_event_cb (EmpathyChatTextView *view,
        GtkTextIter        iter;
        GdkWindow         *win;
        gint               x, y, buf_x, buf_y;
-       
+
        type = gtk_text_view_get_window_type (GTK_TEXT_VIEW (view),
                                              event->window);
-       
+
        if (type != GTK_TEXT_WINDOW_TEXT) {
                return FALSE;
        }
-       
+
        /* Get where the pointer really is. */
        win = gtk_text_view_get_window (GTK_TEXT_VIEW (view), type);
        if (!win) {
                return FALSE;
        }
-       
+
        gdk_window_get_pointer (win, &x, &y, NULL);
-       
+
        /* Get the iter where the cursor is at */
        gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (view), type,
                                               x, y,
                                               &buf_x, &buf_y);
-       
+
        gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (view),
                                            &iter,
                                            buf_x, buf_y);
-       
+
        if (gtk_text_iter_has_tag (&iter, tag)) {
                if (!hand) {
                        hand = gdk_cursor_new (GDK_HAND2);
@@ -170,7 +170,7 @@ chat_text_view_event_cb (EmpathyChatTextView *view,
                }
                gdk_window_set_cursor (win, beam);
        }
-       
+
        return FALSE;
 }
 
@@ -192,7 +192,7 @@ chat_text_view_create_tags (EmpathyChatTextView *view)
        g_signal_connect (tag, "event",
                          G_CALLBACK (chat_text_view_url_event_cb),
                          view);
-       
+
        g_signal_connect (view, "motion-notify-event",
                          G_CALLBACK (chat_text_view_event_cb),
                          tag);
@@ -203,7 +203,7 @@ chat_text_view_system_font_update (EmpathyChatTextView *view)
 {
        PangoFontDescription *font_description = NULL;
        gchar                *font_name;
-       
+
        if (empathy_conf_get_string (empathy_conf_get (),
                                     "/desktop/gnome/interface/document_font_name",
                                     &font_name) && font_name) {
@@ -212,9 +212,9 @@ chat_text_view_system_font_update (EmpathyChatTextView *view)
                                     } else {
                                             font_description = NULL;
                                     }
-       
+
        gtk_widget_modify_font (GTK_WIDGET (view), font_description);
-       
+
        if (font_description) {
                pango_font_description_free (font_description);
        }
@@ -226,14 +226,8 @@ chat_text_view_notify_system_font_cb (EmpathyConf *conf,
                                      gpointer     user_data)
 {
        EmpathyChatTextView *view = user_data;
-       
-       chat_text_view_system_font_update (view);
-}
 
-static void
-chat_text_view_clear_view_cb (GtkMenuItem *menuitem, EmpathyChatTextView *view)
-{
-       empathy_chat_view_clear (EMPATHY_CHAT_VIEW (view));
+       chat_text_view_system_font_update (view);
 }
 
 static void
@@ -246,18 +240,18 @@ static void
 chat_text_view_copy_address_cb (GtkMenuItem *menuitem, const gchar *url)
 {
        GtkClipboard *clipboard;
-       
+
        clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
        gtk_clipboard_set_text (clipboard, url, -1);
-       
+
        clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
        gtk_clipboard_set_text (clipboard, url, -1);
 }
 
 static void
 chat_text_view_populate_popup (EmpathyChatTextView *view,
-                         GtkMenu        *menu,
-                         gpointer        user_data)
+                              GtkMenu        *menu,
+                              gpointer        user_data)
 {
        EmpathyChatTextViewPriv *priv;
        GtkTextTagTable    *table;
@@ -266,71 +260,68 @@ chat_text_view_populate_popup (EmpathyChatTextView *view,
        GtkTextIter         iter, start, end;
        GtkWidget          *item;
        gchar              *str = NULL;
-       
+
        priv = GET_PRIV (view);
-       
+
        /* Clear menu item */
        if (gtk_text_buffer_get_char_count (priv->buffer) > 0) {
-               item = gtk_menu_item_new ();
+               item = gtk_separator_menu_item_new ();
                gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
                gtk_widget_show (item);
-               
+
                item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLEAR, NULL);
                gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
                gtk_widget_show (item);
-               
-               g_signal_connect (item,
-                                 "activate",
-                                 G_CALLBACK (chat_text_view_clear_view_cb),
-                                 view);
+
+               g_signal_connect_swapped (item, "activate",
+                                         G_CALLBACK (empathy_chat_view_clear),
+                                         view);
        }
-       
+
        /* Link context menu items */
        table = gtk_text_buffer_get_tag_table (priv->buffer);
        tag = gtk_text_tag_table_lookup (table, EMPATHY_CHAT_TEXT_VIEW_TAG_LINK);
-       
+
        gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
-       
+
        gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (view),
                                               GTK_TEXT_WINDOW_WIDGET,
                                               x, y,
                                               &x, &y);
-       
+
        gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (view), &iter, x, y);
-       
+
        start = end = iter;
-       
+
        if (gtk_text_iter_backward_to_tag_toggle (&start, tag) &&
            gtk_text_iter_forward_to_tag_toggle (&end, tag)) {
                    str = gtk_text_buffer_get_text (priv->buffer,
                                                    &start, &end, FALSE);
            }
-       
+
        if (EMP_STR_EMPTY (str)) {
                g_free (str);
                return;
        }
-       
+
        /* NOTE: Set data just to get the string freed when not needed. */
        g_object_set_data_full (G_OBJECT (menu),
                                "url", str,
                                (GDestroyNotify) g_free);
-       
-       item = gtk_menu_item_new ();
+
+       item = gtk_separator_menu_item_new ();
        gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
        gtk_widget_show (item);
-       
+
        item = gtk_menu_item_new_with_mnemonic (_("_Copy Link Address"));
-       g_signal_connect (item,
-                         "activate",
+       g_signal_connect (item, "activate",
                          G_CALLBACK (chat_text_view_copy_address_cb),
                          str);
        gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
        gtk_widget_show (item);
-       
+
        item = gtk_menu_item_new_with_mnemonic (_("_Open Link"));
-       g_signal_connect (item,
-                         "activate",
+       g_signal_connect (item, "activate",
                          G_CALLBACK (chat_text_view_open_address_cb),
                          str);
        gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
@@ -341,18 +332,24 @@ static gboolean
 chat_text_view_is_scrolled_down (EmpathyChatTextView *view)
 {
        GtkWidget *sw;
-       
+
        sw = gtk_widget_get_parent (GTK_WIDGET (view));
        if (GTK_IS_SCROLLED_WINDOW (sw)) {
                GtkAdjustment *vadj;
-               
+               gdouble value;
+               gdouble upper;
+               gdouble page_size;
+
                vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (sw));
-               
-               if (vadj->value + vadj->page_size / 2 < vadj->upper - vadj->page_size) {
+               value = gtk_adjustment_get_value (vadj);
+               upper = gtk_adjustment_get_upper (vadj);
+               page_size = gtk_adjustment_get_page_size (vadj);
+
+               if (value < upper - page_size) {
                        return FALSE;
                }
        }
-       
+
        return TRUE;
 }
 
@@ -365,23 +362,23 @@ chat_text_view_maybe_trim_buffer (EmpathyChatTextView *view)
        gint                remove;
        GtkTextTagTable    *table;
        GtkTextTag         *tag;
-       
+
        priv = GET_PRIV (view);
-       
+
        gtk_text_buffer_get_end_iter (priv->buffer, &bottom);
        line = gtk_text_iter_get_line (&bottom);
        if (line < MAX_LINES) {
                return;
        }
-       
+
        remove = line - MAX_LINES;
        gtk_text_buffer_get_start_iter (priv->buffer, &top);
-       
+
        bottom = top;
        if (!gtk_text_iter_forward_lines (&bottom, remove)) {
                return;
        }
-       
+
        /* Track backwords to a place where we can safely cut, we don't do it in
          * the middle of a tag.
          */
@@ -390,11 +387,11 @@ chat_text_view_maybe_trim_buffer (EmpathyChatTextView *view)
        if (!tag) {
                return;
        }
-       
+
        if (!gtk_text_iter_forward_to_tag_toggle (&bottom, tag)) {
                return;
        }
-       
+
        if (!gtk_text_iter_equal (&top, &bottom)) {
                gtk_text_buffer_delete (priv->buffer, &top, &bottom);
        }
@@ -445,7 +442,7 @@ chat_text_view_append_timestamp (EmpathyChatTextView *view,
 
        priv->last_timestamp = timestamp;
 
-       g_string_free (str, TRUE);      
+       g_string_free (str, TRUE);
 }
 
 static void
@@ -470,7 +467,7 @@ chat_text_maybe_append_date_and_time (EmpathyChatTextView *view,
                append_date = TRUE;
                append_time = TRUE;
        }
-       
+
        g_date_free (last_date);
        g_date_free (date);
 
@@ -489,14 +486,14 @@ chat_text_view_size_allocate (GtkWidget     *widget,
                              GtkAllocation *alloc)
 {
        gboolean down;
-       
+
        down = chat_text_view_is_scrolled_down (EMPATHY_CHAT_TEXT_VIEW (widget));
-       
+
        GTK_WIDGET_CLASS (empathy_chat_text_view_parent_class)->size_allocate (widget, alloc);
-       
+
        if (down) {
                GtkAdjustment *adj;
-               
+
                adj = GTK_TEXT_VIEW (widget)->vadjustment;
                gtk_adjustment_set_value (adj, adj->upper - adj->page_size);
        }
@@ -511,7 +508,7 @@ chat_text_view_drag_motion (GtkWidget      *widget,
 {
        /* Don't handle drag motion, since we don't want the view to scroll as
         * the result of dragging something across it. */
-       
+
        return FALSE;
 }
 
@@ -559,14 +556,14 @@ chat_text_view_finalize (GObject *object)
 {
        EmpathyChatTextView     *view;
        EmpathyChatTextViewPriv *priv;
-       
+
        view = EMPATHY_CHAT_TEXT_VIEW (object);
        priv = GET_PRIV (view);
-       
+
        DEBUG ("%p", object);
-       
+
        empathy_conf_notify_remove (empathy_conf_get (), priv->notify_system_fonts_id);
-       
+
        if (priv->last_contact) {
                g_object_unref (priv->last_contact);
        }
@@ -576,7 +573,8 @@ chat_text_view_finalize (GObject *object)
        if (priv->scroll_timeout) {
                g_source_remove (priv->scroll_timeout);
        }
-       
+       g_object_unref (priv->smiley_manager);
+
        G_OBJECT_CLASS (empathy_chat_text_view_parent_class)->finalize (object);
 }
 
@@ -585,7 +583,7 @@ empathy_chat_text_view_class_init (EmpathyChatTextViewClass *klass)
 {
        GObjectClass   *object_class = G_OBJECT_CLASS (klass);
        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-       
+
        object_class->finalize = chat_text_view_finalize;
        object_class->get_property = chat_text_view_get_property;
        object_class->set_property = chat_text_view_set_property;
@@ -618,18 +616,18 @@ empathy_chat_text_view_init (EmpathyChatTextView *view)
        EmpathyChatTextViewPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (view,
                EMPATHY_TYPE_CHAT_TEXT_VIEW, EmpathyChatTextViewPriv);
 
-       view->priv = priv;      
+       view->priv = priv;
        priv->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        priv->last_timestamp = 0;
        priv->allow_scrolling = TRUE;
        priv->smiley_manager = empathy_smiley_manager_dup_singleton ();
-       
+
        g_object_set (view,
                      "wrap-mode", GTK_WRAP_WORD_CHAR,
                      "editable", FALSE,
                      "cursor-visible", FALSE,
                      NULL);
-       
+
        priv->notify_system_fonts_id =
                empathy_conf_notify_add (empathy_conf_get (),
                                         "/desktop/gnome/interface/document_font_name",
@@ -651,13 +649,13 @@ chat_text_view_scroll_cb (EmpathyChatTextView *view)
        EmpathyChatTextViewPriv *priv;
        GtkAdjustment      *adj;
        gdouble             max_val;
-       
+
        priv = GET_PRIV (view);
        adj = GTK_TEXT_VIEW (view)->vadjustment;
        max_val = adj->upper - adj->page_size;
-       
+
        g_return_val_if_fail (priv->scroll_time != NULL, FALSE);
-       
+
        if (g_timer_elapsed (priv->scroll_time, NULL) > MAX_SCROLL_TIME) {
                /* time's up. jump to the end and kill the timer */
                gtk_adjustment_set_value (adj, max_val);
@@ -666,7 +664,7 @@ chat_text_view_scroll_cb (EmpathyChatTextView *view)
                priv->scroll_timeout = 0;
                return FALSE;
        }
-       
+
        /* scroll by 1/3rd the remaining distance */
        gtk_adjustment_set_value (adj, gtk_adjustment_get_value (adj) + ((max_val - gtk_adjustment_get_value (adj)) / 3));
        return TRUE;
@@ -676,9 +674,9 @@ static void
 chat_text_view_scroll_down (EmpathyChatView *view)
 {
        EmpathyChatTextViewPriv *priv = GET_PRIV (view);
-       
+
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
-       
+
        if (!priv->allow_scrolling) {
                return;
        }
@@ -705,29 +703,29 @@ chat_text_view_append_message (EmpathyChatView *view,
        EmpathyChatTextViewPriv *priv = GET_PRIV (text_view);
        gboolean                 bottom;
        time_t                   timestamp;
-       
+
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
        g_return_if_fail (EMPATHY_IS_MESSAGE (msg));
-       
+
        if (!empathy_message_get_body (msg)) {
                return;
        }
-       
+
        bottom = chat_text_view_is_scrolled_down (text_view);
-       
+
        chat_text_view_maybe_trim_buffer (EMPATHY_CHAT_TEXT_VIEW (view));
-       
+
        timestamp = empathy_message_get_timestamp (msg);
        chat_text_maybe_append_date_and_time (text_view, timestamp);
        if (EMPATHY_CHAT_TEXT_VIEW_GET_CLASS (view)->append_message) {
                EMPATHY_CHAT_TEXT_VIEW_GET_CLASS (view)->append_message (text_view,
                                                                         msg);
        }
-       
+
        if (bottom) {
                chat_text_view_scroll_down (view);
        }
-       
+
        if (priv->last_contact) {
                g_object_unref (priv->last_contact);
        }
@@ -765,7 +763,7 @@ chat_text_view_append_event (EmpathyChatView *view,
        if (bottom) {
                chat_text_view_scroll_down (view);
        }
-       
+
        if (priv->last_contact) {
                g_object_unref (priv->last_contact);
                priv->last_contact = NULL;
@@ -778,9 +776,9 @@ chat_text_view_scroll (EmpathyChatView *view,
                       gboolean         allow_scrolling)
 {
        EmpathyChatTextViewPriv *priv = GET_PRIV (view);
-       
+
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
-       
+
        DEBUG ("Scrolling %s", allow_scrolling ? "enabled" : "disabled");
 
        priv->allow_scrolling = allow_scrolling;
@@ -793,11 +791,11 @@ static gboolean
 chat_text_view_get_has_selection (EmpathyChatView *view)
 {
        GtkTextBuffer *buffer;
-       
+
        g_return_val_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view), FALSE);
-       
+
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
-       
+
        return gtk_text_buffer_get_has_selection (buffer);
 }
 
@@ -806,18 +804,18 @@ chat_text_view_clear (EmpathyChatView *view)
 {
        GtkTextBuffer      *buffer;
        EmpathyChatTextViewPriv *priv;
-       
+
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
-       
+
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        gtk_text_buffer_set_text (buffer, "", -1);
-       
+
        /* We set these back to the initial values so we get
          * timestamps when clearing the window to know when
          * conversations start.
          */
        priv = GET_PRIV (view);
-       
+
        priv->last_timestamp = 0;
 }
 
@@ -833,18 +831,18 @@ chat_text_view_find_previous (EmpathyChatView *view,
        GtkTextIter         iter_match_end;
        gboolean            found;
        gboolean            from_start = FALSE;
-       
+
        g_return_val_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view), FALSE);
        g_return_val_if_fail (search_criteria != NULL, FALSE);
-       
+
        priv = GET_PRIV (view);
-       
+
        buffer = priv->buffer;
-       
+
        if (EMP_STR_EMPTY (search_criteria)) {
                if (priv->find_mark_previous) {
                        gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
-                       
+
                        gtk_text_buffer_move_mark (buffer,
                                                   priv->find_mark_previous,
                                                   &iter_at_mark);
@@ -858,14 +856,14 @@ chat_text_view_find_previous (EmpathyChatView *view,
                                                      &iter_at_mark,
                                                      &iter_at_mark);
                }
-               
+
                return FALSE;
        }
-       
+
        if (new_search) {
                from_start = TRUE;
        }
-       
+
        if (priv->find_mark_previous) {
                gtk_text_buffer_get_iter_at_mark (buffer,
                                                  &iter_at_mark,
@@ -874,22 +872,22 @@ chat_text_view_find_previous (EmpathyChatView *view,
                gtk_text_buffer_get_end_iter (buffer, &iter_at_mark);
                from_start = TRUE;
        }
-       
+
        priv->find_last_direction = FALSE;
-       
+
        found = empathy_text_iter_backward_search (&iter_at_mark,
                                                   search_criteria,
                                                   &iter_match_start,
                                                   &iter_match_end,
                                                   NULL);
-       
+
        if (!found) {
                gboolean result = FALSE;
-               
+
                if (from_start) {
                        return result;
                }
-               
+
                /* Here we wrap around. */
                if (!new_search && !priv->find_wrapped) {
                        priv->find_wrapped = TRUE;
@@ -898,10 +896,10 @@ chat_text_view_find_previous (EmpathyChatView *view,
                                                                 FALSE);
                        priv->find_wrapped = FALSE;
                }
-               
+
                return result;
        }
-       
+
        /* Set new mark and show on screen */
        if (!priv->find_mark_previous) {
                priv->find_mark_previous = gtk_text_buffer_create_mark (buffer, NULL,
@@ -912,7 +910,7 @@ chat_text_view_find_previous (EmpathyChatView *view,
                                           priv->find_mark_previous,
                                           &iter_match_start);
        }
-       
+
        if (!priv->find_mark_next) {
                priv->find_mark_next = gtk_text_buffer_create_mark (buffer, NULL,
                                                                    &iter_match_end,
@@ -922,17 +920,17 @@ chat_text_view_find_previous (EmpathyChatView *view,
                                           priv->find_mark_next,
                                           &iter_match_end);
        }
-       
+
        gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
                                      priv->find_mark_previous,
                                      0.0,
                                      TRUE,
                                      0.5,
                                      0.5);
-       
+
        gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &iter_match_start);
        gtk_text_buffer_move_mark_by_name (buffer, "insert", &iter_match_end);
-       
+
        return TRUE;
 }
 
@@ -948,18 +946,18 @@ chat_text_view_find_next (EmpathyChatView *view,
        GtkTextIter         iter_match_end;
        gboolean            found;
        gboolean            from_start = FALSE;
-       
+
        g_return_val_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view), FALSE);
        g_return_val_if_fail (search_criteria != NULL, FALSE);
-       
+
        priv = GET_PRIV (view);
-       
+
        buffer = priv->buffer;
-       
+
        if (EMP_STR_EMPTY (search_criteria)) {
                if (priv->find_mark_next) {
                        gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
-                       
+
                        gtk_text_buffer_move_mark (buffer,
                                                   priv->find_mark_next,
                                                   &iter_at_mark);
@@ -973,14 +971,14 @@ chat_text_view_find_next (EmpathyChatView *view,
                                                      &iter_at_mark,
                                                      &iter_at_mark);
                }
-               
+
                return FALSE;
        }
-       
+
        if (new_search) {
                from_start = TRUE;
        }
-       
+
        if (priv->find_mark_next) {
                gtk_text_buffer_get_iter_at_mark (buffer,
                                                  &iter_at_mark,
@@ -989,22 +987,22 @@ chat_text_view_find_next (EmpathyChatView *view,
                gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
                from_start = TRUE;
        }
-       
+
        priv->find_last_direction = TRUE;
-       
+
        found = empathy_text_iter_forward_search (&iter_at_mark,
                                                  search_criteria,
                                                  &iter_match_start,
                                                  &iter_match_end,
                                                  NULL);
-       
+
        if (!found) {
                gboolean result = FALSE;
-               
+
                if (from_start) {
                        return result;
                }
-               
+
                /* Here we wrap around. */
                if (!new_search && !priv->find_wrapped) {
                        priv->find_wrapped = TRUE;
@@ -1013,10 +1011,10 @@ chat_text_view_find_next (EmpathyChatView *view,
                                                             FALSE);
                        priv->find_wrapped = FALSE;
                }
-               
+
                return result;
        }
-       
+
        /* Set new mark and show on screen */
        if (!priv->find_mark_next) {
                priv->find_mark_next = gtk_text_buffer_create_mark (buffer, NULL,
@@ -1027,7 +1025,7 @@ chat_text_view_find_next (EmpathyChatView *view,
                                           priv->find_mark_next,
                                           &iter_match_end);
        }
-       
+
        if (!priv->find_mark_previous) {
                priv->find_mark_previous = gtk_text_buffer_create_mark (buffer, NULL,
                                                                        &iter_match_start,
@@ -1037,17 +1035,17 @@ chat_text_view_find_next (EmpathyChatView *view,
                                           priv->find_mark_previous,
                                           &iter_match_start);
        }
-       
+
        gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
                                      priv->find_mark_next,
                                      0.0,
                                      TRUE,
                                      0.5,
                                      0.5);
-       
+
        gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &iter_match_start);
        gtk_text_buffer_move_mark_by_name (buffer, "insert", &iter_match_end);
-       
+
        return TRUE;
 }
 
@@ -1062,15 +1060,15 @@ chat_text_view_find_abilities (EmpathyChatView *view,
        GtkTextIter              iter_at_mark;
        GtkTextIter              iter_match_start;
        GtkTextIter              iter_match_end;
-       
+
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
        g_return_if_fail (search_criteria != NULL);
        g_return_if_fail (can_do_previous != NULL && can_do_next != NULL);
-       
+
        priv = GET_PRIV (view);
-       
+
        buffer = priv->buffer;
-       
+
        if (can_do_previous) {
                if (priv->find_mark_previous) {
                        gtk_text_buffer_get_iter_at_mark (buffer,
@@ -1079,14 +1077,14 @@ chat_text_view_find_abilities (EmpathyChatView *view,
                } else {
                        gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
                }
-               
+
                *can_do_previous = empathy_text_iter_backward_search (&iter_at_mark,
                                                                      search_criteria,
                                                                      &iter_match_start,
                                                                      &iter_match_end,
                                                                      NULL);
        }
-       
+
        if (can_do_next) {
                if (priv->find_mark_next) {
                        gtk_text_buffer_get_iter_at_mark (buffer,
@@ -1095,7 +1093,7 @@ chat_text_view_find_abilities (EmpathyChatView *view,
                } else {
                        gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
                }
-               
+
                *can_do_next = empathy_text_iter_forward_search (&iter_at_mark,
                                                                 search_criteria,
                                                                 &iter_match_start,
@@ -1115,37 +1113,37 @@ chat_text_view_highlight (EmpathyChatView *view,
        GtkTextIter    iter_match_start;
        GtkTextIter    iter_match_end;
        gboolean       found;
-       
+
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
-       
+
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
-       
+
        gtk_text_buffer_get_start_iter (buffer, &iter);
-       
+
        gtk_text_buffer_get_bounds (buffer, &iter_start, &iter_end);
        gtk_text_buffer_remove_tag_by_name (buffer, EMPATHY_CHAT_TEXT_VIEW_TAG_HIGHLIGHT,
                                            &iter_start,
                                            &iter_end);
-       
+
        if (EMP_STR_EMPTY (text)) {
                return;
        }
-       
+
        while (1) {
                found = empathy_text_iter_forward_search (&iter,
                                                          text,
                                                          &iter_match_start,
                                                          &iter_match_end,
                                                          NULL);
-               
+
                if (!found) {
                        break;
                }
-               
+
                gtk_text_buffer_apply_tag_by_name (buffer, EMPATHY_CHAT_TEXT_VIEW_TAG_HIGHLIGHT,
                                                   &iter_match_start,
                                                   &iter_match_end);
-               
+
                iter = iter_match_end;
                gtk_text_iter_forward_char (&iter);
        }
@@ -1156,12 +1154,12 @@ chat_text_view_copy_clipboard (EmpathyChatView *view)
 {
        GtkTextBuffer *buffer;
        GtkClipboard  *clipboard;
-       
+
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
-       
+
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
-       
+
        gtk_text_buffer_copy_clipboard (buffer, clipboard);
 }
 
@@ -1185,9 +1183,9 @@ EmpathyContact *
 empathy_chat_text_view_get_last_contact (EmpathyChatTextView *view)
 {
        EmpathyChatTextViewPriv *priv = GET_PRIV (view);
-       
+
        g_return_val_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view), NULL);
-       
+
        return priv->last_contact;
 }
 
@@ -1196,7 +1194,7 @@ empathy_chat_text_view_set_only_if_date (EmpathyChatTextView *view,
                                         gboolean             only_if_date)
 {
        EmpathyChatTextViewPriv *priv = GET_PRIV (view);
-       
+
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
 
        if (only_if_date != priv->only_if_date) {
index 7c4ff343091db3aaab633f77970633fe35156ec4..0180f21d1ddfadd57c8bc17cc0bcf6caa0aa9e33 100644 (file)
@@ -27,7 +27,7 @@
 #ifndef __EMPATHY_CHAT_TEXT_VIEW_H__
 #define __EMPATHY_CHAT_TEXT_VIEW_H__
 
-#include <gtk/gtktextview.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-contact.h>
 #include <libempathy/empathy-message.h>
index e0a7905df6cca46f0291809424f8d59d6d662f66..ed5740a8e2b38087167c2ad64bdffb437df456dc 100644 (file)
@@ -31,21 +31,21 @@ GType
 empathy_chat_view_get_type (void)
 {
        static GType type = 0;
-       
+
        if (!type) {
                static const GTypeInfo type_info = {
                        sizeof (EmpathyChatViewIface),
                        chat_view_base_init,
                        NULL,
                };
-               
+
                type = g_type_register_static (G_TYPE_INTERFACE,
                                               "EmpathyChatView",
                                               &type_info, 0);
-               
+
                g_type_interface_add_prerequisite (type, GTK_TYPE_WIDGET);
        }
-       
+
        return type;
 }
 
@@ -53,7 +53,7 @@ static void
 chat_view_base_init (gpointer klass)
 {
        static gboolean initialized = FALSE;
-       
+
        if (!initialized) {
                initialized = TRUE;
        }
@@ -64,7 +64,7 @@ empathy_chat_view_append_message (EmpathyChatView *view,
                                  EmpathyMessage  *msg)
 {
        g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->append_message) {
                EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->append_message (view,
                                                                         msg);
@@ -76,7 +76,7 @@ empathy_chat_view_append_event (EmpathyChatView *view,
                                const gchar    *str)
 {
        g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->append_event) {
                EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->append_event (view,
                                                                       str);
@@ -88,7 +88,7 @@ empathy_chat_view_scroll (EmpathyChatView *view,
                          gboolean        allow_scrolling)
 {
        g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->scroll) {
                EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->scroll (view,
                                                                 allow_scrolling);
@@ -99,7 +99,7 @@ void
 empathy_chat_view_scroll_down (EmpathyChatView *view)
 {
        g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->scroll_down) {
                EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->scroll_down (view);
        }
@@ -109,7 +109,7 @@ gboolean
 empathy_chat_view_get_has_selection (EmpathyChatView *view)
 {
        g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), FALSE);
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->get_has_selection) {
                return EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->get_has_selection (view);
        }
@@ -120,7 +120,7 @@ void
 empathy_chat_view_clear (EmpathyChatView *view)
 {
        g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->clear) {
                EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->clear (view);
        }
@@ -132,7 +132,7 @@ empathy_chat_view_find_previous (EmpathyChatView *view,
                                 gboolean        new_search)
 {
        g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), FALSE);
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->find_previous) {
                return EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->find_previous (view,
                                                                               search_criteria,
@@ -147,7 +147,7 @@ empathy_chat_view_find_next (EmpathyChatView *view,
                             gboolean        new_search)
 {
        g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), FALSE);
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->find_next) {
                return EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->find_next (view,
                                                                           search_criteria,
@@ -164,7 +164,7 @@ empathy_chat_view_find_abilities (EmpathyChatView *view,
                                  gboolean       *can_do_next)
 {
        g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->find_abilities) {
                EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->find_abilities (view,
                                                                         search_criteria,
@@ -178,7 +178,7 @@ empathy_chat_view_highlight (EmpathyChatView *view,
                             const gchar     *text)
 {
        g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->highlight) {
                EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->highlight (view, text);
        }
@@ -188,7 +188,7 @@ void
 empathy_chat_view_copy_clipboard (EmpathyChatView *view)
 {
        g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
-       
+
        if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->copy_clipboard) {
                EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->copy_clipboard (view);
        }
index 893cf83e4a84485a910c197ae507010cb17efc79..f3478be6ddee4ae848c53e514e03c34c6e84695e 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef __EMPATHY_CHAT_VIEW_H__
 #define __EMPATHY_CHAT_VIEW_H__
 
-#include <gtk/gtktextview.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-contact.h>
 #include <libempathy/empathy-message.h>
index 248fd116da57b9d1196012234f3468827b1e309a..9c5e47b0e661b3b15573249bddd1ee23cb00cd41 100644 (file)
@@ -69,6 +69,7 @@ typedef struct {
        gchar             *name;
        gchar             *subject;
        EmpathyContact    *remote_contact;
+       gboolean           show_contacts;
 
        EmpathyLogManager *log_manager;
        EmpathyAccountManager *account_manager;
@@ -107,6 +108,7 @@ enum {
        PROP_NAME,
        PROP_SUBJECT,
        PROP_REMOTE_CONTACT,
+       PROP_SHOW_CONTACTS,
 };
 
 static guint signals[LAST_SIGNAL] = { 0 };
@@ -141,6 +143,9 @@ chat_get_property (GObject    *object,
        case PROP_REMOTE_CONTACT:
                g_value_set_object (value, priv->remote_contact);
                break;
+       case PROP_SHOW_CONTACTS:
+               g_value_set_boolean (value, priv->show_contacts);
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
                break;
@@ -159,6 +164,9 @@ chat_set_property (GObject      *object,
        case PROP_TP_CHAT:
                empathy_chat_set_tp_chat (chat, EMPATHY_TP_CHAT (g_value_get_object (value)));
                break;
+       case PROP_SHOW_CONTACTS:
+               empathy_chat_set_show_contacts (chat, g_value_get_boolean (value));
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
                break;
@@ -199,7 +207,7 @@ chat_new_connection_cb (EmpathyAccountManager *manager,
        if (!priv->tp_chat && empathy_account_equal (account, priv->account) &&
            priv->handle_type != TP_HANDLE_TYPE_NONE &&
            !EMP_STR_EMPTY (priv->id)) {
-               
+
                DEBUG ("Account reconnected, request a new Text channel");
 
                switch (priv->handle_type) {
@@ -294,7 +302,7 @@ chat_sent_message_add (EmpathyChat  *chat,
 
        /* Save the sent message in our repeat buffer */
        list = priv->sent_messages;
-       
+
        /* Remove any other occurances of this msg */
        while ((item = g_slist_find_custom (list, str, (GCompareFunc) strcmp)) != NULL) {
                list = g_slist_remove_link (list, item);
@@ -325,7 +333,7 @@ chat_sent_message_get_next (EmpathyChat *chat)
 {
        EmpathyChatPriv *priv;
        gint            max;
-       
+
        priv = GET_PRIV (chat);
 
        if (!priv->sent_messages) {
@@ -338,7 +346,7 @@ chat_sent_message_get_next (EmpathyChat *chat)
        if (priv->sent_messages_index < max) {
                priv->sent_messages_index++;
        }
-       
+
        DEBUG ("Returning next message index:%d", priv->sent_messages_index);
 
        return g_slist_nth_data (priv->sent_messages, priv->sent_messages_index);
@@ -352,7 +360,7 @@ chat_sent_message_get_last (EmpathyChat *chat)
        g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
 
        priv = GET_PRIV (chat);
-       
+
        if (!priv->sent_messages) {
                DEBUG ("No sent messages, last message is NULL");
                return NULL;
@@ -1188,15 +1196,18 @@ chat_reset_size_request (gpointer widget)
 }
 
 static void
-chat_set_show_contacts (EmpathyChat *chat, gboolean show)
+chat_update_contacts_visibility (EmpathyChat *chat)
 {
        EmpathyChatPriv *priv = GET_PRIV (chat);
+       gboolean show;
+
+       show = priv->remote_contact == NULL && priv->show_contacts;
 
        if (!priv->scrolled_window_contacts) {
                return;
        }
 
-       if (show) {
+       if (show && priv->contact_list_view == NULL) {
                EmpathyContactListStore *store;
                gint                     min_width;
 
@@ -1217,7 +1228,7 @@ chat_set_show_contacts (EmpathyChat *chat, gboolean show)
 
                store = empathy_contact_list_store_new (EMPATHY_CONTACT_LIST (priv->tp_chat));
                priv->contact_list_view = GTK_WIDGET (empathy_contact_list_view_new (store,
-                       EMPATHY_CONTACT_LIST_FEATURE_NONE,
+                       EMPATHY_CONTACT_LIST_FEATURE_CONTACT_TOOLTIP,
                        EMPATHY_CONTACT_FEATURE_CHAT |
                        EMPATHY_CONTACT_FEATURE_CALL |
                        EMPATHY_CONTACT_FEATURE_LOG |
@@ -1227,34 +1238,47 @@ chat_set_show_contacts (EmpathyChat *chat, gboolean show)
                gtk_widget_show (priv->contact_list_view);
                gtk_widget_show (priv->scrolled_window_contacts);
                g_object_unref (store);
-       } else {
+       } else if (!show) {
                priv->contacts_width = gtk_paned_get_position (GTK_PANED (priv->hpaned));
                gtk_widget_hide (priv->scrolled_window_contacts);
-               if (priv->contact_list_view) {
+               if (priv->contact_list_view != NULL) {
                        gtk_widget_destroy (priv->contact_list_view);
                        priv->contact_list_view = NULL;
                }
        }
 }
 
+void
+empathy_chat_set_show_contacts (EmpathyChat *chat,
+                               gboolean     show)
+{
+       EmpathyChatPriv *priv = GET_PRIV (chat);
+
+       priv->show_contacts = show;
+
+       chat_update_contacts_visibility (chat);
+
+       g_object_notify (G_OBJECT (chat), "show-contacts");
+}
+
 static void
 chat_remote_contact_changed_cb (EmpathyChat *chat)
 {
        EmpathyChatPriv *priv = GET_PRIV (chat);
 
-       if (priv->remote_contact) {
+       if (priv->remote_contact != NULL) {
                g_object_unref (priv->remote_contact);
                priv->remote_contact = NULL;
        }
 
        priv->remote_contact = empathy_tp_chat_get_remote_contact (priv->tp_chat);
-       if (priv->remote_contact) {
+       if (priv->remote_contact != NULL) {
                g_object_ref (priv->remote_contact);
                priv->handle_type = TP_HANDLE_TYPE_CONTACT;
                g_free (priv->id);
                priv->id = g_strdup (empathy_contact_get_id (priv->remote_contact));
        }
-       else if (priv->tp_chat) {
+       else if (priv->tp_chat != NULL) {
                TpChannel *channel;
 
                channel = empathy_tp_chat_get_channel (priv->tp_chat);
@@ -1263,7 +1287,7 @@ chat_remote_contact_changed_cb (EmpathyChat *chat)
                priv->id = g_strdup (empathy_tp_chat_get_id (priv->tp_chat));
        }
 
-       chat_set_show_contacts (chat, priv->remote_contact == NULL);
+       chat_update_contacts_visibility (chat);
 
        g_object_notify (G_OBJECT (chat), "remote-contact");
        g_object_notify (G_OBJECT (chat), "id");
@@ -1288,7 +1312,7 @@ chat_destroy_cb (EmpathyTpChat *tp_chat,
 
        empathy_chat_view_append_event (chat->view, _("Disconnected"));
        gtk_widget_set_sensitive (chat->input_text_view, FALSE);
-       chat_set_show_contacts (chat, FALSE);
+       empathy_chat_set_show_contacts (chat, FALSE);
 }
 
 static void
@@ -1373,7 +1397,7 @@ chat_create_ui (EmpathyChat *chat)
        gtk_widget_show (chat->input_text_view);
 
        /* Create contact list */
-       chat_set_show_contacts (chat, priv->remote_contact == NULL);
+       chat_update_contacts_visibility (chat);
 
        /* Initialy hide the topic, will be shown if not empty */
        gtk_widget_hide (priv->hbox_topic);
@@ -1531,42 +1555,56 @@ empathy_chat_class_init (EmpathyChatClass *klass)
                                                              "The tp chat object",
                                                              EMPATHY_TYPE_TP_CHAT,
                                                              G_PARAM_CONSTRUCT |
-                                                             G_PARAM_READWRITE));
+                                                             G_PARAM_READWRITE |
+                                                             G_PARAM_STATIC_STRINGS));
        g_object_class_install_property (object_class,
                                         PROP_ACCOUNT,
                                         g_param_spec_object ("account",
                                                              "Account of the chat",
                                                              "The account of the chat",
                                                              MC_TYPE_ACCOUNT,
-                                                             G_PARAM_READABLE));
+                                                             G_PARAM_READABLE |
+                                                             G_PARAM_STATIC_STRINGS));
        g_object_class_install_property (object_class,
                                         PROP_ID,
                                         g_param_spec_string ("id",
                                                              "Chat's id",
                                                              "The id of the chat",
                                                              NULL,
-                                                             G_PARAM_READABLE));
+                                                             G_PARAM_READABLE |
+                                                             G_PARAM_STATIC_STRINGS));
        g_object_class_install_property (object_class,
                                         PROP_NAME,
                                         g_param_spec_string ("name",
                                                              "Chat's name",
                                                              "The name of the chat",
                                                              NULL,
-                                                             G_PARAM_READABLE));
+                                                             G_PARAM_READABLE |
+                                                             G_PARAM_STATIC_STRINGS));
        g_object_class_install_property (object_class,
                                         PROP_SUBJECT,
                                         g_param_spec_string ("subject",
                                                              "Chat's subject",
                                                              "The subject or topic of the chat",
                                                              NULL,
-                                                             G_PARAM_READABLE));
+                                                             G_PARAM_READABLE |
+                                                             G_PARAM_STATIC_STRINGS));
        g_object_class_install_property (object_class,
                                         PROP_REMOTE_CONTACT,
                                         g_param_spec_object ("remote-contact",
                                                              "The remote contact",
                                                              "The remote contact is any",
                                                              EMPATHY_TYPE_CONTACT,
-                                                             G_PARAM_READABLE));
+                                                             G_PARAM_READABLE |
+                                                             G_PARAM_STATIC_STRINGS));
+       g_object_class_install_property (object_class,
+                                        PROP_SHOW_CONTACTS,
+                                        g_param_spec_boolean ("show-contacts",
+                                                              "Contacts' visibility",
+                                                              "The visibility of the contacts' list",
+                                                              TRUE,
+                                                              G_PARAM_READWRITE |
+                                                              G_PARAM_STATIC_STRINGS));
 
        signals[COMPOSING] =
                g_signal_new ("composing",
@@ -1619,6 +1657,10 @@ empathy_chat_init (EmpathyChat *chat)
                          G_CALLBACK (chat_new_connection_cb),
                          chat);
 
+       empathy_conf_get_bool (empathy_conf_get (),
+                              EMPATHY_PREFS_CHAT_SHOW_CONTACTS_IN_ROOMS,
+                              &priv->show_contacts);
+
        /* Block events for some time to avoid having "has come online" or
         * "joined" messages. */
        priv->block_events_timeout_id =
index 74d7e068191e4d740fabcf8beceb3b1014305320..c38fd64a6c636092c26c70b315085ef738c48de4 100644 (file)
@@ -28,7 +28,7 @@
 #ifndef __EMPATHY_CHAT_H__
 #define __EMPATHY_CHAT_H__
 
-#include <gtk/gtkbin.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-contact.h>
 #include <libempathy/empathy-message.h>
@@ -82,6 +82,8 @@ void               empathy_chat_correct_word         (EmpathyChat   *chat,
                                                      GtkTextIter   *end,
                                                      const gchar   *new_word);
 gboolean           empathy_chat_is_room              (EmpathyChat   *chat);
+void               empathy_chat_set_show_contacts    (EmpathyChat *chat,
+                                                      gboolean     show);
 G_END_DECLS
 
 #endif /* __EMPATHY_CHAT_H__ */
index 3a9f49c34f323db46af3c64f95afa9120ac4c855..7af4832a5d10b67ef1efd24b026a9131122c8a2a 100644 (file)
             <property name="visible">True</property>
             <property name="xalign">0</property>
             <property name="yalign">0</property>
-            <property name="label" translatable="yes">&lt;b&gt;Topic:&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Topic:</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
           <packing>
             <property name="expand">False</property>
index 07026df5c9b1ff0ee6698a78807caaa03a14e82a..937a4bf9cb83ebd7091775b6fff3dc5b248d1e35 100644 (file)
@@ -48,6 +48,8 @@ struct _EmpathyConfClass {
 #define EMPATHY_PREFS_NOTIFICATIONS_ENABLED        EMPATHY_PREFS_PATH "/notifications/notifications_enabled"
 #define EMPATHY_PREFS_NOTIFICATIONS_DISABLED_AWAY  EMPATHY_PREFS_PATH "/notifications/notifications_disabled_away"
 #define EMPATHY_PREFS_NOTIFICATIONS_FOCUS          EMPATHY_PREFS_PATH "/notifications/notifications_focus"
+#define EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNIN EMPATHY_PREFS_PATH "/notifications/notifications_contact_signin"
+#define EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNOUT EMPATHY_PREFS_PATH "/notifications/notifications_contact_signout"
 #define EMPATHY_PREFS_SOUNDS_ENABLED               EMPATHY_PREFS_PATH "/sounds/sounds_enabled"
 #define EMPATHY_PREFS_SOUNDS_DISABLED_AWAY         EMPATHY_PREFS_PATH "/sounds/sounds_disabled_away"
 #define EMPATHY_PREFS_SOUNDS_INCOMING_MESSAGE      EMPATHY_PREFS_PATH "/sounds/sounds_incoming_message"
@@ -59,7 +61,9 @@ struct _EmpathyConfClass {
 #define EMPATHY_PREFS_SOUNDS_CONTACT_LOGOUT        EMPATHY_PREFS_PATH "/sounds/sounds_contact_logout"
 #define EMPATHY_PREFS_POPUPS_WHEN_AVAILABLE        EMPATHY_PREFS_PATH "/notifications/popups_when_available"
 #define EMPATHY_PREFS_CHAT_SHOW_SMILEYS            EMPATHY_PREFS_PATH "/conversation/graphical_smileys"
+#define EMPATHY_PREFS_CHAT_SHOW_CONTACTS_IN_ROOMS  EMPATHY_PREFS_PATH "/conversation/show_contacts_in_rooms"
 #define EMPATHY_PREFS_CHAT_THEME                   EMPATHY_PREFS_PATH "/conversation/theme"
+#define EMPATHY_PREFS_CHAT_ADIUM_PATH              EMPATHY_PREFS_PATH "/conversation/adium_path"
 #define EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES EMPATHY_PREFS_PATH "/conversation/spell_checker_languages"
 #define EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED   EMPATHY_PREFS_PATH "/conversation/spell_checker_enabled"
 #define EMPATHY_PREFS_CHAT_NICK_COMPLETION_CHAR    EMPATHY_PREFS_PATH "/conversation/nick_completion_char"
index 307b0fbb3847724ca82e5360eb701e4ac9668b64..39edbf57924ee52f4cd476398416391fa356e2ef 100644 (file)
@@ -398,7 +398,7 @@ empathy_new_contact_dialog_show (GtkWindow *parent)
                                      button,
                                      GTK_RESPONSE_CANCEL);
        gtk_widget_show (button);
-       
+
        /* Add button */
        button = gtk_button_new_with_label (GTK_STOCK_ADD);
        gtk_button_set_use_stock (GTK_BUTTON (button), TRUE);
index 261b2cc602a5bbcb35ee64647c208d8c092a07ad..0e9372be189bbb9fbea268995748fb7c2481630e 100644 (file)
@@ -601,7 +601,7 @@ empathy_contact_list_store_set_sort_criterium (EmpathyContactListStore     *stor
                                                      EMPATHY_CONTACT_LIST_STORE_COL_STATUS,
                                                      GTK_SORT_ASCENDING);
                break;
-               
+
        case EMPATHY_CONTACT_LIST_STORE_SORT_NAME:
                gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
                                                      EMPATHY_CONTACT_LIST_STORE_COL_NAME,
@@ -738,7 +738,7 @@ contact_list_store_setup (EmpathyContactListStore *store)
                                               G_TYPE_BOOLEAN,       /* Is separator */
                                               G_TYPE_BOOLEAN,       /* Can make audio calls */
                                               G_TYPE_BOOLEAN};      /* Can make video calls */
-       
+
        priv = GET_PRIV (store);
 
        gtk_tree_store_set_column_types (GTK_TREE_STORE (store),
@@ -853,7 +853,7 @@ contact_list_store_add_contact (EmpathyContactListStore *store,
        GList                      *groups = NULL, *l;
 
        priv = GET_PRIV (store);
-       
+
        if (EMP_STR_EMPTY (empathy_contact_get_name (contact)) ||
            (!priv->show_offline && !empathy_contact_is_online (contact))) {
                return;
@@ -922,7 +922,7 @@ contact_list_store_remove_contact (EmpathyContactListStore *store,
        if (!iters) {
                return;
        }
-       
+
        /* Clean up model */
        model = GTK_TREE_MODEL (store);
 
@@ -1156,7 +1156,7 @@ contact_list_store_contact_active_new (EmpathyContactListStore *store,
        DEBUG ("Contact:'%s' now active, and %s be removed",
                empathy_contact_get_name (contact),
                remove ? "WILL" : "WILL NOT");
-       
+
        data = g_slice_new0 (ShowActiveData);
 
        data->store = g_object_ref (store);
index 13ea099b32d72e21bfa7e118082d92a9db79abcc..007a6b069256049564dbf403d3b561dd0661670a 100644 (file)
@@ -26,7 +26,7 @@
 #ifndef __EMPATHY_CONTACT_LIST_STORE_H__
 #define __EMPATHY_CONTACT_LIST_STORE_H__
 
-#include <gtk/gtktreestore.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-contact-list.h>
 #include <libempathy/empathy-contact.h>
index c106653b1d0aaf44db777ac0ab06640e276cabaa..61db60cdf175247144f5f390dc4ea7e4857f0430 100644 (file)
@@ -121,7 +121,7 @@ contact_list_view_tooltip_destroy_cb (GtkWidget              *widget,
                                      EmpathyContactListView *view)
 {
        EmpathyContactListViewPriv *priv = GET_PRIV (view);
-       
+
        if (priv->tooltip_widget) {
                DEBUG ("Tooltip destroyed");
                g_object_unref (priv->tooltip_widget);
@@ -230,7 +230,7 @@ contact_list_view_drag_got_contact (EmpathyTpContactFactory *factory,
        if (data->new_group) {
                empathy_contact_list_add_to_group (list, contact, data->new_group);
        }
-       if (data->old_group && data->action == GDK_ACTION_MOVE) {       
+       if (data->old_group && data->action == GDK_ACTION_MOVE) {
                empathy_contact_list_remove_from_group (list, contact, data->old_group);
        }
 }
@@ -1272,7 +1272,7 @@ empathy_contact_list_view_new (EmpathyContactListStore        *store,
                               EmpathyContactFeatureFlags      contact_features)
 {
        g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store), NULL);
-       
+
        return g_object_new (EMPATHY_TYPE_CONTACT_LIST_VIEW,
                             "store", store,
                             "contact-features", contact_features,
@@ -1344,7 +1344,7 @@ contact_list_view_remove_dialog_show (GtkWindow   *parent,
 {
        GtkWidget *dialog;
        gboolean res;
-       
+
        dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL,
                                         GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
                                         "%s", message);
@@ -1446,7 +1446,7 @@ contact_list_view_remove_activate_cb (GtkMenuItem            *menuitem,
 {
        EmpathyContactListViewPriv *priv = GET_PRIV (view);
        EmpathyContact             *contact;
-               
+
        contact = empathy_contact_list_view_dup_selected (view);
 
        if (contact) {
@@ -1455,7 +1455,7 @@ contact_list_view_remove_activate_cb (GtkMenuItem            *menuitem,
 
                parent = empathy_get_toplevel_window (GTK_WIDGET (view));
                text = g_strdup_printf (_("Do you really want to remove the contact '%s'?"),
-                                       empathy_contact_get_name (contact));                                            
+                                       empathy_contact_get_name (contact));
                if (contact_list_view_remove_dialog_show (parent, _("Removing contact"), text)) {
                        EmpathyContactList *list;
 
index 0c48764c42e421673b069d5aa76895947abcf74f..e9c3457d8d430719202f89bfec73197dc3862421 100644 (file)
@@ -26,7 +26,7 @@
 #ifndef __EMPATHY_CONTACT_LIST_VIEW_H__
 #define __EMPATHY_CONTACT_LIST_VIEW_H__
 
-#include <gtk/gtktreeview.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-contact.h>
 
index fdd9c34a1b50cb909228adbc48e75d86b94a3982..2bad5c9fe4baaee812c5d0e73744defc68a54741 100644 (file)
@@ -141,7 +141,7 @@ empathy_contact_chat_menu_item_new (EmpathyContact *contact)
        g_signal_connect (item, "activate",
                                  G_CALLBACK (empathy_contact_chat_menu_item_activated),
                                  contact);
-       
+
        return item;
 }
 
@@ -244,7 +244,7 @@ empathy_contact_log_menu_item_new (EmpathyContact *contact)
        g_signal_connect_swapped (item, "activate",
                                  G_CALLBACK (contact_log_menu_item_activate_cb),
                                  contact);
-       
+
        return item;
 }
 
@@ -293,7 +293,7 @@ empathy_contact_info_menu_item_new (EmpathyContact *contact)
        g_signal_connect_swapped (item, "activate",
                                  G_CALLBACK (contact_info_menu_item_activate_cb),
                                  contact);
-       
+
        return item;
 }
 
@@ -320,7 +320,7 @@ empathy_contact_edit_menu_item_new (EmpathyContact *contact)
        g_signal_connect_swapped (item, "activate",
                                  G_CALLBACK (contact_edit_menu_item_activate_cb),
                                  contact);
-       
+
        return item;
 }
 
index 8126a8e5975e36b03d75349d9499a13aa2a9d285..262ec9650ac7a8314e0915d455a76e7ea638f9a9 100644 (file)
@@ -22,7 +22,7 @@
 #ifndef __EMPATHY_CONTACT_MENU_H__
 #define __EMPATHY_CONTACT_MENU_H__
 
-#include <gtk/gtkmenu.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-contact.h>
 
index 6c10153649cb31e1e2547471243388c6dc24207b..12a1393034f3baac6ca219d4be3275d9f0127f41 100644 (file)
@@ -105,7 +105,7 @@ typedef struct
 #if HAVE_LIBCHAMPLAIN
   GtkWidget *viewport_map;
   GtkWidget *map_view_embed;
-  ClutterActor *map_view;
+  ChamplainView *map_view;
 #endif
 
   /* Groups */
@@ -1420,9 +1420,9 @@ contact_widget_location_update (EmpathyContactWidget *information)
       ClutterActor *marker;
       ChamplainLayer *layer;
 
-      information->map_view = champlain_view_new ();
-      information->map_view_embed = champlain_view_embed_new (
-          CHAMPLAIN_VIEW (information->map_view));
+      information->map_view_embed = gtk_champlain_embed_new ();
+      information->map_view = gtk_champlain_embed_get_view (
+          GTK_CHAMPLAIN_EMBED (information->map_view_embed));
 
       gtk_container_add (GTK_CONTAINER (information->viewport_map),
           information->map_view_embed);
@@ -1431,14 +1431,14 @@ contact_widget_location_update (EmpathyContactWidget *information)
           NULL);
 
       layer = champlain_layer_new ();
-      champlain_view_add_layer (CHAMPLAIN_VIEW (information->map_view), layer);
+      champlain_view_add_layer (information->map_view, layer);
 
       marker = champlain_marker_new_with_text (
           empathy_contact_get_name (information->contact), NULL, NULL, NULL);
       champlain_base_marker_set_position (CHAMPLAIN_BASE_MARKER (marker), lat, lon);
       clutter_container_add (CLUTTER_CONTAINER (layer), marker, NULL);
 
-      champlain_view_center_on (CHAMPLAIN_VIEW(information->map_view), lat, lon);
+      champlain_view_center_on (information->map_view, lat, lon);
       gtk_widget_show_all (information->viewport_map);
     }
 #endif
index a46b2c6a0e799ca10024685f8a7049b2bdbbcfe9..c5bbd5bbe87705321247c73fea7b7ddee89536ab 100644 (file)
           <object class="GtkLabel" id="label654">
             <property name="visible">True</property>
             <property name="xalign">0</property>
-            <property name="label" translatable="yes">&lt;b&gt;Contact&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Contact</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
           <packing>
             <property name="expand">False</property>
           <object class="GtkLabel" id="label672">
             <property name="visible">True</property>
             <property name="xalign">0</property>
-            <property name="label" translatable="yes">&lt;b&gt;Groups&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Groups</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
           <packing>
             <property name="expand">False</property>
           <object class="GtkLabel" id="label649">
             <property name="visible">True</property>
             <property name="xalign">0</property>
-            <property name="label" translatable="yes">&lt;b&gt;Contact Details&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Contact Details</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
           <packing>
             <property name="expand">False</property>
           <object class="GtkLabel" id="label662">
             <property name="visible">True</property>
             <property name="xalign">0</property>
-            <property name="label" translatable="yes">&lt;b&gt;Client Information&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
+            <property name="label" translatable="yes">Client Information</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
           </object>
           <packing>
             <property name="expand">False</property>
index 98584969688fb47919a194b991e940091aa285ea..df4a8b152a4b4caf1c4a45f440aeb723b4f42bd5 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef __EMPATHY_IRC_NETWORK_DIALOG_H__
 #define __EMPATHY_IRC_NETWORK_DIALOG_H__
 
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 
 #include <libempathy/empathy-irc-network.h>
 
index fb804315ce39bb1c8e01c709be30d4bf4982395f..278af72f263d0e88f093cb8963140cb6ea0911a3 100644 (file)
@@ -302,7 +302,10 @@ address_changed_cb (GeoclueAddress *address,
   g_hash_table_remove (priv->location, EMPATHY_LOCATION_POSTAL_CODE);
 
   if (g_hash_table_size (details) == 0)
-    return;
+    {
+      DEBUG ("\t - (Empty)");
+      return;
+    }
 
   g_hash_table_iter_init (&iter, details);
   while (g_hash_table_iter_next (&iter, &key, &value))
@@ -449,17 +452,20 @@ update_resources (EmpathyLocationManager *location_manager)
 
   DEBUG ("Updating resources %d", priv->resources);
 
+  if (!priv->geoclue_is_setup)
+    return;
+
+  /* As per Geoclue bug #15126, using NONE results in no address
+   * being found as geoclue-manual report an empty address with
+   * accuracy = NONE */
   if (!geoclue_master_client_set_requirements (priv->gc_client,
-          GEOCLUE_ACCURACY_LEVEL_NONE, 0, TRUE, priv->resources,
+          GEOCLUE_ACCURACY_LEVEL_COUNTRY, 0, TRUE, priv->resources,
           NULL))
     {
       DEBUG ("set_requirements failed");
       return;
     }
 
-  if (!priv->geoclue_is_setup)
-    return;
-
   geoclue_address_get_address_async (priv->gc_address,
       initial_address_cb, location_manager);
   geoclue_position_get_position_async (priv->gc_position,
@@ -476,9 +482,16 @@ setup_geoclue (EmpathyLocationManager *location_manager)
 
   DEBUG ("Setting up Geoclue");
   master = geoclue_master_get_default ();
-  priv->gc_client = geoclue_master_create_client (master, NULL, NULL);
+  priv->gc_client = geoclue_master_create_client (master, NULL, &error);
   g_object_unref (master);
 
+  if (priv->gc_client == NULL)
+    {
+      DEBUG ("Failed to GeoclueMasterClient: %s", error->message);
+      g_error_free (error);
+      return;
+    }
+
   update_resources (location_manager);
 
   /* Get updated when the position is changes */
index dc2efa33246d7ad93f4d8eb7e7209749a12014b4..21d73f8eaf503e7de2a67db664983e59f998b857 100644 (file)
@@ -320,7 +320,7 @@ log_window_find_changed_cb (GtkTreeSelection *selection,
                gtk_widget_set_sensitive (window->button_next, FALSE);
 
                empathy_chat_view_clear (window->chatview_find);
-       
+
                return;
        }
 
@@ -646,7 +646,7 @@ log_window_chats_populate (EmpathyLogWindow *window)
                gtk_list_store_append (store, &iter);
                gtk_list_store_set (store, &iter,
                                    COL_CHAT_ICON, "empathy-available", /* FIXME */
-                                   COL_CHAT_NAME, hit->chat_id,                                
+                                   COL_CHAT_NAME, hit->chat_id,
                                    COL_CHAT_ACCOUNT, account,
                                    COL_CHAT_ID, hit->chat_id,
                                    COL_CHAT_IS_CHATROOM, hit->is_chatroom,
index 512cd1ba384615e4ab2179d17e99fa7e57a0c147..9aee42913aa2fe65482925eaf2c1642f583505bc 100644 (file)
@@ -239,7 +239,7 @@ new_message_change_state_button_cb  (GtkEditable             *editable,
 
        id = gtk_entry_get_text (GTK_ENTRY (editable));
        sensitive = !EMP_STR_EMPTY (id);
-       
+
        gtk_widget_set_sensitive (dialog->button_chat, sensitive);
        gtk_widget_set_sensitive (dialog->button_call, sensitive);
 }
index c1781d0cf8788fb830443db53b12ae84682eb71c..08887c5e8c8f093ceb90f452349f5fdec6c41217 100644 (file)
@@ -22,7 +22,7 @@
 #ifndef __EMPATHY_NEW_MESSAGE_DIALOG_H__
 #define __EMPATHY_NEW_MESSAGE_DIALOG_H__
 
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
diff --git a/libempathy-gtk/empathy-plist.c b/libempathy-gtk/empathy-plist.c
new file mode 100644 (file)
index 0000000..4cc392b
--- /dev/null
@@ -0,0 +1,336 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 Christophe Fergeau <teuf@gnome.org>
+ * Based on itdb_plist parser from the gtkpod project.
+ *
+ * The code contained in this file is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either version
+ * 2.1 of the License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <telepathy-glib/util.h>
+#include <telepathy-glib/dbus.h>
+
+#include "empathy-plist.h"
+
+static GValue *empathy_plist_parse_node (xmlNode *a_node);
+
+static GValue *
+empathy_plist_parse_integer (xmlNode *a_node)
+{
+       char *str_val;
+       char *end_ptr;
+       gint int_val;
+
+       str_val = (char *) xmlNodeGetContent (a_node);
+       int_val = strtol (str_val, &end_ptr, 0);
+       if (*end_ptr != '\0') {
+               xmlFree (str_val);
+               return NULL;
+       }
+       xmlFree (str_val);
+
+       return tp_g_value_slice_new_int (int_val);
+}
+
+static GValue *
+empathy_plist_parse_string (xmlNode *a_node)
+{
+       char *str_val;
+       GValue *value;
+
+       str_val = (char *) xmlNodeGetContent (a_node);
+
+       value = tp_g_value_slice_new_string (str_val);
+
+       xmlFree (str_val);
+
+       return value;
+}
+
+static GValue *
+empathy_plist_parse_real (xmlNode *a_node)
+{
+       char *str_val;
+       char *end_ptr;
+       gdouble double_val;
+
+       str_val = (char *) xmlNodeGetContent (a_node);
+       double_val = g_ascii_strtod (str_val, &end_ptr);
+       if (*end_ptr != '\0') {
+               xmlFree (str_val);
+               return NULL;
+       }
+       xmlFree (str_val);
+
+       return tp_g_value_slice_new_double (double_val);
+}
+
+static GValue *
+empathy_plist_parse_boolean (xmlNode *a_node)
+{
+       gboolean bool_val;
+
+       if (strcmp ((char *) a_node->name, "true") == 0) {
+               bool_val = TRUE;
+       } else if (strcmp ((char *) a_node->name, "false") == 0) {
+               bool_val = FALSE;
+       } else {
+               return NULL;
+       }
+
+       return tp_g_value_slice_new_boolean (bool_val);
+}
+
+static GValue *
+empathy_plist_parse_data (xmlNode *a_node)
+{
+       char *str_val;
+       guchar *raw_data;
+       gsize len;
+       GValue *value;
+
+       str_val = (char *) xmlNodeGetContent (a_node);
+       raw_data = g_base64_decode (str_val, &len);
+       xmlFree (str_val);
+
+       value = tp_g_value_slice_new_bytes (len, raw_data);
+
+       g_free (raw_data);
+
+       return value;
+}
+
+static xmlNode *
+empathy_plist_parse_one_dict_entry (xmlNode *a_node, GHashTable *dict)
+{
+       xmlNode *cur_node = a_node;
+       xmlChar *key_name;
+       GValue *value;
+
+       while (cur_node &&
+              (xmlStrcmp (cur_node->name, (xmlChar *) "key") != 0)) {
+               cur_node = cur_node->next;
+       }
+       if (!cur_node) {
+               return NULL;
+       }
+       key_name = xmlNodeGetContent (cur_node);
+       cur_node = cur_node->next;
+       while (cur_node && xmlIsBlankNode (cur_node)) {
+               cur_node = cur_node->next;
+       }
+       if (!cur_node) {
+               xmlFree (key_name);
+               return NULL;
+       }
+
+       value = empathy_plist_parse_node (cur_node);
+       if (value) {
+               g_hash_table_insert (dict, g_strdup ((char *) key_name), value);
+       }
+       xmlFree (key_name);
+
+       return cur_node->next;
+}
+
+static GValue *
+empathy_plist_parse_dict (xmlNode *a_node)
+{
+       xmlNode *cur_node = a_node->children;
+       GHashTable *dict;
+
+       dict = g_hash_table_new_full (g_str_hash, g_str_equal,
+                                     g_free, (GDestroyNotify) tp_g_value_slice_free);
+
+       while (cur_node) {
+               if (xmlIsBlankNode (cur_node)) {
+                       cur_node = cur_node->next;
+               } else {
+                       cur_node = empathy_plist_parse_one_dict_entry (cur_node, dict);
+               }
+       }
+
+       return tp_g_value_slice_new_take_boxed (G_TYPE_HASH_TABLE, dict);
+}
+
+static GValue *
+empathy_plist_parse_array (xmlNode *a_node)
+{
+       xmlNode *cur_node = a_node->children;
+       GValueArray *array;
+
+       array = g_value_array_new (4);
+
+       while (cur_node) {
+               GValue *cur_value;
+
+               cur_value = empathy_plist_parse_node (cur_node);
+               if (cur_value) {
+                       g_value_array_append (array, cur_value);
+                       tp_g_value_slice_free (cur_value);
+               }
+
+               /* When an array contains an element enclosed in "unknown" tags (ie
+                * non-type ones), we silently skip them since early
+                * SysInfoExtended files used to have <key> values enclosed within
+                * <array> tags.
+                */
+               cur_node = cur_node->next;
+       }
+
+       return tp_g_value_slice_new_take_boxed (G_TYPE_VALUE_ARRAY, array);
+}
+
+typedef GValue *(*ParseCallback) (xmlNode *);
+
+struct Parser {
+       const char * const type_name;
+       ParseCallback parser;
+};
+
+static const struct Parser parsers[] = { {"integer", empathy_plist_parse_integer},
+                                        {"real",    empathy_plist_parse_real},
+                                        {"string",  empathy_plist_parse_string},
+                                        {"true",    empathy_plist_parse_boolean},
+                                        {"false",   empathy_plist_parse_boolean},
+                                        {"data",    empathy_plist_parse_data},
+                                        {"dict",    empathy_plist_parse_dict},
+                                        {"array",   empathy_plist_parse_array},
+                                        {NULL,   NULL} };
+
+static ParseCallback
+empathy_plist_get_parser_for_type (const xmlChar *type)
+{
+       guint i = 0;
+
+       while (parsers[i].type_name) {
+               if (xmlStrcmp (type, (xmlChar *) parsers[i].type_name) == 0) {
+                       if (parsers[i].parser) {
+                               return parsers[i].parser;
+                       }
+               }
+               i++;
+       }
+       return NULL;
+}
+
+static GValue *
+empathy_plist_parse_node (xmlNode *a_node)
+{
+       ParseCallback parser;
+
+       g_return_val_if_fail (a_node != NULL, NULL);
+       parser = empathy_plist_get_parser_for_type (a_node->name);
+       if (parser) {
+               return parser (a_node);
+       } else {
+               return NULL;
+       }
+}
+
+static GValue *
+empathy_plist_parse (xmlNode * a_node)
+{
+       xmlNode *cur_node;
+
+       if (!a_node) {
+               return NULL;
+       }
+       if (xmlStrcmp (a_node->name, (xmlChar *) "plist") != 0) {
+               return NULL;
+       }
+       cur_node = a_node->xmlChildrenNode;
+       while (cur_node && (xmlIsBlankNode (cur_node))) {
+               cur_node = cur_node->next;
+       }
+       if (cur_node) {
+               return empathy_plist_parse_node (cur_node);
+       }
+
+       return NULL;
+}
+
+/**
+ * empathy_plist_parse_from_file:
+ * @filename: file containing XML plist data to parse
+ *
+ * Parses the XML plist file. If an error occurs during the parsing,
+ * empathy_plist_parse_from_file() will return NULL.
+ *
+ * Returns: NULL on error, a newly allocated
+ * #GValue otherwise. Free it using tp_g_value_slice_free()
+ */
+GValue *
+empathy_plist_parse_from_file (const char *filename)
+{
+       xmlDoc *doc = NULL;
+       xmlNode *root_element = NULL;
+       GValue *parsed_doc;
+
+       doc = xmlReadFile (filename, NULL, 0);
+
+       if (!doc) {
+               return NULL;
+       }
+
+       root_element = xmlDocGetRootElement (doc);
+
+       parsed_doc = empathy_plist_parse (root_element);
+
+       xmlFreeDoc (doc);
+       xmlCleanupParser ();
+
+       return parsed_doc;
+}
+
+/**
+ * empathy_plist_parse_from_memory:
+ * @data:   memory location containing XML plist data to parse
+ * @len:       length in bytes of the string to parse
+ *
+ * Parses the XML plist file stored in @data which length is @len
+ * bytes. If an error occurs during the parsing,
+ * empathy_plist_parse_from_memory() will return NULL.
+ *
+ * Returns: NULL on error, a newly allocated
+ * #GValue otherwise. Free it using tp_g_value_slice_free()
+ */
+GValue *
+empathy_plist_parse_from_memory (const char *data, gsize len)
+{
+       xmlDoc *doc = NULL;
+       xmlNode *root_element = NULL;
+       GValue *parsed_doc;
+
+       doc = xmlReadMemory (data, len, "noname.xml", NULL, 0);
+
+       if (doc == NULL) {
+               return NULL;
+       }
+
+       root_element = xmlDocGetRootElement (doc);
+
+       parsed_doc = empathy_plist_parse (root_element);
+
+       xmlFreeDoc (doc);
+       xmlCleanupParser ();
+
+       return parsed_doc;
+}
+
diff --git a/libempathy-gtk/empathy-plist.h b/libempathy-gtk/empathy-plist.h
new file mode 100644 (file)
index 0000000..a15ad6a
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 Christophe Fergeau <teuf@gnome.org>
+ * Based on itdb_plist parser from the gtkpod project.
+ *
+ * The code contained in this file is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either version
+ * 2.1 of the License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef __EMPATHY_PLIST_H__
+#define __EMPATHY_PLIST_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+GValue * empathy_plist_parse_from_file (const char *filename);
+GValue * empathy_plist_parse_from_memory (const char *data, gsize len);
+
+G_END_DECLS
+
+#endif
index 879e04139ad5c80cf0fceacbb097f41975b1a971..8fba26ff7a2af9743f0e62243fbdafd8811a87b8 100644 (file)
@@ -293,7 +293,7 @@ presence_chooser_is_preset (EmpathyPresenceChooser *self)
        for (l = presets; l; l = l->next) {
                char *preset = (char *) l->data;
 
-               if (!strcmp (status, preset)) {
+               if (!tp_strdiff (status, preset)) {
                        match = TRUE;
                        break;
                }
@@ -468,6 +468,10 @@ presence_chooser_entry_icon_release_cb (EmpathyPresenceChooser *self,
                state = empathy_idle_get_state (priv->idle);
                status = empathy_idle_get_status (priv->idle);
 
+               if (!empathy_status_presets_is_valid (state))
+                       /* It doesn't make sense to add such presence as favorite */
+                       return;
+
                if (presence_chooser_is_preset (self)) {
                        /* remove the entry */
                        DEBUG ("REMOVING PRESET (%i, %s)\n", state, status);
index a729a2929c67ab0af78d50e82b932399c610e02f..900e9211c3953289421939f5a4dd9d6b5c647185 100644 (file)
@@ -37,9 +37,10 @@ typedef struct {
 } EmpathySmileyManagerPriv;
 
 struct _SmileyManagerTree {
-       gunichar   c;
-       GdkPixbuf *pixbuf;
-       GSList    *childrens;
+       gunichar     c;
+       GdkPixbuf   *pixbuf;
+       const gchar *path;
+       GSList      *childrens;
 };
 
 G_DEFINE_TYPE (EmpathySmileyManager, empathy_smiley_manager, G_TYPE_OBJECT);
@@ -55,6 +56,7 @@ smiley_manager_tree_new (gunichar c)
        tree->c = c;
        tree->pixbuf = NULL;
        tree->childrens = NULL;
+       tree->path = NULL;
 
        return tree;
 }
@@ -81,7 +83,7 @@ smiley_manager_tree_free (SmileyManagerTree *tree)
 
 /* Note: This function takes the ownership of str */
 static EmpathySmiley *
-smiley_new (GdkPixbuf *pixbuf, gchar *str)
+smiley_new (GdkPixbuf *pixbuf, gchar *str, const gchar *path)
 {
        EmpathySmiley *smiley;
 
@@ -90,6 +92,7 @@ smiley_new (GdkPixbuf *pixbuf, gchar *str)
                smiley->pixbuf = g_object_ref (pixbuf);
        }
        smiley->str = str;
+       smiley->path = path;
 
        return smiley;
 }
@@ -112,9 +115,16 @@ static void
 smiley_manager_finalize (GObject *object)
 {
        EmpathySmileyManagerPriv *priv = GET_PRIV (object);
+       GSList                   *l;
 
        smiley_manager_tree_free (priv->tree);
-       g_slist_foreach (priv->smileys, (GFunc) empathy_smiley_free, NULL);
+       for (l = priv->smileys; l; l = l->next) {
+               EmpathySmiley *smiley = l->data;
+
+               /* The smiley got the ownership of the path */
+               g_free ((gchar *) smiley->path);
+               empathy_smiley_free (smiley);
+       }
        g_slist_free (priv->smileys);
 }
 
@@ -201,8 +211,9 @@ smiley_manager_tree_find_or_insert_child (SmileyManagerTree *tree, gunichar c)
 
 static void
 smiley_manager_tree_insert (SmileyManagerTree *tree,
-                           GdkPixbuf         *smiley,
-                           const gchar       *str)
+                           GdkPixbuf         *pixbuf,
+                           const gchar       *str,
+                           const gchar       *path)
 {
        SmileyManagerTree *child;
 
@@ -210,28 +221,32 @@ smiley_manager_tree_insert (SmileyManagerTree *tree,
 
        str = g_utf8_next_char (str);
        if (*str) {
-               smiley_manager_tree_insert (child, smiley, str);
+               smiley_manager_tree_insert (child, pixbuf, str, path);
                return;
        }
 
-       child->pixbuf = g_object_ref (smiley);
+       child->pixbuf = g_object_ref (pixbuf);
+       child->path = path;
 }
 
 static void
 smiley_manager_add_valist (EmpathySmileyManager *manager,
-                          GdkPixbuf            *smiley,
+                          GdkPixbuf            *pixbuf,
+                          gchar                *path,
                           const gchar          *first_str,
                           va_list               var_args)
 {
        EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
        const gchar              *str;
+       EmpathySmiley            *smiley;
 
        for (str = first_str; str; str = va_arg (var_args, gchar*)) {
-               smiley_manager_tree_insert (priv->tree, smiley, str);
+               smiley_manager_tree_insert (priv->tree, pixbuf, str, path);
        }
 
-       priv->smileys = g_slist_prepend (priv->smileys,
-               smiley_new (smiley, g_strdup (first_str)));
+       /* We give the ownership of path to the smiley */
+       smiley = smiley_new (pixbuf, g_strdup (first_str), path);
+       priv->smileys = g_slist_prepend (priv->smileys, smiley);
 }
 
 void
@@ -240,39 +255,25 @@ empathy_smiley_manager_add (EmpathySmileyManager *manager,
                            const gchar          *first_str,
                            ...)
 {
-       GdkPixbuf *smiley;
+       GdkPixbuf *pixbuf;
        va_list    var_args;
 
        g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager));
        g_return_if_fail (!EMP_STR_EMPTY (icon_name));
        g_return_if_fail (!EMP_STR_EMPTY (first_str));
 
-       smiley = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
-       if (smiley) {
+       pixbuf = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
+       if (pixbuf) {
+               gchar *path;
+
                va_start (var_args, first_str);
-               smiley_manager_add_valist (manager, smiley, first_str, var_args);
+               path = empathy_filename_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
+               smiley_manager_add_valist (manager, pixbuf, path, first_str, var_args);
                va_end (var_args);
-               g_object_unref (smiley);
+               g_object_unref (pixbuf);
        }
 }
 
-void
-empathy_smiley_manager_add_from_pixbuf (EmpathySmileyManager *manager,
-                                       GdkPixbuf            *smiley,
-                                       const gchar          *first_str,
-                                       ...)
-{
-       va_list var_args;
-
-       g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager));
-       g_return_if_fail (GDK_IS_PIXBUF (smiley));
-       g_return_if_fail (!EMP_STR_EMPTY (first_str));
-
-       va_start (var_args, first_str);
-       smiley_manager_add_valist (manager, smiley, first_str, var_args);
-       va_end (var_args);
-}
-
 void
 empathy_smiley_manager_load (EmpathySmileyManager *manager)
 {
@@ -313,14 +314,16 @@ empathy_smiley_manager_parse (EmpathySmileyManager *manager,
        for (t = text; *t; t = g_utf8_next_char (t)) {
                SmileyManagerTree *child;
                gunichar           c;
-               
+
                c = g_utf8_get_char (t);
                child = smiley_manager_tree_find_child (cur_tree, c);
 
                if (cur_tree == priv->tree) {
                        if (child) {
                                if (t > cur_str) {
-                                       smiley = smiley_new (NULL, g_strndup (cur_str, t - cur_str));
+                                       smiley = smiley_new (NULL,
+                                                            g_strndup (cur_str, t - cur_str),
+                                                            NULL);
                                        smileys = g_slist_prepend (smileys, smiley);
                                }
                                cur_str = t;
@@ -335,7 +338,9 @@ empathy_smiley_manager_parse (EmpathySmileyManager *manager,
                        continue;
                }
 
-               smiley = smiley_new (cur_tree->pixbuf, g_strndup (cur_str, t - cur_str));
+               smiley = smiley_new (cur_tree->pixbuf,
+                                    g_strndup (cur_str, t - cur_str),
+                                    cur_tree->path);
                smileys = g_slist_prepend (smileys, smiley);
                if (cur_tree->pixbuf) {
                        cur_str = t;
@@ -350,7 +355,9 @@ empathy_smiley_manager_parse (EmpathySmileyManager *manager,
                }
        }
 
-       smiley = smiley_new (cur_tree->pixbuf, g_strndup (cur_str, t - cur_str));
+       smiley = smiley_new (cur_tree->pixbuf,
+                            g_strndup (cur_str, t - cur_str),
+                            cur_tree->path);
        smileys = g_slist_prepend (smileys, smiley);
 
        return g_slist_reverse (smileys);
index 5eaf4b283966da177514397703372af337d6226d..dc7428c3bbb22290ffa19c2931215e59f2882283 100644 (file)
@@ -48,8 +48,9 @@ struct _EmpathySmileyManagerClass {
 };
 
 typedef struct {
-       GdkPixbuf *pixbuf;
-       gchar     *str;
+       GdkPixbuf   *pixbuf;
+       gchar       *str;
+       const gchar *path;
 } EmpathySmiley;
 
 typedef void (*EmpathySmileyMenuFunc) (EmpathySmileyManager *manager,
@@ -63,10 +64,6 @@ void                  empathy_smiley_manager_add             (EmpathySmileyManag
                                                              const gchar          *icon_name,
                                                              const gchar          *first_str,
                                                              ...);
-void                  empathy_smiley_manager_add_from_pixbuf (EmpathySmileyManager *manager,
-                                                             GdkPixbuf            *smiley,
-                                                             const gchar          *first_str,
-                                                             ...);
 GSList *              empathy_smiley_manager_get_all         (EmpathySmileyManager *manager);
 GSList *              empathy_smiley_manager_parse           (EmpathySmileyManager *manager,
                                                              const gchar          *text);
diff --git a/libempathy-gtk/empathy-sound.c b/libempathy-gtk/empathy-sound.c
new file mode 100644 (file)
index 0000000..d97f72b
--- /dev/null
@@ -0,0 +1,385 @@
+/*
+ * empathy-sound.c - Various sound related utility functions.
+ * Copyright (C) 2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <config.h>
+
+#include "empathy-sound.h"
+
+#include <canberra-gtk.h>
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-conf.h"
+
+typedef struct {
+  EmpathySound sound_id;
+  const char * event_ca_id;
+  const char * event_ca_description;
+  const char * gconf_key;
+} EmpathySoundEntry;
+
+typedef struct {
+  GtkWidget *widget;
+  gint sound_id;
+  guint play_interval;
+  guint replay_timeout_id;
+} EmpathyRepeatableSound;
+
+/* NOTE: these entries MUST be in the same order than EmpathySound enum */
+static EmpathySoundEntry sound_entries[LAST_EMPATHY_SOUND] = {
+  { EMPATHY_SOUND_MESSAGE_INCOMING, "message-new-instant",
+    N_("Received an instant message"), EMPATHY_PREFS_SOUNDS_INCOMING_MESSAGE } ,
+  { EMPATHY_SOUND_MESSAGE_OUTGOING, "message-sent-instant",
+    N_("Sent an instant message"), EMPATHY_PREFS_SOUNDS_OUTGOING_MESSAGE } ,
+  { EMPATHY_SOUND_CONVERSATION_NEW, "message-new-instant",
+    N_("Incoming chat request"), EMPATHY_PREFS_SOUNDS_NEW_CONVERSATION },
+  { EMPATHY_SOUND_CONTACT_CONNECTED, "service-login",
+    N_("Contact connected"), EMPATHY_PREFS_SOUNDS_CONTACT_LOGIN },
+  { EMPATHY_SOUND_CONTACT_DISCONNECTED, "service-logout",
+    N_("Contact disconnected"), EMPATHY_PREFS_SOUNDS_CONTACT_LOGOUT },
+  { EMPATHY_SOUND_ACCOUNT_CONNECTED, "service-login",
+    N_("Connected to server"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGIN },
+  { EMPATHY_SOUND_ACCOUNT_DISCONNECTED, "service-logout",
+    N_("Disconnected from server"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGOUT },
+  { EMPATHY_SOUND_PHONE_INCOMING, "phone-incoming-call",
+    N_("Incoming voice call"), NULL },
+  { EMPATHY_SOUND_PHONE_OUTGOING, "phone-outgoing-calling",
+    N_("Outgoing voice call"), NULL },
+  { EMPATHY_SOUND_PHONE_HANGUP, "phone-hangup",
+    N_("Voice call ended"), NULL },
+};
+
+/* An hash table containing currently repeating sounds. The format is the
+ * following:
+ * Key: An EmpathySound
+ * Value : The EmpathyRepeatableSound associated with that EmpathySound. */
+static GHashTable *repeating_sounds;
+
+static gboolean
+empathy_sound_pref_is_enabled (EmpathySound sound_id)
+{
+  EmpathySoundEntry *entry;
+  EmpathyConf *conf;
+  gboolean res;
+
+  entry = &(sound_entries[sound_id]);
+  g_return_val_if_fail (entry->sound_id == sound_id, FALSE);
+
+  if (entry->gconf_key == NULL)
+    return TRUE;
+
+  conf = empathy_conf_get ();
+  res = FALSE;
+
+  empathy_conf_get_bool (conf, EMPATHY_PREFS_SOUNDS_ENABLED, &res);
+
+  if (!res)
+    return FALSE;
+
+  if (!empathy_check_available_state ())
+    {
+      empathy_conf_get_bool (conf, EMPATHY_PREFS_SOUNDS_DISABLED_AWAY, &res);
+
+      if (res)
+        return FALSE;
+    }
+
+  empathy_conf_get_bool (conf, entry->gconf_key, &res);
+
+  return res;
+}
+
+/**
+ * empathy_sound_stop:
+ * @sound_id: The #EmpathySound to stop playing.
+ *
+ * Stop playing a sound. If it has been stated in loop with
+ * empathy_sound_start_playing(), it will also stop replaying.
+ */
+void
+empathy_sound_stop (EmpathySound sound_id)
+{
+  EmpathySoundEntry *entry;
+
+  g_return_if_fail (sound_id < LAST_EMPATHY_SOUND);
+
+  entry = &(sound_entries[sound_id]);
+  g_return_if_fail (entry->sound_id == sound_id);
+
+  if (repeating_sounds != NULL)
+    {
+      EmpathyRepeatableSound *repeatable_sound;
+
+      repeatable_sound = g_hash_table_lookup (repeating_sounds,
+          GINT_TO_POINTER (sound_id));
+      if (repeatable_sound != NULL)
+        {
+          /* The sound must be stopped... If it is waiting for replay, remove
+           * it from hash table to cancel. Otherwise we'll cancel the sound
+           * being played. */
+          if (repeatable_sound->replay_timeout_id != 0)
+            {
+              g_hash_table_remove (repeating_sounds, GINT_TO_POINTER (sound_id));
+              return;
+            }
+        }
+    }
+
+  ca_context_cancel (ca_gtk_context_get (), entry->sound_id);
+}
+
+static gboolean
+empathy_sound_play_internal (GtkWidget *widget, EmpathySound sound_id,
+  ca_finish_callback_t callback, gpointer user_data)
+{
+  EmpathySoundEntry *entry;
+  ca_context *c;
+  ca_proplist *p = NULL;
+
+  entry = &(sound_entries[sound_id]);
+  g_return_val_if_fail (entry->sound_id == sound_id, FALSE);
+
+  c = ca_gtk_context_get ();
+  ca_context_cancel (c, entry->sound_id);
+
+  DEBUG ("Play sound \"%s\" (%s)",
+         entry->event_ca_id,
+         entry->event_ca_description);
+
+  if (ca_proplist_create (&p) < 0)
+    goto failed;
+
+  if (ca_proplist_sets (p, CA_PROP_EVENT_ID, entry->event_ca_id) < 0)
+    goto failed;
+
+  if (ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION,
+          gettext (entry->event_ca_id)) < 0)
+    goto failed;
+
+  if (ca_gtk_proplist_set_for_widget (p, widget) < 0)
+    goto failed;
+
+  ca_context_play_full (ca_gtk_context_get (), entry->sound_id, p, callback,
+      user_data);
+
+  ca_proplist_destroy (p);
+
+  return TRUE;
+
+failed:
+  if (p != NULL)
+    ca_proplist_destroy (p);
+
+  return FALSE;
+}
+
+/**
+ * empathy_sound_play_full:
+ * @widget: The #GtkWidget from which the sound is originating.
+ * @sound_id: The #EmpathySound to play.
+ * @callback: The #ca_finish_callback_t function that will be called when the
+ *            sound  has stopped playing.
+ * @user_data: user data to pass to the function.
+ *
+ * Plays a sound.
+ *
+ * Returns %TRUE if the sound has successfully started playing, otherwise
+ * returning %FALSE and @callback won't be called.
+ *
+ * This function returns %FALSE if the sound is already playing in loop using
+ * %empathy_sound_start_playing.
+ *
+ * This function returns %FALSE if the sound is disabled in empathy preferences.
+ *
+ * Return value: %TRUE if the sound has successfully started playing, %FALSE
+ *               otherwise.
+ */
+gboolean
+empathy_sound_play_full (GtkWidget *widget, EmpathySound sound_id,
+  ca_finish_callback_t callback, gpointer user_data)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+  g_return_val_if_fail (sound_id < LAST_EMPATHY_SOUND, FALSE);
+
+  if (!empathy_sound_pref_is_enabled (sound_id))
+    return FALSE;
+
+  /* The sound might already be playing repeatedly. If it's the case, we
+   * immediadely return since there's no need to make it play again */
+  if (repeating_sounds != NULL &&
+      g_hash_table_lookup (repeating_sounds, GINT_TO_POINTER (sound_id)) != NULL)
+    return FALSE;
+
+  return empathy_sound_play_internal (widget, sound_id, callback, user_data);
+}
+
+/**
+ * empathy_sound_play:
+ * @widget: The #GtkWidget from which the sound is originating.
+ * @sound_id: The #EmpathySound to play.
+ *
+ * Plays a sound. See %empathy_sound_play_full for details.'
+ *
+ * Return value: %TRUE if the sound has successfully started playing, %FALSE
+ *               otherwise.
+ */
+gboolean
+empathy_sound_play (GtkWidget *widget, EmpathySound sound_id)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+  g_return_val_if_fail (sound_id < LAST_EMPATHY_SOUND, FALSE);
+
+  return empathy_sound_play_full (widget, sound_id, NULL, NULL);
+}
+
+static void playing_finished_cb (ca_context *c, guint id, int error_code,
+  gpointer user_data);
+
+static gboolean
+playing_timeout_cb (gpointer data)
+{
+  EmpathyRepeatableSound *repeatable_sound = data;
+  gboolean playing;
+
+  repeatable_sound->replay_timeout_id = 0;
+
+  playing = empathy_sound_play_internal (repeatable_sound->widget,
+      repeatable_sound->sound_id, playing_finished_cb, data);
+
+  if (!playing)
+    {
+      DEBUG ("Failed to replay sound, stop repeating");
+      g_hash_table_remove (repeating_sounds,
+          GINT_TO_POINTER (repeatable_sound->sound_id));
+    }
+
+  return FALSE;
+}
+
+static void
+playing_finished_cb (ca_context *c, guint id, int error_code,
+  gpointer user_data)
+{
+  EmpathyRepeatableSound *repeatable_sound = user_data;
+
+  if (error_code != CA_SUCCESS)
+    {
+      DEBUG ("Error: %s", ca_strerror (error_code));
+      g_hash_table_remove (repeating_sounds,
+          GINT_TO_POINTER (repeatable_sound->sound_id));
+      return;
+    }
+
+  repeatable_sound->replay_timeout_id = g_timeout_add (
+      repeatable_sound->play_interval, playing_timeout_cb, user_data);
+}
+
+static void
+empathy_sound_widget_destroyed_cb (GtkWidget *widget, gpointer user_data)
+{
+  EmpathyRepeatableSound *repeatable_sound = user_data;
+
+  /* The sound must be stopped... If it is waiting for replay, remove
+   * it from hash table to cancel. Otherwise playing_finished_cb will be
+   * called with an error. */
+  if (repeatable_sound->replay_timeout_id != 0)
+    {
+      g_hash_table_remove (repeating_sounds,
+          GINT_TO_POINTER (repeatable_sound->sound_id));
+    }
+}
+
+static void
+repeating_sounds_item_delete (gpointer data)
+{
+  EmpathyRepeatableSound *repeatable_sound = data;
+
+  if (repeatable_sound->replay_timeout_id != 0)
+    g_source_remove (repeatable_sound->replay_timeout_id);
+
+  g_signal_handlers_disconnect_by_func (repeatable_sound->widget,
+      empathy_sound_widget_destroyed_cb, repeatable_sound);
+
+  g_slice_free (EmpathyRepeatableSound, repeatable_sound);
+}
+
+/**
+ * empathy_sound_start_playing:
+ * @widget: The #GtkWidget from which the sound is originating.
+ * @sound_id: The #EmpathySound to play.
+ * @timeout_before_replay: The amount of time, in milliseconds, between two
+ *                         consecutive play.
+ *
+ * Start playing a sound in loop. To stop the sound, call empathy_call_stop ()
+ * by passing it the same @sound_id. Note that if you start playing a sound
+ * multiple times, you'll have to call %empathy_sound_stop the same number of
+ * times.
+ *
+ * Return value: %TRUE if the sound has successfully started playing.
+ */
+gboolean
+empathy_sound_start_playing (GtkWidget *widget, EmpathySound sound_id,
+    guint timeout_before_replay)
+{
+  EmpathyRepeatableSound *repeatable_sound;
+  gboolean playing = FALSE;
+
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+  g_return_val_if_fail (sound_id < LAST_EMPATHY_SOUND, FALSE);
+
+  if (!empathy_sound_pref_is_enabled (sound_id))
+    return FALSE;
+
+  if (repeating_sounds == NULL)
+    {
+      repeating_sounds = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+          NULL, repeating_sounds_item_delete);
+    }
+  else if (g_hash_table_lookup (repeating_sounds,
+               GINT_TO_POINTER (sound_id)) != NULL)
+    {
+      /* The sound is already playing in loop. No need to continue. */
+      return FALSE;
+    }
+
+  repeatable_sound = g_slice_new0 (EmpathyRepeatableSound);
+  repeatable_sound->widget = widget;
+  repeatable_sound->sound_id = sound_id;
+  repeatable_sound->play_interval = timeout_before_replay;
+  repeatable_sound->replay_timeout_id = 0;
+
+  g_hash_table_insert (repeating_sounds, GINT_TO_POINTER (sound_id),
+      repeatable_sound);
+
+  g_signal_connect (G_OBJECT (widget), "destroy",
+      G_CALLBACK (empathy_sound_widget_destroyed_cb),
+      repeatable_sound);
+
+  playing = empathy_sound_play_internal (widget, sound_id, playing_finished_cb,
+        repeatable_sound);
+
+  if (!playing)
+      g_hash_table_remove (repeating_sounds, GINT_TO_POINTER (sound_id));
+
+  return playing;
+}
diff --git a/libempathy-gtk/empathy-sound.h b/libempathy-gtk/empathy-sound.h
new file mode 100644 (file)
index 0000000..f65f626
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * empathy-sound.h - Various sound related utility functions.
+ * Copyright (C) 2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+
+#ifndef __EMPATHY_SOUND_H__
+#define __EMPATHY_SOUND_H__
+
+#include <gtk/gtk.h>
+
+#include <canberra-gtk.h>
+
+G_BEGIN_DECLS
+
+/* NOTE: Keep this sync with sound_entries in empathy-sound.c */
+typedef enum {
+       EMPATHY_SOUND_MESSAGE_INCOMING = 0,
+       EMPATHY_SOUND_MESSAGE_OUTGOING,
+       EMPATHY_SOUND_CONVERSATION_NEW,
+       EMPATHY_SOUND_CONTACT_CONNECTED,
+       EMPATHY_SOUND_CONTACT_DISCONNECTED,
+       EMPATHY_SOUND_ACCOUNT_CONNECTED,
+       EMPATHY_SOUND_ACCOUNT_DISCONNECTED,
+       EMPATHY_SOUND_PHONE_INCOMING,
+       EMPATHY_SOUND_PHONE_OUTGOING,
+       EMPATHY_SOUND_PHONE_HANGUP,
+       LAST_EMPATHY_SOUND,
+} EmpathySound;
+
+gboolean empathy_sound_play (GtkWidget *widget, EmpathySound sound_id);
+void empathy_sound_stop (EmpathySound sound_id);
+
+gboolean empathy_sound_start_playing (GtkWidget *widget, EmpathySound sound_id,
+    guint timeout_before_replay);
+
+gboolean empathy_sound_play_full (GtkWidget *widget, EmpathySound sound_id,
+    ca_finish_callback_t callback, gpointer user_data);
+
+G_END_DECLS
+
+#endif /* #ifndef __EMPATHY_SOUND_H__*/
index 9cd7c555bb4461fcbf29004c6006df86509ff205..076e81a0381bf46fb6d1023956f2b7705e5331d8 100644 (file)
@@ -175,7 +175,7 @@ spell_notify_languages_cb (EmpathyConf  *conf,
 
                enchant_broker_free_dict (lang->config, lang->speller);
                enchant_broker_free (lang->config);
-               
+
                g_slice_free (SpellLanguage, lang);
        }
 
@@ -363,7 +363,7 @@ empathy_spell_get_suggestions (const gchar *word)
 
                suggestions = enchant_dict_suggest (lang->speller, word, len,
                                                    &number_of_suggestions);
-               
+
                for (i = 0; i < number_of_suggestions; i++) {
                        suggestion_list = g_list_append (suggestion_list,
                                                         g_strdup (suggestions[i]));
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
new file mode 100644 (file)
index 0000000..b16a3e7
--- /dev/null
@@ -0,0 +1,1051 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008-2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include <webkit/webkitnetworkrequest.h>
+#include <telepathy-glib/dbus.h>
+#include <telepathy-glib/util.h>
+
+
+#include <libempathy/empathy-time.h>
+#include <libempathy/empathy-utils.h>
+#include <libmissioncontrol/mc-profile.h>
+
+#include "empathy-theme-adium.h"
+#include "empathy-smiley-manager.h"
+#include "empathy-conf.h"
+#include "empathy-ui-utils.h"
+#include "empathy-plist.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
+#include <libempathy/empathy-debug.h>
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyThemeAdium)
+
+/* "Join" consecutive messages with timestamps within five minutes */
+#define MESSAGE_JOIN_PERIOD 5*60
+
+typedef struct {
+       EmpathyAdiumData     *data;
+       EmpathySmileyManager *smiley_manager;
+       EmpathyContact       *last_contact;
+       time_t                last_timestamp;
+       gboolean              page_loaded;
+       GList                *message_queue;
+} EmpathyThemeAdiumPriv;
+
+struct _EmpathyAdiumData {
+       guint  ref_count;
+       gchar *path;
+       gchar *basedir;
+       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_nextcontent_html;
+       gsize  in_nextcontent_len;
+       gchar *out_content_html;
+       gsize  out_content_len;
+       gchar *out_nextcontent_html;
+       gsize  out_nextcontent_len;
+       gchar *status_html;
+       gsize  status_len;
+       GHashTable *info;
+};
+
+static void theme_adium_iface_init (EmpathyChatViewIface *iface);
+
+enum {
+       PROP_0,
+       PROP_ADIUM_DATA,
+};
+
+G_DEFINE_TYPE_WITH_CODE (EmpathyThemeAdium, empathy_theme_adium,
+                        WEBKIT_TYPE_WEB_VIEW,
+                        G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_CHAT_VIEW,
+                                               theme_adium_iface_init));
+
+static WebKitNavigationResponse
+theme_adium_navigation_requested_cb (WebKitWebView        *view,
+                                    WebKitWebFrame       *frame,
+                                    WebKitNetworkRequest *request,
+                                    gpointer              user_data)
+{
+       const gchar *uri;
+
+       uri = webkit_network_request_get_uri (request);
+       empathy_url_show (GTK_WIDGET (view), uri);
+
+       return WEBKIT_NAVIGATION_RESPONSE_IGNORE;
+}
+
+static void
+theme_adium_populate_popup_cb (WebKitWebView *view,
+                              GtkMenu       *menu,
+                              gpointer       user_data)
+{
+       GtkWidget *item;
+
+       /* Remove default menu items */
+       gtk_container_foreach (GTK_CONTAINER (menu),
+               (GtkCallback) gtk_widget_destroy, NULL);
+
+       /* Select all item */
+       item = gtk_image_menu_item_new_from_stock (GTK_STOCK_SELECT_ALL, NULL);
+       gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+       gtk_widget_show (item);
+
+       g_signal_connect_swapped (item, "activate",
+                                 G_CALLBACK (webkit_web_view_select_all),
+                                 view);
+
+       /* Copy menu item */
+       if (webkit_web_view_can_copy_clipboard (view)) {
+               item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL);
+               gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+               gtk_widget_show (item);
+
+               g_signal_connect_swapped (item, "activate",
+                                         G_CALLBACK (webkit_web_view_copy_clipboard),
+                                         view);
+       }
+
+       /* Clear menu item */
+       item = gtk_separator_menu_item_new ();
+       gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+       gtk_widget_show (item);
+
+       item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLEAR, NULL);
+       gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+       gtk_widget_show (item);
+
+       g_signal_connect_swapped (item, "activate",
+                                 G_CALLBACK (empathy_chat_view_clear),
+                                 view);
+
+       /* FIXME: Add open_link and copy_link when those bugs are fixed:
+        * https://bugs.webkit.org/show_bug.cgi?id=16092
+        * https://bugs.webkit.org/show_bug.cgi?id=16562
+        */
+}
+
+static gchar *
+theme_adium_parse_body (EmpathyThemeAdium *theme,
+                       const gchar       *text)
+{
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (theme);
+       gboolean               use_smileys = FALSE;
+       GSList                *smileys, *l;
+       GString               *string;
+       gint                   i;
+       GRegex                *uri_regex;
+       GMatchInfo            *match_info;
+       gboolean               match;
+       gchar                 *ret = NULL;
+       gint                   prev;
+
+       empathy_conf_get_bool (empathy_conf_get (),
+                              EMPATHY_PREFS_CHAT_SHOW_SMILEYS,
+                              &use_smileys);
+
+       if (use_smileys) {
+               /* Replace smileys by a <img/> tag */
+               string = g_string_sized_new (strlen (text));
+               smileys = empathy_smiley_manager_parse (priv->smiley_manager, text);
+               for (l = smileys; l; l = l->next) {
+                       EmpathySmiley *smiley;
+
+                       smiley = l->data;
+                       if (smiley->path) {
+                               g_string_append_printf (string,
+                                                       "<abbr title='%s'><img src=\"%s\"/ alt=\"%s\"/></abbr>",
+                                                       smiley->str, smiley->path, smiley->str);
+                       } else {
+                               gchar *str;
+
+                               str = g_markup_escape_text (smiley->str, -1);
+                               g_string_append (string, str);
+                               g_free (str);
+                       }
+                       empathy_smiley_free (smiley);
+               }
+               g_slist_free (smileys);
+
+               g_free (ret);
+               text = ret = g_string_free (string, FALSE);
+       }
+
+       /* Add <a href></a> arround links */
+       uri_regex = empathy_uri_regex_dup_singleton ();
+       match = g_regex_match (uri_regex, text, 0, &match_info);
+       if (match) {
+               gint last = 0;
+               gint s = 0, e = 0;
+
+               string = g_string_sized_new (strlen (text));
+               do {
+                       g_match_info_fetch_pos (match_info, 0, &s, &e);
+
+                       if (s > last) {
+                               /* Append the text between last link (or the
+                                * start of the message) and this link */
+                               g_string_append_len (string, text + last, s - last);
+                       }
+
+                       /* Append the link inside <a href=""></a> tag */
+                       g_string_append (string, "<a href=\"");
+                       g_string_append_len (string, text + s, e - s);
+                       g_string_append (string, "\">");
+                       g_string_append_len (string, text + s, e - s);
+                       g_string_append (string, "</a>");
+
+                       last = e;
+               } while (g_match_info_next (match_info, NULL));
+
+               if (e < strlen (text)) {
+                       /* Append the text after the last link */
+                       g_string_append_len (string, text + e, strlen (text) - e);
+               }
+
+               g_free (ret);
+               text = ret = g_string_free (string, FALSE);
+       }
+       g_match_info_free (match_info);
+       g_regex_unref (uri_regex);
+
+       /* Replace \n by <br/> */
+       string = NULL;
+       prev = 0;
+       for (i = 0; text[i] != '\0'; i++) {
+               if (text[i] == '\n') {
+                       if (!string ) {
+                               string = g_string_sized_new (strlen (text));
+                       }
+                       g_string_append_len (string, text + prev, i - prev);
+                       g_string_append (string, "<br/>");
+                       prev = i + 1;
+               }
+       }
+       if (string) {
+               g_string_append (string, text + prev);
+               g_free (ret);
+               text = ret = g_string_free (string, FALSE);
+       }
+
+       return ret;
+}
+
+static void
+escape_and_append_len (GString *string, const gchar *str, gint len)
+{
+       while (*str != '\0' && len != 0) {
+               switch (*str) {
+               case '\\':
+                       /* \ becomes \\ */
+                       g_string_append (string, "\\\\");
+                       break;
+               case '\"':
+                       /* " becomes \" */
+                       g_string_append (string, "\\\"");
+                       break;
+               case '\n':
+                       /* Remove end of lines */
+                       break;
+               default:
+                       g_string_append_c (string, *str);
+               }
+
+               str++;
+               len--;
+       }
+}
+
+static gboolean
+theme_adium_match (const gchar **str, const gchar *match)
+{
+       gint len;
+
+       len = strlen (match);
+       if (strncmp (*str, match, len) == 0) {
+               *str += len - 1;
+               return TRUE;
+       }
+
+       return FALSE;
+}
+
+static void
+theme_adium_append_html (EmpathyThemeAdium *theme,
+                        const gchar       *func,
+                        const gchar       *html, gsize len,
+                        const gchar       *message,
+                        const gchar       *avatar_filename,
+                        const gchar       *name,
+                        const gchar       *contact_id,
+                        const gchar       *service_name,
+                        const gchar       *message_classes,
+                        time_t             timestamp)
+{
+       GString     *string;
+       const gchar *cur = NULL;
+       gchar       *script;
+
+       /* Make some search-and-replace in the html code */
+       string = g_string_sized_new (len + strlen (message));
+       g_string_append_printf (string, "%s(\"", func);
+       for (cur = html; *cur != '\0'; cur++) {
+               const gchar *replace = NULL;
+               gchar       *dup_replace = NULL;
+
+               if (theme_adium_match (&cur, "%message%")) {
+                       replace = message;
+               } else if (theme_adium_match (&cur, "%messageClasses%")) {
+                       replace = message_classes;
+               } else if (theme_adium_match (&cur, "%userIconPath%")) {
+                       replace = avatar_filename;
+               } else if (theme_adium_match (&cur, "%sender%")) {
+                       replace = name;
+               } else if (theme_adium_match (&cur, "%senderScreenName%")) {
+                       replace = contact_id;
+               } else if (theme_adium_match (&cur, "%senderDisplayName%")) {
+                       /* %senderDisplayName% -
+                        * "The serverside (remotely set) name of the sender,
+                        *  such as an MSN display name."
+                        *
+                        * We don't have access to that yet so we use local
+                        * alias instead.*/
+                       replace = name;
+               } else if (theme_adium_match (&cur, "%service%")) {
+                       replace = service_name;
+               } else if (theme_adium_match (&cur, "%shortTime%")) {
+                       dup_replace = empathy_time_to_string_local (timestamp,
+                               EMPATHY_TIME_FORMAT_DISPLAY_SHORT);
+                       replace = dup_replace;
+               } else if (theme_adium_match (&cur, "%time")) {
+                       gchar *format = NULL;
+                       gchar *end;
+
+                       /* Time can be in 2 formats:
+                        * %time% or %time{strftime format}%
+                        * Extract the time format if provided. */
+                       if (cur[1] == '{') {
+                               cur += 2;
+                               end = strstr (cur, "}%");
+                               if (!end) {
+                                       /* Invalid string */
+                                       continue;
+                               }
+                               format = g_strndup (cur, end - cur);
+                               cur = end + 1;
+                       } else {
+                               cur++;
+                       }
+
+                       dup_replace = empathy_time_to_string_local (timestamp,
+                               format ? format : EMPATHY_TIME_FORMAT_DISPLAY_SHORT);
+                       replace = dup_replace;
+                       g_free (format);
+               } else {
+                       escape_and_append_len (string, cur, 1);
+                       continue;
+               }
+
+               /* Here we have a replacement to make */
+               escape_and_append_len (string, replace, -1);
+               g_free (dup_replace);
+       }
+       g_string_append (string, "\")");
+
+       script = g_string_free (string, FALSE);
+       webkit_web_view_execute_script (WEBKIT_WEB_VIEW (theme), script);
+       g_free (script);
+}
+
+static void
+theme_adium_append_message (EmpathyChatView *view,
+                           EmpathyMessage  *msg)
+{
+       EmpathyThemeAdium     *theme = EMPATHY_THEME_ADIUM (view);
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (theme);
+       EmpathyContact        *sender;
+       McAccount             *account;
+       McProfile             *account_profile;
+       gchar                 *dup_body = NULL;
+       const gchar           *body;
+       const gchar           *name;
+       const gchar           *contact_id;
+       EmpathyAvatar         *avatar;
+       const gchar           *avatar_filename = NULL;
+       time_t                 timestamp;
+       gchar                 *html = NULL;
+       gsize                  len = 0;
+       const gchar           *func;
+       const gchar           *service_name;
+       const gchar           *message_classes = NULL;
+
+       if (!priv->page_loaded) {
+               priv->message_queue = g_list_prepend (priv->message_queue,
+                                                     g_object_ref (msg));
+               return;
+       }
+
+       /* Get information */
+       sender = empathy_message_get_sender (msg);
+       account = empathy_contact_get_account (sender);
+       account_profile = mc_account_get_profile (account);
+       service_name = mc_profile_get_display_name (account_profile);
+       timestamp = empathy_message_get_timestamp (msg);
+       body = empathy_message_get_body (msg);
+       dup_body = theme_adium_parse_body (theme, body);
+       if (dup_body) {
+               body = dup_body;
+       }
+       name = empathy_contact_get_name (sender);
+       contact_id = empathy_contact_get_id (sender);
+
+       /* If this is a /me, append an event */
+       if (empathy_message_get_tptype (msg) == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION) {
+               gchar *str;
+
+               str = g_strdup_printf ("%s %s", name, body);
+               empathy_chat_view_append_event (view, str);
+               g_free (str);
+               g_free (dup_body);
+               return;
+       }
+
+       /* Get the avatar filename, or a fallback */
+       avatar = empathy_contact_get_avatar (sender);
+       if (avatar) {
+               avatar_filename = avatar->filename;
+       }
+       if (!avatar_filename) {
+               if (empathy_contact_is_user (sender)) {
+                       avatar_filename = priv->data->default_outgoing_avatar_filename;
+               } else {
+                       avatar_filename = priv->data->default_incoming_avatar_filename;
+               }
+               if (!avatar_filename) {
+                       if (!priv->data->default_avatar_filename) {
+                               priv->data->default_avatar_filename =
+                                       empathy_filename_from_icon_name ("stock_person",
+                                                                        GTK_ICON_SIZE_DIALOG);
+                       }
+                       avatar_filename = priv->data->default_avatar_filename;
+               }
+       }
+
+       /* Get the right html/func to add the message */
+       func = "appendMessage";
+       /*
+        * To mimick Adium's behavior, we only want to join messages
+        * sent within a 5 minute time frame.
+        */
+       if (empathy_contact_equal (priv->last_contact, sender) &&
+           (timestamp - priv->last_timestamp < MESSAGE_JOIN_PERIOD)) {
+               func = "appendNextMessage";
+               if (empathy_contact_is_user (sender)) {
+                       message_classes = "consecutive incoming message";
+                       html = priv->data->out_nextcontent_html;
+                       len = priv->data->out_nextcontent_len;
+               }
+               if (!html) {
+                       message_classes = "consecutive message outgoing";
+                       html = priv->data->in_nextcontent_html;
+                       len = priv->data->in_nextcontent_len;
+               }
+       }
+       if (!html) {
+               if (empathy_contact_is_user (sender)) {
+                       if (!message_classes) {
+                               message_classes = "incoming message";
+                       }
+                       html = priv->data->out_content_html;
+                       len = priv->data->out_content_len;
+               }
+               if (!html) {
+                       if (!message_classes) {
+                               message_classes = "message outgoing";
+                       }
+                       html = priv->data->in_content_html;
+                       len = priv->data->in_content_len;
+               }
+       }
+
+       theme_adium_append_html (theme, func, html, len, body, avatar_filename,
+                                name, contact_id, service_name, message_classes,
+                                timestamp);
+
+       /* Keep the sender of the last displayed message */
+       if (priv->last_contact) {
+               g_object_unref (priv->last_contact);
+       }
+       priv->last_contact = g_object_ref (sender);
+       priv->last_timestamp = timestamp;
+
+       g_free (dup_body);
+}
+
+static void
+theme_adium_append_event (EmpathyChatView *view,
+                         const gchar     *str)
+{
+       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,
+                                        str, NULL, NULL, NULL, NULL, "event",
+                                        empathy_time_get_current ());
+       }
+
+       /* There is no last contact */
+       if (priv->last_contact) {
+               g_object_unref (priv->last_contact);
+               priv->last_contact = NULL;
+       }
+}
+
+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... */
+}
+
+static void
+theme_adium_scroll_down (EmpathyChatView *view)
+{
+       webkit_web_view_execute_script (WEBKIT_WEB_VIEW (view), "scrollToBottom()");
+}
+
+static gboolean
+theme_adium_get_has_selection (EmpathyChatView *view)
+{
+       return webkit_web_view_has_selection (WEBKIT_WEB_VIEW (view));
+}
+
+static void
+theme_adium_clear (EmpathyChatView *view)
+{
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (view);
+       gchar *basedir_uri;
+
+       priv->page_loaded = FALSE;
+       basedir_uri = g_strconcat ("file://", priv->data->basedir, NULL);
+       webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (view),
+                                         priv->data->template_html,
+                                         basedir_uri);
+       g_free (basedir_uri);
+}
+
+static gboolean
+theme_adium_find_previous (EmpathyChatView *view,
+                          const gchar     *search_criteria,
+                          gboolean         new_search)
+{
+       return webkit_web_view_search_text (WEBKIT_WEB_VIEW (view),
+                                           search_criteria, FALSE,
+                                           FALSE, TRUE);
+}
+
+static gboolean
+theme_adium_find_next (EmpathyChatView *view,
+                      const gchar     *search_criteria,
+                      gboolean         new_search)
+{
+       return webkit_web_view_search_text (WEBKIT_WEB_VIEW (view),
+                                           search_criteria, FALSE,
+                                           TRUE, TRUE);
+}
+
+static void
+theme_adium_find_abilities (EmpathyChatView *view,
+                           const gchar    *search_criteria,
+                           gboolean       *can_do_previous,
+                           gboolean       *can_do_next)
+{
+       /* FIXME: Does webkit provide an API for that? We have wrap=true in
+        * find_next and find_previous to work around this problem. */
+       if (can_do_previous)
+               *can_do_previous = TRUE;
+       if (can_do_next)
+               *can_do_next = TRUE;
+}
+
+static void
+theme_adium_highlight (EmpathyChatView *view,
+                      const gchar     *text)
+{
+       webkit_web_view_unmark_text_matches (WEBKIT_WEB_VIEW (view));
+       webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (view),
+                                          text, FALSE, 0);
+       webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (view),
+                                                   TRUE);
+}
+
+static void
+theme_adium_copy_clipboard (EmpathyChatView *view)
+{
+       webkit_web_view_copy_clipboard (WEBKIT_WEB_VIEW (view));
+}
+
+static void
+theme_adium_iface_init (EmpathyChatViewIface *iface)
+{
+       iface->append_message = theme_adium_append_message;
+       iface->append_event = theme_adium_append_event;
+       iface->scroll = theme_adium_scroll;
+       iface->scroll_down = theme_adium_scroll_down;
+       iface->get_has_selection = theme_adium_get_has_selection;
+       iface->clear = theme_adium_clear;
+       iface->find_previous = theme_adium_find_previous;
+       iface->find_next = theme_adium_find_next;
+       iface->find_abilities = theme_adium_find_abilities;
+       iface->highlight = theme_adium_highlight;
+       iface->copy_clipboard = theme_adium_copy_clipboard;
+}
+
+static void
+theme_adium_load_finished_cb (WebKitWebView  *view,
+                             WebKitWebFrame *frame,
+                             gpointer        user_data)
+{
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (view);
+       EmpathyChatView       *chat_view = EMPATHY_CHAT_VIEW (view);
+
+       DEBUG ("Page loaded");
+       priv->page_loaded = TRUE;
+
+       /* Display queued messages */
+       priv->message_queue = g_list_reverse (priv->message_queue);
+       while (priv->message_queue) {
+               EmpathyMessage *message = priv->message_queue->data;
+
+               theme_adium_append_message (chat_view, message);
+               priv->message_queue = g_list_remove (priv->message_queue, message);
+               g_object_unref (message);
+       }
+}
+
+static void
+theme_adium_finalize (GObject *object)
+{
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (object);
+
+       empathy_adium_data_unref (priv->data);
+
+       G_OBJECT_CLASS (empathy_theme_adium_parent_class)->finalize (object);
+}
+
+static void
+theme_adium_dispose (GObject *object)
+{
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (object);
+
+       if (priv->smiley_manager) {
+               g_object_unref (priv->smiley_manager);
+               priv->smiley_manager = NULL;
+       }
+
+       if (priv->last_contact) {
+               g_object_unref (priv->last_contact);
+               priv->last_contact = NULL;
+       }
+
+       G_OBJECT_CLASS (empathy_theme_adium_parent_class)->dispose (object);
+}
+
+static void
+theme_adium_constructed (GObject *object)
+{
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (object);
+       gchar                 *basedir_uri;
+       const gchar           *font_family = NULL;
+       gint                   font_size = 0;
+       WebKitWebSettings     *webkit_settings;
+
+       /* Set default settings */
+       font_family = tp_asv_get_string (priv->data->info, "DefaultFontFamily");
+       font_size = tp_asv_get_int32 (priv->data->info, "DefaultFontSize", NULL);
+       webkit_settings = webkit_web_settings_new ();
+       if (font_family) {
+               g_object_set (G_OBJECT (webkit_settings), "default-font-family", font_family, NULL);
+       }
+       if (font_size) {
+               g_object_set (G_OBJECT (webkit_settings), "default-font-size", font_size, NULL);
+       }
+       webkit_web_view_set_settings (WEBKIT_WEB_VIEW (object), webkit_settings);
+
+       /* Load template */
+       basedir_uri = g_strconcat ("file://", priv->data->basedir, NULL);
+       webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (object),
+                                         priv->data->template_html,
+                                         basedir_uri);
+
+       g_object_unref (webkit_settings);
+       g_free (basedir_uri);
+}
+
+static void
+theme_adium_get_property (GObject    *object,
+                         guint       param_id,
+                         GValue     *value,
+                         GParamSpec *pspec)
+{
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (object);
+
+       switch (param_id) {
+       case PROP_ADIUM_DATA:
+               g_value_set_boxed (value, priv->data);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+               break;
+       };
+}
+
+static void
+theme_adium_set_property (GObject      *object,
+                         guint         param_id,
+                         const GValue *value,
+                         GParamSpec   *pspec)
+{
+       EmpathyThemeAdiumPriv *priv = GET_PRIV (object);
+
+       switch (param_id) {
+       case PROP_ADIUM_DATA:
+               g_assert (priv->data == NULL);
+               priv->data = g_value_dup_boxed (value);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+               break;
+       };
+}
+
+static void
+empathy_theme_adium_class_init (EmpathyThemeAdiumClass *klass)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+       object_class->finalize = theme_adium_finalize;
+       object_class->dispose = theme_adium_dispose;
+       object_class->constructed = theme_adium_constructed;
+       object_class->get_property = theme_adium_get_property;
+       object_class->set_property = theme_adium_set_property;
+
+       g_object_class_install_property (object_class,
+                                        PROP_ADIUM_DATA,
+                                        g_param_spec_boxed ("adium-data",
+                                                            "The theme data",
+                                                            "Data for the adium theme",
+                                                             EMPATHY_TYPE_ADIUM_DATA,
+                                                             G_PARAM_CONSTRUCT_ONLY |
+                                                             G_PARAM_READWRITE |
+                                                             G_PARAM_STATIC_STRINGS));
+
+
+       g_type_class_add_private (object_class, sizeof (EmpathyThemeAdiumPriv));
+}
+
+static void
+empathy_theme_adium_init (EmpathyThemeAdium *theme)
+{
+       EmpathyThemeAdiumPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (theme,
+               EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdiumPriv);
+
+       theme->priv = priv;
+
+       priv->smiley_manager = empathy_smiley_manager_dup_singleton ();
+
+       g_signal_connect (theme, "load-finished",
+                         G_CALLBACK (theme_adium_load_finished_cb),
+                         NULL);
+       g_signal_connect (theme, "navigation-requested",
+                         G_CALLBACK (theme_adium_navigation_requested_cb),
+                         NULL);
+       g_signal_connect (theme, "populate-popup",
+                         G_CALLBACK (theme_adium_populate_popup_cb),
+                         NULL);
+}
+
+EmpathyThemeAdium *
+empathy_theme_adium_new (EmpathyAdiumData *data)
+{
+       g_return_val_if_fail (data != NULL, NULL);
+
+       return g_object_new (EMPATHY_TYPE_THEME_ADIUM,
+                            "adium-data", data,
+                            NULL);
+}
+
+gboolean
+empathy_adium_path_is_valid (const gchar *path)
+{
+       gboolean ret;
+       gchar   *file;
+
+       /* 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);
+       ret = g_file_test (file, G_FILE_TEST_EXISTS);
+       g_free (file);
+
+       return ret;
+}
+
+GHashTable *
+empathy_adium_info_new (const gchar *path)
+{
+       gchar *file;
+       GValue *value;
+       GHashTable *info = NULL;
+
+       g_return_val_if_fail (empathy_adium_path_is_valid (path), NULL);
+
+       file = g_build_filename (path, "Contents", "Info.plist", NULL);
+       value = empathy_plist_parse_from_file (file);
+       g_free (file);
+
+       if (value) {
+               info = g_value_dup_boxed (value);
+               tp_g_value_slice_free (value);
+       }
+
+       return info;
+}
+
+GType
+empathy_adium_data_get_type (void)
+{
+  static GType type_id = 0;
+
+  if (!type_id)
+    {
+      type_id = g_boxed_type_register_static ("EmpathyAdiumData",
+          (GBoxedCopyFunc) empathy_adium_data_ref,
+          (GBoxedFreeFunc) empathy_adium_data_unref);
+    }
+
+  return type_id;
+}
+
+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;
+
+       g_return_val_if_fail (empathy_adium_path_is_valid (path), NULL);
+
+       data = g_slice_new0 (EmpathyAdiumData);
+       data->ref_count = 1;
+       data->path = g_strdup (path);
+       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);
+
+       /* 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, "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, "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);
+       }
+
+       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);
+       }
+
+       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);
+       }
+       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);
+       }
+
+       /* 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");
+               }
+       } else {
+               /* FIXME: We should set main.css OR the variant css */
+               g_string_append (string, css_path);
+       }
+       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_free (footer_html);
+       g_free (template_html);
+       g_free (css_path);
+       g_strfreev (strv);
+
+       return data;
+}
+
+EmpathyAdiumData  *
+empathy_adium_data_new (const gchar *path)
+{
+       EmpathyAdiumData *data;
+       GHashTable *info;
+
+       info = empathy_adium_info_new (path);
+       data = empathy_adium_data_new_with_info (path, info);
+       g_hash_table_unref (info);
+
+       return data;
+}
+
+EmpathyAdiumData  *
+empathy_adium_data_ref (EmpathyAdiumData *data)
+{
+       g_return_val_if_fail (data != NULL, NULL);
+
+       data->ref_count++;
+
+       return data;
+}
+
+void
+empathy_adium_data_unref (EmpathyAdiumData *data)
+{
+       g_return_if_fail (data != NULL);
+
+       data->ref_count--;
+       if (data->ref_count == 0) {
+               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->out_content_html);
+               g_free (data->out_nextcontent_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_slice_free (EmpathyAdiumData, data);
+       }
+}
+
+GHashTable *
+empathy_adium_data_get_info (EmpathyAdiumData *data)
+{
+       g_return_val_if_fail (data != NULL, NULL);
+
+       return data->info;
+}
+
+const gchar *
+empathy_adium_data_get_path (EmpathyAdiumData *data)
+{
+       g_return_val_if_fail (data != NULL, NULL);
+
+       return data->path;
+}
+
diff --git a/libempathy-gtk/empathy-theme-adium.h b/libempathy-gtk/empathy-theme-adium.h
new file mode 100644 (file)
index 0000000..a8ed19d
--- /dev/null
@@ -0,0 +1,70 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008-2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_THEME_ADIUM_H__
+#define __EMPATHY_THEME_ADIUM_H__
+
+#include <webkit/webkitwebview.h>
+
+#include "empathy-chat-view.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_THEME_ADIUM         (empathy_theme_adium_get_type ())
+#define EMPATHY_THEME_ADIUM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdium))
+#define EMPATHY_THEME_ADIUM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdiumClass))
+#define EMPATHY_IS_THEME_ADIUM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_THEME_ADIUM))
+#define EMPATHY_IS_THEME_ADIUM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_THEME_ADIUM))
+#define EMPATHY_THEME_ADIUM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdiumClass))
+
+typedef struct _EmpathyThemeAdium      EmpathyThemeAdium;
+typedef struct _EmpathyThemeAdiumClass EmpathyThemeAdiumClass;
+typedef struct _EmpathyAdiumData       EmpathyAdiumData;
+
+struct _EmpathyThemeAdium {
+       WebKitWebView parent;
+       gpointer priv;
+};
+
+struct _EmpathyThemeAdiumClass {
+       WebKitWebViewClass parent_class;
+};
+
+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);
+
+#define EMPATHY_TYPE_ADIUM_DATA (empathy_adium_data_get_type ())
+GType              empathy_adium_data_get_type (void) G_GNUC_CONST;
+EmpathyAdiumData  *empathy_adium_data_new (const gchar *path);
+EmpathyAdiumData  *empathy_adium_data_new_with_info (const gchar *path,
+                                                    GHashTable *info);
+EmpathyAdiumData  *empathy_adium_data_ref (EmpathyAdiumData *data);
+void               empathy_adium_data_unref (EmpathyAdiumData *data);
+GHashTable        *empathy_adium_data_get_info (EmpathyAdiumData *data);
+const gchar       *empathy_adium_data_get_path (EmpathyAdiumData *data);
+
+
+G_END_DECLS
+
+#endif /* __EMPATHY_THEME_ADIUM_H__ */
index 19913295697d95a12938e36ea045f281bead338d..f5224278caace526613ea0891e515e5fa2b0ac06 100644 (file)
@@ -167,7 +167,7 @@ table_size_allocate_cb (GtkWidget     *view,
         gtk_widget_get_size_request (box, NULL, &height);
 
        width = allocation->width;
-       
+
        width -= \
                gtk_text_view_get_right_margin (GTK_TEXT_VIEW (view)) - \
                gtk_text_view_get_left_margin (GTK_TEXT_VIEW (view));
@@ -210,7 +210,7 @@ theme_boxes_maybe_append_header (EmpathyThemeBoxes *theme,
        /* Only insert a header if the previously inserted block is not the same
         * as this one.
         */
-       if (last_contact == contact) {
+       if (empathy_contact_equal (last_contact, contact)) {
                return;
        }
 
@@ -269,7 +269,7 @@ theme_boxes_maybe_append_header (EmpathyThemeBoxes *theme,
                               NULL);
        g_free (tmp);
        g_free (str);
-       
+
        /* Set foreground color of labels to the same color than the header tag. */
        table = gtk_text_buffer_get_tag_table (buffer);
        tag = gtk_text_tag_table_lookup (table, EMPATHY_THEME_BOXES_TAG_HEADER);
@@ -349,7 +349,7 @@ theme_boxes_notify_show_avatars_cb (EmpathyConf *conf,
                                    gpointer     user_data)
 {
        EmpathyThemeBoxesPriv *priv = GET_PRIV (user_data);
-       
+
        empathy_conf_get_bool (conf, key, &priv->show_avatars);
 }
 
index 183a5cc51282f6f9006f351c929a5801eabc3a92..5d298564e4c686d15ee2e3b94eb2f2eedb9936ae 100644 (file)
@@ -83,7 +83,7 @@ theme_irc_append_message (EmpathyChatTextView *view,
                        nick_tag = EMPATHY_THEME_IRC_TAG_NICK_OTHER;
                }
        }
-               
+
        gtk_text_buffer_get_end_iter (buffer, &iter);
 
        /* The nickname. */
index 0186b5eb70f9671bcfc166c0db0a2884f7e0faa6..ba3d48e683e40533c4668288d7a548f0243062f9 100644 (file)
 #include "empathy-theme-boxes.h"
 #include "empathy-theme-irc.h"
 
+#ifdef HAVE_WEBKIT
+#include "empathy-theme-adium.h"
+#endif
+
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
 #include <libempathy/empathy-debug.h>
 
@@ -45,6 +49,8 @@
 typedef struct {
        gchar       *name;
        guint        name_notify_id;
+       gchar       *adium_path;
+       guint        adium_path_notify_id;
        GtkSettings *settings;
        GList       *boxes_views;
 } EmpathyThemeManagerPriv;
@@ -61,6 +67,9 @@ static const gchar *themes[] = {
        "simple", N_("Simple"),
        "clean", N_("Clean"),
        "blue", N_("Blue"),
+#ifdef HAVE_WEBKIT
+       "adium", N_("Adium"),
+#endif
        NULL
 };
 
@@ -184,7 +193,7 @@ theme_manager_update_boxes_tags (EmpathyThemeBoxes *theme,
 
        /* FIXME: GtkTextTag don't support to set color properties to NULL.
         * See bug #542523 */
-       
+
        #define TAG_SET(prop, prop_set, value) \
                if (value != NULL) { \
                        g_object_set (tag, prop, value, NULL); \
@@ -198,7 +207,7 @@ theme_manager_update_boxes_tags (EmpathyThemeBoxes *theme,
                                              "pixels-above-lines", 4,
                                              NULL);
        TAG_SET ("paragraph-background", "paragraph-background-set", text_background);
-       TAG_SET ("foreground", "foreground-set",highlight_foreground);
+       TAG_SET ("foreground", "foreground-set", highlight_foreground);
 
        empathy_chat_text_view_tag_set (view, EMPATHY_CHAT_TEXT_VIEW_TAG_SPACING,
                                        "size", 3000,
@@ -243,7 +252,7 @@ theme_manager_update_boxes_tags (EmpathyThemeBoxes *theme,
 }
 
 static void
-theme_manager_update_simple_tags (EmpathyThemeBoxes *theme)
+on_style_set_cb (GtkWidget *widget, GtkStyle *previous_style, gpointer data)
 {
        GtkStyle *style;
        gchar     color1[10];
@@ -251,14 +260,14 @@ theme_manager_update_simple_tags (EmpathyThemeBoxes *theme)
        gchar     color3[10];
        gchar     color4[10];
 
-       style = gtk_widget_get_default_style ();
+       style = gtk_widget_get_style (GTK_WIDGET (widget));
 
        theme_manager_gdk_color_to_hex (&style->base[GTK_STATE_SELECTED], color1);
        theme_manager_gdk_color_to_hex (&style->bg[GTK_STATE_SELECTED], color2);
        theme_manager_gdk_color_to_hex (&style->dark[GTK_STATE_SELECTED], color3);
        theme_manager_gdk_color_to_hex (&style->fg[GTK_STATE_SELECTED], color4);
 
-       theme_manager_update_boxes_tags (theme,
+       theme_manager_update_boxes_tags (EMPATHY_THEME_BOXES (widget),
                                         color4,     /* header_foreground */
                                         color2,     /* header_background */
                                         color3,     /* header_line_background */
@@ -278,7 +287,8 @@ theme_manager_update_boxes_theme (EmpathyThemeManager *manager,
        EmpathyThemeManagerPriv *priv = GET_PRIV (manager);
 
        if (strcmp (priv->name, "simple") == 0) {
-               theme_manager_update_simple_tags (theme);
+               g_signal_connect (G_OBJECT (theme), "style-set",
+                                 G_CALLBACK (on_style_set_cb), theme);
        }
        else if (strcmp (priv->name, "clean") == 0) {
                theme_manager_update_boxes_tags (theme,
@@ -318,6 +328,37 @@ empathy_theme_manager_create_view (EmpathyThemeManager *manager)
 
        DEBUG ("Using theme %s", priv->name);
 
+#ifdef HAVE_WEBKIT
+       if (strcmp (priv->name, "adium") == 0)  {
+               if (empathy_adium_path_is_valid (priv->adium_path)) {
+                       static EmpathyAdiumData *data = NULL;
+                       EmpathyThemeAdium *theme_adium;
+
+                       if (data &&
+                           !tp_strdiff (empathy_adium_data_get_path (data),
+                                        priv->adium_path)) {
+                               /* Theme did not change, reuse data */
+                               theme_adium = empathy_theme_adium_new (data);
+                               return EMPATHY_CHAT_VIEW (theme_adium);
+                       }
+
+                       /* Theme changed, drop old data if any and
+                        * load a new one */
+                       if (data) {
+                               empathy_adium_data_unref (data);
+                               data = NULL;
+                       }
+
+                       data = empathy_adium_data_new (priv->adium_path);
+                       theme_adium = empathy_theme_adium_new (data);
+                       return EMPATHY_CHAT_VIEW (theme_adium);
+               } else {
+                       /* The adium path is not valid, fallback to classic theme */
+                       return EMPATHY_CHAT_VIEW (theme_manager_create_irc_view (manager));
+               }
+       }
+#endif
+
        if (strcmp (priv->name, "classic") == 0)  {
                return EMPATHY_CHAT_VIEW (theme_manager_create_irc_view (manager));
        }
@@ -328,25 +369,6 @@ empathy_theme_manager_create_view (EmpathyThemeManager *manager)
        return EMPATHY_CHAT_VIEW (theme);
 }
 
-static void
-theme_manager_color_hash_notify_cb (EmpathyThemeManager *manager)
-{
-       EmpathyThemeManagerPriv *priv = GET_PRIV (manager);
-
-       /* FIXME: Make that work, it should update color when theme changes but
-        * it doesnt seems to work with all themes. */
-
-       if (strcmp (priv->name, "simple") == 0) {
-               GList *l;
-
-               /* We are using the simple theme which use the GTK theme color,
-                * Update views to use the new color. */
-               for (l = priv->boxes_views; l; l = l->next) {
-                       theme_manager_update_simple_tags (EMPATHY_THEME_BOXES (l->data));
-               }
-       }
-}
-
 static gboolean
 theme_manager_ensure_theme_exists (const gchar *name)
 {
@@ -403,6 +425,27 @@ theme_manager_notify_name_cb (EmpathyConf *conf,
        g_signal_emit (manager, signals[THEME_CHANGED], 0, NULL);
 }
 
+static void
+theme_manager_notify_adium_path_cb (EmpathyConf *conf,
+                                   const gchar *key,
+                                   gpointer     user_data)
+{
+       EmpathyThemeManager     *manager = EMPATHY_THEME_MANAGER (user_data);
+       EmpathyThemeManagerPriv *priv = GET_PRIV (manager);
+       gchar                   *adium_path = NULL;
+
+       if (!empathy_conf_get_string (conf, key, &adium_path) ||
+           !tp_strdiff (priv->adium_path, adium_path)) {
+               g_free (adium_path);
+               return;
+       }
+
+       g_free (priv->adium_path);
+       priv->adium_path = adium_path;
+
+       g_signal_emit (manager, signals[THEME_CHANGED], 0, NULL);
+}
+
 static void
 theme_manager_finalize (GObject *object)
 {
@@ -411,6 +454,8 @@ theme_manager_finalize (GObject *object)
 
        empathy_conf_notify_remove (empathy_conf_get (), priv->name_notify_id);
        g_free (priv->name);
+       empathy_conf_notify_remove (empathy_conf_get (), priv->adium_path_notify_id);
+       g_free (priv->adium_path);
 
        for (l = priv->boxes_views; l; l = l->next) {
                g_object_weak_unref (G_OBJECT (l->data),
@@ -460,11 +505,15 @@ empathy_theme_manager_init (EmpathyThemeManager *manager)
                                      EMPATHY_PREFS_CHAT_THEME,
                                      manager);
 
-       /* Track GTK color changes */
-       priv->settings = gtk_settings_get_default ();
-       g_signal_connect_swapped (priv->settings, "notify::color-hash",
-                                 G_CALLBACK (theme_manager_color_hash_notify_cb),
-                                 manager);
+       /* Take the adium path and track changes */
+       priv->adium_path_notify_id =
+               empathy_conf_notify_add (empathy_conf_get (),
+                                        EMPATHY_PREFS_CHAT_ADIUM_PATH,
+                                        theme_manager_notify_adium_path_cb,
+                                        manager);
+       theme_manager_notify_adium_path_cb (empathy_conf_get (),
+                                           EMPATHY_PREFS_CHAT_ADIUM_PATH,
+                                           manager);
 }
 
 EmpathyThemeManager *
diff --git a/libempathy-gtk/empathy-theme.c b/libempathy-gtk/empathy-theme.c
deleted file mode 100644 (file)
index ca4f666..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007 Imendio AB
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-
-#include <libempathy/empathy-utils.h>
-
-#include "empathy-chat.h"
-#include "empathy-conf.h"
-#include "empathy-theme.h"
-#include "empathy-smiley-manager.h"
-
-/* Number of seconds between timestamps when using normal mode, 5 minutes. */
-#define TIMESTAMP_INTERVAL 300
-
-#define SCHEMES "(https?|ftps?|nntp|news|javascript|about|ghelp|apt|telnet|"\
-               "file|webcal|mailto)"
-#define BODY "([^\\ ]+)"
-#define END_BODY "([^\\ ]*[^,;\?><()\\ \"\\.])"
-#define URI_REGEX "("SCHEMES"://"END_BODY")" \
-                 "|((mailto:)?"BODY"@"BODY"\\."END_BODY")"\
-                 "|((www|ftp)\\."END_BODY")"
-static GRegex *uri_regex = NULL;
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTheme)
-
-typedef struct {
-       EmpathySmileyManager *smiley_manager;
-       gboolean show_avatars;
-} EmpathyThemePriv;
-
-static void         theme_finalize            (GObject            *object);
-static void         theme_get_property        (GObject            *object,
-                                              guint               param_id,
-                                              GValue             *value,
-                                              GParamSpec         *pspec);
-static void         theme_set_property        (GObject            *object,
-                                              guint               param_id,
-                                              const GValue       *value,
-                                              GParamSpec         *pspec);
-
-
-G_DEFINE_TYPE (EmpathyTheme, empathy_theme, G_TYPE_OBJECT);
-
-enum {
-       PROP_0,
-       PROP_SHOW_AVATARS
-};
-
-static void
-empathy_theme_class_init (EmpathyThemeClass *class)
-{
-       GObjectClass *object_class;
-
-       object_class = G_OBJECT_CLASS (class);
-
-       object_class->finalize     = theme_finalize;
-       object_class->get_property = theme_get_property;
-       object_class->set_property = theme_set_property;
-
-       class->update_view      = NULL;
-       class->append_message   = NULL;
-       class->append_event     = NULL;
-       class->append_timestamp = NULL;
-       class->append_spacing   = NULL;
-
-       g_object_class_install_property (object_class,
-                                        PROP_SHOW_AVATARS,
-                                        g_param_spec_boolean ("show-avatars",
-                                                              "", "",
-                                                              TRUE,
-                                                              G_PARAM_READWRITE));
-
-       g_type_class_add_private (object_class, sizeof (EmpathyThemePriv));
-}
-
-static void
-empathy_theme_init (EmpathyTheme *theme)
-{
-       EmpathyThemePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (theme,
-               EMPATHY_TYPE_THEME, EmpathyThemePriv);
-
-       theme->priv = priv;
-       priv->smiley_manager = empathy_smiley_manager_dup_singleton ();
-}
-
-static void
-theme_finalize (GObject *object)
-{
-       EmpathyThemePriv *priv;
-
-       priv = GET_PRIV (object);
-
-       if (priv->smiley_manager) {
-               g_object_unref (priv->smiley_manager);
-       }
-
-       (G_OBJECT_CLASS (empathy_theme_parent_class)->finalize) (object);
-}
-
-static void
-theme_get_property (GObject    *object,
-                   guint       param_id,
-                   GValue     *value,
-                   GParamSpec *pspec)
-{
-       EmpathyThemePriv *priv;
-
-       priv = GET_PRIV (object);
-
-       switch (param_id) {
-       case PROP_SHOW_AVATARS:
-               g_value_set_boolean (value, priv->show_avatars);
-               break;
-       default:
-               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-               break;
-       }
-}
-
-static void
-theme_set_property (GObject      *object,
-                    guint         param_id,
-                    const GValue *value,
-                    GParamSpec   *pspec)
-{
-       EmpathyThemePriv *priv;
-
-       priv = GET_PRIV (object);
-
-       switch (param_id) {
-       case PROP_SHOW_AVATARS:
-               empathy_theme_set_show_avatars (EMPATHY_THEME (object),
-                                               g_value_get_boolean (value));
-               break;
-       default:
-               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
-               break;
-       }
-}
-
-void
-empathy_theme_maybe_append_date_and_time (EmpathyTheme        *theme,
-                                        EmpathyChatView     *view,
-                                        EmpathyMessage      *message)
-{
-       time_t    timestamp;
-       GDate    *date, *last_date;
-       gboolean  append_date, append_time;
-
-       date = empathy_message_get_date_and_time (message, &timestamp);
-
-       last_date = g_date_new ();
-       g_date_set_time_t (last_date, empathy_chat_view_get_last_timestamp (view));
-
-       append_date = FALSE;
-       append_time = FALSE;
-
-       if (g_date_compare (date, last_date) > 0) {
-               append_date = TRUE;
-               append_time = TRUE;
-       }
-       
-       g_date_free (last_date);
-       g_date_free (date);
-
-       if (empathy_chat_view_get_last_timestamp (view) + TIMESTAMP_INTERVAL < timestamp) {
-               append_time = TRUE;
-       }
-
-       if (append_time || append_date) {
-               empathy_theme_append_timestamp (theme, view, message,
-                                              append_date, append_time);
-       }
-}
-
-void
-empathy_theme_update_view (EmpathyTheme    *theme,
-                          EmpathyChatView *view)
-{
-       if (!EMPATHY_THEME_GET_CLASS(theme)->update_view) {
-               g_error ("Theme must override update_view");
-       }
-
-       EMPATHY_THEME_GET_CLASS(theme)->update_view (theme, view);
-}
-
-void
-empathy_theme_append_message (EmpathyTheme        *theme,
-                            EmpathyChatView     *view,
-                            EmpathyMessage      *message)
-{
-       if (!EMPATHY_THEME_GET_CLASS(theme)->append_message) {
-               g_warning ("Theme should override append_message");
-               return;
-       }
-
-       EMPATHY_THEME_GET_CLASS(theme)->append_message (theme, view, message);
-}
-
-static void
-theme_insert_text_with_emoticons (GtkTextBuffer *buf,
-                                 GtkTextIter   *iter,
-                                 const gchar   *str,
-                                 EmpathySmileyManager *smiley_manager)
-{
-       gboolean             use_smileys = FALSE;
-       GSList              *smileys, *l;
-
-       empathy_conf_get_bool (empathy_conf_get (),
-                             EMPATHY_PREFS_CHAT_SHOW_SMILEYS,
-                             &use_smileys);
-
-       if (!use_smileys) {
-               gtk_text_buffer_insert (buf, iter, str, -1);
-               return;
-       }
-
-       smileys = empathy_smiley_manager_parse (smiley_manager, str);
-       for (l = smileys; l; l = l->next) {
-               EmpathySmiley *smiley;
-
-               smiley = l->data;
-               if (smiley->pixbuf) {
-                       gtk_text_buffer_insert_pixbuf (buf, iter, smiley->pixbuf);
-               } else {
-                       gtk_text_buffer_insert (buf, iter, smiley->str, -1);
-               }
-               empathy_smiley_free (smiley);
-       }
-       g_slist_free (smileys);
-}
-
-void
-empathy_theme_append_text (EmpathyTheme        *theme,
-                         EmpathyChatView     *view,
-                         const gchar        *body,
-                         const gchar        *tag,
-                         const gchar        *link_tag)
-{
-       EmpathyThemePriv *priv;
-       GtkTextBuffer   *buffer;
-       GtkTextIter      start_iter, end_iter;
-       GtkTextMark     *mark;
-       GtkTextIter      iter;
-       GMatchInfo      *match_info;
-       gboolean         match;
-       gint             last = 0;
-       gint             s = 0, e = 0;
-       gchar           *tmp;
-
-       priv = GET_PRIV (theme);
-       buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
-
-       gtk_text_buffer_get_end_iter (buffer, &start_iter);
-       mark = gtk_text_buffer_create_mark (buffer, NULL, &start_iter, TRUE);
-
-       if (!uri_regex) {
-               uri_regex = g_regex_new (URI_REGEX, 0, 0, NULL);
-       }
-
-       for (match = g_regex_match (uri_regex, body, 0, &match_info); match;
-            match = g_match_info_next (match_info, NULL)) {
-               if (!g_match_info_fetch_pos (match_info, 0, &s, &e))
-                       continue;
-
-               if (s > last) {
-                       tmp = empathy_substring (body, last, s);
-
-                       gtk_text_buffer_get_end_iter (buffer, &iter);
-                       theme_insert_text_with_emoticons (buffer,
-                                                         &iter,
-                                                         tmp,
-                                                         priv->smiley_manager);
-                       g_free (tmp);
-               }
-
-               tmp = empathy_substring (body, s, e);
-
-               gtk_text_buffer_get_end_iter (buffer, &iter);
-               if (!link_tag) {
-                       gtk_text_buffer_insert (buffer, &iter,
-                                               tmp, -1);
-               } else {
-                       gtk_text_buffer_insert_with_tags_by_name (buffer,
-                                                                 &iter,
-                                                                 tmp,
-                                                                 -1,
-                                                                 link_tag,
-                                                                 "link",
-                                                                 NULL);
-               }
-
-               g_free (tmp);
-               last = e;
-       }
-       g_match_info_free (match_info);
-
-       if (last < strlen (body)) {
-               gtk_text_buffer_get_end_iter (buffer, &iter);
-               theme_insert_text_with_emoticons (buffer,
-                                                 &iter,
-                                                 body + last,
-                                                 priv->smiley_manager);
-       }
-
-       gtk_text_buffer_get_end_iter (buffer, &iter);
-       gtk_text_buffer_insert (buffer, &iter, "\n", 1);
-
-       /* Apply the style to the inserted text. */
-       gtk_text_buffer_get_iter_at_mark (buffer, &start_iter, mark);
-       gtk_text_buffer_get_end_iter (buffer, &end_iter);
-
-       gtk_text_buffer_apply_tag_by_name (buffer,
-                                          tag,
-                                          &start_iter,
-                                          &end_iter);
-
-       gtk_text_buffer_delete_mark (buffer, mark);
-}
-
-void 
-empathy_theme_append_event (EmpathyTheme        *theme,
-                          EmpathyChatView     *view,
-                          const gchar        *str)
-{
-       if (!EMPATHY_THEME_GET_CLASS(theme)->append_event) {
-               return;
-       }
-
-       EMPATHY_THEME_GET_CLASS(theme)->append_event (theme, view, str);
-}
-
-void
-empathy_theme_append_spacing (EmpathyTheme        *theme, 
-                            EmpathyChatView     *view)
-{
-       if (!EMPATHY_THEME_GET_CLASS(theme)->append_spacing) {
-               return;
-       }
-
-       EMPATHY_THEME_GET_CLASS(theme)->append_spacing (theme, view);
-}
-
-
-void 
-empathy_theme_append_timestamp (EmpathyTheme        *theme,
-                              EmpathyChatView     *view,
-                              EmpathyMessage      *message,
-                              gboolean            show_date,
-                              gboolean            show_time)
-{
-       if (!EMPATHY_THEME_GET_CLASS(theme)->append_timestamp) {
-               return;
-       }
-
-       EMPATHY_THEME_GET_CLASS(theme)->append_timestamp (theme, view,
-                                                        message, show_date,
-                                                        show_time);
-}
-
-gboolean
-empathy_theme_get_show_avatars (EmpathyTheme *theme)
-{
-       EmpathyThemePriv *priv;
-
-       g_return_val_if_fail (EMPATHY_IS_THEME (theme), FALSE);
-
-       priv = GET_PRIV (theme);
-
-       return priv->show_avatars;
-}
-
-void
-empathy_theme_set_show_avatars (EmpathyTheme *theme, gboolean show)
-{
-       EmpathyThemePriv *priv;
-
-       g_return_if_fail (EMPATHY_IS_THEME (theme));
-
-       priv = GET_PRIV (theme);
-
-       priv->show_avatars = show;
-
-       g_object_notify (G_OBJECT (theme), "show-avatars");
-}
-
index f30c58aade0b8275c8be7deabe369c40d4bcb400..ffe81a352f475a9a638c26ba30de63b77a8755e4 100644 (file)
@@ -37,7 +37,6 @@
 #include <glib/gi18n-lib.h>
 #include <gtk/gtk.h>
 #include <gio/gio.h>
-#include <canberra-gtk.h>
 
 #include <libmissioncontrol/mc-profile.h>
 
@@ -558,6 +557,29 @@ empathy_pixbuf_from_icon_name (const gchar *icon_name,
        return empathy_pixbuf_from_icon_name_sized (icon_name, size);
 }
 
+gchar *
+empathy_filename_from_icon_name (const gchar *icon_name,
+                                GtkIconSize  icon_size)
+{
+       GtkIconTheme *icon_theme;
+       GtkIconInfo  *icon_info;
+       gint          w, h;
+       gint          size = 48;
+       gchar        *ret;
+
+       icon_theme = gtk_icon_theme_get_default ();
+
+       if (gtk_icon_size_lookup (icon_size, &w, &h)) {
+               size = (w + h) / 2;
+       }
+
+       icon_info = gtk_icon_theme_lookup_icon (icon_theme, icon_name, size, 0);
+       ret = g_strdup (gtk_icon_info_get_filename (icon_info));
+       gtk_icon_info_free (icon_info);
+
+       return ret;
+}
+
 /* Stolen from GtkSourceView, hence the weird intendation. Please keep it like
  * that to make it easier to apply changes from the original code.
  */
@@ -1288,8 +1310,8 @@ empathy_window_present (GtkWindow *window,
        }
 
        timestamp = gtk_get_current_event_time ();
-       gtk_window_set_skip_taskbar_hint (window, FALSE);
        gtk_window_present_with_time (window, timestamp);
+       gtk_window_set_skip_taskbar_hint (window, FALSE);
        /* FIXME: This shouldn't be required as gtk_window_present's doc says
         *        it deiconify automatically. */
        gtk_window_deiconify (window);
@@ -1517,140 +1539,4 @@ empathy_receive_file_with_file_chooser (EmpathyFTHandler *handler)
                G_CALLBACK (file_manager_receive_file_response_cb), handler);
 
        gtk_widget_show (widget);
-}
-
-typedef struct {
-       EmpathySound sound_id;
-       const char * event_ca_id;
-       const char * event_ca_description;
-       const char * gconf_key;
-} EmpathySoundEntry;
-
-/* NOTE: these entries MUST be in the same order than EmpathySound enum */
-static EmpathySoundEntry sound_entries[LAST_EMPATHY_SOUND] = {
-       { EMPATHY_SOUND_MESSAGE_INCOMING, "message-new-instant",
-         N_("Received an instant message"), EMPATHY_PREFS_SOUNDS_INCOMING_MESSAGE } ,
-       { EMPATHY_SOUND_MESSAGE_OUTGOING, "message-sent-instant",
-         N_("Sent an instant message"), EMPATHY_PREFS_SOUNDS_OUTGOING_MESSAGE } ,
-       { EMPATHY_SOUND_CONVERSATION_NEW, "message-new-instant",
-         N_("Incoming chat request"), EMPATHY_PREFS_SOUNDS_NEW_CONVERSATION },
-       { EMPATHY_SOUND_CONTACT_CONNECTED, "service-login",
-         N_("Contact connected"), EMPATHY_PREFS_SOUNDS_CONTACT_LOGIN },
-       { EMPATHY_SOUND_CONTACT_DISCONNECTED, "service-logout",
-         N_("Contact disconnected"), EMPATHY_PREFS_SOUNDS_CONTACT_LOGOUT },
-       { EMPATHY_SOUND_ACCOUNT_CONNECTED, "service-login",
-         N_("Connected to server"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGIN },
-       { EMPATHY_SOUND_ACCOUNT_DISCONNECTED, "service-logout",
-         N_("Disconnected from server"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGOUT },
-       { EMPATHY_SOUND_PHONE_INCOMING, "phone-incoming-call",
-         N_("Incoming voice call"), NULL },
-       { EMPATHY_SOUND_PHONE_OUTGOING, "phone-outgoing-calling",
-         N_("Outgoing voice call"), NULL },
-       { EMPATHY_SOUND_PHONE_HANGUP, "phone-hangup",
-         N_("Voice call ended"), NULL },
-};
-
-
-static gboolean
-empathy_sound_pref_is_enabled (const char *key)
-{
-       EmpathyConf *conf;
-       gboolean res;
-
-       conf = empathy_conf_get ();
-       res = FALSE;
-
-       empathy_conf_get_bool (conf, EMPATHY_PREFS_SOUNDS_ENABLED, &res);
-
-       if (!res) {
-               return FALSE;
-       }
-
-       if (!empathy_check_available_state ()) {
-               empathy_conf_get_bool (conf, EMPATHY_PREFS_SOUNDS_DISABLED_AWAY,
-                                      &res);
-               if (res) {
-                       return FALSE;
-               }
-       }
-
-       empathy_conf_get_bool (conf, key, &res);
-
-       return res;
-}
-
-void
-empathy_sound_stop (EmpathySound sound_id)
-{
-       EmpathySoundEntry *entry;
-
-       g_return_if_fail (sound_id < LAST_EMPATHY_SOUND);
-
-       entry = &(sound_entries[sound_id]);
-       g_return_if_fail (entry->sound_id == sound_id);
-
-       ca_context_cancel (ca_gtk_context_get (), entry->sound_id);
-}
-
-
-gboolean
-empathy_sound_play_full (GtkWidget *widget, EmpathySound sound_id,
-       ca_finish_callback_t callback, gpointer user_data)
-{
-       EmpathySoundEntry *entry;
-       gboolean should_play = TRUE;
-       ca_proplist *p = NULL;
-       ca_context *c;
-
-       g_return_val_if_fail (sound_id < LAST_EMPATHY_SOUND, FALSE);
-
-       entry = &(sound_entries[sound_id]);
-       g_return_val_if_fail (entry->sound_id == sound_id, FALSE);
-
-       if (entry->gconf_key != NULL) {
-               should_play = empathy_sound_pref_is_enabled (entry->gconf_key);
-       }
-
-       if (!should_play)
-               return FALSE;
-
-       c = ca_gtk_context_get ();
-       ca_context_cancel (c, entry->sound_id);
-
-       DEBUG ("Play sound \"%s\" (%s)",
-              entry->event_ca_id,
-              entry->event_ca_description);
-
-       if (ca_proplist_create (&p) < 0)
-               goto failed;
-
-       if (ca_proplist_sets (p, CA_PROP_EVENT_ID, entry->event_ca_id) < 0)
-               goto failed;
-
-       if (ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION,
-                       gettext (entry->event_ca_id)) < 0)
-               goto failed;
-
-       if (ca_gtk_proplist_set_for_widget (p, widget) < 0)
-               goto failed;
-
-       ca_context_play_full (ca_gtk_context_get (), entry->sound_id,
-               p, callback, user_data);
-
-       ca_proplist_destroy (p);
-
-       return TRUE;
-
-failed:
-       if (p != NULL)
-               ca_proplist_destroy (p);
-
-       return FALSE;
-}
-
-void
-empathy_sound_play (GtkWidget *widget, EmpathySound sound_id)
-{
-       empathy_sound_play_full (widget, sound_id, NULL, NULL);
-}
-
+}
\ No newline at end of file
index 4d58fedcf7d3f52ba7bafbf2b716d1b87a264b49..4c1384602f883dcaa14f33a74699fabb38800530 100644 (file)
@@ -34,8 +34,6 @@
 
 #include <gtk/gtk.h>
 
-#include <canberra-gtk.h>
-
 #include <libmissioncontrol/mc-account.h>
 #include <libmissioncontrol/mc-profile.h>
 
 
 G_BEGIN_DECLS
 
-/* NOTE: Keep this sync with sound_entries in empathy-ui-utils.c */
-typedef enum {
-       EMPATHY_SOUND_MESSAGE_INCOMING = 0,
-       EMPATHY_SOUND_MESSAGE_OUTGOING,
-       EMPATHY_SOUND_CONVERSATION_NEW,
-       EMPATHY_SOUND_CONTACT_CONNECTED,
-       EMPATHY_SOUND_CONTACT_DISCONNECTED,
-       EMPATHY_SOUND_ACCOUNT_CONNECTED,
-       EMPATHY_SOUND_ACCOUNT_DISCONNECTED,
-       EMPATHY_SOUND_PHONE_INCOMING,
-       EMPATHY_SOUND_PHONE_OUTGOING,
-       EMPATHY_SOUND_PHONE_HANGUP,
-       LAST_EMPATHY_SOUND,
-} EmpathySound;
-
 void            empathy_gtk_init                        (void);
 GRegex *        empathy_uri_regex_dup_singleton         (void);
 
@@ -90,12 +73,15 @@ GdkPixbuf *   empathy_pixbuf_from_avatar_scaled         (EmpathyAvatar    *avata
 GdkPixbuf *   empathy_pixbuf_avatar_from_contact_scaled (EmpathyContact   *contact,
                                                         gint              width,
                                                         gint              height);
-GdkPixbuf * empathy_pixbuf_scale_down_if_necessary      (GdkPixbuf        *pixbuf,
+GdkPixbuf *   empathy_pixbuf_scale_down_if_necessary    (GdkPixbuf        *pixbuf,
                                                         gint              max_size);
-GdkPixbuf * empathy_pixbuf_from_icon_name               (const gchar      *icon_name,
+GdkPixbuf *   empathy_pixbuf_from_icon_name             (const gchar      *icon_name,
                                                         GtkIconSize       icon_size);
-GdkPixbuf * empathy_pixbuf_from_icon_name_sized         (const gchar      *icon_name,
+GdkPixbuf *   empathy_pixbuf_from_icon_name_sized       (const gchar      *icon_name,
                                                         gint              size);
+gchar *       empathy_filename_from_icon_name           (const gchar      *icon_name,
+                                                        GtkIconSize       icon_size);
+
 /* Text view */
 gboolean    empathy_text_iter_forward_search            (const GtkTextIter*iter,
                                                         const gchar      *str,
@@ -126,15 +112,6 @@ GtkWidget * empathy_link_button_new                     (const gchar      *url,
 void        empathy_send_file_with_file_chooser         (EmpathyContact   *contact);
 void        empathy_receive_file_with_file_chooser      (EmpathyFTHandler *handler);
 
-/* Sounds */
-void        empathy_sound_play                          (GtkWidget        *widget,
-                                                        EmpathySound      sound_id);
-gboolean    empathy_sound_play_full                     (GtkWidget *widget,
-                                                        EmpathySound sound_id,
-                                                        ca_finish_callback_t callback,
-                                                        gpointer user_data);
-void        empathy_sound_stop                          (EmpathySound sound_id);
-
 G_END_DECLS
 
 #endif /*  __EMPATHY_UI_UTILS_H__ */
index 7647b845f172fe4fb9371ce821492b99b636873b..79f27814f81955934b2013482c5e650d78a92558 100644 (file)
@@ -300,6 +300,9 @@ empathy_video_widget_dispose (GObject *object)
 
   priv->dispose_has_run = TRUE;
 
+  g_signal_handlers_disconnect_by_func (priv->bus,
+    empathy_video_widget_sync_message_cb, object);
+
   if (priv->bus != NULL)
     g_object_unref (priv->bus);
 
index 3540c88bfab605359a7c88bbcd1661b96af4063c..87b7284643ebe58a4531569c58c45fcbf24461cd 100644 (file)
@@ -7,6 +7,7 @@ AM_CPPFLAGS =                                           \
        -I$(top_builddir)                               \
        -DDATADIR=\""$(datadir)"\"                      \
        -DLOCALEDIR=\""$(datadir)/locale"\"             \
+       -DG_LOG_DOMAIN=\"empathy\"                      \
        $(LIBEMPATHY_CFLAGS)                            \
        $(GEOCLUE_CFLAGS)                               \
        $(WARN_CFLAGS)                                  \
@@ -33,6 +34,7 @@ libempathy_la_SOURCES =                                       \
        empathy-contact-manager.c                       \
        empathy-contact-monitor.c                       \
        empathy-debug.c                                 \
+       empathy-debugger.c                              \
        empathy-dispatcher.c                            \
        empathy-dispatch-operation.c                    \
        empathy-ft-factory.c                            \
@@ -53,7 +55,6 @@ libempathy_la_SOURCES =                                       \
        empathy-tp-contact-list.c                       \
        empathy-tp-file.c                               \
        empathy-tp-roomlist.c                           \
-       empathy-tp-tube.c                               \
        empathy-tube-handler.c                          \
        empathy-utils.c
 
@@ -82,6 +83,7 @@ libempathy_headers =                          \
        empathy-contact-manager.h               \
        empathy-contact-monitor.h               \
        empathy-debug.h                         \
+       empathy-debugger.h                      \
        empathy-dispatcher.h                    \
        empathy-dispatch-operation.h            \
        empathy-ft-factory.h                    \
@@ -103,7 +105,6 @@ libempathy_headers =                                \
        empathy-tp-contact-list.h               \
        empathy-tp-file.h                       \
        empathy-tp-roomlist.h                   \
-       empathy-tp-tube.h                       \
        empathy-tube-handler.h                  \
        empathy-types.h                         \
        empathy-utils.h
index 8d70885b48fcd779db45aeb27fa5e84b93f4d769..f73c41e2eb683931f61f97dd0846b9f4cf67a282 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * empathy-call-handler.c - Source for EmpathyCallHandler
- * Copyright (C) 2008 Collabora Ltd.
+ * Copyright (C) 2008-2009 Collabora Ltd.
  * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
  *
  * This library is free software; you can redistribute it and/or
@@ -304,7 +304,9 @@ EmpathyCallHandler *
 empathy_call_handler_new_for_channel (EmpathyTpCall *call)
 {
   return EMPATHY_CALL_HANDLER (g_object_new (EMPATHY_TYPE_CALL_HANDLER,
-    "tp-call", call, NULL));
+    "tp-call", call,
+    "initial-video", empathy_tp_call_is_receiving_video (call),
+    NULL));
 }
 
 void
@@ -577,3 +579,40 @@ empathy_call_handler_start_call (EmpathyCallHandler *handler)
   g_object_unref (dispatcher);
 }
 
+/**
+ * empathy_call_handler_stop_call:
+ * @handler: an #EmpathyCallHandler
+ *
+ * Closes the #EmpathyCallHandler's call and frees its resources.
+ */
+void
+empathy_call_handler_stop_call (EmpathyCallHandler *handler)
+{
+  EmpathyCallHandlerPriv *priv = GET_PRIV (handler);
+
+  if (priv->call != NULL)
+    {
+      empathy_tp_call_close (priv->call);
+      g_object_unref (priv->call);
+    }
+
+  priv->call = NULL;
+}
+
+/**
+ * empathy_call_handler_has_initial_video:
+ * @handler: an #EmpathyCallHandler
+ *
+ * Return %TRUE if the call managed by this #EmpathyCallHandler was
+ * created with video enabled
+ *
+ * Return value: %TRUE if the call was created as a video conversation.
+ */
+gboolean
+empathy_call_handler_has_initial_video (EmpathyCallHandler *handler)
+{
+  EmpathyCallHandlerPriv *priv = GET_PRIV (handler);
+
+  return priv->initial_video;
+}
+
index 9a039f06abfc927016cf01c05504006d28101b03..1f67fe56bfc6bfec67b1264d1575b21d8e13b3b5 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * empathy-call-handler.h - Header for EmpathyCallHandler
- * Copyright (C) 2008 Collabora Ltd.
+ * Copyright (C) 2008-2009 Collabora Ltd.
  * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
  *
  * This library is free software; you can redistribute it and/or
@@ -71,6 +71,9 @@ EmpathyCallHandler * empathy_call_handler_new_for_channel (
   EmpathyTpCall *call);
 
 void empathy_call_handler_start_call (EmpathyCallHandler *handler);
+void empathy_call_handler_stop_call (EmpathyCallHandler *handler);
+
+gboolean empathy_call_handler_has_initial_video (EmpathyCallHandler *handler);
 
 void empathy_call_handler_bus_message (EmpathyCallHandler *handler,
   GstBus *bus, GstMessage *message);
index 3bdc5f154788b190059f4b8c6ff7828732c725ec..44416670e4c948d4aeddd1e93377a2e132fdc6a4 100644 (file)
@@ -506,6 +506,27 @@ empathy_chatroom_manager_add (EmpathyChatroomManager *manager,
   return FALSE;
 }
 
+static void
+chatroom_manager_remove_link (EmpathyChatroomManager *manager,
+                              GList *l)
+{
+  EmpathyChatroomManagerPriv *priv;
+  EmpathyChatroom *chatroom;
+
+  priv = GET_PRIV (manager);
+
+  chatroom = l->data;
+
+  if (empathy_chatroom_is_favorite (chatroom))
+    reset_save_timeout (manager);
+
+  g_signal_emit (manager, signals[CHATROOM_REMOVED], 0, chatroom);
+  g_signal_handlers_disconnect_by_func (chatroom, chatroom_changed_cb, manager);
+
+  priv->chatrooms = g_list_delete_link (priv->chatrooms, l);
+  g_object_unref (chatroom);
+}
+
 void
 empathy_chatroom_manager_remove (EmpathyChatroomManager *manager,
                                  EmpathyChatroom        *chatroom)
@@ -527,15 +548,7 @@ empathy_chatroom_manager_remove (EmpathyChatroomManager *manager,
       if (this_chatroom == chatroom ||
           empathy_chatroom_equal (chatroom, this_chatroom))
         {
-          priv->chatrooms = g_list_delete_link (priv->chatrooms, l);
-          if (empathy_chatroom_is_favorite (chatroom))
-            reset_save_timeout (manager);
-
-          g_signal_emit (manager, signals[CHATROOM_REMOVED], 0, this_chatroom);
-          g_signal_handlers_disconnect_by_func (chatroom, chatroom_changed_cb,
-              manager);
-
-          g_object_unref (this_chatroom);
+          chatroom_manager_remove_link (manager, l);
           break;
         }
     }
@@ -649,13 +662,16 @@ chatroom_manager_chat_destroyed_cb (EmpathyTpChat *chat,
         continue;
 
       empathy_chatroom_set_tp_chat (chatroom, NULL);
+
       if (!empathy_chatroom_is_favorite (chatroom))
         {
           /* Remove the chatroom from the list, unless it's in the list of
            * favourites..
            * FIXME this policy should probably not be in libempathy */
-          empathy_chatroom_manager_remove (manager, chatroom);
+          chatroom_manager_remove_link (manager, l);
         }
+
+      break;
     }
 }
 
index 6575bb9982288dacbba51a346bd562d027484278..147fca0a997e75621ec602c7e9e5fa9f0991af55 100644 (file)
@@ -407,11 +407,11 @@ empathy_chatroom_get_name (EmpathyChatroom *chatroom)
        g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
 
        priv = GET_PRIV (chatroom);
-       
+
        if (EMP_STR_EMPTY (priv->name)) {
                return priv->room;
        }
-       
+
        return priv->name;
 }
 
index 412087ec0c00040a648718202ba2466863323a6e..7af2bd3498eea3c90dc4d3e9f8dfbe49a806fc88 100644 (file)
@@ -103,7 +103,7 @@ contact_manager_invalidated_cb (TpProxy *connection,
        list = g_hash_table_lookup (priv->lists, connection);
        if (list) {
                empathy_tp_contact_list_remove_all (list);
-               g_hash_table_remove (priv->lists, connection);          
+               g_hash_table_remove (priv->lists, connection);
        }
 }
 
@@ -503,7 +503,7 @@ contact_manager_remove_group (EmpathyContactList *manager,
                              const gchar *group)
 {
        EmpathyContactManagerPriv *priv = GET_PRIV (manager);
-       
+
        g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
 
        g_hash_table_foreach (priv->lists,
@@ -533,7 +533,7 @@ empathy_contact_manager_can_add (EmpathyContactManager *manager,
 {
        EmpathyContactManagerPriv *priv = GET_PRIV (manager);
        EmpathyTpContactList      *list;
-       
+
        g_return_val_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager), FALSE);
 
        list = g_hash_table_lookup (priv->lists, connection);
index 03ce8d28a397681eea6d296514e23aa81abcee78..bad6ef470accf2c280492309e52686392224b20a 100644 (file)
@@ -830,17 +830,16 @@ static gchar *
 contact_get_avatar_filename (EmpathyContact *contact,
                              const gchar *token)
 {
-  EmpathyContactPriv *priv = GET_PRIV (contact);
   McAccount *account;
   gchar *avatar_path;
   gchar *avatar_file;
   gchar *token_escaped;
   gchar *contact_escaped;
 
-  if (EMP_STR_EMPTY (priv->id))
+  if (EMP_STR_EMPTY (empathy_contact_get_id (contact)))
     return NULL;
 
-  contact_escaped = tp_escape_as_identifier (priv->id);
+  contact_escaped = tp_escape_as_identifier (empathy_contact_get_id (contact));
   token_escaped = tp_escape_as_identifier (token);
   account = empathy_contact_get_account (contact);
 
@@ -864,7 +863,7 @@ contact_get_avatar_filename (EmpathyContact *contact,
 
 void
 empathy_contact_load_avatar_data (EmpathyContact *contact,
-                                  const guchar  *data,
+                                  const guchar *data,
                                   const gsize len,
                                   const gchar *format,
                                   const gchar *token)
@@ -880,13 +879,13 @@ empathy_contact_load_avatar_data (EmpathyContact *contact,
   g_return_if_fail (!EMP_STR_EMPTY (token));
 
   /* Load and set the avatar */
+  filename = contact_get_avatar_filename (contact, token);
   avatar = empathy_avatar_new (g_memdup (data, len), len, g_strdup (format),
-      g_strdup (token));
+      g_strdup (token), filename);
   empathy_contact_set_avatar (contact, avatar);
   empathy_avatar_unref (avatar);
 
   /* Save to cache if not yet in it */
-  filename = contact_get_avatar_filename (contact, token);
   if (filename && !g_file_test (filename, G_FILE_TEST_EXISTS))
     {
       if (!empathy_avatar_save_to_file (avatar, filename, &error))
@@ -898,7 +897,6 @@ empathy_contact_load_avatar_data (EmpathyContact *contact,
       else
           DEBUG ("Avatar saved to %s", filename);
     }
-  g_free (filename);
 }
 
 gboolean
@@ -929,13 +927,11 @@ empathy_contact_load_avatar_cache (EmpathyContact *contact,
   if (data)
     {
       DEBUG ("Avatar loaded from %s", filename);
-      avatar = empathy_avatar_new (data, len, NULL, g_strdup (token));
+      avatar = empathy_avatar_new (data, len, NULL, g_strdup (token), filename);
       empathy_contact_set_avatar (contact, avatar);
       empathy_avatar_unref (avatar);
     }
 
-  g_free (filename);
-
   return data != NULL;
 }
 
@@ -954,11 +950,25 @@ empathy_avatar_get_type (void)
   return type_id;
 }
 
+/**
+ * empathy_avatar_new:
+ * @data: the avatar data
+ * @len: the size of avatar data
+ * @format: the mime type of the avatar image
+ * @token: the token of the avatar
+ * @filename: the filename where the avatar is stored in cache
+ *
+ * Create a #EmpathyAvatar from the provided data. This function takes the
+ * ownership of @data, @format, @token and @filename.
+ *
+ * Returns: a new #EmpathyAvatar
+ */
 EmpathyAvatar *
 empathy_avatar_new (guchar *data,
                     gsize len,
                     gchar *format,
-                    gchar *token)
+                    gchar *token,
+                    gchar *filename)
 {
   EmpathyAvatar *avatar;
 
@@ -967,6 +977,7 @@ empathy_avatar_new (guchar *data,
   avatar->len = len;
   avatar->format = format;
   avatar->token = token;
+  avatar->filename = filename;
   avatar->refcount = 1;
 
   return avatar;
@@ -1071,3 +1082,40 @@ empathy_contact_set_location (EmpathyContact *contact,
   priv->location = g_hash_table_ref (location);
   g_object_notify (G_OBJECT (contact), "location");
 }
+
+/**
+ * empathy_contact_equal:
+ * @contact1: an #EmpathyContact
+ * @contact2: an #EmpathyContact
+ *
+ * Returns FALSE if one of the contacts is NULL but the other is not.
+ * Otherwise returns TRUE if both pointer are equal or if they bith
+ * refer to the same id.
+ * It's only necessary to call this function if your contact objects
+ * come from logs where contacts are created dynamically and comparing
+ * pointers is not enough.
+ */
+gboolean
+empathy_contact_equal (gconstpointer contact1,
+                       gconstpointer contact2)
+{
+  EmpathyContact *c1;
+  EmpathyContact *c2;
+  const gchar *id1;
+  const gchar *id2;
+
+  if ((contact1 == NULL) != (contact2 == NULL)) {
+    return FALSE;
+  }
+  if (contact1 == contact2) {
+    return TRUE;
+  }
+  c1 = EMPATHY_CONTACT (contact1);
+  c2 = EMPATHY_CONTACT (contact2);
+  id1 = empathy_contact_get_id (c1);
+  id2 = empathy_contact_get_id (c2);
+  if (!tp_strdiff (id1, id2)) {
+    return TRUE;
+  }
+  return FALSE;
+}
index ff8d426e2dcff9b05e696aac25652f9b974de410..f88831342ca1fa4daf84e93ec72034a40fd6a7c5 100644 (file)
@@ -55,6 +55,7 @@ typedef struct {
   gsize len;
   gchar *format;
   gchar *token;
+  gchar *filename;
   guint refcount;
 } EmpathyAvatar;
 
@@ -114,7 +115,8 @@ GType empathy_avatar_get_type (void) G_GNUC_CONST;
 EmpathyAvatar * empathy_avatar_new (guchar *data,
     gsize len,
     gchar *format,
-    gchar *token);
+    gchar *token,
+    gchar *filename);
 EmpathyAvatar * empathy_avatar_ref (EmpathyAvatar *avatar);
 void empathy_avatar_unref (EmpathyAvatar *avatar);
 
@@ -123,7 +125,9 @@ gboolean empathy_avatar_save_to_file (EmpathyAvatar *avatar,
 
 GHashTable * empathy_contact_get_location (EmpathyContact *contact);
 void empathy_contact_set_location (EmpathyContact *contact,
-  GHashTable *location);
+    GHashTable *location);
+gboolean empathy_contact_equal (gconstpointer contact1,
+    gconstpointer contact2);
 
 G_END_DECLS
 
index bcfa25debdfd64568c4397472abae532220b50b5..99111deec90d2b3a84cb03eacdc96f59fdb2a0e5 100644 (file)
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
 /*
  * Copyright (C) 2007 Collabora Ltd.
  * Copyright (C) 2007 Nokia Corporation
@@ -33,6 +33,8 @@
 
 #include "empathy-debug.h"
 
+#include "empathy-debugger.h"
+
 #ifdef ENABLE_DEBUG
 
 static EmpathyDebugFlags flags = 0;
@@ -75,18 +77,74 @@ empathy_debug_flag_is_set (EmpathyDebugFlags flag)
   return (flag & flags) != 0;
 }
 
+GHashTable *flag_to_keys = NULL;
+
+static const gchar *
+debug_flag_to_key (EmpathyDebugFlags flag)
+{
+  if (flag_to_keys == NULL)
+    {
+      guint i;
+
+      flag_to_keys = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+          NULL, g_free);
+
+      for (i = 0; keys[i].value; i++)
+        {
+          GDebugKey key = (GDebugKey) keys[i];
+          g_hash_table_insert (flag_to_keys, GUINT_TO_POINTER (key.value),
+              g_strdup (key.key));
+        }
+    }
+
+  return g_hash_table_lookup (flag_to_keys, GUINT_TO_POINTER (flag));
+}
+
+void
+empathy_debug_free (void)
+{
+  if (flag_to_keys == NULL)
+    return;
+
+  g_hash_table_destroy (flag_to_keys);
+  flag_to_keys = NULL;
+}
+
+static void
+log_to_debugger (EmpathyDebugFlags flag,
+    const gchar *message)
+{
+  EmpathyDebugger *dbg = empathy_debugger_get_singleton ();
+  gchar *domain;
+  GTimeVal now;
+
+  g_get_current_time (&now);
+
+  domain = g_strdup_printf ("%s/%s", G_LOG_DOMAIN, debug_flag_to_key (flag));
+
+  empathy_debugger_add_message (dbg, &now, domain, G_LOG_LEVEL_DEBUG, message);
+
+  g_free (domain);
+}
+
 void
 empathy_debug (EmpathyDebugFlags flag,
-               const gchar *format,
-               ...)
+    const gchar *format,
+    ...)
 {
+  gchar *message;
+  va_list args;
+
+  va_start (args, format);
+  message = g_strdup_vprintf (format, args);
+  va_end (args);
+
+  log_to_debugger (flag, message);
+
   if (flag & flags)
-    {
-      va_list args;
-      va_start (args, format);
-      g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args);
-      va_end (args);
-    }
+    g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s", message);
+
+  g_free (message);
 }
 
 #else
index 787264dd0c523575432e21ef891ee00ac2116980..9df72892260a3a2aa7a3b80e3b4213bd1b916b67 100644 (file)
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
 /*
  * Copyright (C) 2007 Collabora Ltd.
  * Copyright (C) 2007 Nokia Corporation
@@ -46,6 +46,7 @@ typedef enum
 gboolean empathy_debug_flag_is_set (EmpathyDebugFlags flag);
 void empathy_debug (EmpathyDebugFlags flag, const gchar *format, ...)
     G_GNUC_PRINTF (2, 3);
+void empathy_debug_free (void);
 void empathy_debug_set_flags (const gchar *flags_string);
 G_END_DECLS
 
@@ -88,4 +89,7 @@ G_END_DECLS
 #define DEBUGGING 0
 
 #endif /* !defined (ENABLE_DEBUG) */
+
+#define gabble_debug_free() G_STMT_START { } G_STMT_END
+
 #endif /* defined (DEBUG_FLAG) */
diff --git a/libempathy/empathy-debugger.c b/libempathy/empathy-debugger.c
new file mode 100644 (file)
index 0000000..0487312
--- /dev/null
@@ -0,0 +1,270 @@
+/*
+ * Telepathy debug interface implementation
+ * Copyright (C) 2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "empathy-debugger.h"
+#include "config.h"
+
+#include <telepathy-glib/dbus.h>
+
+#include "extensions/extensions.h"
+
+static EmpathyDebugger *singleton = NULL;
+
+static void
+debug_iface_init (gpointer g_iface, gpointer iface_data);
+
+G_DEFINE_TYPE_WITH_CODE (EmpathyDebugger, empathy_debugger, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
+        tp_dbus_properties_mixin_iface_init);
+    G_IMPLEMENT_INTERFACE (EMP_TYPE_SVC_DEBUG, debug_iface_init));
+
+/* properties */
+enum
+{
+  PROP_ENABLED = 1,
+  NUM_PROPERTIES
+};
+
+static EmpDebugLevel
+log_level_flags_to_debug_level (GLogLevelFlags level)
+{
+  if (level & G_LOG_LEVEL_ERROR)
+    return EMP_DEBUG_LEVEL_ERROR;
+  else if (level & G_LOG_LEVEL_CRITICAL)
+    return EMP_DEBUG_LEVEL_CRITICAL;
+  else if (level & G_LOG_LEVEL_WARNING)
+    return EMP_DEBUG_LEVEL_WARNING;
+  else if (level & G_LOG_LEVEL_MESSAGE)
+    return EMP_DEBUG_LEVEL_MESSAGE;
+  else if (level & G_LOG_LEVEL_INFO)
+    return EMP_DEBUG_LEVEL_INFO;
+  else if (level & G_LOG_LEVEL_DEBUG)
+    return EMP_DEBUG_LEVEL_DEBUG;
+  else
+    /* Fall back to DEBUG if all else fails */
+    return EMP_DEBUG_LEVEL_DEBUG;
+}
+
+static EmpathyDebugMessage *
+debug_message_new (GTimeVal *timestamp,
+    const gchar *domain,
+    GLogLevelFlags level,
+    const gchar *string)
+{
+  EmpathyDebugMessage *msg;
+
+  msg = g_slice_new0 (EmpathyDebugMessage);
+  msg->timestamp = timestamp->tv_sec + timestamp->tv_usec / 1e6;
+  msg->domain = g_strdup (domain);
+  msg->level = log_level_flags_to_debug_level (level);
+  msg->string = g_strdup (string);
+  return msg;
+}
+
+static void
+debug_message_free (EmpathyDebugMessage *msg)
+{
+  g_free (msg->domain);
+  g_free (msg->string);
+  g_slice_free (EmpathyDebugMessage, msg);
+}
+
+static void
+empathy_debugger_get_property (GObject *object,
+    guint property_id,
+    GValue *value,
+    GParamSpec *pspec)
+{
+  EmpathyDebugger *self = EMPATHY_DEBUGGER (object);
+
+  switch (property_id)
+    {
+      case PROP_ENABLED:
+        g_value_set_boolean (value, self->enabled);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+    }
+}
+
+static void
+empathy_debugger_set_property (GObject *object,
+    guint property_id,
+    const GValue *value,
+    GParamSpec *pspec)
+{
+  EmpathyDebugger *self = EMPATHY_DEBUGGER (object);
+
+  switch (property_id)
+    {
+      case PROP_ENABLED:
+        self->enabled = g_value_get_boolean (value);
+        break;
+
+     default:
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+  }
+}
+
+static void
+empathy_debugger_finalize (GObject *object)
+{
+  EmpathyDebugger *self = EMPATHY_DEBUGGER (object);
+
+  g_queue_foreach (self->messages, (GFunc) debug_message_free, NULL);
+  g_queue_free (self->messages);
+  self->messages = NULL;
+
+  G_OBJECT_CLASS (empathy_debugger_parent_class)->finalize (object);
+}
+
+static void
+empathy_debugger_class_init (EmpathyDebuggerClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  static TpDBusPropertiesMixinPropImpl debug_props[] = {
+      { "Enabled", "enabled", "enabled" },
+      { NULL }
+  };
+  static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = {
+      { EMP_IFACE_DEBUG,
+        tp_dbus_properties_mixin_getter_gobject_properties,
+        tp_dbus_properties_mixin_setter_gobject_properties,
+        debug_props,
+      },
+      { NULL }
+  };
+
+  object_class->get_property = empathy_debugger_get_property;
+  object_class->set_property = empathy_debugger_set_property;
+  object_class->finalize = empathy_debugger_finalize;
+
+  g_object_class_install_property (object_class, PROP_ENABLED,
+      g_param_spec_boolean ("enabled", "Enabled?",
+          "True if the new-debug-message signal is enabled.",
+          FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  klass->dbus_props_class.interfaces = prop_interfaces;
+  tp_dbus_properties_mixin_class_init (object_class,
+      G_STRUCT_OFFSET (EmpathyDebuggerClass, dbus_props_class));
+}
+
+static void
+get_messages (EmpSvcDebug *self,
+    DBusGMethodInvocation *context)
+{
+  EmpathyDebugger *dbg = EMPATHY_DEBUGGER (self);
+  GPtrArray *messages;
+  static GType struct_type = 0;
+  GList *i;
+  guint j;
+
+  if (G_UNLIKELY (struct_type == 0))
+    {
+      struct_type = dbus_g_type_get_struct (
+          "GValueArray", G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_UINT,
+          G_TYPE_STRING, G_TYPE_INVALID);
+    }
+
+  messages = g_ptr_array_sized_new (g_queue_get_length (dbg->messages));
+
+  for (i = dbg->messages->head; i; i = i->next)
+    {
+      GValue gvalue = { 0 };
+      EmpathyDebugMessage *message = (EmpathyDebugMessage *) i->data;
+
+      g_value_init (&gvalue, struct_type);
+      g_value_take_boxed (&gvalue,
+          dbus_g_type_specialized_construct (struct_type));
+      dbus_g_type_struct_set (&gvalue,
+          0, message->timestamp,
+          1, message->domain,
+          2, message->level,
+          3, message->string,
+          G_MAXUINT);
+      g_ptr_array_add (messages, g_value_get_boxed (&gvalue));
+    }
+
+  emp_svc_debug_return_from_get_messages (context, messages);
+
+  for (j = 0; j < messages->len; j++)
+    g_boxed_free (struct_type, messages->pdata[j]);
+
+  g_ptr_array_free (messages, TRUE);
+}
+
+static void
+debug_iface_init (gpointer g_iface,
+    gpointer iface_data)
+{
+  EmpSvcDebugClass *klass = (EmpSvcDebugClass *) g_iface;
+
+  emp_svc_debug_implement_get_messages (klass, get_messages);
+}
+
+static void
+empathy_debugger_init (EmpathyDebugger *self)
+{
+  self->messages = g_queue_new ();
+}
+
+EmpathyDebugger *
+empathy_debugger_get_singleton (void)
+{
+  if (G_UNLIKELY (singleton == NULL))
+    {
+      DBusGConnection *bus;
+
+      singleton = g_object_new (EMPATHY_TYPE_DEBUGGER, NULL);
+      bus = tp_get_bus ();
+      dbus_g_connection_register_g_object (bus,
+          "/org/freedesktop/Telepathy/debug", (GObject *) singleton);
+    }
+
+  return singleton;
+}
+
+void
+empathy_debugger_add_message (EmpathyDebugger *self,
+    GTimeVal *timestamp,
+    const gchar *domain,
+    GLogLevelFlags level,
+    const gchar *string)
+{
+  EmpathyDebugMessage *new_msg;
+
+  if (g_queue_get_length (self->messages) >= DEBUG_MESSAGE_LIMIT)
+    {
+      EmpathyDebugMessage *old_head =
+        (EmpathyDebugMessage *) g_queue_pop_head (self->messages);
+
+      debug_message_free (old_head);
+    }
+
+  new_msg = debug_message_new (timestamp, domain, level, string);
+  g_queue_push_tail (self->messages, new_msg);
+
+  if (self->enabled)
+    {
+      emp_svc_debug_emit_new_debug_message (self, new_msg->timestamp,
+          domain, new_msg->level, string);
+    }
+}
diff --git a/libempathy/empathy-debugger.h b/libempathy/empathy-debugger.h
new file mode 100644 (file)
index 0000000..f3fdc70
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * header for Telepathy debug interface implementation
+ * Copyright (C) 2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _EMPATHY_DEBUGGER
+#define _EMPATHY_DEBUGGER
+
+#include <glib-object.h>
+
+#include <telepathy-glib/properties-mixin.h>
+#include <telepathy-glib/dbus-properties-mixin.h>
+
+#include "extensions/extensions.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_DEBUGGER empathy_debugger_get_type()
+
+#define EMPATHY_DEBUGGER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_DEBUGGER, EmpathyDebugger))
+
+#define EMPATHY_DEBUGGER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_DEBUGGER, EmpathyDebuggerClass))
+
+#define EMPATHY_IS_DEBUGGER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_DEBUGGER))
+
+#define EMPATHY_IS_DEBUGGER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_DEBUGGER))
+
+#define EMPATHY_DEBUGGER_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_DEBUGGER, EmpathyDebuggerClass))
+
+/* On the basis that messages are around 60 bytes on average, and that 50kb is
+ * a reasonable maximum size for a frame buffer.
+ */
+
+#define DEBUG_MESSAGE_LIMIT 800
+
+typedef struct {
+  gdouble timestamp;
+  gchar *domain;
+  EmpDebugLevel level;
+  gchar *string;
+} EmpathyDebugMessage;
+
+typedef struct {
+  GObject parent;
+
+  gboolean enabled;
+  GQueue *messages;
+} EmpathyDebugger;
+
+typedef struct {
+  GObjectClass parent_class;
+  TpDBusPropertiesMixinClass dbus_props_class;
+} EmpathyDebuggerClass;
+
+GType empathy_debugger_get_type (void);
+
+EmpathyDebugger *
+empathy_debugger_get_singleton (void);
+
+void
+empathy_debugger_add_message (EmpathyDebugger *self,
+    GTimeVal *timestamp,
+    const gchar *domain,
+    GLogLevelFlags level,
+    const gchar *string);
+
+G_END_DECLS
+
+#endif /* _EMPATHY_DEBUGGER */
index f46d15f808d6562e212ca0b6756690cf40ca1f3e..b51df95fa71e1937fd47da417ac7dfc7dabc16da 100644 (file)
@@ -112,7 +112,16 @@ typedef struct
   GHashTable *dispatched_channels;
   /* ObjectPath -> EmpathyDispatchOperations */
   GHashTable *dispatching_channels;
-  /* ObjectPath -> EmpathyDispatchOperations */
+
+  /* ObjectPath -> EmpathyDispatchOperations
+   *
+   * This holds channels which were announced with NewChannel while we have an
+   * outstanding channel request for a channel of this type. On the Requests
+   * interface, CreateChannel and EnsureChannel are guaranteed by the spec to
+   * return before NewChannels is emitted, but there was no guarantee of the
+   * ordering of RequestChannel vs. NewChannel. So if necessary, channels are
+   * held in limbo here until we know whether they were requested.
+   */
   GHashTable *outstanding_channels;
   /* List of DispatcherRequestData */
   GList *outstanding_requests;
@@ -523,8 +532,8 @@ dispatcher_flush_outstanding_operations (EmpathyDispatcher *self,
 
       if (dispatcher_operation_can_start (self, operation, cd))
         {
-          dispatcher_start_dispatching (dispatcher, operation, cd);
           g_hash_table_iter_remove (&iter);
+          dispatcher_start_dispatching (dispatcher, operation, cd);
         }
     }
 }
index ba81fd4c77c173f4617ec75d95e4c5d72bcb673a..d24467b24e329c87be2143d4e9ef1d612b698493 100644 (file)
@@ -1149,9 +1149,25 @@ ft_handler_gfile_ready_cb (GObject *source,
   if (error != NULL)
     goto out;
 
+  if (g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR)
+    {
+      error = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
+          EMPATHY_FT_ERROR_INVALID_SOURCE_FILE,
+          _("The selected file is not a regular file"));
+      goto out;
+    }
+
+  priv->total_bytes = g_file_info_get_size (info);
+  if (priv->total_bytes == 0)
+    {
+      error = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
+          EMPATHY_FT_ERROR_EMPTY_SOURCE_FILE,
+          _("The selected file is empty"));
+      goto out;
+    }
+
   priv->content_type = g_strdup (g_file_info_get_content_type (info));
   priv->filename = g_strdup (g_file_info_get_display_name (info));
-  priv->total_bytes = g_file_info_get_size (info);
   g_file_info_get_modification_time (info, &mtime);
   priv->mtime = mtime.tv_sec;
   priv->transferred_bytes = 0;
@@ -1303,6 +1319,7 @@ empathy_ft_handler_new_outgoing (EmpathyContact *contact,
       G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME ","
       G_FILE_ATTRIBUTE_STANDARD_SIZE ","
       G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
+      G_FILE_ATTRIBUTE_STANDARD_TYPE ","
       G_FILE_ATTRIBUTE_TIME_MODIFIED,
       G_FILE_QUERY_INFO_NONE, G_PRIORITY_DEFAULT,
       NULL, (GAsyncReadyCallback) ft_handler_gfile_ready_cb, data);
index 92ab9f39f785d326ae6f5a5f1e5e0a198bb2ffbb..2ed1440fc8690d04584a8317a6256cb904e5b144 100644 (file)
@@ -68,6 +68,14 @@ typedef enum {
        NM_STATE_DISCONNECTED
 } NMState;
 
+typedef enum {
+       SESSION_STATUS_AVAILABLE,
+       SESSION_STATUS_INVISIBLE,
+       SESSION_STATUS_BUSY,
+       SESSION_STATUS_IDLE,
+       SESSION_STATUS_UNKNOWN
+} SessionStatus;
+
 enum {
        PROP_0,
        PROP_STATE,
@@ -91,6 +99,10 @@ idle_presence_changed_cb (MissionControl *mc,
 
        priv = GET_PRIV (idle);
 
+       if (state == TP_CONNECTION_PRESENCE_TYPE_UNSET)
+               /* Assume our presence is offline if MC reports UNSET */
+               state = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
+
        DEBUG ("Presence changed to '%s' (%d)", status, state);
 
        g_free (priv->status);
@@ -147,14 +159,17 @@ idle_ext_away_start (EmpathyIdle *idle)
 }
 
 static void
-idle_session_idle_changed_cb (DBusGProxy  *gs_proxy,
-                             gboolean     is_idle,
-                             EmpathyIdle *idle)
+idle_session_status_changed_cb (DBusGProxy    *gs_proxy,
+                               SessionStatus  status,
+                               EmpathyIdle   *idle)
 {
        EmpathyIdlePriv *priv;
+       gboolean is_idle;
 
        priv = GET_PRIV (idle);
 
+       is_idle = (status == SESSION_STATUS_IDLE);
+
        DEBUG ("Session idle state changed, %s -> %s",
                priv->is_idle ? "yes" : "no",
                is_idle ? "yes" : "no");
@@ -465,7 +480,10 @@ empathy_idle_init (EmpathyIdle *idle)
        if (error) {
                DEBUG ("Error getting actual presence: %s", error->message);
 
-               priv->state = TP_CONNECTION_PRESENCE_TYPE_UNSET;
+               /* Fallback to OFFLINE as that's what mission_control_get_presence_actual
+               does. This also ensure to always display the status icon (there is no
+               unset presence icon). */
+               priv->state = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
                g_clear_error (&error);
        }
        priv->status = mission_control_get_presence_message_actual (priv->mc, &error);
@@ -485,15 +503,14 @@ empathy_idle_init (EmpathyIdle *idle)
                                     idle, NULL);
 
        priv->gs_proxy = dbus_g_proxy_new_for_name (tp_get_bus (),
-                                                   "org.gnome.ScreenSaver",
-                                                   "/org/gnome/ScreenSaver",
-                                                   "org.gnome.ScreenSaver");
+                                                   "org.gnome.SessionManager",
+                                                   "/org/gnome/SessionManager/Presence",
+                                                   "org.gnome.SessionManager.Presence");
        if (priv->gs_proxy) {
-               dbus_g_proxy_add_signal (priv->gs_proxy, "SessionIdleChanged",
-                                        G_TYPE_BOOLEAN,
-                                        G_TYPE_INVALID);
-               dbus_g_proxy_connect_signal (priv->gs_proxy, "SessionIdleChanged",
-                                            G_CALLBACK (idle_session_idle_changed_cb),
+               dbus_g_proxy_add_signal (priv->gs_proxy, "StatusChanged",
+                                        G_TYPE_UINT, G_TYPE_INVALID);
+               dbus_g_proxy_connect_signal (priv->gs_proxy, "StatusChanged",
+                                            G_CALLBACK (idle_session_status_changed_cb),
                                             idle, NULL);
        } else {
                DEBUG ("Failed to get gs proxy");
@@ -726,7 +743,7 @@ empathy_idle_set_use_nm (EmpathyIdle *idle,
                        g_clear_error (&error);
                        nm_status = NM_STATE_ASLEEP;
                }
-               
+
                idle_nm_state_change_cb (priv->nm_proxy, nm_status, idle);
        } else {
                priv->nm_connected = TRUE;
index 9f9a2030bccd4fa6c69e0d30c6fef036105a65dc..135212cc5a50e452fee3218f4f803dff98f7d633 100644 (file)
@@ -131,16 +131,17 @@ status_presets_file_parse (const gchar *filename)
 
                        if (state_str) {
                                state = empathy_presence_from_str (state_str);
-
-                               if (is_default) {
-                                       DEBUG ("Default status preset state is:"
-                                               " '%s', status:'%s'", state_str,
-                                               status);
-
-                                       status_presets_set_default (state, status);
-                               } else {
-                                       preset = status_preset_new (state, status);
-                                       presets = g_list_append (presets, preset);
+                               if (empathy_status_presets_is_valid (state)) {
+                                       if (is_default) {
+                                               DEBUG ("Default status preset state is:"
+                                                       " '%s', status:'%s'", state_str,
+                                                       status);
+
+                                               status_presets_set_default (state, status);
+                                       } else {
+                                               preset = status_preset_new (state, status);
+                                               presets = g_list_append (presets, preset);
+                                       }
                                }
                        }
 
@@ -405,3 +406,31 @@ empathy_status_presets_clear_default (void)
 
        status_presets_file_save ();
 }
+
+/**
+ * empathy_status_presets_is_valid:
+ * @state: a #TpConnectionPresenceType
+ *
+ * Check if a presence type can be used as a preset.
+ *
+ * Returns: %TRUE if the presence type can be used as a preset.
+ */
+gboolean
+empathy_status_presets_is_valid (TpConnectionPresenceType state)
+{
+       switch (state) {
+               case TP_CONNECTION_PRESENCE_TYPE_UNSET:
+               case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
+               case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
+               case TP_CONNECTION_PRESENCE_TYPE_ERROR:
+                       return FALSE;
+
+               case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
+               case TP_CONNECTION_PRESENCE_TYPE_AWAY:
+               case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY:
+               case TP_CONNECTION_PRESENCE_TYPE_HIDDEN:
+               case TP_CONNECTION_PRESENCE_TYPE_BUSY:
+                       return TRUE;
+       }
+       return FALSE;
+}
index 335dbcfcb2b18e9b1a0d014b5b6c1c18fdf0b42b..331c630d50c9b21fad0ee54bf2e2a87290b92d59 100644 (file)
@@ -40,6 +40,7 @@ const gchar * empathy_status_presets_get_default_status (void);
 void          empathy_status_presets_set_default        (TpConnectionPresenceType   state,
                                                         const gchar *status);
 void          empathy_status_presets_clear_default      (void);
+gboolean      empathy_status_presets_is_valid           (TpConnectionPresenceType   state);
 
 G_END_DECLS
 
index 64350404c3bca9457bd6f45daffc4c7d0b277f0f..19397e7a9fc757180251dd1a5e6df935e444377c 100644 (file)
@@ -42,7 +42,7 @@ empathy_time_get_local_time (struct tm *tm)
 {
        const gchar *timezone;
        time_t       t;
-       
+
        timezone = g_getenv ("TZ");
        g_setenv ("TZ", "", TRUE);
 
@@ -152,6 +152,11 @@ empathy_time_to_string_relative (time_t then)
                        return g_strdup_printf (ngettext ("%d day ago",
                                "%d days ago", seconds), seconds);
                }
+               else if (seconds < (60 * 60 * 24 * 30)) {
+                       seconds /= 60 * 60 * 24 * 7;
+                       return g_strdup_printf (ngettext ("%d week ago",
+                               "%d weeks ago", seconds), seconds);
+               }
                else {
                        seconds /= 60 * 60 * 24 * 30;
                        return g_strdup_printf (ngettext ("%d month ago",
index 2971e0ffc09fced718fe655b8767b2c80c986e1e..eb70c1a87d49615cda4eb3265d5f462c83e78538 100644 (file)
@@ -672,3 +672,40 @@ empathy_tp_call_has_dtmf (EmpathyTpCall *call)
       TP_IFACE_QUARK_CHANNEL_INTERFACE_DTMF);
 }
 
+/**
+ * empathy_tp_call_is_receiving_video:
+ * @call: the call
+ *
+ * Indicates if the call is receiving video or not.
+ *
+ * Returns: %TRUE if the call is currently receiving video, %FALSE otherwise.
+ */
+gboolean
+empathy_tp_call_is_receiving_video (EmpathyTpCall *call)
+{
+  EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+  g_return_val_if_fail (EMPATHY_IS_TP_CALL (call), FALSE);
+
+  return priv->video->direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE ?
+      TRUE : FALSE;
+}
+
+/**
+ * empathy_tp_call_is_sending_video:
+ * @call: the call
+ *
+ * Indicates if the call is sending video or not.
+ *
+ * Returns: %TRUE if the call is currently sending video, %FALSE otherwise.
+ */
+gboolean
+empathy_tp_call_is_sending_video (EmpathyTpCall *call)
+{
+  EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+  g_return_val_if_fail (EMPATHY_IS_TP_CALL (call), FALSE);
+
+  return priv->video->direction & TP_MEDIA_STREAM_DIRECTION_SEND ?
+      TRUE : FALSE;
+}
index 406ed1c3f6ec18665c0219de7766f2ba318cebf1..a00fe3e40ac290fa13242d5805844e591712f319 100644 (file)
@@ -85,6 +85,8 @@ void empathy_tp_call_request_video_stream_direction (EmpathyTpCall *call,
 void empathy_tp_call_start_tone (EmpathyTpCall *call, TpDTMFEvent event);
 void empathy_tp_call_stop_tone (EmpathyTpCall *call);
 gboolean empathy_tp_call_has_dtmf (EmpathyTpCall *call);
+gboolean empathy_tp_call_is_receiving_video (EmpathyTpCall *call);
+gboolean empathy_tp_call_is_sending_video (EmpathyTpCall *call);
 
 G_END_DECLS
 
index 794e3e3b76e5a5eddd7828f7d6edad2f1da5f380..ac61392e033268df517d89bfe62e96a1c3728145 100644 (file)
@@ -993,7 +993,7 @@ tp_chat_constructor (GType                  type,
 
                /* Get initial member contacts */
                members = tp_channel_group_get_members (priv->channel);
-               handles = tp_intset_to_array (members);         
+               handles = tp_intset_to_array (members);
                empathy_tp_contact_factory_get_from_handles (priv->factory,
                        handles->len, (TpHandle *) handles->data,
                        tp_chat_got_added_contacts_cb, NULL, NULL, chat);
index 58cb89cbef46558df5dae09f5dff070f126120db..cdb0431c4f05acf4f72a81b0b20810addd80a64e 100644 (file)
@@ -205,7 +205,7 @@ tp_contact_list_group_members_changed_cb (TpChannel     *channel,
                g_signal_emit_by_name (list, "groups-changed", contact,
                                       group_name,
                                       TRUE);
-       }       
+       }
 
        for (i = 0; i < removed->len; i++) {
                EmpathyContact *contact;
@@ -224,7 +224,7 @@ tp_contact_list_group_members_changed_cb (TpChannel     *channel,
                g_signal_emit_by_name (list, "groups-changed", contact,
                                       group_name,
                                       FALSE);
-       }       
+       }
 }
 
 static void
index 3a58268680fa77fa69c33cbfa5fdd1a85503a418..e60b2999d045b8752d3ef12e1cd60e9d3aace5e1 100644 (file)
@@ -26,6 +26,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <errno.h>
+#include <arpa/inet.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
@@ -36,6 +37,7 @@
 #include <gio/gunixinputstream.h>
 #include <gio/gunixoutputstream.h>
 
+#include <telepathy-glib/gtypes.h>
 #include <telepathy-glib/proxy-subclass.h>
 #include <telepathy-glib/util.h>
 
@@ -71,11 +73,14 @@ typedef struct {
   /* org.freedesktop.Telepathy.Channel.Type.FileTransfer D-Bus properties */
   TpFileTransferState state;
   TpFileTransferStateChangeReason state_change_reason;
+  TpSocketAddressType socket_address_type;
+  TpSocketAccessControl socket_access_control;
 
   /* transfer properties */
   gboolean incoming;
   time_t start_time;
-  GArray *unix_socket_path;
+  GArray *socket_address;
+  guint port;
   guint64 offset;
 
   /* GCancellable we're passed when offering/accepting the transfer */
@@ -123,6 +128,54 @@ tp_file_get_state_cb (TpProxy *proxy,
   priv->state = g_value_get_uint (value);
 }
 
+static void
+tp_file_get_available_socket_types_cb (TpProxy *proxy,
+    const GValue *value,
+    const GError *error,
+    gpointer user_data,
+    GObject *weak_object)
+{
+  EmpathyTpFilePriv *priv = GET_PRIV (weak_object);
+  GHashTable *socket_types;
+  GArray *access_controls;
+
+  if (error != NULL ||
+      !G_VALUE_HOLDS (value, TP_HASH_TYPE_SUPPORTED_SOCKET_MAP))
+    {
+      /* set a default value */
+      priv->socket_address_type = TP_SOCKET_ADDRESS_TYPE_UNIX;
+      priv->socket_access_control = TP_SOCKET_ACCESS_CONTROL_LOCALHOST;
+      goto out;
+    }
+
+  socket_types = g_value_get_boxed (value);
+
+  /* here UNIX is preferred to IPV4 */
+  if ((access_controls = g_hash_table_lookup (socket_types,
+      GUINT_TO_POINTER (TP_SOCKET_ADDRESS_TYPE_UNIX))) != NULL)
+    {
+      priv->socket_address_type = TP_SOCKET_ADDRESS_TYPE_UNIX;
+      priv->socket_access_control = TP_SOCKET_ACCESS_CONTROL_LOCALHOST;
+      goto out;
+    }
+
+  if ((access_controls = g_hash_table_lookup (socket_types,
+      GUINT_TO_POINTER (TP_SOCKET_ADDRESS_TYPE_IPV4))) != NULL)
+    {
+      priv->socket_address_type = TP_SOCKET_ADDRESS_TYPE_IPV4;
+
+      /* TODO: we should prefer PORT over LOCALHOST when the CM will
+       * support it.
+       */
+
+      priv->socket_access_control = TP_SOCKET_ACCESS_CONTROL_LOCALHOST;
+    }
+
+out:
+  DEBUG ("Socket address type: %u, access control %u",
+      priv->socket_address_type, priv->socket_access_control);
+}
+
 static void
 tp_file_invalidated_cb (TpProxy       *proxy,
     guint          domain,
@@ -206,12 +259,35 @@ splice_stream_ready_cb (GObject *source,
 static void
 tp_file_start_transfer (EmpathyTpFile *tp_file)
 {
-  gint fd;
-  struct sockaddr_un addr;
+  gint fd, domain, res = 0;
   GError *error = NULL;
+  struct sockaddr *my_addr = NULL;
+  size_t my_size = 0;
   EmpathyTpFilePriv *priv = GET_PRIV (tp_file);
 
-  fd = socket (PF_UNIX, SOCK_STREAM, 0);
+  if (priv->socket_address_type == TP_SOCKET_ADDRESS_TYPE_UNIX)
+    {
+      domain = AF_UNIX;
+    }
+  else if (priv->socket_address_type == TP_SOCKET_ADDRESS_TYPE_IPV4)
+    {
+      domain = AF_INET;
+    }
+  else
+    {
+      error = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
+          EMPATHY_FT_ERROR_NOT_SUPPORTED, _("Socket type not supported"));
+
+      DEBUG ("Socket not supported, closing channel");
+
+      ft_operation_close_with_error (tp_file, error);
+      g_clear_error (&error);
+
+      return;
+    }
+
+  fd = socket (domain, SOCK_STREAM, 0);
+
   if (fd < 0)
     {
       int code = errno;
@@ -227,12 +303,34 @@ tp_file_start_transfer (EmpathyTpFile *tp_file)
       return;
     }
 
-  memset (&addr, 0, sizeof (addr));
-  addr.sun_family = AF_UNIX;
-  strncpy (addr.sun_path, priv->unix_socket_path->data,
-      priv->unix_socket_path->len);
+  if (priv->socket_address_type == TP_SOCKET_ADDRESS_TYPE_UNIX)
+    {
+      struct sockaddr_un addr;
+
+      memset (&addr, 0, sizeof (addr));
+      addr.sun_family = domain;
+      strncpy (addr.sun_path, priv->socket_address->data,
+          priv->socket_address->len);
+
+      my_addr = (struct sockaddr *) &addr;
+      my_size = sizeof (addr);
+    }
+  else if (priv->socket_address_type == TP_SOCKET_ADDRESS_TYPE_IPV4)
+    {
+      struct sockaddr_in addr;
+
+      memset (&addr, 0, sizeof (addr));
+      addr.sin_family = domain;
+      inet_pton (AF_INET, priv->socket_address->data, &addr.sin_addr);
+      addr.sin_port = htons (priv->port);
+
+      my_addr = (struct sockaddr *) &addr;
+      my_size = sizeof (addr);
+    }
+
+  res = connect (fd, my_addr, my_size);
 
-  if (connect (fd, (struct sockaddr*) &addr, sizeof (addr)) < 0)
+  if (res < 0)
     {
       int code = errno;
 
@@ -354,7 +452,7 @@ tp_file_state_changed_cb (TpChannel *proxy,
    * data transfer but are just an observer for the channel.
    */
   if (state == TP_FILE_TRANSFER_STATE_OPEN &&
-      priv->unix_socket_path != NULL)
+      priv->socket_address != NULL)
     tp_file_start_transfer (EMPATHY_TP_FILE (weak_object));
 
   if (state == TP_FILE_TRANSFER_STATE_COMPLETED)
@@ -407,13 +505,14 @@ ft_operation_provide_or_accept_file_cb (TpChannel *proxy,
           * report the method error.
           */
           g_clear_error (&myerr);
-          myerr = g_error_copy (error);
         }
+
+      myerr = g_error_copy (error);
     }
 
   if (myerr != NULL)
     {
-      DEBUG ("Error: %s", error->message);
+      DEBUG ("Error: %s", myerr->message);
       ft_operation_close_with_error (tp_file, myerr);
       g_clear_error (&myerr);
       return;
@@ -421,7 +520,7 @@ ft_operation_provide_or_accept_file_cb (TpChannel *proxy,
 
   if (G_VALUE_TYPE (address) == DBUS_TYPE_G_UCHAR_ARRAY)
     {
-      priv->unix_socket_path = g_value_dup_boxed (address);
+      priv->socket_address = g_value_dup_boxed (address);
     }
   else if (G_VALUE_TYPE (address) == G_TYPE_STRING)
     {
@@ -430,12 +529,32 @@ ft_operation_provide_or_accept_file_cb (TpChannel *proxy,
       const gchar *path;
 
       path = g_value_get_string (address);
-      priv->unix_socket_path = g_array_sized_new (TRUE, FALSE, sizeof (gchar),
-                                                  strlen (path));
-      g_array_insert_vals (priv->unix_socket_path, 0, path, strlen (path));
+      priv->socket_address = g_array_sized_new (TRUE, FALSE, sizeof (gchar),
+          strlen (path));
+      g_array_insert_vals (priv->socket_address, 0, path, strlen (path));
+    }
+  else if (G_VALUE_TYPE (address) == TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4)
+    {
+      GValueArray *val_array;
+      GValue *v;
+      const char *addr;
+
+      val_array = g_value_get_boxed (address);
+
+      /* IPV4 address */
+      v = g_value_array_get_nth (val_array, 0);
+      addr = g_value_get_string (v);
+      priv->socket_address = g_array_sized_new (TRUE, FALSE, sizeof (gchar),
+          strlen (addr));
+      g_array_insert_vals (priv->socket_address, 0, addr, strlen (addr));
+
+      /* port number */
+      v = g_value_array_get_nth (val_array, 1);
+      priv->port = g_value_get_uint (v);
     }
 
-  DEBUG ("Got unix socket path: %s", priv->unix_socket_path->data);
+  DEBUG ("Got socket address: %s, port (not zero if IPV4): %d",
+      priv->socket_address->data, priv->port);
 
   /* if the channel is already open, start the transfer now, otherwise,
    * wait for the state change signal.
@@ -444,6 +563,18 @@ ft_operation_provide_or_accept_file_cb (TpChannel *proxy,
     tp_file_start_transfer (tp_file);
 }
 
+static void
+initialize_empty_ac_variant (TpSocketAccessControl ac,
+    GValue *val)
+{
+  /* TODO: we will add more types here once we support PORT access control. */
+  if (ac == TP_SOCKET_ACCESS_CONTROL_LOCALHOST)
+    {
+      g_value_init (val, G_TYPE_STRING);
+      g_value_set_static_string (val, "");
+    }
+}
+
 static void
 file_read_async_cb (GObject *source,
     GAsyncResult *res,
@@ -468,12 +599,14 @@ file_read_async_cb (GObject *source,
 
   priv->in_stream = G_INPUT_STREAM (in_stream);
 
-  g_value_init (&nothing, G_TYPE_STRING);
-  g_value_set_static_string (&nothing, "");
+  /* we don't impose specific interface/port requirements even
+   * if we're not using UNIX sockets.
+   */
+  initialize_empty_ac_variant (priv->socket_access_control, &nothing);
 
   tp_cli_channel_type_file_transfer_call_provide_file (
       priv->channel, -1,
-      TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST,
+      priv->socket_address_type, priv->socket_access_control,
       &nothing, ft_operation_provide_or_accept_file_cb,
       NULL, NULL, G_OBJECT (tp_file));
 }
@@ -503,11 +636,13 @@ file_replace_async_cb (GObject *source,
 
   priv->out_stream = G_OUTPUT_STREAM (out_stream);
 
-  g_value_init (&nothing, G_TYPE_STRING);
-  g_value_set_static_string (&nothing, "");
+  /* we don't impose specific interface/port requirements even
+   * if we're not using UNIX sockets.
+   */
+  initialize_empty_ac_variant (priv->socket_access_control, &nothing);
 
   tp_cli_channel_type_file_transfer_call_accept_file (priv->channel,
-      -1, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST,
+      -1, priv->socket_address_type, priv->socket_access_control,
       &nothing, priv->offset,
       ft_operation_provide_or_accept_file_cb, NULL, NULL, G_OBJECT (tp_file));
 }
@@ -592,10 +727,10 @@ do_finalize (GObject *object)
 
   DEBUG ("%p", object);
 
-  if (priv->unix_socket_path != NULL)
+  if (priv->socket_address != NULL)
     {
-      g_array_free (priv->unix_socket_path, TRUE);
-      priv->unix_socket_path = NULL;
+      g_array_free (priv->socket_address, TRUE);
+      priv->socket_address = NULL;
     }
 
   G_OBJECT_CLASS (empathy_tp_file_parent_class)->finalize (object);
@@ -667,6 +802,10 @@ do_constructed (GObject *object)
       -1, TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER, "State", tp_file_get_state_cb,
       NULL, NULL, object);
 
+  tp_cli_dbus_properties_call_get (priv->channel,
+      -1, TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER, "AvailableSocketTypes",
+      tp_file_get_available_socket_types_cb, NULL, NULL, object);
+
   priv->state_change_reason =
       TP_FILE_TRANSFER_STATE_CHANGE_REASON_NONE;
 }
index 0d7d8efc00d8bd2f76594e123e3835e11f53223a..b40b8c364956de02fc75edf6eb6cac90c16256a6 100644 (file)
@@ -50,7 +50,9 @@ typedef enum {
        EMPATHY_FT_ERROR_HASH_MISMATCH,
        EMPATHY_FT_ERROR_TP_ERROR,
        EMPATHY_FT_ERROR_SOCKET,
-       EMPATHY_FT_ERROR_NOT_SUPPORTED
+       EMPATHY_FT_ERROR_NOT_SUPPORTED,
+       EMPATHY_FT_ERROR_INVALID_SOURCE_FILE,
+       EMPATHY_FT_ERROR_EMPTY_SOURCE_FILE
 } EmpathyFTErrorEnum;
 
 typedef struct _EmpathyTpFile EmpathyTpFile;
diff --git a/libempathy/empathy-tp-tube.c b/libempathy/empathy-tp-tube.c
deleted file mode 100644 (file)
index 7b9b188..0000000
+++ /dev/null
@@ -1,669 +0,0 @@
-/*
- * Copyright (C) 2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- *          Elliot Fairweather <elliot.fairweather@collabora.co.uk>
- */
-
-#include <config.h>
-
-#include <telepathy-glib/connection.h>
-#include <telepathy-glib/proxy.h>
-#include <telepathy-glib/util.h>
-#include <extensions/extensions.h>
-
-#include "empathy-enum-types.h"
-#include "empathy-tp-tube.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TP
-#include "empathy-debug.h"
-
-typedef struct {
-  TpSocketAddressType type;
-  EmpathyTpTubeAcceptStreamTubeCb *callback;
-  gpointer user_data;
-} EmpathyTpTubeAcceptData;
-
-static EmpathyTpTubeAcceptData *
-new_empathy_tp_tube_accept_data (TpSocketAddressType type,
-  EmpathyTpTubeAcceptStreamTubeCb *callback,
-  gpointer user_data)
-{
-  EmpathyTpTubeAcceptData *r;
-
-  r = g_slice_new0 (EmpathyTpTubeAcceptData);
-  r->type = type;
-  r->callback = callback;
-  r->user_data = user_data;
-
-  return r;
-}
-
-static void
-free_empathy_tp_tube_accept_data (gpointer data)
-{
-  g_slice_free (EmpathyTpTubeAcceptData, data);
-}
-
-
-typedef struct {
-    EmpathyTpTubeReadyCb *callback;
-    gpointer user_data;
-    GDestroyNotify destroy;
-    GObject *weak_object;
-} ReadyCbData;
-
-/**
- * SECTION:empathy-tp-tube
- * @title:EmpathyTpTube
- * @short_description: A wrapper around a Telepathy tube channel
- * @include: libempathy/empathy-tp-tube.h
- *
- * #EmpathyTpTube is a convenient object wrapping a Telepathy tube channel.
- */
-
-/**
- * EmpathyTpTube:
- * @parent: parent object
- *
- * An object wrapping a Telepathy tube channel.
- */
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpTube)
-typedef struct
-{
-  TpChannel *channel;
-  TpTubeChannelState state;
-  gboolean ready;
-  GSList *ready_callbacks;
-} EmpathyTpTubePriv;
-
-enum
-{
-  PROP_0,
-  PROP_CHANNEL,
-  PROP_STATE,
-};
-
-enum
-{
-  DESTROY,
-  LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (EmpathyTpTube, empathy_tp_tube, G_TYPE_OBJECT)
-
-static void
-tp_tube_state_changed_cb (TpChannel *channel,
-                          TpTubeChannelState state,
-                          gpointer user_data,
-                          GObject *tube)
-{
-  EmpathyTpTubePriv *priv = GET_PRIV (tube);
-
-  if (!priv->ready)
-    /* We didn't get the state yet */
-    return;
-
-  DEBUG ("Tube state changed");
-
-  priv->state = state;
-  g_object_notify (tube, "state");
-}
-
-static void
-tp_tube_invalidated_cb (TpChannel *channel,
-    GQuark domain,
-    gint code,
-    gchar *message,
-    EmpathyTpTube *tube)
-{
-  DEBUG ("Channel invalidated: %s", message);
-  g_signal_emit (tube, signals[DESTROY], 0);
-}
-
-static void
-tp_tube_async_cb (TpChannel *channel,
-    const GError *error,
-    gpointer user_data,
-    GObject *tube)
-{
-  if (error)
-      DEBUG ("Error %s: %s", (gchar *) user_data, error->message);
-}
-
-static void
-tp_tube_set_property (GObject *object,
-    guint prop_id,
-    const GValue *value,
-    GParamSpec *pspec)
-{
-  EmpathyTpTubePriv *priv = GET_PRIV (object);
-
-  switch (prop_id)
-    {
-      case PROP_CHANNEL:
-        priv->channel = g_value_dup_object (value);
-        break;
-      default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-  }
-}
-
-static void
-tp_tube_get_property (GObject *object,
-    guint prop_id,
-    GValue *value,
-    GParamSpec *pspec)
-{
-  EmpathyTpTubePriv *priv = GET_PRIV (object);
-
-  switch (prop_id)
-    {
-      case PROP_CHANNEL:
-        g_value_set_object (value, priv->channel);
-        break;
-      case PROP_STATE:
-        g_value_set_uint (value, priv->state);
-        break;
-      default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-  }
-}
-
-static void weak_object_notify (gpointer data,
-    GObject *old_object);
-
-static ReadyCbData *
-ready_cb_data_new (EmpathyTpTube *self,
-    EmpathyTpTubeReadyCb *callback,
-    gpointer user_data,
-    GDestroyNotify destroy,
-    GObject *weak_object)
-{
-  ReadyCbData *d = g_slice_new0 (ReadyCbData);
-  d->callback = callback;
-  d->user_data = user_data;
-  d->destroy = destroy;
-  d->weak_object = weak_object;
-
-  if (weak_object != NULL)
-    g_object_weak_ref (weak_object, weak_object_notify, self);
-
-  return d;
-}
-
-static void
-ready_cb_data_free (ReadyCbData *data,
-    EmpathyTpTube *self)
-{
-  if (data->destroy != NULL)
-    data->destroy (data->user_data);
-
-  if (data->weak_object != NULL)
-    g_object_weak_unref (data->weak_object,
-        weak_object_notify, self);
-
-  g_slice_free (ReadyCbData, data);
-}
-
-static void
-weak_object_notify (gpointer data,
-    GObject *old_object)
-{
-  EmpathyTpTube *self = EMPATHY_TP_TUBE (data);
-  EmpathyTpTubePriv *priv = GET_PRIV (self);
-  GSList *l, *ln;
-
-  for (l = priv->ready_callbacks ; l != NULL ; l = ln )
-    {
-      ReadyCbData *d = (ReadyCbData *) l->data;
-      ln = g_slist_next (l);
-
-      if (d->weak_object == old_object)
-        {
-          ready_cb_data_free (d, self);
-          priv->ready_callbacks = g_slist_delete_link (priv->ready_callbacks,
-            l);
-        }
-    }
-}
-
-
-static void
-tube_is_ready (EmpathyTpTube *self,
-    const GError *error)
-{
-  EmpathyTpTubePriv *priv = GET_PRIV (self);
-  GSList *l;
-
-  priv->ready = TRUE;
-
-  /* tube has to stay alive while we call the callbacks */
-  g_object_ref (self);
-  for (l = priv->ready_callbacks ; l != NULL ; l = g_slist_next (l))
-    {
-      ReadyCbData *data = (ReadyCbData *) l->data;
-
-      data->callback (self, error, data->user_data, data->weak_object);
-      ready_cb_data_free (data, self);
-    }
-  g_object_unref (self);
-
-  g_slist_free (priv->ready_callbacks);
-  priv->ready_callbacks = NULL;
-}
-
-static void
-got_tube_state_cb (TpProxy *proxy,
-    const GValue *out_value,
-    const GError *error,
-    gpointer user_data,
-    GObject *weak_object)
-{
-  EmpathyTpTube *self = EMPATHY_TP_TUBE (user_data);
-  EmpathyTpTubePriv *priv = GET_PRIV (self);
-
-  if (error != NULL)
-    {
-      DEBUG ("Error getting State property: %s", error->message);
-    }
-  else
-    {
-      priv->state = g_value_get_uint (out_value);
-      g_object_notify (G_OBJECT (self), "state");
-    }
-
-  tube_is_ready (self, error);
-}
-
-static GObject *
-tp_tube_constructor (GType type,
-    guint n_props,
-    GObjectConstructParam *props)
-{
-  GObject *self;
-  EmpathyTpTubePriv *priv;
-
-  self = G_OBJECT_CLASS (empathy_tp_tube_parent_class)->constructor (
-      type, n_props, props);
-  priv = GET_PRIV (self);
-
-  g_signal_connect (priv->channel, "invalidated",
-      G_CALLBACK (tp_tube_invalidated_cb), self);
-
-  priv->ready = FALSE;
-
-  tp_cli_channel_interface_tube_connect_to_tube_channel_state_changed (
-    priv->channel, tp_tube_state_changed_cb, NULL, NULL,
-    self, NULL);
-
-  tp_cli_dbus_properties_call_get (priv->channel, -1,
-      TP_IFACE_CHANNEL_INTERFACE_TUBE, "State", got_tube_state_cb,
-      self, NULL, G_OBJECT (self));
-
-  return self;
-}
-
-static void
-tp_tube_finalize (GObject *object)
-{
-  EmpathyTpTube *self = EMPATHY_TP_TUBE (object);
-  EmpathyTpTubePriv *priv = GET_PRIV (object);
-  GSList *l;
-
-  DEBUG ("Finalizing: %p", object);
-
-  if (priv->channel)
-    {
-      g_signal_handlers_disconnect_by_func (priv->channel,
-          tp_tube_invalidated_cb, object);
-      tp_cli_channel_call_close (priv->channel, -1, tp_tube_async_cb,
-        "closing tube", NULL, NULL);
-      g_object_unref (priv->channel);
-    }
-
-  for (l = priv->ready_callbacks; l != NULL; l = g_slist_next (l))
-    {
-      ReadyCbData *d = (ReadyCbData *) l->data;
-
-      ready_cb_data_free (d, self);
-    }
-
-  g_slist_free (priv->ready_callbacks);
-  priv->ready_callbacks = NULL;
-
-  G_OBJECT_CLASS (empathy_tp_tube_parent_class)->finalize (object);
-}
-
-static void
-empathy_tp_tube_class_init (EmpathyTpTubeClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  object_class->constructor = tp_tube_constructor;
-  object_class->finalize = tp_tube_finalize;
-  object_class->set_property = tp_tube_set_property;
-  object_class->get_property = tp_tube_get_property;
-
-  /**
-   * EmpathyTpTube:channel:
-   *
-   * The #TpChannel wrapped by the tube object.
-   */
-  g_object_class_install_property (object_class, PROP_CHANNEL,
-      g_param_spec_object ("channel", "channel", "channel", TP_TYPE_CHANNEL,
-      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-
-  /**
-   * EmpathyTpTube:state:
-   *
-   * The state of the tube.
-   */
-  g_object_class_install_property (object_class, PROP_STATE,
-      g_param_spec_uint ("state", "state", "state",
-        0, NUM_TP_TUBE_CHANNEL_STATES, 0,
-        G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_STRINGS));
-  /**
-   * EmpathyTpTube::destroy:
-   * @self: the tube object
-   *
-   * Emitted when then tube has been invalidated.
-   */
-  signals[DESTROY] = g_signal_new ("destroy",
-      G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      0, NULL, NULL,
-      g_cclosure_marshal_VOID__VOID,
-      G_TYPE_NONE, 0);
-
-  g_type_class_add_private (klass, sizeof (EmpathyTpTubePriv));
-}
-
-static void
-empathy_tp_tube_init (EmpathyTpTube *tube)
-{
-  EmpathyTpTubePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (tube,
-      EMPATHY_TYPE_TP_TUBE, EmpathyTpTubePriv);
-
-  tube->priv = priv;
-}
-
-/**
- * empathy_tp_tube_new:
- * @channel: a #TpChannel
- *
- * Creates a new #EmpathyTpTube.
- *
- * Return value: a new #EmpathyTpTube
- */
-EmpathyTpTube *
-empathy_tp_tube_new (TpChannel *channel)
-{
-  g_return_val_if_fail (TP_IS_CHANNEL (channel), NULL);
-
-  return g_object_new (EMPATHY_TYPE_TP_TUBE, "channel", channel,  NULL);
-}
-
-/**
- * empathy_tp_tube_new_stream_tube:
- * @contact: the #EmpathyContact to which the tube is offered
- * @type: the type of the listening address of the local service. Either
- * %TP_SOCKET_ADDRESS_TYPE_IPV4 or %TP_SOCKET_ADDRESS_TYPE_IPV6.
- * @hostname: the address of the local service
- * @port: the port of the local service
- * @service: the service name of the tube
- * @parameters: the parameters of the tube
- *
- * Creates and offers a new #EmpathyTpTube of ChannelType StreamTube.
- *
- * Return value: a new #EmpathyTpTube
- */
-EmpathyTpTube *
-empathy_tp_tube_new_stream_tube (EmpathyContact *contact,
-    TpSocketAddressType type,
-    const gchar *hostname,
-    guint port,
-    const gchar *service,
-    GHashTable *parameters)
-{
-  TpConnection *connection;
-  TpChannel *channel;
-  gchar *object_path;
-  GHashTable *params;
-  GValue *address;
-  GValue *control_param;
-  EmpathyTpTube *tube = NULL;
-  GError *error = NULL;
-  GHashTable *request;
-  GHashTable *channel_properties;
-  GValue *value;
-
-  g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-  g_return_val_if_fail (hostname != NULL, NULL);
-  g_return_val_if_fail (service != NULL, NULL);
-
-  connection = empathy_contact_get_connection (contact);
-
-  request = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
-      (GDestroyNotify) tp_g_value_slice_free);
-
-  /* org.freedesktop.Telepathy.Channel.ChannelType */
-  value = tp_g_value_slice_new (G_TYPE_STRING);
-  g_value_set_string (value, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE);
-  g_hash_table_insert (request, TP_IFACE_CHANNEL ".ChannelType", value);
-
-  /* org.freedesktop.Telepathy.Channel.TargetHandleType */
-  value = tp_g_value_slice_new (G_TYPE_UINT);
-  g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT);
-  g_hash_table_insert (request, TP_IFACE_CHANNEL ".TargetHandleType", value);
-
-  /* org.freedesktop.Telepathy.Channel.TargetHandleType */
-  value = tp_g_value_slice_new (G_TYPE_UINT);
-  g_value_set_uint (value, empathy_contact_get_handle (contact));
-  g_hash_table_insert (request, TP_IFACE_CHANNEL ".TargetHandle", value);
-
-  /* org.freedesktop.Telepathy.Channel.Type.StreamTube.Service */
-  value = tp_g_value_slice_new (G_TYPE_STRING);
-  g_value_set_string (value, service);
-  g_hash_table_insert (request,
-    TP_IFACE_CHANNEL_TYPE_STREAM_TUBE  ".Service", value);
-
-  if (!tp_cli_connection_interface_requests_run_create_channel (connection, -1,
-    request, &object_path, &channel_properties, &error, NULL))
-    {
-      DEBUG ("Error requesting channel: %s", error->message);
-      g_clear_error (&error);
-      g_object_unref (connection);
-      return NULL;
-    }
-
-  DEBUG ("Offering a new stream tube");
-
-  channel = tp_channel_new_from_properties (connection, object_path,
-      channel_properties, NULL);
-
-  tp_channel_run_until_ready (channel, NULL, NULL);
-
-  #define ADDRESS_TYPE dbus_g_type_get_struct ("GValueArray",\
-      G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID)
-  params = g_hash_table_new (g_str_hash, g_str_equal);
-  address = tp_g_value_slice_new (ADDRESS_TYPE);
-  g_value_take_boxed (address, dbus_g_type_specialized_construct (ADDRESS_TYPE));
-  dbus_g_type_struct_set (address, 0, hostname, 1, port, G_MAXUINT);
-  control_param = tp_g_value_slice_new (G_TYPE_STRING);
-
-  if (parameters == NULL)
-    /* Pass an empty dict as parameters */
-    parameters = g_hash_table_new (g_str_hash, g_str_equal);
-  else
-    g_hash_table_ref (parameters);
-
-  if (!tp_cli_channel_type_stream_tube_run_offer (channel, -1, type, address,
-        TP_SOCKET_ACCESS_CONTROL_LOCALHOST, parameters,
-        &error, NULL))
-    {
-      DEBUG ("Couldn't offer tube: %s", error->message);
-      g_clear_error (&error);
-      goto OUT;
-    }
-
-  DEBUG ("Stream tube offered");
-
-  tube = empathy_tp_tube_new (channel);
-
-OUT:
-  g_object_unref (channel);
-  g_free (object_path);
-  g_hash_table_destroy (request);
-  g_hash_table_destroy (channel_properties);
-  tp_g_value_slice_free (address);
-  tp_g_value_slice_free (control_param);
-  g_object_unref (connection);
-  g_hash_table_unref (parameters);
-
-  return tube;
-}
-
-static void
-tp_tube_accept_stream_cb (TpChannel *channel,
-    const GValue *address,
-    const GError *error,
-    gpointer user_data,
-    GObject *weak_object)
-{
-  EmpathyTpTube *tube = EMPATHY_TP_TUBE (weak_object);
-  EmpathyTpTubeAcceptData *data = (EmpathyTpTubeAcceptData *) user_data;
-  EmpathyTpTubeAddress eaddress;
-
-  eaddress.type = data->type;
-
-  if (error)
-    {
-      DEBUG ("Error accepting tube: %s", error->message);
-      data->callback (tube, NULL, error, data->user_data);
-      return;
-    }
-
-  switch (eaddress.type)
-    {
-      case TP_SOCKET_ADDRESS_TYPE_UNIX:
-      case TP_SOCKET_ADDRESS_TYPE_ABSTRACT_UNIX:
-        eaddress.a.socket.path = g_value_get_boxed (address);
-        break;
-     case TP_SOCKET_ADDRESS_TYPE_IPV4:
-     case TP_SOCKET_ADDRESS_TYPE_IPV6:
-        dbus_g_type_struct_get (address,
-          0, &eaddress.a.inet.hostname,
-          1, &eaddress.a.inet.port, G_MAXUINT);
-        break;
-    }
-
-   data->callback (tube, &eaddress, NULL, data->user_data);
-}
-
-/**
- * empathy_tp_tube_accept_stream_tube:
- * @tube: an #EmpathyTpTube
- * @type: the type of address the connection manager should listen on
- * @callback: called when the tube has been accepted
- * @user_data: arbitrary user-supplied data passed to the callback
- *
- * Accepts @tube of ChannelType StreamTube and call @callback once it's done.
- */
-void
-empathy_tp_tube_accept_stream_tube (EmpathyTpTube *tube,
-  TpSocketAddressType type,
-  EmpathyTpTubeAcceptStreamTubeCb *callback,
-  gpointer user_data)
-{
-  EmpathyTpTubePriv *priv = GET_PRIV (tube);
-  GValue *control_param;
-  EmpathyTpTubeAcceptData *data;
-
-  g_return_if_fail (EMPATHY_IS_TP_TUBE (tube));
-
-  DEBUG ("Accepting stream tube");
-  /* FIXME allow other acls */
-  control_param = tp_g_value_slice_new (G_TYPE_STRING);
-
-  data = new_empathy_tp_tube_accept_data (type, callback, user_data);
-
-  tp_cli_channel_type_stream_tube_call_accept (
-     priv->channel, -1, type, TP_SOCKET_ACCESS_CONTROL_LOCALHOST,
-     control_param, tp_tube_accept_stream_cb, data,
-     free_empathy_tp_tube_accept_data, G_OBJECT (tube));
-
-  tp_g_value_slice_free (control_param);
-}
-
-/**
- * EmpathyTpTubeReadyCb:
- * @tube: an #EmpathyTpTube
- * @error: %NULL on success, or the reason why the tube can't be ready
- * @user_data: the @user_data passed to empathy_tp_tube_call_when_ready()
- * @weak_object: the @weak_object passed to
- *               empathy_tp_tube_call_when_ready()
- *
- * Called as the result of empathy_tp_tube_call_when_ready(). If the
- * tube's properties could be retrieved,
- * @error is %NULL and @tube is considered to be ready. Otherwise, @error is
- * non-%NULL and @tube is not ready.
- */
-
-/**
- * empathy_tp_tube_call_when_ready:
- * @tube: an #EmpathyTpTube
- * @callback: called when the tube becomes ready
- * @user_data: arbitrary user-supplied data passed to the callback
- * @destroy: called to destroy @user_data
- * @weak_object: object to reference weakly; if it is destroyed, @callback
- *               will not be called, but @destroy will still be called
- *
- * If @tube is ready for use, call @callback immediately, then return.
- * Otherwise, arrange for @callback to be called when @tube becomes
- * ready for use.
- */
-void
-empathy_tp_tube_call_when_ready (EmpathyTpTube *self,
-    EmpathyTpTubeReadyCb *callback,
-    gpointer user_data,
-    GDestroyNotify destroy,
-    GObject *weak_object)
-{
-  EmpathyTpTubePriv *priv = GET_PRIV (self);
-
-  g_return_if_fail (self != NULL);
-  g_return_if_fail (callback != NULL);
-
-  if (priv->ready)
-    {
-      callback (self, NULL, user_data, weak_object);
-      if (destroy != NULL)
-        destroy (user_data);
-    }
-  else
-    {
-      priv->ready_callbacks = g_slist_prepend (priv->ready_callbacks,
-          ready_cb_data_new (self, callback, user_data, destroy, weak_object));
-    }
-}
diff --git a/libempathy/empathy-tp-tube.h b/libempathy/empathy-tp-tube.h
deleted file mode 100644 (file)
index 79cffa1..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- *          Elliot Fairweather <elliot.fairweather@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_TP_TUBE_H__
-#define __EMPATHY_TP_TUBE_H__
-
-#include <glib-object.h>
-
-#include <telepathy-glib/channel.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_TP_TUBE (empathy_tp_tube_get_type ())
-#define EMPATHY_TP_TUBE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), \
-    EMPATHY_TYPE_TP_TUBE, EmpathyTpTube))
-#define EMPATHY_TP_TUBE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
-    EMPATHY_TYPE_TP_TUBE, EmpathyTpTubeClass))
-#define EMPATHY_IS_TP_TUBE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), \
-    EMPATHY_TYPE_TP_TUBE))
-#define EMPATHY_IS_TP_TUBE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
-    EMPATHY_TYPE_TP_TUBE))
-#define EMPATHY_TP_TUBE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), \
-    EMPATHY_TYPE_TP_TUBE, EmpathyTpTubeClass))
-
-typedef struct _EmpathyTpTube EmpathyTpTube;
-typedef struct _EmpathyTpTubeClass EmpathyTpTubeClass;
-
-typedef struct {
-  TpSocketAddressType type;
-  union {
-    struct socket_address_t {
-      GArray *path;
-    } socket;
-    struct inet_address_t {
-      gchar *hostname;
-      guint port;
-    } inet;
-  } a;
-} EmpathyTpTubeAddress;
-
-struct _EmpathyTpTube {
-  GObject parent;
-  gpointer priv;
-};
-
-struct _EmpathyTpTubeClass {
-  GObjectClass parent_class;
-};
-
-GType empathy_tp_tube_get_type (void) G_GNUC_CONST;
-EmpathyTpTube *empathy_tp_tube_new (TpChannel *channel);
-EmpathyTpTube *empathy_tp_tube_new_stream_tube (EmpathyContact *contact,
-    TpSocketAddressType type,
-    const gchar *hostname,
-    guint port,
-    const gchar *service,
-    GHashTable *parameters);
-
-typedef void (EmpathyTpTubeAcceptStreamTubeCb) (EmpathyTpTube *tube,
-  const EmpathyTpTubeAddress *address,
-  const GError *error,
-  gpointer user_data);
-
-void empathy_tp_tube_accept_stream_tube (EmpathyTpTube *tube,
-  TpSocketAddressType type,
-  EmpathyTpTubeAcceptStreamTubeCb *callback,
-  gpointer user_data);
-
-typedef void (EmpathyTpTubeReadyCb)
-  (EmpathyTpTube *tube,
-   const GError *error,
-   gpointer user_data,
-   GObject *weak_object);
-
-void empathy_tp_tube_call_when_ready (EmpathyTpTube *tube,
-  EmpathyTpTubeReadyCb *callback,
-  gpointer user_data,
-  GDestroyNotify destroy,
-  GObject *weak_object);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_TP_TUBE_H__ */
index bbb7e11a66ed26da2242c987bb3896a3b7938458..2b50ec852ed8ffbc20d6064952d08897dbed3bd7 100644 (file)
@@ -31,7 +31,6 @@
 
 #include <extensions/extensions.h>
 
-#include "empathy-tp-tube.h"
 #include "empathy-tube-handler.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
@@ -59,20 +58,9 @@ typedef struct
   gchar *channel;
   guint handle_type;
   guint handle;
-  EmpathyTpTube *tube;
+  TpChannel *tube;
 } IdleData;
 
-static void
-tube_ready_cb (EmpathyTpTube *tube,
-    const GError *error,
-    gpointer user_data,
-    GObject *weak_object)
-{
-  IdleData *idle_data = user_data;
-
-  g_signal_emit (idle_data->thandler, signals[NEW_TUBE], 0, tube);
-}
-
 static void
 tube_ready_destroy_notify (gpointer data)
 {
@@ -100,9 +88,7 @@ channel_ready_cb (TpChannel *channel,
       return;
     }
 
-  idle_data->tube = empathy_tp_tube_new (channel);
-  empathy_tp_tube_call_when_ready (idle_data->tube, tube_ready_cb, idle_data,
-      tube_ready_destroy_notify, NULL);
+  g_signal_emit (idle_data->thandler, signals[NEW_TUBE], 0, idle_data->tube);
 
   g_object_unref (channel);
 }
@@ -183,7 +169,7 @@ empathy_tube_handler_class_init (EmpathyTubeHandlerClass *klass)
   signals[NEW_TUBE] =
       g_signal_new ("new-tube", G_OBJECT_CLASS_TYPE (klass),
       G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
-      G_TYPE_NONE, 1, EMPATHY_TYPE_TP_TUBE);
+      G_TYPE_NONE, 1, TP_TYPE_CHANNEL);
 }
 
 static void
index 47746f536c00951abbc274fb82e8b6088773b713..fca7fcb5f326fb82eef94789a531f37566a10e69 100644 (file)
@@ -193,7 +193,7 @@ empathy_xml_node_get_child_content (xmlNodePtr   node,
        if (l) {
                return xmlNodeGetContent (l);
        }
-               
+
        return NULL;
 }
 
@@ -220,10 +220,10 @@ empathy_xml_node_find_child_prop_value (xmlNodePtr   node,
                if (prop && strcmp (prop, prop_value) == 0) {
                        found = l;
                }
-               
+
                xmlFree (prop);
        }
-               
+
        return found;
 }
 
index e80a29c67d2c908c9074dd234461dbea90af5a3c..cfd9215331d9dc6d2f0b023b61b518d7d85ef7ae 100644 (file)
@@ -40,6 +40,7 @@ libempathy-gtk/empathy-log-window.c
 [type: gettext/glade]libempathy-gtk/empathy-log-window.ui
 [type: gettext/glade]libempathy-gtk/empathy-new-message-dialog.ui
 libempathy-gtk/empathy-presence-chooser.c
+libempathy-gtk/empathy-sound.c
 libempathy-gtk/empathy-status-preset-dialog.c
 [type: gettext/glade]libempathy-gtk/empathy-status-preset-dialog.ui
 libempathy-gtk/empathy-theme-boxes.c
index dc88cc7311cdedaf73041f4e0900b2d8fd9f2863..b147234054ca3667be33ee0f97000bccc765cc0a 100644 (file)
@@ -2,15 +2,16 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
-# Runa Bhattacharjee <runab@redhat.com>, 2008.
+# Runa Bhattacharjee <runab@redhat.com>, 2008, 2009.
 msgid ""
 msgstr ""
 "Project-Id-Version: bn_IN\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-21 03:59+0000\n"
-"PO-Revision-Date: 2008-08-21 19:43+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=empathy&component=general\n"
+"POT-Creation-Date: 2009-06-19 11:50+0000\n"
+"PO-Revision-Date: 2009-06-19 18:45+0530\n"
 "Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
-"Language-Team: Bengali INDIA <fedora-trans-bn_IN@redhat.com>\n"
+"Language-Team: Bengali INDIA <discuss@lists.ankur.org.in>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -40,8 +41,11 @@ msgid "Chat window theme"
 msgstr "আলাপন উইন্ডোর থিম"
 
 #: ../data/empathy.schemas.in.h:4
-msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
-msgstr "বিভিন্ন ভাষার জন্য ব্যবহারযোগ্য বানান-পরীক্ষণ ব্যবস্থার তালিকা, কমা চিহ্ন দ্বারা বিভক্ত  (উদাহরণস্বরূপ, en, fr, nl)।"
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"বিভিন্ন ভাষার জন্য ব্যবহারযোগ্য বানান-পরীক্ষণ ব্যবস্থার তালিকা, কমা চিহ্ন দ্বারা "
+"বিভক্ত  (উদাহরণস্বরূপ, en, fr, nl)।"
 
 #: ../data/empathy.schemas.in.h:5
 msgid "Compact contact list"
@@ -56,809 +60,1277 @@ msgid "Default directory to select an avatar image from"
 msgstr "ব্যবহারকারীর অবতার চিহ্নকারী ছবি নির্ধারণের জন্য ব্যবহৃত ডিফল্ট ডিরেক্টরি"
 
 #: ../data/empathy.schemas.in.h:8
-msgid "Empathy should auto-connect on startup"
-msgstr "à¦\86রমà§\8dভà¦\95ালà§\87 Empathy à¦¦à§\8dবারা à¦¸à§\8dবà§\9fà¦\82à¦\95à§\8dরিà§\9fরà§\82পà§\87 à¦¸à¦\82যà§\8bà¦\97 à¦¸à§\8dথাপন করা হবে"
+msgid "Disable popup notifications when away"
+msgstr "à¦\85নà§\81পসà§\8dথিত à¦¹à¦²à§\87 à¦ªà¦ª-à¦\86প à¦¸à§\82à¦\9aনাবারà§\8dতা à¦¨à¦¿à¦·à§\8dà¦\95à§\8dরিà§\9f করা হবে"
 
 #: ../data/empathy.schemas.in.h:9
-msgid "Empathy should use the avatar of the contact as the chat window icon"
-msgstr ""
+msgid "Disable sounds when away"
+msgstr "অনুপস্থিত হলে শব্দ নিষ্ক্রিয় করা হবে"
 
 #: ../data/empathy.schemas.in.h:10
-msgid "Enable popup when contact is available"
-msgstr "পরিচিত ব্যক্তি উপস্থিত হলে পপ-আপ সক্রিয় করা হবে"
+msgid "Empathy can publish the user's location"
+msgstr ""
 
 #: ../data/empathy.schemas.in.h:11
-msgid "Enable sound when away"
-msgstr "অনুপস্থিত হলে শব্দ সক্রিয় করা হবে"
+msgid "Empathy can use the GPS to guess the location"
+msgstr ""
 
 #: ../data/empathy.schemas.in.h:12
-msgid "Enable sound when busy"
-msgstr "ব্যস্ত অবস্থায় শব্দ সক্রিয় করা হবে"
+msgid "Empathy can use the cellular network to guess the location"
+msgstr ""
 
 #: ../data/empathy.schemas.in.h:13
+msgid "Empathy can use the network to guess the location"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Empathy default download folder"
+msgstr "Empathy-র ডিফল্ট ডাউনলোড ফোল্ডার"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Empathy has asked about importing accounts"
+msgstr "Empathy দ্বারা অ্যাকাউন্ট ইম্পোর্ট সম্পর্কে জিজ্ঞাসা করা হয়েছে"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Empathy should auto-connect on startup"
+msgstr "আরম্ভকালে Empathy দ্বারা স্বয়ংক্রিয়রূপে সংযোগ স্থাপন করা হবে"
+
+#: ../data/empathy.schemas.in.h:17
+#, fuzzy
+msgid "Empathy should reduce the location's accuracy"
+msgstr "আরম্ভকালে Empathy দ্বারা স্বয়ংক্রিয়রূপে সংযোগ স্থাপন করা হবে"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Empathy should use the avatar of the contact as the chat window icon"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Enable popup notifications for new messages"
+msgstr "নতুন বার্তার জন্য পপ-আপ সূচনাবার্তা সক্রিয় করা হবে"
+
+#: ../data/empathy.schemas.in.h:20
 msgid "Enable spell checker"
 msgstr "বানা পরীক্ষণ সক্রিয় করা হবে"
 
-#: ../data/empathy.schemas.in.h:14
+#: ../data/empathy.schemas.in.h:21
 msgid "Hide main window"
 msgstr "প্রধান উইন্ডো আড়াল করা হবে"
 
-#: ../data/empathy.schemas.in.h:15
+#: ../data/empathy.schemas.in.h:22
 msgid "Hide the main window."
 msgstr "প্রধান উইন্ডো আড়াল করা হবে।"
 
-#: ../data/empathy.schemas.in.h:16
+#: ../data/empathy.schemas.in.h:23
 msgid "NetworkManager should be used"
 msgstr "NetworkManager ব্যবহার করা হবে"
 
-#: ../data/empathy.schemas.in.h:17
+#: ../data/empathy.schemas.in.h:24
 msgid "Nick completed character"
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:18
+#: ../data/empathy.schemas.in.h:25
 msgid "Open new chats in separate windows"
 msgstr "নতুন আলাপন আরম্ভ হলে পৃথক উইন্ডোর মধ্যে প্রদর্শন করা হবে"
 
-#: ../data/empathy.schemas.in.h:19
+#: ../data/empathy.schemas.in.h:26
+msgid "Path of the adium theme to use"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
+#, fuzzy
+msgid "Path of the adium theme to use if the theme used for chat is adium."
+msgstr "চ্যাট-রুমের জন্য থিম ব্যবহার করা হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Play a sound for incoming messages"
+msgstr "নতুন বার্তা প্রাপ্ত হলে শব্দ বাজানো হবে"
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Play a sound for new conversations"
+msgstr "নতুন আলাপনের জন্য শব্দ বাজানো হবে"
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Play a sound for outgoing messages"
+msgstr "নতুন বার্তা পাঠানো হলে শব্দ বাজানো হবে"
+
+#: ../data/empathy.schemas.in.h:31
+msgid "Play a sound when a contact logs in"
+msgstr "পরিচিত ব্যক্তি লগ-ইন করলে শব্দ বাজানো হবে"
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Play a sound when a contact logs out"
+msgstr "পরিচিত ব্যক্তি লগ-আউট করলে শব্দ বাজানো হবে"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Play a sound when we log in"
+msgstr "নিজে লগ-ইন করলে শব্দ বাজানো হবে"
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Play a sound when we log out"
+msgstr "নিজে লগ-আউট করলে শব্দ বাজানো হবে"
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Popup notifications if the chat isn't focused"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:36
 msgid "Salut account is created"
 msgstr "Salut অ্যাকাউন্ট নির্মিত হয়েছে"
 
-#: ../data/empathy.schemas.in.h:20
+#: ../data/empathy.schemas.in.h:37
 msgid "Show avatars"
 msgstr "অবতারের ছবি প্রদর্শন করা হবে"
 
-#: ../data/empathy.schemas.in.h:21
+#: ../data/empathy.schemas.in.h:38
+#, fuzzy
+msgid "Show contact list in rooms"
+msgstr "পরিচিত ব্যক্তিদের তালিকা প্রদর্শন করা হবে (_S)"
+
+#: ../data/empathy.schemas.in.h:39
 msgid "Show hint about closing the main window"
 msgstr "প্রধান উইন্ডো বন্ধ করার জন্য ইঙ্গিত প্রদর্শন করা হবে"
 
-#: ../data/empathy.schemas.in.h:22
+#: ../data/empathy.schemas.in.h:40
 msgid "Show offline contacts"
 msgstr "অফ-লাইন অবস্থায় থাকা পরিচিত ব্যক্তিদের তালিকা প্রদর্শন করা হবে"
 
-#: ../data/empathy.schemas.in.h:23
+#: ../data/empathy.schemas.in.h:41
 msgid "Spell checking languages"
 msgstr "ভাষার জন্য বানা পরীক্ষণ"
 
-#: ../data/empathy.schemas.in.h:24
+#: ../data/empathy.schemas.in.h:42
+msgid "The default folder to save file transfers in."
+msgstr "বিনিময় করা সামগ্রী সংরক্ষণের জন্য চিহ্নিত ফোল্ডার।"
+
+#: ../data/empathy.schemas.in.h:43
 msgid "The last directory that an avatar image was chosen from."
 msgstr "সর্বশেষ অবতারের জন্য ব্যবহৃথ ছবিটি যে ডিরেক্টরি থেকে নির্বাচন করা হয়েছে।"
 
-#: ../data/empathy.schemas.in.h:25
+#: ../data/empathy.schemas.in.h:44
 msgid "The theme that is used to display the conversation in chat windows."
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:26
+#: ../data/empathy.schemas.in.h:45
 msgid "Use graphical smileys"
 msgstr "গ্রাফিক্যাল স্মাইলি ব্যবহার করুন"
 
-#: ../data/empathy.schemas.in.h:27
+#: ../data/empathy.schemas.in.h:46
 msgid "Use notification sounds"
 msgstr "সূচনামূলক শব্দ ব্যবহার করা হবে"
 
-#: ../data/empathy.schemas.in.h:28
+#: ../data/empathy.schemas.in.h:47
 msgid "Use theme for chat rooms"
+msgstr "চ্যাট-রুমের জন্য থিম প্রয়োগ করা হবে"
+
+#: ../data/empathy.schemas.in.h:48
+#, fuzzy
+msgid "Whether or not Empathy can publish the user's location to his contacts."
 msgstr ""
+"পরিচিতি তালিকায় উপস্থিত ব্যক্তিরা অফ-লাইন থাকলে, তালিকায় তাদের প্রদর্শন করা হবে "
+"কি না।"
 
-#: ../data/empathy.schemas.in.h:29
+#: ../data/empathy.schemas.in.h:49
+msgid "Whether or not Empathy can use the GPS to guess the location."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:50
+msgid ""
+"Whether or not Empathy can use the cellular network to guess the location."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:51
+#, fuzzy
+msgid "Whether or not Empathy can use the network to guess the location."
+msgstr "নতুন আলাপন সম্পর্কে সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:52
+msgid ""
+"Whether or not Empathy has asked about importing accounts from other "
+"programs."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:53
 msgid ""
 "Whether or not Empathy should automatically log in to your accounts on "
 "startup."
 msgstr "Empathy প্রারম্ভকালে স্বয়ংক্রিয়রূপে সকল অ্যাকাউন্টে লগ-ইন করা হবে কি না।"
 
-#: ../data/empathy.schemas.in.h:30
+#: ../data/empathy.schemas.in.h:54
+#, fuzzy
+msgid ""
+"Whether or not Empathy should reduce the location's accuracy for privacy "
+"reasons."
+msgstr "Empathy প্রারম্ভকালে স্বয়ংক্রিয়রূপে সকল অ্যাকাউন্টে লগ-ইন করা হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:55
 msgid ""
 "Whether or not Empathy should use the avatar of the contact as the chat "
 "window icon."
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:31
-msgid "Whether or not the Salut account has been created on the first Empathy run."
+#: ../data/empathy.schemas.in.h:56
+msgid ""
+"Whether or not the Salut account has been created on the first Empathy run."
 msgstr "Empathy প্রথমবার সঞ্চালনের সময় Salut অ্যাকাউন্ট নির্মিত হয়েছে কি না।"
 
-#: ../data/empathy.schemas.in.h:32
+#: ../data/empathy.schemas.in.h:57
 msgid ""
 "Whether or not the network manager should be used to automatically "
 "disconnect/reconnect."
-msgstr "স্বয়ংক্রিয়রূপে সংযোগ স্থাপন/বিচ্ছিন্ন করার জন্য network manager প্রয়োগ করা হবে কি না।"
+msgstr ""
+"স্বয়ংক্রিয়রূপে সংযোগ স্থাপন/বিচ্ছিন্ন করার জন্য network manager প্রয়োগ করা হবে কি না।"
 
-#: ../data/empathy.schemas.in.h:33
+#: ../data/empathy.schemas.in.h:58
 msgid ""
 "Whether or not to check words typed against the languages you want to check "
 "with."
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:34
-msgid "Whether or not to convert smileys into graphical images in conversations."
+#: ../data/empathy.schemas.in.h:59
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:35
-msgid "Whether or not to play a sound when messages arrive."
-msgstr "বার্তা প্রাপ্ত হলে শব্দ বাজানো হবে কি না।"
+#: ../data/empathy.schemas.in.h:60
+msgid ""
+"Whether or not to play a sound to notify for contacts logging in the network."
+msgstr ""
+"পরিচিত ব্যক্তিরা নেটওয়ার্কে লগ-ইন করলে, সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
 
-#: ../data/empathy.schemas.in.h:36
-msgid "Whether or not to play sounds when away."
-msgstr "অনুপস্থিত অবস্থায় শব্দ বাজানো হবে কি না।"
+#: ../data/empathy.schemas.in.h:61
+msgid ""
+"Whether or not to play a sound to notify for contacts logging off the "
+"network."
+msgstr ""
+"পরিচিত ব্যক্তিরা নেটওয়ার্কে লগ-অফ করলে, সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
 
-#: ../data/empathy.schemas.in.h:37
-msgid "Whether or not to play sounds when busy."
-msgstr "বà§\8dযসà§\8dত à¦\85বসà§\8dথাà§\9f শব্দ বাজানো হবে কি না।"
+#: ../data/empathy.schemas.in.h:62
+msgid "Whether or not to play a sound to notify for events."
+msgstr "বিভিনà§\8dন à¦\98à¦\9fনা à¦¸à¦®à§\8dপরà§\8dà¦\95à§\87 à¦¸à§\82à¦\9aনাপà§\8dরদানà§\87র à¦\9cনà§\8dয শব্দ বাজানো হবে কি না।"
 
-#: ../data/empathy.schemas.in.h:38
-msgid "Whether or not to show a popup when a contact becomes available."
+#: ../data/empathy.schemas.in.h:63
+msgid "Whether or not to play a sound to notify for incoming messages."
+msgstr "প্রাপ্ত বার্তা সম্পর্কে সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:64
+msgid "Whether or not to play a sound to notify for new conversations."
+msgstr "নতুন আলাপন সম্পর্কে সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:65
+msgid "Whether or not to play a sound to notify for outgoing messages."
+msgstr "প্রেরিত বার্তা সম্পর্কে সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:66
+msgid "Whether or not to play a sound when logging in a network."
+msgstr "নেটওয়ার্কে লগ-ইন করলে সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:67
+msgid "Whether or not to play a sound when logging off a network."
+msgstr "নেটওয়ার্কে লগ-অফ করলে সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:68
+msgid "Whether or not to play sound notifications when away or busy."
+msgstr "অনুপস্থিত অথবা ব্যস্ত থাকলে সূচনাপ্রদানের জন্য শব্দ বাজানো হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:69
+msgid ""
+"Whether or not to show a popup notification when receiving a new message "
+"even if the chat is already opened, but not focused."
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:39
+#: ../data/empathy.schemas.in.h:70
+msgid ""
+"Whether or not to show a popup notification when receiving a new message."
+msgstr "নতুন বার্তা প্রাপ্ত করা হলে পপ-আপের মাধ্যমে সূচনা প্রদান করা হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:71
 msgid ""
 "Whether or not to show avatars for contacts in the contact list and chat "
 "windows."
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:40
+#: ../data/empathy.schemas.in.h:72
 msgid "Whether or not to show contacts that are offline in the contact list."
 msgstr ""
+"পরিচিতি তালিকায় উপস্থিত ব্যক্তিরা অফ-লাইন থাকলে, তালিকায় তাদের প্রদর্শন করা হবে "
+"কি না।"
 
-#: ../data/empathy.schemas.in.h:41
+#: ../data/empathy.schemas.in.h:73
+msgid "Whether or not to show popup notifications when away or busy."
+msgstr "অনুপস্থিত অথবা ব্যস্ত থাকলে পপ সূচনাবার্তা প্রদর্শন করা হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:74
+#, fuzzy
+msgid "Whether or not to show the contact list in chat rooms."
+msgstr "সংকুচিত মোডে, পরিচিতি তালিকা প্রদর্শন করা হবে কি না।"
+
+#: ../data/empathy.schemas.in.h:75
 msgid ""
 "Whether or not to show the message dialog about closing the main window with "
 "the 'x' button in the title bar."
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:42
+#: ../data/empathy.schemas.in.h:76
 msgid "Whether to show the contact list in compact mode or not."
-msgstr ""
+msgstr "সংকুচিত মোডে, পরিচিতি তালিকা প্রদর্শন করা হবে কি না।"
 
-#: ../data/empathy.schemas.in.h:43
+#: ../data/empathy.schemas.in.h:77
 msgid "Whether to use the theme for chat rooms or not."
-msgstr ""
+msgstr "চ্যাট-রুমের জন্য থিম ব্যবহার করা হবে কি না।"
 
-#: ../data/empathy.schemas.in.h:44
+#: ../data/empathy.schemas.in.h:78
 msgid ""
 "Which criterium to use when sorting the contact list. Default is to use sort "
 "by the contact's name with the value \"name\". A value of \"state\" will "
 "sort the contact list by state."
 msgstr ""
 
-#: ../libempathy/empathy-tp-contact-list.c:731 ../src/empathy.c:248
+#: ../libempathy/empathy-ft-handler.c:838
+msgid "The hash of the received file and the sent one do not match"
+msgstr ""
+
+#: ../libempathy/empathy-ft-handler.c:1098
+msgid "File transfer not supported by remote contact"
+msgstr ""
+
+#: ../libempathy/empathy-ft-handler.c:1156
+msgid "The selected file is not a regular file"
+msgstr ""
+
+#: ../libempathy/empathy-ft-handler.c:1165
+msgid "The selected file is empty"
+msgstr ""
+
+#: ../libempathy/empathy-tp-contact-list.c:757 ../src/empathy.c:287
 msgid "People nearby"
 msgstr "নিকটবর্তী ব্যক্তিরা"
 
-#: ../libempathy/empathy-utils.c:345
+#: ../libempathy/empathy-tp-file.c:279
+msgid "Socket type not supported"
+msgstr ""
+
+#: ../libempathy/empathy-tp-file.c:398
+msgid "No reason was specified"
+msgstr "কোনো কারণ উল্লিখিত হয়নি"
+
+#: ../libempathy/empathy-tp-file.c:401
+msgid "The change in state was requested"
+msgstr "অবস্থার পরিবর্তন অনুরোধ করা হয়েছে"
+
+#: ../libempathy/empathy-tp-file.c:404
+msgid "You canceled the file transfer"
+msgstr "ফাইল বিনিময়ের কাজ আপনি বাতিল করেছেন"
+
+#: ../libempathy/empathy-tp-file.c:407
+msgid "The other participant canceled the file transfer"
+msgstr "ফাইল বিনিময়ের কাজ অন্য ব্যবহারকারী বাতিল করেছেন"
+
+#: ../libempathy/empathy-tp-file.c:410
+msgid "Error while trying to transfer the file"
+msgstr "ফাইল বিনিময় করতে সমস্যা"
+
+#: ../libempathy/empathy-tp-file.c:413
+msgid "The other participant is unable to transfer the file"
+msgstr "অন্য ব্যবহারকারী ফাইল বিনিময় করতে সক্ষম হননি"
+
+#: ../libempathy/empathy-tp-file.c:416
+msgid "Unknown reason"
+msgstr "অজানা কারণ"
+
+#: ../libempathy/empathy-utils.c:274
 msgid "Available"
 msgstr "উপস্থিত"
 
-#: ../libempathy/empathy-utils.c:347
+#: ../libempathy/empathy-utils.c:276
 msgid "Busy"
 msgstr "ব্যস্ত"
 
-#: ../libempathy/empathy-utils.c:350
+#: ../libempathy/empathy-utils.c:279
 msgid "Away"
 msgstr "অনুপস্থিত"
 
-#: ../libempathy/empathy-utils.c:352
+#: ../libempathy/empathy-utils.c:281
 msgid "Hidden"
 msgstr "আড়ালে"
 
-#: ../libempathy/empathy-utils.c:355
+#: ../libempathy/empathy-utils.c:283
 msgid "Offline"
 msgstr "অফ-লাইন"
 
-#: ../libempathy-gtk/empathy-account-chooser.c:337
+#: ../libempathy/empathy-time.c:137
+#, c-format
+msgid "%d second ago"
+msgid_plural "%d seconds ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:142
+#, c-format
+msgid "%d minute ago"
+msgid_plural "%d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:147
+#, c-format
+msgid "%d hour ago"
+msgid_plural "%d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:152
+#, c-format
+msgid "%d day ago"
+msgid_plural "%d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:157
+#, c-format
+msgid "%d week ago"
+msgid_plural "%d weeks ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:162
+#, c-format
+msgid "%d month ago"
+msgid_plural "%d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:167
+msgid "in the future"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-chooser.c:419
 msgid "All"
 msgstr "সকল"
 
 #: ../libempathy-gtk/empathy-account-widget.c:302
-#: ../libempathy-gtk/empathy-account-widget.c:347
+#: ../libempathy-gtk/empathy-account-widget.c:354
 #, c-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
-msgid "<b>Advanced</b>"
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1
+#, fuzzy
+msgid "Advanced"
 msgstr "<b>উন্নত বিকল্প</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
-msgid "Forget password and clear the entry."
-msgstr ""
-
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2
 msgid "Pass_word:"
 msgstr "পাসওয়ার্ড: (_w)"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3
 msgid "Screen _Name:"
 msgstr "পর্দায় ব্যবহৃত নাম: (_N)"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7
 msgid "_Port:"
 msgstr "পোর্ট: (_P)"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
-#: ../src/empathy-new-chatroom-dialog.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
+#: ../src/empathy-new-chatroom-dialog.ui.h:9
 msgid "_Server:"
 msgstr "সার্ভার: (_S)"
 
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2
 msgid "Login I_D:"
 msgstr "লগ-ইন ID: (_D)"
 
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2
 msgid "ICQ _UIN:"
 msgstr "ICQ _UIN:"
 
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5
 msgid "_Charset:"
 msgstr "ক্যারসেট: (_C)"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+#: ../libempathy-gtk/empathy-account-widget-irc.c:241
 msgid "New Network"
 msgstr "নতুন নেটওয়ার্ক"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
-msgid "<b>Network</b>"
-msgstr "<b>নেটওয়ার্ক</b>"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
-msgid "<b>Servers</b>"
-msgstr "<b>সার্ভার</b>"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:1
 msgid "Charset:"
 msgstr "ক্যারসেট:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
-msgid "Create a new IRC network"
-msgstr "নতুন IRC নেটওয়ার্ক নির্মাণ করুন"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
-msgid "Edit the selected IRC network"
-msgstr "নির্বাচিত IRC নেটওয়ার্কের বৈশিষ্ট্য পরিবর্তন করুন"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2
 msgid "Network"
 msgstr "নেটওয়ার্ক"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3
 msgid "Network:"
 msgstr "নেটওয়ার্ক:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4
 msgid "Nickname:"
 msgstr "উপনাম (Nickname):"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
 msgid "Password:"
 msgstr "পাসওয়ার্ড:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
 msgid "Quit message:"
 msgstr "প্রস্থানকালে প্রদর্শিত বার্তা:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
 msgid "Real name:"
 msgstr "নাম:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
-msgid "Remove the selected IRC network"
-msgstr "নির্বাচিত IRC নেটওয়ার্ক মুছে ফেলুন"
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+#, fuzzy
+msgid "Servers"
+msgstr "সার্ভার"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
-msgid "<b>Override server settings</b>"
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3
+#, fuzzy
+msgid "Override server settings"
 msgstr "<b>সার্ভারের বৈশিষ্ট্য উপেক্ষা করা হবে</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5
 msgid "Pri_ority:"
 msgstr "গুরুত্ব: (_o))"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6
 msgid "Reso_urce:"
-msgstr ""
+msgstr "সামগ্রী: (_u)"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
 msgid "Use old SS_L"
 msgstr "পুরোনো SSL ব্যবহার করা হবে (_L)"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8
 msgid "_Encryption required (TLS/SSL)"
 msgstr "এনক্রিপশন আবশ্যক (TLS/SSL) (_E)"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9
 msgid "_Ignore SSL certificate errors"
 msgstr "SSL সার্টিফিকেট সংক্রান্ত সমস্যা উপেক্ষা করা হবে (_I)"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2
 msgid "_Email:"
 msgstr "ই-মেইল: (_E)"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
-msgid "_First Name: "
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3
+msgid "_First Name:"
 msgstr "নাম: (_F)"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4
 msgid "_Jabber ID:"
 msgstr "_Jabber ID:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5
 msgid "_Last Name:"
 msgstr "পদবি: (_L)"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
-#: ../src/empathy-chatrooms-window.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6
 msgid "_Nickname:"
 msgstr "উপনাম: (_N)"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7
 msgid "_Published Name:"
 msgstr "প্রকাশিত নাম: (_P)"
 
 #. look up the DNS SRV record at the service's domain for the host name of a STUN server.
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3
 msgid "Discover STUN"
-msgstr ""
+msgstr "STUN অনুসন্ধান করা হবে"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5
 msgid "STUN Server:"
 msgstr "STUN সার্ভার:"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6
 msgid "STUN port:"
 msgstr "STUN পোর্ট:"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7
 msgid "_Username:"
 msgstr "ব্যবহারকারীর নাম: (_U)"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3
 msgid "Use _Yahoo Japan"
 msgstr "Yahoo Japan ব্যবহার করা হবে (_Y)"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4
 msgid "Yahoo I_D:"
 msgstr "Yahoo I_D:"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6
 msgid "_Ignore conference and chatroom invitations"
-msgstr ""
+msgstr "বৈঠক ও চ্যাট-রুম থেকে প্রাপ্ত আমন্ত্রণগুলি উপেক্ষা করা হবে (_I)"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8
 msgid "_Room List locale:"
-msgstr ""
+msgstr "রুম তালিকার লোকেইল: (_R)"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+#: ../libempathy-gtk/empathy-avatar-chooser.c:525
+msgid "Couldn't convert image"
+msgstr "ছবি রূপান্তর করতে ব্যর্থ"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:457
+#: ../libempathy-gtk/empathy-avatar-chooser.c:450
+msgid "None of the accepted image formats is supported on your system"
+msgstr "গ্রহণযোগ্য ছবির বিন্যাসগুলির মধ্যে একটিও আপনার সিস্টেম দ্বারা সমর্থিত হয় না"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:933
 msgid "Select Your Avatar Image"
-msgstr ""
+msgstr "নিজের অবতারের ছবি নির্বাচন করুন"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:460
+#: ../libempathy-gtk/empathy-avatar-chooser.c:936
 msgid "No Image"
 msgstr "ছবি ব্যবহৃত হবে না"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:520
+#: ../libempathy-gtk/empathy-avatar-chooser.c:998
 msgid "Images"
 msgstr "ছবি"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:524
+#: ../libempathy-gtk/empathy-avatar-chooser.c:1002
 msgid "All Files"
 msgstr "সর্বধরনের ফাইল"
 
-#: ../libempathy-gtk/empathy-avatar-image.c:294
+#: ../libempathy-gtk/empathy-avatar-image.c:324
 msgid "Click to enlarge"
 msgstr "বড় মাপে প্রদর্শনের জন্য ক্লিক করুন"
 
-#: ../libempathy-gtk/empathy-chat.c:497
+#: ../libempathy-gtk/empathy-chat.c:186
+msgid "Failed to reconnect this chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:404
+msgid "Unsupported command"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:539
 msgid "offline"
 msgstr "অফ-লাইন"
 
-#: ../libempathy-gtk/empathy-chat.c:500
+#: ../libempathy-gtk/empathy-chat.c:542
 msgid "invalid contact"
 msgstr "পরিচিত ব্যক্তির তথ্য বৈধ নয়"
 
-#: ../libempathy-gtk/empathy-chat.c:503
+#: ../libempathy-gtk/empathy-chat.c:545
 msgid "permission denied"
 msgstr "অনুমতি প্রদান করা হয়নি"
 
-#: ../libempathy-gtk/empathy-chat.c:506
+#: ../libempathy-gtk/empathy-chat.c:548
 msgid "too long message"
 msgstr "বার্তা অত্যাধিক লম্বা"
 
-#: ../libempathy-gtk/empathy-chat.c:509
+#: ../libempathy-gtk/empathy-chat.c:551
 msgid "not implemented"
 msgstr "প্রয়োগ করা হয়নি"
 
-#: ../libempathy-gtk/empathy-chat.c:512
+#: ../libempathy-gtk/empathy-chat.c:554
 msgid "unknown"
 msgstr "অজানা"
 
-#: ../libempathy-gtk/empathy-chat.c:516
+#: ../libempathy-gtk/empathy-chat.c:558
 #, c-format
 msgid "Error sending message '%s': %s"
 msgstr "'%s' বার্তা পাঠাতে সমস্যা: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:546
+#: ../libempathy-gtk/empathy-chat.c:588
 #, c-format
 msgid "Topic set to: %s"
-msgstr ""
+msgstr "নির্ধারিত বিষয়: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:548
+#: ../libempathy-gtk/empathy-chat.c:590
 msgid "No topic defined"
+msgstr "বিষয় নির্ধারিত হয়নি"
+
+#: ../libempathy-gtk/empathy-chat.c:959
+msgid "(No Suggestions)"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-chat.c:963
+#: ../libempathy-gtk/empathy-chat.c:1013
 msgid "Insert Smiley"
 msgstr "স্মাইলি চিহ্ন অন্তর্ভুক্ত করুন"
 
-#: ../libempathy-gtk/empathy-chat.c:979
+#. send button
+#: ../libempathy-gtk/empathy-chat.c:1031
+#: ../libempathy-gtk/empathy-ui-utils.c:1476
 msgid "_Send"
 msgstr "পাঠিয়ে দিন (_S)"
 
-#: ../libempathy-gtk/empathy-chat.c:1013
-msgid "_Check Word Spelling..."
-msgstr "শব্দের বানান পরীক্ষা করুন...(_C)"
+#: ../libempathy-gtk/empathy-chat.c:1065
+msgid "_Spelling Suggestions"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-chat.c:1119
+#: ../libempathy-gtk/empathy-chat.c:1179
 #, c-format
 msgid "%s has joined the room"
-msgstr ""
+msgstr "%s রুমে এসেছেন"
 
-#: ../libempathy-gtk/empathy-chat.c:1122
+#: ../libempathy-gtk/empathy-chat.c:1182
 #, c-format
 msgid "%s has left the room"
-msgstr ""
+msgstr "%s রুম থেকে চলে গেছেন"
 
-#: ../libempathy-gtk/empathy-chat.c:1236 ../src/empathy-call-window.c:406
+#: ../libempathy-gtk/empathy-chat.c:1313 ../src/empathy-call-window.c:1199
 msgid "Disconnected"
 msgstr "বিচ্ছিন্ন"
 
-#: ../libempathy-gtk/empathy-chat.c:1608
+#: ../libempathy-gtk/empathy-chat.c:1742
 msgid "Connected"
 msgstr "সংযুক্ত"
 
-#: ../libempathy-gtk/empathy-chat.glade.h:1
-msgid "<b>Topic:</b>"
-msgstr "<b>বিষয়:</b>"
+#: ../libempathy-gtk/empathy-chat.c:1792
+#: ../libempathy-gtk/empathy-log-window.c:501
+msgid "Conversation"
+msgstr "আলাপন"
 
-#: ../libempathy-gtk/empathy-chat.glade.h:2
-msgid "Group Chat"
-msgstr ""
+#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:471
+msgid "Topic:"
+msgstr "বিষয়:"
 
-#: ../libempathy-gtk/empathy-chat-view.c:430
+#: ../libempathy-gtk/empathy-chat-text-view.c:316
 msgid "_Copy Link Address"
 msgstr "লিঙ্ক দ্বারা চিহ্নিত ঠিকানা কপি করুন (_C)"
 
-#: ../libempathy-gtk/empathy-chat-view.c:438
+#: ../libempathy-gtk/empathy-chat-text-view.c:323
 msgid "_Open Link"
 msgstr "লিঙ্ক দ্বারা চিহ্নিত খুলুন (_O)"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:180
-msgid "Personal Information"
-msgstr "ব্যক্তিগত তথ্য"
+#. Translators: timestamp displayed between conversations in
+#. * chat windows (strftime format string)
+#: ../libempathy-gtk/empathy-chat-text-view.c:415
+msgid "%A %B %d %Y"
+msgstr "%A %B %d %Y"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+#: ../libempathy-gtk/empathy-contact-dialogs.c:238
 msgid "Edit Contact Information"
 msgstr "যোগাযোগ সংক্রান্ত তথ্য পরিবর্তন করুন"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:186
-msgid "Contact Information"
-msgstr "যোগাযোগ সংক্রান্ত তথ্য"
-
-#: ../libempathy-gtk/empathy-contact-dialogs.c:283
-msgid "I would like to add you to my contact list."
-msgstr "আমি আপনাকের আমার পরিচিতি তালিকায় যোগ করতে ইচ্ছুক।"
+#: ../libempathy-gtk/empathy-contact-dialogs.c:289
+msgid "Personal Information"
+msgstr "ব্যক্তিগত তথ্য"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:307
+#: ../libempathy-gtk/empathy-contact-dialogs.c:392
 msgid "New Contact"
 msgstr "নতুন পরিচিতি"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:1
 msgid "Decide _Later"
 msgstr "পরে নির্ধারণ করা হবে (_L)"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:2
 msgid "Subscription Request"
-msgstr ""
+msgstr "সাবস্ক্রিপশনের অনুরোধ"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1226
+#: ../libempathy-gtk/empathy-contact-list-view.c:1378
 #, c-format
 msgid "Do you really want to remove the group '%s'?"
 msgstr "'%s' নাম দল কি নিশ্চিতরূপে মুছে ফেলতে ইচ্ছুক?"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1228
+#: ../libempathy-gtk/empathy-contact-list-view.c:1380
 msgid "Removing group"
 msgstr "দল মুছে ফেলা হচ্ছে"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1275
-#: ../libempathy-gtk/empathy-contact-list-view.c:1354
+#: ../libempathy-gtk/empathy-contact-list-view.c:1427
+#: ../libempathy-gtk/empathy-contact-list-view.c:1505
 msgid "_Remove"
 msgstr "মুছে ফেলুন (_R)"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1305
+#: ../libempathy-gtk/empathy-contact-list-view.c:1457
 #, c-format
 msgid "Do you really want to remove the contact '%s'?"
-msgstr ""
+msgstr "আপনি কি নিশ্চিতরূপে '%s'-কে পরিচিত তালিকা থেকে সরিয়ে ফেলতে ইচ্ছুক?"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1307
+#: ../libempathy-gtk/empathy-contact-list-view.c:1459
 msgid "Removing contact"
-msgstr ""
-
-#: ../libempathy-gtk/empathy-contact-list-view.c:1312
-msgid "Sorry, I don't want you in my contact list anymore."
-msgstr ""
+msgstr "পরিচিত ব্যক্তিকে সরিয়ে ফেলা হচ্ছে"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:109
-#: ../src/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/empathy-contact-menu.c:135
+#: ../src/empathy-main-window.ui.h:8
 msgid "_Chat"
 msgstr "আলাপন (_C)"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:130
-msgid "_Call"
-msgstr ""
+#: ../libempathy-gtk/empathy-contact-menu.c:166
+#, fuzzy
+msgctxt "menu item"
+msgid "_Audio Call"
+msgstr "ডেকে নিন (_C)"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:169
-#: ../src/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-contact-menu.c:198
+#, fuzzy
+msgctxt "menu item"
+msgid "_Video Call"
+msgstr "ডেকে নিন (_C)"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:237
 msgid "_View Previous Conversations"
 msgstr "পূর্ববর্তী আলাপ প্রদর্শন করা হবে (_V)"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:197
+#: ../libempathy-gtk/empathy-contact-menu.c:259
+msgid "Send file"
+msgstr "ফাইল পাঠান"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:287
 msgid "Infor_mation"
 msgstr "তথ্য (_m)"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:224
-#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+#: ../libempathy-gtk/empathy-contact-menu.c:314
+#: ../src/empathy-main-window.ui.h:11
 msgid "_Edit"
 msgstr "সম্পাদনা (_E)"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:358
+#: ../libempathy-gtk/empathy-contact-menu.c:372
+msgid "Inviting to this room"
+msgstr "এই রুমে আমন্ত্রণ করুন"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:403
+msgid "_Invite to chatroom"
+msgstr "চ্যাট-রুমে আমন্ত্রণ করুন (_I)"
+
+#: ../libempathy-gtk/empathy-contact-selector.c:129
+msgid "Select a contact"
+msgstr "একটি পরিচিতি নির্বাচন করুন"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:440
 msgid "Save Avatar"
 msgstr "অবতারের ছবি সংরক্ষণ করুন"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:414
+#: ../libempathy-gtk/empathy-contact-widget.c:496
 msgid "Unable to save avatar"
 msgstr "অবতারের ছবি সংরক্ষণ করতে ব্যর্থ"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:875
+#: ../libempathy-gtk/empathy-contact-widget.c:979
 msgid "Select"
 msgstr "নির্বাচন করুন"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:884
-#: ../src/empathy-main-window.c:853
+#: ../libempathy-gtk/empathy-contact-widget.c:988
+#: ../src/empathy-main-window.c:905
 msgid "Group"
 msgstr "দল"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
-msgid "<b>Client Information</b>"
-msgstr "<b>ক্লায়েন্ট সংক্রান্ত তথ্য</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1239
+msgid "Country ISO Code:"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
-msgid "<b>Contact Details</b>"
-msgstr "<b>যোগাযোগ সংক্রান্ত বিবরণ</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1241
+#, fuzzy
+msgid "Country:"
+msgstr "অ্যাকাউন্ট:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
-msgid "<b>Contact</b>"
-msgstr "<b>যোগাযোগ</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1243
+#, fuzzy
+msgid "State:"
+msgstr "অবস্থা:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
-msgid "<b>Groups</b>"
-msgstr "<b>দল</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1245
+#, fuzzy
+msgid "City:"
+msgstr "ক্লায়েন্ট:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
-#: ../src/empathy-chatrooms-window.glade.h:1
-#: ../src/empathy-new-chatroom-dialog.glade.h:1
-msgid "Account:"
-msgstr "অ্যাকাউন্ট:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1247
+#, fuzzy
+msgid "Area:"
+msgstr "আর্মেনিয়ান"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
-msgid "Alias:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1249
+msgid "Postal Code:"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
-msgid "Birthday:"
-msgstr "জন্মদিন:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1251
+#, fuzzy
+msgid "Street:"
+msgstr "নির্বাচন করুন"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
-msgid "Client:"
-msgstr "ক্লায়েন্ট:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1253
+msgid "Building:"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
-msgid "Contact information"
-msgstr "যোগাযোগ সংক্রান্ত তথ্য"
+#: ../libempathy-gtk/empathy-contact-widget.c:1255
+#, fuzzy
+msgid "Floor:"
+msgstr "উদ্দিষ্ট বস্তু: (_F)"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
-msgid "Email:"
-msgstr "ই-মেইল:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1257
+#, fuzzy
+msgid "Room:"
+msgstr "রুম: (_R)"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
-msgid "Fullname:"
-msgstr "সম্পূর্ণ নাম:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1259
+#, fuzzy
+msgid "Text:"
+msgstr "প্রকৃতি:"
 
-#. Identifier to connect to Instant Messaging network
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
-msgid "Identifier:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1261
+#, fuzzy
+msgid "Description:"
+msgstr "সংস্করণ:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1263
+msgid "URI:"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
-msgid "Information requested..."
-msgstr "অনুরোধ করা তথ্য..."
+#: ../libempathy-gtk/empathy-contact-widget.c:1265
+msgid "Accuracy Level:"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
-msgid "OS:"
-msgstr "OS:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1267
+msgid "Error:"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
-msgid ""
-"Select the groups you want this contact to appear in.  Note that you can "
-"select more than one group or no groups."
+#: ../libempathy-gtk/empathy-contact-widget.c:1269
+msgid "Vertical Error (meters):"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
-msgid "Version:"
-msgstr "সংস্করণ:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1271
+msgid "Horizontal Error (meters):"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
-msgid "Web site:"
-msgstr "ওয়েব-সাইট:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1273
+msgid "Speed:"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:19
-msgid "_Add Group"
-msgstr "দল যোগ করুন (_A)"
+#: ../libempathy-gtk/empathy-contact-widget.c:1275
+#, fuzzy
+msgid "Bearing:"
+msgstr "সংস্করণ:"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
-msgid "new server"
+#: ../libempathy-gtk/empathy-contact-widget.c:1277
+msgid "Climb Speed:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1279
+msgid "Last Updated on:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1281
+msgid "Longitude:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1283
+msgid "Latitude:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1285
+msgid "Altitude:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1332
+#, fuzzy
+msgid "<b>Location</b>"
+msgstr "<b>যোগাযোগ</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1345
+#, fuzzy
+msgid "<b>Location</b>, "
+msgstr "<b>যোগাযোগ</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1395
+msgid "%B %e, %Y at %R UTC"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
+msgid "<b>Location</b> at (date)\t"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:2
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1
+#: ../src/empathy-chatrooms-window.ui.h:1
+#: ../src/empathy-new-chatroom-dialog.ui.h:1
+msgid "Account:"
+msgstr "অ্যাকাউন্ট:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:3
+msgid "Alias:"
+msgstr "উপনাম:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:4
+msgid "Birthday:"
+msgstr "জন্মদিন:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:5
+#, fuzzy
+msgid "Client Information"
+msgstr "<b>ক্লায়েন্ট সংক্রান্ত তথ্য</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
+msgid "Client:"
+msgstr "ক্লায়েন্ট:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:7
+#: ../src/empathy-main-window.c:888
+msgid "Contact"
+msgstr "পরিচিত ব্যক্তি"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:8
+#, fuzzy
+msgid "Contact Details"
+msgstr "<b>যোগাযোগ সংক্রান্ত বিবরণ</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:9
+msgid "Email:"
+msgstr "ই-মেইল:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:10
+msgid "Fullname:"
+msgstr "সম্পূর্ণ নাম:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:11
+#, fuzzy
+msgid "Groups"
+msgstr "দল"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:13
+msgid "Identifier:"
+msgstr "সনাক্তচিহ্ন:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:14
+msgid "Information requested..."
+msgstr "অনুরোধ করা তথ্য..."
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:15
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:16
+msgid ""
+"Select the groups you want this contact to appear in.  Note that you can "
+"select more than one group or no groups."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:17
+msgid "Version:"
+msgstr "সংস্করণ:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:18
+msgid "Web site:"
+msgstr "ওয়েব-সাইট:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:19
+msgid "_Add Group"
+msgstr "দল যোগ করুন (_A)"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:283
+msgid "new server"
 msgstr "নতুন সার্ভার"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:510
 msgid "Server"
 msgstr "সার্ভার"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:525
 msgid "Port"
 msgstr "পোর্ট"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:538
 msgid "SSL"
 msgstr "SSL"
 
-#: ../libempathy-gtk/empathy-log-window.c:497
+#: ../libempathy-gtk/empathy-log-window.c:494
+#: ../src/empathy-import-dialog.c:281
 msgid "Account"
 msgstr "অ্যাকাউন্ট"
 
-#: ../libempathy-gtk/empathy-log-window.c:504 ../src/empathy-chat-window.c:276
-msgid "Conversation"
-msgstr ""
-
-#: ../libempathy-gtk/empathy-log-window.c:514
+#: ../libempathy-gtk/empathy-log-window.c:511
 msgid "Date"
 msgstr "তারিখ"
 
-#. Tab Label
-#: ../libempathy-gtk/empathy-log-window.glade.h:2
+#: ../libempathy-gtk/empathy-log-window.ui.h:1
 msgid "Conversations"
-msgstr ""
+msgstr "আলাপন"
 
-#: ../libempathy-gtk/empathy-log-window.glade.h:3
+#: ../libempathy-gtk/empathy-log-window.ui.h:2
 msgid "Previous Conversations"
-msgstr ""
+msgstr "পূর্ববর্তী আলাপন"
 
-#. Tab Label
-#: ../libempathy-gtk/empathy-log-window.glade.h:5
+#: ../libempathy-gtk/empathy-log-window.ui.h:3
 msgid "Search"
 msgstr "অনুসন্ধান"
 
-#. Searching *for* something
-#: ../libempathy-gtk/empathy-log-window.glade.h:7
+#: ../libempathy-gtk/empathy-log-window.ui.h:4
 msgid "_For:"
-msgstr ""
+msgstr "উদ্দিষ্ট বস্তু: (_F)"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
-msgid "Call"
-msgstr ""
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:2
+msgid "C_all"
+msgstr "ডাকুন (_a)"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
-#: ../src/empathy-chat-window.glade.h:2
-msgid "Chat"
-msgstr "আলাপন"
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:3
+msgid "C_hat"
+msgstr "আলাপন (_h)"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:4
 msgid "Contact ID:"
-msgstr ""
+msgstr "পরিচিতির ID:"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:5
 msgid "New Conversation"
+msgstr "নতুন আলাপন"
+
+#. COL_STATE_ICON_NAME
+#. COL_STATE
+#. COL_STATUS_TEXT
+#. COL_DISPLAY_MARKUP
+#. COL_STATUS_CUSTOMISABLE
+#. COL_TYPE
+#: ../libempathy-gtk/empathy-presence-chooser.c:172
+#, fuzzy
+msgid "Custom Message..."
+msgstr "স্বনির্ধারিত বার্তা..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:227
+#, fuzzy
+msgid "Edit Custom Messages..."
+msgstr "স্বনির্ধারিত বার্তা..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:326
+msgid "Click to remove this status as a favorite"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:335
+msgid "Click to make this status a favorite"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:369
+#, fuzzy
+msgid "Set status"
+msgstr "অবস্থা"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:782
+msgid "Set your presence and current status"
 msgstr ""
 
 #. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:685
+#: ../libempathy-gtk/empathy-presence-chooser.c:1017
 msgid "Custom messages..."
 msgstr "স্বনির্ধারিত বার্তা..."
 
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
-msgid "Custom message"
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:362
+#, fuzzy
+msgid "Enter Custom Message"
 msgstr "স্বনির্ধারিত বার্তা"
 
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
-msgid "Message:"
-msgstr "বার্তা:"
-
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
-msgid "Save message"
-msgstr "বার্তা সংরক্ষণ করুন"
-
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
-msgid "Status:"
-msgstr "অবস্থা:"
-
-#: ../libempathy-gtk/empathy-spell-dialog.c:88
-msgid "Word"
-msgstr "শব্দ"
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:521
+#, fuzzy
+msgid "Edit Custom Messages"
+msgstr "স্বনির্ধারিত বার্তা"
 
-#: ../libempathy-gtk/empathy-spell-dialog.c:265
-msgid "Suggestions for the word"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1
+msgid "Add _New Preset"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
-msgid "Spell Checker"
-msgstr "বানান পরীক্ষণ ব্যবস্থা"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2
+#, fuzzy
+msgid "Saved Presets"
+msgstr "বার্তা সংরক্ষণ করুন"
 
-#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
-msgid "Suggestions for the word:"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3
+msgid "gtk-add"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-theme-boxes.c:745
-#: ../libempathy-gtk/empathy-theme-irc.c:293
-msgid "%A %d %B %Y"
-msgstr "%A %d %B %Y"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4
+msgid "gtk-remove"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-theme-manager.c:73
+#: ../libempathy-gtk/empathy-theme-manager.c:66
 msgid "Classic"
 msgstr "পারম্পরিক"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:74
+#: ../libempathy-gtk/empathy-theme-manager.c:67
 msgid "Simple"
 msgstr "সাধারণ"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:75
+#: ../libempathy-gtk/empathy-theme-manager.c:68
 msgid "Clean"
 msgstr "পরিশ্রুত"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:76
+#: ../libempathy-gtk/empathy-theme-manager.c:69
 msgid "Blue"
 msgstr "নীল"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1330
+#: ../libempathy-gtk/empathy-theme-manager.c:71
+msgid "Adium"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1378
 msgid "Unable to open URI"
 msgstr "URI খুলতে ব্যর্থ"
 
+#: ../libempathy-gtk/empathy-ui-utils.c:1468
+msgid "Select a file"
+msgstr "একটি ফাইল নির্বাচন করুন"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1526
+#, fuzzy
+msgid "Select a destination"
+msgstr "একটি পরিচিতি নির্বাচন করুন"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1555
+msgid "Received an instant message"
+msgstr "ইনস্ট্যান্ট বার্তা প্রাপ্ত হয়েছে"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1557
+msgid "Sent an instant message"
+msgstr "ইনস্ট্যান্ট বার্তা পাঠানো হয়েছে"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1559
+msgid "Incoming chat request"
+msgstr "চ্যাটের আগত অনুরোধ"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1561
+msgid "Contact connected"
+msgstr "পরিচিতির সাথে সংযোগ করা হয়েছে"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1563
+msgid "Contact disconnected"
+msgstr "পরিচিতির সাথে সংযোগ বিচ্ছিন্ন করা হয়েছে"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1565
+msgid "Connected to server"
+msgstr "সার্ভারের সাথে সংযুক্ত"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1567
+msgid "Disconnected from server"
+msgstr "সার্ভারে সাথে সংযোগ বিচ্ছিন্ন"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1569
+msgid "Incoming voice call"
+msgstr "আগত ভাষ্যের কল"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1571
+msgid "Outgoing voice call"
+msgstr "বাহিরগামি ভাষ্যের কল"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1573
+msgid "Voice call ended"
+msgstr "ভাষ্যের কল সমাপ্ত হয়েছে"
+
 #: ../libempathy-gtk/totem-subtitle-encoding.c:158
 msgid "Current Locale"
 msgstr "বর্তমান লোকেইল"
@@ -1030,19 +1502,21 @@ msgstr "ভিয়েতনামিস"
 #. * vim: sw=2 ts=8 cindent noai bs=2
 #.
 #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
-msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
 msgstr ""
+"অ্যাপ্লেটের মধ্যে প্রদর্শনযোগ্য পরিচিতি। ফাঁকা হলে কোনো পরিচিতি প্রদর্শন করা হবে না।"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
 msgid "The contact's avatar token. Empty means contact has no avatar."
-msgstr ""
+msgstr "পরিচিতির অবতারের টোকেন। পরিচিতির অবতার না থাকলে ফাঁকা থাকবে।"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
 msgid "Megaphone"
 msgstr "মেগাফোন"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
-#: ../megaphone/src/megaphone-applet.c:417
+#: ../megaphone/src/megaphone-applet.c:527
 msgid "Talk!"
 msgstr "Talk!"
 
@@ -1056,10 +1530,18 @@ msgid "_Information"
 msgstr "তথ্য (_I)"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
-#: ../src/empathy-main-window.glade.h:15
+#: ../src/empathy-main-window.ui.h:18
 msgid "_Preferences"
 msgstr "পছন্দ (_P)"
 
+#: ../megaphone/src/megaphone-applet.c:168
+msgid "Please configure a contact."
+msgstr "অনুগ্রহ করে পরিচিতির তথ্য কনফিগার করুন।"
+
+#: ../megaphone/src/megaphone-applet.c:258
+msgid "Select contact..."
+msgstr "পরিচিত ব্যক্তি নির্বাচ করুন..."
+
 #: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
 msgid "Presence"
 msgstr "উপস্থিতি"
@@ -1069,23 +1551,23 @@ msgstr "উপস্থিতি"
 msgid "Set your own presence"
 msgstr "নিজের উপস্থিতি সংক্রান্ত তথ্য নির্ধারণ করুন"
 
-#: ../src/empathy.c:380
+#: ../src/empathy.c:478
 msgid "Don't connect on startup"
 msgstr "প্রারম্ভে সংযোগ স্থাপন করা হবে না"
 
-#: ../src/empathy.c:384
+#: ../src/empathy.c:482
 msgid "Don't show the contact list on startup"
 msgstr "প্রারম্ভকালে পরিচিত ব্যক্তিদের তালিকা প্রদর্শন করা হবে না"
 
-#: ../src/empathy.c:388
+#: ../src/empathy.c:486
 msgid "Show the accounts dialog"
 msgstr "অ্যাকাউন্ট সংক্রান্ত ডায়লগ প্রদর্শন করা হবে"
 
-#: ../src/empathy.c:400
+#: ../src/empathy.c:498
 msgid "- Empathy Instant Messenger"
 msgstr "- Empathy Instant Messenger"
 
-#: ../src/empathy-about-dialog.c:84
+#: ../src/empathy-about-dialog.c:83
 msgid ""
 "Empathy is free software; you can redistribute it and/or modify it under the "
 "terms of the GNU General Public License as published by the Free Software "
@@ -1097,7 +1579,7 @@ msgstr ""
 "Foundation; either version 2 of the License, or (at your option) any later "
 "version."
 
-#: ../src/empathy-about-dialog.c:88
+#: ../src/empathy-about-dialog.c:87
 msgid ""
 "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
 "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
@@ -1109,7 +1591,7 @@ msgstr ""
 "FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more "
 "details."
 
-#: ../src/empathy-about-dialog.c:92
+#: ../src/empathy-about-dialog.c:91
 msgid ""
 "You should have received a copy of the GNU General Public License along with "
 "Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
@@ -1119,30 +1601,29 @@ msgstr ""
 "Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
 "Street, Fifth Floor, Boston, MA 02110-130159 USA"
 
-#: ../src/empathy-about-dialog.c:120
+#: ../src/empathy-about-dialog.c:119
 msgid "An Instant Messaging client for GNOME"
-msgstr ""
+msgstr "GNOME-র সাথে ব্যবহারযোগ্য ইনস্ট্যান্ট মেসেজিং ক্লায়েন্ট"
 
-#: ../src/empathy-about-dialog.c:126
+#: ../src/empathy-about-dialog.c:125
 msgid "translator-credits"
 msgstr "রুণা ভট্টাচার্য্য (runab@redhat.com)"
 
-#: ../src/empathy-accounts-dialog.c:389
+#: ../src/empathy-accounts-dialog.c:393
 msgid "Enabled"
 msgstr "সক্রিয়"
 
-#: ../src/empathy-accounts-dialog.c:399
-#: ../src/empathy-accounts-dialog.glade.h:4
+#: ../src/empathy-accounts-dialog.c:403 ../src/empathy-accounts-dialog.ui.h:1
 msgid "Accounts"
 msgstr "অ্যাকাউন্ট"
 
 #. To translator: %s is the protocol name
-#: ../src/empathy-accounts-dialog.c:862
+#: ../src/empathy-accounts-dialog.c:837
 #, c-format
 msgid "New %s account"
 msgstr "নতুন %s অ্যাকাউন্ট"
 
-#: ../src/empathy-accounts-dialog.c:972
+#: ../src/empathy-accounts-dialog.c:950
 #, c-format
 msgid ""
 "You are about to remove your %s account!\n"
@@ -1151,7 +1632,7 @@ msgstr ""
 "আপনি %s অ্যাকাউন্টটি মুছে ফেলতে চলেছেন!\n"
 "আপনি কি নিশ্চিতরূপে এগিয়ে যেতে ইচ্ছুক?"
 
-#: ../src/empathy-accounts-dialog.c:978
+#: ../src/empathy-accounts-dialog.c:956
 msgid ""
 "Any associated conversations and chat rooms will NOT be removed if you "
 "decide to proceed.\n"
@@ -1160,589 +1641,1055 @@ msgid ""
 "be available."
 msgstr ""
 
-#: ../src/empathy-accounts-dialog.glade.h:1
-msgid "<b>New Account</b>"
-msgstr "<b>নতুন অ্যাকাউন্ট</b>"
-
-#: ../src/empathy-accounts-dialog.glade.h:2
-msgid "<b>No protocol installed</b>"
-msgstr "<b>কোনো প্রোটোকল ইনস্টল করা হয়নি</b>"
-
-#: ../src/empathy-accounts-dialog.glade.h:3
-msgid "<b>Settings</b>"
-msgstr "<b>বিবিধ বৈশিষ্ট্য</b>"
+#: ../src/empathy-accounts-dialog.ui.h:2
+#, fuzzy
+msgid "Add Account"
+msgstr "অ্যাকাউন্ট"
 
-#: ../src/empathy-accounts-dialog.glade.h:5
+#: ../src/empathy-accounts-dialog.ui.h:3
 msgid "Cr_eate"
 msgstr "নির্মাণ করুন (_e)"
 
-#: ../src/empathy-accounts-dialog.glade.h:6
-msgid "I already have an account I want to use"
-msgstr "ব্যবহারযোগ্য আমার একটি অ্যাকাউন্ট বর্তমান উপস্থিত রয়েছে"
+#: ../src/empathy-accounts-dialog.ui.h:4
+#, fuzzy
+msgid "Gmail"
+msgstr "ই-মেইল:"
+
+#: ../src/empathy-accounts-dialog.ui.h:5
+msgid "Import Accounts..."
+msgstr "অ্যাকাউন্ট ইম্পোর্ট করুন..."
+
+#: ../src/empathy-accounts-dialog.ui.h:6
+#, fuzzy
+msgid "No protocol installed"
+msgstr "<b>কোনো প্রোটোকল ইনস্টল করা হয়নি</b>"
 
-#: ../src/empathy-accounts-dialog.glade.h:7
+#: ../src/empathy-accounts-dialog.ui.h:7
+#, fuzzy
+msgid "Settings"
+msgstr "<b>বিবিধ বৈশিষ্ট্য</b>"
+
+#: ../src/empathy-accounts-dialog.ui.h:8
 msgid ""
 "To add a new account, you first have to install a backend for each protocol "
 "you want to use."
-msgstr "নতুন অ্যাকাউন্ট যোগ করার জন্য, প্রথমে ব্যবহারযোগ্য প্রতিটি প্রোটোকলের জন্য একটি ব্যাক-এন্ড ইনস্টল করা আবশ্যক।"
+msgstr ""
+"নতুন অ্যাকাউন্ট যোগ করার জন্য, প্রথমে ব্যবহারযোগ্য প্রতিটি প্রোটোকলের জন্য একটি ব্যাক-"
+"এন্ড ইনস্টল করা আবশ্যক।"
 
-#: ../src/empathy-accounts-dialog.glade.h:8
+#: ../src/empathy-accounts-dialog.ui.h:9
 msgid "Type:"
 msgstr "প্রকৃতি:"
 
-#: ../src/empathy-call-window.c:142
-msgid "Closed"
-msgstr "বন্ধ"
-
-#: ../src/empathy-call-window.c:254
-msgid "End this call?"
-msgstr ""
+#: ../src/empathy-accounts-dialog.ui.h:10
+#, fuzzy
+msgid "_Add..."
+msgstr "পরিচিত ব্যক্তির তথ্য যোগ করুন... (_A)"
 
-#: ../src/empathy-call-window.c:256
-msgid "Closing this window will end the call in progress."
-msgstr ""
+#: ../src/empathy-accounts-dialog.ui.h:11
+#, fuzzy
+msgid "_Create a new account"
+msgstr "নতুন IRC নেটওয়ার্ক নির্মাণ করুন"
 
-#: ../src/empathy-call-window.c:257
-msgid "_End Call"
-msgstr ""
+#: ../src/empathy-accounts-dialog.ui.h:12
+#, fuzzy
+msgid "_Reuse an existing account"
+msgstr "অ্যাকাউন্ট প্রদর্শন ও সম্পাদনা"
 
-#: ../src/empathy-call-window.c:311
-msgid "Incoming call"
-msgstr ""
+#: ../src/empathy-call-window.c:63
+msgid "Connecting..."
+msgstr "সংযোগ স্থাপন করা হচ্ছে..."
 
-#: ../src/empathy-call-window.c:313
-#, c-format
-msgid "%s is calling you, do you want to answer?"
-msgstr ""
+#: ../src/empathy-call-window.c:415
+msgid "Contrast"
+msgstr "বৈপরিত্য"
 
-#: ../src/empathy-call-window.c:319
-msgid "_Reject"
-msgstr "পà§\8dরতà§\8dযাà¦\96à§\8dযান à¦\95রà§\81ন (_R)"
+#: ../src/empathy-call-window.c:418
+msgid "Brightness"
+msgstr "à¦\89à¦\9cà§\8dà¦\9cà§\8dবলতা"
 
-#: ../src/empathy-call-window.c:324
-msgid "_Answer"
-msgstr "à¦\89তà§\8dতর à¦¦à¦¿à¦¨ (_A)"
+#: ../src/empathy-call-window.c:421
+msgid "Gamma"
+msgstr "à¦\97ামা"
 
-#: ../src/empathy-call-window.c:379
-msgid "Empathy Call"
-msgstr ""
+#: ../src/empathy-call-window.c:526
+msgid "Volume"
+msgstr "আওয়াজ"
 
-#. To translators: Readying is the first state of the call, it is
-#. * preparing the connection and it does not yet ring.
-#: ../src/empathy-call-window.c:382
-msgid "Readying"
-msgstr "প্রস্তুত করা হচ্ছে"
+#: ../src/empathy-call-window.c:728
+msgid "_Sidebar"
+msgstr "সাইড-বার (_S)"
 
-#: ../src/empathy-call-window.c:391
-#, c-format
-msgid "%s - Empathy Call"
-msgstr ""
+#: ../src/empathy-call-window.c:747
+msgid "Dialpad"
+msgstr "ডায়াল-প্যাড"
 
-#: ../src/empathy-call-window.c:395
-msgid "Ringing"
-msgstr "à¦\98নà§\8dà¦\9fি à¦¬à¦¾à¦\9cà¦\9bà§\87"
+#: ../src/empathy-call-window.c:753
+msgid "Audio input"
+msgstr "à¦\85ডিà¦\93 à¦\87নপà§\81à¦\9f"
 
-#: ../src/empathy-call-window.c:408
-msgid "Connecting"
-msgstr "সà¦\82যà§\8bà¦\97 à¦¸à§\8dথাপন à¦\95রা à¦¹à¦\9aà§\8dà¦\9bà§\87"
+#: ../src/empathy-call-window.c:757
+msgid "Video input"
+msgstr "ভিডিà¦\93 à¦\87নপà§\81à¦\9f"
 
-#: ../src/empathy-call-window.c:524
+#: ../src/empathy-call-window.c:820
 #, c-format
-msgid "Incoming call from %s rejected because there is already a running call."
+msgid "Call with %s"
 msgstr ""
 
-#: ../src/empathy-call-window.glade.h:1
-msgid "#"
-msgstr "#"
+#: ../src/empathy-call-window.c:889
+#, fuzzy
+msgid "Call"
+msgstr "ডেকে নিন (_C)"
 
-#: ../src/empathy-call-window.glade.h:2
-msgid "*"
-msgstr "*"
+#. Translators: number of minutes:seconds the caller has been connected
+#: ../src/empathy-call-window.c:1308
+#, fuzzy, c-format
+msgid "Connected — %d:%02dm"
+msgstr "সংযুক্ত -- %d:%02dm"
 
-#: ../src/empathy-call-window.glade.h:3
-msgid "0"
-msgstr ""
+#: ../src/empathy-call-window.ui.h:1
+msgid "Hang up"
+msgstr ""
 
-#: ../src/empathy-call-window.glade.h:4
-msgid "1"
-msgstr ""
+#: ../src/empathy-call-window.ui.h:2
+msgid "Redial"
+msgstr ""
 
-#: ../src/empathy-call-window.glade.h:5
-msgid "2"
-msgstr "২"
+#: ../src/empathy-call-window.ui.h:3
+msgid "Send Audio"
+msgstr "à¦\85ডিà¦\93 à¦ªà¦¾à¦ à¦¾à¦¨"
 
-#: ../src/empathy-call-window.glade.h:6
-msgid "3"
-msgstr "৩"
+#: ../src/empathy-call-window.ui.h:4
+msgid "Send video"
+msgstr "ভিডিà¦\93 à¦ªà¦¾à¦ à¦¾à¦¨"
 
-#: ../src/empathy-call-window.glade.h:7
-msgid "4"
-msgstr "৪"
+#: ../src/empathy-call-window.ui.h:5
+msgid "Video preview"
+msgstr "ভিডিà¦\93র à¦ªà§\82রà§\8dবদà§\83শà§\8dয"
 
-#: ../src/empathy-call-window.glade.h:8
-msgid "5"
-msgstr "৫"
+#: ../src/empathy-call-window.ui.h:6
+msgid "_Call"
+msgstr "ডà§\87à¦\95à§\87 à¦¨à¦¿à¦¨ (_C)"
 
-#: ../src/empathy-call-window.glade.h:9
-msgid "6"
-msgstr "৬"
+#: ../src/empathy-call-window.ui.h:7 ../src/empathy-main-window.ui.h:21
+msgid "_View"
+msgstr "পà§\8dরদরà§\8dশন (_V)"
 
-#: ../src/empathy-call-window.glade.h:10
-msgid "7"
-msgstr "৭"
+#: ../src/empathy-chat-window.c:343
+#, c-format
+msgid "Conversations (%d)"
+msgstr "আলাপন (%d)"
 
-#: ../src/empathy-call-window.glade.h:11
-msgid "8"
-msgstr "৮"
+#: ../src/empathy-chat-window.c:475
+msgid "Typing a message."
+msgstr "বারà§\8dতা à¦²à§\87à¦\96া à¦¹à¦\9aà§\8dà¦\9bà§\87।"
 
-#: ../src/empathy-call-window.glade.h:12
-msgid "9"
-msgstr "৯"
+#: ../src/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "নাম"
 
-#. To translators: The keypad is numbers [0-9], asterisk (*) and hash (#). Presented like on any phone
-#: ../src/empathy-call-window.glade.h:14
-msgid "<b>Keypad</b>"
-msgstr "<b>কি-প্যাড</b>"
+#: ../src/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "রুম"
 
-#: ../src/empathy-call-window.glade.h:15
-msgid "<b>Volume</b>"
-msgstr "<b>আওয়াজ</b>"
+#: ../src/empathy-chatrooms-window.c:285
+msgid "Auto-Connect"
+msgstr "স্বয়ংক্রিয়-সংযোগ"
 
-#: ../src/empathy-call-window.glade.h:16
-msgid "Hang Up"
+#: ../src/empathy-chatrooms-window.ui.h:2
+msgid "Manage Favorite Rooms"
 msgstr ""
 
-#: ../src/empathy-call-window.glade.h:17
-msgid "Send Video"
-msgstr "ভিডিà¦\93 à¦ªà¦¾à¦ à¦¾à¦¨"
+#: ../src/empathy-event-manager.c:377
+msgid "Incoming call"
+msgstr "à¦\86à¦\97মনà¦\95ারà§\80 à¦\95ল"
 
-#: ../src/empathy-chat-window.c:319
+#: ../src/empathy-event-manager.c:380
 #, c-format
-msgid "Conversations (%d)"
+msgid "%s is calling you, do you want to answer?"
 msgstr ""
 
-#: ../src/empathy-chat-window.c:397
-msgid "Topic:"
-msgstr "বিষà§\9f:"
+#: ../src/empathy-event-manager.c:387
+msgid "_Reject"
+msgstr "পà§\8dরতà§\8dযাà¦\96à§\8dযান à¦\95রà§\81ন (_R)"
 
-#: ../src/empathy-chat-window.c:400
-msgid "Typing a message."
-msgstr "বারà§\8dতা à¦²à§\87à¦\96া à¦¹à¦\9aà§\8dà¦\9bà§\87।"
+#: ../src/empathy-event-manager.c:393
+msgid "_Answer"
+msgstr "à¦\89তà§\8dতর à¦¦à¦¿à¦¨ (_A)"
 
-#: ../src/empathy-chat-window.glade.h:1
-msgid "C_lear"
-msgstr "মুছে ফেলুন (_l)"
+#: ../src/empathy-event-manager.c:505
+#, c-format
+msgid "Incoming call from %s"
+msgstr "%s থেকে আগমনকারী কল"
 
-#: ../src/empathy-chat-window.glade.h:3
-msgid "Insert _Smiley"
-msgstr "স্মাইলি যোগ করুন (_S)"
+#: ../src/empathy-event-manager.c:545
+#, c-format
+msgid "%s is offering you an invitation"
+msgstr "%s আপনাকে আমন্ত্রণ জানাচ্ছেন"
 
-#: ../src/empathy-chat-window.glade.h:4
-msgid "Invitation _message:"
-msgstr "à¦\86মনà§\8dতà§\8dরণ à¦¬à¦¾à¦°à§\8dতা: (_m)"
+#: ../src/empathy-event-manager.c:551
+msgid "An external application will be started to handle it."
+msgstr "à¦\8fà¦\9fি à¦ªà¦°à¦¿à¦\9aালনার à¦\9cনà§\8dয à¦\8fà¦\95à¦\9fি à¦¬à¦¹à¦¿à¦¸à§\8dথিত à¦\85à§\8dযাপà§\8dলিà¦\95à§\87শন à¦\86রমà§\8dভ à¦\95রা à¦¹à¦¬à§\87।"
 
-#: ../src/empathy-chat-window.glade.h:5
-msgid "Invite"
-msgstr "à¦\86মনà§\8dতà§\8dরণ à¦\95রà§\81ন"
+#: ../src/empathy-event-manager.c:556
+msgid "You don't have the needed external application to handle it."
+msgstr "à¦\8fà¦\9fি à¦ªà¦°à¦¿à¦\9aালনার à¦\9cনà§\8dয à¦¬à¦¹à¦¿à¦¸à§\8dথিত à¦\85à§\8dযাপà§\8dলিà¦\95à§\87শনà§\87র à¦ªà§\8dরà§\9fà§\8bà¦\9cন à¦¨à§\87à¦\87।"
 
-#: ../src/empathy-chat-window.glade.h:6
-msgid "Move Tab _Left"
-msgstr "à¦\9fà§\8dযাব à¦¬à¦¾à¦\81দিà¦\95à§\87 à¦¸à¦°à¦¿à§\9fà§\87 à¦¨à¦¿à¦¨ (_L)"
+#: ../src/empathy-event-manager.c:683
+msgid "Room invitation"
+msgstr "রà§\81মà§\87র à¦\86মনà§\8dতà§\8dরণ"
 
-#: ../src/empathy-chat-window.glade.h:7
-msgid "Move Tab _Right"
-msgstr "ট্যাব ডানদিকে সরিয়ে নিন (_R)"
+#: ../src/empathy-event-manager.c:686
+#, c-format
+msgid "%s is inviting you to join %s"
+msgstr "%s আপনাকে %s-এ আমন্ত্রণ জানাচ্ছেন"
 
-#: ../src/empathy-chat-window.glade.h:8
-msgid "Select who would you like to invite:"
-msgstr "à¦\86মনà§\8dতà§\8dরিতদà§\87র à¦¤à¦¾à¦²à¦¿à¦\95া à¦¤à§\88রি à¦\95রà§\81ন:"
+#: ../src/empathy-event-manager.c:694
+msgid "_Decline"
+msgstr "পà§\8dরতà§\8dযাà¦\96à§\8dযান à¦\95রà§\81ন (_D)"
 
-#: ../src/empathy-chat-window.glade.h:9
-msgid "You have been invited to join a chat conference."
-msgstr ""
+#: ../src/empathy-event-manager.c:699
+#: ../src/empathy-new-chatroom-dialog.ui.h:7
+msgid "_Join"
+msgstr "যোগ দিন (_J)"
 
-#: ../src/empathy-chat-window.glade.h:10
-msgid "_Contact"
-msgstr "পরিচিত ব্যক্তি (_C)"
+#: ../src/empathy-event-manager.c:738
+#, c-format
+msgid "%s invited you to join %s"
+msgstr "%s আপনাকে %s-এ আমন্ত্রণ জানিয়েছেন"
 
-#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
-msgid "_Contents"
-msgstr "সূচী (_C)"
+#: ../src/empathy-event-manager.c:764
+#, c-format
+msgid "Incoming file transfer from %s"
+msgstr ""
 
-#: ../src/empathy-chat-window.glade.h:12
-msgid "_Conversation"
+#: ../src/empathy-event-manager.c:944
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "%s দ্বারা অনুরোধ করা সাবস্ক্রিপশন"
+
+#: ../src/empathy-event-manager.c:948
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
 msgstr ""
+"\n"
+"বার্তা: %s"
 
-#: ../src/empathy-chat-window.glade.h:13
-msgid "_Detach Tab"
-msgstr "ট্যাব বিচ্ছিন্ন করুন (_D)"
+#. Translators: time left, when it is more than one hour
+#: ../src/empathy-ft-manager.c:101
+#, c-format
+msgid "%u:%02u.%02u"
+msgstr "%u:%02u.%02u"
 
-#: ../src/empathy-chat-window.glade.h:15 ../src/empathy-main-window.glade.h:12
-msgid "_Help"
-msgstr "সাহায্য (_H)"
+#. Translators: time left, when is is less than one hour
+#: ../src/empathy-ft-manager.c:104
+#, c-format
+msgid "%02u.%02u"
+msgstr "%02u.%02u"
 
-#: ../src/empathy-chat-window.glade.h:16
-msgid "_Next Tab"
-msgstr "পরবর্তী ট্যাব (_N)"
+#: ../src/empathy-ft-manager.c:180
+msgctxt "file transfer percent"
+msgid "Unknown"
+msgstr "অজানা"
 
-#: ../src/empathy-chat-window.glade.h:17
-msgid "_Previous Tab"
-msgstr "পূর্ববর্তী ট্যাব (_P)"
+#: ../src/empathy-ft-manager.c:275
+#, fuzzy, c-format
+msgid "%s of %s at %s/s"
+msgstr "%s, সর্বমোট %s"
 
-#: ../src/empathy-chat-window.glade.h:18
-msgid "_Tabs"
-msgstr "ট্যাব (_T)"
+#: ../src/empathy-ft-manager.c:276
+#, c-format
+msgid "%s of %s"
+msgstr "%s, সর্বমোট %s"
 
-#: ../src/empathy-chatrooms-window.c:262
-msgid "Name"
-msgstr "নাম"
+#. translators: first %s is filename, second %s is the contact name
+#: ../src/empathy-ft-manager.c:307
+#, c-format
+msgid "Receiving \"%s\" from %s"
+msgstr "\"%s\" প্রাপ্ত করা হচ্ছে, %s থেকে"
 
-#: ../src/empathy-chatrooms-window.c:280
-msgid "Room"
-msgstr ""
+#. translators: first %s is filename, second %s is the contact name
+#: ../src/empathy-ft-manager.c:310
+#, c-format
+msgid "Sending \"%s\" to %s"
+msgstr "\"%s\" পাঠানো হচ্ছে, %s-কে"
 
-#: ../src/empathy-chatrooms-window.c:289
-msgid "Auto-Connect"
-msgstr "স্বয়ংক্রিয়-সংযোগ"
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:340
+#, fuzzy, c-format
+msgid "Error receiving \"%s\" from %s"
+msgstr "\"%s\" প্রাপ্ত করা হচ্ছে, %s থেকে"
 
-#: ../src/empathy-chatrooms-window.glade.h:2
-msgid "Edit Favorite Room"
+#: ../src/empathy-ft-manager.c:343
+msgid "Error receiving a file"
 msgstr ""
 
-#: ../src/empathy-chatrooms-window.glade.h:3
-msgid "Join room on start_up"
-msgstr ""
+#: ../src/empathy-ft-manager.c:348
+#, fuzzy, c-format
+msgid "Error sending \"%s\" to %s"
+msgstr "\"%s\" পাঠানো হচ্ছে, %s-কে"
 
-#: ../src/empathy-chatrooms-window.glade.h:4
-msgid "Join this chat room when Empathy starts and you are connected"
-msgstr ""
+#: ../src/empathy-ft-manager.c:351
+#, fuzzy
+msgid "Error sending a file"
+msgstr "'%s' বার্তা পাঠাতে সমস্যা: %s"
 
-#: ../src/empathy-chatrooms-window.glade.h:5
-msgid "Manage Favorite Rooms"
-msgstr ""
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:490
+#, c-format
+msgid "\"%s\" received from %s"
+msgstr "\"%s\" প্রাপ্ত হয়েছে, %s থেকে"
 
-#: ../src/empathy-chatrooms-window.glade.h:6
-msgid "N_ame:"
-msgstr "নাম: (_a)"
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:495
+#, c-format
+msgid "\"%s\" sent to %s"
+msgstr "\"%s\" প্রেরিত হয়েছে, %s-কে"
 
-#: ../src/empathy-chatrooms-window.glade.h:7
-msgid "S_erver:"
-msgstr "সারà§\8dভার: (_e)"
+#: ../src/empathy-ft-manager.c:498
+msgid "File transfer completed"
+msgstr "ফাà¦\87ল à¦¬à¦¿à¦¨à¦¿à¦®à§\9f à¦¸à¦®à§\8dপà§\82রà§\8dণ à¦¹à§\9fà§\87à¦\9bà§\87"
 
-#: ../src/empathy-chatrooms-window.glade.h:9
-#: ../src/empathy-new-chatroom-dialog.glade.h:9
-msgid "_Room:"
-msgstr ""
+#: ../src/empathy-ft-manager.c:617 ../src/empathy-ft-manager.c:784
+#, fuzzy
+msgid "Waiting for the other participant's response"
+msgstr "অন্য ব্যবহারকারীর প্রতিক্রিয়ার অপেক্ষা করা হচ্ছে"
 
-#: ../src/empathy-event-manager.c:166
+#: ../src/empathy-ft-manager.c:643 ../src/empathy-ft-manager.c:681
 #, c-format
-msgid ""
-"New message from %s:\n"
-"%s"
+msgid "Checking integrity of \"%s\""
 msgstr ""
-"%s থেকে প্রাপ্ত নতুন বার্তা:\n"
-"%s"
 
-#: ../src/empathy-event-manager.c:205
+#: ../src/empathy-ft-manager.c:646 ../src/empathy-ft-manager.c:684
 #, c-format
-msgid "Incoming call from %s"
+msgid "Hashing \"%s\""
 msgstr ""
 
-#: ../src/empathy-event-manager.c:238
-#, c-format
-msgid ""
-"%s is offering you an invitation, but you don't have the needed external "
-"application to handle it."
-msgstr ""
+#: ../src/empathy-ft-manager.c:1024
+msgid "%"
+msgstr "%"
 
-#: ../src/empathy-event-manager.c:263
-msgid "Invitation Error"
-msgstr "à¦\86মনà§\8dতà§\8dরণ à¦¸à¦\82à¦\95à§\8dরানà§\8dত à¦¤à§\8dরà§\81à¦\9fি"
+#: ../src/empathy-ft-manager.c:1036
+msgid "File"
+msgstr "ফাà¦\87ল"
 
-#: ../src/empathy-event-manager.c:289
-#, c-format
-msgid ""
-"%s is offering you an invitation. An external application will be started to "
-"handle it."
-msgstr ""
+#: ../src/empathy-ft-manager.c:1058
+msgid "Remaining"
+msgstr "অবশিষ্ট"
 
-#: ../src/empathy-event-manager.c:345
-#, c-format
-msgid "Subscription requested by %s"
+#: ../src/empathy-ft-manager.ui.h:1
+#, fuzzy
+msgid "File Transfers"
+msgstr "ফাইল বিনিময়"
+
+#: ../src/empathy-ft-manager.ui.h:2
+msgid "Remove completed, canceled and failed file transfers from the list"
 msgstr ""
 
-#: ../src/empathy-event-manager.c:348
-#, c-format
+#. Translators: this is the header of a treeview column
+#: ../src/empathy-import-dialog.c:259
+msgid "Import"
+msgstr "ইম্পোর্ট"
+
+#: ../src/empathy-import-dialog.c:268
+msgid "Protocol"
+msgstr "প্রোটোকল"
+
+#: ../src/empathy-import-dialog.c:294
+msgid "Source"
+msgstr "উৎসস্থল"
+
+#: ../src/empathy-import-dialog.c:388
 msgid ""
-"\n"
-"Message: %s"
+"No accounts to import could be found. Empathy currently only supports "
+"importing accounts from Pidgin."
 msgstr ""
-"\n"
-"বার্তা: %s"
 
-#: ../src/empathy-main-window.c:466
-msgid "Show and edit accounts"
-msgstr "à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦ªà§\8dরদরà§\8dশন à¦\93 à¦¸à¦®à§\8dপাদনা"
+#: ../src/empathy-import-dialog.ui.h:1
+msgid "Import Accounts"
+msgstr "à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦\87মà§\8dপà§\8bরà§\8dà¦\9f à¦\95রà§\81ন"
 
-#: ../src/empathy-main-window.c:836
-msgid "Contact"
-msgstr "পরিচিত ব্যক্তি"
-
-#: ../src/empathy-main-window.c:1038
+#: ../src/empathy-main-window.c:395
 msgid "_Edit account"
 msgstr "অ্যাকাউন্ট সম্পাদনা (_E)"
 
-#: ../src/empathy-main-window.c:1121
+#: ../src/empathy-main-window.c:498
 msgid "No error specified"
 msgstr "ত্রুটি নির্ধারিত হয়নি"
 
-#: ../src/empathy-main-window.c:1124
+#: ../src/empathy-main-window.c:501
 msgid "Network error"
 msgstr "নেটওয়ার্ক সংক্রান্ত ত্রুটি"
 
-#: ../src/empathy-main-window.c:1127
+#: ../src/empathy-main-window.c:504
 msgid "Authentication failed"
 msgstr "অনুমোদন ব্যর্থ"
 
-#: ../src/empathy-main-window.c:1130
+#: ../src/empathy-main-window.c:507
 msgid "Encryption error"
 msgstr "এনক্রিপশন সংক্রান্ত ত্রুটি"
 
-#: ../src/empathy-main-window.c:1133
+#: ../src/empathy-main-window.c:510
 msgid "Name in use"
 msgstr "নাম বর্তমানে ব্যবহৃত হচ্ছে"
 
-#: ../src/empathy-main-window.c:1136
+#: ../src/empathy-main-window.c:513
 msgid "Certificate not provided"
 msgstr "সার্টিফিকেট উপলব্ধ করা হয়নি"
 
-#: ../src/empathy-main-window.c:1139
+#: ../src/empathy-main-window.c:516
 msgid "Certificate untrusted"
 msgstr "সার্টিফিকেট বিশ্বস্ত নয়"
 
-#: ../src/empathy-main-window.c:1142
+#: ../src/empathy-main-window.c:519
 msgid "Certificate expired"
 msgstr "সার্টিফিকেটের মেয়াদ উত্তীর্ণ হয়েছে"
 
-#: ../src/empathy-main-window.c:1145
+#: ../src/empathy-main-window.c:522
 msgid "Certificate not activated"
 msgstr "সার্টিফিকেট সক্রিয় করা হয়নি"
 
-#: ../src/empathy-main-window.c:1148
+#: ../src/empathy-main-window.c:525
 msgid "Certificate hostname mismatch"
 msgstr "সার্টিফিকেটের হোস্টনেম-এ গরমিল"
 
-#: ../src/empathy-main-window.c:1151
+#: ../src/empathy-main-window.c:528
 msgid "Certificate fingerprint mismatch"
 msgstr "সার্টিফিকেটের ফিনঙ্গারপ্রিন্ট-এ গরমিল"
 
-#: ../src/empathy-main-window.c:1154
+#: ../src/empathy-main-window.c:531
 msgid "Certificate self-signed"
 msgstr "স্বয়ং স্বাক্ষরিত সার্টিফিকেট"
 
-#: ../src/empathy-main-window.c:1157
+#: ../src/empathy-main-window.c:534
 msgid "Certificate error"
 msgstr "সার্টিফিকেট সংক্রান্ত ত্রুটি"
 
-#: ../src/empathy-main-window.c:1160
+#: ../src/empathy-main-window.c:537
 msgid "Unknown error"
 msgstr "অজানা ত্রুটি"
 
-#: ../src/empathy-main-window.glade.h:1
+#: ../src/empathy-main-window.c:1220
+msgid "Show and edit accounts"
+msgstr "অ্যাকাউন্ট প্রদর্শন ও সম্পাদনা"
+
+#: ../src/empathy-main-window.ui.h:1 ../src/empathy-preferences.ui.h:10
 msgid "Contact List"
 msgstr "পরিচিত ব্যক্তিদের তালিকা"
 
-#: ../src/empathy-main-window.glade.h:2
+#: ../src/empathy-main-window.ui.h:2
+msgid "Contacts on a _Map"
+msgstr ""
+
+#: ../src/empathy-main-window.ui.h:3
 msgid "Context"
 msgstr "প্রসঙ্গ"
 
-#: ../src/empathy-main-window.glade.h:3
+#: ../src/empathy-main-window.ui.h:4
 msgid "Join _Favorites"
-msgstr ""
-
-#: ../src/empathy-main-window.glade.h:4
-msgid "Join _New..."
-msgstr ""
+msgstr "জনপ্রিয়গুলিতে যোগ দিন (_F)"
 
-#: ../src/empathy-main-window.glade.h:5
+#: ../src/empathy-main-window.ui.h:5
 msgid "Manage Favorites"
-msgstr ""
-
-#: ../src/empathy-main-window.glade.h:6
-msgid "Show _Offline Contacts"
-msgstr ""
+msgstr "জনপ্রিয় মান পরিচালনা"
 
-#: ../src/empathy-main-window.glade.h:7
+#: ../src/empathy-main-window.ui.h:6
 msgid "_Accounts"
 msgstr "অ্যাকাউন্ট তালিকা (_A)"
 
-#: ../src/empathy-main-window.glade.h:8
+#: ../src/empathy-main-window.ui.h:7
 msgid "_Add Contact..."
 msgstr "পরিচিত ব্যক্তির তথ্য যোগ করুন... (_A)"
 
-#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
-msgid "_New Conversation..."
+#: ../src/empathy-main-window.ui.h:9
+msgid "_Contents"
+msgstr "সূচী (_C)"
+
+#: ../src/empathy-main-window.ui.h:10
+msgid "_Debug"
 msgstr ""
 
-#: ../src/empathy-main-window.glade.h:14
+#: ../src/empathy-main-window.ui.h:12
+#, fuzzy
+msgid "_File Transfers"
+msgstr "ফাইল বিনিময়"
+
+#: ../src/empathy-main-window.ui.h:13
+msgid "_Help"
+msgstr "সাহায্য (_H)"
+
+#: ../src/empathy-main-window.ui.h:14
+#, fuzzy
+msgid "_Join..."
+msgstr "যোগ দিন (_J)"
+
+#: ../src/empathy-main-window.ui.h:15 ../src/empathy-status-icon.ui.h:2
+msgid "_New Conversation..."
+msgstr "নতুন আলাপন...(_N)"
+
+#: ../src/empathy-main-window.ui.h:16
+#, fuzzy
+msgid "_Offline Contacts"
+msgstr "অফ-লাইন পরিচিতিদের তথ্য প্রকাশ করা হবে (_O)"
+
+#: ../src/empathy-main-window.ui.h:17
 msgid "_Personal Information"
 msgstr "ব্যক্তিগত তথ্য (_P)"
 
-#: ../src/empathy-main-window.glade.h:16
+#: ../src/empathy-main-window.ui.h:19
+#, fuzzy
+msgid "_Previous Conversations"
+msgstr "পূর্ববর্তী আলাপন"
+
+#: ../src/empathy-main-window.ui.h:20
 msgid "_Room"
+msgstr "রুম (_R)"
+
+#: ../src/empathy-new-chatroom-dialog.c:332
+#, fuzzy
+msgid "Chat Room"
+msgstr "চ্যাট রুম"
+
+#: ../src/empathy-new-chatroom-dialog.c:348
+#, fuzzy
+msgid "Members"
+msgstr "থিম"
+
+#: ../src/empathy-new-chatroom-dialog.c:492
+#, c-format
+msgctxt ""
+"Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no "
+"and a number."
+msgid ""
+"<b>%s</b>\n"
+"Invite required: %s\n"
+"Password required: %s\n"
+"Members: %s"
 msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.c:290
-msgid "Chat Rooms"
+#: ../src/empathy-new-chatroom-dialog.c:494
+#: ../src/empathy-new-chatroom-dialog.c:495
+msgid "Yes"
 msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:2
-msgid "Browse:"
-msgstr "ব্রাউজ করুন:"
+#: ../src/empathy-new-chatroom-dialog.c:494
+#: ../src/empathy-new-chatroom-dialog.c:495
+msgid "No"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.c:522
+msgid "Could not start room listing"
+msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:3
-msgid "Enter the room name to join here or click on one or more rooms in the list."
+#: ../src/empathy-new-chatroom-dialog.c:532
+msgid "Could not stop room listing"
 msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:4
+#: ../src/empathy-new-chatroom-dialog.ui.h:2
+msgid "Couldn't load room list"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.ui.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.ui.h:4
 msgid ""
 "Enter the server which hosts the room, or leave it empty if the room is on "
 "the current account's server"
 msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:5
-msgid "Join"
-msgstr "যোগ দিন"
+#: ../src/empathy-new-chatroom-dialog.ui.h:5
+#, fuzzy
+msgid "Join Room"
+msgstr "রুম"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:6
-msgid "Join New"
-msgstr "নতুনে যোগ দিন"
+#: ../src/empathy-new-chatroom-dialog.ui.h:6
+#, fuzzy
+msgid "Room List"
+msgstr "রুম তালিকার লোকেইল: (_R)"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:7
-msgid "Re_fresh"
-msgstr "নতà§\81ন à¦\95রà§\87 à¦ªà§\8dরদরà§\8dশন (_f)"
+#: ../src/empathy-new-chatroom-dialog.ui.h:8
+msgid "_Room:"
+msgstr "রà§\81ম: (_R)"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:8
-msgid "This list represents all chat rooms hosted on the server you have entered."
-msgstr ""
+#: ../src/empathy-preferences.c:159
+msgid "Message received"
+msgstr "প্রাপ্ত বার্তা"
 
-#: ../src/empathy-preferences.c:264
-msgid "Language"
-msgstr "ভাষা"
+#: ../src/empathy-preferences.c:160
+msgid "Message sent"
+msgstr "বারà§\8dতা à¦ªà¦¾à¦ à¦¾à¦¨à§\8b à¦¹à§\9fà§\87à¦\9bà§\87"
 
-#: ../src/empathy-preferences.glade.h:1
-msgid "<b>Appearance</b>"
-msgstr "<b>চেহারা ছবি</b>"
+#: ../src/empathy-preferences.c:161
+msgid "New conversation"
+msgstr "নতুন আলাপন"
 
-#. To translators: Audio notifications preferences
-#: ../src/empathy-preferences.glade.h:3
-msgid "<b>Audio</b>"
-msgstr "<b>অডিও</b>"
+#: ../src/empathy-preferences.c:162
+msgid "Contact goes online"
+msgstr "পরিচিতি অন-লাইন এসেছেন"
 
-#: ../src/empathy-preferences.glade.h:4
-msgid "<b>Behaviour</b>"
-msgstr "<b>আচরণ</b>"
+#: ../src/empathy-preferences.c:163
+msgid "Contact goes offline"
+msgstr "পরিচিতি অফ-লাইন চলে গেছেন"
 
-#: ../src/empathy-preferences.glade.h:5
-msgid "<b>Contact List</b>"
-msgstr "<b>পরিচিতদের তালিকা</b>"
+#: ../src/empathy-preferences.c:164
+msgid "Account connected"
+msgstr "অ্যাকাউন্ট সংযুক্ত করা হয়েছে"
 
-#: ../src/empathy-preferences.glade.h:6
-msgid "<b>Enable spell checking for languages:</b>"
-msgstr "<b>চিহ্নিত ভাষাগুলির জন্য বানান পরীক্ষণ সক্রিয় করা হবে:</b>"
+#: ../src/empathy-preferences.c:165
+msgid "Account disconnected"
+msgstr "অ্যাকাউন্টের সাথে সংযোগ বিচ্ছিন্ন করা হয়েছে"
+
+#: ../src/empathy-preferences.c:432
+msgid "Language"
+msgstr "ভাষা"
 
-#. To translators: Visual notifications preferences, like notify bubbles, etc.
-#: ../src/empathy-preferences.glade.h:8
-msgid "<b>Visual</b>"
+#: ../src/empathy-preferences.ui.h:1
+msgid "Adium theme to use:"
 msgstr ""
 
-#: ../src/empathy-preferences.glade.h:9
-msgid ""
-"<small>The list of languages reflects only the languages for which you have "
-"a dictionary installed.</small>"
+#: ../src/empathy-preferences.ui.h:2
+msgid "Allow _GPS usage"
 msgstr ""
 
-#: ../src/empathy-preferences.glade.h:10
+#: ../src/empathy-preferences.ui.h:3
+msgid "Allow _cellphone usage"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:4
+msgid "Allow _network usage"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:5
+#, fuzzy
+msgid "Appearance"
+msgstr "<b>চেহারা ছবি</b>"
+
+#: ../src/empathy-preferences.ui.h:6
 msgid "Automatically _connect on startup "
 msgstr "প্রারম্ভকালে স্বয়ংক্রিয়রূপে সংযোগ স্থাপন করা হবে (_c)"
 
-#: ../src/empathy-preferences.glade.h:11
+#: ../src/empathy-preferences.ui.h:7
 msgid "Avatars are user chosen images shown in the contact list"
 msgstr ""
 
-#: ../src/empathy-preferences.glade.h:12
+#: ../src/empathy-preferences.ui.h:8
+#, fuzzy
+msgid "Behavior"
+msgstr "<b>আচরণ</b>"
+
+#: ../src/empathy-preferences.ui.h:9
 msgid "Chat Th_eme:"
-msgstr ""
+msgstr "চ্যাটের থিম: (_e)"
+
+#: ../src/empathy-preferences.ui.h:11
+msgid "Disable notifications when _away or busy"
+msgstr "অনুপস্থিত অথবা ব্যস্ত থাকলে সূচনাপ্রদানের ব্যবস্থা নিষ্ক্রিয় করা হবে (_a)"
 
-#: ../src/empathy-preferences.glade.h:13
-msgid "Display notifications when contacts come _online"
-msgstr "পরিà¦\9aিত à¦¬à§\8dযà¦\95à§\8dতিরা à¦\85ন-লাà¦\87ন à¦¯à§\8bà¦\97দান à¦\95রলà§\87 à¦¸à§\82à¦\9aনাবারà§\8dতা à¦ªà§\8dরদরà§\8dশিত à¦¹à¦¬à§\87 (_o)"
+#: ../src/empathy-preferences.ui.h:12
+msgid "Disable sounds when _away or busy"
+msgstr "à¦\85নà§\81পসà§\8dথিত à¦\85থবা à¦¬à§\8dযসà§\8dত à¦¥à¦¾à¦\95লà§\87 à¦¶à¦¬à§\8dদ à¦¨à¦¿à¦·à§\8dà¦\95à§\8dরিà§\9f à¦\95রা à¦¹à¦¬à§\87 (_a)"
 
-#: ../src/empathy-preferences.glade.h:14
-msgid "Enable sounds when _away"
-msgstr "অনুপস্থিত হলে শব্দ সক্রিয় করা হবে (_a)"
+#: ../src/empathy-preferences.ui.h:13
+msgid "Enable notifications when the _chat is not focused"
+msgstr ""
 
-#: ../src/empathy-preferences.glade.h:15
-msgid "Enable sounds when _busy"
-msgstr "ব্যস্ত অবস্থায় শব্দ সক্রিয় করা হবে (_b)"
+#: ../src/empathy-preferences.ui.h:14
+#, fuzzy
+msgid "Enable spell checking for languages:"
+msgstr "<b>চিহ্নিত ভাষাগুলির জন্য বানান পরীক্ষণ সক্রিয় করা হবে:</b>"
 
-#: ../src/empathy-preferences.glade.h:16
+#: ../src/empathy-preferences.ui.h:15
 msgid "General"
 msgstr "সাধারণ"
 
-#: ../src/empathy-preferences.glade.h:17
+#: ../src/empathy-preferences.ui.h:16
+msgid "Geoclue Settings"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:17
+#, fuzzy
+msgid "Location"
+msgstr "সূচনাবার্তা"
+
+#: ../src/empathy-preferences.ui.h:18
+msgid "Not a valid adium theme"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:19
 msgid "Notifications"
 msgstr "সূচনাবার্তা"
 
-#: ../src/empathy-preferences.glade.h:18
+#: ../src/empathy-preferences.ui.h:20
+#, fuzzy
+msgid "Play sound for events"
+msgstr "<b>বিভিন্ন ঘটনার জন্য শব্দ বাজানো হবে</b>"
+
+#: ../src/empathy-preferences.ui.h:21
 msgid "Preferences"
 msgstr "পছন্দ"
 
-#: ../src/empathy-preferences.glade.h:19
+#: ../src/empathy-preferences.ui.h:22
+msgid "Privacy"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:23
+msgid ""
+"Reduced location accuracy means that nothing more precise than your city, "
+"state and country will be published.  GPS coordinates will have a random "
+"value added (&#xB1;0.25&#xB0;)."
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:24
 msgid "Show _avatars"
 msgstr "অবতারের ছবি প্রদর্শন করা হবে (_a)"
 
-#: ../src/empathy-preferences.glade.h:20
+#: ../src/empathy-preferences.ui.h:25
 msgid "Show _smileys as images"
 msgstr "ছবি রূপে স্মাইলি প্রদর্শন করা হবে (_s)"
 
-#: ../src/empathy-preferences.glade.h:21
+#: ../src/empathy-preferences.ui.h:26
 msgid "Show co_mpact contact list"
-msgstr ""
+msgstr "পরিচিতিদের তালিকা সংকুচন করে প্রদর্শন করা হবে (_m)"
+
+#: ../src/empathy-preferences.ui.h:27
+#, fuzzy
+msgid "Show contact _list in rooms"
+msgstr "পরিচিত ব্যক্তিদের তালিকা প্রদর্শন করা হবে (_S)"
 
-#: ../src/empathy-preferences.glade.h:22
+#: ../src/empathy-preferences.ui.h:28
 msgid "Sort by _name"
 msgstr "নাম অনুযায়ী সুবিন্যস্ত করা হবে (_n)"
 
-#: ../src/empathy-preferences.glade.h:23
+#: ../src/empathy-preferences.ui.h:29
 msgid "Sort by s_tate"
 msgstr "অবস্থা অনুযায়ী সুবিন্যস্ত করা হবে (_t)"
 
-#: ../src/empathy-preferences.glade.h:24
+#: ../src/empathy-preferences.ui.h:30
+msgid "Sounds"
+msgstr "শব্দ"
+
+#: ../src/empathy-preferences.ui.h:31
 msgid "Spell Checking"
 msgstr "বানা পরীক্ষণ"
 
-#: ../src/empathy-preferences.glade.h:25
+#: ../src/empathy-preferences.ui.h:32
+msgid ""
+"The list of languages reflects only the languages for which you have a "
+"dictionary installed."
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:33
 msgid "Themes"
 msgstr "থিম"
 
-#: ../src/empathy-preferences.glade.h:26
+#: ../src/empathy-preferences.ui.h:34
+msgid "_Enable bubble notifications"
+msgstr "বাবল দ্বারা সূচনাপ্রদান সক্রিয় করা হবে (_E)"
+
+#: ../src/empathy-preferences.ui.h:35
+msgid "_Enable sound notifications"
+msgstr "শব্দ দ্বারা সূচনাপ্রদান সক্রিয় করা হবে (_E)"
+
+#: ../src/empathy-preferences.ui.h:36
 msgid "_Open new chats in separate windows"
+msgstr "নতুন চ্যাটগুলি পৃথক উইন্ডোর মধ্যে খোলা হবে (_O)"
+
+#: ../src/empathy-preferences.ui.h:37
+msgid "_Publish location to my contacts"
 msgstr ""
 
-#: ../src/empathy-preferences.glade.h:27
-msgid "_Play sound when messages arrive"
-msgstr "নতুন বার্তা প্রাপ্ত হলে শব্দ বাজানো হবে (_P)"
+#: ../src/empathy-preferences.ui.h:38
+msgid "_Reduce location accuracy"
+msgstr ""
 
-#: ../src/empathy-status-icon.glade.h:1
+#: ../src/empathy-status-icon.ui.h:1
 msgid "Status"
 msgstr "অবস্থা"
 
-#: ../src/empathy-status-icon.glade.h:3
+#: ../src/empathy-status-icon.ui.h:3
 msgid "_Quit"
 msgstr "প্রস্থান (_Q)"
 
-#: ../src/empathy-status-icon.glade.h:4
+#: ../src/empathy-status-icon.ui.h:4
 msgid "_Show Contact List"
 msgstr "পরিচিত ব্যক্তিদের তালিকা প্রদর্শন করা হবে (_S)"
 
+#: ../src/empathy-tube-dispatch.c:375
+#, c-format
+msgid "Unable to start application for service %s: %s"
+msgstr "%s পরিসেবার জন্য অ্যাপ্লিকেশন আরম্ভ করতে ব্যর্থ: %s"
+
+#: ../src/empathy-tube-dispatch.c:446
+#, c-format
+msgid ""
+"An invitation was offered for service %s, but you don't have the needed "
+"application to handle it"
+msgstr ""
+
+#: ../src/empathy-call-window-fullscreen.ui.h:1
+msgid "gtk-leave-fullscreen"
+msgstr ""
+
+#: ../src/empathy-map-view.ui.h:1
+#, fuzzy
+msgid "Contact Map View"
+msgstr "পরিচিত ব্যক্তিদের তালিকা"
+
+#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1075
+msgid "Error"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1069
+#, fuzzy
+msgid "Critical"
+msgstr "ক্রোয়েশিয়ান"
+
+#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1063
+#, fuzzy
+msgid "Warning"
+msgstr "অবশিষ্ট"
+
+#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1057
+#: ../src/empathy-debug-dialog.c:1105
+#, fuzzy
+msgid "Message"
+msgstr "বার্তা:"
+
+#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1051
+msgid "Info"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1045
+msgid "Debug"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:837
+#, fuzzy
+msgid "Save"
+msgstr "সার্ভার"
+
+#: ../src/empathy-debug-dialog.c:940
+msgid "Debug Window"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:1013
+msgid "Pause"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:1025
+msgid "Level "
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:1094
+#, fuzzy
+msgid "Time"
+msgstr "সাধারণ"
+
+#: ../src/empathy-debug-dialog.c:1096
+#, fuzzy
+msgid "Domain"
+msgstr "রোমেনিয়ান"
+
+#: ../src/empathy-debug-dialog.c:1098
+msgid "Category"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:1100
+msgid "Level"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:1132
+msgid ""
+"The selected connection manager does not support the remote debugging "
+"extension."
+msgstr ""
+
+#~ msgid "Forget password and clear the entry."
+#~ msgstr "পাসওয়ার্ড মুছে ফেলা হবে ও এনট্রি পরিশ্রুত করা হবে।"
+
+#~ msgid "<b>Network</b>"
+#~ msgstr "<b>নেটওয়ার্ক</b>"
+
+#~ msgid "<b>Servers</b>"
+#~ msgstr "<b>সার্ভার</b>"
+
+#~ msgid "Edit the selected IRC network"
+#~ msgstr "নির্বাচিত IRC নেটওয়ার্কের বৈশিষ্ট্য পরিবর্তন করুন"
+
+#~ msgid "Remove the selected IRC network"
+#~ msgstr "নির্বাচিত IRC নেটওয়ার্ক মুছে ফেলুন"
+
+#~ msgid "_Check Word Spelling..."
+#~ msgstr "শব্দের বানান পরীক্ষা করুন...(_C)"
+
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>বিষয়:</b>"
+
+#~ msgid "Group Chat"
+#~ msgstr "দলভিক্তিক আলাপন"
+
+#~ msgid "Contact Information"
+#~ msgstr "যোগাযোগ সংক্রান্ত তথ্য"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "আমি আপনাকের আমার পরিচিতি তালিকায় যোগ করতে ইচ্ছুক।"
+
+#~ msgid "Sorry, I don't want you in my contact list anymore."
+#~ msgstr "দুঃখিত, আমার পরিচিতি তালিকায় আপনাকে আমি স্থান দিতে ইচ্ছুক নই।"
+
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>দল</b>"
+
+#~ msgid "Contact information"
+#~ msgstr "যোগাযোগ সংক্রান্ত তথ্য"
+
+#~ msgid "Word"
+#~ msgstr "শব্দ"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "শব্দের প্রস্তাব"
+
+#~ msgid "Spell Checker"
+#~ msgstr "বানান পরীক্ষণ ব্যবস্থা"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "শব্দের প্রস্তাব:"
+
+#~ msgid "<b>New Account</b>"
+#~ msgstr "<b>নতুন অ্যাকাউন্ট</b>"
+
+#~ msgid "I already have an account I want to use"
+#~ msgstr "ব্যবহারযোগ্য আমার একটি অ্যাকাউন্ট বর্তমান উপস্থিত রয়েছে"
+
+#~| msgid ""
+#~| "New message from %s:\n"
+#~| "%s"
+#~ msgid "New message from %s"
+#~ msgstr "%s থেকে প্রাপ্ত নতুন বার্তা"
+
+#~ msgid "C_lear"
+#~ msgstr "মুছে ফেলুন (_l)"
+
+#~ msgid "Chat"
+#~ msgstr "আলাপন"
+
+#~ msgid "Insert _Smiley"
+#~ msgstr "স্মাইলি যোগ করুন (_S)"
+
+#~ msgid "Invitation _message:"
+#~ msgstr "আমন্ত্রণ বার্তা: (_m)"
+
+#~ msgid "Invite"
+#~ msgstr "আমন্ত্রণ করুন"
+
+#~ msgid "Move Tab _Left"
+#~ msgstr "ট্যাব বাঁদিকে সরিয়ে নিন (_L)"
+
+#~ msgid "Move Tab _Right"
+#~ msgstr "ট্যাব ডানদিকে সরিয়ে নিন (_R)"
+
+#~ msgid "Select who would you like to invite:"
+#~ msgstr "আমন্ত্রিতদের তালিকা তৈরি করুন:"
+
+#~ msgid "You have been invited to join a chat conference."
+#~ msgstr "চ্যাট বৈঠকে যোগদানের জন্য আপনাকে আমন্ত্রণ করা হয়েছে।"
+
+#~ msgid "_Contact"
+#~ msgstr "পরিচিত ব্যক্তি (_C)"
+
+#~ msgid "_Conversation"
+#~ msgstr "আলাপন (_C)"
+
+#~ msgid "_Detach Tab"
+#~ msgstr "ট্যাব বিচ্ছিন্ন করুন (_D)"
+
+#~ msgid "_Favorite Chatroom"
+#~ msgstr "জনপ্রিয় চ্যাট-রুম (_F)"
+
+#~ msgid "_Next Tab"
+#~ msgstr "পরবর্তী ট্যাব (_N)"
+
+#~ msgid "_Previous Tab"
+#~ msgstr "পূর্ববর্তী ট্যাব (_P)"
+
+#~ msgid "_Tabs"
+#~ msgstr "ট্যাব (_T)"
+
+#~ msgid "Edit Favorite Room"
+#~ msgstr "জনপ্রিয় রুমের তালিকা সম্পাদনা"
+
+#~ msgid "Join room on start_up"
+#~ msgstr "প্রারম্ভকালে রুমে সংযোগ করা হবে (_u)"
+
+#~ msgid "N_ame:"
+#~ msgstr "নাম: (_a)"
+
+#~ msgid "S_erver:"
+#~ msgstr "সার্ভার: (_e)"
+
+#~| msgid "unknown"
+#~ msgctxt "file size"
+#~ msgid "Unknown"
+#~ msgstr "অজানা"
+
+#~ msgid "\"%s\" receiving from %s"
+#~ msgstr "\"%s\" প্রাপ্ত করা হচ্ছে, %s থেকে"
+
+#~ msgid "\"%s\" sending to %s"
+#~ msgstr "\"%s\" পাঠানো হচ্ছে, %s-কে"
+
+#~ msgid "File transfer canceled: %s"
+#~ msgstr "ফাইল বিনিময় বাতিল করা হয়েছে: %s"
+
+#~| msgid "unknown"
+#~ msgctxt "remaining time"
+#~ msgid "Unknown"
+#~ msgstr "অজানা"
+
+#~ msgid "Cannot save file to this location"
+#~ msgstr "এই স্থানে ফাইল সংরক্ষণ করা সম্ভব নয়"
+
+#~ msgid "Save file as..."
+#~ msgstr "নতুন রূপে ফাইল সংরক্ষণ করুন..."
+
+#~| msgid "unknown"
+#~ msgid "unknown size"
+#~ msgstr "অজানা মাপ"
+
+#~| msgid "I would like to add you to my contact list."
+#~ msgid "%s would like to send you a file"
+#~ msgstr "%s আপনাকে একটি ফাইল সংরক্ষণ করতে ইচ্ছুক"
+
+#~ msgid "Do you want to accept the file \"%s\" (%s)?"
+#~ msgstr "আপনি কি \"%s\" (%s) ফাইলটি গ্রহণ করতে ইচ্ছুক?"
+
+#~| msgid "_Accounts"
+#~ msgid "_Accept"
+#~ msgstr "গ্রহণ করুন (_A)"
+
+#~ msgid "Join _New..."
+#~ msgstr "নতুন একটিতে যোগ দিন...(_N)"
+
+#~ msgid "Browse:"
+#~ msgstr "ব্রাউজ করুন:"
+
+#~ msgid "Join"
+#~ msgstr "যোগ দিন"
+
+#~ msgid "Join New"
+#~ msgstr "নতুনে যোগ দিন"
+
+#~ msgid "Re_fresh"
+#~ msgstr "নতুন করে প্রদর্শন (_f)"
+
+#~ msgid "<b>Contact List</b>"
+#~ msgstr "<b>পরিচিতদের তালিকা</b>"
index b430d5b9e8ca4f3d048ac8eb3d1ed2b22499bccd..33c53b1e4583bbe774ba7ce304821a7e0383fb9e 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -8,8 +8,8 @@ msgstr ""
 "Project-Id-Version: empathy.HEAD\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=empathy&component=general\n"
-"POT-Creation-Date: 2009-06-04 16:15+0000\n"
-"PO-Revision-Date: 2009-06-06 12:46+0200\n"
+"POT-Creation-Date: 2009-06-23 10:10+0000\n"
+"PO-Revision-Date: 2009-06-27 15:03+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"
@@ -135,104 +135,126 @@ msgid "Open new chats in separate windows"
 msgstr "Abrir chats nuevos en ventanas separadas"
 
 #: ../data/empathy.schemas.in.h:26
+msgid "Path of the adium theme to use"
+msgstr "Ruta del tema adium que usar"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Path of the adium theme to use if the theme used for chat is adium."
+msgstr "Ruta al tema adium que usar si el tema usado para el chat es adium."
+
+#: ../data/empathy.schemas.in.h:28
 msgid "Play a sound for incoming messages"
 msgstr "Reproducir un sonido cuando lleguen mensajes"
 
-#: ../data/empathy.schemas.in.h:27
+#: ../data/empathy.schemas.in.h:29
 msgid "Play a sound for new conversations"
 msgstr "Reproducir un sonido para conversaciones nuevas"
 
-#: ../data/empathy.schemas.in.h:28
+#: ../data/empathy.schemas.in.h:30
 msgid "Play a sound for outgoing messages"
 msgstr "Reproducir un sonido al enviar mensajes"
 
-#: ../data/empathy.schemas.in.h:29
+#: ../data/empathy.schemas.in.h:31
 msgid "Play a sound when a contact logs in"
 msgstr "Reproducir un sonido cuando un contacto inicie sesión"
 
-#: ../data/empathy.schemas.in.h:30
+#: ../data/empathy.schemas.in.h:32
 msgid "Play a sound when a contact logs out"
 msgstr "Reproducir un sonido cuando un contacto finalice su sesión"
 
-#: ../data/empathy.schemas.in.h:31
+#: ../data/empathy.schemas.in.h:33
 msgid "Play a sound when we log in"
 msgstr "Reproducir un sonido cuando inicio sesión"
 
-#: ../data/empathy.schemas.in.h:32
+#: ../data/empathy.schemas.in.h:34
 msgid "Play a sound when we log out"
 msgstr "Reproducir un sonido cuando finalizo una sesión"
 
-#: ../data/empathy.schemas.in.h:33
+#: ../data/empathy.schemas.in.h:35
 msgid "Popup notifications if the chat isn't focused"
 msgstr ""
 "Mostrar notificaciones emergentes si la ventana de chat no tiene el foco"
 
-#: ../data/empathy.schemas.in.h:34
+#: ../data/empathy.schemas.in.h:36
+#| msgid "Popup notifications if the chat isn't focused"
+msgid "Popup notifications when a contact sign in"
+msgstr "Mostrar notificaciones emergentes cuando un contacto se conecta."
+
+#: ../data/empathy.schemas.in.h:37
+#| msgid "Popup notifications if the chat isn't focused"
+msgid "Popup notifications when a contact sign out"
+msgstr "Mostrar notificaciones emergentes cuando un contacto se desconecta."
+
+#: ../data/empathy.schemas.in.h:38
 msgid "Salut account is created"
 msgstr "Se creó la cuenta Salut"
 
-#: ../data/empathy.schemas.in.h:35
+#: ../data/empathy.schemas.in.h:39
 msgid "Show avatars"
 msgstr "Mostrar avatares"
 
-#: ../data/empathy.schemas.in.h:36
+#: ../data/empathy.schemas.in.h:40
+msgid "Show contact list in rooms"
+msgstr "Mostrar lista de contactos en salas"
+
+#: ../data/empathy.schemas.in.h:41
 msgid "Show hint about closing the main window"
 msgstr "Mostrar consejo sobre cómo cerrar la ventana principal"
 
-#: ../data/empathy.schemas.in.h:37
+#: ../data/empathy.schemas.in.h:42
 msgid "Show offline contacts"
 msgstr "Mostrar contactos no conectados"
 
-#: ../data/empathy.schemas.in.h:38
+#: ../data/empathy.schemas.in.h:43
 msgid "Spell checking languages"
 msgstr "Idiomas para revisión ortográfica"
 
-#: ../data/empathy.schemas.in.h:39
+#: ../data/empathy.schemas.in.h:44
 msgid "The default folder to save file transfers in."
 msgstr "La carpeta predeterminada donde guardar los archivos transferidos."
 
-#: ../data/empathy.schemas.in.h:40
+#: ../data/empathy.schemas.in.h:45
 msgid "The last directory that an avatar image was chosen from."
 msgstr "Último directorio del que fue elegido un avatar."
 
-#: ../data/empathy.schemas.in.h:41
+#: ../data/empathy.schemas.in.h:46
 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/empathy.schemas.in.h:42
+#: ../data/empathy.schemas.in.h:47
 msgid "Use graphical smileys"
 msgstr "Usar emoticonos gráficos"
 
-#: ../data/empathy.schemas.in.h:43
+#: ../data/empathy.schemas.in.h:48
 msgid "Use notification sounds"
 msgstr "Usar sonidos de notificación"
 
-#: ../data/empathy.schemas.in.h:44
+#: ../data/empathy.schemas.in.h:49
 msgid "Use theme for chat rooms"
 msgstr "Usar tema para salas de chat"
 
-#: ../data/empathy.schemas.in.h:45
+#: ../data/empathy.schemas.in.h:50
 msgid "Whether or not Empathy can publish the user's location to his contacts."
 msgstr ""
 "Indica si Empathy puede publicar la ubicación del usuario a sus contactos."
 
-#: ../data/empathy.schemas.in.h:46
+#: ../data/empathy.schemas.in.h:51
 msgid "Whether or not Empathy can use the GPS to guess the location."
 msgstr "Indica si Empathy puede usar el GPS para deducir la ubicación."
 
-#: ../data/empathy.schemas.in.h:47
+#: ../data/empathy.schemas.in.h:52
 msgid ""
 "Whether or not 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/empathy.schemas.in.h:48
+#: ../data/empathy.schemas.in.h:53
 msgid "Whether or not Empathy can use the network to guess the location."
 msgstr "Indica si Empathy puede usar la red para deducir la ubicación."
 
-#: ../data/empathy.schemas.in.h:49
+#: ../data/empathy.schemas.in.h:54
 msgid ""
 "Whether or not Empathy has asked about importing accounts from other "
 "programs."
@@ -240,7 +262,7 @@ msgstr ""
 "Indica si Empathy ha preguntado acerca de importar cuentas de otros "
 "programas."
 
-#: ../data/empathy.schemas.in.h:50
+#: ../data/empathy.schemas.in.h:55
 msgid ""
 "Whether or not Empathy should automatically log in to your accounts on "
 "startup."
@@ -248,7 +270,7 @@ msgstr ""
 "Indica si Empathy debe iniciar sesión en sus cuentas automáticamente al "
 "inicio."
 
-#: ../data/empathy.schemas.in.h:51
+#: ../data/empathy.schemas.in.h:56
 msgid ""
 "Whether or not Empathy should reduce the location's accuracy for privacy "
 "reasons."
@@ -256,7 +278,7 @@ msgstr ""
 "Indica si Empathy debería reducir la precisión de la ubicación por motivos "
 "de privacidad."
 
-#: ../data/empathy.schemas.in.h:52
+#: ../data/empathy.schemas.in.h:57
 msgid ""
 "Whether or not Empathy should use the avatar of the contact as the chat "
 "window icon."
@@ -264,14 +286,14 @@ msgstr ""
 "Indica si Empathy debería usar el avatar del contacto como el icono de la "
 "ventana de chat."
 
-#: ../data/empathy.schemas.in.h:53
+#: ../data/empathy.schemas.in.h:58
 msgid ""
 "Whether or not 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 "
 "Empathy."
 
-#: ../data/empathy.schemas.in.h:54
+#: ../data/empathy.schemas.in.h:59
 msgid ""
 "Whether or not the network manager should be used to automatically "
 "disconnect/reconnect."
@@ -279,7 +301,7 @@ msgstr ""
 "Indica si se debe usar el gestor de la red para desconectarse/reconectarse "
 "automáticamente."
 
-#: ../data/empathy.schemas.in.h:55
+#: ../data/empathy.schemas.in.h:60
 msgid ""
 "Whether or not to check words typed against the languages you want to check "
 "with."
@@ -287,21 +309,21 @@ msgstr ""
 "Indica si se deben revisar las palabras tecleadas con respecto a los idiomas "
 "con los que quiere comprobarlo."
 
-#: ../data/empathy.schemas.in.h:56
+#: ../data/empathy.schemas.in.h:61
 msgid ""
 "Whether or not 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/empathy.schemas.in.h:57
+#: ../data/empathy.schemas.in.h:62
 msgid ""
 "Whether or not to play a sound to notify for contacts logging in the network."
 msgstr ""
 "Indica si se debe reproducir un sonido para notificar los inicios de sesión "
 "de los contactos en la red."
 
-#: ../data/empathy.schemas.in.h:58
+#: ../data/empathy.schemas.in.h:63
 msgid ""
 "Whether or not to play a sound to notify for contacts logging off the "
 "network."
@@ -309,40 +331,54 @@ msgstr ""
 "Indica si se debe reproducir un sonido para notificar las finalizaciones de "
 "sesión de los contactos en la red."
 
-#: ../data/empathy.schemas.in.h:59
+#: ../data/empathy.schemas.in.h:64
 msgid "Whether or not to play a sound to notify for events."
 msgstr "Indica si se debe reproducir un sonido para notificar eventos."
 
-#: ../data/empathy.schemas.in.h:60
+#: ../data/empathy.schemas.in.h:65
 msgid "Whether or not to play a sound to notify for incoming messages."
 msgstr ""
 "Indica si se debe reproducir un sonido para notificar mensajes entrantes."
 
-#: ../data/empathy.schemas.in.h:61
+#: ../data/empathy.schemas.in.h:66
 msgid "Whether or not to play a sound to notify for new conversations."
 msgstr ""
 "Indica si se debe reproducir un sonido para notificar conversaciones nuevas."
 
-#: ../data/empathy.schemas.in.h:62
+#: ../data/empathy.schemas.in.h:67
 msgid "Whether or not to play a sound to notify for outgoing messages."
 msgstr ""
 "Indica si se debe reproducir un sonido para notificar mensajes salientes."
 
-#: ../data/empathy.schemas.in.h:63
+#: ../data/empathy.schemas.in.h:68
 msgid "Whether or not to play a sound when logging in a network."
 msgstr "Indica si se debe reproducir un sonido al iniciar sesión en una red."
 
-#: ../data/empathy.schemas.in.h:64
+#: ../data/empathy.schemas.in.h:69
 msgid "Whether or not to play a sound when logging off a network."
 msgstr "Indica si se debe reproducir un sonido al finalizar sesión en una red."
 
-#: ../data/empathy.schemas.in.h:65
+#: ../data/empathy.schemas.in.h:70
 msgid "Whether or not to play sound notifications when away or busy."
 msgstr ""
 "Indica si se deben reproducir sonidos de notificaciones cuando se esté "
 "ausente u ocupado."
 
-#: ../data/empathy.schemas.in.h:66
+#: ../data/empathy.schemas.in.h:71
+#| msgid "Whether or not to show popup notifications when away or busy."
+msgid ""
+"Whether or not 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/empathy.schemas.in.h:72
+#| msgid "Whether or not to show popup notifications when away or busy."
+msgid "Whether or not to show a popup notification when a contact goes online."
+msgstr ""
+"Indica si se deben mostrar las notificaciones emergentes cuando se conecta."
+
+#: ../data/empathy.schemas.in.h:73
 msgid ""
 "Whether or not to show a popup notification when receiving a new message "
 "even if the chat is already opened, but not focused."
@@ -350,14 +386,14 @@ 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/empathy.schemas.in.h:67
+#: ../data/empathy.schemas.in.h:74
 msgid ""
 "Whether or not to show a popup notification when receiving a new message."
 msgstr ""
 "Indica si se deben mostrar notificaciones emergentes al recibir un mensaje "
 "nuevo."
 
-#: ../data/empathy.schemas.in.h:68
+#: ../data/empathy.schemas.in.h:75
 msgid ""
 "Whether or not to show avatars for contacts in the contact list and chat "
 "windows."
@@ -365,19 +401,23 @@ msgstr ""
 "Indica si se debe mostrar los avatares para los contactos en la lista de "
 "contactos y ventanas de chat."
 
-#: ../data/empathy.schemas.in.h:69
+#: ../data/empathy.schemas.in.h:76
 msgid "Whether or not 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/empathy.schemas.in.h:70
+#: ../data/empathy.schemas.in.h:77
 msgid "Whether or not to show popup notifications when away or busy."
 msgstr ""
 "Indica si se deben mostrar las notificaciones emergentes cuando se esté "
 "ausente u ocupado."
 
-#: ../data/empathy.schemas.in.h:71
+#: ../data/empathy.schemas.in.h:78
+msgid "Whether or not to show the contact list in chat rooms."
+msgstr "Indica si se debe mostrar la lista de contactos en salas de chat."
+
+#: ../data/empathy.schemas.in.h:79
 msgid ""
 "Whether or not to show the message dialog about closing the main window with "
 "the 'x' button in the title bar."
@@ -385,15 +425,15 @@ 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/empathy.schemas.in.h:72
+#: ../data/empathy.schemas.in.h:80
 msgid "Whether to show the contact list in compact mode or not."
 msgstr "Indica si se debe mostrar la lista de contactos en modo compacto."
 
-#: ../data/empathy.schemas.in.h:73
+#: ../data/empathy.schemas.in.h:81
 msgid "Whether to use the theme for chat rooms or not."
 msgstr "Indica si se debe usar el tema para salas de chat."
 
-#: ../data/empathy.schemas.in.h:74
+#: ../data/empathy.schemas.in.h:82
 msgid ""
 "Which criterium to use when sorting the contact list. Default is to use sort "
 "by the contact's name with the value \"name\". A value of \"state\" will "
@@ -411,35 +451,47 @@ msgstr "El «hash» del archivo recibido y del enviado no coinciden"
 msgid "File transfer not supported by remote contact"
 msgstr "El contacto remoto no soporta la transferencia de archivos"
 
-#: ../libempathy/empathy-tp-contact-list.c:727 ../src/empathy.c:286
+#: ../libempathy/empathy-ft-handler.c:1156
+msgid "The selected file is not a regular file"
+msgstr "El archivo seleccionado no es un archivo regular"
+
+#: ../libempathy/empathy-ft-handler.c:1165
+msgid "The selected file is empty"
+msgstr "El archivo seleccionado está vacío"
+
+#: ../libempathy/empathy-tp-contact-list.c:757 ../src/empathy.c:287
 msgid "People nearby"
 msgstr "Gente cerca"
 
-#: ../libempathy/empathy-tp-file.c:300
+#: ../libempathy/empathy-tp-file.c:279
+msgid "Socket type not supported"
+msgstr "El tipo de socket no está soportado"
+
+#: ../libempathy/empathy-tp-file.c:398
 msgid "No reason was specified"
 msgstr "No se especificó ninguna razón"
 
-#: ../libempathy/empathy-tp-file.c:303
+#: ../libempathy/empathy-tp-file.c:401
 msgid "The change in state was requested"
 msgstr "Se requirió un cambio en el estado"
 
-#: ../libempathy/empathy-tp-file.c:306
+#: ../libempathy/empathy-tp-file.c:404
 msgid "You canceled the file transfer"
 msgstr "Canceló la transferencia del archivo"
 
-#: ../libempathy/empathy-tp-file.c:309
+#: ../libempathy/empathy-tp-file.c:407
 msgid "The other participant canceled the file transfer"
 msgstr "El otro participante canceló la transferencia del archivo"
 
-#: ../libempathy/empathy-tp-file.c:312
+#: ../libempathy/empathy-tp-file.c:410
 msgid "Error while trying to transfer the file"
 msgstr "Error la intentar transferir el archivo"
 
-#: ../libempathy/empathy-tp-file.c:315
+#: ../libempathy/empathy-tp-file.c:413
 msgid "The other participant is unable to transfer the file"
 msgstr "El otro participante no puede transferir el archivo"
 
-#: ../libempathy/empathy-tp-file.c:318
+#: ../libempathy/empathy-tp-file.c:416
 msgid "Unknown reason"
 msgstr "Razón desconocida"
 
@@ -493,12 +545,19 @@ msgstr[1] "hace %d días"
 
 #: ../libempathy/empathy-time.c:157
 #, c-format
+msgid "%d week ago"
+msgid_plural "%d weeks ago"
+msgstr[0] "hace %d semana"
+msgstr[1] "hace %d semanas"
+
+#: ../libempathy/empathy-time.c:162
+#, c-format
 msgid "%d month ago"
 msgid_plural "%d months ago"
 msgstr[0] "hace %d mes"
 msgstr[1] "hace %d meses"
 
-#: ../libempathy/empathy-time.c:162
+#: ../libempathy/empathy-time.c:167
 msgid "in the future"
 msgstr "en el futuro"
 
@@ -521,8 +580,8 @@ msgstr "%s:"
 #: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1
 #: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1
 #: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1
-msgid "<b>Advanced</b>"
-msgstr "<b>Avanzado</b>"
+msgid "Advanced"
+msgstr "Avanzado"
 
 #: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2
 #: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3
@@ -558,7 +617,7 @@ msgid "_Server:"
 msgstr "_Servidor:"
 
 #: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2
-#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2
 #: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2
 msgid "Login I_D:"
 msgstr "_ID de sesión:"
@@ -577,44 +636,40 @@ msgid "New Network"
 msgstr "Red nueva"
 
 #: ../libempathy-gtk/empathy-account-widget-irc.ui.h:1
-msgid "<b>Network</b>"
-msgstr "<b>Red</b>"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2
-msgid "<b>Servers</b>"
-msgstr "<b>Servidores</b>"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3
 msgid "Charset:"
 msgstr "Conjunto de caracteres:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2
 msgid "Network"
 msgstr "Red"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3
 msgid "Network:"
 msgstr "Red:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4
 msgid "Nickname:"
 msgstr "Apodo:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
 msgid "Password:"
 msgstr "Contraseña:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
 msgid "Quit message:"
 msgstr "Mensaje de salida:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
 msgid "Real name:"
 msgstr "Nombre real:"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2
-msgid "<b>Override server settings</b>"
-msgstr "<b>Sobreescribir los ajustes del servidor</b>"
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+msgid "Servers"
+msgstr "Servidores"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3
+msgid "Override server settings"
+msgstr "Sobreescribir los ajustes del servidor"
 
 #: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5
 msgid "Pri_ority:"
@@ -722,108 +777,108 @@ msgstr "Todos los archivos"
 msgid "Click to enlarge"
 msgstr "Pulse para agrandar"
 
-#: ../libempathy-gtk/empathy-chat.c:178
+#: ../libempathy-gtk/empathy-chat.c:186
 msgid "Failed to reconnect this chat"
 msgstr "Falló al reconectar a este chat"
 
-#: ../libempathy-gtk/empathy-chat.c:396
+#: ../libempathy-gtk/empathy-chat.c:404
 msgid "Unsupported command"
 msgstr "Comando no soportado"
 
-#: ../libempathy-gtk/empathy-chat.c:531
+#: ../libempathy-gtk/empathy-chat.c:539
 msgid "offline"
 msgstr "desconectado"
 
-#: ../libempathy-gtk/empathy-chat.c:534
+#: ../libempathy-gtk/empathy-chat.c:542
 msgid "invalid contact"
 msgstr "contacto no válido"
 
-#: ../libempathy-gtk/empathy-chat.c:537
+#: ../libempathy-gtk/empathy-chat.c:545
 msgid "permission denied"
 msgstr "permiso denegado"
 
-#: ../libempathy-gtk/empathy-chat.c:540
+#: ../libempathy-gtk/empathy-chat.c:548
 msgid "too long message"
 msgstr "mensaje demasiado largo"
 
-#: ../libempathy-gtk/empathy-chat.c:543
+#: ../libempathy-gtk/empathy-chat.c:551
 msgid "not implemented"
 msgstr "no implementado"
 
-#: ../libempathy-gtk/empathy-chat.c:546
+#: ../libempathy-gtk/empathy-chat.c:554
 msgid "unknown"
 msgstr "desconocido"
 
-#: ../libempathy-gtk/empathy-chat.c:550
+#: ../libempathy-gtk/empathy-chat.c:558
 #, c-format
 msgid "Error sending message '%s': %s"
 msgstr "Error al enviar el mensaje «%s»: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:580
+#: ../libempathy-gtk/empathy-chat.c:588
 #, c-format
 msgid "Topic set to: %s"
 msgstr "El tema se ha establecido a: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:582
+#: ../libempathy-gtk/empathy-chat.c:590
 msgid "No topic defined"
 msgstr "No se ha definido el tema"
 
-#: ../libempathy-gtk/empathy-chat.c:951
+#: ../libempathy-gtk/empathy-chat.c:959
 msgid "(No Suggestions)"
 msgstr "(Sin sugerencias)"
 
-#: ../libempathy-gtk/empathy-chat.c:1005
+#: ../libempathy-gtk/empathy-chat.c:1013
 msgid "Insert Smiley"
 msgstr "Insertar emoticono"
 
 #. send button
-#: ../libempathy-gtk/empathy-chat.c:1023
-#: ../libempathy-gtk/empathy-ui-utils.c:1453
+#: ../libempathy-gtk/empathy-chat.c:1031
+#: ../libempathy-gtk/empathy-ui-utils.c:1476
 msgid "_Send"
 msgstr "E_nviar"
 
-#: ../libempathy-gtk/empathy-chat.c:1057
+#: ../libempathy-gtk/empathy-chat.c:1065
 msgid "_Spelling Suggestions"
 msgstr "_Sugerencias ortográficas"
 
-#: ../libempathy-gtk/empathy-chat.c:1171
+#: ../libempathy-gtk/empathy-chat.c:1179
 #, c-format
 msgid "%s has joined the room"
 msgstr "%s ha entrado en la sala"
 
-#: ../libempathy-gtk/empathy-chat.c:1174
+#: ../libempathy-gtk/empathy-chat.c:1182
 #, c-format
 msgid "%s has left the room"
 msgstr "%s ha dejado la sala"
 
-#: ../libempathy-gtk/empathy-chat.c:1289 ../src/empathy-call-window.c:1014
+#: ../libempathy-gtk/empathy-chat.c:1313 ../src/empathy-call-window.c:1199
 msgid "Disconnected"
 msgstr "Desconectado"
 
-#: ../libempathy-gtk/empathy-chat.c:1700
+#: ../libempathy-gtk/empathy-chat.c:1742
 msgid "Connected"
 msgstr "Conectado"
 
-#: ../libempathy-gtk/empathy-chat.c:1750
+#: ../libempathy-gtk/empathy-chat.c:1792
 #: ../libempathy-gtk/empathy-log-window.c:501
 msgid "Conversation"
 msgstr "Conversación"
 
-#: ../libempathy-gtk/empathy-chat.ui.h:1
-msgid "<b>Topic:</b>"
-msgstr "<b>Tema:</b>"
+#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:471
+msgid "Topic:"
+msgstr "Tema:"
 
-#: ../libempathy-gtk/empathy-chat-text-view.c:323
+#: ../libempathy-gtk/empathy-chat-text-view.c:316
 msgid "_Copy Link Address"
 msgstr "_Copiar la dirección del enlace"
 
-#: ../libempathy-gtk/empathy-chat-text-view.c:331
+#: ../libempathy-gtk/empathy-chat-text-view.c:323
 msgid "_Open Link"
 msgstr "_Abrir enlace"
 
 #. Translators: timestamp displayed between conversations in
 #. * chat windows (strftime format string)
-#: ../libempathy-gtk/empathy-chat-text-view.c:424
+#: ../libempathy-gtk/empathy-chat-text-view.c:415
 msgid "%A %B %d %Y"
 msgstr "%A %d %B %Y"
 
@@ -1041,52 +1096,53 @@ msgid "%B %e, %Y at %R UTC"
 msgstr "%e de %B de %Y a las %R UTC"
 
 #: ../libempathy-gtk/empathy-contact-widget.ui.h:1
-msgid "<b>Client Information</b>"
-msgstr "<b>Información del cliente</b>"
-
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:2
-msgid "<b>Contact Details</b>"
-msgstr "<b>Detalles del contacto</b>"
-
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:3
-msgid "<b>Contact</b>"
-msgstr "<b>Contacto</b>"
-
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:4
-msgid "<b>Groups</b>"
-msgstr "<b>Grupos</b>"
-
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:5
 msgid "<b>Location</b> at (date)\t"
 msgstr "<b>Ubicación</b> en (fecha)\t"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:2
 #: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1
 #: ../src/empathy-chatrooms-window.ui.h:1
 #: ../src/empathy-new-chatroom-dialog.ui.h:1
 msgid "Account:"
 msgstr "Cuenta:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:7
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:3
 msgid "Alias:"
 msgstr "Apodo:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:8
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:4
 msgid "Birthday:"
 msgstr "Cumpleaños:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:9
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:5
+msgid "Client Information"
+msgstr "Información del cliente"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
 msgid "Client:"
 msgstr "Cliente:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:10
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:7
+#: ../src/empathy-main-window.c:888
+msgid "Contact"
+msgstr "Contacto"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:8
+msgid "Contact Details"
+msgstr "Detalles del contacto"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:9
 msgid "Email:"
 msgstr "Correo-e:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:11
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:10
 msgid "Fullname:"
 msgstr "Nombre completo:"
 
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:11
+msgid "Groups"
+msgstr "Grupos"
+
 #. Identifier to connect to Instant Messaging network
 #: ../libempathy-gtk/empathy-contact-widget.ui.h:13
 msgid "Identifier:"
@@ -1203,12 +1259,12 @@ msgstr "Pulse para hacer este estado uno favorito"
 msgid "Set status"
 msgstr "Establecer estado"
 
-#: ../libempathy-gtk/empathy-presence-chooser.c:778
+#: ../libempathy-gtk/empathy-presence-chooser.c:782
 msgid "Set your presence and current status"
 msgstr "Establecer su presencia y estado actual"
 
 #. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1013
+#: ../libempathy-gtk/empathy-presence-chooser.c:1017
 msgid "Custom messages..."
 msgstr "Mensajes personalizados…"
 
@@ -1236,71 +1292,75 @@ msgstr "gtk-add"
 msgid "gtk-remove"
 msgstr "gtk-remove"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:60
+#: ../libempathy-gtk/empathy-theme-manager.c:66
 msgid "Classic"
 msgstr "Clásico"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:61
+#: ../libempathy-gtk/empathy-theme-manager.c:67
 msgid "Simple"
 msgstr "Simple"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:62
+#: ../libempathy-gtk/empathy-theme-manager.c:68
 msgid "Clean"
 msgstr "Limpio"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:63
+#: ../libempathy-gtk/empathy-theme-manager.c:69
 msgid "Blue"
 msgstr "Azul"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1355
+#: ../libempathy-gtk/empathy-theme-manager.c:71
+msgid "Adium"
+msgstr "Adium"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1378
 msgid "Unable to open URI"
 msgstr "No se pudo abrir el URI"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1445
+#: ../libempathy-gtk/empathy-ui-utils.c:1468
 msgid "Select a file"
 msgstr "Seleccionar un archivo"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1503
+#: ../libempathy-gtk/empathy-ui-utils.c:1526
 msgid "Select a destination"
 msgstr "Seleccionar un destino"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1532
+#: ../libempathy-gtk/empathy-ui-utils.c:1555
 msgid "Received an instant message"
 msgstr "Mensaje instantáneo recibido"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1534
+#: ../libempathy-gtk/empathy-ui-utils.c:1557
 msgid "Sent an instant message"
 msgstr "Enviar un mensaje instantáneo"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1536
+#: ../libempathy-gtk/empathy-ui-utils.c:1559
 msgid "Incoming chat request"
 msgstr "Solicitud de chat entrante"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1538
+#: ../libempathy-gtk/empathy-ui-utils.c:1561
 msgid "Contact connected"
 msgstr "Contacto conectado"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1540
+#: ../libempathy-gtk/empathy-ui-utils.c:1563
 msgid "Contact disconnected"
 msgstr "Contacto desconectado"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1542
+#: ../libempathy-gtk/empathy-ui-utils.c:1565
 msgid "Connected to server"
 msgstr "Conectado con el servidor"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1544
+#: ../libempathy-gtk/empathy-ui-utils.c:1567
 msgid "Disconnected from server"
 msgstr "Desconectado del servidor"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1546
+#: ../libempathy-gtk/empathy-ui-utils.c:1569
 msgid "Incoming voice call"
 msgstr "Llamada de voz entrante"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1548
+#: ../libempathy-gtk/empathy-ui-utils.c:1571
 msgid "Outgoing voice call"
 msgstr "Llamada de voz saliente"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1550
+#: ../libempathy-gtk/empathy-ui-utils.c:1573
 msgid "Voice call ended"
 msgstr "Finalizó la llamada de vz"
 
@@ -1525,23 +1585,23 @@ msgstr "Presencia"
 msgid "Set your own presence"
 msgstr "Establezca su propia presencia"
 
-#: ../src/empathy.c:476
+#: ../src/empathy.c:478
 msgid "Don't connect on startup"
 msgstr "No conectarse automáticamente al inicio"
 
-#: ../src/empathy.c:480
+#: ../src/empathy.c:482
 msgid "Don't show the contact list on startup"
 msgstr "No mostrar la lista de contactos al inicio"
 
-#: ../src/empathy.c:484
+#: ../src/empathy.c:486
 msgid "Show the accounts dialog"
 msgstr "Mostrar el diálogo de las cuentas"
 
-#: ../src/empathy.c:496
+#: ../src/empathy.c:498
 msgid "- Empathy Instant Messenger"
 msgstr "- Mensajería instantánea Empathy"
 
-#: ../src/empathy-about-dialog.c:84
+#: ../src/empathy-about-dialog.c:83
 msgid ""
 "Empathy is free software; you can redistribute it and/or modify it under the "
 "terms of the GNU General Public License as published by the Free Software "
@@ -1553,7 +1613,7 @@ msgstr ""
 "Foundation; ya sea en la versión 2 de la Licencia, o (a su elección) "
 "cualquier versión posterior."
 
-#: ../src/empathy-about-dialog.c:88
+#: ../src/empathy-about-dialog.c:87
 msgid ""
 "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
 "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
@@ -1565,7 +1625,7 @@ msgstr ""
 "PARA UN PROPÓSITO PARTICULAR. Vea la Licencia Pública General de GNU para "
 "más detalles."
 
-#: ../src/empathy-about-dialog.c:92
+#: ../src/empathy-about-dialog.c:91
 msgid ""
 "You should have received a copy of the GNU General Public License along with "
 "Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
@@ -1575,29 +1635,29 @@ msgstr ""
 "con Gossip ; si no, escriba a la Free Software Foundation, Inc., 51 Franklin "
 "Street, Fifth Floor, Boston, MA 02110-130159 EE. UU."
 
-#: ../src/empathy-about-dialog.c:120
+#: ../src/empathy-about-dialog.c:119
 msgid "An Instant Messaging client for GNOME"
 msgstr "Un cliente de mensajería instantánea para GNOME"
 
-#: ../src/empathy-about-dialog.c:126
+#: ../src/empathy-about-dialog.c:125
 msgid "translator-credits"
 msgstr "Jorge González <jorgegonz@svn.gnome.org>, 2007-2009"
 
-#: ../src/empathy-accounts-dialog.c:391
+#: ../src/empathy-accounts-dialog.c:393
 msgid "Enabled"
 msgstr "Activado"
 
-#: ../src/empathy-accounts-dialog.c:401 ../src/empathy-accounts-dialog.ui.h:4
+#: ../src/empathy-accounts-dialog.c:403 ../src/empathy-accounts-dialog.ui.h:1
 msgid "Accounts"
 msgstr "Cuentas"
 
 #. To translator: %s is the protocol name
-#: ../src/empathy-accounts-dialog.c:834
+#: ../src/empathy-accounts-dialog.c:837
 #, c-format
 msgid "New %s account"
 msgstr "Cuenta de %s nueva"
 
-#: ../src/empathy-accounts-dialog.c:944
+#: ../src/empathy-accounts-dialog.c:950
 #, c-format
 msgid ""
 "You are about to remove your %s account!\n"
@@ -1606,7 +1666,7 @@ msgstr ""
 "Va a eliminar su cuenta %s\n"
 "¿Seguro que quiere continuar?"
 
-#: ../src/empathy-accounts-dialog.c:950
+#: ../src/empathy-accounts-dialog.c:956
 msgid ""
 "Any associated conversations and chat rooms will NOT be removed if you "
 "decide to proceed.\n"
@@ -1619,30 +1679,30 @@ msgstr ""
 "\n"
 "Si decidiera volver a añadir la cuenta más tarde, estarán aún disponibles."
 
-#: ../src/empathy-accounts-dialog.ui.h:1
-msgid "<b>New Account</b>"
-msgstr "<b>Nueva cuenta</b>"
-
 #: ../src/empathy-accounts-dialog.ui.h:2
-msgid "<b>No protocol installed</b>"
-msgstr "<b>No hay protocolos instalados</b>"
+msgid "Add Account"
+msgstr "Añadir cuenta"
 
 #: ../src/empathy-accounts-dialog.ui.h:3
-msgid "<b>Settings</b>"
-msgstr "<b>Configuración</b>"
-
-#: ../src/empathy-accounts-dialog.ui.h:5
 msgid "Cr_eate"
 msgstr "Cr_ear"
 
-#: ../src/empathy-accounts-dialog.ui.h:6
-msgid "I already have an account I want to use"
-msgstr "Ya tengo una cuenta que quiero usar"
+#: ../src/empathy-accounts-dialog.ui.h:4
+msgid "Gmail"
+msgstr "Gmail"
 
-#: ../src/empathy-accounts-dialog.ui.h:7
+#: ../src/empathy-accounts-dialog.ui.h:5
 msgid "Import Accounts..."
 msgstr "Importar cuentas…"
 
+#: ../src/empathy-accounts-dialog.ui.h:6
+msgid "No protocol installed"
+msgstr "No hay protocolos instalados"
+
+#: ../src/empathy-accounts-dialog.ui.h:7
+msgid "Settings"
+msgstr "Ajustes"
+
 #: ../src/empathy-accounts-dialog.ui.h:8
 msgid ""
 "To add a new account, you first have to install a backend for each protocol "
@@ -1659,53 +1719,61 @@ msgstr "Tipo:"
 msgid "_Add..."
 msgstr "_Añadir…"
 
-#: ../src/empathy-call-window.c:382
+#: ../src/empathy-accounts-dialog.ui.h:11
+msgid "_Create a new account"
+msgstr "_Crear una cuenta nueva"
+
+#: ../src/empathy-accounts-dialog.ui.h:12
+msgid "_Reuse an existing account"
+msgstr "_Usar una cuenta ya existente"
+
+#: ../src/empathy-call-window.c:63
+msgid "Connecting..."
+msgstr "Conectando…"
+
+#: ../src/empathy-call-window.c:415
 msgid "Contrast"
 msgstr "Contraste"
 
-#: ../src/empathy-call-window.c:385
+#: ../src/empathy-call-window.c:418
 msgid "Brightness"
 msgstr "Brillo"
 
-#: ../src/empathy-call-window.c:388
+#: ../src/empathy-call-window.c:421
 msgid "Gamma"
 msgstr "Gamma"
 
-#: ../src/empathy-call-window.c:492
+#: ../src/empathy-call-window.c:526
 msgid "Volume"
 msgstr "Volumen"
 
-#: ../src/empathy-call-window.c:638
+#: ../src/empathy-call-window.c:728
 msgid "_Sidebar"
 msgstr "Barra _lateral"
 
-#: ../src/empathy-call-window.c:657
+#: ../src/empathy-call-window.c:747
 msgid "Dialpad"
 msgstr "Teclado de llamada"
 
-#: ../src/empathy-call-window.c:663
+#: ../src/empathy-call-window.c:753
 msgid "Audio input"
 msgstr "Entrada de sonido"
 
-#: ../src/empathy-call-window.c:667
+#: ../src/empathy-call-window.c:757
 msgid "Video input"
 msgstr "Entrada de vídeo"
 
-#: ../src/empathy-call-window.c:691
-msgid "Connecting..."
-msgstr "Conectando…"
-
-#: ../src/empathy-call-window.c:730
+#: ../src/empathy-call-window.c:820
 #, c-format
 msgid "Call with %s"
 msgstr "Llamar con %s"
 
-#: ../src/empathy-call-window.c:801
+#: ../src/empathy-call-window.c:889
 msgid "Call"
 msgstr "Llamar"
 
 #. Translators: number of minutes:seconds the caller has been connected
-#: ../src/empathy-call-window.c:1096
+#: ../src/empathy-call-window.c:1308
 #, c-format
 msgid "Connected — %d:%02dm"
 msgstr "Conectado — %d:%02dm"
@@ -1715,43 +1783,38 @@ msgid "Hang up"
 msgstr "Colgar"
 
 #: ../src/empathy-call-window.ui.h:2
+msgid "Redial"
+msgstr "Volver a llamar"
+
+#: ../src/empathy-call-window.ui.h:3
 msgid "Send Audio"
 msgstr "Enviar sonido"
 
-#: ../src/empathy-call-window.ui.h:3
+#: ../src/empathy-call-window.ui.h:4
 msgid "Send video"
 msgstr "Enviar vídeo"
 
-#: ../src/empathy-call-window.ui.h:4
+#: ../src/empathy-call-window.ui.h:5
 msgid "Video preview"
 msgstr "Vista preliminar de vídeo"
 
-#: ../src/empathy-call-window.ui.h:5
+#: ../src/empathy-call-window.ui.h:6
 msgid "_Call"
 msgstr "_Llamar"
 
-#: ../src/empathy-call-window.ui.h:6 ../src/empathy-main-window.ui.h:21
+#: ../src/empathy-call-window.ui.h:7 ../src/empathy-main-window.ui.h:21
 msgid "_View"
 msgstr "_Ver"
 
-#: ../src/empathy-chat-window.c:342
+#: ../src/empathy-chat-window.c:343
 #, c-format
 msgid "Conversations (%d)"
 msgstr "Conversaciones (%d)"
 
-#: ../src/empathy-chat-window.c:449
-msgid "Topic:"
-msgstr "Tema:"
-
-#: ../src/empathy-chat-window.c:454
+#: ../src/empathy-chat-window.c:475
 msgid "Typing a message."
 msgstr "Tecleando un mensaje."
 
-#: ../src/empathy-chat-window.c:917 ../src/empathy-event-manager.c:429
-#, c-format
-msgid "New message from %s"
-msgstr "Nuevo mensaje de %s"
-
 #: ../src/empathy-chatrooms-window.c:258
 msgid "Name"
 msgstr "Nombre"
@@ -1768,75 +1831,75 @@ msgstr "Autoconectar"
 msgid "Manage Favorite Rooms"
 msgstr "Gestionar salas favoritas"
 
-#: ../src/empathy-event-manager.c:377
+#: ../src/empathy-event-manager.c:395
 msgid "Incoming call"
 msgstr "Llamada entrante"
 
-#: ../src/empathy-event-manager.c:380
+#: ../src/empathy-event-manager.c:398
 #, c-format
 msgid "%s is calling you, do you want to answer?"
 msgstr "%s le está llamando, ¿quiere responder?"
 
-#: ../src/empathy-event-manager.c:387
+#: ../src/empathy-event-manager.c:405
 msgid "_Reject"
 msgstr "_Rechazar"
 
-#: ../src/empathy-event-manager.c:393
+#: ../src/empathy-event-manager.c:411
 msgid "_Answer"
 msgstr "Re_spuesta"
 
-#: ../src/empathy-event-manager.c:507
+#: ../src/empathy-event-manager.c:523
 #, c-format
 msgid "Incoming call from %s"
 msgstr "Llamada entrante de %s"
 
-#: ../src/empathy-event-manager.c:547
+#: ../src/empathy-event-manager.c:563
 #, c-format
 msgid "%s is offering you an invitation"
 msgstr "%s le está ofreciendo una invitación"
 
-#: ../src/empathy-event-manager.c:553
+#: ../src/empathy-event-manager.c:569
 msgid "An external application will be started to handle it."
 msgstr "Se iniciará una aplicación externa para manejarla."
 
-#: ../src/empathy-event-manager.c:558
+#: ../src/empathy-event-manager.c:574
 msgid "You don't have the needed external application to handle it."
 msgstr "No tiene la aplicación externa necesaria para manejarla."
 
-#: ../src/empathy-event-manager.c:685
+#: ../src/empathy-event-manager.c:701
 msgid "Room invitation"
 msgstr "Invitación a una sala"
 
-#: ../src/empathy-event-manager.c:688
+#: ../src/empathy-event-manager.c:704
 #, c-format
 msgid "%s is inviting you to join %s"
 msgstr "%s le está invitando a unirse a %s"
 
-#: ../src/empathy-event-manager.c:696
+#: ../src/empathy-event-manager.c:712
 msgid "_Decline"
 msgstr "_Rechazar"
 
-#: ../src/empathy-event-manager.c:701
+#: ../src/empathy-event-manager.c:717
 #: ../src/empathy-new-chatroom-dialog.ui.h:7
 msgid "_Join"
 msgstr "_Unirse"
 
-#: ../src/empathy-event-manager.c:740
+#: ../src/empathy-event-manager.c:756
 #, c-format
 msgid "%s invited you to join %s"
 msgstr "%s le ha invitado a unirse a %s"
 
-#: ../src/empathy-event-manager.c:766
+#: ../src/empathy-event-manager.c:782
 #, c-format
 msgid "Incoming file transfer from %s"
 msgstr "Transferencia de archivo entrante de %s"
 
-#: ../src/empathy-event-manager.c:946
+#: ../src/empathy-event-manager.c:962
 #, c-format
 msgid "Subscription requested by %s"
 msgstr "Petición de suscripción de %s"
 
-#: ../src/empathy-event-manager.c:950
+#: ../src/empathy-event-manager.c:966
 #, c-format
 msgid ""
 "\n"
@@ -1845,6 +1908,18 @@ msgstr ""
 "\n"
 "Mensaje: %s"
 
+#. someone is logging off
+#: ../src/empathy-event-manager.c:1009
+#, c-format
+msgid "%s is now offline."
+msgstr "Ahora %s está desconectado."
+
+#. someone is logging in
+#: ../src/empathy-event-manager.c:1025
+#, c-format
+msgid "%s is now online."
+msgstr "Ahora %s está conectado."
+
 #. Translators: time left, when it is more than one hour
 #: ../src/empathy-ft-manager.c:101
 #, c-format
@@ -1949,7 +2024,7 @@ msgid "Remaining"
 msgstr "Restantes"
 
 #: ../src/empathy-ft-manager.ui.h:1
-msgid "File transfers"
+msgid "File Transfers"
 msgstr "Transferencias de archivos"
 
 #: ../src/empathy-ft-manager.ui.h:2
@@ -2043,15 +2118,11 @@ msgstr "Error del certificado"
 msgid "Unknown error"
 msgstr "Error desconocido"
 
-#: ../src/empathy-main-window.c:888
-msgid "Contact"
-msgstr "Contacto"
-
 #: ../src/empathy-main-window.c:1220
 msgid "Show and edit accounts"
 msgstr "Mostrar y editar cuentas"
 
-#: ../src/empathy-main-window.ui.h:1
+#: ../src/empathy-main-window.ui.h:1 ../src/empathy-preferences.ui.h:10
 msgid "Contact List"
 msgstr "Lista de contactos"
 
@@ -2192,187 +2263,205 @@ msgstr "Lista de salas"
 msgid "_Room:"
 msgstr "_Sala:"
 
-#: ../src/empathy-preferences.c:162
+#: ../src/empathy-preferences.c:161
 msgid "Message received"
 msgstr "Mensaje recibido"
 
-#: ../src/empathy-preferences.c:163
+#: ../src/empathy-preferences.c:162
 msgid "Message sent"
 msgstr "Mensaje enviado"
 
-#: ../src/empathy-preferences.c:164
+#: ../src/empathy-preferences.c:163
 msgid "New conversation"
 msgstr "Conversación nueva"
 
-#: ../src/empathy-preferences.c:165
+#: ../src/empathy-preferences.c:164
 msgid "Contact goes online"
 msgstr "El contacto se conecta"
 
-#: ../src/empathy-preferences.c:166
+#: ../src/empathy-preferences.c:165
 msgid "Contact goes offline"
 msgstr "El contacto se desconecta"
 
-#: ../src/empathy-preferences.c:167
+#: ../src/empathy-preferences.c:166
 msgid "Account connected"
 msgstr "Cuenta conectada"
 
-#: ../src/empathy-preferences.c:168
+#: ../src/empathy-preferences.c:167
 msgid "Account disconnected"
 msgstr "Cuenta desconectada"
 
-#: ../src/empathy-preferences.c:435
+#: ../src/empathy-preferences.c:446
 msgid "Language"
 msgstr "Idioma"
 
 #: ../src/empathy-preferences.ui.h:1
-msgid "<b>Appearance</b>"
-msgstr "<b>Apariencia</b>"
+msgid "Adium theme to use:"
+msgstr "Tema adium que usar:"
 
 #: ../src/empathy-preferences.ui.h:2
-msgid "<b>Behavior</b>"
-msgstr "<b>Comportamiento</b>"
-
-#: ../src/empathy-preferences.ui.h:3
-msgid "<b>Contact List</b>"
-msgstr "<b>Lista de contactos</b>"
-
-#: ../src/empathy-preferences.ui.h:4
-msgid "<b>Enable spell checking for languages:</b>"
-msgstr "<b>Activar la revisión ortográfica para idiomas:</b>"
-
-#: ../src/empathy-preferences.ui.h:5
-msgid "<b>Geoclue Settings</b>"
-msgstr "<b>Configuración de Geoclue</b>"
-
-#: ../src/empathy-preferences.ui.h:6
-msgid "<b>Play sound for events</b>"
-msgstr "<b>Reproducir sonido para eventos</b>"
-
-#: ../src/empathy-preferences.ui.h:7
-msgid "<b>Privacy</b>"
-msgstr "<b>Privacidad</b>"
-
-#: ../src/empathy-preferences.ui.h:8
-msgid ""
-"<small>Reduced location accuracy means that nothing more precise than your "
-"city, state and country will be published.  GPS coordinates will have a "
-"random value added (&#xB1;0.25&#xB0;).</small>"
-msgstr ""
-"<small>Reducir la precisión de la ubicación significa que no se publicará "
-"nada más preciso que su ciudad, estado y país. Las coordenadas GPS tendrán "
-"un valor aleatorio añadido (&#xB1;0.25&#xB0;).</small>"
-
-#: ../src/empathy-preferences.ui.h:9
-msgid ""
-"<small>The list of languages reflects only the languages for which you have "
-"a dictionary installed.</small>"
-msgstr ""
-"<small>La lista de idiomas refleja sólo los idiomas para los cuales tiene un "
-"diccionario instalado.</small>"
-
-#: ../src/empathy-preferences.ui.h:10
 msgid "Allow _GPS usage"
 msgstr "Permitir el usso de _GPS"
 
-#: ../src/empathy-preferences.ui.h:11
+#: ../src/empathy-preferences.ui.h:3
 msgid "Allow _cellphone usage"
 msgstr "Permitir el uso de teléfono _móvil"
 
-#: ../src/empathy-preferences.ui.h:12
+#: ../src/empathy-preferences.ui.h:4
 msgid "Allow _network usage"
 msgstr "Permitir el uso de la _red"
 
-#: ../src/empathy-preferences.ui.h:13
+#: ../src/empathy-preferences.ui.h:5
+msgid "Appearance"
+msgstr "Apariencia"
+
+#: ../src/empathy-preferences.ui.h:6
 msgid "Automatically _connect on startup "
 msgstr "_Conectarse automáticamente al inicio"
 
-#: ../src/empathy-preferences.ui.h:14
+#: ../src/empathy-preferences.ui.h:7
 msgid "Avatars are user chosen images shown in the contact list"
 msgstr ""
 "Los avatares son imágenes elegidas por el usuario que se muestran en la "
 "lista de contactos"
 
-#: ../src/empathy-preferences.ui.h:15
+#: ../src/empathy-preferences.ui.h:8
+msgid "Behavior"
+msgstr "Comportamiento"
+
+#: ../src/empathy-preferences.ui.h:9
 msgid "Chat Th_eme:"
 msgstr "_Tema del chat:"
 
-#: ../src/empathy-preferences.ui.h:16
+#: ../src/empathy-preferences.ui.h:11
 msgid "Disable notifications when _away or busy"
 msgstr "Desactivar notificaciones al _ausentarse o estar ocupado"
 
-#: ../src/empathy-preferences.ui.h:17
+#: ../src/empathy-preferences.ui.h:12
 msgid "Disable sounds when _away or busy"
 msgstr "Desactivar sonidos al _ausentarse o estar ocupado"
 
-#: ../src/empathy-preferences.ui.h:18
+#: ../src/empathy-preferences.ui.h:13
+#| msgid "Enable notifications when the _chat is not focused"
+msgid "Enable notifications when a contact comes online"
+msgstr "Activar notificaciones cuando un contacto se conecta"
+
+#: ../src/empathy-preferences.ui.h:14
+#| msgid "Enable notifications when the _chat is not focused"
+msgid "Enable notifications when a contact goes offline"
+msgstr "Activar notificaciones cuando un contacto se desconecta"
+
+#: ../src/empathy-preferences.ui.h:15
 msgid "Enable notifications when the _chat is not focused"
 msgstr "Activar notificaciones cuando el _chat no tenga el foco"
 
-#: ../src/empathy-preferences.ui.h:19
+#: ../src/empathy-preferences.ui.h:16
+msgid "Enable spell checking for languages:"
+msgstr "Activar la revisión ortográfica para idiomas:"
+
+#: ../src/empathy-preferences.ui.h:17
 msgid "General"
 msgstr "General"
 
-#: ../src/empathy-preferences.ui.h:20
+#: ../src/empathy-preferences.ui.h:18
+msgid "Geoclue Settings"
+msgstr "Configuración de Geoclue"
+
+#: ../src/empathy-preferences.ui.h:19
 msgid "Location"
 msgstr "Ubicación"
 
+#: ../src/empathy-preferences.ui.h:20
+msgid "Not a valid adium theme"
+msgstr "No es un tema adium válido"
+
 #: ../src/empathy-preferences.ui.h:21
 msgid "Notifications"
 msgstr "Notificaciones"
 
 #: ../src/empathy-preferences.ui.h:22
+msgid "Play sound for events"
+msgstr "Reproducir sonido para eventos"
+
+#: ../src/empathy-preferences.ui.h:23
 msgid "Preferences"
 msgstr "Preferencias"
 
-#: ../src/empathy-preferences.ui.h:23
+#: ../src/empathy-preferences.ui.h:24
+msgid "Privacy"
+msgstr "Privacidad"
+
+#: ../src/empathy-preferences.ui.h:25
+msgid ""
+"Reduced location accuracy means that nothing more precise than your city, "
+"state and country will be published.  GPS coordinates will have a random "
+"value added (&#xB1;0.25&#xB0;)."
+msgstr ""
+"Reducir la precisión de la ubicación significa que no se publicará nada más "
+"preciso que su ciudad, estado y país. Las coordenadas GPS tendrán un valor "
+"aleatorio añadido (&#xB1;0.25&#xB0;)."
+
+#: ../src/empathy-preferences.ui.h:26
 msgid "Show _avatars"
 msgstr "Mostrar _avatares"
 
-#: ../src/empathy-preferences.ui.h:24
+#: ../src/empathy-preferences.ui.h:27
 msgid "Show _smileys as images"
 msgstr "Mostrar los _emoticonos como imágenes"
 
-#: ../src/empathy-preferences.ui.h:25
+#: ../src/empathy-preferences.ui.h:28
 msgid "Show co_mpact contact list"
 msgstr "Mostrar lista de contactos co_mpacta"
 
-#: ../src/empathy-preferences.ui.h:26
+#: ../src/empathy-preferences.ui.h:29
+msgid "Show contact _list in rooms"
+msgstr "Mostrar _lista de contactos en salas"
+
+#: ../src/empathy-preferences.ui.h:30
 msgid "Sort by _name"
 msgstr "Ordenar por _nombre"
 
-#: ../src/empathy-preferences.ui.h:27
+#: ../src/empathy-preferences.ui.h:31
 msgid "Sort by s_tate"
 msgstr "Ordenar por es_tado"
 
-#: ../src/empathy-preferences.ui.h:28
+#: ../src/empathy-preferences.ui.h:32
 msgid "Sounds"
 msgstr "Sonidos"
 
-#: ../src/empathy-preferences.ui.h:29
+#: ../src/empathy-preferences.ui.h:33
 msgid "Spell Checking"
 msgstr "Revisión ortográfica"
 
-#: ../src/empathy-preferences.ui.h:30
+#: ../src/empathy-preferences.ui.h:34
+msgid ""
+"The list of languages reflects only the languages for which you have a "
+"dictionary installed."
+msgstr ""
+"La lista de idiomas refleja sólo los idiomas para los cuales tiene un "
+"diccionario instalado."
+
+#: ../src/empathy-preferences.ui.h:35
 msgid "Themes"
 msgstr "Temas"
 
-#: ../src/empathy-preferences.ui.h:31
+#: ../src/empathy-preferences.ui.h:36
 msgid "_Enable bubble notifications"
 msgstr "_Activar notificaciones de burbuja"
 
-#: ../src/empathy-preferences.ui.h:32
+#: ../src/empathy-preferences.ui.h:37
 msgid "_Enable sound notifications"
 msgstr "_Activar notificaciones de sonido"
 
-#: ../src/empathy-preferences.ui.h:33
+#: ../src/empathy-preferences.ui.h:38
 msgid "_Open new chats in separate windows"
 msgstr "_Abrir charlas nuevas en ventanas separadas"
 
-#: ../src/empathy-preferences.ui.h:34
+#: ../src/empathy-preferences.ui.h:39
 msgid "_Publish location to my contacts"
 msgstr "_Publicar mi ubicación a mis contactos"
 
-#: ../src/empathy-preferences.ui.h:35
+#: ../src/empathy-preferences.ui.h:40
 msgid "_Reduce location accuracy"
 msgstr "_Reducir la precisión de la ubicación"
 
@@ -2411,23 +2500,19 @@ msgid "Contact Map View"
 msgstr "Vista del mapa de contactos"
 
 #: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1075
-#| msgid "Error:"
 msgid "Error"
 msgstr "Error"
 
 #: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1069
-#| msgid "Croatian"
 msgid "Critical"
 msgstr "Crítico"
 
 #: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1063
-#| msgid "Remaining"
 msgid "Warning"
 msgstr "Advertencia"
 
 #: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1057
 #: ../src/empathy-debug-dialog.c:1105
-#| msgid "Message:"
 msgid "Message"
 msgstr "Mensaje"
 
@@ -2439,12 +2524,11 @@ msgstr "Información"
 msgid "Debug"
 msgstr "Depurar"
 
-#: ../src/empathy-debug-dialog.c:836
-#| msgid "State:"
+#: ../src/empathy-debug-dialog.c:837
 msgid "Save"
 msgstr "Guardar"
 
-#: ../src/empathy-debug-dialog.c:939
+#: ../src/empathy-debug-dialog.c:940
 msgid "Debug Window"
 msgstr "Depurar ventana"
 
@@ -2457,12 +2541,10 @@ msgid "Level "
 msgstr "Nivel "
 
 #: ../src/empathy-debug-dialog.c:1094
-#| msgid "Simple"
 msgid "Time"
 msgstr "Hora"
 
 #: ../src/empathy-debug-dialog.c:1096
-#| msgid "Romanian"
 msgid "Domain"
 msgstr "Dominio"
 
@@ -2474,7 +2556,7 @@ msgstr "Categoría"
 msgid "Level"
 msgstr "Nivel"
 
-#: ../src/empathy-debug-dialog.c:1133
+#: ../src/empathy-debug-dialog.c:1132
 msgid ""
 "The selected connection manager does not support the remote debugging "
 "extension."
@@ -2482,6 +2564,39 @@ msgstr ""
 "El gestor de conexiones seleccionado no soporta la extensión de depuración "
 "remota."
 
+#~ msgid "<b>Network</b>"
+#~ msgstr "<b>Red</b>"
+
+#~ msgid "<b>Servers</b>"
+#~ msgstr "<b>Servidores</b>"
+
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Tema:</b>"
+
+#~ msgid "<b>Contact</b>"
+#~ msgstr "<b>Contacto</b>"
+
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Grupos</b>"
+
+#~ msgid "<b>Add Account</b>"
+#~ msgstr "<b>Añadir cuenta</b>"
+
+#~ msgid "New message from %s"
+#~ msgstr "Nuevo mensaje de %s"
+
+#~ msgid "File transfers"
+#~ msgstr "Transferencias de archivos"
+
+#~ msgid "<b>Contact List</b>"
+#~ msgstr "<b>Lista de contactos</b>"
+
+#~ msgid "Sélectionner un dossier"
+#~ msgstr "Seleccionar una carpeta"
+
+#~ msgid "I already have an account I want to use"
+#~ msgstr "Ya tengo una cuenta que quiero usar"
+
 #~ msgctxt "file size"
 #~ msgid "Unknown"
 #~ msgstr "Desconocido"
@@ -2558,9 +2673,6 @@ msgstr ""
 #~ msgid "Forget password and clear the entry."
 #~ msgstr "Olvidar la contraseña y limpiar la entrada."
 
-#~ msgid "Create a new IRC network"
-#~ msgstr "Crear una red IRC nueva"
-
 #~ msgid "Edit the selected IRC network"
 #~ msgstr "Editar la red IRC seleccionada"
 
index 8e86f3bd9651e2a3c75cf8627bf7b24ab7422c3f..0e8c6c917e5e7e3e193b65f7b58dbc8e0ffc20a8 100644 (file)
--- a/po/he.po
+++ b/po/he.po
@@ -5,10 +5,9 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: empathy\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=empathy&component=general\n"
-"POT-Creation-Date: 2009-01-11 22:12+0000\n"
-"PO-Revision-Date: 2008-02-23 19:56+0200\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&component=general\n"
+"POT-Creation-Date: 2009-06-11 18:53+0000\n"
+"PO-Revision-Date: 2009-06-11 23:07+0200\n"
 "Last-Translator: Mark Krapivner <mark125@gmail.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -23,29 +22,23 @@ msgstr "‏Empathy - מסרים מיידיים"
 
 #: ../data/empathy.desktop.in.in.h:2
 msgid "Send and receive instant messages"
-msgstr "ש×\9c×\97 ×\95ק×\91×\9c ×\9eסר×\99×\9d ×\9e×\99×\99×\93×\99×\99×\9d"
+msgstr "שלח וקבל מסרים מידיים"
 
 #: ../data/empathy.schemas.in.h:1
 msgid "Always open a separate chat window for new chats."
 msgstr "Always open a separate chat window for new chats."
 
 #: ../data/empathy.schemas.in.h:2
-msgid ""
-"Character to add after nickname when using nick completion (tab) in group "
-"chat."
-msgstr ""
-"Character to add after nickname when using nick completion (tab) in group "
-"chat."
+msgid "Character to add after nickname when using nick completion (tab) in group chat."
+msgstr "Character to add after nickname when using nick completion (tab) in group chat."
 
 #: ../data/empathy.schemas.in.h:3
 msgid "Chat window theme"
 msgstr "Chat window theme"
 
 #: ../data/empathy.schemas.in.h:4
-msgid ""
-"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
-msgstr ""
-"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
 
 #: ../data/empathy.schemas.in.h:5
 msgid "Compact contact list"
@@ -60,1021 +53,1186 @@ msgid "Default directory to select an avatar image from"
 msgstr "Default directory to select an avatar image from"
 
 #: ../data/empathy.schemas.in.h:8
-#| msgid "Enable sound when away"
+msgid "Disable popup notifications when away"
+msgstr "Disable popup notifications when away"
+
+#: ../data/empathy.schemas.in.h:9
 msgid "Disable sounds when away"
 msgstr "Disable sounds when away"
 
-#: ../data/empathy.schemas.in.h:9
+#: ../data/empathy.schemas.in.h:10
+msgid "Empathy can publish the user's location"
+msgstr "Empathy can publish the user's location"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Empathy can use the GPS to guess the location"
+msgstr "Empathy can use the GPS to guess the location"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Empathy can use the cellular network to guess the location"
+msgstr "Empathy can use the cellular network to guess the location"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Empathy can use the network to guess the location"
+msgstr "Empathy can use the network to guess the location"
+
+#: ../data/empathy.schemas.in.h:14
 msgid "Empathy default download folder"
 msgstr "Empathy default download folder"
 
-#: ../data/empathy.schemas.in.h:10
+#: ../data/empathy.schemas.in.h:15
 msgid "Empathy has asked about importing accounts"
 msgstr "Empathy has asked about importing accounts"
 
-#: ../data/empathy.schemas.in.h:11
+#: ../data/empathy.schemas.in.h:16
 msgid "Empathy should auto-connect on startup"
 msgstr "Empathy should auto-connect on startup"
 
-#: ../data/empathy.schemas.in.h:12
+#: ../data/empathy.schemas.in.h:17
+msgid "Empathy should reduce the location's accuracy"
+msgstr "Empathy should reduce the location's accuracy"
+
+#: ../data/empathy.schemas.in.h:18
 msgid "Empathy should use the avatar of the contact as the chat window icon"
 msgstr "Empathy should use the avatar of the contact as the chat window icon"
 
-#: ../data/empathy.schemas.in.h:13
-msgid "Enable popup when contact is available"
-msgstr "Enable popup when contact is available"
+#: ../data/empathy.schemas.in.h:19
+msgid "Enable popup notifications for new messages"
+msgstr "Enable popup notifications for new messages"
 
-#: ../data/empathy.schemas.in.h:14
+#: ../data/empathy.schemas.in.h:20
 msgid "Enable spell checker"
 msgstr "Enable spell checker"
 
-#: ../data/empathy.schemas.in.h:15
+#: ../data/empathy.schemas.in.h:21
 msgid "Hide main window"
 msgstr "Hide main window"
 
-#: ../data/empathy.schemas.in.h:16
+#: ../data/empathy.schemas.in.h:22
 msgid "Hide the main window."
 msgstr "Hide the main window."
 
-#: ../data/empathy.schemas.in.h:17
+#: ../data/empathy.schemas.in.h:23
 msgid "NetworkManager should be used"
 msgstr "NetworkManager should be used"
 
-#: ../data/empathy.schemas.in.h:18
+#: ../data/empathy.schemas.in.h:24
 msgid "Nick completed character"
 msgstr "Nick completed character"
 
-#: ../data/empathy.schemas.in.h:19
+#: ../data/empathy.schemas.in.h:25
 msgid "Open new chats in separate windows"
 msgstr "Open new chats in separate windows"
 
-#: ../data/empathy.schemas.in.h:20
+#: ../data/empathy.schemas.in.h:26
+msgid "Path of the adium theme to use"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
 #, fuzzy
-#| msgid "_Play sound when messages arrive"
+msgid "Path of the adium theme to use if the theme used for chat is adium."
+msgstr "Whether to use the theme for chat rooms or not."
+
+#: ../data/empathy.schemas.in.h:28
 msgid "Play a sound for incoming messages"
-msgstr "_נגן צליל כשמתקבלת הודעה"
+msgstr "Play a sound for incoming messages"
 
-#: ../data/empathy.schemas.in.h:21
+#: ../data/empathy.schemas.in.h:29
 msgid "Play a sound for new conversations"
-msgstr ""
+msgstr "Play a sound for new conversations"
 
-#: ../data/empathy.schemas.in.h:22
-#, fuzzy
-#| msgid "_Play sound when messages arrive"
+#: ../data/empathy.schemas.in.h:30
 msgid "Play a sound for outgoing messages"
-msgstr "_נגן צליל כשמתקבלת הודעה"
+msgstr "Play a sound for outgoing messages"
 
-#: ../data/empathy.schemas.in.h:23
-#, fuzzy
-#| msgid "_Play sound when messages arrive"
+#: ../data/empathy.schemas.in.h:31
 msgid "Play a sound when a contact logs in"
-msgstr "_נגן צליל כשמתקבלת הודעה"
+msgstr "Play a sound when a contact logs in"
 
-#: ../data/empathy.schemas.in.h:24
+#: ../data/empathy.schemas.in.h:32
 msgid "Play a sound when a contact logs out"
-msgstr ""
+msgstr "Play a sound when a contact logs out"
 
-#: ../data/empathy.schemas.in.h:25
-#, fuzzy
-#| msgid "_Play sound when messages arrive"
+#: ../data/empathy.schemas.in.h:33
 msgid "Play a sound when we log in"
-msgstr "_נגן צליל כשמתקבלת הודעה"
+msgstr "Play a sound when we log in"
 
-#: ../data/empathy.schemas.in.h:26
-#, fuzzy
-#| msgid "_Play sound when messages arrive"
+#: ../data/empathy.schemas.in.h:34
 msgid "Play a sound when we log out"
-msgstr "_נגן צליל כשמתקבלת הודעה"
+msgstr "Play a sound when we log out"
 
-#: ../data/empathy.schemas.in.h:27
+#: ../data/empathy.schemas.in.h:35
+msgid "Popup notifications if the chat isn't focused"
+msgstr "Popup notifications if the chat isn't focused"
+
+#: ../data/empathy.schemas.in.h:36
 msgid "Salut account is created"
 msgstr "Salut account is created"
 
-#: ../data/empathy.schemas.in.h:28
+#: ../data/empathy.schemas.in.h:37
 msgid "Show avatars"
 msgstr "Show avatars"
 
-#: ../data/empathy.schemas.in.h:29
+#: ../data/empathy.schemas.in.h:38
 msgid "Show hint about closing the main window"
 msgstr "Show hint about closing the main window"
 
-#: ../data/empathy.schemas.in.h:30
+#: ../data/empathy.schemas.in.h:39
 msgid "Show offline contacts"
 msgstr "Show offline contacts"
 
-#: ../data/empathy.schemas.in.h:31
+#: ../data/empathy.schemas.in.h:40
 msgid "Spell checking languages"
 msgstr "Spell checking languages"
 
-#: ../data/empathy.schemas.in.h:32
+#: ../data/empathy.schemas.in.h:41
 msgid "The default folder to save file transfers in."
 msgstr "The default folder to save file transfers in."
 
-#: ../data/empathy.schemas.in.h:33
+#: ../data/empathy.schemas.in.h:42
 msgid "The last directory that an avatar image was chosen from."
 msgstr "The last directory that an avatar image was chosen from."
 
-#: ../data/empathy.schemas.in.h:34
+#: ../data/empathy.schemas.in.h:43
 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/empathy.schemas.in.h:35
+#: ../data/empathy.schemas.in.h:44
 msgid "Use graphical smileys"
 msgstr "Use graphical smileys"
 
-#: ../data/empathy.schemas.in.h:36
+#: ../data/empathy.schemas.in.h:45
 msgid "Use notification sounds"
 msgstr "Use notification sounds"
 
-#: ../data/empathy.schemas.in.h:37
+#: ../data/empathy.schemas.in.h:46
 msgid "Use theme for chat rooms"
 msgstr "Use theme for chat rooms"
 
-#: ../data/empathy.schemas.in.h:38
-#| msgid ""
-#| "Whether or not Empathy should automatically log in to your accounts on "
-#| "startup."
-msgid ""
-"Whether or not Empathy has asked about importing accounts from other "
-"programs."
-msgstr ""
-"Whether or not Empathy has asked about importing accounts from other "
-"programs."
+#: ../data/empathy.schemas.in.h:47
+msgid "Whether or not Empathy can publish the user's location to his contacts."
+msgstr "Whether or not Empathy can publish the user's location to his contacts."
 
-#: ../data/empathy.schemas.in.h:39
-msgid ""
-"Whether or not Empathy should automatically log in to your accounts on "
-"startup."
-msgstr ""
-"Whether or not Empathy should automatically log in to your accounts on "
-"startup."
+#: ../data/empathy.schemas.in.h:48
+msgid "Whether or not Empathy can use the GPS to guess the location."
+msgstr "Whether or not Empathy can use the GPS to guess the location."
 
-#: ../data/empathy.schemas.in.h:40
-msgid ""
-"Whether or not Empathy should use the avatar of the contact as the chat "
-"window icon."
-msgstr ""
-"Whether or not Empathy should use the avatar of the contact as the chat "
-"window icon."
+#: ../data/empathy.schemas.in.h:49
+msgid "Whether or not Empathy can use the cellular network to guess the location."
+msgstr "Whether or not Empathy can use the cellular network to guess the location."
 
-#: ../data/empathy.schemas.in.h:41
-msgid ""
-"Whether or not the Salut account has been created on the first Empathy run."
-msgstr ""
-"Whether or not the Salut account has been created on the first Empathy run."
+#: ../data/empathy.schemas.in.h:50
+msgid "Whether or not Empathy can use the network to guess the location."
+msgstr "Whether or not Empathy can use the network to guess the location."
 
-#: ../data/empathy.schemas.in.h:42
-msgid ""
-"Whether or not the network manager should be used to automatically "
-"disconnect/reconnect."
-msgstr ""
-"Whether or not the network manager should be used to automatically "
-"disconnect/reconnect."
+#: ../data/empathy.schemas.in.h:51
+msgid "Whether or not Empathy has asked about importing accounts from other programs."
+msgstr "Whether or not Empathy has asked about importing accounts from other programs."
 
-#: ../data/empathy.schemas.in.h:43
-msgid ""
-"Whether or not to check words typed against the languages you want to check "
-"with."
-msgstr ""
-"Whether or not to check words typed against the languages you want to check "
-"with."
+#: ../data/empathy.schemas.in.h:52
+msgid "Whether or not Empathy should automatically log in to your accounts on startup."
+msgstr "Whether or not Empathy should automatically log in to your accounts on startup."
 
-#: ../data/empathy.schemas.in.h:44
-msgid ""
-"Whether or not to convert smileys into graphical images in conversations."
-msgstr ""
-"Whether or not to convert smileys into graphical images in conversations."
+#: ../data/empathy.schemas.in.h:53
+msgid "Whether or not Empathy should reduce the location's accuracy for privacy reasons."
+msgstr "Whether or not Empathy should reduce the location's accuracy for privacy reasons."
 
-#: ../data/empathy.schemas.in.h:45
-#| msgid "Whether or not to play sounds when away."
-msgid "Whether or not to play a sound notifications when away or busy."
-msgstr "Whether or not to play a sound notifications when away or busy."
+#: ../data/empathy.schemas.in.h:54
+msgid "Whether or not Empathy should use the avatar of the contact as the chat window icon."
+msgstr "Whether or not Empathy should use the avatar of the contact as the chat window icon."
 
-#: ../data/empathy.schemas.in.h:46
-#| msgid ""
-#| "Whether or not to show avatars for contacts in the contact list and chat "
-#| "windows."
-msgid ""
-"Whether or not to play a sound to notify for contacts logging in the network."
-msgstr ""
-"Whether or not to play a sound to notify for contacts logging in the network."
+#: ../data/empathy.schemas.in.h:55
+msgid "Whether or not the Salut account has been created on the first Empathy run."
+msgstr "Whether or not the Salut account has been created on the first Empathy run."
 
-#: ../data/empathy.schemas.in.h:47
-#| msgid ""
-#| "Whether or not to show avatars for contacts in the contact list and chat "
-#| "windows."
-msgid ""
-"Whether or not to play a sound to notify for contacts logging off the "
-"network."
-msgstr ""
-"Whether or not to play a sound to notify for contacts logging off the "
-"network."
+#: ../data/empathy.schemas.in.h:56
+msgid "Whether or not the network manager should be used to automatically disconnect/reconnect."
+msgstr "Whether or not the network manager should be used to automatically disconnect/reconnect."
 
-#: ../data/empathy.schemas.in.h:48
-#| msgid "Whether or not to play sounds when busy."
+#: ../data/empathy.schemas.in.h:57
+msgid "Whether or not to check words typed against the languages you want to check with."
+msgstr "Whether or not to check words typed against the languages you want to check with."
+
+#: ../data/empathy.schemas.in.h:58
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr "Whether or not to convert smileys into graphical images in conversations."
+
+#: ../data/empathy.schemas.in.h:59
+msgid "Whether or not to play a sound to notify for contacts logging in the network."
+msgstr "Whether or not to play a sound to notify for contacts logging in the network."
+
+#: ../data/empathy.schemas.in.h:60
+msgid "Whether or not to play a sound to notify for contacts logging off the network."
+msgstr "Whether or not to play a sound to notify for contacts logging off the network."
+
+#: ../data/empathy.schemas.in.h:61
 msgid "Whether or not to play a sound to notify for events."
 msgstr "Whether or not to play a sound to notify for events."
 
-#: ../data/empathy.schemas.in.h:49
-#| msgid "Whether or not to play a sound when messages arrive."
+#: ../data/empathy.schemas.in.h:62
 msgid "Whether or not to play a sound to notify for incoming messages."
 msgstr "Whether or not to play a sound to notify for incoming messages."
 
-#: ../data/empathy.schemas.in.h:50
-#| msgid "Whether or not to play a sound when messages arrive."
+#: ../data/empathy.schemas.in.h:63
 msgid "Whether or not to play a sound to notify for new conversations."
 msgstr "Whether or not to play a sound to notify for new conversations."
 
-#: ../data/empathy.schemas.in.h:51
-#| msgid "Whether or not to play a sound when messages arrive."
+#: ../data/empathy.schemas.in.h:64
 msgid "Whether or not to play a sound to notify for outgoing messages."
 msgstr "Whether or not to play a sound to notify for outgoing messages."
 
-#: ../data/empathy.schemas.in.h:52
-#| msgid "Whether or not to play sounds when away."
+#: ../data/empathy.schemas.in.h:65
 msgid "Whether or not to play a sound when logging in a network."
 msgstr "Whether or not to play a sound when logging in a network."
 
-#: ../data/empathy.schemas.in.h:53
-#| msgid "Whether or not to play sounds when away."
+#: ../data/empathy.schemas.in.h:66
 msgid "Whether or not to play a sound when logging off a network."
 msgstr "Whether or not to play a sound when logging off a network."
 
-#: ../data/empathy.schemas.in.h:54
-msgid "Whether or not to show a popup when a contact becomes available."
-msgstr "Whether or not to show a popup when a contact becomes available."
+#: ../data/empathy.schemas.in.h:67
+msgid "Whether or not to play sound notifications when away or busy."
+msgstr "Whether or not to play sound notifications when away or busy."
 
-#: ../data/empathy.schemas.in.h:55
-msgid ""
-"Whether or not to show avatars for contacts in the contact list and chat "
-"windows."
-msgstr ""
-"Whether or not to show avatars for contacts in the contact list and chat "
-"windows."
+#: ../data/empathy.schemas.in.h:68
+msgid "Whether or not to show a popup notification when receiving a new message even if the chat is already opened, but not focused."
+msgstr "Whether or not to show a popup notification when receiving a new message even if the chat is already opened, but not focused."
 
-#: ../data/empathy.schemas.in.h:56
+#: ../data/empathy.schemas.in.h:69
+msgid "Whether or not to show a popup notification when receiving a new message."
+msgstr "Whether or not to show a popup notification when receiving a new message."
+
+#: ../data/empathy.schemas.in.h:70
+msgid "Whether or not to show avatars for contacts in the contact list and chat windows."
+msgstr "Whether or not to show avatars for contacts in the contact list and chat windows."
+
+#: ../data/empathy.schemas.in.h:71
 msgid "Whether or not to show contacts that are offline in the contact list."
 msgstr "Whether or not to show contacts that are offline in the contact list."
 
-#: ../data/empathy.schemas.in.h:57
-msgid ""
-"Whether or not to show the message dialog about closing the main window with "
-"the 'x' button in the title bar."
-msgstr ""
-"Whether or not to show the message dialog about closing the main window with "
-"the 'x' button in the title bar."
+#: ../data/empathy.schemas.in.h:72
+msgid "Whether or not to show popup notifications when away or busy."
+msgstr "Whether or not to show popup notifications when away or busy."
 
-#: ../data/empathy.schemas.in.h:58
+#: ../data/empathy.schemas.in.h:73
+msgid "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar."
+msgstr "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar."
+
+#: ../data/empathy.schemas.in.h:74
 msgid "Whether to show the contact list in compact mode or not."
 msgstr "Whether to show the contact list in compact mode or not."
 
-#: ../data/empathy.schemas.in.h:59
+#: ../data/empathy.schemas.in.h:75
 msgid "Whether to use the theme for chat rooms or not."
 msgstr "Whether to use the theme for chat rooms or not."
 
-#: ../data/empathy.schemas.in.h:60
-msgid ""
-"Which criterium to use when sorting the contact list. Default is to use sort "
-"by the contact's name with the value \"name\". A value of \"state\" will "
-"sort the contact list by state."
+#: ../data/empathy.schemas.in.h:76
+msgid "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state."
+msgstr "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state."
+
+#: ../libempathy/empathy-ft-handler.c:838
+msgid "The hash of the received file and the sent one do not match"
 msgstr ""
-"Which criterium to use when sorting the contact list. Default is to use sort "
-"by the contact's name with the value \"name\". A value of \"state\" will "
-"sort the contact list by state."
 
-#: ../libempathy/empathy-tp-contact-list.c:731 ../src/empathy.c:267
+#: ../libempathy/empathy-ft-handler.c:1098
+msgid "File transfer not supported by remote contact"
+msgstr ""
+
+#: ../libempathy/empathy-tp-contact-list.c:757
+#: ../src/empathy.c:286
 msgid "People nearby"
 msgstr ""
 
-#: ../libempathy/empathy-utils.c:251
+#: ../libempathy/empathy-tp-file.c:300
+msgid "No reason was specified"
+msgstr "לא צויינה סיבה"
+
+#: ../libempathy/empathy-tp-file.c:303
+msgid "The change in state was requested"
+msgstr ""
+
+#: ../libempathy/empathy-tp-file.c:306
+msgid "You canceled the file transfer"
+msgstr "ביטלת את ההעברה"
+
+#: ../libempathy/empathy-tp-file.c:309
+msgid "The other participant canceled the file transfer"
+msgstr ""
+
+#: ../libempathy/empathy-tp-file.c:312
+msgid "Error while trying to transfer the file"
+msgstr "התרחשה שגיאה בזמן ניסיון העברת הקובץ"
+
+#: ../libempathy/empathy-tp-file.c:315
+msgid "The other participant is unable to transfer the file"
+msgstr ""
+
+#: ../libempathy/empathy-tp-file.c:318
+msgid "Unknown reason"
+msgstr "סיבה לא ידועה"
+
+#: ../libempathy/empathy-utils.c:274
 msgid "Available"
 msgstr "זמין"
 
-#: ../libempathy/empathy-utils.c:253
+#: ../libempathy/empathy-utils.c:276
 msgid "Busy"
 msgstr "עסוק"
 
-#: ../libempathy/empathy-utils.c:256
+#: ../libempathy/empathy-utils.c:279
 msgid "Away"
 msgstr "מרוחק"
 
-#: ../libempathy/empathy-utils.c:258
+#: ../libempathy/empathy-utils.c:281
 msgid "Hidden"
 msgstr "מוסתר"
 
-#: ../libempathy/empathy-utils.c:261
+#: ../libempathy/empathy-utils.c:283
 msgid "Offline"
-msgstr "מנותק"
+msgstr "לא מחובר"
+
+#: ../libempathy/empathy-time.c:137
+#, c-format
+msgid "%d second ago"
+msgid_plural "%d seconds ago"
+msgstr[0] "לפני שניה"
+msgstr[1] "לפני %d שניות"
+
+#: ../libempathy/empathy-time.c:142
+#, c-format
+msgid "%d minute ago"
+msgid_plural "%d minutes ago"
+msgstr[0] "לפני דקה"
+msgstr[1] "לפני %d דקות"
+
+#: ../libempathy/empathy-time.c:147
+#, c-format
+msgid "%d hour ago"
+msgid_plural "%d hours ago"
+msgstr[0] "לפני שעה"
+msgstr[1] "לפני %d שעות"
+
+#: ../libempathy/empathy-time.c:152
+#, c-format
+msgid "%d day ago"
+msgid_plural "%d days ago"
+msgstr[0] "לפני יום"
+msgstr[1] "לפני %d ימים"
+
+#: ../libempathy/empathy-time.c:157
+#, c-format
+msgid "%d month ago"
+msgid_plural "%d months ago"
+msgstr[0] "לפני חודש"
+msgstr[1] "לפני %d חודשים"
+
+#: ../libempathy/empathy-time.c:162
+msgid "in the future"
+msgstr "בעתיד"
 
-#: ../libempathy-gtk/empathy-account-chooser.c:326
+#: ../libempathy-gtk/empathy-account-chooser.c:419
 msgid "All"
 msgstr "הכל"
 
 #: ../libempathy-gtk/empathy-account-widget.c:302
-#: ../libempathy-gtk/empathy-account-widget.c:347
+#: ../libempathy-gtk/empathy-account-widget.c:354
 #, c-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1
 msgid "<b>Advanced</b>"
 msgstr "<b>מתקדם</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
-msgid "Forget password and clear the entry."
-msgstr ""
-
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2
 msgid "Pass_word:"
 msgstr "סיסמ_ה:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3
 msgid "Screen _Name:"
 msgstr "שם _מסך:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7
 msgid "_Port:"
 msgstr "_שער:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
-#: ../src/empathy-new-chatroom-dialog.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
+#: ../src/empathy-new-chatroom-dialog.ui.h:9
 msgid "_Server:"
 msgstr "_שרת:"
 
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2
 msgid "Login I_D:"
 msgstr "מזהה משת_מש:"
 
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2
 msgid "ICQ _UIN:"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5
 msgid "_Charset:"
-msgstr "קידוד _תוים:"
+msgstr "ק×\99×\93×\95×\93 _ת×\95×\95×\99×\9d:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+#: ../libempathy-gtk/empathy-account-widget-irc.c:241
 msgid "New Network"
 msgstr "רשת חדשה"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:1
 msgid "<b>Network</b>"
 msgstr "<b>רשת</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2
 msgid "<b>Servers</b>"
 msgstr "<b>שרתים</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3
 msgid "Charset:"
-msgstr "קידוד תוים:"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
-msgid "Create a new IRC network"
-msgstr "צור רשת IRC חדשה"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
-msgid "Edit the selected IRC network"
-msgstr "ערוך רשת IRC מסומנת"
+msgstr "קידוד תווים:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4
 msgid "Network"
 msgstr "רשת"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
 msgid "Network:"
 msgstr "רשת:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
 msgid "Nickname:"
 msgstr "כינוי:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
 msgid "Password:"
 msgstr "סיסמה:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
 msgid "Quit message:"
 msgstr "הודאת יציאה:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
 msgid "Real name:"
 msgstr "שם אמיתי:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
-msgid "Remove the selected IRC network"
-msgstr "הסר רשת IRC מסומנת"
-
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2
 msgid "<b>Override server settings</b>"
-msgstr "<b>עק×\9fף הגדרת שרת</b>"
+msgstr "<b>עק×\95ף הגדרת שרת</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5
 msgid "Pri_ority:"
 msgstr "עדי_פות:"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6
 msgid "Reso_urce:"
 msgstr "_משאב:"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
 msgid "Use old SS_L"
 msgstr "השתמש ב-SS_L ישן"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8
 msgid "_Encryption required (TLS/SSL)"
 msgstr "_נדרשת הצפנה (TLS/SSL)"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9
 msgid "_Ignore SSL certificate errors"
 msgstr "ה_תעלם משגיאות בתעודות SSL"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2
 msgid "_Email:"
 msgstr "_דוא\"ל:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
-msgid "_First Name: "
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3
+msgid "_First Name:"
 msgstr "שם _פרטי:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4
 msgid "_Jabber ID:"
 msgstr "מזהה Jabber:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5
 msgid "_Last Name:"
 msgstr "שם _משפחה"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
-#: ../src/empathy-chatrooms-window.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6
 msgid "_Nickname:"
 msgstr "_כינוי"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7
 msgid "_Published Name:"
 msgstr ""
 
 #. look up the DNS SRV record at the service's domain for the host name of a STUN server.
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3
 msgid "Discover STUN"
 msgstr "גילוי STUN"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5
 msgid "STUN Server:"
 msgstr "שרת STUN:"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6
 msgid "STUN port:"
 msgstr "שער STUN:"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7
 msgid "_Username:"
 msgstr "ש_ם משתמש:"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3
 msgid "Use _Yahoo Japan"
 msgstr "השתמש ב-_Yahoo יפן"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
-#, fuzzy
-#| msgid "Login I_D:"
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4
 msgid "Yahoo I_D:"
-msgstr "×\9e×\96×\94×\94 ×\9eשת_×\9eש:"
+msgstr "×\97ש_×\91×\95×\9f Yahoo:"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6
 msgid "_Ignore conference and chatroom invitations"
 msgstr "ה_תעלם מהזמנות לשיחות ועידה וחדרי שיחה"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8
 msgid "_Room List locale:"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:461
-#: ../libempathy-gtk/empathy-avatar-chooser.c:536
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+#: ../libempathy-gtk/empathy-avatar-chooser.c:525
 msgid "Couldn't convert image"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:462
+#: ../libempathy-gtk/empathy-avatar-chooser.c:450
 msgid "None of the accepted image formats is supported on your system"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:947
+#: ../libempathy-gtk/empathy-avatar-chooser.c:933
 msgid "Select Your Avatar Image"
 msgstr "בחר את התמונה האישית שלך"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:950
+#: ../libempathy-gtk/empathy-avatar-chooser.c:936
 msgid "No Image"
 msgstr "ללא תמונה"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:1010
+#: ../libempathy-gtk/empathy-avatar-chooser.c:998
 msgid "Images"
 msgstr "תמונות"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:1014
+#: ../libempathy-gtk/empathy-avatar-chooser.c:1002
 msgid "All Files"
 msgstr "כל הקבצים"
 
-#: ../libempathy-gtk/empathy-avatar-image.c:294
+#: ../libempathy-gtk/empathy-avatar-image.c:324
 msgid "Click to enlarge"
 msgstr "לחץ כדי להגדיל"
 
-#: ../libempathy-gtk/empathy-chat.c:507
+#: ../libempathy-gtk/empathy-chat.c:178
+msgid "Failed to reconnect this chat"
+msgstr "נכשל בהתחברות לשיחה"
+
+#: ../libempathy-gtk/empathy-chat.c:396
+msgid "Unsupported command"
+msgstr "פקודה לא נתמכת"
+
+#: ../libempathy-gtk/empathy-chat.c:531
 msgid "offline"
-msgstr "×\9e× ×\95תק"
+msgstr "×\9c×\90 ×\9e×\97×\95×\91ר"
 
-#: ../libempathy-gtk/empathy-chat.c:510
+#: ../libempathy-gtk/empathy-chat.c:534
 msgid "invalid contact"
-msgstr ""
+msgstr "איש קשר לא תקין"
 
-#: ../libempathy-gtk/empathy-chat.c:513
+#: ../libempathy-gtk/empathy-chat.c:537
 msgid "permission denied"
 msgstr "איש קשר לא תקין"
 
-#: ../libempathy-gtk/empathy-chat.c:516
+#: ../libempathy-gtk/empathy-chat.c:540
 msgid "too long message"
 msgstr "הודעה ארוכה מדי"
 
-#: ../libempathy-gtk/empathy-chat.c:519
+#: ../libempathy-gtk/empathy-chat.c:543
 msgid "not implemented"
 msgstr "לא ממומש"
 
-#: ../libempathy-gtk/empathy-chat.c:522
+#: ../libempathy-gtk/empathy-chat.c:546
 msgid "unknown"
 msgstr "לא ידוע"
 
-#: ../libempathy-gtk/empathy-chat.c:526
+#: ../libempathy-gtk/empathy-chat.c:550
 #, c-format
 msgid "Error sending message '%s': %s"
 msgstr "שגיאה בשליחת ההודעה '%s': ‏%s"
 
-#: ../libempathy-gtk/empathy-chat.c:556
+#: ../libempathy-gtk/empathy-chat.c:580
 #, c-format
 msgid "Topic set to: %s"
 msgstr "הנושא נקבע ל: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:558
+#: ../libempathy-gtk/empathy-chat.c:582
 msgid "No topic defined"
 msgstr "לא נקבע נושא"
 
-#: ../libempathy-gtk/empathy-chat.c:973
+#: ../libempathy-gtk/empathy-chat.c:951
+msgid "(No Suggestions)"
+msgstr "(אין הצעות)"
+
+#: ../libempathy-gtk/empathy-chat.c:1005
 msgid "Insert Smiley"
 msgstr "הכנס סמיילי"
 
 #. send button
-#: ../libempathy-gtk/empathy-chat.c:991
-#: ../libempathy-gtk/empathy-ui-utils.c:1526
+#: ../libempathy-gtk/empathy-chat.c:1023
+#: ../libempathy-gtk/empathy-ui-utils.c:1476
 msgid "_Send"
 msgstr "_שלח"
 
-#: ../libempathy-gtk/empathy-chat.c:1025
-msgid "_Check Word Spelling..."
-msgstr "×\91\93×\95ק ×\90×\99×\95ת..."
+#: ../libempathy-gtk/empathy-chat.c:1057
+msgid "_Spelling Suggestions"
+msgstr "×\94צע×\95ת _×\90×\99×\95ת"
 
-#: ../libempathy-gtk/empathy-chat.c:1131
+#: ../libempathy-gtk/empathy-chat.c:1171
 #, c-format
 msgid "%s has joined the room"
 msgstr "‏%s הצטרף לחדר"
 
-#: ../libempathy-gtk/empathy-chat.c:1134
+#: ../libempathy-gtk/empathy-chat.c:1174
 #, c-format
 msgid "%s has left the room"
 msgstr "‏%s עזב את החדר"
 
-#: ../libempathy-gtk/empathy-chat.c:1248 ../src/empathy-call-window.c:426
+#: ../libempathy-gtk/empathy-chat.c:1289
+#: ../src/empathy-call-window.c:1107
 msgid "Disconnected"
 msgstr "מנותק"
 
-#: ../libempathy-gtk/empathy-chat.c:1644
+#: ../libempathy-gtk/empathy-chat.c:1700
 msgid "Connected"
 msgstr "מחובר"
 
-#: ../libempathy-gtk/empathy-chat.c:1694
-#: ../libempathy-gtk/empathy-log-window.c:505
+#: ../libempathy-gtk/empathy-chat.c:1750
+#: ../libempathy-gtk/empathy-log-window.c:501
 msgid "Conversation"
 msgstr "שיחה"
 
-#: ../libempathy-gtk/empathy-chat.glade.h:1
+#: ../libempathy-gtk/empathy-chat.ui.h:1
 msgid "<b>Topic:</b>"
 msgstr "<b>נושא:</b>"
 
-#: ../libempathy-gtk/empathy-chat.glade.h:2
-msgid "Group Chat"
-msgstr ""
-
-#: ../libempathy-gtk/empathy-chat-text-view.c:340
+#: ../libempathy-gtk/empathy-chat-text-view.c:316
 msgid "_Copy Link Address"
 msgstr "העתק _מיקום קישור"
 
-#: ../libempathy-gtk/empathy-chat-text-view.c:348
+#: ../libempathy-gtk/empathy-chat-text-view.c:323
 msgid "_Open Link"
 msgstr "_פתח קישור"
 
-#: ../libempathy-gtk/empathy-chat-text-view.c:439
-msgid "%A %d %B %Y"
+#. Translators: timestamp displayed between conversations in
+#. * chat windows (strftime format string)
+#: ../libempathy-gtk/empathy-chat-text-view.c:415
+msgid "%A %B %d %Y"
 msgstr "%A %d %B %Y"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:180
-msgid "Personal Information"
-msgstr "מידע אישי"
-
-#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+#: ../libempathy-gtk/empathy-contact-dialogs.c:238
 msgid "Edit Contact Information"
 msgstr "ערוך מידע איש קשר"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:186
-msgid "Contact Information"
-msgstr "מידע איש קשר"
-
-#: ../libempathy-gtk/empathy-contact-dialogs.c:266
-msgid "I would like to add you to my contact list."
-msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי."
+#: ../libempathy-gtk/empathy-contact-dialogs.c:289
+msgid "Personal Information"
+msgstr "מידע אישי"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:290
+#: ../libempathy-gtk/empathy-contact-dialogs.c:392
 msgid "New Contact"
 msgstr "איש קשר חדש"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:1
 msgid "Decide _Later"
 msgstr "ה_חלט מאוחר יותר"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:2
 msgid "Subscription Request"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1244
+#: ../libempathy-gtk/empathy-contact-list-view.c:1378
 #, c-format
 msgid "Do you really want to remove the group '%s'?"
 msgstr "להסיר את הקבוצה '%s'?"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1246
+#: ../libempathy-gtk/empathy-contact-list-view.c:1380
 msgid "Removing group"
 msgstr "מסיר קבוצה"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1293
-#: ../libempathy-gtk/empathy-contact-list-view.c:1372
+#: ../libempathy-gtk/empathy-contact-list-view.c:1427
+#: ../libempathy-gtk/empathy-contact-list-view.c:1505
 msgid "_Remove"
 msgstr "_הסר"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1323
+#: ../libempathy-gtk/empathy-contact-list-view.c:1457
 #, c-format
 msgid "Do you really want to remove the contact '%s'?"
 msgstr "להסיר את איש הקשר '%s'?"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1325
+#: ../libempathy-gtk/empathy-contact-list-view.c:1459
 msgid "Removing contact"
 msgstr "מסיר איש קשר"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1330
-msgid "Sorry, I don't want you in my contact list anymore."
-msgstr "מצטער, אני יותר לא רוצה אותך ברשימת אנשי הקשר שלי."
-
-#: ../libempathy-gtk/empathy-contact-menu.c:121
-#: ../src/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/empathy-contact-menu.c:135
+#: ../src/empathy-main-window.ui.h:8
 msgid "_Chat"
 msgstr "_שיחה"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:142
-msgid "_Call"
-msgstr "_שיחה"
+#: ../libempathy-gtk/empathy-contact-menu.c:166
+msgctxt "menu item"
+msgid "_Audio Call"
+msgstr "שיחה _קולית"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:198
+msgctxt "menu item"
+msgid "_Video Call"
+msgstr "שיחת _וידאו"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:181
-#: ../src/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-contact-menu.c:237
 msgid "_View Previous Conversations"
 msgstr "_צפייה בשיחות קודמות"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:203
-#| msgid "Send a file"
+#: ../libempathy-gtk/empathy-contact-menu.c:259
 msgid "Send file"
 msgstr "שלח קובץ"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:231
+#: ../libempathy-gtk/empathy-contact-menu.c:287
 msgid "Infor_mation"
 msgstr "_מידע"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:258
-#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+#: ../libempathy-gtk/empathy-contact-menu.c:314
+#: ../src/empathy-main-window.ui.h:11
 msgid "_Edit"
 msgstr "_עריכה"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:317
-#, fuzzy
-#| msgid "_Invite to Chat Room"
+#: ../libempathy-gtk/empathy-contact-menu.c:372
 msgid "Inviting to this room"
-msgstr "_הזמן לחדר שיחה"
+msgstr "הזמן לחדר שיחה זה"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:350
-#, fuzzy
-#| msgid "_Invite to Chat Room"
+#: ../libempathy-gtk/empathy-contact-menu.c:403
 msgid "_Invite to chatroom"
 msgstr "_הזמן לחדר שיחה"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:358
-#, fuzzy
+#: ../libempathy-gtk/empathy-contact-selector.c:129
+msgid "Select a contact"
+msgstr "בחר איש קשר"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:440
 msgid "Save Avatar"
-msgstr "Show avatars"
+msgstr "שמור תמונה אישית"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:414
+#: ../libempathy-gtk/empathy-contact-widget.c:496
 msgid "Unable to save avatar"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.c:895
+#: ../libempathy-gtk/empathy-contact-widget.c:979
 msgid "Select"
 msgstr "בחר"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:904
-#: ../src/empathy-main-window.c:974
+#: ../libempathy-gtk/empathy-contact-widget.c:988
+#: ../src/empathy-main-window.c:905
 msgid "Group"
 msgstr "קבוצה"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
-msgid "<b>Client Information</b>"
-msgstr "<b>מידע לקוח</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1239
+msgid "Country ISO Code:"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
-msgid "<b>Contact Details</b>"
-msgstr "<b>מידע איש קשר</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1241
+msgid "Country:"
+msgstr "ארץ:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
-msgid "<b>Contact</b>"
-msgstr "<b>איש קשר</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1243
+msgid "State:"
+msgstr "מדינה:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
-msgid "<b>Groups</b>"
-msgstr "<b>קבוצות</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1245
+msgid "City:"
+msgstr "עיר:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
-#: ../src/empathy-chatrooms-window.glade.h:1
-#: ../src/empathy-new-chatroom-dialog.glade.h:1
-msgid "Account:"
-msgstr "חשבון:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1247
+msgid "Area:"
+msgstr "אזור:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
-msgid "Alias:"
-msgstr "כינוי:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1249
+msgid "Postal Code:"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
-msgid "Birthday:"
-msgstr "×\99×\95×\9d ×\94×\95×\9c×\93ת:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1251
+msgid "Street:"
+msgstr "ר×\97×\95×\91:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
-msgid "Client:"
-msgstr "לקוח:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1253
+msgid "Building:"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
-msgid "Contact information"
-msgstr "נת×\95× ×\99 ×\90×\99ש ×§×©×¨"
+#: ../libempathy-gtk/empathy-contact-widget.c:1255
+msgid "Floor:"
+msgstr "ק×\95×\9e×\94:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
-msgid "Email:"
-msgstr "×\93×\95×\90\"×\9c:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1257
+msgid "Room:"
+msgstr "×\97×\93ר:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
-msgid "Fullname:"
-msgstr "ש×\9d ×\9e×\9c×\90:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1259
+msgid "Text:"
+msgstr "×\98קס×\98:"
 
-#. Identifier to connect to Instant Messaging network
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
-msgid "Identifier:"
-msgstr "מזהה:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1261
+msgid "Description:"
+msgstr "תיאור:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
-msgid "Information requested..."
+#: ../libempathy-gtk/empathy-contact-widget.c:1263
+msgid "URI:"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
-msgid "OS:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1265
+msgid "Accuracy Level:"
+msgstr "רמת דיוק:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1267
+msgid "Error:"
+msgstr "שגיאה:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1269
+msgid "Vertical Error (meters):"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
-msgid ""
-"Select the groups you want this contact to appear in.  Note that you can "
-"select more than one group or no groups."
+#: ../libempathy-gtk/empathy-contact-widget.c:1271
+msgid "Horizontal Error (meters):"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
-msgid "Version:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1273
+msgid "Speed:"
+msgstr "מהירות:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1275
+#, fuzzy
+msgid "Bearing:"
 msgstr "גרסה:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
-msgid "Web site:"
-msgstr "אתר אינטרנט:"
+#: ../libempathy-gtk/empathy-contact-widget.c:1277
+msgid "Climb Speed:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1279
+msgid "Last Updated on:"
+msgstr "עדכון אחרון ב:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1281
+msgid "Longitude:"
+msgstr "קו אורך:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1283
+msgid "Latitude:"
+msgstr "קו רוחב:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1285
+msgid "Altitude:"
+msgstr "גובה:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1332
+msgid "<b>Location</b>"
+msgstr "<b>מיקום</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1345
+msgid "<b>Location</b>, "
+msgstr "<b>מיקום</b>, "
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1395
+msgid "%B %e, %Y at %R UTC"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>מידע לקוח</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>מידע איש קשר</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>איש קשר</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>קבוצות</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:5
+msgid "<b>Location</b> at (date)\t"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1
+#: ../src/empathy-chatrooms-window.ui.h:1
+#: ../src/empathy-new-chatroom-dialog.ui.h:1
+msgid "Account:"
+msgstr "חשבון:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:7
+msgid "Alias:"
+msgstr "כינוי:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:8
+msgid "Birthday:"
+msgstr "יום הולדת:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:9
+msgid "Client:"
+msgstr "לקוח:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:10
+msgid "Email:"
+msgstr "דוא\"ל:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:11
+msgid "Fullname:"
+msgstr "שם מלא:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:13
+msgid "Identifier:"
+msgstr "מזהה:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:14
+msgid "Information requested..."
+msgstr ""
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:19
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:15
+msgid "OS:"
+msgstr "מערכת הפעלה:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:16
+msgid "Select the groups you want this contact to appear in.  Note that you can select more than one group or no groups."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:17
+msgid "Version:"
+msgstr "גרסה:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:18
+msgid "Web site:"
+msgstr "אתר אינטרנט:"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:19
 msgid "_Add Group"
 msgstr "_הוסף קבוצה"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:283
 msgid "new server"
 msgstr "שרת חדש"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:510
 msgid "Server"
 msgstr "שרת"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:525
 msgid "Port"
 msgstr "שער"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:538
 msgid "SSL"
 msgstr "SSL"
 
-#: ../libempathy-gtk/empathy-log-window.c:498
-#: ../src/empathy-import-dialog.c:271
+#: ../libempathy-gtk/empathy-log-window.c:494
+#: ../src/empathy-import-dialog.c:281
 msgid "Account"
 msgstr "חשבון"
 
-#: ../libempathy-gtk/empathy-log-window.c:515
+#: ../libempathy-gtk/empathy-log-window.c:511
 msgid "Date"
 msgstr "תאריך"
 
-#. Tab Label
-#: ../libempathy-gtk/empathy-log-window.glade.h:2
+#: ../libempathy-gtk/empathy-log-window.ui.h:1
 msgid "Conversations"
 msgstr "שיחות"
 
-#: ../libempathy-gtk/empathy-log-window.glade.h:3
+#: ../libempathy-gtk/empathy-log-window.ui.h:2
 msgid "Previous Conversations"
 msgstr "שיחות קודמות"
 
-#. Tab Label
-#: ../libempathy-gtk/empathy-log-window.glade.h:5
+#: ../libempathy-gtk/empathy-log-window.ui.h:3
 msgid "Search"
 msgstr "חיפוש"
 
-#. Searching *for* something
-#: ../libempathy-gtk/empathy-log-window.glade.h:7
+#: ../libempathy-gtk/empathy-log-window.ui.h:4
 msgid "_For:"
 msgstr "_ערך:"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
-#, fuzzy
-#| msgid "_Call"
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:2
 msgid "C_all"
-msgstr "_שיחה"
+msgstr "ה_תקשר"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
-#, fuzzy
-#| msgid "Chat"
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:3
 msgid "C_hat"
-msgstr "שיחה"
+msgstr "שי_חה"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:4
 msgid "Contact ID:"
 msgstr ""
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:5
 msgid "New Conversation"
 msgstr "שיחה חדשה"
 
+#. COL_STATE_ICON_NAME
+#. COL_STATE
+#. COL_STATUS_TEXT
+#. COL_DISPLAY_MARKUP
+#. COL_STATUS_CUSTOMISABLE
+#. COL_TYPE
+#: ../libempathy-gtk/empathy-presence-chooser.c:172
+msgid "Custom Message..."
+msgstr "הודעה מותאמת אישית..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:227
+msgid "Edit Custom Messages..."
+msgstr "ערוך הודעה מותאמת אישית..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:326
+msgid "Click to remove this status as a favorite"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:335
+msgid "Click to make this status a favorite"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:369
+msgid "Set status"
+msgstr "קבע מצב"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:778
+msgid "Set your presence and current status"
+msgstr ""
+
 #. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:685
+#: ../libempathy-gtk/empathy-presence-chooser.c:1013
 msgid "Custom messages..."
 msgstr "הודעות מותאמות אישית..."
 
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
-msgid "Custom message"
-msgstr "×\94×\95×\93×¢×\94 ×\9e×\95ת×\90×\9eת ×\90×\99ש×\99ת"
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:362
+msgid "Enter Custom Message"
+msgstr "×\94×\9bנס ×\94×\95×\93×¢×\94 ×\9e×\95ת×\90×\9eת"
 
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
-msgid "Message:"
-msgstr "×\94×\95×\93×¢×\94:"
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:521
+msgid "Edit Custom Messages"
+msgstr "ער×\95×\9a ×\94×\95×\93×¢×\94 ×\9e×\95ת×\90×\9eת"
 
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
-msgid "Save message"
-msgstr "שמור הודעה"
-
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
-msgid "Status:"
-msgstr "מצב:"
-
-#: ../libempathy-gtk/empathy-spell-dialog.c:88
-msgid "Word"
-msgstr "מילה"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1
+msgid "Add _New Preset"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-spell-dialog.c:265
-msgid "Suggestions for the word"
-msgstr "הצעות עבור המילה"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2
+#, fuzzy
+msgid "Saved Presets"
+msgstr "שמור הודעה"
 
-#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
-msgid "Spell Checker"
-msgstr "בודק איות"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3
+msgid "gtk-add"
+msgstr "gtk-add"
 
-#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
-msgid "Suggestions for the word:"
-msgstr "הצעות עבור המילה:"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4
+msgid "gtk-remove"
+msgstr "gtk-remove"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:60
+#: ../libempathy-gtk/empathy-theme-manager.c:66
 msgid "Classic"
 msgstr "קלאסי"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:61
+#: ../libempathy-gtk/empathy-theme-manager.c:67
 msgid "Simple"
 msgstr "פשוט"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:62
+#: ../libempathy-gtk/empathy-theme-manager.c:68
 msgid "Clean"
 msgstr "נקי"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:63
+#: ../libempathy-gtk/empathy-theme-manager.c:69
 msgid "Blue"
 msgstr "כחול"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1373
+#: ../libempathy-gtk/empathy-theme-manager.c:71
+msgid "Adium"
+msgstr "Adium"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1378
 msgid "Unable to open URI"
 msgstr "לא נית לפתוח את הכתובת"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1518
-#| msgid "Send a file"
+#: ../libempathy-gtk/empathy-ui-utils.c:1468
 msgid "Select a file"
 msgstr "בחר קובץ"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1554
-#, fuzzy
-#| msgid "Send and receive instant messages"
+#: ../libempathy-gtk/empathy-ui-utils.c:1526
+msgid "Select a destination"
+msgstr "בחר יעד"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1555
 msgid "Received an instant message"
-msgstr "ש×\9c×\97 ×\95ק×\91×\9c ×\9eסר×\99×\9d ×\9e×\99×\99×\93×\99×\99×\9d"
+msgstr "×\94תק×\91×\9c×\94 ×\94×\95×\93×¢×\94 ×\9e×\99×\93×\99ת."
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1556
-#, fuzzy
-#| msgid "Send and receive instant messages"
+#: ../libempathy-gtk/empathy-ui-utils.c:1557
 msgid "Sent an instant message"
-msgstr "ש×\9c×\97 ×\95ק×\91×\9c ×\9eסר×\99×\9d ×\9e×\99×\99×\93×\99×\99×\9d"
+msgstr "ש×\9c×\97 ×\94×\95×\93×¢×\94 ×\9e×\99×\93×\99ת"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1558
-#, fuzzy
-#| msgid "Incoming call"
+#: ../libempathy-gtk/empathy-ui-utils.c:1559
 msgid "Incoming chat request"
-msgstr "שיחה נכנסת"
+msgstr "×\91קשת ×©×\99×\97×\94 × ×\9bנסת"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1560
-#| msgid "Connected"
+#: ../libempathy-gtk/empathy-ui-utils.c:1561
 msgid "Contact connected"
 msgstr "איש קשר התחבר"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1562
-#| msgid "Disconnected"
+#: ../libempathy-gtk/empathy-ui-utils.c:1563
 msgid "Contact disconnected"
 msgstr "איש קשר התנתק"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1564
-#| msgid "Connected"
+#: ../libempathy-gtk/empathy-ui-utils.c:1565
 msgid "Connected to server"
 msgstr "מחובר לשרת"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1566
-#, fuzzy
-#| msgid "Disconnected"
+#: ../libempathy-gtk/empathy-ui-utils.c:1567
 msgid "Disconnected from server"
-msgstr "מנותק"
+msgstr "מנותק מהשרת"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1568
-#, fuzzy
-#| msgid "Incoming call"
+#: ../libempathy-gtk/empathy-ui-utils.c:1569
 msgid "Incoming voice call"
-msgstr "שיחה נכנסת"
+msgstr "ש×\99×\97×\94 ×§×\95×\9c×\99ת × ×\9bנסת"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1570
+#: ../libempathy-gtk/empathy-ui-utils.c:1571
 msgid "Outgoing voice call"
-msgstr ""
+msgstr "שיחה קולית פעילה"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1572
+#: ../libempathy-gtk/empathy-ui-utils.c:1573
 msgid "Voice call ended"
-msgstr ""
+msgstr "שיחה קולית הסתיימה"
 
 #: ../libempathy-gtk/totem-subtitle-encoding.c:158
 msgid "Current Locale"
@@ -1247,10 +1405,8 @@ msgstr "ויאטנמית"
 #. * vim: sw=2 ts=8 cindent noai bs=2
 #.
 #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
-msgid ""
-"The contact to display in the applet. Empty means no contact is displayed."
-msgstr ""
-"The contact to display in the applet. Empty means no contact is displayed."
+msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgstr "The contact to display in the applet. Empty means no contact is displayed."
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
 msgid "The contact's avatar token. Empty means contact has no avatar."
@@ -1261,7 +1417,7 @@ msgid "Megaphone"
 msgstr "Megaphone"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
-#: ../megaphone/src/megaphone-applet.c:417
+#: ../megaphone/src/megaphone-applet.c:527
 msgid "Talk!"
 msgstr "דבר!"
 
@@ -1275,16 +1431,15 @@ msgid "_Information"
 msgstr "_מידע"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
-#: ../src/empathy-main-window.glade.h:15
+#: ../src/empathy-main-window.ui.h:18
 msgid "_Preferences"
 msgstr "_העדפות"
 
-#: ../megaphone/src/megaphone-applet.c:255
+#: ../megaphone/src/megaphone-applet.c:168
 msgid "Please configure a contact."
-msgstr ""
+msgstr "נא להגדיר איש קשר."
 
-#: ../megaphone/src/megaphone-applet.c:348
-#| msgid "_Add Contact..."
+#: ../megaphone/src/megaphone-applet.c:258
 msgid "Select contact..."
 msgstr "בחר איש קשר..."
 
@@ -1297,55 +1452,33 @@ msgstr "Presence"
 msgid "Set your own presence"
 msgstr ""
 
-#: ../src/empathy.c:400
+#: ../src/empathy.c:476
 msgid "Don't connect on startup"
 msgstr "אל תתחבר בהפעלה"
 
-#: ../src/empathy.c:404
+#: ../src/empathy.c:480
 msgid "Don't show the contact list on startup"
 msgstr "אל תציג את רשימת אנשי הקשר בהפעלה"
 
-#: ../src/empathy.c:408
+#: ../src/empathy.c:484
 msgid "Show the accounts dialog"
 msgstr "הצג חלון החשבונות"
 
-#: ../src/empathy.c:416
+#: ../src/empathy.c:496
 msgid "- Empathy Instant Messenger"
 msgstr "- Empathy Instant Messenger"
 
 #: ../src/empathy-about-dialog.c:84
-msgid ""
-"Empathy is free software; you can redistribute it and/or modify it under the "
-"terms of the GNU General Public License as published by the Free Software "
-"Foundation; either version 2 of the License, or (at your option) any later "
-"version."
-msgstr ""
-"Empathy is free software; you can redistribute it and/or modify it under the "
-"terms of the GNU General Public License as published by the Free Software "
-"Foundation; either version 2 of the License, or (at your option) any later "
-"version."
+msgid "Empathy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version."
+msgstr "Empathy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version."
 
 #: ../src/empathy-about-dialog.c:88
-msgid ""
-"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
-"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
-"FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more "
-"details."
-msgstr ""
-"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
-"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
-"FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more "
-"details."
+msgid "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details."
+msgstr "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details."
 
 #: ../src/empathy-about-dialog.c:92
-msgid ""
-"You should have received a copy of the GNU General Public License along with "
-"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
-"Street, Fifth Floor, Boston, MA 02110-130159 USA"
-msgstr ""
-"You should have received a copy of the GNU General Public License along with "
-"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
-"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgid "You should have received a copy of the GNU General Public License along with Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr "You should have received a copy of the GNU General Public License along with Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
 
 #: ../src/empathy-about-dialog.c:120
 msgid "An Instant Messaging client for GNOME"
@@ -1359,23 +1492,22 @@ msgstr ""
 "פרוייקט תרגום GNOME לעברית:\n"
 "‏http://gnome-il.berlios.de"
 
-#: ../src/empathy-accounts-dialog.c:391
+#: ../src/empathy-accounts-dialog.c:393
 msgid "Enabled"
 msgstr "מופעל"
 
-#: ../src/empathy-accounts-dialog.c:401
-#: ../src/empathy-accounts-dialog.glade.h:4
+#: ../src/empathy-accounts-dialog.c:403
+#: ../src/empathy-accounts-dialog.ui.h:4
 msgid "Accounts"
 msgstr "חשבונות"
 
 #. To translator: %s is the protocol name
-#: ../src/empathy-accounts-dialog.c:827
-#, fuzzy, c-format
-#| msgid "No accounts"
+#: ../src/empathy-accounts-dialog.c:837
+#, c-format
 msgid "New %s account"
-msgstr "×\90×\99×\9f ×\97ש×\91×\95× ×\95ת"
+msgstr "×\97ש×\91×\95×\9f %s ×\97×\93ש"
 
-#: ../src/empathy-accounts-dialog.c:937
+#: ../src/empathy-accounts-dialog.c:950
 #, c-format
 msgid ""
 "You are about to remove your %s account!\n"
@@ -1384,345 +1516,237 @@ msgstr ""
 "חשבון ה-%s שלך עומד להיות מוסר!\n"
 "להסיר את החשבון?"
 
-#: ../src/empathy-accounts-dialog.c:943
+#: ../src/empathy-accounts-dialog.c:956
 msgid ""
-"Any associated conversations and chat rooms will NOT be removed if you "
-"decide to proceed.\n"
+"Any associated conversations and chat rooms will NOT be removed if you decide to proceed.\n"
 "\n"
-"Should you decide to add the account back at a later time, they will still "
-"be available."
+"Should you decide to add the account back at a later time, they will still be available."
 msgstr ""
 
-#: ../src/empathy-accounts-dialog.glade.h:1
-msgid "<b>New Account</b>"
-msgstr "<b>×\97ש×\91×\95×\9f ×\97×\93ש</b>"
+#: ../src/empathy-accounts-dialog.ui.h:1
+msgid "<b>Add Account</b>"
+msgstr "<b>×\94×\95סף ×\97ש×\91×\95×\9f</b>"
 
-#: ../src/empathy-accounts-dialog.glade.h:2
-#, fuzzy
-#| msgid "<b>No Account Selected</b>"
+#: ../src/empathy-accounts-dialog.ui.h:2
 msgid "<b>No protocol installed</b>"
-msgstr "<b>×\9c×\90 × ×\91×\97ר×\95 ×\97ש×\91×\95× ×\95ת</b>"
+msgstr "<b>×\90×\99×\9f ×¤×¨×\95×\98×\95ק×\95×\9c×\99×\9d ×\9e×\95תקנ×\99×\9d</b>"
 
-#: ../src/empathy-accounts-dialog.glade.h:3
+#: ../src/empathy-accounts-dialog.ui.h:3
 msgid "<b>Settings</b>"
 msgstr "<b>הגדרות</b>"
 
-#: ../src/empathy-accounts-dialog.glade.h:5
+#: ../src/empathy-accounts-dialog.ui.h:5
 msgid "Cr_eate"
 msgstr "_צור"
 
-#: ../src/empathy-accounts-dialog.glade.h:6
-msgid "I already have an account I want to use"
-msgstr ""
-
-#: ../src/empathy-accounts-dialog.glade.h:7
-#, fuzzy
-#| msgid "Empathy accounts"
+#: ../src/empathy-accounts-dialog.ui.h:6
 msgid "Import Accounts..."
-msgstr "×\97ש×\91×\95× ×\95ת Empathy"
+msgstr "×\99×\99×\91×\95×\90 ×\97ש×\91×\95× ×\95ת..."
 
-#: ../src/empathy-accounts-dialog.glade.h:8
-msgid ""
-"To add a new account, you first have to install a backend for each protocol "
-"you want to use."
-msgstr ""
-"על מנת להוסיף חשבון חדש עליך להתקין מנוע לכל פרוטוקול שבו ברצונך להשתמש."
+#: ../src/empathy-accounts-dialog.ui.h:7
+msgid "To add a new account, you first have to install a backend for each protocol you want to use."
+msgstr "על מנת להוסיף חשבון חדש עליך להתקין מנוע לכל פרוטוקול שבו ברצונך להשתמש."
 
-#: ../src/empathy-accounts-dialog.glade.h:9
+#: ../src/empathy-accounts-dialog.ui.h:8
 msgid "Type:"
 msgstr "סוג:"
 
-#: ../src/empathy-call-window.c:144
-msgid "Closed"
-msgstr "סגור"
+#: ../src/empathy-accounts-dialog.ui.h:9
+msgid "_Add..."
+msgstr "_הוסף..."
 
-#: ../src/empathy-call-window.c:264
-msgid "End this call?"
-msgstr "לסיים את השיחה?"
+#: ../src/empathy-accounts-dialog.ui.h:10
+msgid "_Create a new account"
+msgstr "_צור חשבון חדש"
 
-#: ../src/empathy-call-window.c:266
-msgid "Closing this window will end the call in progress."
-msgstr ""
+#: ../src/empathy-accounts-dialog.ui.h:11
+msgid "_Reuse an existing account"
+msgstr "_שימוש חוזר בחשבון קיים"
 
-#: ../src/empathy-call-window.c:267
-msgid "_End Call"
-msgstr "_סיים שיחה"
+#: ../src/empathy-call-window.c:63
+msgid "Connecting..."
+msgstr "מתחבר..."
 
-#: ../src/empathy-call-window.c:321
-msgid "Incoming call"
-msgstr "ש×\99×\97×\94 × ×\9bנסת"
+#: ../src/empathy-call-window.c:405
+msgid "Contrast"
+msgstr "× ×\99×\92×\95×\93"
 
-#: ../src/empathy-call-window.c:323
-#, c-format
-msgid "%s is calling you, do you want to answer?"
+#: ../src/empathy-call-window.c:408
+msgid "Brightness"
 msgstr ""
 
-#: ../src/empathy-call-window.c:329
-msgid "_Reject"
-msgstr "_דחה"
-
-#: ../src/empathy-call-window.c:334
-msgid "_Answer"
-msgstr "_השב"
+#: ../src/empathy-call-window.c:411
+msgid "Gamma"
+msgstr ""
 
-#: ../src/empathy-call-window.c:389
-msgid "Empathy Call"
-msgstr "ש×\99×\97ת Empathy"
+#: ../src/empathy-call-window.c:516
+msgid "Volume"
+msgstr "×¢×\95צ×\9e×\94"
 
-#. To translators: Readying is the first state of the call, it is
-#. * preparing the connection and it does not yet ring.
-#: ../src/empathy-call-window.c:392
-msgid "Readying"
-msgstr ""
+#: ../src/empathy-call-window.c:697
+msgid "_Sidebar"
+msgstr "_סרגל צד"
 
-#: ../src/empathy-call-window.c:401
-#, c-format
-msgid "%s - Empathy Call"
+#: ../src/empathy-call-window.c:716
+msgid "Dialpad"
 msgstr ""
 
-#: ../src/empathy-call-window.c:405
-msgid "Ringing"
-msgstr "×\9eצ×\9cצ×\9c"
+#: ../src/empathy-call-window.c:722
+msgid "Audio input"
+msgstr "ק×\9c×\98 ×©×\9e×¢"
 
-#: ../src/empathy-call-window.c:428
-msgid "Connecting"
-msgstr "×\9eת×\97×\91ר"
+#: ../src/empathy-call-window.c:726
+msgid "Video input"
+msgstr "ק×\9c×\98 ×\95×\99×\93×\90×\95"
 
-#: ../src/empathy-call-window.c:546
+#: ../src/empathy-call-window.c:789
 #, c-format
-msgid "Incoming call from %s rejected because there is already a running call."
+msgid "Call with %s"
 msgstr ""
 
-#: ../src/empathy-call-window.glade.h:1
-msgid "#"
-msgstr "#"
-
-#: ../src/empathy-call-window.glade.h:2
-msgid "*"
-msgstr "*"
-
-#: ../src/empathy-call-window.glade.h:3
-msgid "0"
-msgstr "0"
-
-#: ../src/empathy-call-window.glade.h:4
-msgid "1"
-msgstr "1"
-
-#: ../src/empathy-call-window.glade.h:5
-msgid "2"
-msgstr "2"
-
-#: ../src/empathy-call-window.glade.h:6
-msgid "3"
-msgstr "3"
-
-#: ../src/empathy-call-window.glade.h:7
-msgid "4"
-msgstr "4"
-
-#: ../src/empathy-call-window.glade.h:8
-msgid "5"
-msgstr "5"
+#: ../src/empathy-call-window.c:860
+msgid "Call"
+msgstr "שיחה"
 
-#: ../src/empathy-call-window.glade.h:9
-msgid "6"
-msgstr "6"
+#. Translators: number of minutes:seconds the caller has been connected
+#: ../src/empathy-call-window.c:1203
+#, c-format
+msgid "Connected — %d:%02dm"
+msgstr "מחובר — %d:%02dד'"
 
-#: ../src/empathy-call-window.glade.h:10
-msgid "7"
-msgstr "7"
+#: ../src/empathy-call-window.ui.h:1
+msgid "Hang up"
+msgstr "ניתוק"
 
-#: ../src/empathy-call-window.glade.h:11
-msgid "8"
-msgstr "8"
+#: ../src/empathy-call-window.ui.h:2
+msgid "Redial"
+msgstr "חיוג חוזר"
 
-#: ../src/empathy-call-window.glade.h:12
-msgid "9"
-msgstr "9"
+#: ../src/empathy-call-window.ui.h:3
+msgid "Send Audio"
+msgstr "שלח צליל"
 
-#. To translators: The keypad is numbers [0-9], asterisk (*) and hash (#). Presented like on any phone
-#: ../src/empathy-call-window.glade.h:14
-msgid "<b>Keypad</b>"
-msgstr "<b>לוח מקשים</b>"
+#: ../src/empathy-call-window.ui.h:4
+msgid "Send video"
+msgstr "שלח וידאו"
 
-#: ../src/empathy-call-window.glade.h:15
-msgid "<b>Volume</b>"
-msgstr "<b>עוצמה</b>"
+#: ../src/empathy-call-window.ui.h:5
+msgid "Video preview"
+msgstr "תצוגה מקדימה לווידאו"
 
-#: ../src/empathy-call-window.glade.h:16
-msgid "Hang Up"
-msgstr "נתק"
+#: ../src/empathy-call-window.ui.h:6
+msgid "_Call"
+msgstr "_שיחה"
 
-#: ../src/empathy-call-window.glade.h:17
-msgid "Send Video"
-msgstr "שלח וידאו"
+#: ../src/empathy-call-window.ui.h:7
+#: ../src/empathy-main-window.ui.h:21
+msgid "_View"
+msgstr "_תצוגה"
 
-#: ../src/empathy-chat-window.c:310
+#: ../src/empathy-chat-window.c:342
 #, c-format
 msgid "Conversations (%d)"
 msgstr "שיחות (%d)"
 
-#: ../src/empathy-chat-window.c:415
+#: ../src/empathy-chat-window.c:470
 msgid "Topic:"
 msgstr "נושא:"
 
-#: ../src/empathy-chat-window.c:420
+#: ../src/empathy-chat-window.c:474
 msgid "Typing a message."
 msgstr "מקליד הודעה."
 
-#: ../src/empathy-chat-window.glade.h:1
-msgid "C_lear"
-msgstr "נ_קה"
-
-#: ../src/empathy-chat-window.glade.h:2
-msgid "Chat"
-msgstr "שיחה"
-
-#: ../src/empathy-chat-window.glade.h:3
-msgid "Insert _Smiley"
-msgstr "הכנס _סמיילי"
-
-#: ../src/empathy-chat-window.glade.h:4
-msgid "Invitation _message:"
-msgstr "הודעת הזמ_נה:"
-
-#: ../src/empathy-chat-window.glade.h:5
-msgid "Invite"
-msgstr "הזמן"
-
-#: ../src/empathy-chat-window.glade.h:6
-msgid "Move Tab _Left"
-msgstr "הזז לשונית _שמאלה"
-
-#: ../src/empathy-chat-window.glade.h:7
-msgid "Move Tab _Right"
-msgstr "הזז לשונית _ימינה"
-
-#: ../src/empathy-chat-window.glade.h:8
-msgid "Select who would you like to invite:"
-msgstr ""
-
-#: ../src/empathy-chat-window.glade.h:9
-msgid "You have been invited to join a chat conference."
-msgstr ""
-
-#: ../src/empathy-chat-window.glade.h:10
-msgid "_Contact"
-msgstr "_איש קשר"
-
-#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
-msgid "_Contents"
-msgstr "_תכנים"
-
-#: ../src/empathy-chat-window.glade.h:12
-msgid "_Conversation"
-msgstr "_שיחה"
-
-#: ../src/empathy-chat-window.glade.h:13
-msgid "_Detach Tab"
-msgstr "_נתק לשונית"
-
-#: ../src/empathy-chat-window.glade.h:15
-#, fuzzy
-#| msgid "_Invite to Chat Room"
-msgid "_Favorite Chatroom"
-msgstr "_הזמן לחדר שיחה"
-
-#: ../src/empathy-chat-window.glade.h:16 ../src/empathy-main-window.glade.h:12
-msgid "_Help"
-msgstr "_עזרה"
-
-#: ../src/empathy-chat-window.glade.h:17
-msgid "_Next Tab"
-msgstr "_לשונית הבאה"
-
-#: ../src/empathy-chat-window.glade.h:18
-msgid "_Previous Tab"
-msgstr "_לשונית קודמת"
-
-#: ../src/empathy-chat-window.glade.h:19
-msgid "_Tabs"
-msgstr "_לשוניות"
+#: ../src/empathy-chat-window.c:935
+#: ../src/empathy-event-manager.c:429
+#, c-format
+msgid "New message from %s"
+msgstr "הודעה חדשת מ־%s"
 
-#: ../src/empathy-chatrooms-window.c:262
+#: ../src/empathy-chatrooms-window.c:258
 msgid "Name"
 msgstr "שם"
 
-#: ../src/empathy-chatrooms-window.c:280
+#: ../src/empathy-chatrooms-window.c:276
 msgid "Room"
 msgstr "חדר"
 
-#: ../src/empathy-chatrooms-window.c:289
+#: ../src/empathy-chatrooms-window.c:285
 msgid "Auto-Connect"
 msgstr "חיבור אוטומטי"
 
-#: ../src/empathy-chatrooms-window.glade.h:2
-msgid "Edit Favorite Room"
-msgstr "ערוך חדר מועדף"
-
-#: ../src/empathy-chatrooms-window.glade.h:3
-msgid "Join room on start_up"
-msgstr ""
+#: ../src/empathy-chatrooms-window.ui.h:2
+msgid "Manage Favorite Rooms"
+msgstr "ניהול חדרי שיחה מועדפים"
 
-#: ../src/empathy-chatrooms-window.glade.h:4
-msgid "Join this chat room when Empathy starts and you are connected"
-msgstr ""
+#: ../src/empathy-event-manager.c:377
+msgid "Incoming call"
+msgstr "שיחה נכנסת"
 
-#: ../src/empathy-chatrooms-window.glade.h:5
-msgid "Manage Favorite Rooms"
-msgstr ""
+#: ../src/empathy-event-manager.c:380
+#, c-format
+msgid "%s is calling you, do you want to answer?"
+msgstr "‏%s מתקשר אליך, האם ברצונך לענות?"
 
-#: ../src/empathy-chatrooms-window.glade.h:6
-msgid "N_ame:"
-msgstr "ש_ם:"
+#: ../src/empathy-event-manager.c:387
+msgid "_Reject"
+msgstr "_דחה"
 
-#: ../src/empathy-chatrooms-window.glade.h:7
-msgid "S_erver:"
-msgstr "ש_רת:"
+#: ../src/empathy-event-manager.c:393
+msgid "_Answer"
+msgstr "_השב"
 
-#: ../src/empathy-chatrooms-window.glade.h:9
-#: ../src/empathy-new-chatroom-dialog.glade.h:9
-msgid "_Room:"
-msgstr "_חדר:"
+#: ../src/empathy-event-manager.c:507
+#, c-format
+msgid "Incoming call from %s"
+msgstr "שיחה נכנסת מ־%s"
 
-#: ../src/empathy-event-manager.c:193
+#: ../src/empathy-event-manager.c:547
 #, c-format
-msgid ""
-"New message from %s:\n"
-"%s"
+msgid "%s is offering you an invitation"
+msgstr "‏%s שולח לך הזמנה"
+
+#: ../src/empathy-event-manager.c:553
+msgid "An external application will be started to handle it."
 msgstr ""
 
-#: ../src/empathy-event-manager.c:261
-#, c-format
-msgid "Incoming call from %s"
+#: ../src/empathy-event-manager.c:558
+msgid "You don't have the needed external application to handle it."
 msgstr ""
 
-#: ../src/empathy-event-manager.c:310
+#: ../src/empathy-event-manager.c:685
+msgid "Room invitation"
+msgstr "הזמנה לחדר"
+
+#: ../src/empathy-event-manager.c:688
 #, c-format
-msgid ""
-"%s is offering you an invitation. An external application will be started to "
-"handle it."
-msgstr ""
+msgid "%s is inviting you to join %s"
+msgstr "‏%s מזמין אותך להצטרף אל %s"
+
+#: ../src/empathy-event-manager.c:696
+msgid "_Decline"
+msgstr "_סרב"
 
-#: ../src/empathy-event-manager.c:317
+#: ../src/empathy-event-manager.c:701
+#: ../src/empathy-new-chatroom-dialog.ui.h:7
+msgid "_Join"
+msgstr "_הצטרף"
+
+#: ../src/empathy-event-manager.c:740
 #, c-format
-msgid ""
-"%s is offering you an invitation, but you don't have the needed external "
-"application to handle it."
-msgstr ""
+msgid "%s invited you to join %s"
+msgstr "‏%s הזמין אותך להצטרף אל %s"
 
-#: ../src/empathy-event-manager.c:452
+#: ../src/empathy-event-manager.c:766
 #, c-format
 msgid "Incoming file transfer from %s"
 msgstr ""
 
-#: ../src/empathy-event-manager.c:542
+#: ../src/empathy-event-manager.c:946
 #, c-format
 msgid "Subscription requested by %s"
 msgstr ""
 
-#: ../src/empathy-event-manager.c:546
+#: ../src/empathy-event-manager.c:950
 #, c-format
 msgid ""
 "\n"
@@ -1731,618 +1755,799 @@ msgstr ""
 "\n"
 "הודעה: %s"
 
-#: ../src/empathy-ft-manager.c:111
+#. Translators: time left, when it is more than one hour
+#: ../src/empathy-ft-manager.c:101
 #, c-format
 msgid "%u:%02u.%02u"
 msgstr ""
 
-#: ../src/empathy-ft-manager.c:113
+#. Translators: time left, when is is less than one hour
+#: ../src/empathy-ft-manager.c:104
 #, c-format
 msgid "%02u.%02u"
 msgstr ""
 
-#: ../src/empathy-ft-manager.c:162
-msgid "No reason was specified"
-msgstr "לא צויינה סיבה"
-
-#: ../src/empathy-ft-manager.c:164
-msgid "The change in state was requested"
-msgstr ""
-
-#: ../src/empathy-ft-manager.c:166
-msgid "You canceled the file transfer"
-msgstr "ביטלת את ההעברה"
-
-#: ../src/empathy-ft-manager.c:168
-msgid "The other participant canceled the file transfer"
-msgstr ""
+#: ../src/empathy-ft-manager.c:180
+msgctxt "file transfer percent"
+msgid "Unknown"
+msgstr "לא ידוע"
 
-#: ../src/empathy-ft-manager.c:170
-msgid "Error while trying to transfer the file"
+#: ../src/empathy-ft-manager.c:275
+#, c-format
+msgid "%s of %s at %s/s"
 msgstr ""
 
-#: ../src/empathy-ft-manager.c:172
-msgid "The other participant is unable to transfer the file"
+#: ../src/empathy-ft-manager.c:276
+#, c-format
+msgid "%s of %s"
 msgstr ""
 
-#: ../src/empathy-ft-manager.c:174
-#| msgid "Unknown error"
-msgid "Unknown reason"
-msgstr "סיבה לא ידועה"
-
 #. translators: first %s is filename, second %s is the contact name
-#: ../src/empathy-ft-manager.c:222
+#: ../src/empathy-ft-manager.c:307
 #, c-format
 msgid "Receiving \"%s\" from %s"
-msgstr ""
+msgstr "מקבל את הקובץ \"%s\" מ־%s"
 
 #. translators: first %s is filename, second %s is the contact name
-#: ../src/empathy-ft-manager.c:225
+#: ../src/empathy-ft-manager.c:310
 #, c-format
 msgid "Sending \"%s\" to %s"
 msgstr "שולח את \"%s\" ל-\"%s\""
 
-#: ../src/empathy-ft-manager.c:235
-#| msgid "unknown"
-msgctxt "file size"
-msgid "Unknown"
-msgstr "לא ידוע"
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:340
+#, c-format
+msgid "Error receiving \"%s\" from %s"
+msgstr "התרחשה שגיאה בקבלת הקובץ \"%s\" מ־%s"
+
+#: ../src/empathy-ft-manager.c:343
+msgid "Error receiving a file"
+msgstr "שגיאה בקבלת קובץ"
 
-#. translators: first %s is the transferred size, second %s is
-#. * the total file size
-#: ../src/empathy-ft-manager.c:243
+#: ../src/empathy-ft-manager.c:348
 #, c-format
-msgid "%s of %s"
-msgstr ""
+msgid "Error sending \"%s\" to %s"
+msgstr "שגיאה בשליחת הקובץ \"%s\" אל %s"
 
-#: ../src/empathy-ft-manager.c:250
-msgid "Waiting the other participant's response"
-msgstr ""
+#: ../src/empathy-ft-manager.c:351
+msgid "Error sending a file"
+msgstr "שגיאה בשליחת קובץ"
 
-#: ../src/empathy-ft-manager.c:260
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:490
 #, c-format
 msgid "\"%s\" received from %s"
-msgstr ""
+msgstr "הקובץ \"%s\" התקבל מ־%s"
 
-#: ../src/empathy-ft-manager.c:266
-#, fuzzy, c-format
-#| msgid "Topic set to: %s"
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:495
+#, c-format
 msgid "\"%s\" sent to %s"
-msgstr "×\94× ×\95ש×\90 × ×§×\91×¢ ×\9c: %s"
+msgstr "×\94ק×\95×\91×¥ \"%s\" × ×©×\9c×\97 ×\90×\9c %s"
 
-#: ../src/empathy-ft-manager.c:269
+#: ../src/empathy-ft-manager.c:498
 msgid "File transfer completed"
-msgstr ""
+msgstr "העברת קובץ הושלמה"
 
-#: ../src/empathy-ft-manager.c:278
-#, c-format
-msgid "\"%s\" receiving from %s"
-msgstr ""
+#: ../src/empathy-ft-manager.c:617
+#: ../src/empathy-ft-manager.c:784
+msgid "Waiting for the other participant's response"
+msgstr "ממתין לתגובה של משתתפים נוספים"
 
-#: ../src/empathy-ft-manager.c:284
+#: ../src/empathy-ft-manager.c:643
+#: ../src/empathy-ft-manager.c:681
 #, c-format
-msgid "\"%s\" sending to %s"
+msgid "Checking integrity of \"%s\""
 msgstr ""
 
-#: ../src/empathy-ft-manager.c:287
+#: ../src/empathy-ft-manager.c:646
+#: ../src/empathy-ft-manager.c:684
 #, c-format
-msgid "File transfer canceled: %s"
+msgid "Hashing \"%s\""
 msgstr ""
 
-#: ../src/empathy-ft-manager.c:302
-#, fuzzy
-#| msgid "unknown"
-msgctxt "remaining time"
-msgid "Unknown"
-msgstr "לא ידוע"
-
-#: ../src/empathy-ft-manager.c:362
-#, fuzzy
-#| msgid "unknown"
-msgctxt "file transfer percent"
-msgid "Unknown"
-msgstr "לא ידוע"
-
-#: ../src/empathy-ft-manager.c:698
+#: ../src/empathy-ft-manager.c:1024
 msgid "%"
 msgstr ""
 
-#: ../src/empathy-ft-manager.c:710
-#| msgid "All Files"
+#: ../src/empathy-ft-manager.c:1036
 msgid "File"
 msgstr "קובץ"
 
-#: ../src/empathy-ft-manager.c:732
-#, fuzzy
-#| msgid "Ringing"
+#: ../src/empathy-ft-manager.c:1058
 msgid "Remaining"
-msgstr "מצלצל"
-
-#: ../src/empathy-ft-manager.c:883
-msgid "Cannot save file to this location"
-msgstr ""
-
-#: ../src/empathy-ft-manager.c:929
-#, fuzzy
-#| msgid "_Send File..."
-msgid "Save file as..."
-msgstr "_שלח קובץ..."
-
-#: ../src/empathy-ft-manager.c:999
-#| msgid "unknown"
-msgid "unknown size"
-msgstr "גודל לא ידוע"
-
-#: ../src/empathy-ft-manager.c:1005
-#, fuzzy, c-format
-#| msgid "I would like to add you to my contact list."
-msgid "%s would like to send you a file"
-msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי."
-
-#: ../src/empathy-ft-manager.c:1010
-#, c-format
-msgid "Do you want to accept the file \"%s\" (%s)?"
-msgstr ""
-
-#. Decline button
-#: ../src/empathy-ft-manager.c:1019
-msgid "_Decline"
-msgstr "_סרב"
-
-#. Accept button
-#: ../src/empathy-ft-manager.c:1028
-#, fuzzy
-#| msgid "_Accounts"
-msgid "_Accept"
-msgstr "_חשבונות"
+msgstr "נותר"
 
-#: ../src/empathy-ft-manager.glade.h:1
+#: ../src/empathy-ft-manager.ui.h:1
 msgid "File transfers"
-msgstr ""
+msgstr "העברות קבצים"
 
-#: ../src/empathy-ft-manager.glade.h:2
+#: ../src/empathy-ft-manager.ui.h:2
 msgid "Remove completed, canceled and failed file transfers from the list"
 msgstr ""
 
-#: ../src/empathy-ft-manager.glade.h:3
-msgid "gtk-clear"
-msgstr "gtk-clear"
-
-#: ../src/empathy-import-dialog.c:249
-#, fuzzy
-#| msgid "Port"
+#. Translators: this is the header of a treeview column
+#: ../src/empathy-import-dialog.c:259
 msgid "Import"
-msgstr "שער"
+msgstr "×\99×\99×\91×\95×\90"
 
-#: ../src/empathy-import-dialog.c:258
+#: ../src/empathy-import-dialog.c:268
 msgid "Protocol"
 msgstr "פרוטוקול"
 
-#: ../src/empathy-import-dialog.c:284
-#, fuzzy
-#| msgid "Reso_urce:"
+#: ../src/empathy-import-dialog.c:294
 msgid "Source"
-msgstr "_משאב:"
+msgstr "מקור"
 
-#: ../src/empathy-import-dialog.c:372
-msgid ""
-"No accounts to import could be found. Empathy currently only supports "
-"importing accounts from Pidgin."
+#: ../src/empathy-import-dialog.c:388
+msgid "No accounts to import could be found. Empathy currently only supports importing accounts from Pidgin."
 msgstr ""
 
-#: ../src/empathy-import-dialog.glade.h:1
-#, fuzzy
-#| msgid "Empathy accounts"
+#: ../src/empathy-import-dialog.ui.h:1
 msgid "Import Accounts"
-msgstr "×\97ש×\91×\95× ×\95ת Empathy"
+msgstr "×\99×\99×\91×\95×\90 ×\97ש×\91×\95× ×\95ת"
 
-#: ../src/empathy-import-dialog.glade.h:2
-msgid "gtk-cancel"
-msgstr "gtk-cancel"
-
-#: ../src/empathy-import-dialog.glade.h:3
-msgid "gtk-ok"
-msgstr "gtk-ok"
+#: ../src/empathy-main-window.c:395
+msgid "_Edit account"
+msgstr "_ערוך חשבון"
 
-#: ../src/empathy-main-window.c:388
+#: ../src/empathy-main-window.c:498
 msgid "No error specified"
-msgstr "×\9c×\90 ×¦×\95×\99×\99× ×\94 ×©×\92×\99×\90×\94"
+msgstr "לא צוינה שגיאה"
 
-#: ../src/empathy-main-window.c:391
+#: ../src/empathy-main-window.c:501
 msgid "Network error"
 msgstr "שגיאת רשת"
 
-#: ../src/empathy-main-window.c:394
+#: ../src/empathy-main-window.c:504
 msgid "Authentication failed"
 msgstr "האימות נכשל"
 
-#: ../src/empathy-main-window.c:397
+#: ../src/empathy-main-window.c:507
 msgid "Encryption error"
-msgstr "ש×\92×\99×\98ת הצפנה"
+msgstr "ש×\92×\99×\90ת הצפנה"
 
-#: ../src/empathy-main-window.c:400
+#: ../src/empathy-main-window.c:510
 msgid "Name in use"
 msgstr "השם בשימוש"
 
-#: ../src/empathy-main-window.c:403
+#: ../src/empathy-main-window.c:513
 msgid "Certificate not provided"
 msgstr "לא סופקה תעודה"
 
-#: ../src/empathy-main-window.c:406
+#: ../src/empathy-main-window.c:516
 msgid "Certificate untrusted"
 msgstr ""
 
-#: ../src/empathy-main-window.c:409
+#: ../src/empathy-main-window.c:519
 msgid "Certificate expired"
 msgstr "התעודה לא תקפה"
 
-#: ../src/empathy-main-window.c:412
+#: ../src/empathy-main-window.c:522
 msgid "Certificate not activated"
 msgstr ""
 
-#: ../src/empathy-main-window.c:415
+#: ../src/empathy-main-window.c:525
 msgid "Certificate hostname mismatch"
 msgstr ""
 
-#: ../src/empathy-main-window.c:418
+#: ../src/empathy-main-window.c:528
 msgid "Certificate fingerprint mismatch"
 msgstr ""
 
-#: ../src/empathy-main-window.c:421
+#: ../src/empathy-main-window.c:531
 msgid "Certificate self-signed"
 msgstr ""
 
-#: ../src/empathy-main-window.c:424
+#: ../src/empathy-main-window.c:534
 msgid "Certificate error"
-msgstr "ש×\92×\99×\98ת תעודה"
+msgstr "ש×\92×\99×\90ת תעודה"
 
-#: ../src/empathy-main-window.c:427
+#: ../src/empathy-main-window.c:537
 msgid "Unknown error"
 msgstr "שגיאה לא ידועה"
 
-#: ../src/empathy-main-window.c:585
-msgid "Show and edit accounts"
-msgstr "הצג וערוך חשבונות"
-
-#: ../src/empathy-main-window.c:957
+#: ../src/empathy-main-window.c:888
 msgid "Contact"
 msgstr "איש קשר"
 
-#: ../src/empathy-main-window.c:1159
-msgid "_Edit account"
-msgstr "_ערוך חשבון"
+#: ../src/empathy-main-window.c:1220
+msgid "Show and edit accounts"
+msgstr "הצג וערוך חשבונות"
 
-#: ../src/empathy-main-window.glade.h:1
+#: ../src/empathy-main-window.ui.h:1
 msgid "Contact List"
 msgstr "רשימת אנשי קשר"
 
-#: ../src/empathy-main-window.glade.h:2
+#: ../src/empathy-main-window.ui.h:2
+msgid "Contacts on a _Map"
+msgstr ""
+
+#: ../src/empathy-main-window.ui.h:3
 msgid "Context"
 msgstr "הקשר"
 
-#: ../src/empathy-main-window.glade.h:3
+#: ../src/empathy-main-window.ui.h:4
 msgid "Join _Favorites"
-msgstr ""
-
-#: ../src/empathy-main-window.glade.h:4
-msgid "Join _New..."
-msgstr ""
+msgstr "_צירוף למועדפים"
 
-#: ../src/empathy-main-window.glade.h:5
+#: ../src/empathy-main-window.ui.h:5
 msgid "Manage Favorites"
 msgstr "נהל מועדפים"
 
-#: ../src/empathy-main-window.glade.h:6
-msgid "Show _Offline Contacts"
-msgstr "הצג אנשי קשר _מנותקים"
-
-#: ../src/empathy-main-window.glade.h:7
+#: ../src/empathy-main-window.ui.h:6
 msgid "_Accounts"
 msgstr "_חשבונות"
 
-#: ../src/empathy-main-window.glade.h:8
+#: ../src/empathy-main-window.ui.h:7
 msgid "_Add Contact..."
 msgstr "_הוסף איש קשר..."
 
-#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+#: ../src/empathy-main-window.ui.h:9
+msgid "_Contents"
+msgstr "_תכנים"
+
+#: ../src/empathy-main-window.ui.h:10
+msgid "_Debug"
+msgstr "_ניפוי שגיאות"
+
+#: ../src/empathy-main-window.ui.h:12
+msgid "_File Transfers"
+msgstr "העברות _קבצים"
+
+#: ../src/empathy-main-window.ui.h:13
+msgid "_Help"
+msgstr "_עזרה"
+
+#: ../src/empathy-main-window.ui.h:14
+msgid "_Join..."
+msgstr "_הצטרף..."
+
+#: ../src/empathy-main-window.ui.h:15
+#: ../src/empathy-status-icon.ui.h:2
 msgid "_New Conversation..."
 msgstr "_שיחה חדשה..."
 
-#: ../src/empathy-main-window.glade.h:14
+#: ../src/empathy-main-window.ui.h:16
+msgid "_Offline Contacts"
+msgstr "אנשי קשר _לא מחוברים"
+
+#: ../src/empathy-main-window.ui.h:17
 msgid "_Personal Information"
 msgstr "מידע _אישי"
 
-#: ../src/empathy-main-window.glade.h:16
+#: ../src/empathy-main-window.ui.h:19
+msgid "_Previous Conversations"
+msgstr "שיחות _קודמות"
+
+#: ../src/empathy-main-window.ui.h:20
 msgid "_Room"
 msgstr "_חדר"
 
-#: ../src/empathy-new-chatroom-dialog.c:291
-msgid "Chat Rooms"
-msgstr "חדרי שיחה"
+#: ../src/empathy-new-chatroom-dialog.c:332
+msgid "Chat Room"
+msgstr "חדר שיחה"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:2
-msgid "Browse:"
-msgstr "×¢×\99×\99×\9f:"
+#: ../src/empathy-new-chatroom-dialog.c:348
+msgid "Members"
+msgstr "×\97×\91ר×\99×\9d"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:3
+#: ../src/empathy-new-chatroom-dialog.c:492
+#, c-format
+msgctxt "Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no and a number."
 msgid ""
-"Enter the room name to join here or click on one or more rooms in the list."
+"<b>%s</b>\n"
+"Invite required: %s\n"
+"Password required: %s\n"
+"Members: %s"
 msgstr ""
+"<b>%s</b>\n"
+"נדרשת הזמנה: %s\n"
+"נדרשת סיסמה: %s\n"
+"חברים: %s"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:4
-msgid ""
-"Enter the server which hosts the room, or leave it empty if the room is on "
-"the current account's server"
+#: ../src/empathy-new-chatroom-dialog.c:494
+#: ../src/empathy-new-chatroom-dialog.c:495
+msgid "Yes"
+msgstr "כן"
+
+#: ../src/empathy-new-chatroom-dialog.c:494
+#: ../src/empathy-new-chatroom-dialog.c:495
+msgid "No"
+msgstr "לא"
+
+#: ../src/empathy-new-chatroom-dialog.c:522
+msgid "Could not start room listing"
 msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:5
-msgid "Join"
+#: ../src/empathy-new-chatroom-dialog.c:532
+msgid "Could not stop room listing"
 msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:6
-msgid "Join New"
+#: ../src/empathy-new-chatroom-dialog.ui.h:2
+msgid "Couldn't load room list"
 msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:7
-msgid "Re_fresh"
-msgstr "רע_נן"
+#: ../src/empathy-new-chatroom-dialog.ui.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:8
-msgid ""
-"This list represents all chat rooms hosted on the server you have entered."
+#: ../src/empathy-new-chatroom-dialog.ui.h:4
+msgid "Enter the server which hosts the room, or leave it empty if the room is on the current account's server"
 msgstr ""
 
-#: ../src/empathy-preferences.c:153
+#: ../src/empathy-new-chatroom-dialog.ui.h:5
+msgid "Join Room"
+msgstr "הצטרף לחדר"
+
+#: ../src/empathy-new-chatroom-dialog.ui.h:6
+msgid "Room List"
+msgstr "רשימת חדרים"
+
+#: ../src/empathy-new-chatroom-dialog.ui.h:8
+msgid "_Room:"
+msgstr "_חדר:"
+
+#: ../src/empathy-preferences.c:158
 msgid "Message received"
 msgstr "התקבלה הודעה"
 
-#: ../src/empathy-preferences.c:154
-#, fuzzy
-#| msgid ""
-#| "\n"
-#| "Message: %s"
+#: ../src/empathy-preferences.c:159
 msgid "Message sent"
-msgstr ""
-"\n"
-"הודעה: %s"
+msgstr "הודעה שנשלחה"
 
-#: ../src/empathy-preferences.c:155
-#, fuzzy
-#| msgid "New Conversation"
+#: ../src/empathy-preferences.c:160
 msgid "New conversation"
 msgstr "שיחה חדשה"
 
-#: ../src/empathy-preferences.c:156
-#, fuzzy
+#: ../src/empathy-preferences.c:161
 msgid "Contact goes online"
-msgstr "Contact list sort criterium"
+msgstr "איש קשר מתחבר"
 
-#: ../src/empathy-preferences.c:157
-#, fuzzy
+#: ../src/empathy-preferences.c:162
 msgid "Contact goes offline"
-msgstr "Contact list sort criterium"
+msgstr "איש קשר מתנתק"
 
-#: ../src/empathy-preferences.c:158
-#, fuzzy
-#| msgid "Disconnected"
+#: ../src/empathy-preferences.c:163
 msgid "Account connected"
-msgstr "×\9e× ×\95תק"
+msgstr "×\97ש×\91×\95×\9f ×\9e×\97×\95×\91ר"
 
-#: ../src/empathy-preferences.c:159
-#, fuzzy
-#| msgid "Disconnected"
+#: ../src/empathy-preferences.c:164
 msgid "Account disconnected"
-msgstr "×\9e× ×\95תק"
+msgstr "×\97ש×\91×\95×\9f ×\94תנתק"
 
-#: ../src/empathy-preferences.c:376
+#: ../src/empathy-preferences.c:427
 msgid "Language"
 msgstr "שפה"
 
-#: ../src/empathy-preferences.glade.h:1
+#: ../src/empathy-preferences.ui.h:1
 msgid "<b>Appearance</b>"
 msgstr "<b>מראה</b>"
 
-#: ../src/empathy-preferences.glade.h:2
-msgid "<b>Behaviour</b>"
+#: ../src/empathy-preferences.ui.h:2
+msgid "<b>Behavior</b>"
 msgstr "<b>התנהגות</b>"
 
-#: ../src/empathy-preferences.glade.h:3
+#: ../src/empathy-preferences.ui.h:3
 msgid "<b>Contact List</b>"
 msgstr "<b>רשימת אנשי קשר</b>"
 
-#: ../src/empathy-preferences.glade.h:4
+#: ../src/empathy-preferences.ui.h:4
 msgid "<b>Enable spell checking for languages:</b>"
 msgstr "<b>הפעל בדיקת איות עבור השפות:</b>"
 
-#: ../src/empathy-preferences.glade.h:5
+#: ../src/empathy-preferences.ui.h:5
+msgid "<b>Geoclue Settings</b>"
+msgstr "<b>הגדרות Geoclue</b>"
+
+#: ../src/empathy-preferences.ui.h:6
 msgid "<b>Play sound for events</b>"
-msgstr ""
+msgstr "<b>השמע צליל עבור אירועים</b>"
 
-#: ../src/empathy-preferences.glade.h:6
-msgid ""
-"<small>The list of languages reflects only the languages for which you have "
-"a dictionary installed.</small>"
+#: ../src/empathy-preferences.ui.h:7
+msgid "<b>Privacy</b>"
+msgstr "<b>פרטיות</b>"
+
+#: ../src/empathy-preferences.ui.h:8
+msgid "<small>Reduced location accuracy means that nothing more precise than your city, state and country will be published.  GPS coordinates will have a random value added (&#xB1;0.25&#xB0;).</small>"
+msgstr "<small>הפחתת רמת הדיוק של המיקום אומרת שהמידע המדויק ביותר שיפורסם הוא העיר, המדינה והארץ שלך. לנקודות ציון מ־GPS יתווסף ערך אקראי ‏(&#xB1;0.25&#xB0;). </small>"
+
+#: ../src/empathy-preferences.ui.h:9
+msgid "<small>The list of languages reflects only the languages for which you have a dictionary installed.</small>"
 msgstr "<small>ברשימת השפות מוצגות שפות שעבורן מותקנים אצלך מילונים.</small>"
 
-#: ../src/empathy-preferences.glade.h:7
-msgid "Automatically _connect on startup "
+#: ../src/empathy-preferences.ui.h:10
+msgid "<span foreground=\"red\">Not a valid adium theme</span>"
 msgstr ""
 
-#: ../src/empathy-preferences.glade.h:8
+#: ../src/empathy-preferences.ui.h:11
+msgid "Adium theme to use:"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:12
+msgid "Allow _GPS usage"
+msgstr "לאפשר שימוש ב־_GPS"
+
+#: ../src/empathy-preferences.ui.h:13
+msgid "Allow _cellphone usage"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:14
+msgid "Allow _network usage"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:15
+msgid "Automatically _connect on startup "
+msgstr "_התחבר אוטומטי על ההפעלה"
+
+#: ../src/empathy-preferences.ui.h:16
 msgid "Avatars are user chosen images shown in the contact list"
 msgstr ""
 
-#: ../src/empathy-preferences.glade.h:9
+#: ../src/empathy-preferences.ui.h:17
 msgid "Chat Th_eme:"
 msgstr "ער_כת נושא לשיחה:"
 
-#: ../src/empathy-preferences.glade.h:10
-#, fuzzy
-#| msgid "Enable sound when away"
+#: ../src/empathy-preferences.ui.h:18
+msgid "Disable notifications when _away or busy"
+msgstr "בטל התרעות בזמן מצב _מרוחק או עסוק"
+
+#: ../src/empathy-preferences.ui.h:19
 msgid "Disable sounds when _away or busy"
-msgstr "Enable sound when away"
+msgstr "בטל צלילים בזמן מצב _מרוחק או עסוק"
+
+#: ../src/empathy-preferences.ui.h:20
+msgid "Enable notifications when the _chat is not focused"
+msgstr ""
 
-#: ../src/empathy-preferences.glade.h:11
+#: ../src/empathy-preferences.ui.h:21
 msgid "General"
 msgstr "כללי"
 
-#: ../src/empathy-preferences.glade.h:12
+#: ../src/empathy-preferences.ui.h:22
+msgid "Location"
+msgstr "מיקום"
+
+#: ../src/empathy-preferences.ui.h:23
+msgid "Notifications"
+msgstr "התרעות"
+
+#: ../src/empathy-preferences.ui.h:24
 msgid "Preferences"
 msgstr "העדפות"
 
-#: ../src/empathy-preferences.glade.h:13
+#: ../src/empathy-preferences.ui.h:25
 msgid "Show _avatars"
 msgstr "הצג _תמנות אישיות"
 
-#: ../src/empathy-preferences.glade.h:14
+#: ../src/empathy-preferences.ui.h:26
 msgid "Show _smileys as images"
-msgstr ""
+msgstr "הצד _סמיילים כתמונות"
 
-#: ../src/empathy-preferences.glade.h:15
+#: ../src/empathy-preferences.ui.h:27
 msgid "Show co_mpact contact list"
-msgstr ""
+msgstr "הצג רשימת אנשי קשר מ_צומצמת"
 
-#: ../src/empathy-preferences.glade.h:16
+#: ../src/empathy-preferences.ui.h:28
 msgid "Sort by _name"
 msgstr "מיין לפי _שם"
 
-#: ../src/empathy-preferences.glade.h:17
+#: ../src/empathy-preferences.ui.h:29
 msgid "Sort by s_tate"
 msgstr "מיין לפי מצ_ב"
 
-#: ../src/empathy-preferences.glade.h:18
+#: ../src/empathy-preferences.ui.h:30
 msgid "Sounds"
-msgstr ""
+msgstr "צלילים"
 
-#: ../src/empathy-preferences.glade.h:19
+#: ../src/empathy-preferences.ui.h:31
 msgid "Spell Checking"
 msgstr "בדיקת איות"
 
-#: ../src/empathy-preferences.glade.h:20
+#: ../src/empathy-preferences.ui.h:32
+msgid "Sélectionner un dossier"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:33
 msgid "Themes"
 msgstr "ערכות נושא"
 
-#: ../src/empathy-preferences.glade.h:21
-#, fuzzy
-#| msgid "Enable sound when away"
+#: ../src/empathy-preferences.ui.h:34
+msgid "_Enable bubble notifications"
+msgstr "_הפעל התרעות בתוך בועה"
+
+#: ../src/empathy-preferences.ui.h:35
 msgid "_Enable sound notifications"
-msgstr "Enable sound when away"
+msgstr "_הפעל התרעות קול"
 
-#: ../src/empathy-preferences.glade.h:22
+#: ../src/empathy-preferences.ui.h:36
 msgid "_Open new chats in separate windows"
 msgstr "_פתח שיחות חדשות בחלונות נפרדים"
 
-#: ../src/empathy-status-icon.glade.h:1
+#: ../src/empathy-preferences.ui.h:37
+msgid "_Publish location to my contacts"
+msgstr "_פרסם את המיקום שלי לאנשי הקשר שלי"
+
+#: ../src/empathy-preferences.ui.h:38
+msgid "_Reduce location accuracy"
+msgstr "_הפחת את דיוק המיקום"
+
+#: ../src/empathy-status-icon.ui.h:1
 msgid "Status"
 msgstr "מצב"
 
-#: ../src/empathy-status-icon.glade.h:3
+#: ../src/empathy-status-icon.ui.h:3
 msgid "_Quit"
 msgstr "יצי_אה"
 
-#: ../src/empathy-status-icon.glade.h:4
+#: ../src/empathy-status-icon.ui.h:4
 msgid "_Show Contact List"
 msgstr "_הצג רשימת אנשי קשר"
 
-#: ../src/empathy-tube-dispatch.c:356
+#: ../src/empathy-tube-dispatch.c:375
 #, c-format
 msgid "Unable to start application for service %s: %s"
 msgstr ""
 
-#: ../src/empathy-tube-dispatch.c:427
+#: ../src/empathy-tube-dispatch.c:446
 #, c-format
-msgid ""
-"An invitation was offered for service %s, but you don't have the needed "
-"application to handle it"
+msgid "An invitation was offered for service %s, but you don't have the needed application to handle it"
 msgstr ""
 
+#: ../src/empathy-call-window-fullscreen.ui.h:1
+msgid "gtk-leave-fullscreen"
+msgstr "gtk-leave-fullscreen"
+
+#: ../src/empathy-map-view.ui.h:1
+#, fuzzy
+msgid "Contact Map View"
+msgstr "רשימת אנשי קשר"
+
+#: ../src/empathy-debug-dialog.c:111
+#: ../src/empathy-debug-dialog.c:1075
+msgid "Error"
+msgstr "שגיאה"
+
+#: ../src/empathy-debug-dialog.c:114
+#: ../src/empathy-debug-dialog.c:1069
+msgid "Critical"
+msgstr "קריטי"
+
+#: ../src/empathy-debug-dialog.c:117
+#: ../src/empathy-debug-dialog.c:1063
+msgid "Warning"
+msgstr "אזהרה"
+
+#: ../src/empathy-debug-dialog.c:120
+#: ../src/empathy-debug-dialog.c:1057
+#: ../src/empathy-debug-dialog.c:1105
+msgid "Message"
+msgstr "הודעה"
+
+#: ../src/empathy-debug-dialog.c:123
+#: ../src/empathy-debug-dialog.c:1051
+msgid "Info"
+msgstr "מידע"
+
+#: ../src/empathy-debug-dialog.c:126
+#: ../src/empathy-debug-dialog.c:1045
+msgid "Debug"
+msgstr "ניפוי שגיאות"
+
+#: ../src/empathy-debug-dialog.c:837
+msgid "Save"
+msgstr "שמור"
+
+#: ../src/empathy-debug-dialog.c:940
+msgid "Debug Window"
+msgstr "חלון ניפוי שגיאות"
+
+#: ../src/empathy-debug-dialog.c:1013
+msgid "Pause"
+msgstr "עצור"
+
+#: ../src/empathy-debug-dialog.c:1025
+msgid "Level "
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:1094
+msgid "Time"
+msgstr "זמן"
+
+#: ../src/empathy-debug-dialog.c:1096
+msgid "Domain"
+msgstr "תחום"
+
+#: ../src/empathy-debug-dialog.c:1098
+msgid "Category"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:1100
+msgid "Level"
+msgstr ""
+
+#: ../src/empathy-debug-dialog.c:1132
+msgid "The selected connection manager does not support the remote debugging extension."
+msgstr ""
+
+#~ msgid "Enable popup when contact is available"
+#~ msgstr "Enable popup when contact is available"
+#~ msgid "Whether or not to show a popup when a contact becomes available."
+#~ msgstr "Whether or not to show a popup when a contact becomes available."
+#~ msgid "Edit the selected IRC network"
+#~ msgstr "ערוך רשת IRC מסומנת"
+#~ msgid "Remove the selected IRC network"
+#~ msgstr "הסר רשת IRC מסומנת"
+#~ msgid "_Check Word Spelling..."
+#~ msgstr "ב_דוק איות..."
+#~ msgid "Contact Information"
+#~ msgstr "מידע איש קשר"
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי."
+#~ msgid "Sorry, I don't want you in my contact list anymore."
+#~ msgstr "מצטער, אני יותר לא רוצה אותך ברשימת אנשי הקשר שלי."
+#~ msgid "Contact information"
+#~ msgstr "נתוני איש קשר"
+#~ msgid "Word"
+#~ msgstr "מילה"
+#~ msgid "Suggestions for the word"
+#~ msgstr "הצעות עבור המילה"
+#~ msgid "Spell Checker"
+#~ msgstr "בודק איות"
+#~ msgid "Suggestions for the word:"
+#~ msgstr "הצעות עבור המילה:"
+#~ msgid "Closed"
+#~ msgstr "סגור"
+#~ msgid "End this call?"
+#~ msgstr "לסיים את השיחה?"
+#~ msgid "Empathy Call"
+#~ msgstr "שיחת Empathy"
+#~ msgid "Ringing"
+#~ msgstr "מצלצל"
+#~ msgid "#"
+#~ msgstr "#"
+#~ msgid "*"
+#~ msgstr "*"
+#~ msgid "0"
+#~ msgstr "0"
+#~ msgid "1"
+#~ msgstr "1"
+#~ msgid "2"
+#~ msgstr "2"
+#~ msgid "3"
+#~ msgstr "3"
+#~ msgid "4"
+#~ msgstr "4"
+#~ msgid "5"
+#~ msgstr "5"
+#~ msgid "6"
+#~ msgstr "6"
+#~ msgid "7"
+#~ msgstr "7"
+#~ msgid "8"
+#~ msgstr "8"
+#~ msgid "9"
+#~ msgstr "9"
+#~ msgid "<b>Keypad</b>"
+#~ msgstr "<b>לוח מקשים</b>"
+#~ msgid "C_lear"
+#~ msgstr "נ_קה"
+#~ msgid "Chat"
+#~ msgstr "שיחה"
+#~ msgid "Insert _Smiley"
+#~ msgstr "הכנס _סמיילי"
+#~ msgid "Invitation _message:"
+#~ msgstr "הודעת הזמ_נה:"
+#~ msgid "Invite"
+#~ msgstr "הזמן"
+#~ msgid "Move Tab _Left"
+#~ msgstr "הזז לשונית _שמאלה"
+#~ msgid "Move Tab _Right"
+#~ msgstr "הזז לשונית _ימינה"
+#~ msgid "_Contact"
+#~ msgstr "_איש קשר"
+#~ msgid "_Conversation"
+#~ msgstr "_שיחה"
+#~ msgid "_Detach Tab"
+#~ msgstr "_נתק לשונית"
+
+#~| msgid "_Invite to Chat Room"
+#~ msgid "_Favorite Chatroom"
+#~ msgstr "_הזמן לחדר שיחה"
+#~ msgid "_Next Tab"
+#~ msgstr "_לשונית הבאה"
+#~ msgid "_Previous Tab"
+#~ msgstr "_לשונית קודמת"
+#~ msgid "_Tabs"
+#~ msgstr "_לשוניות"
+#~ msgid "Edit Favorite Room"
+#~ msgstr "ערוך חדר מועדף"
+#~ msgid "N_ame:"
+#~ msgstr "ש_ם:"
+#~ msgid "S_erver:"
+#~ msgstr "ש_רת:"
+#~| msgid "unknown"
+#~ msgctxt "file size"
+#~ msgid "Unknown"
+#~ msgstr "לא ידוע"
+#~| msgid "unknown"
+#~ msgctxt "remaining time"
+#~ msgid "Unknown"
+#~ msgstr "לא ידוע"
+#~| msgid "_Send File..."
+#~ msgid "Save file as..."
+#~ msgstr "_שלח קובץ..."
+#~| msgid "unknown"
+#~ msgid "unknown size"
+#~ msgstr "גודל לא ידוע"
+#~| msgid "I would like to add you to my contact list."
+#~ msgid "%s would like to send you a file"
+#~ msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי."
+#~| msgid "_Accounts"
+#~ msgid "_Accept"
+#~ msgstr "_חשבונות"
+#~ msgid "gtk-cancel"
+#~ msgstr "gtk-cancel"
+#~ msgid "Browse:"
+#~ msgstr "עיין:"
+#~ msgid "Re_fresh"
+#~ msgstr "רע_נן"
 #~ msgid "Enable sound when busy"
 #~ msgstr "Enable sound when busy"
-
 #~ msgid "Configure Telepathy account settings"
 #~ msgstr "הגדרות חשבון Telepathy"
-
 #~ msgid "<b>No Accounts Configured</b>"
 #~ msgstr "<b>לא הוגדרו חשבונות</b>"
-
 #~ msgid "Invitation Error"
 #~ msgstr "שגיאת הזמנה"
-
 #~ msgid "<b>Audio</b>"
 #~ msgstr "<b>צליל</b>"
-
 #~ msgid "<b>Visual</b>"
 #~ msgstr "<b>חזותי</b>"
-
-#~ msgid "Notifications"
-#~ msgstr "התרעות"
-
 #~ msgid "J_apan server:"
 #~ msgstr "שרת _יפן:"
-
 #~ msgid "Invalid account"
 #~ msgstr "חשבון לא תקין"
-
 #, fuzzy
 #~ msgid "Presence failure"
 #~ msgstr "Presence"
-
 #~ msgid "Unknown error code"
 #~ msgstr "מספר שגיאה לא ידוע"
-
 #~ msgid "jabber account settings"
 #~ msgstr "הגדרות חשבון jabber"
-
 #~ msgid "msn account settings"
 #~ msgstr "הגדרות חשבון msn"
-
 #~ msgid "salut account settings"
 #~ msgstr "הגדרות חשבון salut"
-
 #~ msgid "Input"
 #~ msgstr "קלט"
-
 #~ msgid "Mute"
 #~ msgstr "השתק"
-
 #~ msgid "Output"
 #~ msgstr "פלט"
-
 #~ msgid "Cu_t"
 #~ msgstr "ג_זור"
-
 #~ msgid "In_vite..."
 #~ msgstr "הז_מן..."
-
 #~ msgid "_Add To Favorites"
 #~ msgstr "_הוסף למועדפים"
-
 #~ msgid "_Copy"
 #~ msgstr "_העתק"
-
-#~ msgid "_Paste"
-#~ msgstr "_הדבק"
-
 #~ msgid "_Show Contacts"
 #~ msgstr "_הצג אנשי קשר"
-
 #~ msgid "Re_name"
 #~ msgstr "שנה _שם"
-
 #~ msgid "Rename"
 #~ msgstr "שנה שם"
-
 #~ msgid "Start a voice or video conversation with this contact"
 #~ msgstr "התחל שיחת קול או וידאו עם איש קשר הזה"
-
-#~ msgid "<b>Options</b>"
-#~ msgstr "<b>אפשרויות</b>"
-
 #~ msgid "_Use for chat rooms"
 #~ msgstr "_שימוש בחדרי שיחה"
-
 #~ msgid "%s went offline"
 #~ msgstr "‏%s התנתק"
-
 #~ msgid "%s has come online"
 #~ msgstr "‏%s התחבר"
+
index fdd8056a4af86369bfcd4e171caafe3f313a902b..bf3f4247e624a4aa8955adb70cfd21ed195136f8 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: empathy 0.24.x\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-06 15:15+0100\n"
-"PO-Revision-Date: 2009-02-06 15:17+0100\n"
+"POT-Creation-Date: 2009-06-10 10:03+0200\n"
+"PO-Revision-Date: 2009-06-10 10:13+0200\n"
 "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
 "Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n"
 "MIME-Version: 1.0\n"
@@ -59,252 +59,305 @@ msgid "Default directory to select an avatar image from"
 msgstr "Forvalgt mappe for personbilde"
 
 #: ../data/empathy.schemas.in.h:8
-#, fuzzy
 msgid "Disable popup notifications when away"
-msgstr "Slå av lyder når du er borte"
+msgstr "Slå av varsling når du er borte"
 
 #: ../data/empathy.schemas.in.h:9
 msgid "Disable sounds when away"
 msgstr "Slå av lyder når du er borte"
 
 #: ../data/empathy.schemas.in.h:10
+msgid "Empathy can publish the user's location"
+msgstr "Empathy kan publisere brukers lokasjon"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Empathy can use the GPS to guess the location"
+msgstr "Empathy kan bruke GPS til å gjette lokasjonen"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Empathy can use the cellular network to guess the location"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Empathy can use the network to guess the location"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
 msgid "Empathy default download folder"
 msgstr "Forvalgt nedlastingsmappe for Empathy"
 
-#: ../data/empathy.schemas.in.h:11
+#: ../data/empathy.schemas.in.h:15
 msgid "Empathy has asked about importing accounts"
 msgstr "Empathy har spurt om import av kontoer"
 
-#: ../data/empathy.schemas.in.h:12
+#: ../data/empathy.schemas.in.h:16
 msgid "Empathy should auto-connect on startup"
 msgstr "Empathy skal koble til automatisk ved oppstart"
 
-#: ../data/empathy.schemas.in.h:13
+#: ../data/empathy.schemas.in.h:17
+#, fuzzy
+msgid "Empathy should reduce the location's accuracy"
+msgstr "Empathy skal koble til automatisk ved oppstart"
+
+#: ../data/empathy.schemas.in.h:18
 msgid "Empathy should use the avatar of the contact as the chat window icon"
 msgstr ""
 "Empathy skal bruke personbildet for kontakten som ikon for pratevinduet"
 
-#: ../data/empathy.schemas.in.h:14
+#: ../data/empathy.schemas.in.h:19
 #, fuzzy
 msgid "Enable popup notifications for new messages"
 msgstr "_Aktiver varsling med lyder"
 
-#: ../data/empathy.schemas.in.h:15
+#: ../data/empathy.schemas.in.h:20
 msgid "Enable spell checker"
 msgstr "Bruk stavekontroll"
 
-#: ../data/empathy.schemas.in.h:16
+#: ../data/empathy.schemas.in.h:21
 msgid "Hide main window"
 msgstr "Skjul hovedvinduet"
 
-#: ../data/empathy.schemas.in.h:17
+#: ../data/empathy.schemas.in.h:22
 msgid "Hide the main window."
 msgstr "Skjul hovedvinduet."
 
-#: ../data/empathy.schemas.in.h:18
+#: ../data/empathy.schemas.in.h:23
 msgid "NetworkManager should be used"
 msgstr "NetworkManager skal brukes"
 
-#: ../data/empathy.schemas.in.h:19
+#: ../data/empathy.schemas.in.h:24
 msgid "Nick completed character"
 msgstr "Tegn for fullføring av kallenavn"
 
-#: ../data/empathy.schemas.in.h:20
+#: ../data/empathy.schemas.in.h:25
 msgid "Open new chats in separate windows"
 msgstr "Åpne nye samtaler i egne vinduer"
 
-#: ../data/empathy.schemas.in.h:21
+#: ../data/empathy.schemas.in.h:26
 msgid "Play a sound for incoming messages"
 msgstr "Spill av lyd når meldinger kommer inn"
 
-#: ../data/empathy.schemas.in.h:22
+#: ../data/empathy.schemas.in.h:27
 msgid "Play a sound for new conversations"
 msgstr "Spill av lyd ved nye samtaler"
 
-#: ../data/empathy.schemas.in.h:23
+#: ../data/empathy.schemas.in.h:28
 msgid "Play a sound for outgoing messages"
 msgstr "Spill av lyd for utgående meldinger"
 
-#: ../data/empathy.schemas.in.h:24
+#: ../data/empathy.schemas.in.h:29
 msgid "Play a sound when a contact logs in"
 msgstr "Spill av lyd når kontakter logger inn"
 
-#: ../data/empathy.schemas.in.h:25
+#: ../data/empathy.schemas.in.h:30
 msgid "Play a sound when a contact logs out"
 msgstr "Spill av lyd når kontakter logger ut"
 
-#: ../data/empathy.schemas.in.h:26
+#: ../data/empathy.schemas.in.h:31
 msgid "Play a sound when we log in"
 msgstr "Spill av lyd når du logger inn"
 
-#: ../data/empathy.schemas.in.h:27
+#: ../data/empathy.schemas.in.h:32
 msgid "Play a sound when we log out"
 msgstr "Spill av lyd når du logger ut"
 
-#: ../data/empathy.schemas.in.h:28
+#: ../data/empathy.schemas.in.h:33
 msgid "Popup notifications if the chat isn't focused"
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:29
+#: ../data/empathy.schemas.in.h:34
 msgid "Salut account is created"
 msgstr "Salut-konto er opprettet"
 
-#: ../data/empathy.schemas.in.h:30
+#: ../data/empathy.schemas.in.h:35
 msgid "Show avatars"
 msgstr "Vis personbilder"
 
-#: ../data/empathy.schemas.in.h:31
+#: ../data/empathy.schemas.in.h:36
 msgid "Show hint about closing the main window"
 msgstr "Vis hint om lukking av hovedvinduet"
 
-#: ../data/empathy.schemas.in.h:32
+#: ../data/empathy.schemas.in.h:37
 msgid "Show offline contacts"
 msgstr "Vis frakoblede kontakter"
 
-#: ../data/empathy.schemas.in.h:33
+#: ../data/empathy.schemas.in.h:38
 msgid "Spell checking languages"
 msgstr "Stavekontrollspråk"
 
-#: ../data/empathy.schemas.in.h:34
+#: ../data/empathy.schemas.in.h:39
 msgid "The default folder to save file transfers in."
 msgstr "Forvalgt mappe for lagring av filoverføringer."
 
-#: ../data/empathy.schemas.in.h:35
+#: ../data/empathy.schemas.in.h:40
 msgid "The last directory that an avatar image was chosen from."
 msgstr "Den forrige mappen et personbilde ble valgt fra."
 
-#: ../data/empathy.schemas.in.h:36
+#: ../data/empathy.schemas.in.h:41
 msgid "The theme that is used to display the conversation in chat windows."
 msgstr "Temaet som brukes til å vise samtaler."
 
-#: ../data/empathy.schemas.in.h:37
+#: ../data/empathy.schemas.in.h:42
 msgid "Use graphical smileys"
 msgstr "Vis smilefjes grafisk"
 
-#: ../data/empathy.schemas.in.h:38
+#: ../data/empathy.schemas.in.h:43
 msgid "Use notification sounds"
 msgstr "Bruk varslingslyder"
 
-#: ../data/empathy.schemas.in.h:39
+#: ../data/empathy.schemas.in.h:44
 msgid "Use theme for chat rooms"
 msgstr "Bruk tema for samtalerom"
 
-#: ../data/empathy.schemas.in.h:40
+#: ../data/empathy.schemas.in.h:45
+#, fuzzy
+msgid "Whether or not Empathy can publish the user's location to his contacts."
+msgstr "Om kontakter som er frakoblet skal vises i kontaktlisten."
+
+#: ../data/empathy.schemas.in.h:46
+#, fuzzy
+msgid "Whether or not Empathy can use the GPS to guess the location."
+msgstr ""
+"Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet."
+
+#: ../data/empathy.schemas.in.h:47
+#, fuzzy
+msgid ""
+"Whether or not Empathy can use the cellular network to guess the location."
+msgstr ""
+"Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet."
+
+#: ../data/empathy.schemas.in.h:48
+#, fuzzy
+msgid "Whether or not Empathy can use the network to guess the location."
+msgstr ""
+"Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet."
+
+#: ../data/empathy.schemas.in.h:49
 msgid ""
 "Whether or not Empathy has asked about importing accounts from other "
 "programs."
 msgstr "Om Empathy har spurt om import av kontoer fra andre programmer."
 
-#: ../data/empathy.schemas.in.h:41
+#: ../data/empathy.schemas.in.h:50
 msgid ""
 "Whether or not Empathy should automatically log in to your accounts on "
 "startup."
 msgstr "Om Empathy skal logge inn til dine kontoer automatisk ved oppstart."
 
-#: ../data/empathy.schemas.in.h:42
+#: ../data/empathy.schemas.in.h:51
+#, fuzzy
+msgid ""
+"Whether or not Empathy should reduce the location's accuracy for privacy "
+"reasons."
+msgstr ""
+"Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet."
+
+#: ../data/empathy.schemas.in.h:52
 msgid ""
 "Whether or not Empathy should use the avatar of the contact as the chat "
 "window icon."
 msgstr ""
 "Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet."
 
-#: ../data/empathy.schemas.in.h:43
+#: ../data/empathy.schemas.in.h:53
 msgid ""
 "Whether or not the Salut account has been created on the first Empathy run."
 msgstr "Om Salut-konto ble opprettet første gang Empathy ble kjørt."
 
-#: ../data/empathy.schemas.in.h:44
+#: ../data/empathy.schemas.in.h:54
 msgid ""
 "Whether or not the network manager should be used to automatically "
 "disconnect/reconnect."
 msgstr "Om NetworkManager skal brukes til å koble til/fra automatisk."
 
-#: ../data/empathy.schemas.in.h:45
+#: ../data/empathy.schemas.in.h:55
 msgid ""
 "Whether or not to check words typed against the languages you want to check "
 "with."
 msgstr "Om stavekontroll skal sjekke ord mot de språkene du ønsker å bruke."
 
-#: ../data/empathy.schemas.in.h:46
+#: ../data/empathy.schemas.in.h:56
 msgid ""
 "Whether or not to convert smileys into graphical images in conversations."
 msgstr "Om smilefjes skal konverteres til grafikk i samtaler."
 
-#: ../data/empathy.schemas.in.h:47
-msgid "Whether or not to play a sound notifications when away or busy."
-msgstr "Om lyder skal spilles av når du er borte eller opptatt."
-
-#: ../data/empathy.schemas.in.h:48
+#: ../data/empathy.schemas.in.h:57
 #, fuzzy
 msgid ""
 "Whether or not to play a sound to notify for contacts logging in the network."
 msgstr "Om bilder av kontakter skal vises i kontaktlisten og samtalevinduer."
 
-#: ../data/empathy.schemas.in.h:49
+#: ../data/empathy.schemas.in.h:58
 #, fuzzy
 msgid ""
 "Whether or not to play a sound to notify for contacts logging off the "
 "network."
 msgstr "Om bilder av kontakter skal vises i kontaktlisten og samtalevinduer."
 
-#: ../data/empathy.schemas.in.h:50
+#: ../data/empathy.schemas.in.h:59
 #, fuzzy
 msgid "Whether or not to play a sound to notify for events."
 msgstr "Om lyder skal spilles av når opptatt."
 
-#: ../data/empathy.schemas.in.h:51
+#: ../data/empathy.schemas.in.h:60
 #, fuzzy
 msgid "Whether or not to play a sound to notify for incoming messages."
 msgstr "Om lyder skal spilles av når meldinger kommer inn."
 
-#: ../data/empathy.schemas.in.h:52
+#: ../data/empathy.schemas.in.h:61
 #, fuzzy
 msgid "Whether or not to play a sound to notify for new conversations."
 msgstr "Om lyder skal spilles av når meldinger kommer inn."
 
-#: ../data/empathy.schemas.in.h:53
+#: ../data/empathy.schemas.in.h:62
 #, fuzzy
 msgid "Whether or not to play a sound to notify for outgoing messages."
 msgstr "Om lyder skal spilles av når meldinger kommer inn."
 
-#: ../data/empathy.schemas.in.h:54
+#: ../data/empathy.schemas.in.h:63
 #, fuzzy
 msgid "Whether or not to play a sound when logging in a network."
 msgstr "Om lyder skal spilles av når borte."
 
-#: ../data/empathy.schemas.in.h:55
+#: ../data/empathy.schemas.in.h:64
 #, fuzzy
 msgid "Whether or not to play a sound when logging off a network."
 msgstr "Om lyder skal spilles av når borte."
 
-#: ../data/empathy.schemas.in.h:56
+#: ../data/empathy.schemas.in.h:65
+#, fuzzy
+msgid "Whether or not to play sound notifications when away or busy."
+msgstr "Om lyder skal spilles av når du er borte eller opptatt."
+
+#: ../data/empathy.schemas.in.h:66
 msgid ""
 "Whether or not to show a popup notification when receiving a new message "
 "even if the chat is already opened, but not focused."
 msgstr ""
 
-#: ../data/empathy.schemas.in.h:57
+#: ../data/empathy.schemas.in.h:67
 #, fuzzy
 msgid ""
 "Whether or not to show a popup notification when receiving a new message."
 msgstr "Om lyder skal spilles av når du er borte eller opptatt."
 
-#: ../data/empathy.schemas.in.h:58
+#: ../data/empathy.schemas.in.h:68
 msgid ""
 "Whether or not to show avatars for contacts in the contact list and chat "
 "windows."
 msgstr "Om bilder av kontakter skal vises i kontaktlisten og samtalevinduer."
 
-#: ../data/empathy.schemas.in.h:59
+#: ../data/empathy.schemas.in.h:69
 msgid "Whether or not to show contacts that are offline in the contact list."
 msgstr "Om kontakter som er frakoblet skal vises i kontaktlisten."
 
-#: ../data/empathy.schemas.in.h:60
+#: ../data/empathy.schemas.in.h:70
 #, fuzzy
 msgid "Whether or not to show popup notifications when away or busy."
 msgstr "Om lyder skal spilles av når du er borte eller opptatt."
 
-#: ../data/empathy.schemas.in.h:61
+#: ../data/empathy.schemas.in.h:71
 msgid ""
 "Whether or not to show the message dialog about closing the main window with "
 "the 'x' button in the title bar."
@@ -312,15 +365,15 @@ msgstr ""
 "Om meldingsdialog om lukking av vinduet med «x»-knappen i tittelfeltet skal "
 "vises."
 
-#: ../data/empathy.schemas.in.h:62
+#: ../data/empathy.schemas.in.h:72
 msgid "Whether to show the contact list in compact mode or not."
 msgstr "Om kontaktlisten skal vises i kompakt modus."
 
-#: ../data/empathy.schemas.in.h:63
+#: ../data/empathy.schemas.in.h:73
 msgid "Whether to use the theme for chat rooms or not."
 msgstr "Om tema skal brukes for praterom eller ikke."
 
-#: ../data/empathy.schemas.in.h:64
+#: ../data/empathy.schemas.in.h:74
 msgid ""
 "Which criterium to use when sorting the contact list. Default is to use sort "
 "by the contact's name with the value \"name\". A value of \"state\" will "
@@ -330,541 +383,704 @@ msgstr ""
 "å sortere kontakter etter verdien «name». Hvis man bruker «state» vil "
 "kontaktlisten sorteres etter kontaktens tilstand."
 
-#: ../libempathy/empathy-tp-contact-list.c:731 ../src/empathy.c:269
+#: ../libempathy/empathy-ft-handler.c:838
+msgid "The hash of the received file and the sent one do not match"
+msgstr ""
+
+#: ../libempathy/empathy-ft-handler.c:1098
+msgid "File transfer not supported by remote contact"
+msgstr ""
+
+#: ../libempathy/empathy-tp-contact-list.c:757 ../src/empathy.c:286
 msgid "People nearby"
 msgstr "Personer i nærheten"
 
-#: ../libempathy/empathy-utils.c:252
+#: ../libempathy/empathy-tp-file.c:300
+msgid "No reason was specified"
+msgstr "Ingen årsak oppgitt"
+
+#: ../libempathy/empathy-tp-file.c:303
+msgid "The change in state was requested"
+msgstr "Tilstandsendring ble etterspurt"
+
+#: ../libempathy/empathy-tp-file.c:306
+msgid "You canceled the file transfer"
+msgstr "Du avbrøt filoverføringen"
+
+#: ../libempathy/empathy-tp-file.c:309
+msgid "The other participant canceled the file transfer"
+msgstr "Avsender avbrøt filoverføringen"
+
+#: ../libempathy/empathy-tp-file.c:312
+msgid "Error while trying to transfer the file"
+msgstr "Feil under overføring av filen"
+
+#: ../libempathy/empathy-tp-file.c:315
+msgid "The other participant is unable to transfer the file"
+msgstr "Avsender kan ikke overføre filen"
+
+#: ../libempathy/empathy-tp-file.c:318
+msgid "Unknown reason"
+msgstr "Ukjent årsak"
+
+#: ../libempathy/empathy-utils.c:274
 msgid "Available"
 msgstr "Tilgjengelig"
 
-#: ../libempathy/empathy-utils.c:254
+#: ../libempathy/empathy-utils.c:276
 msgid "Busy"
 msgstr "Opptatt"
 
-#: ../libempathy/empathy-utils.c:257
+#: ../libempathy/empathy-utils.c:279
 msgid "Away"
 msgstr "Borte"
 
-#: ../libempathy/empathy-utils.c:259
+#: ../libempathy/empathy-utils.c:281
 msgid "Hidden"
 msgstr "Skjult"
 
-#: ../libempathy/empathy-utils.c:262
+#: ../libempathy/empathy-utils.c:283
 msgid "Offline"
 msgstr "Frakoblet"
 
-#: ../libempathy-gtk/empathy-account-chooser.c:326
+#: ../libempathy/empathy-time.c:137
+#, c-format
+msgid "%d second ago"
+msgid_plural "%d seconds ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:142
+#, c-format
+msgid "%d minute ago"
+msgid_plural "%d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:147
+#, c-format
+msgid "%d hour ago"
+msgid_plural "%d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:152
+#, c-format
+msgid "%d day ago"
+msgid_plural "%d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:157
+#, c-format
+msgid "%d month ago"
+msgid_plural "%d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy/empathy-time.c:162
+msgid "in the future"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-chooser.c:419
 msgid "All"
 msgstr "Alle"
 
 #: ../libempathy-gtk/empathy-account-widget.c:302
-#: ../libempathy-gtk/empathy-account-widget.c:347
+#: ../libempathy-gtk/empathy-account-widget.c:354
 #, c-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1
 msgid "<b>Advanced</b>"
 msgstr "<b>Avansert</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
-msgid "Forget password and clear the entry."
-msgstr "Glem passord og tøm oppføringen."
-
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2
 msgid "Pass_word:"
 msgstr "_Passord:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3
 msgid "Screen _Name:"
 msgstr "Skjerm_navn:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7
 msgid "_Port:"
 msgstr "_Port:"
 
-#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
-#: ../src/empathy-new-chatroom-dialog.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
+#: ../src/empathy-new-chatroom-dialog.ui.h:9
 msgid "_Server:"
 msgstr "_Tjener:"
 
-#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
-#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2
 msgid "Login I_D:"
 msgstr "InnloggingsI_D:"
 
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2
 msgid "ICQ _UIN:"
 msgstr "ICQ _UIN:"
 
-#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5
 msgid "_Charset:"
 msgstr "_Tegnsett:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+#: ../libempathy-gtk/empathy-account-widget-irc.c:241
 msgid "New Network"
 msgstr "Nytt nettverk"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:1
 msgid "<b>Network</b>"
 msgstr "<b>Nettverk</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2
 msgid "<b>Servers</b>"
 msgstr "<b>Tjenere</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3
 msgid "Charset:"
 msgstr "Tegnsett:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
-msgid "Create a new IRC network"
-msgstr "Opprett et nytt IRC-nettverk"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
-msgid "Edit the selected IRC network"
-msgstr "Rediger valgt IRC-nettverk"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4
 msgid "Network"
 msgstr "Nettverk"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
 msgid "Network:"
 msgstr "Nettverk:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
 msgid "Nickname:"
 msgstr "Kallenavn:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
 msgid "Password:"
 msgstr "Passord:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
 msgid "Quit message:"
 msgstr "Melding ved frakobling:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
 msgid "Real name:"
 msgstr "Virkelig navn:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
-msgid "Remove the selected IRC network"
-msgstr "Fjern valgt IRC-nettverk"
-
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2
 msgid "<b>Override server settings</b>"
 msgstr "<b>Overstyr innstillinger for tjener</b>"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5
 msgid "Pri_ority:"
 msgstr "Pri_oritet:"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6
 msgid "Reso_urce:"
 msgstr "_Ressurs:"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
 msgid "Use old SS_L"
 msgstr "Bruk gammel SS_L"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8
 msgid "_Encryption required (TLS/SSL)"
 msgstr "Krypt_ering kreves (TLS/SSL)"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9
 msgid "_Ignore SSL certificate errors"
 msgstr "_Ignorer feil med SSL-sertifikater"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2
 msgid "_Email:"
 msgstr "_E-post:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3
 msgid "_First Name:"
 msgstr "_Fornavn:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4
 msgid "_Jabber ID:"
 msgstr "_Jabber-ID:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5
 msgid "_Last Name:"
 msgstr "_Etternavn:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
-#: ../src/empathy-chatrooms-window.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6
 msgid "_Nickname:"
 msgstr "Kalle_navn:"
 
-#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7
 msgid "_Published Name:"
 msgstr "_Publisert navn:"
 
 #. look up the DNS SRV record at the service's domain for the host name of a STUN server.
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3
 msgid "Discover STUN"
 msgstr "Søk etter STUN"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5
 msgid "STUN Server:"
 msgstr "STUN-tjener:"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6
 msgid "STUN port:"
 msgstr "STUN-port:"
 
-#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7
 msgid "_Username:"
 msgstr "Br_ukernavn:"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3
 msgid "Use _Yahoo Japan"
 msgstr "Bruk _Yahoo Japan"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4
 msgid "Yahoo I_D:"
 msgstr "Yahoo-I_D:"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6
 msgid "_Ignore conference and chatroom invitations"
 msgstr "_Ignorer invitasjoner til konferanser og praterom"
 
-#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8
 msgid "_Room List locale:"
 msgstr "Locale for _romliste:"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:462
-#: ../libempathy-gtk/empathy-avatar-chooser.c:537
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+#: ../libempathy-gtk/empathy-avatar-chooser.c:525
 msgid "Couldn't convert image"
 msgstr "Kunne ikke konvertere bilde"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:463
+#: ../libempathy-gtk/empathy-avatar-chooser.c:450
 msgid "None of the accepted image formats is supported on your system"
 msgstr "Ingen av de godkjente bildeformatene støttes av ditt system"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:956
+#: ../libempathy-gtk/empathy-avatar-chooser.c:933
 msgid "Select Your Avatar Image"
 msgstr "Velg personbilde"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:959
+#: ../libempathy-gtk/empathy-avatar-chooser.c:936
 msgid "No Image"
 msgstr "Ingen bilde"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:1021
+#: ../libempathy-gtk/empathy-avatar-chooser.c:998
 msgid "Images"
 msgstr "Bilder"
 
-#: ../libempathy-gtk/empathy-avatar-chooser.c:1025
+#: ../libempathy-gtk/empathy-avatar-chooser.c:1002
 msgid "All Files"
 msgstr "Alle filer"
 
-#: ../libempathy-gtk/empathy-avatar-image.c:294
+#: ../libempathy-gtk/empathy-avatar-image.c:324
 msgid "Click to enlarge"
 msgstr "Klikk for å forstørre"
 
-#: ../libempathy-gtk/empathy-chat.c:507
+#: ../libempathy-gtk/empathy-chat.c:178
+msgid "Failed to reconnect this chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:396
+msgid "Unsupported command"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:531
 msgid "offline"
 msgstr "frakoblet"
 
-#: ../libempathy-gtk/empathy-chat.c:510
+#: ../libempathy-gtk/empathy-chat.c:534
 msgid "invalid contact"
 msgstr "ugyldig kontakt"
 
-#: ../libempathy-gtk/empathy-chat.c:513
+#: ../libempathy-gtk/empathy-chat.c:537
 msgid "permission denied"
 msgstr "tilgang nektet"
 
-#: ../libempathy-gtk/empathy-chat.c:516
+#: ../libempathy-gtk/empathy-chat.c:540
 msgid "too long message"
 msgstr "meldingen er for lang"
 
-#: ../libempathy-gtk/empathy-chat.c:519
+#: ../libempathy-gtk/empathy-chat.c:543
 msgid "not implemented"
 msgstr "ikke implementert"
 
-#: ../libempathy-gtk/empathy-chat.c:522
+#: ../libempathy-gtk/empathy-chat.c:546
 msgid "unknown"
 msgstr "ukjent"
 
-#: ../libempathy-gtk/empathy-chat.c:526
+#: ../libempathy-gtk/empathy-chat.c:550
 #, c-format
 msgid "Error sending message '%s': %s"
 msgstr "Feil ved sending av melding «%s»: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:556
+#: ../libempathy-gtk/empathy-chat.c:580
 #, c-format
 msgid "Topic set to: %s"
 msgstr "Emnet er satt til: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:558
+#: ../libempathy-gtk/empathy-chat.c:582
 msgid "No topic defined"
 msgstr "Emne ikke definert"
 
-#: ../libempathy-gtk/empathy-chat.c:973
+#: ../libempathy-gtk/empathy-chat.c:951
+msgid "(No Suggestions)"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:1005
 msgid "Insert Smiley"
 msgstr "Sett inn smilefjes"
 
 #. send button
-#: ../libempathy-gtk/empathy-chat.c:991
-#: ../libempathy-gtk/empathy-ui-utils.c:1538
+#: ../libempathy-gtk/empathy-chat.c:1023
+#: ../libempathy-gtk/empathy-ui-utils.c:1453
 msgid "_Send"
 msgstr "_Send"
 
-#: ../libempathy-gtk/empathy-chat.c:1025
-msgid "_Check Word Spelling..."
-msgstr "_Stavekontroll ..."
+#: ../libempathy-gtk/empathy-chat.c:1057
+msgid "_Spelling Suggestions"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-chat.c:1131
+#: ../libempathy-gtk/empathy-chat.c:1171
 #, c-format
 msgid "%s has joined the room"
 msgstr "%s har blitt med i rommet"
 
-#: ../libempathy-gtk/empathy-chat.c:1134
+#: ../libempathy-gtk/empathy-chat.c:1174
 #, c-format
 msgid "%s has left the room"
 msgstr "%s har forlatt rommet"
 
-#: ../libempathy-gtk/empathy-chat.c:1248 ../src/empathy-call-window.c:466
+#: ../libempathy-gtk/empathy-chat.c:1289 ../src/empathy-call-window.c:1108
 msgid "Disconnected"
 msgstr "Koblet fra"
 
-#: ../libempathy-gtk/empathy-chat.c:1644
+#: ../libempathy-gtk/empathy-chat.c:1700
 msgid "Connected"
 msgstr "Koblet til"
 
-#: ../libempathy-gtk/empathy-chat.c:1694
-#: ../libempathy-gtk/empathy-log-window.c:505
+#: ../libempathy-gtk/empathy-chat.c:1750
+#: ../libempathy-gtk/empathy-log-window.c:501
 msgid "Conversation"
 msgstr "Samtale"
 
-#: ../libempathy-gtk/empathy-chat.glade.h:1
+#: ../libempathy-gtk/empathy-chat.ui.h:1
 msgid "<b>Topic:</b>"
 msgstr "<b>Emne:</b>"
 
-#: ../libempathy-gtk/empathy-chat.glade.h:2
-msgid "Group Chat"
-msgstr "Gruppesamtale"
-
-#: ../libempathy-gtk/empathy-chat-text-view.c:333
+#: ../libempathy-gtk/empathy-chat-text-view.c:323
 msgid "_Copy Link Address"
 msgstr "_Kopier lenkens adresse"
 
-#: ../libempathy-gtk/empathy-chat-text-view.c:341
+#: ../libempathy-gtk/empathy-chat-text-view.c:331
 msgid "_Open Link"
 msgstr "_Åpne lenke"
 
-#: ../libempathy-gtk/empathy-chat-text-view.c:432
-msgid "%A %d %B %Y"
+#. Translators: timestamp displayed between conversations in
+#. * chat windows (strftime format string)
+#: ../libempathy-gtk/empathy-chat-text-view.c:424
+msgid "%A %B %d %Y"
 msgstr "%A %d %B %Y"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:180
-msgid "Personal Information"
-msgstr "Personlig informasjon"
-
-#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+#: ../libempathy-gtk/empathy-contact-dialogs.c:238
 msgid "Edit Contact Information"
 msgstr "Endre kontaktinformasjon"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:186
-msgid "Contact Information"
-msgstr "Kontaktinformasjon"
-
-#: ../libempathy-gtk/empathy-contact-dialogs.c:266
-msgid "I would like to add you to my contact list."
-msgstr "Jeg ønsker å legge deg til i min kontaktliste."
+#: ../libempathy-gtk/empathy-contact-dialogs.c:289
+msgid "Personal Information"
+msgstr "Personlig informasjon"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:290
+#: ../libempathy-gtk/empathy-contact-dialogs.c:392
 msgid "New Contact"
 msgstr "Ny kontakt"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:1
 msgid "Decide _Later"
 msgstr "A_vgjør senere"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:2
 msgid "Subscription Request"
 msgstr "Abonnementsforespørsel"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1249
+#: ../libempathy-gtk/empathy-contact-list-view.c:1378
 #, 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:1251
+#: ../libempathy-gtk/empathy-contact-list-view.c:1380
 msgid "Removing group"
 msgstr "Fjerner gruppe"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1298
-#: ../libempathy-gtk/empathy-contact-list-view.c:1377
+#: ../libempathy-gtk/empathy-contact-list-view.c:1427
+#: ../libempathy-gtk/empathy-contact-list-view.c:1505
 msgid "_Remove"
 msgstr "Fje_rn"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1328
+#: ../libempathy-gtk/empathy-contact-list-view.c:1457
 #, 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:1330
+#: ../libempathy-gtk/empathy-contact-list-view.c:1459
 msgid "Removing contact"
 msgstr "Fjerner kontakt"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1335
-msgid "Sorry, I don't want you in my contact list anymore."
-msgstr "Beklager, men jeg vil ikke ha deg på kontaktlisten min lenger."
-
-#: ../libempathy-gtk/empathy-contact-menu.c:122
-#: ../src/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/empathy-contact-menu.c:135
+#: ../src/empathy-main-window.ui.h:8
 msgid "_Chat"
 msgstr "_Prat"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:153
-#: ../src/empathy-call-window.glade.h:5
-msgid "_Call"
-msgstr "_Ring"
+#: ../libempathy-gtk/empathy-contact-menu.c:166
+msgctxt "menu item"
+msgid "_Audio Call"
+msgstr "_Lydsamtale"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:198
+msgctxt "menu item"
+msgid "_Video Call"
+msgstr "_Videosamtale"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:192
-#: ../src/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-contact-menu.c:237
 msgid "_View Previous Conversations"
 msgstr "_Vis tidligere samtaler"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:214
+#: ../libempathy-gtk/empathy-contact-menu.c:259
 msgid "Send file"
 msgstr "Send fil"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:242
+#: ../libempathy-gtk/empathy-contact-menu.c:287
 msgid "Infor_mation"
 msgstr "Infor_masjon"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:269
-#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+#: ../libempathy-gtk/empathy-contact-menu.c:314
+#: ../src/empathy-main-window.ui.h:11
 msgid "_Edit"
 msgstr "_Rediger"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:328
+#: ../libempathy-gtk/empathy-contact-menu.c:372
 msgid "Inviting to this room"
 msgstr "Inviterer til dette rommet"
 
-#: ../libempathy-gtk/empathy-contact-menu.c:361
+#: ../libempathy-gtk/empathy-contact-menu.c:403
 msgid "_Invite to chatroom"
 msgstr "_Inviter til praterom"
 
-#: ../libempathy-gtk/empathy-contact-selector.c:111
+#: ../libempathy-gtk/empathy-contact-selector.c:129
 msgid "Select a contact"
 msgstr "Velg en kontakt"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:358
+#: ../libempathy-gtk/empathy-contact-widget.c:440
 msgid "Save Avatar"
 msgstr "Lagre personbilder"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:414
+#: ../libempathy-gtk/empathy-contact-widget.c:496
 msgid "Unable to save avatar"
 msgstr "Kan ikke lagre personbilde"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:895
+#: ../libempathy-gtk/empathy-contact-widget.c:979
 msgid "Select"
 msgstr "Velg"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:904
-#: ../src/empathy-main-window.c:991
+#: ../libempathy-gtk/empathy-contact-widget.c:988
+#: ../src/empathy-main-window.c:905
 msgid "Group"
 msgstr "Gruppe"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.c:1239
+msgid "Country ISO Code:"
+msgstr "ISO-kode for land:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1241
+msgid "Country:"
+msgstr "Land:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1243
+msgid "State:"
+msgstr "Tilstand:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1245
+msgid "City:"
+msgstr "By:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1247
+msgid "Area:"
+msgstr "Område:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1249
+msgid "Postal Code:"
+msgstr "Postkode:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1251
+msgid "Street:"
+msgstr "Gate:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1253
+msgid "Building:"
+msgstr "Bygning:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1255
+msgid "Floor:"
+msgstr "Etasje:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1257
+msgid "Room:"
+msgstr "Rom:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1259
+msgid "Text:"
+msgstr "Tekst:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1261
+msgid "Description:"
+msgstr "Beskrivelse:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1263
+msgid "URI:"
+msgstr "URI:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1265
+msgid "Accuracy Level:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1267
+msgid "Error:"
+msgstr "Feil:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1269
+msgid "Vertical Error (meters):"
+msgstr "Vertikal feil (meter):"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1271
+msgid "Horizontal Error (meters):"
+msgstr "Horisontal feil (meter):"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1273
+msgid "Speed:"
+msgstr "Hastighet:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1275
+msgid "Bearing:"
+msgstr "Retning:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1277
+msgid "Climb Speed:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1279
+msgid "Last Updated on:"
+msgstr "Sist oppdatert:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1281
+msgid "Longitude:"
+msgstr "Lengdegrad:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1283
+msgid "Latitude:"
+msgstr "Breddegrad:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1285
+msgid "Altitude:"
+msgstr "Høyde:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1332
+msgid "<b>Location</b>"
+msgstr "<b>Lokasjon</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1345
+msgid "<b>Location</b>, "
+msgstr "<b>Lokasjon</b>, "
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1395
+msgid "%B %e, %Y at %R UTC"
+msgstr "%B %e, %Y, %R UTC"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
 msgid "<b>Client Information</b>"
 msgstr "<b>Klientinformasjon</b>"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:2
 msgid "<b>Contact Details</b>"
 msgstr "<b>Kontaktdetaljer</b>"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:3
 msgid "<b>Contact</b>"
 msgstr "<b>Kontakt</b>"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:4
 msgid "<b>Groups</b>"
 msgstr "<b>Grupper</b>"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
-#: ../src/empathy-chatrooms-window.glade.h:1
-#: ../src/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:5
+msgid "<b>Location</b> at (date)\t"
+msgstr "<b>Lokasjon</b> (dato)\t"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
+#: ../libempathy-gtk/empathy-new-message-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-contact-widget.glade.h:6
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:7
 msgid "Alias:"
 msgstr "Alias:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:8
 msgid "Birthday:"
 msgstr "Fødselsdag:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:9
 msgid "Client:"
 msgstr "Klient:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
-msgid "Contact information"
-msgstr "Kontaktinformasjon"
-
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:10
 msgid "Email:"
 msgstr "E-post:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:11
 msgid "Fullname:"
 msgstr "Fullt navn:"
 
 #. Identifier to connect to Instant Messaging network
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:13
 msgid "Identifier:"
 msgstr "Identifikator:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:14
 msgid "Information requested..."
 msgstr "Informasjon forespurt ..."
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:15
 msgid "OS:"
 msgstr "OS:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:16
 msgid ""
 "Select the groups you want this contact to appear in.  Note that you can "
 "select more than one group or no groups."
@@ -872,114 +1088,134 @@ msgstr ""
 "Velg gruppene du ønsker at denne kontakten skal vises i. Du kan velge flere "
 "eller ingen."
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:17
 msgid "Version:"
 msgstr "Versjon:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:18
 msgid "Web site:"
 msgstr "Nettsted:"
 
-#: ../libempathy-gtk/empathy-contact-widget.glade.h:19
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:19
 msgid "_Add Group"
 msgstr "_Legg til gruppe"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:283
 msgid "new server"
 msgstr "ny tjener"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:510
 msgid "Server"
 msgstr "Tjener"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:525
 msgid "Port"
 msgstr "Port"
 
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:538
 msgid "SSL"
 msgstr "SSL"
 
-#: ../libempathy-gtk/empathy-log-window.c:498
-#: ../src/empathy-import-dialog.c:276
+#: ../libempathy-gtk/empathy-log-window.c:494
+#: ../src/empathy-import-dialog.c:281
 msgid "Account"
 msgstr "Konto"
 
-#: ../libempathy-gtk/empathy-log-window.c:515
+#: ../libempathy-gtk/empathy-log-window.c:511
 msgid "Date"
 msgstr "Dato"
 
-#. Tab Label
-#: ../libempathy-gtk/empathy-log-window.glade.h:2
+#: ../libempathy-gtk/empathy-log-window.ui.h:1
 msgid "Conversations"
 msgstr "Samtaler"
 
-#: ../libempathy-gtk/empathy-log-window.glade.h:3
+#: ../libempathy-gtk/empathy-log-window.ui.h:2
 msgid "Previous Conversations"
 msgstr "Tidligere samtaler"
 
-#. Tab Label
-#: ../libempathy-gtk/empathy-log-window.glade.h:5
+#: ../libempathy-gtk/empathy-log-window.ui.h:3
 msgid "Search"
 msgstr "Søk"
 
-#. Searching *for* something
-#: ../libempathy-gtk/empathy-log-window.glade.h:7
+#: ../libempathy-gtk/empathy-log-window.ui.h:4
 msgid "_For:"
 msgstr "_For:"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:2
 msgid "C_all"
 msgstr "Ri_ng"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:3
 msgid "C_hat"
 msgstr "_Prat"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:4
 msgid "Contact ID:"
 msgstr "KontaktID:"
 
-#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:5
 msgid "New Conversation"
 msgstr "Ny samtale"
 
+#. COL_STATE_ICON_NAME
+#. COL_STATE
+#. COL_STATUS_TEXT
+#. COL_DISPLAY_MARKUP
+#. COL_STATUS_CUSTOMISABLE
+#. COL_TYPE
+#: ../libempathy-gtk/empathy-presence-chooser.c:172
+msgid "Custom Message..."
+msgstr "Egendefinert melding..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:227
+msgid "Edit Custom Messages..."
+msgstr "Rediger egendefinerte meldinger..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:326
+msgid "Click to remove this status as a favorite"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:335
+msgid "Click to make this status a favorite"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:369
+msgid "Set status"
+msgstr "Sett status"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:778
+msgid "Set your presence and current status"
+msgstr ""
+
 #. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:685
+#: ../libempathy-gtk/empathy-presence-chooser.c:1013
 msgid "Custom messages..."
 msgstr "Egendefinerte meldinger ..."
 
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
-msgid "Custom message"
-msgstr "Egendefinert melding"
-
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
-msgid "Message:"
-msgstr "Melding:"
-
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
-msgid "Save message"
-msgstr "Lagre melding"
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:362
+msgid "Enter Custom Message"
+msgstr "Oppgi egendefinert melding"
 
-#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
-msgid "Status:"
-msgstr "Status:"
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:521
+msgid "Edit Custom Messages"
+msgstr "Rediger egendefinerte meldinger"
 
-#: ../libempathy-gtk/empathy-spell-dialog.c:82
-msgid "Word"
-msgstr "Ord"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1
+msgid "Add _New Preset"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-spell-dialog.c:259
-msgid "Suggestions for the word"
-msgstr "Forslag for ordet"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2
+#, fuzzy
+msgid "Saved Presets"
+msgstr "Lagre melding"
 
-#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
-msgid "Spell Checker"
-msgstr "Stavekontroll"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3
+msgid "gtk-add"
+msgstr ""
 
-#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
-msgid "Suggestions for the word:"
-msgstr "Forslag for ordet:"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4
+msgid "gtk-remove"
+msgstr ""
 
 #: ../libempathy-gtk/empathy-theme-manager.c:60
 msgid "Classic"
@@ -997,51 +1233,55 @@ msgstr "Tøm"
 msgid "Blue"
 msgstr "Blå"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1385
+#: ../libempathy-gtk/empathy-ui-utils.c:1355
 msgid "Unable to open URI"
 msgstr "Kan ikke åpne URI"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1530
+#: ../libempathy-gtk/empathy-ui-utils.c:1445
 msgid "Select a file"
 msgstr "Velg en fil"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1566
+#: ../libempathy-gtk/empathy-ui-utils.c:1503
+msgid "Select a destination"
+msgstr "Velg en destinasjon"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1532
 msgid "Received an instant message"
 msgstr "Mottok en lynmelding"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1568
+#: ../libempathy-gtk/empathy-ui-utils.c:1534
 msgid "Sent an instant message"
 msgstr "Send en lynmelding"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1570
+#: ../libempathy-gtk/empathy-ui-utils.c:1536
 msgid "Incoming chat request"
 msgstr "Innkommende samtaleforespørsel"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1572
+#: ../libempathy-gtk/empathy-ui-utils.c:1538
 msgid "Contact connected"
 msgstr "Kontakt koblet til"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1574
+#: ../libempathy-gtk/empathy-ui-utils.c:1540
 msgid "Contact disconnected"
 msgstr "Kontakt koblet fra"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1576
+#: ../libempathy-gtk/empathy-ui-utils.c:1542
 msgid "Connected to server"
 msgstr "Koblet til tjener"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1578
+#: ../libempathy-gtk/empathy-ui-utils.c:1544
 msgid "Disconnected from server"
 msgstr "Koblet fra tjener"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1580
+#: ../libempathy-gtk/empathy-ui-utils.c:1546
 msgid "Incoming voice call"
 msgstr "Innkommende samtale"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1582
+#: ../libempathy-gtk/empathy-ui-utils.c:1548
 msgid "Outgoing voice call"
 msgstr "Utgående samtale"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1584
+#: ../libempathy-gtk/empathy-ui-utils.c:1550
 msgid "Voice call ended"
 msgstr "Samtale avsluttet"
 
@@ -1230,7 +1470,7 @@ msgid "Megaphone"
 msgstr "Megafon"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
-#: ../megaphone/src/megaphone-applet.c:417
+#: ../megaphone/src/megaphone-applet.c:527
 msgid "Talk!"
 msgstr "Snakk!"
 
@@ -1244,15 +1484,15 @@ msgid "_Information"
 msgstr "_Informasjon"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
-#: ../src/empathy-main-window.glade.h:15
+#: ../src/empathy-main-window.ui.h:18
 msgid "_Preferences"
 msgstr "_Brukervalg"
 
-#: ../megaphone/src/megaphone-applet.c:255
+#: ../megaphone/src/megaphone-applet.c:168
 msgid "Please configure a contact."
 msgstr "Vennligst konfigurer en kontakt."
 
-#: ../megaphone/src/megaphone-applet.c:348
+#: ../megaphone/src/megaphone-applet.c:258
 msgid "Select contact..."
 msgstr "Velg kontakt ..."
 
@@ -1265,19 +1505,19 @@ msgstr "Tilstedeværelse"
 msgid "Set your own presence"
 msgstr "Velg din egen tilstedeværelse"
 
-#: ../src/empathy.c:426
+#: ../src/empathy.c:476
 msgid "Don't connect on startup"
 msgstr "Ikke koble til ved oppstart"
 
-#: ../src/empathy.c:430
+#: ../src/empathy.c:480
 msgid "Don't show the contact list on startup"
 msgstr "Ikke vis kontaktlisten ved oppstart"
 
-#: ../src/empathy.c:434
+#: ../src/empathy.c:484
 msgid "Show the accounts dialog"
 msgstr "Vis kontovinduet"
 
-#: ../src/empathy.c:446
+#: ../src/empathy.c:496
 msgid "- Empathy Instant Messenger"
 msgstr "- Empathy lynmeldingsprogram"
 
@@ -1325,22 +1565,21 @@ msgstr ""
 "Sigurd Gartmann\n"
 "Espen Stefansen"
 
-#: ../src/empathy-accounts-dialog.c:391
+#: ../src/empathy-accounts-dialog.c:392
 msgid "Enabled"
 msgstr "Aktivert"
 
-#: ../src/empathy-accounts-dialog.c:401
-#: ../src/empathy-accounts-dialog.glade.h:4
+#: ../src/empathy-accounts-dialog.c:402 ../src/empathy-accounts-dialog.ui.h:4
 msgid "Accounts"
 msgstr "Kontoer"
 
 #. To translator: %s is the protocol name
-#: ../src/empathy-accounts-dialog.c:833
+#: ../src/empathy-accounts-dialog.c:836
 #, c-format
 msgid "New %s account"
 msgstr "Ny %s-konto"
 
-#: ../src/empathy-accounts-dialog.c:943
+#: ../src/empathy-accounts-dialog.c:947
 #, c-format
 msgid ""
 "You are about to remove your %s account!\n"
@@ -1349,7 +1588,7 @@ msgstr ""
 "Du holder på å fjerne din %s-konto!\n"
 "Er du sikker på at du vil dette?"
 
-#: ../src/empathy-accounts-dialog.c:949
+#: ../src/empathy-accounts-dialog.c:953
 msgid ""
 "Any associated conversations and chat rooms will NOT be removed if you "
 "decide to proceed.\n"
@@ -1362,31 +1601,31 @@ msgstr ""
 "\n"
 "Skulle du velge å legge til kontoen senere, vil de bli tilgjengelige igjen."
 
-#: ../src/empathy-accounts-dialog.glade.h:1
+#: ../src/empathy-accounts-dialog.ui.h:1
 msgid "<b>New Account</b>"
 msgstr "<b>Ny konto</b>"
 
-#: ../src/empathy-accounts-dialog.glade.h:2
+#: ../src/empathy-accounts-dialog.ui.h:2
 msgid "<b>No protocol installed</b>"
 msgstr "<b>Ingen protokoll installert</b>"
 
-#: ../src/empathy-accounts-dialog.glade.h:3
+#: ../src/empathy-accounts-dialog.ui.h:3
 msgid "<b>Settings</b>"
 msgstr "<b>Innstillinger</b>"
 
-#: ../src/empathy-accounts-dialog.glade.h:5
+#: ../src/empathy-accounts-dialog.ui.h:5
 msgid "Cr_eate"
 msgstr "Oppr_ett"
 
-#: ../src/empathy-accounts-dialog.glade.h:6
+#: ../src/empathy-accounts-dialog.ui.h:6
 msgid "I already have an account I want to use"
 msgstr "Jeg har allerede en konto jeg vil bruke"
 
-#: ../src/empathy-accounts-dialog.glade.h:7
+#: ../src/empathy-accounts-dialog.ui.h:7
 msgid "Import Accounts..."
 msgstr "Importer kontoer..."
 
-#: ../src/empathy-accounts-dialog.glade.h:8
+#: ../src/empathy-accounts-dialog.ui.h:8
 msgid ""
 "To add a new account, you first have to install a backend for each protocol "
 "you want to use."
@@ -1394,261 +1633,196 @@ msgstr ""
 "Du må installere en motor for hver protokoll du ønsker å bruke før du legger "
 "til en ny konto."
 
-#: ../src/empathy-accounts-dialog.glade.h:9
+#: ../src/empathy-accounts-dialog.ui.h:9
 msgid "Type:"
 msgstr "Type:"
 
-#: ../src/empathy-call-window.c:180
+#: ../src/empathy-accounts-dialog.ui.h:10
+msgid "_Add..."
+msgstr "_Legg til..."
+
+#: ../src/empathy-call-window.c:63
+msgid "Connecting..."
+msgstr "Kobler til..."
+
+#: ../src/empathy-call-window.c:405
 msgid "Contrast"
 msgstr "Kontrast"
 
-#: ../src/empathy-call-window.c:180
+#: ../src/empathy-call-window.c:408
 msgid "Brightness"
 msgstr "Lysstyrke"
 
-#: ../src/empathy-call-window.c:180
+#: ../src/empathy-call-window.c:411
 msgid "Gamma"
 msgstr "Gamma"
 
-#: ../src/empathy-call-window.c:212
+#: ../src/empathy-call-window.c:516
 msgid "Volume"
 msgstr "Volum"
 
-#: ../src/empathy-call-window.c:287
+#: ../src/empathy-call-window.c:697
 msgid "_Sidebar"
 msgstr "_Sidelinje"
 
-#: ../src/empathy-call-window.c:305
+#: ../src/empathy-call-window.c:716
 msgid "Dialpad"
 msgstr "Nummertavle"
 
-#: ../src/empathy-call-window.c:309
+#: ../src/empathy-call-window.c:722
 msgid "Audio input"
 msgstr ""
 
-#: ../src/empathy-call-window.c:313
+#: ../src/empathy-call-window.c:726
 msgid "Video input"
 msgstr ""
 
-#: ../src/empathy-call-window.c:326
-msgid "Connecting..."
-msgstr "Kobler til..."
+#: ../src/empathy-call-window.c:789
+#, c-format
+msgid "Call with %s"
+msgstr "Samtale med %s"
 
-#: ../src/empathy-call-window.c:489
+#: ../src/empathy-call-window.c:860
+msgid "Call"
+msgstr "Ring"
+
+#. Translators: number of minutes:seconds the caller has been connected
+#: ../src/empathy-call-window.c:1204
 #, c-format
-msgid "Connected -- %d:%02dm"
+msgid "Connected  %d:%02dm"
 msgstr "Koblet til - %d:%02dm"
 
-#: ../src/empathy-call-window.glade.h:1
+#: ../src/empathy-call-window.ui.h:1
 msgid "Hang up"
 msgstr "Legg på"
 
-#: ../src/empathy-call-window.glade.h:2
-msgid "Send Video"
-msgstr "Send video"
+#: ../src/empathy-call-window.ui.h:2
+msgid "Redial"
+msgstr ""
 
-#: ../src/empathy-call-window.glade.h:3
+#: ../src/empathy-call-window.ui.h:3
+msgid "Send Audio"
+msgstr "Send lyd"
+
+#: ../src/empathy-call-window.ui.h:4
 msgid "Send video"
 msgstr "Send video"
 
-#: ../src/empathy-call-window.glade.h:4
+#: ../src/empathy-call-window.ui.h:5
 msgid "Video preview"
 msgstr "Forhåndsvis video"
 
-#: ../src/empathy-call-window.glade.h:6
+#: ../src/empathy-call-window.ui.h:6
+msgid "_Call"
+msgstr "_Ring"
+
+#: ../src/empathy-call-window.ui.h:7 ../src/empathy-main-window.ui.h:21
 msgid "_View"
 msgstr "_Vis"
 
-#: ../src/empathy-call-window.glade.h:7
-msgid "menuitem2"
-msgstr ""
-
-#: ../src/empathy-chat-window.c:313
+#: ../src/empathy-chat-window.c:342
 #, c-format
 msgid "Conversations (%d)"
 msgstr "Samtaler (%d)"
 
-#: ../src/empathy-chat-window.c:418
+#: ../src/empathy-chat-window.c:470
 msgid "Topic:"
 msgstr "Emne:"
 
-#: ../src/empathy-chat-window.c:423
+#: ../src/empathy-chat-window.c:474
 msgid "Typing a message."
 msgstr "Skriver en melding"
 
-#: ../src/empathy-chat-window.c:892 ../src/empathy-event-manager.c:424
-#, fuzzy, c-format
+#: ../src/empathy-chat-window.c:935 ../src/empathy-event-manager.c:429
+#, c-format
 msgid "New message from %s"
-msgstr ""
-"Ny melding fra %s:\n"
-"%s"
-
-#: ../src/empathy-chat-window.glade.h:1
-msgid "C_lear"
-msgstr "T_øm"
-
-#: ../src/empathy-chat-window.glade.h:2
-msgid "Chat"
-msgstr "Prat"
-
-#: ../src/empathy-chat-window.glade.h:3
-msgid "Insert _Smiley"
-msgstr "Sett inn _smilefjes"
-
-#: ../src/empathy-chat-window.glade.h:4
-msgid "Invitation _message:"
-msgstr "Invitasjons_melding:"
-
-#: ../src/empathy-chat-window.glade.h:5
-msgid "Invite"
-msgstr "Inviter"
-
-#: ../src/empathy-chat-window.glade.h:6
-msgid "Move Tab _Left"
-msgstr "Flytt fane til _venstre"
-
-#: ../src/empathy-chat-window.glade.h:7
-msgid "Move Tab _Right"
-msgstr "Flytt fane til _høyre"
-
-#: ../src/empathy-chat-window.glade.h:8
-msgid "Select who would you like to invite:"
-msgstr "Velg de du vil invitere:"
-
-#: ../src/empathy-chat-window.glade.h:9
-msgid "You have been invited to join a chat conference."
-msgstr "Du er invitert til en konferansesamtale."
-
-#: ../src/empathy-chat-window.glade.h:10
-msgid "_Contact"
-msgstr "_Kontakt"
-
-#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
-msgid "_Contents"
-msgstr "_Innhold"
-
-#: ../src/empathy-chat-window.glade.h:12
-msgid "_Conversation"
-msgstr "_Samtale"
-
-#: ../src/empathy-chat-window.glade.h:13
-msgid "_Detach Tab"
-msgstr "_Løsne fane"
-
-#: ../src/empathy-chat-window.glade.h:15
-msgid "_Favorite Chatroom"
-msgstr "_Favorittrom"
-
-#: ../src/empathy-chat-window.glade.h:16 ../src/empathy-main-window.glade.h:12
-msgid "_Help"
-msgstr "_Hjelp"
-
-#: ../src/empathy-chat-window.glade.h:17
-msgid "_Next Tab"
-msgstr "_Neste fane"
-
-#: ../src/empathy-chat-window.glade.h:18
-msgid "_Previous Tab"
-msgstr "_Forrige fane"
+msgstr "Ny melding fra %s"
 
-#: ../src/empathy-chat-window.glade.h:19
-msgid "_Tabs"
-msgstr "_Faner"
-
-#: ../src/empathy-chatrooms-window.c:262
+#: ../src/empathy-chatrooms-window.c:258
 msgid "Name"
 msgstr "Navn"
 
-#: ../src/empathy-chatrooms-window.c:280
+#: ../src/empathy-chatrooms-window.c:276
 msgid "Room"
 msgstr "Rom"
 
-#: ../src/empathy-chatrooms-window.c:289
+#: ../src/empathy-chatrooms-window.c:285
 msgid "Auto-Connect"
 msgstr "Koble til automatisk"
 
-#: ../src/empathy-chatrooms-window.glade.h:2
-msgid "Edit Favorite Room"
-msgstr "Endre favorittrom"
-
-#: ../src/empathy-chatrooms-window.glade.h:3
-msgid "Join room on start_up"
-msgstr "Bli med i rom ved oppstart"
-
-#: ../src/empathy-chatrooms-window.glade.h:4
-msgid "Join this chat room when Empathy starts and you are connected"
-msgstr ""
-"Bli med i dette samtalerommet når Empathy starter opp og du blir koblet til"
-
-#: ../src/empathy-chatrooms-window.glade.h:5
+#: ../src/empathy-chatrooms-window.ui.h:2
 msgid "Manage Favorite Rooms"
 msgstr "Håndter favorittrom"
 
-#: ../src/empathy-chatrooms-window.glade.h:6
-msgid "N_ame:"
-msgstr "_Navn:"
-
-#: ../src/empathy-chatrooms-window.glade.h:7
-msgid "S_erver:"
-msgstr "_Tjener:"
-
-#: ../src/empathy-chatrooms-window.glade.h:9
-#: ../src/empathy-new-chatroom-dialog.glade.h:9
-msgid "_Room:"
-msgstr "_Rom:"
-
-#: ../src/empathy-event-manager.c:372
+#: ../src/empathy-event-manager.c:377
 msgid "Incoming call"
 msgstr "Innkommende samtale"
 
-#: ../src/empathy-event-manager.c:375
+#: ../src/empathy-event-manager.c:380
 #, c-format
 msgid "%s is calling you, do you want to answer?"
 msgstr "%s ringer deg. Vil du svare?"
 
-#: ../src/empathy-event-manager.c:382
+#: ../src/empathy-event-manager.c:387
 msgid "_Reject"
 msgstr "Av_vis"
 
-#: ../src/empathy-event-manager.c:388
+#: ../src/empathy-event-manager.c:393
 msgid "_Answer"
 msgstr "Sv_ar"
 
-#: ../src/empathy-event-manager.c:511
+#: ../src/empathy-event-manager.c:507
 #, c-format
 msgid "Incoming call from %s"
 msgstr "Innkommende samtale fra %s"
 
-#: ../src/empathy-event-manager.c:559
+#: ../src/empathy-event-manager.c:547
 #, c-format
 msgid "%s is offering you an invitation"
 msgstr "%s tilbyr deg en invitasjon"
 
-#: ../src/empathy-event-manager.c:565
-#, fuzzy
+#: ../src/empathy-event-manager.c:553
 msgid "An external application will be started to handle it."
-msgstr ""
-"%s sender deg en invitasjon. Et eksternt program vil bli startet for å "
-"håndtere den."
+msgstr "Et eksternt program vil bli startet for å håndtere den."
 
-#: ../src/empathy-event-manager.c:570
-#, fuzzy
+#: ../src/empathy-event-manager.c:558
 msgid "You don't have the needed external application to handle it."
+msgstr "Du har ikke nødvendig eksternt program som kan håndtere dette."
+
+#: ../src/empathy-event-manager.c:685
+msgid "Room invitation"
+msgstr "Invitasjon til rom"
+
+#: ../src/empathy-event-manager.c:688
+#, c-format
+msgid "%s is inviting you to join %s"
+msgstr ""
+
+#: ../src/empathy-event-manager.c:696
+msgid "_Decline"
+msgstr "_Avslå"
+
+#: ../src/empathy-event-manager.c:701
+#: ../src/empathy-new-chatroom-dialog.ui.h:7
+msgid "_Join"
+msgstr "_Bli med"
+
+#: ../src/empathy-event-manager.c:740
+#, c-format
+msgid "%s invited you to join %s"
 msgstr ""
-"%s sender deg en invitasjon, men du har ikke nødvendig eksternt program som "
-"kan håndtere dette."
 
-#: ../src/empathy-event-manager.c:706
+#: ../src/empathy-event-manager.c:766
 #, c-format
 msgid "Incoming file transfer from %s"
 msgstr "Innkommende filoverføring fra %s"
 
-#: ../src/empathy-event-manager.c:800
+#: ../src/empathy-event-manager.c:946
 #, c-format
 msgid "Subscription requested by %s"
 msgstr "Abonnement forespurt av %s"
 
-#: ../src/empathy-event-manager.c:804
+#: ../src/empathy-event-manager.c:950
 #, c-format
 msgid ""
 "\n"
@@ -1657,313 +1831,327 @@ msgstr ""
 "\n"
 "Melding: %s"
 
-#: ../src/empathy-ft-manager.c:113
+#. Translators: time left, when it is more than one hour
+#: ../src/empathy-ft-manager.c:101
 #, c-format
 msgid "%u:%02u.%02u"
 msgstr "%u:%02u.%02u"
 
-#: ../src/empathy-ft-manager.c:115
+#. Translators: time left, when is is less than one hour
+#: ../src/empathy-ft-manager.c:104
 #, c-format
 msgid "%02u.%02u"
 msgstr "%02u.%02u"
 
-#: ../src/empathy-ft-manager.c:164
-msgid "No reason was specified"
-msgstr "Ingen årsak oppgitt"
-
-#: ../src/empathy-ft-manager.c:166
-msgid "The change in state was requested"
-msgstr "Tilstandsendring ble etterspurt"
-
-#: ../src/empathy-ft-manager.c:168
-msgid "You canceled the file transfer"
-msgstr "Du avbrøt filoverføringen"
-
-#: ../src/empathy-ft-manager.c:170
-msgid "The other participant canceled the file transfer"
-msgstr "Avsender avbrøt filoverføringen"
-
-#: ../src/empathy-ft-manager.c:172
-msgid "Error while trying to transfer the file"
-msgstr "Feil under overføring av filen"
+#: ../src/empathy-ft-manager.c:180
+msgctxt "file transfer percent"
+msgid "Unknown"
+msgstr "Ukjent"
 
-#: ../src/empathy-ft-manager.c:174
-msgid "The other participant is unable to transfer the file"
-msgstr "Avsender kan ikke overføre filen"
+#: ../src/empathy-ft-manager.c:275
+#, c-format
+msgid "%s of %s at %s/s"
+msgstr "%s av %s med %s/s"
 
-#: ../src/empathy-ft-manager.c:176
-msgid "Unknown reason"
-msgstr "Ukjent årsak"
+#: ../src/empathy-ft-manager.c:276
+#, 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:224
+#: ../src/empathy-ft-manager.c:307
 #, 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:227
+#: ../src/empathy-ft-manager.c:310
 #, c-format
 msgid "Sending \"%s\" to %s"
 msgstr "Sender «%s» til %s"
 
-#: ../src/empathy-ft-manager.c:237
-msgctxt "file size"
-msgid "Unknown"
-msgstr "Ukjent"
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:340
+#, c-format
+msgid "Error receiving \"%s\" from %s"
+msgstr "Feil ved mottak av «%s» fra %s"
+
+#: ../src/empathy-ft-manager.c:343
+msgid "Error receiving a file"
+msgstr "Feil ved mottak av en fil"
 
-#. translators: first %s is the transferred size, second %s is
-#. * the total file size
-#: ../src/empathy-ft-manager.c:245
+#: ../src/empathy-ft-manager.c:348
 #, c-format
-msgid "%s of %s"
-msgstr "%s av %s"
+msgid "Error sending \"%s\" to %s"
+msgstr "Feil ved sending av «%s» til %s"
 
-#: ../src/empathy-ft-manager.c:252
-msgid "Waiting the other participant's response"
-msgstr "Venter på svar fra motparten"
+#: ../src/empathy-ft-manager.c:351
+msgid "Error sending a file"
+msgstr "Feil ved sending av en fil"
 
-#: ../src/empathy-ft-manager.c:262
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:490
 #, c-format
 msgid "\"%s\" received from %s"
 msgstr "«%s» mottatt fra %s"
 
-#: ../src/empathy-ft-manager.c:268
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:495
 #, c-format
 msgid "\"%s\" sent to %s"
 msgstr "«%s» sendt til %s"
 
-#: ../src/empathy-ft-manager.c:271
+#: ../src/empathy-ft-manager.c:498
 msgid "File transfer completed"
 msgstr "Filoverføring fullført"
 
-#: ../src/empathy-ft-manager.c:280
-#, c-format
-msgid "\"%s\" receiving from %s"
-msgstr "«%s» mottas fra %s"
+#: ../src/empathy-ft-manager.c:617 ../src/empathy-ft-manager.c:784
+msgid "Waiting for the other participant's response"
+msgstr "Venter på svar fra motparten"
 
-#: ../src/empathy-ft-manager.c:286
+#: ../src/empathy-ft-manager.c:643 ../src/empathy-ft-manager.c:681
 #, c-format
-msgid "\"%s\" sending to %s"
-msgstr "«%s» sendes til %s"
+msgid "Checking integrity of \"%s\""
+msgstr "Sjekker integriteten for «%s»"
 
-#: ../src/empathy-ft-manager.c:289
+#: ../src/empathy-ft-manager.c:646 ../src/empathy-ft-manager.c:684
 #, c-format
-msgid "File transfer canceled: %s"
-msgstr "Filoverføring avbrutt: %s"
-
-#: ../src/empathy-ft-manager.c:304
-msgctxt "remaining time"
-msgid "Unknown"
-msgstr "Ukjent"
-
-#: ../src/empathy-ft-manager.c:364
-msgctxt "file transfer percent"
-msgid "Unknown"
-msgstr "Ukjent"
+msgid "Hashing \"%s\""
+msgstr ""
 
-#: ../src/empathy-ft-manager.c:700
+#: ../src/empathy-ft-manager.c:1024
 msgid "%"
 msgstr "%"
 
-#: ../src/empathy-ft-manager.c:712
+#: ../src/empathy-ft-manager.c:1036
 msgid "File"
 msgstr "Fil"
 
-#: ../src/empathy-ft-manager.c:734
+#: ../src/empathy-ft-manager.c:1058
 msgid "Remaining"
 msgstr "Gjenstår"
 
-#: ../src/empathy-ft-manager.c:885
-msgid "Cannot save file to this location"
-msgstr "Kan ikke lagre filen til denne lokasjonen"
-
-#: ../src/empathy-ft-manager.c:931
-msgid "Save file as..."
-msgstr "Lagre fil som..."
-
-#: ../src/empathy-ft-manager.c:1001
-msgid "unknown size"
-msgstr "ukjent størrelse"
-
-#: ../src/empathy-ft-manager.c:1007
-#, c-format
-msgid "%s would like to send you a file"
-msgstr "%s ønsker å sende deg en fil"
-
-#: ../src/empathy-ft-manager.c:1012
-#, c-format
-msgid "Do you want to accept the file \"%s\" (%s)?"
-msgstr "Vil du motta filen «%s» (%s)?"
-
-#. Decline button
-#: ../src/empathy-ft-manager.c:1021
-msgid "_Decline"
-msgstr "_Avslå"
-
-#. Accept button
-#: ../src/empathy-ft-manager.c:1030
-msgid "_Accept"
-msgstr "Godt_a"
-
-#: ../src/empathy-ft-manager.glade.h:1
+#: ../src/empathy-ft-manager.ui.h:1
 msgid "File transfers"
 msgstr "Filoverføringer"
 
-#: ../src/empathy-ft-manager.glade.h:2
+#: ../src/empathy-ft-manager.ui.h:2
 msgid "Remove completed, canceled and failed file transfers from the list"
 msgstr "Fjerning fullført. Filoverføringer fra listen er avbrutt og feilet"
 
-#: ../src/empathy-import-dialog.c:254
+#. Translators: this is the header of a treeview column
+#: ../src/empathy-import-dialog.c:259
 msgid "Import"
 msgstr "Importer"
 
-#: ../src/empathy-import-dialog.c:263
+#: ../src/empathy-import-dialog.c:268
 msgid "Protocol"
 msgstr "Protokoll"
 
-#: ../src/empathy-import-dialog.c:289
+#: ../src/empathy-import-dialog.c:294
 msgid "Source"
 msgstr "Kilde"
 
-#: ../src/empathy-import-dialog.c:377
+#: ../src/empathy-import-dialog.c:388
 msgid ""
 "No accounts to import could be found. Empathy currently only supports "
 "importing accounts from Pidgin."
 msgstr "Fant ingen kontoer å importere. Empathy støtter kun import fra Pidgin."
 
-#: ../src/empathy-import-dialog.glade.h:1
+#: ../src/empathy-import-dialog.ui.h:1
 msgid "Import Accounts"
 msgstr "Importer kontoer"
 
-#: ../src/empathy-main-window.c:391
+#: ../src/empathy-main-window.c:395
+msgid "_Edit account"
+msgstr "R_ediger konto"
+
+#: ../src/empathy-main-window.c:498
 msgid "No error specified"
 msgstr "Ingen feil oppgitt"
 
-#: ../src/empathy-main-window.c:394
+#: ../src/empathy-main-window.c:501
 msgid "Network error"
 msgstr "Nettverksfeil"
 
-#: ../src/empathy-main-window.c:397
+#: ../src/empathy-main-window.c:504
 msgid "Authentication failed"
 msgstr "Autentiseringen feilet"
 
-#: ../src/empathy-main-window.c:400
+#: ../src/empathy-main-window.c:507
 msgid "Encryption error"
 msgstr "Krypteringsfeil"
 
-#: ../src/empathy-main-window.c:403
+#: ../src/empathy-main-window.c:510
 msgid "Name in use"
 msgstr "Navn i bruk"
 
-#: ../src/empathy-main-window.c:406
+#: ../src/empathy-main-window.c:513
 msgid "Certificate not provided"
 msgstr "Sertifikat ikke oppgitt"
 
-#: ../src/empathy-main-window.c:409
+#: ../src/empathy-main-window.c:516
 msgid "Certificate untrusted"
 msgstr "Stoler ikke på sertifikat"
 
-#: ../src/empathy-main-window.c:412
+#: ../src/empathy-main-window.c:519
 msgid "Certificate expired"
 msgstr "Sertifikat utgått"
 
-#: ../src/empathy-main-window.c:415
+#: ../src/empathy-main-window.c:522
 msgid "Certificate not activated"
 msgstr "Sertifikat ikke aktivert"
 
-#: ../src/empathy-main-window.c:418
+#: ../src/empathy-main-window.c:525
 msgid "Certificate hostname mismatch"
 msgstr "Feil vertsnavn i forhold til sertifikat"
 
-#: ../src/empathy-main-window.c:421
+#: ../src/empathy-main-window.c:528
 msgid "Certificate fingerprint mismatch"
 msgstr "Fingeravtrykk stemmer ikke for sertifikat"
 
-#: ../src/empathy-main-window.c:424
+#: ../src/empathy-main-window.c:531
 msgid "Certificate self-signed"
 msgstr "Selvsignert sertifikat"
 
-#: ../src/empathy-main-window.c:427
+#: ../src/empathy-main-window.c:534
 msgid "Certificate error"
 msgstr "Sertifikatsfeil"
 
-#: ../src/empathy-main-window.c:430
+#: ../src/empathy-main-window.c:537
 msgid "Unknown error"
 msgstr "Ukjent feil"
 
-#: ../src/empathy-main-window.c:594
-msgid "Show and edit accounts"
-msgstr "Vis og rediger kontoer"
-
-#: ../src/empathy-main-window.c:974
+#: ../src/empathy-main-window.c:888
 msgid "Contact"
 msgstr "Kontakt"
 
-#: ../src/empathy-main-window.c:1176
-msgid "_Edit account"
-msgstr "R_ediger konto"
+#: ../src/empathy-main-window.c:1220
+msgid "Show and edit accounts"
+msgstr "Vis og rediger kontoer"
 
-#: ../src/empathy-main-window.glade.h:1
+#: ../src/empathy-main-window.ui.h:1
 msgid "Contact List"
 msgstr "Kontaktliste"
 
-#: ../src/empathy-main-window.glade.h:2
+#: ../src/empathy-main-window.ui.h:2
+msgid "Contacts on a _Map"
+msgstr "Kontakter på et _kart"
+
+#: ../src/empathy-main-window.ui.h:3
 msgid "Context"
 msgstr "Sammenheng"
 
-#: ../src/empathy-main-window.glade.h:3
+#: ../src/empathy-main-window.ui.h:4
 msgid "Join _Favorites"
 msgstr "Bli med i _favoritter"
 
-#: ../src/empathy-main-window.glade.h:4
-msgid "Join _New..."
-msgstr "Bli med i _ny ..."
-
-#: ../src/empathy-main-window.glade.h:5
+#: ../src/empathy-main-window.ui.h:5
 msgid "Manage Favorites"
 msgstr "Håndter favoritter"
 
-#: ../src/empathy-main-window.glade.h:6
-msgid "Show _Offline Contacts"
-msgstr "Vis frak_oblede kontakter"
-
-#: ../src/empathy-main-window.glade.h:7
+#: ../src/empathy-main-window.ui.h:6
 msgid "_Accounts"
 msgstr "_Kontoer"
 
-#: ../src/empathy-main-window.glade.h:8
+#: ../src/empathy-main-window.ui.h:7
 msgid "_Add Contact..."
 msgstr "_Legg til kontakt ..."
 
-#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+#: ../src/empathy-main-window.ui.h:9
+msgid "_Contents"
+msgstr "_Innhold"
+
+#: ../src/empathy-main-window.ui.h:10
+msgid "_Debug"
+msgstr "_Feilsøk"
+
+#: ../src/empathy-main-window.ui.h:12
+msgid "_File Transfers"
+msgstr "_Filoverføringer"
+
+#: ../src/empathy-main-window.ui.h:13
+msgid "_Help"
+msgstr "_Hjelp"
+
+#: ../src/empathy-main-window.ui.h:14
+#, fuzzy
+msgid "_Join..."
+msgstr "Bli med i _ny ..."
+
+#: ../src/empathy-main-window.ui.h:15 ../src/empathy-status-icon.ui.h:2
 msgid "_New Conversation..."
 msgstr "_Ny samtale..."
 
-#: ../src/empathy-main-window.glade.h:14
+#: ../src/empathy-main-window.ui.h:16
+msgid "_Offline Contacts"
+msgstr "Frak_oblede kontakter"
+
+#: ../src/empathy-main-window.ui.h:17
 msgid "_Personal Information"
 msgstr "Personlig _informasjon"
 
-#: ../src/empathy-main-window.glade.h:16
+#: ../src/empathy-main-window.ui.h:19
+msgid "_Previous Conversations"
+msgstr "_Tidligere samtaler"
+
+#: ../src/empathy-main-window.ui.h:20
 msgid "_Room"
 msgstr "_Rom"
 
-#: ../src/empathy-new-chatroom-dialog.c:291
-msgid "Chat Rooms"
+#: ../src/empathy-new-chatroom-dialog.c:332
+msgid "Chat Room"
 msgstr "Samtalerom"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:2
-msgid "Browse:"
-msgstr "Bla gjennom:"
+#: ../src/empathy-new-chatroom-dialog.c:348
+msgid "Members"
+msgstr "Medlemmer"
+
+#: ../src/empathy-new-chatroom-dialog.c:492
+#, c-format
+msgctxt ""
+"Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no "
+"and a number."
+msgid ""
+"<b>%s</b>\n"
+"Invite required: %s\n"
+"Password required: %s\n"
+"Members: %s"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.c:494
+#: ../src/empathy-new-chatroom-dialog.c:495
+msgid "Yes"
+msgstr "Ja"
+
+#: ../src/empathy-new-chatroom-dialog.c:494
+#: ../src/empathy-new-chatroom-dialog.c:495
+msgid "No"
+msgstr "Nei"
+
+#: ../src/empathy-new-chatroom-dialog.c:522
+msgid "Could not start room listing"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.c:532
+msgid "Could not stop room listing"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.ui.h:2
+msgid "Couldn't load room list"
+msgstr ""
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:3
+#: ../src/empathy-new-chatroom-dialog.ui.h:3
 msgid ""
 "Enter the room name to join here or click on one or more rooms in the list."
 msgstr ""
 "Oppgi navn på rom du vil bli med i eller klikk på ett eller flere rom på "
 "listen."
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:4
+#: ../src/empathy-new-chatroom-dialog.ui.h:4
 msgid ""
 "Enter the server which hosts the room, or leave it empty if the room is on "
 "the current account's server"
@@ -1971,78 +2159,91 @@ msgstr ""
 "Oppgi tjener som er vert for rommet, eller la stå tom hvis rommet er på "
 "aktiv kontos tjener"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:5
-msgid "Join"
-msgstr "Bli med"
-
-#: ../src/empathy-new-chatroom-dialog.glade.h:6
-msgid "Join New"
-msgstr "Bli med i ny"
+#: ../src/empathy-new-chatroom-dialog.ui.h:5
+#, fuzzy
+msgid "Join Room"
+msgstr "Rom"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:7
-msgid "Re_fresh"
-msgstr "Opp_dater"
+#: ../src/empathy-new-chatroom-dialog.ui.h:6
+#, fuzzy
+msgid "Room List"
+msgstr "Locale for _romliste:"
 
-#: ../src/empathy-new-chatroom-dialog.glade.h:8
-msgid ""
-"This list represents all chat rooms hosted on the server you have entered."
-msgstr ""
-"Denne listen representerer alle praterom som finnes på tjeneren du har "
-"oppgitt."
+#: ../src/empathy-new-chatroom-dialog.ui.h:8
+msgid "_Room:"
+msgstr "_Rom:"
 
-#: ../src/empathy-preferences.c:157
+#: ../src/empathy-preferences.c:162
 msgid "Message received"
 msgstr "Melding mottatt"
 
-#: ../src/empathy-preferences.c:158
+#: ../src/empathy-preferences.c:163
 msgid "Message sent"
 msgstr "Melding sendt"
 
-#: ../src/empathy-preferences.c:159
+#: ../src/empathy-preferences.c:164
 msgid "New conversation"
 msgstr "Ny samtale"
 
-#: ../src/empathy-preferences.c:160
+#: ../src/empathy-preferences.c:165
 msgid "Contact goes online"
 msgstr "Kontakt kobler til"
 
-#: ../src/empathy-preferences.c:161
+#: ../src/empathy-preferences.c:166
 msgid "Contact goes offline"
 msgstr "Kontakt kobler fra"
 
-#: ../src/empathy-preferences.c:162
+#: ../src/empathy-preferences.c:167
 msgid "Account connected"
 msgstr "Konto koblet til"
 
-#: ../src/empathy-preferences.c:163
+#: ../src/empathy-preferences.c:168
 msgid "Account disconnected"
 msgstr "Konto koblet fra"
 
-#: ../src/empathy-preferences.c:397
+#: ../src/empathy-preferences.c:435
 msgid "Language"
 msgstr "Språk"
 
-#: ../src/empathy-preferences.glade.h:1
+#: ../src/empathy-preferences.ui.h:1
 msgid "<b>Appearance</b>"
 msgstr "<b>Utseende</b>"
 
-#: ../src/empathy-preferences.glade.h:2
-msgid "<b>Behaviour</b>"
+#: ../src/empathy-preferences.ui.h:2
+#, fuzzy
+msgid "<b>Behavior</b>"
 msgstr "<b>Oppførsel</b>"
 
-#: ../src/empathy-preferences.glade.h:3
+#: ../src/empathy-preferences.ui.h:3
 msgid "<b>Contact List</b>"
 msgstr "<b>Kontaktliste</b>"
 
-#: ../src/empathy-preferences.glade.h:4
+#: ../src/empathy-preferences.ui.h:4
 msgid "<b>Enable spell checking for languages:</b>"
 msgstr "<b>Slå på stavekontroll for språkene:</b>"
 
-#: ../src/empathy-preferences.glade.h:5
+#: ../src/empathy-preferences.ui.h:5
+#, fuzzy
+msgid "<b>Geoclue Settings</b>"
+msgstr "<b>Innstillinger</b>"
+
+#: ../src/empathy-preferences.ui.h:6
 msgid "<b>Play sound for events</b>"
 msgstr "<b>Spill av lyd for hendelser</b>"
 
-#: ../src/empathy-preferences.glade.h:6
+#: ../src/empathy-preferences.ui.h:7
+#, fuzzy
+msgid "<b>Privacy</b>"
+msgstr "<b>Avansert</b>"
+
+#: ../src/empathy-preferences.ui.h:8
+msgid ""
+"<small>Reduced location accuracy means that nothing more precise than your "
+"city, state and country will be published.  GPS coordinates will have a "
+"random value added (&#xB1;0.25&#xB0;).</small>"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:9
 msgid ""
 "<small>The list of languages reflects only the languages for which you have "
 "a dictionary installed.</small>"
@@ -2050,106 +2251,131 @@ msgstr ""
 "<small>Denne listen listen viser bare de språkene det er installert ordliste "
 "for."
 
-#: ../src/empathy-preferences.glade.h:7
+#: ../src/empathy-preferences.ui.h:10
+msgid "Allow _GPS usage"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:11
+msgid "Allow _cellphone usage"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:12
+msgid "Allow _network usage"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:13
 msgid "Automatically _connect on startup "
 msgstr "_Koble til automatisk ved oppstart "
 
-#: ../src/empathy-preferences.glade.h:8
+#: ../src/empathy-preferences.ui.h:14
 msgid "Avatars are user chosen images shown in the contact list"
 msgstr "Personbilder er valgt av brukerne for å vise i kontaktlisten"
 
-#: ../src/empathy-preferences.glade.h:9
+#: ../src/empathy-preferences.ui.h:15
 msgid "Chat Th_eme:"
 msgstr "Samtale_tema:"
 
-#: ../src/empathy-preferences.glade.h:10
+#: ../src/empathy-preferences.ui.h:16
 #, fuzzy
 msgid "Disable notifications when _away or busy"
 msgstr "Slå av lyder når du er b_orte eller opptatt"
 
-#: ../src/empathy-preferences.glade.h:11
+#: ../src/empathy-preferences.ui.h:17
 msgid "Disable sounds when _away or busy"
 msgstr "Slå av lyder når du er b_orte eller opptatt"
 
-#: ../src/empathy-preferences.glade.h:12
+#: ../src/empathy-preferences.ui.h:18
 msgid "Enable notifications when the _chat is not focused"
 msgstr ""
 
-#: ../src/empathy-preferences.glade.h:13
+#: ../src/empathy-preferences.ui.h:19
 msgid "General"
 msgstr "Generelt"
 
-#: ../src/empathy-preferences.glade.h:14
+#: ../src/empathy-preferences.ui.h:20
+#, fuzzy
+msgid "Location"
+msgstr "Varsling"
+
+#: ../src/empathy-preferences.ui.h:21
 msgid "Notifications"
 msgstr "Varsling"
 
-#: ../src/empathy-preferences.glade.h:15
+#: ../src/empathy-preferences.ui.h:22
 msgid "Preferences"
 msgstr "Brukervalg"
 
-#: ../src/empathy-preferences.glade.h:16
+#: ../src/empathy-preferences.ui.h:23
 msgid "Show _avatars"
 msgstr "Vis person_bilder"
 
-#: ../src/empathy-preferences.glade.h:17
+#: ../src/empathy-preferences.ui.h:24
 msgid "Show _smileys as images"
 msgstr "Vis _smilefjes som bilder"
 
-#: ../src/empathy-preferences.glade.h:18
+#: ../src/empathy-preferences.ui.h:25
 msgid "Show co_mpact contact list"
 msgstr "Vis ko_mpakt kontaktliste"
 
-#: ../src/empathy-preferences.glade.h:19
+#: ../src/empathy-preferences.ui.h:26
 msgid "Sort by _name"
 msgstr "Sorter på _navn"
 
-#: ../src/empathy-preferences.glade.h:20
+#: ../src/empathy-preferences.ui.h:27
 msgid "Sort by s_tate"
 msgstr "Sorter på s_tatus"
 
-#: ../src/empathy-preferences.glade.h:21
+#: ../src/empathy-preferences.ui.h:28
 msgid "Sounds"
 msgstr "Lyder"
 
-#: ../src/empathy-preferences.glade.h:22
+#: ../src/empathy-preferences.ui.h:29
 msgid "Spell Checking"
 msgstr "Stavekontroll"
 
-#: ../src/empathy-preferences.glade.h:23
+#: ../src/empathy-preferences.ui.h:30
 msgid "Themes"
 msgstr "Temaer"
 
-#: ../src/empathy-preferences.glade.h:24
+#: ../src/empathy-preferences.ui.h:31
 #, fuzzy
 msgid "_Enable bubble notifications"
 msgstr "_Aktiver varsling med lyder"
 
-#: ../src/empathy-preferences.glade.h:25
+#: ../src/empathy-preferences.ui.h:32
 msgid "_Enable sound notifications"
 msgstr "_Aktiver varsling med lyder"
 
-#: ../src/empathy-preferences.glade.h:26
+#: ../src/empathy-preferences.ui.h:33
 msgid "_Open new chats in separate windows"
 msgstr "_Åpne nye samtaler i egne vinduer"
 
-#: ../src/empathy-status-icon.glade.h:1
+#: ../src/empathy-preferences.ui.h:34
+msgid "_Publish location to my contacts"
+msgstr ""
+
+#: ../src/empathy-preferences.ui.h:35
+msgid "_Reduce location accuracy"
+msgstr ""
+
+#: ../src/empathy-status-icon.ui.h:1
 msgid "Status"
 msgstr "Status"
 
-#: ../src/empathy-status-icon.glade.h:3
+#: ../src/empathy-status-icon.ui.h:3
 msgid "_Quit"
 msgstr "_Avslutt"
 
-#: ../src/empathy-status-icon.glade.h:4
+#: ../src/empathy-status-icon.ui.h:4
 msgid "_Show Contact List"
 msgstr "Vi_s kontaktliste"
 
-#: ../src/empathy-tube-dispatch.c:356
+#: ../src/empathy-tube-dispatch.c:375
 #, c-format
 msgid "Unable to start application for service %s: %s"
 msgstr "Kan ikke starte program for tjeneste %s: %s"
 
-#: ../src/empathy-tube-dispatch.c:427
+#: ../src/empathy-tube-dispatch.c:446
 #, c-format
 msgid ""
 "An invitation was offered for service %s, but you don't have the needed "
@@ -2157,3 +2383,75 @@ msgid ""
 msgstr ""
 "En invitasjon ble sendt for tjeneste %s, men du har ikke programmet som "
 "kreves for denne."
+
+#: ../src/empathy-call-window-fullscreen.ui.h:1
+msgid "gtk-leave-fullscreen"
+msgstr ""
+
+#: ../src/empathy-map-view.ui.h:1
+#, fuzzy
+msgid "Contact Map View"
+msgstr "Kontaktliste"
+
+#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1075
+msgid "Error"
+msgstr "Feil"
+
+#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1069
+msgid "Critical"
+msgstr "Kritisk"
+
+#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1063
+msgid "Warning"
+msgstr "Advarsel"
+
+#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1057
+#: ../src/empathy-debug-dialog.c:1105
+msgid "Message"
+msgstr "Melding"
+
+#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1051
+msgid "Info"
+msgstr "Info"
+
+#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1045
+msgid "Debug"
+msgstr "Feilsøk"
+
+#: ../src/empathy-debug-dialog.c:837
+msgid "Save"
+msgstr "Lagre"
+
+#: ../src/empathy-debug-dialog.c:940
+msgid "Debug Window"
+msgstr "Feilsøkingsvindu"
+
+#: ../src/empathy-debug-dialog.c:1013
+msgid "Pause"
+msgstr "Pause"
+
+#: ../src/empathy-debug-dialog.c:1025
+msgid "Level "
+msgstr "Nivå "
+
+#: ../src/empathy-debug-dialog.c:1094
+msgid "Time"
+msgstr "Tid"
+
+#: ../src/empathy-debug-dialog.c:1096
+msgid "Domain"
+msgstr "Domene"
+
+#: ../src/empathy-debug-dialog.c:1098
+msgid "Category"
+msgstr "Kategori"
+
+#: ../src/empathy-debug-dialog.c:1100
+msgid "Level"
+msgstr "Nivå"
+
+#: ../src/empathy-debug-dialog.c:1132
+msgid ""
+"The selected connection manager does not support the remote debugging "
+"extension."
+msgstr ""
index 97719da857c13161aa27b56f9da445c42ac15455..d070d0bd6cb1dbc0bd2289910157db3d6cb8373c 100644 (file)
--- a/po/ta.po
+++ b/po/ta.po
@@ -1,20 +1,22 @@
-# translation of empathy.master.po to Tamil
+# translation of ta.po to
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Dr.T.vasudevan <agnihot3@gmail.com>, 2009.
+# Dr.T.Vasudevan <agnihot3@gmail.com>, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: empathy.master\n"
+"Project-Id-Version: ta\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-20 13:57+0530\n"
-"PO-Revision-Date: 2009-05-07 21:34+0530\n"
-"Last-Translator: Dr.T.vasudevan <agnihot3@gmail.com>\n"
+"POT-Creation-Date: 2009-06-19 05:47+0530\n"
+"PO-Revision-Date: 2009-06-20 14:19+0530\n"
+"Last-Translator: Dr.T.Vasudevan <agnihot3@gmail.com>\n"
 "Language-Team: Tamil <Ubuntu-l10n-tam@lists.ubuntu.com>\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"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 #: ../data/empathy.desktop.in.in.h:1
 msgid "Empathy Instant Messenger"
@@ -39,10 +41,8 @@ msgid "Chat window theme"
 msgstr "அரட்டை சாளர கருத்து"
 
 #: ../data/empathy.schemas.in.h:4
-msgid ""
-"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
-msgstr ""
-"சொல் திருத்தி மொழிகளை பயன்படுத்த காற் புள்ளியால் பிரித்த பட்டியல் (எ-டு. en, fr, nl)"
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr "சொல் திருத்தி மொழிகளை பயன்படுத்த காற் புள்ளியால் பிரித்த பட்டியல் (எ-டு. en, fr, nl)"
 
 #: ../data/empathy.schemas.in.h:5
 msgid "Compact contact list"
@@ -65,151 +65,202 @@ msgid "Disable sounds when away"
 msgstr "வெளியே உள்ள போது ஒலியை செயல் நீக்குக"
 
 #: ../data/empathy.schemas.in.h:10
+msgid "Empathy can publish the user's location"
+msgstr "பயனரின் இடத்தை தொடர்புகளுக்கு எம்பதியால் காட்ட இயலும்"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Empathy can use the GPS to guess the location"
+msgstr "எம்பதியால் பயனரின் இடத்தை ஊகிக்க ஜிபிஎஸ் ஐ  பயன்படுத்த இயலும்"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Empathy can use the cellular network to guess the location"
+msgstr "எம்பதியால் பயனரின் இடத்தை ஊகிக்க அலைபேசி வலையை  பயன்படுத்த இயலும்"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Empathy can use the network to guess the location"
+msgstr "எம்பதியால் பயனரின் இடத்தை ஊகிக்க  வலையை பயன்படுத்த இயலும்"
+
+#: ../data/empathy.schemas.in.h:14
 msgid "Empathy default download folder"
 msgstr "எம்பதி முன்னிருப்பு தரவிறக்க அடைவு"
 
-#: ../data/empathy.schemas.in.h:11
+#: ../data/empathy.schemas.in.h:15
 msgid "Empathy has asked about importing accounts"
 msgstr "எம்பதி கணக்குகளை இறக்குமதி செய்ய கேட்கிறது"
 
-#: ../data/empathy.schemas.in.h:12
+#: ../data/empathy.schemas.in.h:16
 msgid "Empathy should auto-connect on startup"
 msgstr "துவங்கும் போது எம்பதி தானியங்கியாக இணைக்க வேண்டும்."
 
-#: ../data/empathy.schemas.in.h:13
+#: ../data/empathy.schemas.in.h:17
+msgid "Empathy should reduce the location's accuracy"
+msgstr "துவங்கும் போது எம்பதி இடததின் குறிப்பை குறைக்க வேண்டும்."
+
+#: ../data/empathy.schemas.in.h:18
 msgid "Empathy should use the avatar of the contact as the chat window icon"
-msgstr ""
-"துவங்கும் போது எம்பதி அரட்டை சாரளத்தில்  சின்னமாக தொடர்பின் அவதாரத்தை காட்ட  வேண்டும்."
+msgstr "துவங்கும் போது எம்பதி அரட்டை சாரளத்தில்  சின்னமாக தொடர்பின் அவதாரத்தை காட்ட  வேண்டும்."
 
-#: ../data/empathy.schemas.in.h:14
+#: ../data/empathy.schemas.in.h:19
 msgid "Enable popup notifications for new messages"
 msgstr "புதிய செய்திகளுக்கு துள்ளு அறிவிப்புகளை செயல்படுத்து "
 
-#: ../data/empathy.schemas.in.h:15
+#: ../data/empathy.schemas.in.h:20
 msgid "Enable spell checker"
 msgstr "சொல் திருத்தியை செயல்படுத்து"
 
-#: ../data/empathy.schemas.in.h:16
+#: ../data/empathy.schemas.in.h:21
 msgid "Hide main window"
 msgstr "முதன்மை சாளரத்தை மறை "
 
-#: ../data/empathy.schemas.in.h:17
+#: ../data/empathy.schemas.in.h:22
 msgid "Hide the main window."
 msgstr "முதன்மை சாளரத்தை மறை "
 
-#: ../data/empathy.schemas.in.h:18
+#: ../data/empathy.schemas.in.h:23
 msgid "NetworkManager should be used"
 msgstr "வலைப்பின்னல் மேலாளரை பயன்படுத்த வேண்டும்"
 
-#: ../data/empathy.schemas.in.h:19
+#: ../data/empathy.schemas.in.h:24
 msgid "Nick completed character"
 msgstr "செல்லப்பெயரை பூர்த்தி செய்யும் எழுத்துரு"
 
-#: ../data/empathy.schemas.in.h:20
+#: ../data/empathy.schemas.in.h:25
 msgid "Open new chats in separate windows"
 msgstr "புதிய அரட்டைகளை தனி சாளரத்தில் திற"
 
-#: ../data/empathy.schemas.in.h:21
+#: ../data/empathy.schemas.in.h:26
+msgid "Path of the adium theme to use"
+msgstr "பயன்படுத்த வேண்டிய ஏடியம் கருத்துக்கு பாதை"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Path of the adium theme to use if the theme used for chat is adium."
+msgstr "அரட்டை அறைகளில் எடியம் கருத்தை பயன்படுத்த வேண்டுமானால் அதன் பாதை"
+
+#: ../data/empathy.schemas.in.h:28
 msgid "Play a sound for incoming messages"
 msgstr "உள்வரும் செய்திகளுக்கு ஒலி எழுப்பு"
 
-#: ../data/empathy.schemas.in.h:22
+#: ../data/empathy.schemas.in.h:29
 msgid "Play a sound for new conversations"
 msgstr "உள்வரும் உரையாடல்களுக்கு ஒலி எழுப்பு"
 
-#: ../data/empathy.schemas.in.h:23
+#: ../data/empathy.schemas.in.h:30
 msgid "Play a sound for outgoing messages"
 msgstr "வெளிச்செல்லும் செய்திகளுக்கு ஒலி எழுப்பு"
 
-#: ../data/empathy.schemas.in.h:24
+#: ../data/empathy.schemas.in.h:31
 msgid "Play a sound when a contact logs in"
 msgstr "தொடர்பு உள் நுழைகையில் ஒலி எழுப்பு"
 
-#: ../data/empathy.schemas.in.h:25
+#: ../data/empathy.schemas.in.h:32
 msgid "Play a sound when a contact logs out"
 msgstr "தொடர்பு வெளி செல்கையில் ஒலி எழுப்பு"
 
-#: ../data/empathy.schemas.in.h:26
+#: ../data/empathy.schemas.in.h:33
 msgid "Play a sound when we log in"
 msgstr "நாம் உள் நுழைகையில் ஒலி எழுப்பு"
 
-#: ../data/empathy.schemas.in.h:27
+#: ../data/empathy.schemas.in.h:34
 msgid "Play a sound when we log out"
 msgstr "நாம் வெளி செல்கையில் ஒலி எழுப்பு"
 
-#: ../data/empathy.schemas.in.h:28
+#: ../data/empathy.schemas.in.h:35
 msgid "Popup notifications if the chat isn't focused"
 msgstr "அரட்டை குவிப்பில் இல்லையானால் வெளித்துள்ளல் மூலம் அறிவி"
 
-#: ../data/empathy.schemas.in.h:29
+#: ../data/empathy.schemas.in.h:36
 msgid "Salut account is created"
 msgstr "சாலுட் கணக்கு துவக்கப்பட்டது "
 
-#: ../data/empathy.schemas.in.h:30
+#: ../data/empathy.schemas.in.h:37
 msgid "Show avatars"
 msgstr "அவதாரங்களை காட்டு"
 
-#: ../data/empathy.schemas.in.h:31
+#: ../data/empathy.schemas.in.h:38
+msgid "Show contact list in rooms"
+msgstr "தொடர்பு பட்டியல் ஐ அறைகளில் காட்டு "
+
+#: ../data/empathy.schemas.in.h:39
 msgid "Show hint about closing the main window"
 msgstr "முதன்மை சாளரத்தை மூடிவது குறித்து குறிப்பு காட்டு "
 
-#: ../data/empathy.schemas.in.h:32
+#: ../data/empathy.schemas.in.h:40
 msgid "Show offline contacts"
 msgstr " வலை தொடர்பில்லாத தொடர்புகளை காட்டு"
 
-#: ../data/empathy.schemas.in.h:33
+#: ../data/empathy.schemas.in.h:41
 msgid "Spell checking languages"
 msgstr "எழுத்துப்பிழை திருத்த மொழி"
 
-#: ../data/empathy.schemas.in.h:34
+#: ../data/empathy.schemas.in.h:42
 msgid "The default folder to save file transfers in."
 msgstr "இடமாற்றிய கோப்புகளை சேமிக்க முன்னிருப்பு அடைவு"
 
-#: ../data/empathy.schemas.in.h:35
+#: ../data/empathy.schemas.in.h:43
 msgid "The last directory that an avatar image was chosen from."
 msgstr "அவதாரம் படம் தேர்ந்தெடுத்த கடைசி அடைவு "
 
-#: ../data/empathy.schemas.in.h:36
+#: ../data/empathy.schemas.in.h:44
 msgid "The theme that is used to display the conversation in chat windows."
 msgstr "அரட்டை சாளரங்களில் உரையாடல்களை காட்ட பயன்படும் கருத்து"
 
-#: ../data/empathy.schemas.in.h:37
+#: ../data/empathy.schemas.in.h:45
 msgid "Use graphical smileys"
 msgstr "வரைகலை சிரிப்பான்களை பயன்படுத்துக"
 
-#: ../data/empathy.schemas.in.h:38
+#: ../data/empathy.schemas.in.h:46
 msgid "Use notification sounds"
 msgstr "அறிவிப்பு ஒலிகளை பயன்படுத்துக"
 
-#: ../data/empathy.schemas.in.h:39
+#: ../data/empathy.schemas.in.h:47
 msgid "Use theme for chat rooms"
 msgstr "அரட்டை அறைகளுக்கு கருத்துக்களை பயன்படுத்துக"
 
-#: ../data/empathy.schemas.in.h:40
+#: ../data/empathy.schemas.in.h:48
+msgid "Whether or not Empathy can publish the user's location to his contacts."
+msgstr "பயனரின் இடத்தை தொடர்புகளுக்கு எம்பதி காட்ட வேண்டுமா இல்லையா?"
+
+#: ../data/empathy.schemas.in.h:49
+msgid "Whether or not Empathy can use the GPS to guess the location."
+msgstr "எம்பதி பயனரின் இடத்தை ஊகிக்க ஜிபிஎஸ் ஐ பயன்படுத்தலாமா இல்லையா."
+
+#: ../data/empathy.schemas.in.h:50
+msgid "Whether or not Empathy can use the cellular network to guess the location."
+msgstr "எம்பதி பயனரின் இடத்தை ஊகிக்க அலைபேசி வலையை பயன்படுத்தலாமா இல்லையா."
+
+#: ../data/empathy.schemas.in.h:51
+msgid "Whether or not Empathy can use the network to guess the location."
+msgstr "எம்பதி பயனரின் இடத்தை ஊகிக்க  வலையை பயன்படுத்தலாமா இல்லையா."
+
+#: ../data/empathy.schemas.in.h:52
 msgid ""
 "Whether or not Empathy has asked about importing accounts from other "
 "programs."
-msgstr ""
-"எம்பதி மற்ற நிரல்களில் இருந்து கணக்குகளை இறக்குமதி செய்வது குறித்து வினவியதா இல்லையா."
+msgstr "எம்பதி மற்ற நிரல்களில் இருந்து கணக்குகளை இறக்குமதி செய்வது குறித்து வினவியதா இல்லையா."
 
-#: ../data/empathy.schemas.in.h:41
+#: ../data/empathy.schemas.in.h:53
 msgid ""
 "Whether or not Empathy should automatically log in to your accounts on "
 "startup."
 msgstr "எம்பதி துவங்கும்போது கணக்குகளில் தானியங்கியாக உள்நுழைய வேண்டுமா இல்லையா."
 
-#: ../data/empathy.schemas.in.h:42
+#: ../data/empathy.schemas.in.h:54
+msgid ""
+"Whether or not Empathy should reduce the location's accuracy for privacy "
+"reasons."
+msgstr "அந்தரங்கத்தை காப்பாற்ற துவங்கும் போது எம்பதி இடத்தின் குறிப்பை குறைக்க வேண்டுமா இல்லையா"
+
+#: ../data/empathy.schemas.in.h:55
 msgid ""
 "Whether or not Empathy should use the avatar of the contact as the chat "
 "window icon."
 msgstr "எம்பதி தொடர்பின் அவதாரத்தை அரட்டை அறை சின்னமாக பயன்படுத்த வேண்டுமா இல்லையா."
 
-#: ../data/empathy.schemas.in.h:43
-msgid ""
-"Whether or not the Salut account has been created on the first Empathy run."
+#: ../data/empathy.schemas.in.h:56
+msgid "Whether or not the Salut account has been created on the first Empathy run."
 msgstr "முதல் ஓட்டத்தில் எம்பதி சலூட் கணக்கை உருவாக்கியதா இல்லையா."
 
-#: ../data/empathy.schemas.in.h:44
+#: ../data/empathy.schemas.in.h:57
 msgid ""
 "Whether or not the network manager should be used to automatically "
 "disconnect/reconnect."
@@ -217,57 +268,55 @@ msgstr ""
 "வலைப்பின்னல் மேலாளர் ஐ தானியங்கியாக இணைக்கவும் இணைப்பு விலகவும் பயன்படுத்த வேண்டுமா "
 "இல்லையா"
 
-#: ../data/empathy.schemas.in.h:45
+#: ../data/empathy.schemas.in.h:58
 msgid ""
 "Whether or not to check words typed against the languages you want to check "
 "with."
 msgstr "நீங்கள் விரும்பிய மொழிகளில் உள்ளிட்ட சொற்களை சோதிக்க வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:46
-msgid ""
-"Whether or not to convert smileys into graphical images in conversations."
+#: ../data/empathy.schemas.in.h:59
+msgid "Whether or not to convert smileys into graphical images in conversations."
 msgstr "உரையாடல்களில் சிரிப்பான்களை வரைகலை படங்களாக மாற்ற வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:47
-msgid ""
-"Whether or not to play a sound to notify for contacts logging in the network."
+#: ../data/empathy.schemas.in.h:60
+msgid "Whether or not to play a sound to notify for contacts logging in the network."
 msgstr "வலைப்பின்னலில் தொடர்புகள் உள்நுழையும் போது ஒலியை எழுப்ப வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:48
+#: ../data/empathy.schemas.in.h:61
 msgid ""
 "Whether or not to play a sound to notify for contacts logging off the "
 "network."
 msgstr "வலைப்பின்னலில் தொடர்புகள் வெளிச்செல்லும் போது ஒலியை எழுப்ப வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:49
+#: ../data/empathy.schemas.in.h:62
 msgid "Whether or not to play a sound to notify for events."
 msgstr "நிகழ்வுகள் போது ஒலியை எழுப்ப வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:50
+#: ../data/empathy.schemas.in.h:63
 msgid "Whether or not to play a sound to notify for incoming messages."
 msgstr "செய்திகள் உள்வரும் போது ஒலியை எழுப்ப வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:51
+#: ../data/empathy.schemas.in.h:64
 msgid "Whether or not to play a sound to notify for new conversations."
 msgstr "புதிய உரையாடல்கள் போது ஒலியை எழுப்ப வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:52
+#: ../data/empathy.schemas.in.h:65
 msgid "Whether or not to play a sound to notify for outgoing messages."
 msgstr "செய்திகள் வெளிச்செல்லும் போது ஒலியை எழுப்ப வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:53
+#: ../data/empathy.schemas.in.h:66
 msgid "Whether or not to play a sound when logging in a network."
 msgstr "வலைப்பின்னலில் உள்நுழையும் போது ஒலி இயக்க வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:54
+#: ../data/empathy.schemas.in.h:67
 msgid "Whether or not to play a sound when logging off a network."
 msgstr "வலைப்பின்னலில் வெளிச்செல்லும் போது ஒலி இயக்க வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:55
+#: ../data/empathy.schemas.in.h:68
 msgid "Whether or not to play sound notifications when away or busy."
 msgstr "வெளியே அல்லது வேலையாக உள்ள போது ஒலி அறிக்கைகளை இயக்க வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:56
+#: ../data/empathy.schemas.in.h:69
 msgid ""
 "Whether or not to show a popup notification when receiving a new message "
 "even if the chat is already opened, but not focused."
@@ -275,26 +324,29 @@ msgstr ""
 "புதிய செய்தி ஒன்று வரும்போது அரட்டை திறந்து இருந்து குவிப்பில் இல்லாவிட்டாலும் துள்ளு "
 "அறிக்கையை காட்ட வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:57
-msgid ""
-"Whether or not to show a popup notification when receiving a new message."
+#: ../data/empathy.schemas.in.h:70
+msgid "Whether or not to show a popup notification when receiving a new message."
 msgstr "புதிய செய்தி ஒன்று வரும்போது  துள்ளு அறிக்கையை காட்ட வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:58
+#: ../data/empathy.schemas.in.h:71
 msgid ""
 "Whether or not to show avatars for contacts in the contact list and chat "
 "windows."
 msgstr "அரட்டை பட்டியலிலும் தொடர்பு பட்டியலிலும் அவதாரங்களை காட்ட வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:59
+#: ../data/empathy.schemas.in.h:72
 msgid "Whether or not to show contacts that are offline in the contact list."
 msgstr "தொடர்பு பட்டியலிலும் இணைப்பில் இல்லாத தொடர்புகளை காட்ட வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:60
+#: ../data/empathy.schemas.in.h:73
 msgid "Whether or not to show popup notifications when away or busy."
 msgstr "வெளியே அல்லது வேலையாக உள்ள போது துள்ளு அறிக்கைகளை காட்ட வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:61
+#: ../data/empathy.schemas.in.h:74
+msgid "Whether or not to show the contact list in chat rooms."
+msgstr "அரட்டை அறையில் தொடர்பு பட்டியலை காட்ட வேண்டுமா இல்லையா?"
+
+#: ../data/empathy.schemas.in.h:75
 msgid ""
 "Whether or not to show the message dialog about closing the main window with "
 "the 'x' button in the title bar."
@@ -302,15 +354,15 @@ msgstr ""
 "தலைப்பு பட்டியில் x பொத்தானால் முதன்மை சாளரத்தை மூடுவதை குறித்த உரையாடலை காட்ட "
 "வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:62
+#: ../data/empathy.schemas.in.h:76
 msgid "Whether to show the contact list in compact mode or not."
 msgstr "அடக்கப்பாங்கில் தொடர்பு பட்டியலை காட்ட வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:63
+#: ../data/empathy.schemas.in.h:77
 msgid "Whether to use the theme for chat rooms or not."
 msgstr "அரட்டை அறைகளில் கருத்துக்களை பயன்படுத்த வேண்டுமா இல்லையா?"
 
-#: ../data/empathy.schemas.in.h:64
+#: ../data/empathy.schemas.in.h:78
 msgid ""
 "Which criterium to use when sorting the contact list. Default is to use sort "
 "by the contact's name with the value \"name\". A value of \"state\" will "
@@ -320,36 +372,130 @@ msgstr ""
 "பெயர் மதிப்பு \"பெயர்\". \"நிலை\" என்ற மதிப்பு தொடர்பை நிலையை பொருத்து "
 "வரிசைப்படுத்தும்."
 
-#: ../libempathy/empathy-tp-contact-list.c:727 ../src/empathy.c:278
+#: ../libempathy/empathy-ft-handler.c:838
+msgid "The hash of the received file and the sent one do not match"
+msgstr "பெற்ற கோப்பின் ஹாஷ் உம் அனுப்பியகோப்பின் ஹாஷ் உம் இசையவில்லை."
+
+#: ../libempathy/empathy-ft-handler.c:1098
+msgid "File transfer not supported by remote contact"
+msgstr "கோப்பு பறிமாற்றத்துக்கு தொலை தொலைதொடர்பில் ஆதரவில்லை"
+
+#: ../libempathy/empathy-ft-handler.c:1156
+msgid "The selected file is not a regular file"
+msgstr "தேர்ந்தெடுத்த கோப்பு வழக்கமான கோப்பு அல்ல"
+
+#: ../libempathy/empathy-ft-handler.c:1165
+msgid "The selected file is empty"
+msgstr "தேர்ந்தெடுத்த கோப்பு காலியாக உள்ளது"
+
+#: ../libempathy/empathy-tp-contact-list.c:757 ../src/empathy.c:287
 msgid "People nearby"
 msgstr "அருகில் உள்ள மக்கள்"
 
-#: ../libempathy/empathy-utils.c:251
+#: ../libempathy/empathy-tp-file.c:279
+msgid "Socket type not supported"
+msgstr "சொருகி வாய் வகை க்கு ஆதரவில்லை"
+
+#: ../libempathy/empathy-tp-file.c:398
+msgid "No reason was specified"
+msgstr "காரணம் குறிப்பிடவில்லை"
+
+#: ../libempathy/empathy-tp-file.c:401
+msgid "The change in state was requested"
+msgstr "நிலையில் மாற்றம் வேண்டப்பட்டது"
+
+#: ../libempathy/empathy-tp-file.c:404
+msgid "You canceled the file transfer"
+msgstr "நீங்கள் கோப்பு பரி மாற்றத்தை ரத்து செய்தீர்கள்"
+
+#: ../libempathy/empathy-tp-file.c:407
+msgid "The other participant canceled the file transfer"
+msgstr "மற்ற பங்குதாரர் கோப்பு பரி மாற்றத்தை ரத்து செய்தார்."
+
+#: ../libempathy/empathy-tp-file.c:410
+msgid "Error while trying to transfer the file"
+msgstr "கோப்பு பரி மாற்றத்தில்  பிழை "
+
+#: ../libempathy/empathy-tp-file.c:413
+msgid "The other participant is unable to transfer the file"
+msgstr "மற்ற பங்குதாரர் கோப்பு பரி மாற்றத்தை செய்ய முடியவில்லை."
+
+#: ../libempathy/empathy-tp-file.c:416
+msgid "Unknown reason"
+msgstr "தெரியாத காரணம்"
+
+#: ../libempathy/empathy-utils.c:274
 msgid "Available"
 msgstr "இருப்பவை"
 
-#: ../libempathy/empathy-utils.c:253
+#: ../libempathy/empathy-utils.c:276
 msgid "Busy"
 msgstr "வேலையில்"
 
-#: ../libempathy/empathy-utils.c:256
+#: ../libempathy/empathy-utils.c:279
 msgid "Away"
 msgstr "வெளியில்"
 
-#: ../libempathy/empathy-utils.c:258
+#: ../libempathy/empathy-utils.c:281
 msgid "Hidden"
 msgstr "மறைந்துள்ள"
 
-#: ../libempathy/empathy-utils.c:261
+#: ../libempathy/empathy-utils.c:283
 msgid "Offline"
 msgstr "இணைப்பு விலகி"
 
+#: ../libempathy/empathy-time.c:137
+#, c-format
+msgid "%d second ago"
+msgid_plural "%d seconds ago"
+msgstr[0] "%d வினாடி முன்"
+msgstr[1] "%d வினாடிகள் முன்"
+
+#: ../libempathy/empathy-time.c:142
+#, c-format
+msgid "%d minute ago"
+msgid_plural "%d minutes ago"
+msgstr[0] "%d நிமிடம் முன்"
+msgstr[1] "%d நிமிடங்கள் முன்"
+
+#: ../libempathy/empathy-time.c:147
+#, c-format
+msgid "%d hour ago"
+msgid_plural "%d hours ago"
+msgstr[0] "%d மணி முன்"
+msgstr[1] "%d மணிகள் முன்"
+
+#: ../libempathy/empathy-time.c:152
+#, c-format
+msgid "%d day ago"
+msgid_plural "%d days ago"
+msgstr[0] "%d நாள் முன்"
+msgstr[1] "%d நாட்கள் முன்"
+
+#: ../libempathy/empathy-time.c:157
+#, c-format
+msgid "%d week ago"
+msgid_plural "%d weeks ago"
+msgstr[0] "%d வாரம் முன்"
+msgstr[1] "%d வாரங்கள் முன்"
+
+#: ../libempathy/empathy-time.c:162
+#, c-format
+msgid "%d month ago"
+msgid_plural "%d months ago"
+msgstr[0] "%d மாதம் முன்"
+msgstr[1] "%d மாதங்கள் முன்"
+
+#: ../libempathy/empathy-time.c:167
+msgid "in the future"
+msgstr "எதிர்காலத்தில்"
+
 #: ../libempathy-gtk/empathy-account-chooser.c:419
 msgid "All"
 msgstr "அனைத்து"
 
 #: ../libempathy-gtk/empathy-account-widget.c:302
-#: ../libempathy-gtk/empathy-account-widget.c:349
+#: ../libempathy-gtk/empathy-account-widget.c:354
 #, c-format
 msgid "%s:"
 msgstr "%s:"
@@ -363,8 +509,8 @@ msgstr "%s:"
 #: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1
 #: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1
 #: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1
-msgid "<b>Advanced</b>"
-msgstr "<b> மேம்பட்ட</b>"
+msgid "Advanced"
+msgstr "மேம்பட்ட"
 
 #: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2
 #: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3
@@ -395,12 +541,12 @@ msgstr "_P துறை:"
 #: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11
 #: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5
 #: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
-#: ../src/empathy-new-chatroom-dialog.ui.h:8
+#: ../src/empathy-new-chatroom-dialog.ui.h:9
 msgid "_Server:"
 msgstr "(_S) சேவையகம்:"
 
 #: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2
-#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2
 #: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2
 msgid "Login I_D:"
 msgstr "உள்நுழை அடையாளம் (_D):"
@@ -419,44 +565,40 @@ msgid "New Network"
 msgstr "புதிய வலையமைப்பு"
 
 #: ../libempathy-gtk/empathy-account-widget-irc.ui.h:1
-msgid "<b>Network</b>"
-msgstr "<b>பிணையம்</b>"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2
-msgid "<b>Servers</b>"
-msgstr "<b> சேவையகங்கள்</b>"
-
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3
 msgid "Charset:"
 msgstr "எழுத்துருதொகுதி:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2
 msgid "Network"
 msgstr "வலையமைப்பு"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3
 msgid "Network:"
 msgstr "பிணையம்:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4
 msgid "Nickname:"
 msgstr "புனைப்பெயர்:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
 msgid "Password:"
 msgstr "கடவுச்சொல்:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
 msgid "Quit message:"
 msgstr "வெளிச்செல் செய்திகள்:"
 
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
 msgid "Real name:"
 msgstr "உண்மையான பெயர்:"
 
-#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2
-msgid "<b>Override server settings</b>"
-msgstr "<b>சேவையக அமைப்பை உதாசீனம் செய்</b>"
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+msgid "Servers"
+msgstr "சேவையகங்கள்"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3
+msgid "Override server settings"
+msgstr "சேவையக அமைப்பை உதாசீனம் செய்"
 
 #: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5
 msgid "Pri_ority:"
@@ -564,124 +706,120 @@ msgstr "அனைத்து கோப்புகள்"
 msgid "Click to enlarge"
 msgstr "பெரியதாக்க சொடுக்குக"
 
-#: ../libempathy-gtk/empathy-chat.c:178
+#: ../libempathy-gtk/empathy-chat.c:186
 msgid "Failed to reconnect this chat"
 msgstr "இந்த அரட்டைக்கு மீள் இணைப்பு தோற்றது "
 
-#: ../libempathy-gtk/empathy-chat.c:396
+#: ../libempathy-gtk/empathy-chat.c:404
 msgid "Unsupported command"
 msgstr "ஆதரவில்லாத கட்டளை"
 
-#: ../libempathy-gtk/empathy-chat.c:531
+#: ../libempathy-gtk/empathy-chat.c:539
 msgid "offline"
 msgstr "இணைப்பு விலகி "
 
-#: ../libempathy-gtk/empathy-chat.c:534
+#: ../libempathy-gtk/empathy-chat.c:542
 msgid "invalid contact"
 msgstr "செல்லுபடியாகாத தொடர்பு"
 
-#: ../libempathy-gtk/empathy-chat.c:537
+#: ../libempathy-gtk/empathy-chat.c:545
 msgid "permission denied"
 msgstr "அனுமதி மறுக்கப்பட்டது"
 
-#: ../libempathy-gtk/empathy-chat.c:540
+#: ../libempathy-gtk/empathy-chat.c:548
 msgid "too long message"
 msgstr "மிக நீள செய்தி"
 
-#: ../libempathy-gtk/empathy-chat.c:543
+#: ../libempathy-gtk/empathy-chat.c:551
 msgid "not implemented"
 msgstr "அமுலாக்கவில்லை"
 
-#: ../libempathy-gtk/empathy-chat.c:546
+#: ../libempathy-gtk/empathy-chat.c:554
 msgid "unknown"
 msgstr "தெரியாத"
 
-#: ../libempathy-gtk/empathy-chat.c:550
+#: ../libempathy-gtk/empathy-chat.c:558
 #, c-format
 msgid "Error sending message '%s': %s"
 msgstr "செய்தி '%s' அனுப்புவதில் பிழை: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:580
+#: ../libempathy-gtk/empathy-chat.c:588
 #, c-format
 msgid "Topic set to: %s"
 msgstr "தலைப்பு இதற்கு அமை: %s"
 
-#: ../libempathy-gtk/empathy-chat.c:582
+#: ../libempathy-gtk/empathy-chat.c:590
 msgid "No topic defined"
 msgstr "தலைப்பு ஏதும் வரையறுக்கப்படவில்லை"
 
-#: ../libempathy-gtk/empathy-chat.c:951
+#: ../libempathy-gtk/empathy-chat.c:959
 msgid "(No Suggestions)"
 msgstr "(பரிந்துரைகள் இல்லை )"
 
-#: ../libempathy-gtk/empathy-chat.c:1005
+#: ../libempathy-gtk/empathy-chat.c:1013
 msgid "Insert Smiley"
 msgstr "சிரிப்பானை சொருகு"
 
 #. send button
-#: ../libempathy-gtk/empathy-chat.c:1023
-#: ../libempathy-gtk/empathy-ui-utils.c:1507
+#: ../libempathy-gtk/empathy-chat.c:1031
+#: ../libempathy-gtk/empathy-ui-utils.c:1476
 msgid "_Send"
 msgstr "அனுப்பு (_S)"
 
-#: ../libempathy-gtk/empathy-chat.c:1057
+#: ../libempathy-gtk/empathy-chat.c:1065
 msgid "_Spelling Suggestions"
 msgstr "_S எழுத்தாக்க பரிந்துரைகள் "
 
-#: ../libempathy-gtk/empathy-chat.c:1171
+#: ../libempathy-gtk/empathy-chat.c:1179
 #, c-format
 msgid "%s has joined the room"
 msgstr "%s அறையில் சேர்ந்தார்"
 
-#: ../libempathy-gtk/empathy-chat.c:1174
+#: ../libempathy-gtk/empathy-chat.c:1182
 #, c-format
 msgid "%s has left the room"
 msgstr "%s அறையில் இருந்து வெளியேறினார்"
 
-#: ../libempathy-gtk/empathy-chat.c:1289 ../src/empathy-call-window.c:889
+#: ../libempathy-gtk/empathy-chat.c:1313 ../src/empathy-call-window.c:1199
 msgid "Disconnected"
 msgstr "துண்டிக்கபட்டது"
 
-#: ../libempathy-gtk/empathy-chat.c:1700
+#: ../libempathy-gtk/empathy-chat.c:1742
 msgid "Connected"
 msgstr "இணைக்கப்பட்டது"
 
-#: ../libempathy-gtk/empathy-chat.c:1750
+#: ../libempathy-gtk/empathy-chat.c:1792
 #: ../libempathy-gtk/empathy-log-window.c:501
 msgid "Conversation"
 msgstr "உரையாடல்"
 
-#: ../libempathy-gtk/empathy-chat.ui.h:1
-msgid "<b>Topic:</b>"
-msgstr "<b> தலைப்பு</b>"
+#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:471
+msgid "Topic:"
+msgstr "தலைப்பு:"
 
-#: ../libempathy-gtk/empathy-chat-text-view.c:323
+#: ../libempathy-gtk/empathy-chat-text-view.c:316
 msgid "_Copy Link Address"
 msgstr "இணைப்பு முகவரியை நகலெடு (_C)"
 
-#: ../libempathy-gtk/empathy-chat-text-view.c:331
+#: ../libempathy-gtk/empathy-chat-text-view.c:323
 msgid "_Open Link"
 msgstr "இணைப்பினை திற (_O)"
 
 #. Translators: timestamp displayed between conversations in
 #. * chat windows (strftime format string)
-#: ../libempathy-gtk/empathy-chat-text-view.c:424
+#: ../libempathy-gtk/empathy-chat-text-view.c:415
 msgid "%A %B %d %Y"
 msgstr "%A %B %d %Y"
 
 #: ../libempathy-gtk/empathy-contact-dialogs.c:179
-#: ../libempathy-gtk/empathy-contact-dialogs.c:237
+#: ../libempathy-gtk/empathy-contact-dialogs.c:238
 msgid "Edit Contact Information"
 msgstr "தொடர்பின்  தகவல் ஐ திருத்து"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:288
+#: ../libempathy-gtk/empathy-contact-dialogs.c:289
 msgid "Personal Information"
 msgstr "தனிப்பட்ட தகவல்"
 
-#: ../libempathy-gtk/empathy-contact-dialogs.c:368
-msgid "I would like to add you to my contact list."
-msgstr "உங்களை என் தொடர்பு பட்டியலில் சேர்க்க விரும்புகிறேன்."
-
 #: ../libempathy-gtk/empathy-contact-dialogs.c:392
 msgid "New Contact"
 msgstr "புதிய தொடர்பு"
@@ -694,52 +832,45 @@ msgstr "(_L) பிறகு முடிவு எடுக்கலாம்"
 msgid "Subscription Request"
 msgstr "சந்தா வேண்டுதல்"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1377
+#: ../libempathy-gtk/empathy-contact-list-view.c:1378
 #, c-format
 msgid "Do you really want to remove the group '%s'?"
 msgstr "நீங்கள் நிச்சயம் குழு '%s' ஐ நீக்க விரும்புகிறீர்களா?"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1379
+#: ../libempathy-gtk/empathy-contact-list-view.c:1380
 msgid "Removing group"
 msgstr "குழுவை நீக்குதல்"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1426
+#: ../libempathy-gtk/empathy-contact-list-view.c:1427
 #: ../libempathy-gtk/empathy-contact-list-view.c:1505
 msgid "_Remove"
 msgstr "நீக்கவும் (_R)"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1456
+#: ../libempathy-gtk/empathy-contact-list-view.c:1457
 #, c-format
 msgid "Do you really want to remove the contact '%s'?"
 msgstr "நீங்கள் நிச்சயம் தொடர்பு '%s' ஐ நீக்க விரும்புகிறீர்களா?"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1458
+#: ../libempathy-gtk/empathy-contact-list-view.c:1459
 msgid "Removing contact"
 msgstr "தொடர்பு ஐ நீக்குதல்"
 
-#: ../libempathy-gtk/empathy-contact-list-view.c:1463
-msgid "Sorry, I don't want you in my contact list anymore."
-msgstr "மன்னிக்கவும். மேலும் நீங்கள் தொடர்பு பட்டியலில் இருக்க வேண்டாம்."
-
 #: ../libempathy-gtk/empathy-contact-menu.c:135
-#: ../src/empathy-main-window.ui.h:9
+#: ../src/empathy-main-window.ui.h:8
 msgid "_Chat"
 msgstr "_C அரட்டை"
 
 #: ../libempathy-gtk/empathy-contact-menu.c:166
-
 msgctxt "menu item"
 msgid "_Audio Call"
 msgstr "(_A) ஒலி அழைப்பு"
 
 #: ../libempathy-gtk/empathy-contact-menu.c:198
-
 msgctxt "menu item"
 msgid "_Video Call"
 msgstr "(_V) விடியோ அழைப்பு"
 
 #: ../libempathy-gtk/empathy-contact-menu.c:237
-#: ../src/empathy-main-window.ui.h:18
 msgid "_View Previous Conversations"
 msgstr "(_V) முந்தைய உரையாடல்கள் ஐ காண்"
 
@@ -768,58 +899,167 @@ msgstr "(_I) அரட்டை அறைக்கு அழைப்பு"
 msgid "Select a contact"
 msgstr "ஒரு தொடர்பு ஐ தேர்வு செய்க"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:413
+#: ../libempathy-gtk/empathy-contact-widget.c:440
 msgid "Save Avatar"
 msgstr "அவதாரத்தை சேமி"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:469
+#: ../libempathy-gtk/empathy-contact-widget.c:496
 msgid "Unable to save avatar"
 msgstr "அவதாரத்தை சேமிக்க முடியவில்லை"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:952
+#: ../libempathy-gtk/empathy-contact-widget.c:979
 msgid "Select"
 msgstr "தேர்வு"
 
-#: ../libempathy-gtk/empathy-contact-widget.c:961
-#: ../src/empathy-main-window.c:894
+#: ../libempathy-gtk/empathy-contact-widget.c:988
+#: ../src/empathy-main-window.c:905
 msgid "Group"
 msgstr "குழு"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
-msgid "<b>Client Information</b>"
-msgstr "<b> சார்ந்தோன் தகவல்</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1239
+msgid "Country ISO Code:"
+msgstr "நாட்டின் ஐஎஸ்ஓ குறி:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:2
-msgid "<b>Contact Details</b>"
-msgstr "<b>சார்ந்தோன் தொடர்பு விவரங்கள்</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1241
+msgid "Country:"
+msgstr "நாடு:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:3
-msgid "<b>Contact</b>"
-msgstr "<b>தொடர்பு</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1243
+msgid "State:"
+msgstr "மாநிலம்:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:4
-msgid "<b>Groups</b>"
-msgstr "<b>குழுக்கள்</b>"
+#: ../libempathy-gtk/empathy-contact-widget.c:1245
+msgid "City:"
+msgstr "மாநகரம்:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:5
+#: ../libempathy-gtk/empathy-contact-widget.c:1247
+msgid "Area:"
+msgstr "வட்டாரம்"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1249
+msgid "Postal Code:"
+msgstr "அஞ்சல் குறி:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1251
+msgid "Street:"
+msgstr "தெரு:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1253
+msgid "Building:"
+msgstr "கட்டிடம்:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1255
+msgid "Floor:"
+msgstr "தளம்:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1257
+msgid "Room:"
+msgstr "அறை:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1259
+msgid "Text:"
+msgstr "உரை:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1261
+msgid "Description:"
+msgstr "விவரணம்:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1263
+msgid "URI:"
+msgstr "யூஆர்ஐ:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1265
+msgid "Accuracy Level:"
+msgstr "பிழையின்மை மட்டம்:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1267
+msgid "Error:"
+msgstr " பிழை:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1269
+msgid "Vertical Error (meters):"
+msgstr "செங்குத்து பிழை (மீட்டர்கள்):"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1271
+msgid "Horizontal Error (meters):"
+msgstr "கிடைமட்ட பிழை (மீட்டர்கள்):"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1273
+msgid "Speed:"
+msgstr "வேகம்:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1275
+msgid "Bearing:"
+msgstr "திசை கோணம்:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1277
+msgid "Climb Speed:"
+msgstr "ஏறும் வேகம்:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1279
+msgid "Last Updated on:"
+msgstr "கடைசியாக இற்றைப்படுத்தியது:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1281
+msgid "Longitude:"
+msgstr "தீர்கரேகை:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1283
+msgid "Latitude:"
+msgstr "அட்சரேகை:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1285
+msgid "Altitude:"
+msgstr "குத்துயரம்:"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1332
+msgid "<b>Location</b>"
+msgstr "<b>இடம்</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1345
+msgid "<b>Location</b>, "
+msgstr "<b>இடம்</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:1395
+msgid "%B %e, %Y at %R UTC"
+msgstr "%B %e, %Y  %R யூடுசி (UTC) இல்"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
+msgid "<b>Location</b> at (date)\t"
+msgstr "<b>இடம்</b> (date) போது\t"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:2
 #: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1
 #: ../src/empathy-chatrooms-window.ui.h:1
 #: ../src/empathy-new-chatroom-dialog.ui.h:1
 msgid "Account:"
 msgstr "கணக்கு:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:3
 msgid "Alias:"
 msgstr "புனைப்பெயர்:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:7
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:4
 msgid "Birthday:"
 msgstr "பிறந்தநாள்:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:8
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:5
+msgid "Client Information"
+msgstr "சார்ந்தோன் தகவல்"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
 msgid "Client:"
 msgstr "சார்ந்தோன்:"
 
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:7
+#: ../src/empathy-main-window.c:888
+msgid "Contact"
+msgstr "தொடர்பு"
+
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:8
+msgid "Contact Details"
+msgstr "தொடர்பு விவரங்கள்"
+
 #: ../libempathy-gtk/empathy-contact-widget.ui.h:9
 msgid "Email:"
 msgstr "மின்னஞ்சல்:"
@@ -828,20 +1068,24 @@ msgstr "மின்னஞ்சல்:"
 msgid "Fullname:"
 msgstr "முழுப்பெயர்:"
 
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:11
+msgid "Groups"
+msgstr "குழுக்கள்"
+
 #. Identifier to connect to Instant Messaging network
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:12
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:13
 msgid "Identifier:"
 msgstr "இனங்காட்டி:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:13
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:14
 msgid "Information requested..."
 msgstr "தகவல் வேண்டுதல்..."
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:14
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:15
 msgid "OS:"
 msgstr "OS:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:15
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:16
 msgid ""
 "Select the groups you want this contact to appear in.  Note that you can "
 "select more than one group or no groups."
@@ -849,15 +1093,15 @@ msgstr ""
 "இந்த தொடர்பு வர வேன்டிய குழுவை தேர்வு செய்க. நீங்கள் ஒன்றுக்கு மேற்பட்ட குழுக்களை தேர்வு "
 "செய்யலாம் அல்லது ஒன்றையும் தேர்வு செய்யாதிருக்கலாம்."
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:16
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:17
 msgid "Version:"
 msgstr "பதிப்பு:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:17
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:18
 msgid "Web site:"
 msgstr "வலைத்தளம்:"
 
-#: ../libempathy-gtk/empathy-contact-widget.ui.h:18
+#: ../libempathy-gtk/empathy-contact-widget.ui.h:19
 msgid "_Add Group"
 msgstr "குழுவை சேர் (_A)"
 
@@ -924,40 +1168,40 @@ msgstr "புதிய உரையாடல்"
 #. COL_DISPLAY_MARKUP
 #. COL_STATUS_CUSTOMISABLE
 #. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:169
+#: ../libempathy-gtk/empathy-presence-chooser.c:172
 msgid "Custom Message..."
 msgstr "தனிப்பயன் செய்தி..."
 
-#: ../libempathy-gtk/empathy-presence-chooser.c:225
+#: ../libempathy-gtk/empathy-presence-chooser.c:227
 msgid "Edit Custom Messages..."
 msgstr "திருத்து- தனிப்பயன் செய்திகள்..."
 
-#: ../libempathy-gtk/empathy-presence-chooser.c:324
+#: ../libempathy-gtk/empathy-presence-chooser.c:326
 msgid "Click to remove this status as a favorite"
 msgstr "இந்த நிலை பிடித்த நிலையாக இருப்பதை நீக்க சொடுக்கவும் "
 
-#: ../libempathy-gtk/empathy-presence-chooser.c:333
+#: ../libempathy-gtk/empathy-presence-chooser.c:335
 msgid "Click to make this status a favorite"
 msgstr "இந்த நிலை பிடித்த நிலையாக ஆக்க சொடுக்கவும் "
 
-#: ../libempathy-gtk/empathy-presence-chooser.c:367
+#: ../libempathy-gtk/empathy-presence-chooser.c:369
 msgid "Set status"
 msgstr "நிலையை அமை"
 
-#: ../libempathy-gtk/empathy-presence-chooser.c:776
+#: ../libempathy-gtk/empathy-presence-chooser.c:782
 msgid "Set your presence and current status"
 msgstr "உங்கள் நடப்பு நிலையையும் இருப்பையௌம் அமை "
 
 #. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1011
+#: ../libempathy-gtk/empathy-presence-chooser.c:1017
 msgid "Custom messages..."
 msgstr "தனிப்பயன் செய்திகள்..."
 
-#: ../libempathy-gtk/empathy-status-preset-dialog.c:360
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:362
 msgid "Enter Custom Message"
 msgstr "தனிப்பயன் செய்தியை உள்ளிடுக"
 
-#: ../libempathy-gtk/empathy-status-preset-dialog.c:482
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:521
 msgid "Edit Custom Messages"
 msgstr "தனிப்பயன் செய்திகளை திருத்துக"
 
@@ -977,67 +1221,75 @@ msgstr "ஜிடிகே-சேர்"
 msgid "gtk-remove"
 msgstr "ஜிடிகே-நீக்கு"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:60
+#: ../libempathy-gtk/empathy-theme-manager.c:66
 msgid "Classic"
 msgstr "தொன்மையான"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:61
+#: ../libempathy-gtk/empathy-theme-manager.c:67
 msgid "Simple"
 msgstr "எளிய"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:62
+#: ../libempathy-gtk/empathy-theme-manager.c:68
 msgid "Clean"
 msgstr "சுத்தமான"
 
-#: ../libempathy-gtk/empathy-theme-manager.c:63
+#: ../libempathy-gtk/empathy-theme-manager.c:69
 msgid "Blue"
 msgstr "நீலம்"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1354
+#: ../libempathy-gtk/empathy-theme-manager.c:71
+msgid "Adium"
+msgstr "ஏடியம்"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1378
 msgid "Unable to open URI"
 msgstr "யூஆர்ஐ ஐ திறக்க முடியவில்லை"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1499
+#: ../libempathy-gtk/empathy-ui-utils.c:1468
 msgid "Select a file"
 msgstr "கோப்பை தேர்வு செய்"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1535
+#: ../libempathy-gtk/empathy-ui-utils.c:1526
+msgid "Select a destination"
+msgstr "ஒரு இலக்கிடம் தேர்வு செய்க"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1555
 msgid "Received an instant message"
 msgstr "ஒரு உடனடி செய்தி கிடைக்கப்பெற்றது"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1537
+#: ../libempathy-gtk/empathy-ui-utils.c:1557
 msgid "Sent an instant message"
 msgstr "ஒரு உடனடி செய்தி அனுப்பு"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1539
+#: ../libempathy-gtk/empathy-ui-utils.c:1559
 msgid "Incoming chat request"
 msgstr "உள்வரும் அரட்டை வேண்டுதல்"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1541
+#: ../libempathy-gtk/empathy-ui-utils.c:1561
 msgid "Contact connected"
 msgstr "தொடர்பு இணைக்கப்பட்டது"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1543
+#: ../libempathy-gtk/empathy-ui-utils.c:1563
 msgid "Contact disconnected"
 msgstr "தொடர்பு துண்டிக்கப்பட்டது"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1545
+#: ../libempathy-gtk/empathy-ui-utils.c:1565
 msgid "Connected to server"
 msgstr "சேவையகத்துக்கு இணைக்கப்பட்டது"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1547
+#: ../libempathy-gtk/empathy-ui-utils.c:1567
 msgid "Disconnected from server"
 msgstr "சேவையகத்துக்கு இணைப்பு துண்டிக்கபட்டது"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1549
+#: ../libempathy-gtk/empathy-ui-utils.c:1569
 msgid "Incoming voice call"
 msgstr "உள்வரும் குரல் அழைப்பு"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1551
+#: ../libempathy-gtk/empathy-ui-utils.c:1571
 msgid "Outgoing voice call"
 msgstr "வெளி செல்லும் குரல் அழைப்பு"
 
-#: ../libempathy-gtk/empathy-ui-utils.c:1553
+#: ../libempathy-gtk/empathy-ui-utils.c:1573
 msgid "Voice call ended"
 msgstr "குரல் அழைப்பு முடிந்தது"
 
@@ -1212,8 +1464,7 @@ msgstr "வியட்னாம்"
 #. * vim: sw=2 ts=8 cindent noai bs=2
 #.
 #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
-msgid ""
-"The contact to display in the applet. Empty means no contact is displayed."
+msgid "The contact to display in the applet. Empty means no contact is displayed."
 msgstr "சிறுநிரலில் காட்ட வேண்டிய தொடர்பு. காலி எனில் காட்ட தொடர்பு  இல்லை"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
@@ -1239,7 +1490,7 @@ msgid "_Information"
 msgstr "(_I) தகவல்"
 
 #: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
-#: ../src/empathy-main-window.ui.h:16
+#: ../src/empathy-main-window.ui.h:18
 msgid "_Preferences"
 msgstr "முன்னுரிமைகள் (_P)"
 
@@ -1260,19 +1511,19 @@ msgstr "இருப்பு"
 msgid "Set your own presence"
 msgstr "உங்கள் இருப்பை அமைக்கவும்"
 
-#: ../src/empathy.c:437
+#: ../src/empathy.c:478
 msgid "Don't connect on startup"
 msgstr "துவங்கும்போது இணைக்க வேண்டாம்"
 
-#: ../src/empathy.c:441
+#: ../src/empathy.c:482
 msgid "Don't show the contact list on startup"
 msgstr "துவங்கும்போது தொடர்பு பட்டியல் ஐ காட்ட வேண்டாம்"
 
-#: ../src/empathy.c:445
+#: ../src/empathy.c:486
 msgid "Show the accounts dialog"
 msgstr "கணக்குகள் உரையாடல் ஐ காட்டு "
 
-#: ../src/empathy.c:457
+#: ../src/empathy.c:498
 msgid "- Empathy Instant Messenger"
 msgstr "- எம்பதி உடனடி செய்தியாளர்"
 
@@ -1316,21 +1567,21 @@ msgstr "க்னோமுக்கு ஒரு உடனடி செய்த
 msgid "translator-credits"
 msgstr "மொழிபெயர்ப்பாளர்-நன்றி அறிதல் "
 
-#: ../src/empathy-accounts-dialog.c:391
+#: ../src/empathy-accounts-dialog.c:393
 msgid "Enabled"
 msgstr "செயலாக்கப்பட்டது"
 
-#: ../src/empathy-accounts-dialog.c:401 ../src/empathy-accounts-dialog.ui.h:4
+#: ../src/empathy-accounts-dialog.c:403 ../src/empathy-accounts-dialog.ui.h:1
 msgid "Accounts"
 msgstr "கணக்குகள்"
 
 #. To translator: %s is the protocol name
-#: ../src/empathy-accounts-dialog.c:834
+#: ../src/empathy-accounts-dialog.c:837
 #, c-format
 msgid "New %s account"
 msgstr "புதிய %s கணக்கு"
 
-#: ../src/empathy-accounts-dialog.c:944
+#: ../src/empathy-accounts-dialog.c:950
 #, c-format
 msgid ""
 "You are about to remove your %s account!\n"
@@ -1339,7 +1590,7 @@ msgstr ""
 "நீங்கள் உங்கள் %s கணக்கை நீக்கப்போகிறீர்கள்!\n"
 "நிச்சயம் தொடர வேண்டுமா?"
 
-#: ../src/empathy-accounts-dialog.c:950
+#: ../src/empathy-accounts-dialog.c:956
 msgid ""
 "Any associated conversations and chat rooms will NOT be removed if you "
 "decide to proceed.\n"
@@ -1352,30 +1603,30 @@ msgstr ""
 "\n"
 "ஒரு வேளை பின்னொரு சமயம் கணக்கை புதுப்பிக்க எண்ணினால் அவை கிடைக்கும்."
 
-#: ../src/empathy-accounts-dialog.ui.h:1
-msgid "<b>New Account</b>"
-msgstr "<b> புதிய கணக்கு</b>"
-
 #: ../src/empathy-accounts-dialog.ui.h:2
-msgid "<b>No protocol installed</b>"
-msgstr "<b>நெறிமுறைகள் ஏதும் நிறுவவில்லை</b>"
+msgid "Add Account"
+msgstr "கணக்கு சேர்"
 
 #: ../src/empathy-accounts-dialog.ui.h:3
-msgid "<b>Settings</b>"
-msgstr "<b> அமைப்புகள்</b>"
-
-#: ../src/empathy-accounts-dialog.ui.h:5
 msgid "Cr_eate"
 msgstr "(_e) உருவாக்கு"
 
-#: ../src/empathy-accounts-dialog.ui.h:6
-msgid "I already have an account I want to use"
-msgstr "நானà¯\8d à®ªà®¯à®©à¯\8dபà®\9fà¯\81தà¯\8dத à®\8fà®±à¯\8dà®\95à¯\86னà¯\86வà¯\87 à®\92à®°à¯\81 à®\95ணà®\95à¯\8dà®\95à¯\81 à®\89ளà¯\8dளதà¯\81"
+#: ../src/empathy-accounts-dialog.ui.h:4
+msgid "Gmail"
+msgstr "à®\9cிமà¯\86யà¯\8dலà¯\8d"
 
-#: ../src/empathy-accounts-dialog.ui.h:7
+#: ../src/empathy-accounts-dialog.ui.h:5
 msgid "Import Accounts..."
 msgstr "கணக்குகளை இறக்குமதி செய்க..."
 
+#: ../src/empathy-accounts-dialog.ui.h:6
+msgid "No protocol installed"
+msgstr "நெறிமுறைகள் ஏதும் நிறுவவில்லை"
+
+#: ../src/empathy-accounts-dialog.ui.h:7
+msgid "Settings"
+msgstr "அமைப்புகள்"
+
 #: ../src/empathy-accounts-dialog.ui.h:8
 msgid ""
 "To add a new account, you first have to install a backend for each protocol "
@@ -1392,53 +1643,61 @@ msgstr "வகை:"
 msgid "_Add..."
 msgstr "சேர்... (_A)"
 
-#: ../src/empathy-call-window.c:370
+#: ../src/empathy-accounts-dialog.ui.h:11
+msgid "_Create a new account"
+msgstr "(_C) ஒரு புதிய கணக்கை துவக்கு"
+
+#: ../src/empathy-accounts-dialog.ui.h:12
+msgid "_Reuse an existing account"
+msgstr "(_R) இருக்கும் ஒரு கணக்கை மறு உபயோகம் செய்க"
+
+#: ../src/empathy-call-window.c:63
+msgid "Connecting..."
+msgstr "இணைக்கிறது...."
+
+#: ../src/empathy-call-window.c:415
 msgid "Contrast"
 msgstr "வேறுபாடு"
 
-#: ../src/empathy-call-window.c:373
+#: ../src/empathy-call-window.c:418
 msgid "Brightness"
 msgstr "வெளிச்சம்"
 
-#: ../src/empathy-call-window.c:376
+#: ../src/empathy-call-window.c:421
 msgid "Gamma"
 msgstr "காமா"
 
-#: ../src/empathy-call-window.c:480
+#: ../src/empathy-call-window.c:526
 msgid "Volume"
 msgstr "ஒலி அளவு"
 
-#: ../src/empathy-call-window.c:592
+#: ../src/empathy-call-window.c:728
 msgid "_Sidebar"
 msgstr "பக்கப்பட்டை(_S)"
 
-#: ../src/empathy-call-window.c:611
+#: ../src/empathy-call-window.c:747
 msgid "Dialpad"
 msgstr "டயல் அட்டை"
 
-#: ../src/empathy-call-window.c:617
+#: ../src/empathy-call-window.c:753
 msgid "Audio input"
 msgstr "ஒலி உள்ளீடு"
 
-#: ../src/empathy-call-window.c:621
+#: ../src/empathy-call-window.c:757
 msgid "Video input"
 msgstr "வீடியோ உள்ளீடு"
 
-#: ../src/empathy-call-window.c:645
-msgid "Connecting..."
-msgstr "இணைக்கிறது...."
-
-#: ../src/empathy-call-window.c:660
+#: ../src/empathy-call-window.c:820
 #, c-format
 msgid "Call with %s"
 msgstr "%s ஆல் அழை "
 
-#: ../src/empathy-call-window.c:694
+#: ../src/empathy-call-window.c:889
 msgid "Call"
 msgstr "அழை"
 
 #. Translators: number of minutes:seconds the caller has been connected
-#: ../src/empathy-call-window.c:971
+#: ../src/empathy-call-window.c:1308
 #, c-format
 msgid "Connected — %d:%02dm"
 msgstr "இணைக்கப்பட்டது — %d:%02dm"
@@ -1448,43 +1707,38 @@ msgid "Hang up"
 msgstr "துண்டி"
 
 #: ../src/empathy-call-window.ui.h:2
+msgid "Redial"
+msgstr "மறு முயற்சி"
+
+#: ../src/empathy-call-window.ui.h:3
 msgid "Send Audio"
 msgstr "ஒலி அனுப்பு "
 
-#: ../src/empathy-call-window.ui.h:3
+#: ../src/empathy-call-window.ui.h:4
 msgid "Send video"
 msgstr "விடியோ அனுப்பு"
 
-#: ../src/empathy-call-window.ui.h:4
+#: ../src/empathy-call-window.ui.h:5
 msgid "Video preview"
 msgstr "ஒளித்தோற்ற முன்னோட்டம்"
 
-#: ../src/empathy-call-window.ui.h:5
+#: ../src/empathy-call-window.ui.h:6
 msgid "_Call"
 msgstr "(_C) அழை"
 
-#: ../src/empathy-call-window.ui.h:6
+#: ../src/empathy-call-window.ui.h:7 ../src/empathy-main-window.ui.h:21
 msgid "_View"
 msgstr "பார்வை (_V)"
 
-#: ../src/empathy-chat-window.c:308
+#: ../src/empathy-chat-window.c:343
 #, c-format
 msgid "Conversations (%d)"
 msgstr "உரையாடல்கள் (%d)"
 
-#: ../src/empathy-chat-window.c:413
-msgid "Topic:"
-msgstr "தலைப்பு:"
-
-#: ../src/empathy-chat-window.c:418
+#: ../src/empathy-chat-window.c:475
 msgid "Typing a message."
 msgstr "செய்திகள் தட்டச்சிடல்"
 
-#: ../src/empathy-chat-window.c:889 ../src/empathy-event-manager.c:429
-#, c-format
-msgid "New message from %s"
-msgstr "%s இடமிருந்து புதிய செய்திகள்"
-
 #: ../src/empathy-chatrooms-window.c:258
 msgid "Name"
 msgstr "பெயர்"
@@ -1518,59 +1772,58 @@ msgstr "(_R) ஏற்காதே"
 msgid "_Answer"
 msgstr "(_A) பதிலளி"
 
-#: ../src/empathy-event-manager.c:507
+#: ../src/empathy-event-manager.c:505
 #, c-format
 msgid "Incoming call from %s"
 msgstr "%s இடமிருந்து உள்வரும் அழைப்பு"
 
-#: ../src/empathy-event-manager.c:547
+#: ../src/empathy-event-manager.c:545
 #, c-format
 msgid "%s is offering you an invitation"
 msgstr "%s உங்களுக்கு ஒரு அழைப்பு வேண்டுதல் விடுக்கிறார்"
 
-#: ../src/empathy-event-manager.c:553
+#: ../src/empathy-event-manager.c:551
 msgid "An external application will be started to handle it."
 msgstr "இதை கையாள ஒரு வெளி பயன்பாடு துவக்கப்படும்."
 
-#: ../src/empathy-event-manager.c:558
+#: ../src/empathy-event-manager.c:556
 msgid "You don't have the needed external application to handle it."
 msgstr "இதை கையாள தேவையான ஒரு வெளி பயன்பாடு உங்கள் கணினியில் இல்லை."
 
-#: ../src/empathy-event-manager.c:685
+#: ../src/empathy-event-manager.c:683
 msgid "Room invitation"
 msgstr "அறை அழைப்பு"
 
-#: ../src/empathy-event-manager.c:688
+#: ../src/empathy-event-manager.c:686
 #, c-format
 msgid "%s is inviting you to join %s"
 msgstr "%s உங்களை %s உடன் சேர அழைக்கிறார்."
 
-#. Decline button
-#: ../src/empathy-event-manager.c:696 ../src/empathy-ft-manager.c:1037
+#: ../src/empathy-event-manager.c:694
 msgid "_Decline"
 msgstr "நிராகரி (_D)"
 
-#: ../src/empathy-event-manager.c:701
-#: ../src/empathy-new-chatroom-dialog.ui.h:6
+#: ../src/empathy-event-manager.c:699
+#: ../src/empathy-new-chatroom-dialog.ui.h:7
 msgid "_Join"
 msgstr "(_J) இணை"
 
-#: ../src/empathy-event-manager.c:740
+#: ../src/empathy-event-manager.c:738
 #, c-format
 msgid "%s invited you to join %s"
 msgstr "%s  %s இல் சேர உங்களை அழைத்துள்ளார்"
 
-#: ../src/empathy-event-manager.c:848
+#: ../src/empathy-event-manager.c:764
 #, c-format
 msgid "Incoming file transfer from %s"
 msgstr "%s இடமிருந்து உள்வரும் கோப்பு பரிமாற்றம்."
 
-#: ../src/empathy-event-manager.c:923
+#: ../src/empathy-event-manager.c:944
 #, c-format
 msgid "Subscription requested by %s"
 msgstr "%s இன் சந்தா வேண்டுதல்"
 
-#: ../src/empathy-event-manager.c:927
+#: ../src/empathy-event-manager.c:948
 #, c-format
 msgid ""
 "\n"
@@ -1580,159 +1833,110 @@ msgstr ""
 "செய்தி: %s"
 
 #. Translators: time left, when it is more than one hour
-#: ../src/empathy-ft-manager.c:114
+#: ../src/empathy-ft-manager.c:101
 #, 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:117
+#: ../src/empathy-ft-manager.c:104
 #, c-format
 msgid "%02u.%02u"
 msgstr "%02u.%02u"
 
-#: ../src/empathy-ft-manager.c:166
-msgid "No reason was specified"
-msgstr "காரணம் குறிப்பிடவில்லை"
-
-#: ../src/empathy-ft-manager.c:168
-msgid "The change in state was requested"
-msgstr "நிலையில் மாற்றம் வேண்டப்பட்டது"
-
-#: ../src/empathy-ft-manager.c:170
-msgid "You canceled the file transfer"
-msgstr "நீங்கள் கோப்பு பரி மாற்றத்தை ரத்து செய்தீர்கள்"
-
-#: ../src/empathy-ft-manager.c:172
-msgid "The other participant canceled the file transfer"
-msgstr "மற்ற பங்குதாரர் கோப்பு பரி மாற்றத்தை ரத்து செய்தார்."
-
-#: ../src/empathy-ft-manager.c:174
-msgid "Error while trying to transfer the file"
-msgstr "கோப்பு பரி மாற்றத்தில்  பிழை "
+#: ../src/empathy-ft-manager.c:180
+msgctxt "file transfer percent"
+msgid "Unknown"
+msgstr "தெரியாத"
 
-#: ../src/empathy-ft-manager.c:176
-msgid "The other participant is unable to transfer the file"
-msgstr "மற்ற பங்குதாரர் கோப்பு பரி மாற்றத்தை செய்ய முடியவில்லை."
+#: ../src/empathy-ft-manager.c:275
+#, c-format
+msgid "%s of %s at %s/s"
+msgstr "%s %sல் %s/s இல்"
 
-#: ../src/empathy-ft-manager.c:178
-msgid "Unknown reason"
-msgstr "தெரியாத காரணம்"
+#: ../src/empathy-ft-manager.c:276
+#, c-format
+msgid "%s of %s"
+msgstr "%s %sல் "
 
 #. translators: first %s is filename, second %s is the contact name
-#: ../src/empathy-ft-manager.c:228
+#: ../src/empathy-ft-manager.c:307
 #, c-format
 msgid "Receiving \"%s\" from %s"
 msgstr " \"%s\" ஐ %s இடமிருந்து பெறுகிறது"
 
 #. translators: first %s is filename, second %s is the contact name
-#: ../src/empathy-ft-manager.c:231
+#: ../src/empathy-ft-manager.c:310
 #, c-format
 msgid "Sending \"%s\" to %s"
 msgstr "\"%s\" ஐ %s க்கு அனுப்புகிறது"
 
-#: ../src/empathy-ft-manager.c:242
-msgctxt "file size"
-msgid "Unknown"
-msgstr "தெரியாத"
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:340
+#, c-format
+msgid "Error receiving \"%s\" from %s"
+msgstr " \"%s\" ஐ %s இடமிருந்து பெறுகையில் பிழை"
 
-#. translators: first %s is the transferred size, second %s is
-#. * the total file size
-#: ../src/empathy-ft-manager.c:251
+#: ../src/empathy-ft-manager.c:343
+msgid "Error receiving a file"
+msgstr "கோப்பு பெறுகையில் பிழை"
+
+#: ../src/empathy-ft-manager.c:348
 #, c-format
-msgid "%s of %s at %s/s"
-msgstr "%s %sல் %s/s இல்"
+msgid "Error sending \"%s\" to %s"
+msgstr "\"%s\" ஐ %s க்கு அனுப்புகையில் பிழை"
 
-#: ../src/empathy-ft-manager.c:259
-msgid "Waiting for the other participant's response"
-msgstr "மறà¯\8dà®± à®ªà®\99à¯\8dà®\95à¯\87à®±à¯\8dபாளரினà¯\8d à®ªà®¤à®¿à®²à¯\81à®\95à¯\8dà®\95à¯\81 à®\95ாதà¯\8dதிரà¯\81தà¯\8dதலà¯\8d"
+#: ../src/empathy-ft-manager.c:351
+msgid "Error sending a file"
+msgstr "à®\95à¯\8bபà¯\8dபà¯\81 à®\85னà¯\81பà¯\8dபà¯\81வதிலà¯\8d à®ªà®¿à®´à¯\88"
 
-#: ../src/empathy-ft-manager.c:269
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:490
 #, c-format
 msgid "\"%s\" received from %s"
 msgstr "\"%s\"  %s இடமிருந்து கிடைத்தது"
 
-#: ../src/empathy-ft-manager.c:275
+#. translators: first %s is filename, second %s
+#. * is the contact name
+#: ../src/empathy-ft-manager.c:495
 #, c-format
 msgid "\"%s\" sent to %s"
 msgstr "\"%s\" %s க்கு அனுப்பப்பட்டது"
 
-#: ../src/empathy-ft-manager.c:278
+#: ../src/empathy-ft-manager.c:498
 msgid "File transfer completed"
 msgstr "கோப்பு பறிமாற்றம் முடிந்தது"
 
-#: ../src/empathy-ft-manager.c:287
-#, c-format
-msgid "\"%s\" receiving from %s"
-msgstr "\"%s\" %s இடமிருந்து பெறப்படுகிறது"
+#: ../src/empathy-ft-manager.c:617 ../src/empathy-ft-manager.c:784
+msgid "Waiting for the other participant's response"
+msgstr "மற்ற பங்கேற்பாளரின் பதிலுக்கு காத்திருத்தல்"
 
-#: ../src/empathy-ft-manager.c:293
+#: ../src/empathy-ft-manager.c:643 ../src/empathy-ft-manager.c:681
 #, c-format
-msgid "\"%s\" sending to %s"
-msgstr "\"%s\"  %s க்கு அனுப்பப்படுகிறது"
+msgid "Checking integrity of \"%s\""
+msgstr " \"%s\" இன் நம்பகத்தன்மையை சோதிக்கிறது"
 
-#: ../src/empathy-ft-manager.c:296
+#: ../src/empathy-ft-manager.c:646 ../src/empathy-ft-manager.c:684
 #, c-format
-msgid "File transfer canceled: %s"
-msgstr "கோப்பு பறிமாற்றம் ரத்து செய்யப்பட்டது.: %s"
-
-#: ../src/empathy-ft-manager.c:310
-msgctxt "remaining time"
-msgid "Stalled"
-msgstr "Stalled"
-
-#: ../src/empathy-ft-manager.c:313
-msgctxt "remaining time"
-msgid "Unknown"
-msgstr "தெரியாத"
-
-#: ../src/empathy-ft-manager.c:372
-msgctxt "file transfer percent"
-msgid "Unknown"
-msgstr "தெரியாத"
+msgid "Hashing \"%s\""
+msgstr " \"%s\" இன் ஹாஷ் மதிப்பை கணக்கிடுகிறது"
 
-#: ../src/empathy-ft-manager.c:668
+#: ../src/empathy-ft-manager.c:1024
 msgid "%"
 msgstr "%"
 
-#: ../src/empathy-ft-manager.c:680
+#: ../src/empathy-ft-manager.c:1036
 msgid "File"
 msgstr "கோப்பு"
 
-#: ../src/empathy-ft-manager.c:702
+#: ../src/empathy-ft-manager.c:1058
 msgid "Remaining"
 msgstr "மீதமுள்ளவை"
 
-#: ../src/empathy-ft-manager.c:900
-msgid "Cannot save file to this location"
-msgstr "இந்த இடத்தில் கோப்பை சேமிக்க முடியவில்லை"
-
-#: ../src/empathy-ft-manager.c:946
-msgid "Save file as..."
-msgstr "கோப்பை இவ்வாறு சேமி..."
-
-#: ../src/empathy-ft-manager.c:1016
-msgid "unknown size"
-msgstr "தெரியாத அளவு"
-
-#: ../src/empathy-ft-manager.c:1022
-#, c-format
-msgid "%s would like to send you a file"
-msgstr " %s உங்களுக்கு ஒரு  கோப்பை அனுப்ப விழைகிறார்."
-
-#. Translators: the first %s is the file name, the second %s is the file size
-#: ../src/empathy-ft-manager.c:1028
-#, c-format
-msgid "Do you want to accept the file \"%s\" (%s)?"
-msgstr "கோப்பு \"%s\" (%s) ஐ ஏற்க விருப்பமா?"
-
-#. Accept button
-#: ../src/empathy-ft-manager.c:1046
-msgid "_Accept"
-msgstr "ஏற்றுக்கொள் (_A)"
-
 #: ../src/empathy-ft-manager.ui.h:1
-msgid "File transfers"
+msgid "File Transfers"
 msgstr "கோப்பு பறிமாற்றங்கள் "
 
 #: ../src/empathy-ft-manager.ui.h:2
@@ -1766,139 +1970,147 @@ msgstr ""
 msgid "Import Accounts"
 msgstr "இறக்குமதி செய் கணக்குகள்"
 
-#: ../src/empathy-main-window.c:393
+#: ../src/empathy-main-window.c:395
 msgid "_Edit account"
 msgstr "(_E) கணக்குகளை திருத்துக"
 
-#: ../src/empathy-main-window.c:496
+#: ../src/empathy-main-window.c:498
 msgid "No error specified"
 msgstr "பிழை ஏதும் குறிப்பிடவில்லை"
 
-#: ../src/empathy-main-window.c:499
+#: ../src/empathy-main-window.c:501
 msgid "Network error"
 msgstr "வலையமைப்பு பிழை"
 
-#: ../src/empathy-main-window.c:502
+#: ../src/empathy-main-window.c:504
 msgid "Authentication failed"
 msgstr "உறுதி செய்தல் தோல்வி"
 
-#: ../src/empathy-main-window.c:505
+#: ../src/empathy-main-window.c:507
 msgid "Encryption error"
 msgstr "மறையாக்க பிழை"
 
-#: ../src/empathy-main-window.c:508
+#: ../src/empathy-main-window.c:510
 msgid "Name in use"
 msgstr "பயனில் உள்ள பெயர் "
 
-#: ../src/empathy-main-window.c:511
+#: ../src/empathy-main-window.c:513
 msgid "Certificate not provided"
 msgstr "சான்றிதழ் தரப்படவில்லை"
 
-#: ../src/empathy-main-window.c:514
+#: ../src/empathy-main-window.c:516
 msgid "Certificate untrusted"
 msgstr "சான்றிதழில் நம்பக தன்மை இல்லை"
 
-#: ../src/empathy-main-window.c:517
+#: ../src/empathy-main-window.c:519
 msgid "Certificate expired"
 msgstr "சான்றிதழ் காலாவதியானது"
 
-#: ../src/empathy-main-window.c:520
+#: ../src/empathy-main-window.c:522
 msgid "Certificate not activated"
 msgstr "சான்றிதழ் செயல்படுத்தப்படவில்லை"
 
-#: ../src/empathy-main-window.c:523
+#: ../src/empathy-main-window.c:525
 msgid "Certificate hostname mismatch"
 msgstr "சான்றிதழ் புரவலன் பெயர் ஒத்திசையவில்லை"
 
-#: ../src/empathy-main-window.c:526
+#: ../src/empathy-main-window.c:528
 msgid "Certificate fingerprint mismatch"
 msgstr "சான்றிதழ் அடையாளம் ஒத்திசையவில்லை"
 
-#: ../src/empathy-main-window.c:529
+#: ../src/empathy-main-window.c:531
 msgid "Certificate self-signed"
 msgstr "சான்றிதழ் தானே கையெழுத்திட்டது"
 
-#: ../src/empathy-main-window.c:532
+#: ../src/empathy-main-window.c:534
 msgid "Certificate error"
 msgstr "சான்றிதழ் பிழை"
 
-#: ../src/empathy-main-window.c:535
+#: ../src/empathy-main-window.c:537
 msgid "Unknown error"
 msgstr "தெரியாத பிழை"
 
-#: ../src/empathy-main-window.c:877
-msgid "Contact"
-msgstr "தொடர்பு"
-
-#: ../src/empathy-main-window.c:1194
+#: ../src/empathy-main-window.c:1220
 msgid "Show and edit accounts"
 msgstr "கணக்குகளை காட்டவும் மற்றும் திருத்தவும் "
 
-#: ../src/empathy-main-window.ui.h:1
+#: ../src/empathy-main-window.ui.h:1 ../src/empathy-preferences.ui.h:10
 msgid "Contact List"
 msgstr "தொடர்பு பட்டியல்"
 
 #: ../src/empathy-main-window.ui.h:2
+msgid "Contacts on a _Map"
+msgstr "(_M) தொடர்புகளை படத்தில் காட்டு "
+
+#: ../src/empathy-main-window.ui.h:3
 msgid "Context"
 msgstr "சூழல்"
 
-#: ../src/empathy-main-window.ui.h:3
+#: ../src/empathy-main-window.ui.h:4
 msgid "Join _Favorites"
 msgstr "(_F) விருப்பங்கள் சேர் "
 
-#: ../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
-msgid "Show _File Transfers"
-msgstr "(_F) கோப்பு பறிமாற்றங்களை காட்டுக"
-
 #: ../src/empathy-main-window.ui.h:6
-msgid "Show _Offline Contacts"
-msgstr "(_O) இணைப்பு விலகி உள்ள தொடர்புகள் ஐ காட்டுக"
-
-#: ../src/empathy-main-window.ui.h:7
 msgid "_Accounts"
 msgstr "கணக்குகள் (_A)"
 
-#: ../src/empathy-main-window.ui.h:8
+#: ../src/empathy-main-window.ui.h:7
 msgid "_Add Contact..."
 msgstr "(_A) தொடர்பை  சேர்..."
 
-#: ../src/empathy-main-window.ui.h:10
+#: ../src/empathy-main-window.ui.h:9
 msgid "_Contents"
 msgstr "உள்ளடக்கங்கள் (_C)"
 
+#: ../src/empathy-main-window.ui.h:10
+msgid "_Debug"
+msgstr "(_D) வழு நீக்கு"
+
 #: ../src/empathy-main-window.ui.h:12
+msgid "_File Transfers"
+msgstr "(_F) கோப்பு பறிமாற்றங்கள் "
+
+#: ../src/empathy-main-window.ui.h:13
 msgid "_Help"
 msgstr "உதவி (_H)"
 
-#: ../src/empathy-main-window.ui.h:13
+#: ../src/empathy-main-window.ui.h:14
 msgid "_Join..."
 msgstr "(_J) சேர்..."
 
-#: ../src/empathy-main-window.ui.h:14 ../src/empathy-status-icon.ui.h:2
+#: ../src/empathy-main-window.ui.h:15 ../src/empathy-status-icon.ui.h:2
 msgid "_New Conversation..."
 msgstr "(_N) புதிய உரையாடல்..."
 
-#: ../src/empathy-main-window.ui.h:15
+#: ../src/empathy-main-window.ui.h:16
+msgid "_Offline Contacts"
+msgstr "(_O) இணைப்பு விலகி உள்ள தொடர்புகள்"
+
+#: ../src/empathy-main-window.ui.h:17
 msgid "_Personal Information"
 msgstr "(_P) தனிப்பட்ட தகவல்"
 
-#: ../src/empathy-main-window.ui.h:17
+#: ../src/empathy-main-window.ui.h:19
+msgid "_Previous Conversations"
+msgstr "(_P) முந்தைய உரையாடல்கள்"
+
+#: ../src/empathy-main-window.ui.h:20
 msgid "_Room"
 msgstr "(_R) அறை"
 
-#: ../src/empathy-new-chatroom-dialog.c:319
+#: ../src/empathy-new-chatroom-dialog.c:332
 msgid "Chat Room"
 msgstr "அரட்டை அறை"
 
-#: ../src/empathy-new-chatroom-dialog.c:335
+#: ../src/empathy-new-chatroom-dialog.c:348
 msgid "Members"
 msgstr "உறுப்பினர்கள்"
 
-#: ../src/empathy-new-chatroom-dialog.c:464
+#: ../src/empathy-new-chatroom-dialog.c:492
 #, c-format
 msgctxt ""
 "Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no "
@@ -1910,28 +2122,39 @@ msgid ""
 "Members: %s"
 msgstr ""
 "<b>%s</b>\n"
-"Invite required: %s\n"
-"Password required: %s\n"
-"Members: %s"
+"அழைப்பு தேவை: %s\n"
+"கடவுச்சொல் தேவை: %s\n"
+"உறுப்பினர்கள்: %s"
 
-#: ../src/empathy-new-chatroom-dialog.c:466
-#: ../src/empathy-new-chatroom-dialog.c:467
+#: ../src/empathy-new-chatroom-dialog.c:494
+#: ../src/empathy-new-chatroom-dialog.c:495
 msgid "Yes"
 msgstr "ஆம்"
 
-#: ../src/empathy-new-chatroom-dialog.c:466
-#: ../src/empathy-new-chatroom-dialog.c:467
+#: ../src/empathy-new-chatroom-dialog.c:494
+#: ../src/empathy-new-chatroom-dialog.c:495
 msgid "No"
 msgstr "இல்லை"
 
+#: ../src/empathy-new-chatroom-dialog.c:522
+msgid "Could not start room listing"
+msgstr "அறை பட்டியலை எடுப்பதை துவக்க முடியவில்லை"
+
+#: ../src/empathy-new-chatroom-dialog.c:532
+msgid "Could not stop room listing"
+msgstr "அறை பட்டியலை எடுப்பதை நிறுத்த முடியவில்லை"
+
 #: ../src/empathy-new-chatroom-dialog.ui.h:2
-msgid ""
-"Enter the room name to join here or click on one or more rooms in the list."
+msgid "Couldn't load room list"
+msgstr "அறை பட்டியலை ஏற்ற முடியவில்லை"
+
+#: ../src/empathy-new-chatroom-dialog.ui.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
 msgstr ""
 "சேருவதற்கான அறை பெயரை இங்கு உள்ளிடுக. அல்லது பட்டியலில் உள்ள ஒன்றோ மேற்பட்ட பெயர்களையோ "
 "சொடுக்குக."
 
-#: ../src/empathy-new-chatroom-dialog.ui.h:3
+#: ../src/empathy-new-chatroom-dialog.ui.h:4
 msgid ""
 "Enter the server which hosts the room, or leave it empty if the room is on "
 "the current account's server"
@@ -1939,158 +2162,206 @@ msgstr ""
 "அறையை தரும் சேவையகத்தின் பெயரை இங்கு உள்ளிடுக. அல்லது அது நடப்பு சேவையகத்தில் இருந்தால் "
 "வெற்றாக விடவும்."
 
-#: ../src/empathy-new-chatroom-dialog.ui.h:4
+#: ../src/empathy-new-chatroom-dialog.ui.h:5
 msgid "Join Room"
 msgstr "அறை இல் சேர் "
 
-#: ../src/empathy-new-chatroom-dialog.ui.h:5
+#: ../src/empathy-new-chatroom-dialog.ui.h:6
 msgid "Room List"
 msgstr "அறை பட்டியல்"
 
-#: ../src/empathy-new-chatroom-dialog.ui.h:7
+#: ../src/empathy-new-chatroom-dialog.ui.h:8
 msgid "_Room:"
 msgstr "(_R) அறை:"
 
-#: ../src/empathy-preferences.c:156
+#: ../src/empathy-preferences.c:159
 msgid "Message received"
 msgstr "தகவல் பெறப்பட்டது"
 
-#: ../src/empathy-preferences.c:157
+#: ../src/empathy-preferences.c:160
 msgid "Message sent"
 msgstr "தகவல் அனுப்பப்பட்டது"
 
-#: ../src/empathy-preferences.c:158
+#: ../src/empathy-preferences.c:161
 msgid "New conversation"
 msgstr "புதிய உரையாடல்"
 
-#: ../src/empathy-preferences.c:159
+#: ../src/empathy-preferences.c:162
 msgid "Contact goes online"
 msgstr "தொடர்பு இணைபில் வருகிறார்"
 
-#: ../src/empathy-preferences.c:160
+#: ../src/empathy-preferences.c:163
 msgid "Contact goes offline"
 msgstr "தொடர்பு இணைப்பு விலகி செல்கிறார்"
 
-#: ../src/empathy-preferences.c:161
+#: ../src/empathy-preferences.c:164
 msgid "Account connected"
 msgstr "கணக்கு இணைக்கப்பட்டது"
 
-#: ../src/empathy-preferences.c:162
+#: ../src/empathy-preferences.c:165
 msgid "Account disconnected"
 msgstr "கணக்கு இணைப்பு நீக்கப்பட்டது"
 
-#: ../src/empathy-preferences.c:397
+#: ../src/empathy-preferences.c:432
 msgid "Language"
 msgstr "மொழி"
 
 #: ../src/empathy-preferences.ui.h:1
-msgid "<b>Appearance</b>"
-msgstr "<b>தோற்றம்</b>"
+msgid "Adium theme to use:"
+msgstr "பயன்படுத்த வேண்டிய ஏடியம்  கருத்து:"
 
 #: ../src/empathy-preferences.ui.h:2
-msgid "<b>Behavior</b>"
-msgstr "<b>நடத்தை</b>"
+msgid "Allow _GPS usage"
+msgstr "(_G) ஜிபிஎஸ் பயனை அனுமதி"
 
 #: ../src/empathy-preferences.ui.h:3
-msgid "<b>Contact List</b>"
-msgstr "<b> தொடர்பு பட்டியல்</b>"
+msgid "Allow _cellphone usage"
+msgstr "(_c)  அலைபேசி பயனை அனுமதி"
 
 #: ../src/empathy-preferences.ui.h:4
-msgid "<b>Enable spell checking for languages:</b>"
-msgstr "<b>மொழிகளுக்கு எழுத்து பிழை திருத்தத்தை செயல்படுத்து</b>"
+msgid "Allow _network usage"
+msgstr "(_n)  வலைப்பின்னல் பயனை அனுமதி"
 
 #: ../src/empathy-preferences.ui.h:5
-msgid "<b>Play sound for events</b>"
-msgstr "<b>நிகழ்வுகளுக்கு ஒலியை இயக்கு</b>"
+msgid "Appearance"
+msgstr "தோற்றம்"
 
 #: ../src/empathy-preferences.ui.h:6
-msgid ""
-"<small>The list of languages reflects only the languages for which you have "
-"a dictionary installed.</small>"
-msgstr ""
-"<small>இந்த பட்டியல் நீங்கள் எந்த மொழிகளுக்கு அகராதி நிறுவி இருக்கிறீர்களோ அவற்றை மட்டுமே "
-"காட்டுகிறது</small>"
-
-#: ../src/empathy-preferences.ui.h:7
 msgid "Automatically _connect on startup "
 msgstr "(_c) துவங்கும்போது தானியங்கியாக இணை"
 
-#: ../src/empathy-preferences.ui.h:8
+#: ../src/empathy-preferences.ui.h:7
 msgid "Avatars are user chosen images shown in the contact list"
 msgstr "அவதாரங்கள் என்பது தொடர்பு பட்டியலில் காணப்படும் பயனர் தேர்ந்தெடுத்த பிம்பங்கள்"
 
+#: ../src/empathy-preferences.ui.h:8
+msgid "Behavior"
+msgstr "நடத்தை"
+
 #: ../src/empathy-preferences.ui.h:9
 msgid "Chat Th_eme:"
 msgstr "(_e) அரட்டை கருத்து:"
 
-#: ../src/empathy-preferences.ui.h:10
+#: ../src/empathy-preferences.ui.h:11
 msgid "Disable notifications when _away or busy"
 msgstr "(_a) வெளியே  அல்லது வேலையில் உள்ளபோது அறிவிப்புகளை செயல் நீக்கு"
 
-#: ../src/empathy-preferences.ui.h:11
+#: ../src/empathy-preferences.ui.h:12
 msgid "Disable sounds when _away or busy"
 msgstr "(_a) வெளியே  அல்லது வேலையில் உள்ளபோது ஒலிகளை செயல் நீக்கு"
 
-#: ../src/empathy-preferences.ui.h:12
+#: ../src/empathy-preferences.ui.h:13
 msgid "Enable notifications when the _chat is not focused"
 msgstr "(_c) அரட்டை குவிப்பில் இல்லாத போது அறிவிப்புகளை செயல்படுத்து"
 
-#: ../src/empathy-preferences.ui.h:13
+#: ../src/empathy-preferences.ui.h:14
+msgid "Enable spell checking for languages:"
+msgstr "மொழிகளுக்கு எழுத்து பிழை திருத்தத்தை செயல்படுத்து:"
+
+#: ../src/empathy-preferences.ui.h:15
 msgid "General"
 msgstr "பொது"
 
-#: ../src/empathy-preferences.ui.h:14
+#: ../src/empathy-preferences.ui.h:16
+msgid "Geoclue Settings"
+msgstr "ஜியோ க்ளூ அமைப்புகள்"
+
+#: ../src/empathy-preferences.ui.h:17
+msgid "Location"
+msgstr "இடம்"
+
+#: ../src/empathy-preferences.ui.h:18
+msgid "Not a valid adium theme"
+msgstr "செல்லுபடியாகும் ஏடியம் கருத்து அல்ல"
+
+#: ../src/empathy-preferences.ui.h:19
 msgid "Notifications"
 msgstr "அறிவிப்புகள்"
 
-#: ../src/empathy-preferences.ui.h:15
+#: ../src/empathy-preferences.ui.h:20
+msgid "Play sound for events"
+msgstr "நிகழ்வுகளுக்கு ஒலியை இயக்கு"
+
+#: ../src/empathy-preferences.ui.h:21
 msgid "Preferences"
 msgstr "விருப்பங்கள்"
 
-#: ../src/empathy-preferences.ui.h:16
+#: ../src/empathy-preferences.ui.h:22
+msgid "Privacy"
+msgstr "அந்தரங்கம்"
+
+#: ../src/empathy-preferences.ui.h:23
+msgid ""
+"Reduced location accuracy means that nothing more precise than your city, "
+"state and country will be published.  GPS coordinates will have a random "
+"value added (&#xB1;0.25&#xB0;)."
+msgstr ""
+"குறைத்த இட குறிப்பு எனில் உங்கள் மாநகரம், மாநிலம், நாடு தவிர ஒன்றும் "
+"வெளியிடப்படாது. ஜிபிஎஸ் ஆயத்தொலைவுகளுக்கு தற்போக்கு மதிப்பு சேர்க்கப்படும் "
+"(&#xB1;0.25&#xB0;)."
+
+#: ../src/empathy-preferences.ui.h:24
 msgid "Show _avatars"
 msgstr "(_a) அவதாரங்களை காட்டு"
 
-#: ../src/empathy-preferences.ui.h:17
+#: ../src/empathy-preferences.ui.h:25
 msgid "Show _smileys as images"
 msgstr "(_s) சிரிப்பான்களை பிம்பங்களாக காட்டு"
 
-#: ../src/empathy-preferences.ui.h:18
+#: ../src/empathy-preferences.ui.h:26
 msgid "Show co_mpact contact list"
 msgstr "(_m) அடக்கமான தொடர்பு பட்டியல் ஐ காட்டு "
 
-#: ../src/empathy-preferences.ui.h:19
+#: ../src/empathy-preferences.ui.h:27
+msgid "Show contact _list in rooms"
+msgstr "(_l) அறைகளில் தொடர்பு பட்டியல் ஐ காட்டு "
+
+#: ../src/empathy-preferences.ui.h:28
 msgid "Sort by _name"
 msgstr "(_n) பெயர் ஆல் வரிசைப்படுத்து"
 
-#: ../src/empathy-preferences.ui.h:20
+#: ../src/empathy-preferences.ui.h:29
 msgid "Sort by s_tate"
 msgstr "(_t) நிலை வாரியாக வரிசைப்படுத்து"
 
-#: ../src/empathy-preferences.ui.h:21
+#: ../src/empathy-preferences.ui.h:30
 msgid "Sounds"
 msgstr "ஒலிகள்"
 
-#: ../src/empathy-preferences.ui.h:22
+#: ../src/empathy-preferences.ui.h:31
 msgid "Spell Checking"
 msgstr "எழுத்து பிழை திருத்தம்"
 
-#: ../src/empathy-preferences.ui.h:23
+#: ../src/empathy-preferences.ui.h:32
+msgid ""
+"The list of languages reflects only the languages for which you have a "
+"dictionary installed."
+msgstr "இந்த பட்டியல் நீங்கள் எந்த மொழிகளுக்கு அகராதி நிறுவி இருக்கிறீர்களோ அவற்றை மட்டுமே காட்டுகிறது"
+
+#: ../src/empathy-preferences.ui.h:33
 msgid "Themes"
 msgstr "கருத்துகள்"
 
-#: ../src/empathy-preferences.ui.h:24
+#: ../src/empathy-preferences.ui.h:34
 msgid "_Enable bubble notifications"
 msgstr "(_E) பலூனில் அறிவிப்புகளை செயல்படுத்து"
 
-#: ../src/empathy-preferences.ui.h:25
+#: ../src/empathy-preferences.ui.h:35
 msgid "_Enable sound notifications"
 msgstr "(_E) ஒலி அறிவிப்புகளை செயல்படுத்து"
 
-#: ../src/empathy-preferences.ui.h:26
+#: ../src/empathy-preferences.ui.h:36
 msgid "_Open new chats in separate windows"
 msgstr "(_O) புதிய அரட்டைகளை தனி சாளரங்களில் திற"
 
+#: ../src/empathy-preferences.ui.h:37
+msgid "_Publish location to my contacts"
+msgstr "(_P) என் தொடர்புகளுக்கு இடத்தை வெளியிடு"
+
+#: ../src/empathy-preferences.ui.h:38
+msgid "_Reduce location accuracy"
+msgstr "(_R) இடத்தின் குறிப்பை குறை"
+
 #: ../src/empathy-status-icon.ui.h:1
 msgid "Status"
 msgstr "நிலை"
@@ -2114,9 +2385,78 @@ msgid ""
 "An invitation was offered for service %s, but you don't have the needed "
 "application to handle it"
 msgstr ""
-" %s சேவைக்கு அழைப்பு கொடுக்கப்பட்டது ஆனால் அதை கையாள உங்கள் கணினியில் தேவையான பயன்பாடு "
+" %s சேவைக்கு அழைப்பு கொடுக்கப்பட்டது. ஆனால் அதை கையாள உங்கள் கணினியில் தேவையான பயன்பாடு "
 "இல்லை"
 
 #: ../src/empathy-call-window-fullscreen.ui.h:1
 msgid "gtk-leave-fullscreen"
 msgstr "ஜிடிகே முழுத்திரையை  விட்டுவிலகு"
+
+#: ../src/empathy-map-view.ui.h:1
+msgid "Contact Map View"
+msgstr "தொடர்புகள் படக்காட்சி"
+
+#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1075
+msgid "Error"
+msgstr " பிழை"
+
+#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1069
+msgid "Critical"
+msgstr "ஆபத்தானன்"
+
+#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1063
+msgid "Warning"
+msgstr "எச்சரிக்கை"
+
+#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1057
+#: ../src/empathy-debug-dialog.c:1105
+msgid "Message"
+msgstr "செய்தி"
+
+#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1051
+msgid "Info"
+msgstr "தகவல்"
+
+#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1045
+msgid "Debug"
+msgstr "வழுநீக்கு"
+
+#: ../src/empathy-debug-dialog.c:837
+msgid "Save"
+msgstr "சேமி"
+
+#: ../src/empathy-debug-dialog.c:940
+msgid "Debug Window"
+msgstr "வழு நீக்கு சாளரம்"
+
+#: ../src/empathy-debug-dialog.c:1013
+msgid "Pause"
+msgstr "தாமதி"
+
+#: ../src/empathy-debug-dialog.c:1025
+msgid "Level "
+msgstr "மட்டம்"
+
+#: ../src/empathy-debug-dialog.c:1094
+msgid "Time"
+msgstr "நேரம்"
+
+#: ../src/empathy-debug-dialog.c:1096
+msgid "Domain"
+msgstr "களம்"
+
+#: ../src/empathy-debug-dialog.c:1098
+msgid "Category"
+msgstr "வகை"
+
+#: ../src/empathy-debug-dialog.c:1100
+msgid "Level"
+msgstr "மட்டம்"
+
+#: ../src/empathy-debug-dialog.c:1132
+msgid ""
+"The selected connection manager does not support the remote debugging "
+"extension."
+msgstr "தேர்ந்தெடுத்த இணைப்பு மேலாளர் தொலை வழு நீக்கத்தை ஆதரிக்கவில்லை"
+
+
index 02c8dad1978c40e43da88298f455e6a3ca048c08..ed19c7a96e00cb35d95a3f8b8b75b8a961c288d6 100644 (file)
   (gtype-id "EMPATHY_TYPE_TP_ROOMLIST")
 )
 
-(define-object TpTube
-  (in-module "Empathy")
-  (parent "GObject")
-  (c-name "EmpathyTpTube")
-  (gtype-id "EMPATHY_TYPE_TP_TUBE")
-)
-
 (define-object TubeHandler
   (in-module "Empathy")
   (parent "GObject")
     '("gsize" "len")
     '("gchar*" "format")
     '("gchar*" "token")
+    '("gchar*" "filename")
   )
 )
 
 
 
 
-;; From empathy-tp-tube.h
-
-(define-function tp_tube_get_type
-  (c-name "empathy_tp_tube_get_type")
-  (return-type "GType")
-)
-
-(define-function tp_tube_new
-  (c-name "empathy_tp_tube_new")
-  (is-constructor-of "EmpathyTpTube")
-  (return-type "EmpathyTpTube*")
-  (parameters
-    '("TpChannel*" "channel")
-  )
-)
-
-(define-function tp_tube_new_stream_tube
-  (c-name "empathy_tp_tube_new_stream_tube")
-  (return-type "EmpathyTpTube*")
-  (parameters
-    '("EmpathyContact*" "contact")
-    '("TpSocketAddressType" "type")
-    '("const-gchar*" "hostname")
-    '("guint" "port")
-    '("const-gchar*" "service")
-    '("GHashTable*" "parameters")
-  )
-)
-
-(define-method accept_stream_tube
-  (of-object "EmpathyTpTube")
-  (c-name "empathy_tp_tube_accept_stream_tube")
-  (return-type "none")
-  (parameters
-    '("TpSocketAddressType" "type")
-    '("EmpathyTpTubeAcceptStreamTubeCb*" "callback")
-    '("gpointer" "user_data")
-  )
-)
-
-(define-method call_when_ready
-  (of-object "EmpathyTpTube")
-  (c-name "empathy_tp_tube_call_when_ready")
-  (return-type "none")
-  (parameters
-    '("EmpathyTpTubeReadyCb*" "callback")
-    '("gpointer" "user_data")
-    '("GDestroyNotify" "destroy")
-    '("GObject*" "weak_object")
-  )
-)
-
-
-
 ;; From empathy-tube-handler.h
 
 (define-function tube_handler_get_type
index c985be7b638abf31dca4ae02bb0e4493007b2158..6f46405a358f799142312898830af2922f4cf678 100644 (file)
@@ -31,7 +31,6 @@ headers
 #include "empathy-tp-contact-list.h"
 #include "empathy-tp-file.h"
 #include "empathy-tp-roomlist.h"
-#include "empathy-tp-tube.h"
 #include "empathy-tube-handler.h"
 #include "empathy-utils.h"
 
index f174a68872615735cebf35e43be285a10df2bbc1..cf85c785345b4326e6c2aaf4aaab1535e8006c7e 100644 (file)
   (varargs #t)
 )
 
-(define-method add_from_pixbuf
-  (of-object "EmpathySmileyManager")
-  (c-name "empathy_smiley_manager_add_from_pixbuf")
-  (return-type "none")
-  (parameters
-    '("GdkPixbuf*" "smiley")
-    '("const-gchar*" "first_str")
-  )
-  (varargs #t)
-)
-
 (define-method get_all
   (of-object "EmpathySmileyManager")
   (c-name "empathy_smiley_manager_get_all")
   )
 )
 
+(define-function filename_from_icon_name
+  (c-name "empathy_filename_from_icon_name")
+  (return-type "gchar*")
+  (parameters
+    '("const-gchar*" "icon_name")
+    '("GtkIconSize" "icon_size")
+  )
+)
+
 (define-function text_iter_forward_search
   (c-name "empathy_text_iter_forward_search")
   (return-type "gboolean")
index 1f6e4ae7838bd549c8b7ef76caa88aa19bdb25ab..854c33159c2e92d7946511d26624c9bd7c88eb3a 100755 (executable)
@@ -36,7 +36,6 @@ python /usr/share/pygobject/2.0/codegen/h2def.py      \
        empathy-tp-contact-list.h               \
        empathy-tp-file.h                       \
        empathy-tp-roomlist.h                   \
-       empathy-tp-tube.h                       \
        empathy-tube-handler.h                  \
        empathy-types.h                         \
        empathy-utils.h                         \
index 9d20d1ab621d1d80192552e2255ddd3fc4411a78..c7b773363d98c3fac6fc31b2623aee7f8911c420 100755 (executable)
@@ -161,6 +161,16 @@ class Project:
                        translations += format % (lang, authors)
                return translations
 
+       def get_bug_author(self, bug_number):
+               cmd = 'git log %s.. | grep -B 20 -E "(bug %s|#%s)"' \
+                     ' | tac | grep ^Author: | head -1' \
+                     % (self.last_tag, bug_number, bug_number)
+               line = self.exec_cmd (cmd)
+               p1 = line.find(" ")
+               p2 = line.find("<")
+
+               return line[p1:p2].strip()
+
        def get_bugs(self):
                commit_str = self.exec_cmd('git show %s' % (self.last_tag))
                for line in commit_str.splitlines():
@@ -196,7 +206,11 @@ class Project:
                for row in reader:
                        bug_number = row[col_bug_id]
                        description = row[col_description]
-                       bugs += ' - Fixed #%s, %s\n' % (bug_number, description)
+                       author = self.get_bug_author(bug_number)
+                       bugs += ' - Fixed #%s, %s' % (bug_number, description)
+                       if author != '':
+                               bugs += ' (%s)' % (author)
+                       bugs += '\n'
                return bugs
 
        def generate_news(self):
index db21179869b6995f70e46e203ff6fa0d4dcf0def..42485b7d1fed7105ee9f131effd608787523db09 100644 (file)
@@ -3,10 +3,12 @@ include $(top_srcdir)/tools/flymake.mk
 
 AM_CPPFLAGS =                                          \
        -I$(top_srcdir)                                 \
+       -DG_LOG_DOMAIN=\"empathy\"                      \
        $(EMPATHY_CFLAGS)                               \
        $(LIBNOTIFY_CFLAGS)                             \
        $(LIBCHAMPLAIN_CFLAGS)                          \
-       $(DISABLE_DEPRECATED)
+       $(DISABLE_DEPRECATED)                           \
+       $(WEBKIT_CFLAGS)                                \
        $(WARN_CFLAGS)
 
 LDADD =                                                                \
@@ -15,7 +17,8 @@ LDADD =                                                               \
        $(top_builddir)/extensions/libemp-extensions.la         \
        $(LIBNOTIFY_LIBS)                                       \
        $(EMPATHY_LIBS)                                         \
-       $(LIBCHAMPLAIN_LIBS)
+       $(LIBCHAMPLAIN_LIBS)                                    \
+       $(WEBKIT_LIBS)
 
 bin_PROGRAMS =                 \
        empathy                 \
@@ -75,12 +78,22 @@ ui_DATA =                                   \
        empathy-preferences.ui                  \
        empathy-status-icon.ui
 
+EXTRA_DIST =                   \
+       $(autostart_DATA)       \
+       $(ui_DATA)
+
 if HAVE_LIBCHAMPLAIN
-empathy_SOURCES +=                             \
-       empathy-map-view.c empathy-map-view.h
+empathy_handwritten_source +=                          \
+       empathy-map-view.c                      \
+       empathy-map-view.h
 
 ui_DATA +=                                     \
        empathy-map-view.ui
+else
+EXTRA_DIST +=                                  \
+       empathy-map-view.c                      \
+       empathy-map-view.h                      \
+       empathy-map-view.ui
 endif
 
 dist_man_MANS =                        \
@@ -104,9 +117,5 @@ dist_man_MANS =                     \
        --vtail "      { 0, NULL, NULL }\n    };\n    etype = g_@type@_register_static (\"@EnumName@\", values);\n  }\n  return etype;\n}\n" \
        $< > $@
 
-EXTRA_DIST =                   \
-       $(autostart_DATA)       \
-       $(ui_DATA)
-
 CLEANFILES = $(BUILT_SOURCES)
 
index 62c5458646c443530d91c4bad1e34d61c5d5168c..dd30e3aedae297ed080dace490c0c804533172d6 100644 (file)
@@ -25,8 +25,7 @@
 #include <config.h>
 
 #include <glib/gi18n.h>
-#include <gtk/gtkaboutdialog.h>
-#include <gtk/gtksizegroup.h>
+#include <gtk/gtk.h>
 
 #include <libempathy-gtk/empathy-ui-utils.h>
 
index 3e8f405315e0c9b84f76e99380c28888cbd115d6..a290b32436ef8748468af4a06aefbfe4e18b58d0 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef __EMPATHY_ABOUT_DIALOG_H__
 #define __EMPATHY_ABOUT_DIALOG_H__
 
-#include <gtk/gtkwindow.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
index dcf6bcc960c534a992432786000cf13bb8385391..4cf39110875c0d0fa906ff660b4beadc6ae35075 100644 (file)
@@ -72,7 +72,8 @@ typedef struct {
        GtkWidget        *hbox_type;
        GtkWidget        *button_create;
        GtkWidget        *button_back;
-       GtkWidget        *checkbutton_register;
+       GtkWidget        *radiobutton_reuse;
+       GtkWidget        *radiobutton_register;
 
        GtkWidget        *image_type;
        GtkWidget        *label_name;
@@ -396,7 +397,7 @@ accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog)
        g_signal_connect (cell, "toggled",
                          G_CALLBACK (accounts_dialog_enable_toggled_cb),
                          dialog);
-       
+
        /* Account column */
        column = gtk_tree_view_column_new ();
        gtk_tree_view_column_set_title (column, _("Accounts"));
@@ -416,6 +417,7 @@ accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog)
        cell = gtk_cell_renderer_text_new ();
        g_object_set (cell,
                      "ellipsize", PANGO_ELLIPSIZE_END,
+                     "width-chars", 25,
                      "editable", TRUE,
                      NULL);
        gtk_tree_view_column_pack_start (column, cell, TRUE);
@@ -439,7 +441,7 @@ accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog)
        /* select first */
        view = GTK_TREE_VIEW (dialog->treeview);
        model = gtk_tree_view_get_model (view);
-       
+
        if (gtk_tree_model_get_iter_first (model, &iter)) {
                selection = gtk_tree_view_get_selection (view);
                gtk_tree_selection_select_iter (selection, &iter);
@@ -509,7 +511,7 @@ accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
        GtkTreeSelection *selection;
        GtkTreeModel     *model;
        gboolean          ok;
-       
+
        /* Update the status in the model */
        view = GTK_TREE_VIEW (dialog->treeview);
        selection = gtk_tree_view_get_selection (view);
@@ -729,7 +731,7 @@ accounts_dialog_connection_changed_cb     (EmpathyAccountManager    *manager,
        GtkTreeModel *model;
        GtkTreeIter   iter;
        gboolean      found;
-       
+
        /* Update the status in the model */
        model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
 
@@ -842,8 +844,8 @@ accounts_dialog_button_create_clicked_cb (GtkWidget             *button,
        if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) {
                gboolean active;
 
-               active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_register));
-               if (!active) {
+               active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_register));
+               if (active) {
                        mc_account_set_param_boolean (account, "register", TRUE);
                }
        }
@@ -877,9 +879,11 @@ accounts_dialog_profile_changed_cb (GtkWidget             *widget,
        cap = mc_profile_get_capabilities (profile);
 
        if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) {
-               gtk_widget_show (dialog->checkbutton_register);
+               gtk_widget_show (dialog->radiobutton_register);
+               gtk_widget_show (dialog->radiobutton_reuse);
        } else {
-               gtk_widget_hide (dialog->checkbutton_register);
+               gtk_widget_hide (dialog->radiobutton_register);
+               gtk_widget_hide (dialog->radiobutton_reuse);
        }
        g_object_unref (profile);
 }
@@ -910,8 +914,8 @@ accounts_dialog_button_add_clicked_cb (GtkWidget             *button,
                gtk_widget_hide (dialog->button_back);
        }
 
-       accounts_dialog_profile_changed_cb (dialog->checkbutton_register, dialog);
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_register),
+       accounts_dialog_profile_changed_cb (dialog->radiobutton_register, dialog);
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_reuse),
                                      TRUE);
        gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_profile), 0);
        gtk_widget_grab_focus (dialog->combobox_profile);
@@ -1038,7 +1042,7 @@ accounts_dialog_destroy_cb (GtkWidget            *widget,
 
        g_object_unref (dialog->account_manager);
        g_object_unref (dialog->mc);
-       
+
        g_free (dialog);
 }
 
@@ -1071,7 +1075,8 @@ empathy_accounts_dialog_show (GtkWindow *parent,
                                       "hbox_type", &dialog->hbox_type,
                                       "button_create", &dialog->button_create,
                                       "button_back", &dialog->button_back,
-                                      "checkbutton_register", &dialog->checkbutton_register,
+                                      "radiobutton_reuse", &dialog->radiobutton_reuse,
+                                      "radiobutton_register", &dialog->radiobutton_register,
                                       "image_type", &dialog->image_type,
                                       "label_name", &dialog->label_name,
                                       "button_add", &dialog->button_add,
index 40ea24f3e5ce17a68513e9c0a343af7c043ae185..b8c3d3691036146bcc12e648f0b9f4c717232623 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef __EMPATHY_ACCOUNTS_DIALOG_H__
 #define __EMPATHY_ACCOUNTS_DIALOG_H__
 
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 
 #include <libmissioncontrol/mc-account.h>
 
index 49862d853f0659cec4b13bdf2dfe8e95568cd55b..cf1b23ef4da20cd8f7230ee33bf4c51b84a49a29 100644 (file)
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkScrolledWindow" id="scrolledwindow17">
+                    <property name="height_request">200</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <property name="hscrollbar_policy">automatic</property>
+                    <property name="hscrollbar_policy">never</property>
                     <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">in</property>
                     <child>
                       <object class="GtkTreeView" id="treeview">
-                        <property name="width_request">250</property>
-                        <property name="height_request">200</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="enable_search">False</property>
             </child>
             <child>
               <object class="GtkVBox" id="vbox214">
-                <property name="width_request">415</property>
                 <property name="visible">True</property>
                 <property name="spacing">18</property>
                 <child>
                           <object class="GtkLabel" id="label_name">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="label">&lt;big&gt;&lt;b&gt;Gmail&lt;/b&gt;&lt;/big&gt;</property>
-                            <property name="use_markup">True</property>
+                            <property name="label" translatable="yes">Gmail</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                              <attribute name="scale" value="1.2"/>
+                            </attributes>
                             <property name="selectable">True</property>
                           </object>
                           <packing>
                         <child type="label">
                           <object class="GtkLabel" id="label599">
                             <property name="visible">True</property>
-                            <property name="label" translatable="yes">&lt;b&gt;Settings&lt;/b&gt;</property>
-                            <property name="use_markup">True</property>
+                            <property name="label" translatable="yes">Settings</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
                           </object>
                         </child>
                       </object>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="checkbutton_register">
-                                <property name="label" translatable="yes">I already have an account I want to use</property>
+                              <object class="GtkVBox" id="vbox2">
                                 <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>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkRadioButton" id="radiobutton_reuse">
+                                    <property name="label" translatable="yes">_Reuse an existing account</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">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkRadioButton" id="radiobutton_register">
+                                    <property name="label" translatable="yes">_Create a new account</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>
+                                    <property name="group">radiobutton_reuse</property>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
                               </object>
                               <packing>
                                 <property name="position">2</property>
                               <object class="GtkHBox" id="hbox181">
                                 <property name="visible">True</property>
                                 <property name="spacing">6</property>
+                                <child>
+                                  <object class="GtkButton" id="button_back">
+                                    <property name="label">gtk-cancel</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="use_stock">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="pack_type">end</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
                                 <child>
                                   <object class="GtkButton" id="button_create">
                                     <property name="visible">True</property>
                                       </object>
                                     </child>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="pack_type">end</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkButton" id="button_back">
-                                    <property name="label">gtk-cancel</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
-                                  </object>
                                   <packing>
                                     <property name="expand">False</property>
                                     <property name="fill">False</property>
                     <child type="label">
                       <object class="GtkLabel" id="label643">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;New Account&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">Add Account</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
                     <child type="label">
                       <object class="GtkLabel" id="label_no_protocol">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;No protocol installed&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">No protocol installed</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
index 08c0e7ea203bc0ffda8df7031d51939297b281fa..a71e9c8bebdaf2d27c6ce4119043bb8be77d775a 100644 (file)
@@ -32,6 +32,7 @@
 #include <telepathy-farsight/channel.h>
 
 #include <libempathy/empathy-tp-contact-factory.h>
+#include <libempathy/empathy-call-factory.h>
 #include <libempathy/empathy-utils.h>
 #include <libempathy-gtk/empathy-avatar-image.h>
 #include <libempathy-gtk/empathy-video-widget.h>
@@ -39,9 +40,9 @@
 #include <libempathy-gtk/empathy-audio-sink.h>
 #include <libempathy-gtk/empathy-video-src.h>
 #include <libempathy-gtk/empathy-ui-utils.h>
+#include <libempathy-gtk/empathy-sound.h>
 
 #include "empathy-call-window.h"
-
 #include "empathy-call-window-fullscreen.h"
 #include "empathy-sidebar.h"
 
 #define REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT
 #define REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT
 
+/* If an video input error occurs, the error message will start with "v4l" */
+#define VIDEO_INPUT_ERROR_PREFIX "v4l"
+
+/* The time interval in milliseconds between 2 outgoing rings */
+#define MS_BETWEEN_RING 500
+
 G_DEFINE_TYPE(EmpathyCallWindow, empathy_call_window, GTK_TYPE_WINDOW)
 
 /* signal enum */
@@ -75,6 +82,13 @@ enum {
   PROP_CALL_HANDLER = 1,
 };
 
+typedef enum {
+  CONNECTING,
+  CONNECTED,
+  DISCONNECTED,
+  REDIALING
+} CallState;
+
 /* private structure */
 typedef struct _EmpathyCallWindowPriv EmpathyCallWindowPriv;
 
@@ -84,7 +98,8 @@ struct _EmpathyCallWindowPriv
   EmpathyCallHandler *handler;
   EmpathyContact *contact;
 
-  gboolean connected;
+  guint call_state;
+  gboolean outgoing;
 
   GtkUIManager *ui_manager;
   GtkWidget *video_output;
@@ -95,24 +110,36 @@ struct _EmpathyCallWindowPriv
   GtkWidget *sidebar_button;
   GtkWidget *statusbar;
   GtkWidget *volume_button;
+  GtkWidget *redial_button;
   GtkWidget *mic_button;
   GtkWidget *camera_button;
   GtkWidget *toolbar;
   GtkWidget *pane;
+  GtkAction *show_preview;
   GtkAction *send_video;
+  GtkAction *redial;
   GtkAction *menu_fullscreen;
 
+  /* The frames and boxes that contain self and remote avatar and video
+     input/output. When we redial, we destroy and re-create the boxes */
+  GtkWidget *remote_user_output_frame;
+  GtkWidget *self_user_output_frame;
+  GtkWidget *remote_user_output_hbox;
+  GtkWidget *self_user_output_hbox;
+
   /* We keep a reference on the hbox which contains the main content so we can
      easilly repack everything when toggling fullscreen */
   GtkWidget *content_hbox;
 
-  /* This vbox is contained in the content_hbox. When toggling fullscreen,
+  /* This vbox is contained in the content_hbox and it contains the
+     self_user_output_frame and the sidebar button. When toggling fullscreen,
      it needs to be repacked. We keep a reference on it for easier access. */
   GtkWidget *vbox;
 
   gulong video_output_motion_handler_id;
 
   gdouble volume;
+  GtkWidget *volume_progress_bar;
   GtkAdjustment *audio_input_adj;
 
   GtkWidget *dtmf_panel;
@@ -168,6 +195,9 @@ static void empathy_call_window_sidebar_toggled_cb (GtkToggleButton *toggle,
 static void empathy_call_window_camera_toggled_cb (GtkToggleToolButton *toggle,
   EmpathyCallWindow *window);
 
+static void empathy_call_window_set_send_video (EmpathyCallWindow *window,
+  gboolean send);
+
 static void empathy_call_window_send_video_toggled_cb (GtkToggleAction *toggle,
   EmpathyCallWindow *window);
 
@@ -203,9 +233,17 @@ static gboolean empathy_call_window_video_output_motion_notify (GtkWidget *widge
 static void empathy_call_window_video_menu_popup (EmpathyCallWindow *window,
   guint button);
 
+static void empathy_call_window_redial_cb (gpointer object,
+  EmpathyCallWindow *window);
+
+static void empathy_call_window_restart_call (EmpathyCallWindow *window);
+
 static void empathy_call_window_status_message (EmpathyCallWindow *window,
   gchar *message);
 
+static void empathy_call_window_update_avatars_visibility (EmpathyTpCall *call,
+  EmpathyCallWindow *window);
+
 static gboolean empathy_call_window_bus_message (GstBus *bus,
   GstMessage *message, gpointer user_data);
 
@@ -455,7 +493,7 @@ empathy_call_window_mic_volume_changed_cb (GtkAdjustment *adj,
     priv->volume = volume;
 
   /* Ensure that the toggle button is active if the volume is > 0 and inactive
-   * if it's smaller then 0 */
+   * if it's smaller than 0 */
   if ((volume > 0) != gtk_toggle_tool_button_get_active (
         GTK_TOGGLE_TOOL_BUTTON (priv->mic_button)))
     gtk_toggle_tool_button_set_active (
@@ -467,19 +505,20 @@ empathy_call_window_mic_volume_changed_cb (GtkAdjustment *adj,
 
 static void
 empathy_call_window_audio_input_level_changed_cb (EmpathyGstAudioSrc *src,
-  gdouble level, GtkProgressBar *bar)
+  gdouble level, EmpathyCallWindow *window)
 {
   gdouble value;
+  EmpathyCallWindowPriv *priv = GET_PRIV (window);
 
   value = CLAMP (pow (10, level / 20), 0.0, 1.0);
-  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar), value);
+  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->volume_progress_bar), value);
 }
 
 static GtkWidget *
 empathy_call_window_create_audio_input (EmpathyCallWindow *self)
 {
   EmpathyCallWindowPriv *priv = GET_PRIV (self);
-  GtkWidget *hbox, *vbox, *scale, *progress, *label;
+  GtkWidget *hbox, *vbox, *scale, *label;
   GtkAdjustment *adj;
 
   hbox = gtk_hbox_new (TRUE, 3);
@@ -502,17 +541,130 @@ empathy_call_window_create_audio_input (EmpathyCallWindow *self)
   gtk_box_pack_start (GTK_BOX (vbox), scale, TRUE, TRUE, 3);
   gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 3);
 
-  progress = gtk_progress_bar_new ();
-  gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progress),
-    GTK_PROGRESS_BOTTOM_TO_TOP);
-  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), 0);
+  priv->volume_progress_bar = gtk_progress_bar_new ();
+  gtk_progress_bar_set_orientation (
+      GTK_PROGRESS_BAR (priv->volume_progress_bar), GTK_PROGRESS_BOTTOM_TO_TOP);
+  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->volume_progress_bar),
+      0);
+
+  gtk_box_pack_start (GTK_BOX (hbox), priv->volume_progress_bar, FALSE, FALSE,
+      3);
+
+  return hbox;
+}
+
+static void
+empathy_call_window_setup_remote_frame (GstBus *bus, EmpathyCallWindow *self)
+{
+  EmpathyCallWindowPriv *priv = GET_PRIV (self);
+
+  /* Initializing all the content (UI and output gst elements) related to the
+     remote contact */
+  priv->remote_user_output_hbox = gtk_hbox_new (FALSE, 0);
+
+  priv->remote_user_avatar_widget = gtk_image_new ();
+  gtk_box_pack_start (GTK_BOX (priv->remote_user_output_hbox),
+      priv->remote_user_avatar_widget, TRUE, TRUE, 0);
+
+  priv->video_output = empathy_video_widget_new (bus);
+  gtk_box_pack_start (GTK_BOX (priv->remote_user_output_hbox),
+      priv->video_output, TRUE, TRUE, 0);
+
+  gtk_widget_add_events (priv->video_output,
+      GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK);
+  g_signal_connect (G_OBJECT (priv->video_output), "button-press-event",
+      G_CALLBACK (empathy_call_window_video_button_press_cb), self);
+
+  gtk_container_add (GTK_CONTAINER (priv->remote_user_output_frame),
+      priv->remote_user_output_hbox);
+
+  priv->audio_output = empathy_audio_sink_new ();
+  gst_object_ref (priv->audio_output);
+  gst_object_sink (priv->audio_output);
+}
+
+static void
+empathy_call_window_setup_self_frame (GstBus *bus, EmpathyCallWindow *self)
+{
+  EmpathyCallWindowPriv *priv = GET_PRIV (self);
+
+  /* Initializing all the content (UI and input gst elements) related to the
+     self contact, except for the video preview widget. This widget is only
+     initialized when the "show video preview" option is activated */
+  priv->self_user_output_hbox = gtk_hbox_new (FALSE, 0);
+
+  priv->self_user_avatar_widget = gtk_image_new ();
+  gtk_box_pack_start (GTK_BOX (priv->self_user_output_hbox),
+      priv->self_user_avatar_widget, TRUE, TRUE, 0);
+
+  gtk_container_add (GTK_CONTAINER (priv->self_user_output_frame),
+      priv->self_user_output_hbox);
+
+  priv->video_input = empathy_video_src_new ();
+  gst_object_ref (priv->video_input);
+  gst_object_sink (priv->video_input);
+
+  priv->audio_input = empathy_audio_src_new ();
+  gst_object_ref (priv->audio_input);
+  gst_object_sink (priv->audio_input);
 
   g_signal_connect (priv->audio_input, "peak-level-changed",
-    G_CALLBACK (empathy_call_window_audio_input_level_changed_cb), progress);
+    G_CALLBACK (empathy_call_window_audio_input_level_changed_cb), self);
+}
+
+static void
+empathy_call_window_setup_video_preview (EmpathyCallWindow *window)
+{
+  EmpathyCallWindowPriv *priv = GET_PRIV (window);
+  GstElement *preview;
+  GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
 
-  gtk_box_pack_start (GTK_BOX (hbox), progress, FALSE, FALSE, 3);
+  if (priv->video_preview != NULL)
+    {
+      /* Since the video preview and the video tee are initialized and freed
+         at the same time, if one is initialized, then the other one should
+         be too. */
+      g_assert (priv->video_tee != NULL);
+      return;
+    }
 
-  return hbox;
+  g_assert (priv->video_tee == NULL);
+
+  priv->video_tee = gst_element_factory_make ("tee", NULL);
+  gst_object_ref (priv->video_tee);
+  gst_object_sink (priv->video_tee);
+
+  priv->video_preview = empathy_video_widget_new_with_size (bus,
+      SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGTH);
+  g_object_set (priv->video_preview, "sync", FALSE, "async", TRUE, NULL);
+  gtk_box_pack_start (GTK_BOX (priv->self_user_output_hbox),
+      priv->video_preview, TRUE, TRUE, 0);
+
+  preview = empathy_video_widget_get_element (
+      EMPATHY_VIDEO_WIDGET (priv->video_preview));
+  gst_bin_add_many (GST_BIN (priv->pipeline), priv->video_input,
+      priv->video_tee, preview, NULL);
+  gst_element_link_many (priv->video_input, priv->video_tee,
+      preview, NULL);
+
+  g_object_unref (bus);
+
+  gst_element_set_state (preview, GST_STATE_PLAYING);
+  gst_element_set_state (priv->video_input, GST_STATE_PLAYING);
+  gst_element_set_state (priv->video_tee, GST_STATE_PLAYING);
+}
+
+static void
+empathy_call_window_set_state_connecting (EmpathyCallWindow *window)
+{
+  EmpathyCallWindowPriv *priv = GET_PRIV (window);
+
+  empathy_call_window_status_message (window, _("Connecting..."));
+  priv->call_state = CONNECTING;
+
+  if (priv->outgoing)
+    empathy_sound_start_playing (GTK_WIDGET (window),
+        EMPATHY_SOUND_PHONE_OUTGOING, MS_BETWEEN_RING);
 }
 
 static void
@@ -524,8 +676,6 @@ empathy_call_window_init (EmpathyCallWindow *self)
   GtkWidget *h;
   GtkWidget *arrow;
   GtkWidget *page;
-  GtkWidget *remote_user_output_frame, *self_user_output_frame;
-  GtkWidget *remote_user_output_hbox, *self_user_output_hbox;
   GstBus *bus;
   gchar *filename;
 
@@ -534,10 +684,13 @@ empathy_call_window_init (EmpathyCallWindow *self)
     "call_window_vbox", &top_vbox,
     "pane", &priv->pane,
     "statusbar", &priv->statusbar,
+    "redial", &priv->redial_button,
     "microphone", &priv->mic_button,
     "camera", &priv->camera_button,
     "toolbar", &priv->toolbar,
     "send_video", &priv->send_video,
+    "menuredial", &priv->redial,
+    "show_preview", &priv->show_preview,
     "ui_manager", &priv->ui_manager,
     "menufullscreen", &priv->menu_fullscreen,
     NULL);
@@ -545,6 +698,8 @@ empathy_call_window_init (EmpathyCallWindow *self)
   empathy_builder_connect (gui, self,
     "menuhangup", "activate", empathy_call_window_hangup_cb,
     "hangup", "clicked", empathy_call_window_hangup_cb,
+    "menuredial", "activate", empathy_call_window_redial_cb,
+    "redial", "clicked", empathy_call_window_redial_cb,
     "microphone", "toggled", empathy_call_window_mic_toggled_cb,
     "camera", "toggled", empathy_call_window_camera_toggled_cb,
     "send_video", "toggled", empathy_call_window_send_video_toggled_cb,
@@ -558,80 +713,33 @@ empathy_call_window_init (EmpathyCallWindow *self)
 
   empathy_call_window_setup_toolbar (self);
 
-  priv->pipeline = gst_pipeline_new (NULL);
-
   priv->content_hbox = gtk_hbox_new (FALSE, CONTENT_HBOX_SPACING);
   gtk_container_set_border_width (GTK_CONTAINER (priv->content_hbox),
                                   CONTENT_HBOX_BORDER_WIDTH);
   gtk_paned_pack1 (GTK_PANED (priv->pane), priv->content_hbox, TRUE, FALSE);
 
+  priv->pipeline = gst_pipeline_new (NULL);
   bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
-
   gst_bus_add_watch (bus, empathy_call_window_bus_message, self);
 
-  remote_user_output_frame = gtk_frame_new (NULL);
-  gtk_widget_set_size_request (remote_user_output_frame,
+  priv->remote_user_output_frame = gtk_frame_new (NULL);
+  gtk_widget_set_size_request (priv->remote_user_output_frame,
       EMPATHY_VIDEO_WIDGET_DEFAULT_WIDTH, EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT);
-  remote_user_output_hbox = gtk_hbox_new (FALSE, 0);
-
-  priv->remote_user_avatar_widget = gtk_image_new ();
-  gtk_box_pack_start (GTK_BOX (remote_user_output_hbox),
-      priv->remote_user_avatar_widget, TRUE, TRUE, 0);
-
-  priv->video_output = empathy_video_widget_new (bus);
-  gtk_box_pack_start (GTK_BOX (remote_user_output_hbox),
-      priv->video_output, TRUE, TRUE, 0);
-
-  gtk_container_add (GTK_CONTAINER (remote_user_output_frame),
-      remote_user_output_hbox);
-
-  gtk_widget_add_events (priv->video_output,
-      GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK);
-  g_signal_connect (G_OBJECT (priv->video_output), "button-press-event",
-      G_CALLBACK (empathy_call_window_video_button_press_cb), self);
-  gtk_box_pack_start (GTK_BOX (priv->content_hbox), remote_user_output_frame,
-      TRUE, TRUE, CONTENT_HBOX_CHILDREN_PACKING_PADDING);
+  gtk_box_pack_start (GTK_BOX (priv->content_hbox),
+      priv->remote_user_output_frame, TRUE, TRUE,
+      CONTENT_HBOX_CHILDREN_PACKING_PADDING);
+  empathy_call_window_setup_remote_frame (bus, self);
 
-  priv->video_tee = gst_element_factory_make ("tee", NULL);
-  gst_object_ref (priv->video_tee);
-  gst_object_sink (priv->video_tee);
+  priv->self_user_output_frame = gtk_frame_new (NULL);
+  gtk_widget_set_size_request (priv->self_user_output_frame,
+      SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGTH);
 
   priv->vbox = gtk_vbox_new (FALSE, 3);
   gtk_box_pack_start (GTK_BOX (priv->content_hbox), priv->vbox,
-                      FALSE, FALSE, CONTENT_HBOX_CHILDREN_PACKING_PADDING);
-
-  self_user_output_frame = gtk_frame_new (NULL);
-  gtk_widget_set_size_request (self_user_output_frame, SELF_VIDEO_SECTION_WIDTH,
-      SELF_VIDEO_SECTION_HEIGTH);
-  self_user_output_hbox = gtk_hbox_new (FALSE, 0);
-
-  priv->self_user_avatar_widget = gtk_image_new ();
-  gtk_box_pack_start (GTK_BOX (self_user_output_hbox),
-      priv->self_user_avatar_widget, TRUE, TRUE, 0);
-
-  priv->video_preview = empathy_video_widget_new_with_size (bus,
-      SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGTH);
-  g_object_set (priv->video_preview, "sync", FALSE, "async", TRUE, NULL);
-  gtk_box_pack_start (GTK_BOX (self_user_output_hbox), priv->video_preview,
-      TRUE, TRUE, 0);
-
-  gtk_container_add (GTK_CONTAINER (self_user_output_frame),
-      self_user_output_hbox);
-
-  gtk_box_pack_start (GTK_BOX (priv->vbox), self_user_output_frame, FALSE,
+      FALSE, FALSE, CONTENT_HBOX_CHILDREN_PACKING_PADDING);
+  gtk_box_pack_start (GTK_BOX (priv->vbox), priv->self_user_output_frame, FALSE,
       FALSE, 0);
-
-  priv->video_input = empathy_video_src_new ();
-  gst_object_ref (priv->video_input);
-  gst_object_sink (priv->video_input);
-
-  priv->audio_input = empathy_audio_src_new ();
-  gst_object_ref (priv->audio_input);
-  gst_object_sink (priv->audio_input);
-
-  priv->audio_output = empathy_audio_sink_new ();
-  gst_object_ref (priv->audio_output);
-  gst_object_sink (priv->audio_output);
+  empathy_call_window_setup_self_frame (bus, self);
 
   g_object_unref (bus);
 
@@ -688,8 +796,6 @@ empathy_call_window_init (EmpathyCallWindow *self)
   g_signal_connect (G_OBJECT (self), "key-press-event",
       G_CALLBACK (empathy_call_window_key_press_cb), self);
 
-  empathy_call_window_status_message (self, _("Connecting..."));
-
   priv->timer = g_timer_new ();
 
   g_object_ref (priv->ui_manager);
@@ -764,14 +870,12 @@ empathy_call_window_got_self_contact_cb (EmpathyTpContactFactory *factory,
 }
 
 static void
-empathy_call_window_constructed (GObject *object)
+empathy_call_window_setup_avatars (EmpathyCallWindow *self,
+    EmpathyCallHandler *handler)
 {
-  EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (object);
   EmpathyCallWindowPriv *priv = GET_PRIV (self);
 
-  g_assert (priv->handler != NULL);
-
-  g_object_get (priv->handler, "contact", &(priv->contact), NULL);
+  g_object_get (handler, "contact", &(priv->contact), NULL);
 
   if (priv->contact != NULL)
     {
@@ -811,15 +915,42 @@ empathy_call_window_constructed (GObject *object)
       priv->remote_user_avatar_widget, MIN (REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH,
       REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT));
 
-  /* We hide the self avatar. It will be shown if a problem is
-     encountered when we try to send video. As for the remote avatar, it
-     is shown by default and will be hidden when we receive video from
-     the remote side. */
-  gtk_widget_hide (priv->self_user_avatar_widget);
+  /* The remote avatar is shown by default and will be hidden when we receive
+     video from the remote side. */
   gtk_widget_hide (priv->video_output);
   gtk_widget_show (priv->remote_user_avatar_widget);
 }
 
+static void
+empathy_call_window_setup_video_preview_visibility (EmpathyCallWindow *self,
+    EmpathyCallHandler *handler)
+{
+  EmpathyCallWindowPriv *priv = GET_PRIV (self);
+  gboolean initial_video = empathy_call_handler_has_initial_video (priv->handler);
+
+  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->show_preview),
+      initial_video);
+}
+
+static void
+empathy_call_window_constructed (GObject *object)
+{
+  EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (object);
+  EmpathyCallWindowPriv *priv = GET_PRIV (self);
+  EmpathyTpCall *call;
+
+  g_assert (priv->handler != NULL);
+
+  g_object_get (priv->handler, "tp-call", &call, NULL);
+  priv->outgoing = (call == NULL);
+  if (call != NULL)
+    g_object_unref (call);
+
+  empathy_call_window_setup_avatars (self, priv->handler);
+  empathy_call_window_setup_video_preview_visibility (self, priv->handler);
+  empathy_call_window_set_state_connecting (self);
+}
+
 static void empathy_call_window_dispose (GObject *object);
 static void empathy_call_window_finalize (GObject *object);
 
@@ -878,12 +1009,19 @@ empathy_call_window_class_init (
     G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class,
     PROP_CALL_HANDLER, param_spec);
+}
 
+static void
+empathy_call_window_video_stream_changed_cb (EmpathyTpCall *call,
+    GParamSpec *property, EmpathyCallWindow *self)
+{
+  empathy_call_window_update_avatars_visibility (call, self);
 }
 
 void
 empathy_call_window_dispose (GObject *object)
 {
+  EmpathyTpCall *call;
   EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (object);
   EmpathyCallWindowPriv *priv = GET_PRIV (self);
 
@@ -892,6 +1030,16 @@ empathy_call_window_dispose (GObject *object)
 
   priv->dispose_has_run = TRUE;
 
+  g_object_get (priv->handler, "tp-call", &call, NULL);
+
+  if (call != NULL)
+    {
+      g_signal_handlers_disconnect_by_func (call,
+        empathy_call_window_video_stream_changed_cb, object);
+    }
+
+  g_object_unref (call);
+
   if (priv->handler != NULL)
     g_object_unref (priv->handler);
 
@@ -996,26 +1144,116 @@ empathy_call_window_request_resource_cb (EmpathyCallHandler *handler,
   return priv->video_input != NULL;
 }
 
-static void
+static gboolean
+empathy_call_window_reset_pipeline (EmpathyCallWindow *self)
+{
+  GstStateChangeReturn state_change_return;
+  EmpathyCallWindowPriv *priv = GET_PRIV (self);
+
+  if (priv->pipeline == NULL)
+    return TRUE;
+
+  state_change_return = gst_element_set_state (priv->pipeline, GST_STATE_NULL);
+
+  if (state_change_return == GST_STATE_CHANGE_SUCCESS ||
+        state_change_return == GST_STATE_CHANGE_NO_PREROLL)
+    {
+      if (priv->pipeline != NULL)
+        g_object_unref (priv->pipeline);
+      priv->pipeline = NULL;
+
+      if (priv->video_input != NULL)
+        g_object_unref (priv->video_input);
+      priv->video_input = NULL;
+
+      if (priv->audio_input != NULL)
+        g_object_unref (priv->audio_input);
+      priv->audio_input = NULL;
+
+      if (priv->audio_output != NULL)
+        g_object_unref (priv->audio_output);
+      priv->audio_output = NULL;
+
+      if (priv->video_tee != NULL)
+        g_object_unref (priv->video_tee);
+      priv->video_tee = NULL;
+
+      if (priv->video_preview != NULL)
+        gtk_widget_destroy (priv->video_preview);
+      priv->video_preview = NULL;
+
+      priv->liveadder = NULL;
+      priv->funnel = NULL;
+
+      return TRUE;
+    }
+  else
+    {
+      g_message ("Error: could not destroy pipeline. Closing call window");
+      gtk_widget_destroy (GTK_WIDGET (self));
+
+      return FALSE;
+    }
+}
+
+static gboolean
 empathy_call_window_disconnected (EmpathyCallWindow *self)
 {
+  gboolean could_disconnect = FALSE;
   EmpathyCallWindowPriv *priv = GET_PRIV (self);
+  gboolean could_reset_pipeline = empathy_call_window_reset_pipeline (self);
 
-  g_mutex_lock (priv->lock);
+  if (priv->call_state == CONNECTING)
+      empathy_sound_stop (EMPATHY_SOUND_PHONE_OUTGOING);
 
-  g_timer_stop (priv->timer);
+  if (priv->call_state != REDIALING)
+    priv->call_state = DISCONNECTED;
 
-  if (priv->timer_id != 0)
-    g_source_remove (priv->timer_id);
-  priv->timer_id = 0;
+  if (could_reset_pipeline)
+    {
+      gboolean initial_video = empathy_call_handler_has_initial_video (
+          priv->handler);
+      g_mutex_lock (priv->lock);
 
-  g_mutex_unlock (priv->lock);
+      g_timer_stop (priv->timer);
 
-  empathy_call_window_status_message (self, _("Disconnected"));
+      if (priv->timer_id != 0)
+        g_source_remove (priv->timer_id);
+      priv->timer_id = 0;
 
-  gtk_widget_set_sensitive (priv->camera_button, FALSE);
-  gtk_action_set_sensitive (priv->send_video, FALSE);
-  priv->sending_video = FALSE;
+      g_mutex_unlock (priv->lock);
+
+      empathy_call_window_status_message (self, _("Disconnected"));
+
+      gtk_action_set_sensitive (priv->redial, TRUE);
+      gtk_widget_set_sensitive (priv->redial_button, TRUE);
+
+      /* Reseting the send_video, camera_buton and mic_button to their
+         initial state */
+      gtk_widget_set_sensitive (priv->camera_button, FALSE);
+      gtk_widget_set_sensitive (priv->mic_button, FALSE);
+      gtk_action_set_sensitive (priv->send_video, FALSE);
+      gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->send_video),
+          initial_video);
+      gtk_toggle_tool_button_set_active (
+          GTK_TOGGLE_TOOL_BUTTON (priv->camera_button), initial_video);
+      gtk_toggle_tool_button_set_active (
+          GTK_TOGGLE_TOOL_BUTTON (priv->mic_button), TRUE);
+
+      gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->show_preview),
+          FALSE);
+      gtk_action_set_sensitive (priv->show_preview, FALSE);
+
+      gtk_widget_hide (priv->video_output);
+      gtk_widget_show (priv->remote_user_avatar_widget);
+
+      priv->sending_video = FALSE;
+      priv->call_started = FALSE;
+
+      could_disconnect = TRUE;
+    }
+
+  return could_disconnect;
 }
 
 
@@ -1023,8 +1261,10 @@ static void
 empathy_call_window_channel_closed_cb (TfChannel *channel, gpointer user_data)
 {
   EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
+  EmpathyCallWindowPriv *priv = GET_PRIV (self);
 
-  empathy_call_window_disconnected (self);
+  if (empathy_call_window_disconnected (self) && priv->call_state == REDIALING)
+      empathy_call_window_restart_call (self);
 }
 
 /* Called with global lock held */
@@ -1110,14 +1350,35 @@ empathy_call_window_connected (gpointer user_data)
 
   g_object_get (priv->handler, "tp-call", &call, NULL);
 
+  g_signal_connect (call, "notify::video-stream",
+    G_CALLBACK (empathy_call_window_video_stream_changed_cb), self);
+
   if (empathy_tp_call_has_dtmf (call))
     gtk_widget_set_sensitive (priv->dtmf_panel, TRUE);
 
-  if (priv->video_input != NULL)
-    {
-      gtk_widget_set_sensitive (priv->camera_button, TRUE);
-      gtk_action_set_sensitive (priv->send_video, TRUE);
-    }
+  if (priv->video_input == NULL)
+      empathy_call_window_set_send_video (self, FALSE);
+
+  priv->sending_video = empathy_tp_call_is_sending_video (call);
+
+  gtk_action_set_sensitive (priv->show_preview, TRUE);
+  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->show_preview),
+      priv->sending_video
+      || gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (priv->show_preview)));
+  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->send_video),
+      priv->sending_video && priv->video_input != NULL);
+  gtk_toggle_tool_button_set_active (
+      GTK_TOGGLE_TOOL_BUTTON (priv->camera_button),
+      priv->sending_video && priv->video_input != NULL);
+  gtk_widget_set_sensitive (priv->camera_button, priv->video_input != NULL);
+  gtk_action_set_sensitive (priv->send_video, priv->video_input != NULL);
+
+  gtk_action_set_sensitive (priv->redial, FALSE);
+  gtk_widget_set_sensitive (priv->redial_button, FALSE);
+
+  gtk_widget_set_sensitive (priv->mic_button, TRUE);
+
+  empathy_call_window_update_avatars_visibility (call, self);
 
   g_object_unref (call);
 
@@ -1146,11 +1407,12 @@ empathy_call_window_src_added_cb (EmpathyCallHandler *handler,
 
   g_mutex_lock (priv->lock);
 
-  if (priv->connected == FALSE)
+  if (priv->call_state != CONNECTED)
     {
       g_timer_start (priv->timer);
       priv->timer_id = g_idle_add  (empathy_call_window_connected, self);
-      priv->connected = TRUE;
+      priv->call_state = CONNECTED;
+      empathy_sound_stop (EMPATHY_SOUND_PHONE_OUTGOING);
     }
 
   switch (media_type)
@@ -1195,53 +1457,34 @@ empathy_call_window_sink_added_cb (EmpathyCallHandler *handler,
       case TP_MEDIA_STREAM_TYPE_VIDEO:
         if (priv->video_input != NULL)
           {
-            pad = gst_element_get_request_pad (priv->video_tee, "src%d");
-            gst_pad_link (pad, sink);
-          }
-        break;
-      default:
-        g_assert_not_reached ();
-    }
+            EmpathyTpCall *call;
+            g_object_get (priv->handler, "tp-call", &call, NULL);
 
-}
+            if (empathy_tp_call_is_sending_video (call))
+              {
+                empathy_call_window_setup_video_preview (self);
 
-static gboolean
-empathy_gst_bin_has_child (GstBin *bin, GstElement *element)
-{
-  GstIterator *it;
-  gboolean ret = FALSE;
-  GstElement *item;
+                gtk_toggle_action_set_active (
+                    GTK_TOGGLE_ACTION (priv->show_preview), TRUE);
 
-  it = gst_bin_iterate_recurse (bin);
+                if (priv->video_preview != NULL)
+                  gtk_widget_show (priv->video_preview);
+                gtk_widget_hide (priv->self_user_avatar_widget);
+              }
 
-  for (;;)
-    {
-      switch (gst_iterator_next (it, (gpointer *)&item))
-       {
-         case GST_ITERATOR_OK:
-           if (item == element)
-            {
-              gst_object_unref (GST_OBJECT (item));
-              ret = TRUE;
-              goto out;
-            }
-           gst_object_unref (GST_OBJECT (item));
-           break;
-         case GST_ITERATOR_RESYNC:
-           gst_iterator_resync (it);
-           break;
-        case GST_ITERATOR_ERROR:
-           g_assert_not_reached ();
-           /* fallthrough */
-        case GST_ITERATOR_DONE:
-           goto out;
-           break;
-      }
+            g_object_unref (call);
+
+            if (priv->video_tee != NULL)
+              {
+                pad = gst_element_get_request_pad (priv->video_tee, "src%d");
+                gst_pad_link (pad, sink);
+              }
+          }
+        break;
+      default:
+        g_assert_not_reached ();
     }
-    gst_iterator_free (it);
 
-out:
-  return ret;
 }
 
 static void
@@ -1264,8 +1507,15 @@ empathy_call_window_remove_video_input (EmpathyCallWindow *self)
   priv->video_input = NULL;
   g_object_unref (priv->video_tee);
   priv->video_tee = NULL;
+  gtk_widget_destroy (priv->video_preview);
+  priv->video_preview = NULL;
+
+  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->send_video), FALSE);
+  gtk_toggle_tool_button_set_active (
+      GTK_TOGGLE_TOOL_BUTTON (priv->camera_button), FALSE);
+  gtk_widget_set_sensitive (priv->camera_button, FALSE);
+  gtk_action_set_sensitive (priv->send_video, FALSE);
 
-  gtk_widget_hide (priv->video_preview);
   gtk_widget_show (priv->self_user_avatar_widget);
 }
 
@@ -1304,23 +1554,24 @@ empathy_call_window_bus_message (GstBus *bus, GstMessage *message,
       case GST_MESSAGE_ERROR:
         {
           GError *error = NULL;
+          GstElement *gst_error;
           gchar *debug;
 
           gst_message_parse_error (message, &error, &debug);
+          gst_error = GST_ELEMENT (GST_MESSAGE_SRC (message));
 
           g_message ("Element error: %s -- %s\n", error->message, debug);
 
-          if (priv->video_input != NULL &&
-              empathy_gst_bin_has_child (GST_BIN (priv->video_input),
-                GST_ELEMENT (GST_MESSAGE_SRC (message))))
+          if (g_str_has_prefix (gst_element_get_name (gst_error),
+                VIDEO_INPUT_ERROR_PREFIX))
             {
               /* Remove the video input and continue */
-              empathy_call_window_remove_video_input (self);
-              gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
+              if (priv->video_input != NULL)
+                empathy_call_window_remove_video_input (self);
+              gst_element_set_state (priv->pipeline, GST_STATE_PLAYING);
             }
           else
             {
-              gst_element_set_state (priv->pipeline, GST_STATE_NULL);
               empathy_call_window_disconnected (self);
             }
           g_error_free (error);
@@ -1333,11 +1584,52 @@ empathy_call_window_bus_message (GstBus *bus, GstMessage *message,
   return TRUE;
 }
 
+static void
+empathy_call_window_update_self_avatar_visibility (EmpathyCallWindow *window)
+{
+  EmpathyCallWindowPriv *priv = GET_PRIV (window);
+
+  if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (priv->show_preview)))
+    {
+      if (priv->video_preview != NULL)
+        {
+          gtk_widget_hide (priv->self_user_avatar_widget);
+          gtk_widget_show (priv->video_preview);
+        }
+      else
+        {
+          if (priv->video_preview != NULL)
+            gtk_widget_hide (priv->video_preview);
+
+          gtk_widget_show (priv->self_user_avatar_widget);
+        }
+    }
+}
+
+static void
+empathy_call_window_update_avatars_visibility (EmpathyTpCall *call,
+    EmpathyCallWindow *window)
+{
+  EmpathyCallWindowPriv *priv = GET_PRIV (window);
+
+  if (empathy_tp_call_is_receiving_video (call))
+    {
+      gtk_widget_hide (priv->remote_user_avatar_widget);
+      gtk_widget_show (priv->video_output);
+    }
+  else
+    {
+      gtk_widget_hide (priv->video_output);
+      gtk_widget_show (priv->remote_user_avatar_widget);
+    }
+
+  empathy_call_window_update_self_avatar_visibility (window);
+}
+
 static void
 empathy_call_window_realized_cb (GtkWidget *widget, EmpathyCallWindow *window)
 {
   EmpathyCallWindowPriv *priv = GET_PRIV (window);
-  GstElement *preview;
 
   g_signal_connect (priv->handler, "conference-added",
     G_CALLBACK (empathy_call_window_conference_added_cb), window);
@@ -1350,15 +1642,6 @@ empathy_call_window_realized_cb (GtkWidget *widget, EmpathyCallWindow *window)
   g_signal_connect (priv->handler, "sink-pad-added",
     G_CALLBACK (empathy_call_window_sink_added_cb), window);
 
-
-  preview = empathy_video_widget_get_element (
-    EMPATHY_VIDEO_WIDGET (priv->video_preview));
-
-  gst_bin_add_many (GST_BIN (priv->pipeline), priv->video_input,
-    priv->video_tee, preview, NULL);
-  gst_element_link_many (priv->video_input, priv->video_tee,
-    preview, NULL);
-
   gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
 }
 
@@ -1368,7 +1651,11 @@ empathy_call_window_delete_cb (GtkWidget *widget, GdkEvent*event,
 {
   EmpathyCallWindowPriv *priv = GET_PRIV (window);
 
-  gst_element_set_state (priv->pipeline, GST_STATE_NULL);
+  if (priv->pipeline != NULL)
+    gst_element_set_state (priv->pipeline, GST_STATE_NULL);
+
+  if (priv->call_state == CONNECTING)
+    empathy_sound_stop (EMPATHY_SOUND_PHONE_OUTGOING);
 
   return FALSE;
 }
@@ -1514,6 +1801,17 @@ empathy_call_window_set_send_video (EmpathyCallWindow *window,
   EmpathyCallWindowPriv *priv = GET_PRIV (window);
   EmpathyTpCall *call;
 
+  priv->sending_video = send;
+
+  /* When we start sending video, we want to show the video preview by
+     default. */
+  if (send)
+    {
+      empathy_call_window_setup_video_preview (window);
+      gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->show_preview),
+          TRUE);
+    }
+
   g_object_get (priv->handler, "tp-call", &call, NULL);
   empathy_tp_call_request_video_stream_direction (call, send);
   g_object_unref (call);
@@ -1526,11 +1824,13 @@ empathy_call_window_camera_toggled_cb (GtkToggleToolButton *toggle,
   EmpathyCallWindowPriv *priv = GET_PRIV (window);
   gboolean active;
 
+  if (priv->call_state != CONNECTED)
+    return;
+
   active = (gtk_toggle_tool_button_get_active (toggle));
 
   if (priv->sending_video == active)
     return;
-  priv->sending_video = active;
 
   empathy_call_window_set_send_video (window, active);
   gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->send_video), active);
@@ -1543,11 +1843,13 @@ empathy_call_window_send_video_toggled_cb (GtkToggleAction *toggle,
   EmpathyCallWindowPriv *priv = GET_PRIV (window);
   gboolean active;
 
+  if (priv->call_state != CONNECTED)
+    return;
+
   active = (gtk_toggle_action_get_active (toggle));
 
   if (priv->sending_video == active)
     return;
-  priv->sending_video = active;
 
   empathy_call_window_set_send_video (window, active);
   gtk_toggle_tool_button_set_active (
@@ -1558,7 +1860,21 @@ static void
 empathy_call_window_show_preview_toggled_cb (GtkToggleAction *toggle,
   EmpathyCallWindow *window)
 {
-  /* FIXME: Not implemented */
+  gboolean show_preview_toggled;
+  EmpathyCallWindowPriv *priv = GET_PRIV (window);
+
+  show_preview_toggled = gtk_toggle_action_get_active (toggle);
+
+  if (show_preview_toggled)
+    {
+      empathy_call_window_setup_video_preview (window);
+      gtk_widget_show (priv->self_user_output_frame);
+      empathy_call_window_update_self_avatar_visibility (window);
+    }
+  else
+    {
+      gtk_widget_hide (priv->self_user_output_frame);
+    }
 }
 
 static void
@@ -1568,6 +1884,9 @@ empathy_call_window_mic_toggled_cb (GtkToggleToolButton *toggle,
   EmpathyCallWindowPriv *priv = GET_PRIV (window);
   gboolean active;
 
+  if (priv->audio_input == NULL)
+    return;
+
   active = (gtk_toggle_tool_button_get_active (toggle));
 
   if (active)
@@ -1612,11 +1931,59 @@ empathy_call_window_sidebar_shown_cb (EmpathySidebar *sidebar,
 static void
 empathy_call_window_hangup_cb (gpointer object,
                                EmpathyCallWindow *window)
+{
+  if (empathy_call_window_disconnected (window))
+    gtk_widget_destroy (GTK_WIDGET (window));
+}
+
+static void
+empathy_call_window_restart_call (EmpathyCallWindow *window)
+{
+  GstBus *bus;
+  EmpathyCallWindowPriv *priv = GET_PRIV (window);
+
+  gtk_widget_destroy (priv->remote_user_output_hbox);
+  gtk_widget_destroy (priv->self_user_output_hbox);
+
+  priv->pipeline = gst_pipeline_new (NULL);
+  bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
+  gst_bus_add_watch (bus, empathy_call_window_bus_message, window);
+
+  empathy_call_window_setup_remote_frame (bus, window);
+  empathy_call_window_setup_self_frame (bus, window);
+
+  g_object_unref (bus);
+
+  gtk_widget_show_all (priv->content_hbox);
+
+  if (!empathy_call_handler_has_initial_video (priv->handler))
+    gtk_widget_hide (priv->self_user_output_frame);
+
+  priv->outgoing = TRUE;
+  empathy_call_window_set_state_connecting (window);
+
+  priv->call_started = TRUE;
+  empathy_call_handler_start_call (priv->handler);
+  empathy_call_window_setup_avatars (window, priv->handler);
+  gst_element_set_state (priv->pipeline, GST_STATE_PLAYING);
+
+  gtk_action_set_sensitive (priv->redial, FALSE);
+  gtk_widget_set_sensitive (priv->redial_button, FALSE);
+}
+
+static void
+empathy_call_window_redial_cb (gpointer object,
+    EmpathyCallWindow *window)
 {
   EmpathyCallWindowPriv *priv = GET_PRIV (window);
 
-  gst_element_set_state (priv->pipeline, GST_STATE_NULL);
-  gtk_widget_destroy (GTK_WIDGET (window));
+  if (priv->call_state == CONNECTED)
+    priv->call_state = REDIALING;
+
+  empathy_call_handler_stop_call (priv->handler);
+
+  if (priv->call_state != CONNECTED)
+    empathy_call_window_restart_call (window);
 }
 
 static void
@@ -1678,7 +2045,6 @@ empathy_call_window_video_output_motion_notify (GtkWidget *widget,
       empathy_call_window_fullscreen_show_popup (priv->fullscreen);
       return TRUE;
     }
-
   return FALSE;
 }
 
index a0e1e1304a4f8feac8278479c9def2291dac8ad1..9e7c0962d70df550bef1eef495ec0256da44eba3 100644 (file)
         </child>
         <child>
           <object class="GtkAction" id="menuhangup">
-            <property name="stock_id">gtk-cancel</property>
+            <property name="icon_name">call-stop</property>
             <property name="name">menuhangup</property>
             <property name="label" translatable="yes">Hang up</property>
           </object>
         </child>
+        <child>
+          <object class="GtkAction" id="menuredial">
+            <property name="stock_id">gtk-refresh</property>
+            <property name="name">menuredial</property>
+            <property name="label" translatable="yes">Redial</property>
+            <property name="sensitive">False</property>
+          </object>
+        </child>
         <child>
           <object class="GtkAction" id="view">
             <property name="name">view</property>
@@ -34,6 +42,7 @@
           <object class="GtkToggleAction" id="show_preview">
             <property name="name">show_preview</property>
             <property name="label" translatable="yes">Video preview</property>
+            <property name="active">True</property>
           </object>
         </child>
         <child>
@@ -50,6 +59,7 @@
         <menu action="call">
           <menuitem action="send_video"/>
           <menuitem action="menuhangup"/>
+          <menuitem action="menuredial"/>
         </menu>
         <menu action="view">
           <menuitem action="show_preview"/>
                 <property name="visible">True</property>
                 <property name="is_important">True</property>
                 <property name="label" translatable="yes">Hang up</property>
-                <property name="stock_id">gtk-cancel</property>
+                <property name="icon_name">call-stop</property>
+              </object>
+              <packing>
+                <property name="homogeneous">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToolButton" id="redial">
+                <property name="visible">True</property>
+                <property name="is_important">True</property>
+                <property name="label" translatable="yes">Redial</property>
+                <property name="stock_id">gtk-refresh</property>
+                <property name="sensitive">False</property>
               </object>
               <packing>
                 <property name="homogeneous">True</property>
index 9c2dbc49050fc2c1be61fd8911e47ab441a27e5b..424d148ac1ce6aca564157b90c6552f5e22da044 100644 (file)
@@ -50,6 +50,7 @@
 #include <libempathy-gtk/empathy-log-window.h>
 #include <libempathy-gtk/empathy-geometry.h>
 #include <libempathy-gtk/empathy-smiley-manager.h>
+#include <libempathy-gtk/empathy-sound.h>
 #include <libempathy-gtk/empathy-ui-utils.h>
 
 #include "empathy-chat-window.h"
@@ -77,6 +78,7 @@ typedef struct {
        GtkUIManager *ui_manager;
        GtkAction   *menu_conv_insert_smiley;
        GtkAction   *menu_conv_favorite;
+       GtkAction   *menu_conv_toggle_contacts;
 
        GtkAction   *menu_edit_cut;
        GtkAction   *menu_edit_copy;
@@ -547,6 +549,8 @@ chat_window_conv_activate_cb (GtkAction         *action,
 {
        EmpathyChatWindowPriv *priv = GET_PRIV (window);
        gboolean               is_room;
+       gboolean               active;
+       EmpathyContact        *remote_contact = NULL;
 
        /* Favorite room menu */
        is_room = empathy_chat_is_room (priv->current_chat);
@@ -565,6 +569,22 @@ chat_window_conv_activate_cb (GtkAction         *action,
                        GTK_TOGGLE_ACTION (priv->menu_conv_favorite), found);
        }
        gtk_action_set_visible (priv->menu_conv_favorite, is_room);
+
+       /* Show contacts menu */
+       g_object_get (priv->current_chat,
+                     "remote-contact", &remote_contact,
+                     "show-contacts", &active,
+                     NULL);
+       if (remote_contact == NULL) {
+               gtk_toggle_action_set_active (
+                       GTK_TOGGLE_ACTION (priv->menu_conv_toggle_contacts),
+                                          active);
+       }
+       gtk_action_set_visible (priv->menu_conv_toggle_contacts,
+                               (remote_contact == NULL));
+       if (remote_contact != NULL) {
+               g_object_unref (remote_contact);
+       }
 }
 
 static void
@@ -602,12 +622,24 @@ chat_window_favorite_toggled_cb (GtkToggleAction   *toggle_action,
                g_object_unref (chatroom);
                return;
        }
-       
+
        if (!active && chatroom) {
                empathy_chatroom_manager_remove (priv->chatroom_manager, chatroom);
        }
 }
 
+static void
+chat_window_contacts_toggled_cb (GtkToggleAction   *toggle_action,
+                                EmpathyChatWindow *window)
+{
+       EmpathyChatWindowPriv *priv = GET_PRIV (window);
+       gboolean               active;
+
+       active = gtk_toggle_action_get_active (toggle_action);
+
+       empathy_chat_set_show_contacts (priv->current_chat, active);
+}
+
 static const gchar *
 chat_get_window_id_for_geometry (EmpathyChat *chat)
 {
@@ -910,7 +942,8 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window,
                                         EmpathyChat *chat)
 {
        EmpathyContact *sender;
-       char *header, *escaped;
+       const gchar *header;
+       char *escaped;
        const char *body;
        GdkPixbuf *pixbuf;
        NotificationData *cb_data;
@@ -932,8 +965,7 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window,
        cb_data->window = window;
 
        sender = empathy_message_get_sender (message);
-       header = g_strdup_printf (_("New message from %s"),
-                                 empathy_contact_get_name (sender));
+       header = empathy_contact_get_name (sender);
        body = empathy_message_get_body (message);
        escaped = g_markup_escape_text (body, -1);
 
@@ -955,7 +987,6 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window,
        notify_notification_show (priv->notification, NULL);
 
        g_object_unref (pixbuf);
-       g_free (header);
        g_free (escaped);
 }
 
@@ -1180,7 +1211,7 @@ chat_window_focus_in_event_cb (GtkWidget        *widget,
        priv->chats_new_msg = g_list_remove (priv->chats_new_msg, priv->current_chat);
 
        chat_window_set_urgency_hint (window, FALSE);
-       
+
        /* Update the title, since we now mark all unread messages as read. */
        chat_window_update_chat_tab (priv->current_chat);
 
@@ -1209,7 +1240,7 @@ chat_window_drag_data_received (GtkWidget        *widget,
                id = (const gchar*) selection->data;
 
                DEBUG ("DND contact from roster with id:'%s'", id);
-               
+
                strv = g_strsplit (id, "/", 2);
                account_id = strv[0];
                contact_id = strv[1];
@@ -1237,18 +1268,18 @@ chat_window_drag_data_received (GtkWidget        *widget,
                g_object_unref (account);
                g_strfreev (strv);
 
-               old_window = chat_window_find_chat (chat);              
+               old_window = chat_window_find_chat (chat);
                if (old_window) {
                        if (old_window == window) {
                                gtk_drag_finish (context, TRUE, FALSE, time);
                                return;
                        }
-                       
+
                        empathy_chat_window_move_chat (old_window, window, chat);
                } else {
                        empathy_chat_window_add_chat (window, chat);
                }
-               
+
                /* Added to take care of any outstanding chat events */
                empathy_chat_window_present_chat (chat);
 
@@ -1279,7 +1310,7 @@ chat_window_drag_data_received (GtkWidget        *widget,
                                gtk_drag_finish (context, TRUE, FALSE, time);
                                return;
                        }
-                       
+
                        priv->dnd_same_window = FALSE;
                }
 
@@ -1369,6 +1400,7 @@ empathy_chat_window_init (EmpathyChatWindow *window)
                                       "ui_manager", &priv->ui_manager,
                                       "menu_conv_insert_smiley", &priv->menu_conv_insert_smiley,
                                       "menu_conv_favorite", &priv->menu_conv_favorite,
+                                      "menu_conv_toggle_contacts", &priv->menu_conv_toggle_contacts,
                                       "menu_edit_cut", &priv->menu_edit_cut,
                                       "menu_edit_copy", &priv->menu_edit_copy,
                                       "menu_edit_paste", &priv->menu_edit_paste,
@@ -1385,6 +1417,7 @@ empathy_chat_window_init (EmpathyChatWindow *window)
                              "menu_conv", "activate", chat_window_conv_activate_cb,
                              "menu_conv_clear", "activate", chat_window_clear_activate_cb,
                              "menu_conv_favorite", "toggled", chat_window_favorite_toggled_cb,
+                             "menu_conv_toggle_contacts", "toggled", chat_window_contacts_toggled_cb,
                              "menu_conv_close", "activate", chat_window_close_activate_cb,
                              "menu_edit", "activate", chat_window_edit_activate_cb,
                              "menu_edit_cut", "activate", chat_window_cut_activate_cb,
@@ -1566,14 +1599,14 @@ empathy_chat_window_add_chat (EmpathyChatWindow *window,
        /* If this window has just been created, position it */
        if (priv->chats == NULL) {
                empathy_geometry_load (chat_get_window_id_for_geometry (chat), &x, &y, &w, &h);
-               
+
                if (x >= 0 && y >= 0) {
                        /* Let the window manager position it if we don't have
                         * good x, y coordinates.
                         */
                        gtk_window_move (GTK_WINDOW (priv->dialog), x, y);
                }
-               
+
                if (w > 0 && h > 0) {
                        /* Use the defaults from the ui file if we don't have
                         * good w, h geometry.
index 835d6729662a06fd57c3df00e23dd8afe38a0324..c46ef8fc43b42f1249b58885e13a8da099f899d9 100644 (file)
@@ -29,7 +29,7 @@
 #define __EMPATHY_CHAT_WINDOW_H__
 
 #include <glib-object.h>
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 
 #include <libmissioncontrol/mc-account.h>
 #include <libempathy-gtk/empathy-chat.h>
index 0d5a831802a6b08ce679d4615887a621977dd4a3..8c8ea7d006ff93cb83e33d0826038875475d1ae5 100644 (file)
             <property name="label" translatable="yes">_Favorite Chatroom</property>
           </object>
         </child>
+        <child>
+          <object class="GtkToggleAction" id="menu_conv_toggle_contacts">
+            <property name="name">menu_conv_toggle_contacts</property>
+            <property name="active">TRUE</property>
+            <property name="label" translatable="yes">_Show Contact List</property>
+          </object>
+        </child>
         <child>
           <object class="GtkAction" id="menu_conv_close">
             <property name="stock_id">gtk-close</property>
           <menuitem action="menu_conv_clear"/>
           <menuitem action="menu_conv_insert_smiley"/>
           <menuitem action="menu_conv_favorite"/>
+          <menuitem action="menu_conv_toggle_contacts"/>
           <separator/>
           <menuitem action="menu_conv_close"/>
         </menu>
index f6fe6e8b27e151512d2e6ae12cdae1c57f8abca0..cd0d925f9447be22af68f68212cfa32354073471 100644 (file)
@@ -430,8 +430,6 @@ debug_dialog_get_name_owner_cb (TpDBusDaemon *proxy,
           COL_CM_NAME, data->cm_name,
           COL_CM_UNIQUE_NAME, out,
           -1);
-
-      gtk_combo_box_set_active (GTK_COMBO_BOX (priv->cm_chooser), 0);
     }
 
 OUT:
@@ -568,6 +566,7 @@ debug_dialog_fill_cm_chooser (EmpathyDebugDialog *debug_dialog)
 {
   EmpathyDebugDialogPriv *priv = GET_PRIV (debug_dialog);
   GError *error = NULL;
+  GtkTreeIter iter;
 
   priv->dbus = tp_dbus_daemon_dup (&error);
 
@@ -578,6 +577,15 @@ debug_dialog_fill_cm_chooser (EmpathyDebugDialog *debug_dialog)
       return;
     }
 
+  /* Add empathy */
+  gtk_list_store_append (priv->cms, &iter);
+  gtk_list_store_set (priv->cms, &iter,
+      COL_CM_NAME, "empathy",
+      COL_CM_UNIQUE_NAME, "org.gnome.Empathy",
+      -1);
+  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->cm_chooser), 0);
+
+  /* Add CMs to list */
   tp_list_connection_names (priv->dbus, debug_dialog_list_connection_names_cb,
       debug_dialog, NULL, NULL);
 
index 81d98ef7415631dcc5f2b8794b99b9154bb742b9..a80aad2362006883e4bccef8e522b0291a63aa3a 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <telepathy-glib/util.h>
 
+#include <libempathy/empathy-account-manager.h>
 #include <libempathy/empathy-dispatcher.h>
 #include <libempathy/empathy-tp-contact-factory.h>
 #include <libempathy/empathy-contact-manager.h>
 
 #include <extensions/extensions.h>
 
+#include <libempathy-gtk/empathy-conf.h>
 #include <libempathy-gtk/empathy-images.h>
 #include <libempathy-gtk/empathy-contact-dialogs.h>
-#include <libempathy-gtk/empathy-ui-utils.h>
+#include <libempathy-gtk/empathy-sound.h>
 
 #include "empathy-event-manager.h"
 #include "empathy-main-window.h"
 
 #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyEventManager)
 
+#define NOTIFICATION_TIMEOUT 2 /* seconds */
+
+/* The time interval in milliseconds between 2 incoming rings */
+#define MS_BETWEEN_RING 500
+
 typedef struct {
   EmpathyEventManager *manager;
   EmpathyDispatchOperation *operation;
@@ -74,8 +81,6 @@ typedef struct {
   /* Ongoing approvals */
   GSList *approvals;
 
-  /* voip ringing sound */
-  guint voip_timeout;
   gint ringing;
 } EmpathyEventManagerPriv;
 
@@ -161,81 +166,6 @@ event_free (EventPriv *event)
   g_slice_free (EventPriv, event);
 }
 
-static void event_manager_ringing_finished_cb (ca_context *c, guint id,
-  int error_code, gpointer user_data);
-
-static gboolean
-event_manager_ringing_timeout_cb (gpointer data)
-{
-  EmpathyEventManager *manager = EMPATHY_EVENT_MANAGER (data);
-  EmpathyEventManagerPriv *priv = GET_PRIV (manager);
-
-  priv->voip_timeout = 0;
-
-  empathy_sound_play_full (empathy_main_window_get (),
-      EMPATHY_SOUND_PHONE_INCOMING, event_manager_ringing_finished_cb,
-      manager);
-
-  return FALSE;
-}
-
-static gboolean
-event_manager_ringing_idle_cb (gpointer data)
-{
-  EmpathyEventManager *manager = EMPATHY_EVENT_MANAGER (data);
-  EmpathyEventManagerPriv *priv = GET_PRIV (manager);
-
-  if (priv->ringing > 0)
-    priv->voip_timeout = g_timeout_add (500, event_manager_ringing_timeout_cb,
-      data);
-
-  return FALSE;
-}
-
-static void
-event_manager_ringing_finished_cb (ca_context *c, guint id, int error_code,
-  gpointer user_data)
-{
-  if (error_code == CA_ERROR_CANCELED)
-    return;
-
-  g_idle_add (event_manager_ringing_idle_cb, user_data);
-}
-
-static void
-event_manager_start_ringing (EmpathyEventManager *manager)
-{
-  EmpathyEventManagerPriv *priv = GET_PRIV (manager);
-
-  priv->ringing++;
-
-  if (priv->ringing == 1)
-    {
-      empathy_sound_play_full (empathy_main_window_get (),
-        EMPATHY_SOUND_PHONE_INCOMING, event_manager_ringing_finished_cb,
-        manager);
-    }
-}
-
-static void
-event_manager_stop_ringing (EmpathyEventManager *manager)
-{
-  EmpathyEventManagerPriv *priv = GET_PRIV (manager);
-
-  priv->ringing--;
-
-  if (priv->ringing > 0)
-    return;
-
-  empathy_sound_stop (EMPATHY_SOUND_PHONE_INCOMING);
-
-  if (priv->voip_timeout != 0)
-    {
-      g_source_remove (priv->voip_timeout);
-      priv->voip_timeout = 0;
-    }
-}
-
 static void
 event_remove (EventPriv *event)
 {
@@ -247,6 +177,13 @@ event_remove (EventPriv *event)
   event_free (event);
 }
 
+static gboolean
+autoremove_event_timeout_cb (EventPriv *event)
+{
+  event_remove (event);
+  return FALSE;
+}
+
 static void
 event_manager_add (EmpathyEventManager *manager, EmpathyContact *contact,
   const gchar *icon_name, const gchar *header, const gchar *message,
@@ -260,6 +197,7 @@ event_manager_add (EmpathyEventManager *manager, EmpathyContact *contact,
   event->public.icon_name = g_strdup (icon_name);
   event->public.header = g_strdup (header);
   event->public.message = g_strdup (message);
+  event->public.must_ack = (func != NULL);
   event->inhibit = FALSE;
   event->func = func;
   event->user_data = user_data;
@@ -269,6 +207,12 @@ event_manager_add (EmpathyEventManager *manager, EmpathyContact *contact,
   DEBUG ("Adding event %p", event);
   priv->events = g_slist_prepend (priv->events, event);
   g_signal_emit (event->manager, signals[EVENT_ADDED], 0, event);
+
+  if (!event->public.must_ack)
+    {
+      g_timeout_add_seconds (NOTIFICATION_TIMEOUT,
+        (GSourceFunc) autoremove_event_timeout_cb, event);
+    }
 }
 
 static void
@@ -409,7 +353,7 @@ event_manager_chat_message_received_cb (EmpathyTpChat *tp_chat,
   EmpathyMessage *message, EventManagerApproval *approval)
 {
   EmpathyContact  *sender;
-  gchar           *header;
+  const gchar     *header;
   const gchar     *msg;
   TpChannel       *channel;
   EventPriv       *event;
@@ -426,8 +370,7 @@ event_manager_chat_message_received_cb (EmpathyTpChat *tp_chat,
     }
 
   sender = empathy_message_get_sender (message);
-  header = g_strdup_printf (_("New message from %s"),
-                            empathy_contact_get_name (sender));
+  header = empathy_contact_get_name (sender);
   msg = empathy_message_get_body (message);
 
   channel = empathy_tp_chat_get_channel (tp_chat);
@@ -438,7 +381,6 @@ event_manager_chat_message_received_cb (EmpathyTpChat *tp_chat,
     event_manager_add (approval->manager, sender, EMPATHY_IMAGE_NEW_MESSAGE, header,
       msg, approval, event_text_channel_process_func, NULL);
 
-  g_free (header);
   empathy_sound_play (empathy_main_window_get (),
     EMPATHY_SOUND_CONVERSATION_NEW);
 }
@@ -457,7 +399,9 @@ event_manager_approval_done (EventManagerApproval *approval)
           approval->operation);
       if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA)
         {
-          event_manager_stop_ringing (approval->manager);
+          priv->ringing--;
+          if (priv->ringing == 0)
+            empathy_sound_stop (EMPATHY_SOUND_PHONE_INCOMING);
         }
     }
 
@@ -502,6 +446,7 @@ event_manager_operation_invalidated_cb (EmpathyDispatchOperation *operation,
 static void
 event_manager_media_channel_got_contact (EventManagerApproval *approval)
 {
+  EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
   gchar *header;
 
   header = g_strdup_printf (_("Incoming call from %s"),
@@ -512,7 +457,11 @@ event_manager_media_channel_got_contact (EventManagerApproval *approval)
     approval, event_channel_process_voip_func, NULL);
 
   g_free (header);
-  event_manager_start_ringing (approval->manager);
+
+  priv->ringing++;
+  if (priv->ringing == 1)
+    empathy_sound_start_playing (empathy_main_window_get (),
+        EMPATHY_SOUND_PHONE_INCOMING, MS_BETWEEN_RING);
 }
 
 static void
@@ -958,6 +907,65 @@ event_manager_pendings_changed_cb (EmpathyContactList  *list,
   g_free (header);
 }
 
+static void
+event_manager_presence_changed_cb (EmpathyContactMonitor *monitor,
+    EmpathyContact *contact,
+    TpConnectionPresenceType current,
+    TpConnectionPresenceType previous,
+    EmpathyEventManager *manager)
+{
+  McAccount *account;
+  gboolean just_connected;
+  EmpathyAccountManager *account_manager;
+  gchar *header = NULL;
+  gboolean preference = FALSE;
+
+  account = empathy_contact_get_account (contact);
+  account_manager = empathy_account_manager_dup_singleton ();
+  just_connected = empathy_account_manager_is_account_just_connected (
+                  account_manager, account);
+
+  g_object_unref (account_manager);
+  if (just_connected)
+    return;
+
+  if (tp_connection_presence_type_cmp_availability (previous,
+     TP_CONNECTION_PRESENCE_TYPE_OFFLINE) > 0)
+    {
+      /* contact was online */
+      empathy_conf_get_bool (empathy_conf_get (),
+                      EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNOUT, &preference);
+      if (preference && tp_connection_presence_type_cmp_availability (current,
+          TP_CONNECTION_PRESENCE_TYPE_OFFLINE) <= 0)
+        {
+          /* someone is logging off */
+          header = g_strdup_printf (_("%s is now offline."),
+            empathy_contact_get_name (contact));
+
+          event_manager_add (manager, contact, GTK_STOCK_DIALOG_INFO, header,
+                             NULL, NULL, NULL, NULL);
+        }
+    }
+  else
+    {
+      /* contact was offline */
+      empathy_conf_get_bool (empathy_conf_get (),
+                      EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNIN, &preference);
+      if (preference && tp_connection_presence_type_cmp_availability (current,
+          TP_CONNECTION_PRESENCE_TYPE_OFFLINE) > 0)
+        {
+          /* someone is logging in */
+          header = g_strdup_printf (_("%s is now online."),
+            empathy_contact_get_name (contact));
+
+          event_manager_add (manager, contact, GTK_STOCK_DIALOG_INFO, header,
+                             NULL, NULL, NULL, NULL);
+        }
+    }
+  g_free (header);
+}
+
+
 static GObject *
 event_manager_constructor (GType type,
                           guint n_props,
@@ -983,6 +991,9 @@ event_manager_finalize (GObject *object)
 {
   EmpathyEventManagerPriv *priv = GET_PRIV (object);
 
+  if (priv->ringing > 0)
+    empathy_sound_stop (EMPATHY_SOUND_PHONE_INCOMING);
+
   g_slist_foreach (priv->events, (GFunc) event_free, NULL);
   g_slist_free (priv->events);
   g_slist_foreach (priv->approvals, (GFunc) event_manager_approval_free, NULL);
@@ -1036,6 +1047,12 @@ empathy_event_manager_init (EmpathyEventManager *manager)
 {
   EmpathyEventManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
     EMPATHY_TYPE_EVENT_MANAGER, EmpathyEventManagerPriv);
+  EmpathyContactMonitor *monitor;
+  EmpathyContactList *list_iface;
+
+  list_iface = EMPATHY_CONTACT_LIST (empathy_contact_manager_dup_singleton ());
+  monitor = empathy_contact_list_get_monitor (list_iface);
+  g_object_unref (list_iface);
 
   manager->priv = priv;
 
@@ -1045,6 +1062,8 @@ empathy_event_manager_init (EmpathyEventManager *manager)
     G_CALLBACK (event_manager_approve_channel_cb), manager);
   g_signal_connect (priv->contact_manager, "pendings-changed",
     G_CALLBACK (event_manager_pendings_changed_cb), manager);
+  g_signal_connect (monitor, "contact-presence-changed",
+    G_CALLBACK (event_manager_presence_changed_cb), manager);
 }
 
 EmpathyEventManager *
@@ -1095,4 +1114,3 @@ empathy_event_inhibit_updates (EmpathyEvent *event_public)
 
   event->inhibit = TRUE;
 }
-
index 42fd0c090500e36b7dfc0727b77e841c6456a197..af73c8ea7ff383d770a489c4f03e0d4c5737397d 100644 (file)
@@ -53,6 +53,7 @@ typedef struct {
        gchar          *icon_name;
        gchar          *header;
        gchar          *message;
+       gboolean        must_ack;
 } EmpathyEvent;
 
 GType                empathy_event_manager_get_type      (void) G_GNUC_CONST;
index 1e3c4af7dff26895c93b81a943da5ae6e132e824..fa72af949b2dca8f3d3b6d314ba5cf932c0b5b88 100644 (file)
@@ -5,7 +5,7 @@
     <property name="width_request">620</property>
     <property name="height_request">250</property>
     <property name="border_width">5</property>
-    <property name="title" translatable="yes">File transfers</property>
+    <property name="title" translatable="yes">File Transfers</property>
     <property name="role">empathy-ft-manager</property>
     <property name="icon_name">document-send</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
index 5830d2b71b00c78c64fc5cf0a0b2a9d92f88ba20..0da037beb556d1e981453c17db5427f3cb329496 100644 (file)
 #include <libempathy/empathy-contact-manager.h>
 #include <libempathy/empathy-status-presets.h>
 
+#include <libempathy-gtk/empathy-conf.h>
 #include <libempathy-gtk/empathy-contact-dialogs.h>
 #include <libempathy-gtk/empathy-contact-list-store.h>
 #include <libempathy-gtk/empathy-contact-list-view.h>
-#include <libempathy-gtk/empathy-presence-chooser.h>
-#include <libempathy-gtk/empathy-ui-utils.h>
 #include <libempathy-gtk/empathy-geometry.h>
-#include <libempathy-gtk/empathy-conf.h>
-#include <libempathy-gtk/empathy-log-window.h>
-#include <libempathy-gtk/empathy-new-message-dialog.h>
 #include <libempathy-gtk/empathy-gtk-enum-types.h>
+#include <libempathy-gtk/empathy-new-message-dialog.h>
+#include <libempathy-gtk/empathy-log-window.h>
+#include <libempathy-gtk/empathy-presence-chooser.h>
+#include <libempathy-gtk/empathy-sound.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
 
 #include <libmissioncontrol/mission-control.h>
 
@@ -197,7 +198,7 @@ main_window_flash_cb (EmpathyMainWindow *window)
        events = empathy_event_manager_get_events (window->event_manager);
        for (l = events; l; l = l->next) {
                data.event = l->data;
-               if (!data.event->contact) {
+               if (!data.event->contact || !data.event->must_ack) {
                        continue;
                }
 
index 562fa12c63b99bded6bc9a9f28d65a4db5461843..3d34e6c6b36c4ab3b40b43c6ad8b6d7946a631cb 100644 (file)
@@ -24,7 +24,7 @@
 #ifndef __EMPATHY_MAIN_WINDOW_H__
 #define __EMPATHY_MAIN_WINDOW_H__
 
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
index b8a32885cf498a2e91d14a6ef5f7b6cd73f7e023..86e15bdfff0ec9ac41b5d73a4e835c15fd4977f9 100644 (file)
@@ -40,6 +40,7 @@
 #include <libempathy-gtk/empathy-ui-utils.h>
 
 #include "empathy-map-view.h"
+#include "ephy-spinner.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_LOCATION
 #include <libempathy/empathy-debug.h>
@@ -50,117 +51,23 @@ typedef struct {
   GtkWidget *window;
   GtkWidget *zoom_in;
   GtkWidget *zoom_out;
+  GtkWidget *throbber;
   ChamplainView *map_view;
   ChamplainLayer *layer;
 } EmpathyMapView;
 
-static void map_view_destroy_cb (GtkWidget *widget,
-    EmpathyMapView *window);
-static gboolean map_view_contacts_foreach (GtkTreeModel *model,
-    GtkTreePath *path,
-    GtkTreeIter *iter,
-    gpointer user_data);
-static void map_view_zoom_in_cb (GtkWidget *widget,
-    EmpathyMapView *window);
-static void map_view_zoom_out_cb (GtkWidget *widget,
-    EmpathyMapView *window);
-static void map_view_contact_location_notify (GObject *gobject,
-    GParamSpec *arg1,
-    gpointer user_data);
-
-GtkWidget *
-empathy_map_view_show (void)
-{
-  static EmpathyMapView *window = NULL;
-  GtkBuilder *gui;
-  GtkWidget *sw;
-  GtkWidget *embed;
-  gchar *filename;
-  GtkTreeModel *model;
-  EmpathyContactList *list_iface;
-  EmpathyContactListStore *list_store;
-
-  if (window)
-    {
-      empathy_window_present (GTK_WINDOW (window->window), TRUE);
-      return window->window;
-    }
-
-  window = g_slice_new0 (EmpathyMapView);
-
-  /* Set up interface */
-  filename = empathy_file_lookup ("empathy-map-view.ui", "src");
-  gui = empathy_builder_get_file (filename,
-     "map_view", &window->window,
-     "zoom_in", &window->zoom_in,
-     "zoom_out", &window->zoom_out,
-     "map_scrolledwindow", &sw,
-     NULL);
-  g_free (filename);
-
-  empathy_builder_connect (gui, window,
-      "map_view", "destroy", map_view_destroy_cb,
-      "zoom_in", "clicked", map_view_zoom_in_cb,
-      "zoom_out", "clicked", map_view_zoom_out_cb,
-      NULL);
-
-  g_object_unref (gui);
-
-  /* Clear the static pointer to window if the dialog is destroyed */
-  g_object_add_weak_pointer (G_OBJECT (window->window), (gpointer *) &window);
-
-  list_iface = EMPATHY_CONTACT_LIST (empathy_contact_manager_dup_singleton ());
-  list_store = empathy_contact_list_store_new (list_iface);
-  empathy_contact_list_store_set_show_groups (list_store, FALSE);
-  empathy_contact_list_store_set_show_avatars (list_store, TRUE);
-  g_object_unref (list_iface);
-
-  window->list_store = list_store;
-
-  /* Set up map view */
-  window->map_view = CHAMPLAIN_VIEW (champlain_view_new ());
-  g_object_set (G_OBJECT (window->map_view), "zoom-level", 1,
-     "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC, NULL);
-  champlain_view_center_on (window->map_view, 36, 0);
-
-  embed = champlain_view_embed_new (window->map_view);
-  gtk_container_add (GTK_CONTAINER (sw),
-     GTK_WIDGET (embed));
-  gtk_widget_show_all (embed);
-
-  window->layer = g_object_ref (champlain_layer_new ());
-  champlain_view_add_layer (window->map_view, window->layer);
-
-  /* Set up contact list. */
-  model = GTK_TREE_MODEL (window->list_store);
-  gtk_tree_model_foreach (model, map_view_contacts_foreach, window);
-
-  empathy_window_present (GTK_WINDOW (window->window), TRUE);
-  return window->window;
-}
-
 static void
-map_view_destroy_cb (GtkWidget *widget,
+map_view_state_changed (ChamplainView *view,
+    GParamSpec *gobject,
     EmpathyMapView *window)
 {
-  GList *item;
-
-  item = clutter_container_get_children (window->layer);
-  while (item != NULL)
-  {
-    EmpathyContact *contact;
-    ChamplainMarker *marker;
+  ChamplainState state;
 
-    marker = CHAMPLAIN_MARKER (item->data);
-    contact = g_object_get_data (G_OBJECT (marker), "contact");
-    g_signal_handlers_disconnect_by_func (contact, map_view_contact_location_notify, marker);
-
-    item = g_list_next (item);
-  }
-
-  g_object_unref (window->list_store);
-  g_object_unref (window->layer);
-  g_slice_free (EmpathyMapView, window);
+  g_object_get (G_OBJECT (view), "state", &state, NULL);
+  if (state == CHAMPLAIN_STATE_LOADING)
+    ephy_spinner_start (EPHY_SPINNER (window->throbber));
+  else
+    ephy_spinner_stop (EPHY_SPINNER (window->throbber));
 }
 
 static void
@@ -201,22 +108,60 @@ map_view_marker_update_position (ChamplainMarker *marker,
 }
 
 static void
-map_view_contact_location_notify (GObject *gobject,
+map_view_contact_location_notify (EmpathyContact *contact,
     GParamSpec *arg1,
-    gpointer user_data)
+    ChamplainMarker *marker)
 {
-  ChamplainMarker *marker = CHAMPLAIN_MARKER (user_data);
-  EmpathyContact *contact = EMPATHY_CONTACT (gobject);
   map_view_marker_update_position (marker, contact);
 }
 
+static void
+map_view_zoom_in_cb (GtkWidget *widget,
+    EmpathyMapView *window)
+{
+  champlain_view_zoom_in (window->map_view);
+}
+
+static void
+map_view_zoom_out_cb (GtkWidget *widget,
+    EmpathyMapView *window)
+{
+  champlain_view_zoom_out (window->map_view);
+}
+
+static gboolean
+marker_clicked_cb (ChamplainMarker *marker,
+    ClutterButtonEvent *event,
+    EmpathyContact *contact)
+{
+  GtkWidget *menu;
+
+  if (event->button != 3)
+    return FALSE;
+
+  menu = empathy_contact_menu_new (contact,
+      EMPATHY_CONTACT_FEATURE_CHAT |
+      EMPATHY_CONTACT_FEATURE_CALL |
+      EMPATHY_CONTACT_FEATURE_LOG |
+      EMPATHY_CONTACT_FEATURE_INFO);
+
+  if (menu == NULL)
+    return FALSE;
+
+  gtk_widget_show (menu);
+  gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
+      event->button, event->time);
+
+  return FALSE;
+}
+
 static gboolean
 map_view_contacts_foreach (GtkTreeModel *model,
     GtkTreePath *path,
     GtkTreeIter *iter,
     gpointer user_data)
 {
-  EmpathyMapView *window = (EmpathyMapView*) user_data;
+  EmpathyMapView *window = (EmpathyMapView *) user_data;
   EmpathyContact *contact;
   ClutterActor *marker;
   ClutterActor *texture;
@@ -269,11 +214,16 @@ map_view_contacts_foreach (GtkTreeModel *model,
   champlain_marker_set_text (CHAMPLAIN_MARKER (marker), label);
   g_free (label);
 
+  clutter_actor_set_reactive (CLUTTER_ACTOR (marker), TRUE);
+  g_signal_connect (marker, "button-release-event",
+      G_CALLBACK (marker_clicked_cb), contact);
+
   clutter_container_add (CLUTTER_CONTAINER (window->layer), marker, NULL);
 
   g_signal_connect (contact, "notify::location",
       G_CALLBACK (map_view_contact_location_notify), marker);
-  g_object_set_data_full (G_OBJECT (marker), "contact", g_object_ref (contact), g_object_unref);
+  g_object_set_data_full (G_OBJECT (marker), "contact",
+      g_object_ref (contact), g_object_unref);
 
   map_view_marker_update_position (CHAMPLAIN_MARKER (marker), contact);
 
@@ -282,15 +232,108 @@ map_view_contacts_foreach (GtkTreeModel *model,
 }
 
 static void
-map_view_zoom_in_cb (GtkWidget *widget,
+map_view_destroy_cb (GtkWidget *widget,
     EmpathyMapView *window)
 {
-  champlain_view_zoom_in (window->map_view);
+  GList *item;
+
+  item = clutter_container_get_children (CLUTTER_CONTAINER (window->layer));
+  while (item != NULL)
+  {
+    EmpathyContact *contact;
+    ChamplainMarker *marker;
+
+    marker = CHAMPLAIN_MARKER (item->data);
+    contact = g_object_get_data (G_OBJECT (marker), "contact");
+    g_signal_handlers_disconnect_by_func (contact,
+        map_view_contact_location_notify, marker);
+
+    item = g_list_next (item);
+  }
+
+  g_object_unref (window->list_store);
+  g_object_unref (window->layer);
+  g_slice_free (EmpathyMapView, window);
 }
 
-static void
-map_view_zoom_out_cb (GtkWidget *widget,
-    EmpathyMapView *window)
+GtkWidget *
+empathy_map_view_show (void)
 {
-  champlain_view_zoom_out (window->map_view);
+  static EmpathyMapView *window = NULL;
+  GtkBuilder *gui;
+  GtkWidget *sw;
+  GtkWidget *embed;
+  GtkWidget *throbber_holder;
+  gchar *filename;
+  GtkTreeModel *model;
+  EmpathyContactList *list_iface;
+  EmpathyContactListStore *list_store;
+
+  if (window)
+    {
+      empathy_window_present (GTK_WINDOW (window->window), TRUE);
+      return window->window;
+    }
+
+  window = g_slice_new0 (EmpathyMapView);
+
+  /* Set up interface */
+  filename = empathy_file_lookup ("empathy-map-view.ui", "src");
+  gui = empathy_builder_get_file (filename,
+     "map_view", &window->window,
+     "zoom_in", &window->zoom_in,
+     "zoom_out", &window->zoom_out,
+     "map_scrolledwindow", &sw,
+     "throbber", &throbber_holder,
+     NULL);
+  g_free (filename);
+
+  empathy_builder_connect (gui, window,
+      "map_view", "destroy", map_view_destroy_cb,
+      "zoom_in", "clicked", map_view_zoom_in_cb,
+      "zoom_out", "clicked", map_view_zoom_out_cb,
+      NULL);
+
+  g_object_unref (gui);
+
+  /* Clear the static pointer to window if the dialog is destroyed */
+  g_object_add_weak_pointer (G_OBJECT (window->window), (gpointer *) &window);
+
+  list_iface = EMPATHY_CONTACT_LIST (empathy_contact_manager_dup_singleton ());
+  list_store = empathy_contact_list_store_new (list_iface);
+  empathy_contact_list_store_set_show_groups (list_store, FALSE);
+  empathy_contact_list_store_set_show_avatars (list_store, TRUE);
+  g_object_unref (list_iface);
+
+  window->throbber = ephy_spinner_new ();
+  ephy_spinner_set_size (EPHY_SPINNER (window->throbber),
+      GTK_ICON_SIZE_LARGE_TOOLBAR);
+  gtk_widget_show (window->throbber);
+  gtk_container_add (GTK_CONTAINER (throbber_holder), window->throbber);
+
+  window->list_store = list_store;
+
+  /* Set up map view */
+  embed = gtk_champlain_embed_new ();
+  window->map_view = gtk_champlain_embed_get_view (GTK_CHAMPLAIN_EMBED (embed));
+  g_object_set (G_OBJECT (window->map_view), "zoom-level", 1,
+     "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC, NULL);
+  champlain_view_center_on (window->map_view, 36, 0);
+
+  gtk_container_add (GTK_CONTAINER (sw), embed);
+  gtk_widget_show_all (embed);
+
+  window->layer = g_object_ref (champlain_layer_new ());
+  champlain_view_add_layer (window->map_view, window->layer);
+
+  g_signal_connect (window->map_view, "notify::state",
+      G_CALLBACK (map_view_state_changed), window);
+
+  /* Set up contact list. */
+  model = GTK_TREE_MODEL (window->list_store);
+  gtk_tree_model_foreach (model, map_view_contacts_foreach, window);
+
+  empathy_window_present (GTK_WINDOW (window->window), TRUE);
+  return window->window;
 }
+
index 80a05a129cb5f38988eaf69f7e7f0036a31fe31f..6628f1e082dd4b02a2621d98a04ef53cae37d75a 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef __EMPATHY_MAP_VIEW_H__
 #define __EMPATHY_MAP_VIEW_H__
 
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
index f1140399b80d7feb4045bbee3728ad44b7127b47..545136d4d06b47707e626d5f422f9e7b27be63af 100644 (file)
                 <property name="homogeneous">True</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkToolItem" id="toolbutton1">
+                <property name="visible">True</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment1">
+                    <property name="visible">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToolItem" id="throbber">
+                <property name="visible">True</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
index 5636659323e60440a70a1af04103c56653b81839..da90cbb493999752ac62301905c3f4e577a2b0f8 100644 (file)
@@ -362,7 +362,7 @@ new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog)
        McProfile             *profile;
        const gchar           *protocol;
        const gchar           *room;
-       
+
        account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser);
        account = empathy_account_chooser_dup_account (account_chooser);
        profile = mc_account_get_profile (account);
@@ -545,7 +545,7 @@ new_chatroom_dialog_listing_cb (EmpathyTpRoomlist        *room_list,
 
        /* Update the throbber */
        if (listing) {
-               ephy_spinner_start (EPHY_SPINNER (dialog->throbber));           
+               ephy_spinner_start (EPHY_SPINNER (dialog->throbber));
        } else {
                ephy_spinner_stop (EPHY_SPINNER (dialog->throbber));
        }
@@ -572,7 +572,7 @@ new_chatroom_dialog_model_row_activated_cb (GtkTreeView             *tree_view,
 static void
 new_chatroom_dialog_model_selection_changed (GtkTreeSelection         *selection,
                                             EmpathyNewChatroomDialog *dialog)
-{      
+{
        GtkTreeModel *model;
        GtkTreeIter   iter;
        gchar        *room = NULL;
index 406db4c9f2ccd16a032fcc206031eb6eb4f314d5..0e2299cac6d0424c18814af3da9b66f213ebd413 100644 (file)
 #include <libempathy-gtk/empathy-contact-list-store.h>
 #include <libempathy-gtk/empathy-gtk-enum-types.h>
 
+#ifdef HAVE_WEBKIT
+#include <libempathy-gtk/empathy-theme-adium.h>
+#endif
+
 #include "empathy-preferences.h"
 
 typedef struct {
@@ -48,7 +52,11 @@ typedef struct {
        GtkWidget *checkbutton_show_avatars;
        GtkWidget *checkbutton_compact_contact_list;
        GtkWidget *checkbutton_show_smileys;
+       GtkWidget *checkbutton_show_contacts_in_rooms;
        GtkWidget *combobox_chat_theme;
+       GtkWidget *hbox_adium_theme;
+       GtkWidget *filechooserbutton_adium_theme;
+       GtkWidget *label_invalid_adium_theme;
        GtkWidget *checkbutton_separate_chat_windows;
        GtkWidget *checkbutton_autoconnect;
        GtkWidget *radiobutton_contact_list_sort_by_name;
@@ -61,6 +69,8 @@ typedef struct {
        GtkWidget *checkbutton_notifications_enabled;
        GtkWidget *checkbutton_notifications_disabled_away;
        GtkWidget *checkbutton_notifications_focus;
+       GtkWidget *checkbutton_notifications_contact_signin;
+       GtkWidget *checkbutton_notifications_contact_signout;
 
        GtkWidget *treeview_spell_checker;
 
@@ -89,19 +99,13 @@ static gboolean preferences_languages_load_foreach       (GtkTreeModel
 static void     preferences_languages_cell_toggled_cb    (GtkCellRendererToggle  *cell,
                                                          gchar                  *path_string,
                                                          EmpathyPreferences      *preferences);
-static void     preferences_themes_setup                 (EmpathyPreferences      *preferences);
 static void     preferences_widget_sync_bool             (const gchar            *key,
                                                          GtkWidget              *widget);
 static void     preferences_widget_sync_string           (const gchar            *key,
                                                          GtkWidget              *widget);
-static void     preferences_widget_sync_string_combo     (const gchar            *key,
-                                                         GtkWidget              *widget);
 static void     preferences_notify_string_cb             (EmpathyConf             *conf,
                                                          const gchar            *key,
                                                          gpointer                user_data);
-static void     preferences_notify_string_combo_cb       (EmpathyConf             *conf,
-                                                         const gchar            *key,
-                                                         gpointer                user_data);
 static void     preferences_notify_bool_cb               (EmpathyConf             *conf,
                                                          const gchar            *key,
                                                          gpointer                user_data);
@@ -114,9 +118,6 @@ static void     preferences_hookup_toggle_button         (EmpathyPreferences
 static void     preferences_hookup_radio_button          (EmpathyPreferences      *preferences,
                                                          const gchar            *key,
                                                          GtkWidget              *widget);
-static void     preferences_hookup_string_combo          (EmpathyPreferences      *preferences,
-                                                         const gchar            *key,
-                                                         GtkWidget              *widget);
 static void     preferences_hookup_sensitivity           (EmpathyPreferences      *preferences,
                                                          const gchar            *key,
                                                          GtkWidget              *widget);
@@ -124,8 +125,6 @@ static void     preferences_toggle_button_toggled_cb     (GtkWidget
                                                          gpointer                user_data);
 static void     preferences_radio_button_toggled_cb      (GtkWidget              *button,
                                                          gpointer                user_data);
-static void     preferences_string_combo_changed_cb      (GtkWidget *button,
-                                                         gpointer                user_data);
 static void     preferences_destroy_cb                   (GtkWidget              *widget,
                                                          EmpathyPreferences      *preferences);
 static void     preferences_response_cb                  (GtkWidget              *widget,
@@ -203,6 +202,12 @@ preferences_setup_widgets (EmpathyPreferences *preferences)
        preferences_hookup_toggle_button (preferences,
                                          EMPATHY_PREFS_NOTIFICATIONS_FOCUS,
                                          preferences->checkbutton_notifications_focus);
+       preferences_hookup_toggle_button (preferences,
+                                         EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNIN,
+                                         preferences->checkbutton_notifications_contact_signin);
+       preferences_hookup_toggle_button (preferences,
+                                         EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNOUT,
+                                         preferences->checkbutton_notifications_contact_signout);
 
        preferences_hookup_sensitivity (preferences,
                                        EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
@@ -210,6 +215,12 @@ preferences_setup_widgets (EmpathyPreferences *preferences)
        preferences_hookup_sensitivity (preferences,
                                        EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
                                        preferences->checkbutton_notifications_focus);
+       preferences_hookup_sensitivity (preferences,
+                                       EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
+                                       preferences->checkbutton_notifications_contact_signin);
+       preferences_hookup_sensitivity (preferences,
+                                       EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
+                                       preferences->checkbutton_notifications_contact_signout);
 
        preferences_hookup_toggle_button (preferences,
                                          EMPATHY_PREFS_SOUNDS_ENABLED,
@@ -241,9 +252,9 @@ preferences_setup_widgets (EmpathyPreferences *preferences)
                                          EMPATHY_PREFS_CHAT_SHOW_SMILEYS,
                                          preferences->checkbutton_show_smileys);
 
-       preferences_hookup_string_combo (preferences,
-                                        EMPATHY_PREFS_CHAT_THEME,
-                                        preferences->combobox_chat_theme);
+       preferences_hookup_toggle_button (preferences,
+                                         EMPATHY_PREFS_CHAT_SHOW_CONTACTS_IN_ROOMS,
+                                         preferences->checkbutton_show_contacts_in_rooms);
 
        preferences_hookup_radio_button (preferences,
                                         EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
@@ -465,7 +476,7 @@ preferences_languages_add (EmpathyPreferences *preferences)
                               codes != NULL);
        if (!codes) {
                gtk_widget_set_sensitive (preferences->treeview_spell_checker, FALSE);
-       }               
+       }
 
        for (l = codes; l; l = l->next) {
                GtkTreeIter  iter;
@@ -638,43 +649,6 @@ preferences_languages_cell_toggled_cb (GtkCellRendererToggle *cell,
        preferences_languages_save (preferences);
 }
 
-static void
-preferences_themes_setup (EmpathyPreferences *preferences)
-{
-       GtkComboBox   *combo;
-       GtkCellLayout *cell_layout;
-       GtkCellRenderer *renderer;
-       GtkListStore  *store;
-       const gchar  **themes;
-       gint           i;
-
-       combo = GTK_COMBO_BOX (preferences->combobox_chat_theme);
-       cell_layout = GTK_CELL_LAYOUT (combo);
-
-       /* Create the model */
-       store = gtk_list_store_new (COL_COMBO_COUNT,
-                                   G_TYPE_STRING,  /* Display name */
-                                   G_TYPE_STRING); /* Theme name */
-
-       /* 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_VISIBLE_NAME, _(themes[i + 1]),
-                       COL_COMBO_NAME, themes[i],
-                       -1);
-       }
-
-       /* Add cell renderer */
-       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);
-
-       gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
-       g_object_unref (store);
-}
-
 static void
 preferences_widget_sync_bool (const gchar *key, GtkWidget *widget)
 {
@@ -700,12 +674,12 @@ preferences_widget_sync_string (const gchar *key, GtkWidget *widget)
                                GEnumValue  *enum_value;
                                GSList      *list;
                                GtkWidget   *toggle_widget;
-                               
+
                                /* Get index from new string */
                                type = empathy_contact_list_store_sort_get_type ();
                                enum_class = G_ENUM_CLASS (g_type_class_peek (type));
                                enum_value = g_enum_get_value_by_nick (enum_class, value);
-                               
+
                                if (enum_value) {
                                        list = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget));
                                        toggle_widget = g_slist_nth_data (list, enum_value->value);
@@ -720,48 +694,6 @@ preferences_widget_sync_string (const gchar *key, GtkWidget *widget)
        }
 }
 
-static void
-preferences_widget_sync_string_combo (const gchar *key, GtkWidget *widget)
-{
-       gchar        *value;
-       GtkTreeModel *model;
-       GtkTreeIter   iter;
-       gboolean      found;
-
-       if (!empathy_conf_get_string (empathy_conf_get (), key, &value)) {
-               return;
-       }
-
-       model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
-
-       found = FALSE;
-       if (value && gtk_tree_model_get_iter_first (model, &iter)) {
-
-               do {
-                       gchar *name;
-                       gtk_tree_model_get (model, &iter,
-                                           COL_COMBO_NAME, &name,
-                                           -1);
-
-                       if (strcmp (name, value) == 0) {
-                               found = TRUE;
-                               gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
-                       }
-
-                       g_free (name);
-               } while (!found && gtk_tree_model_iter_next (model, &iter));
-       }
-
-       /* Fallback to the first one. */
-       if (!found) {
-               if (gtk_tree_model_get_iter_first (model, &iter)) {
-                       gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
-               }
-       }
-
-       g_free (value);
-}
-
 static void
 preferences_notify_string_cb (EmpathyConf  *conf,
                              const gchar *key,
@@ -770,13 +702,6 @@ preferences_notify_string_cb (EmpathyConf  *conf,
        preferences_widget_sync_string (key, user_data);
 }
 
-static void
-preferences_notify_string_combo_cb (EmpathyConf  *conf,
-                                   const gchar *key,
-                                   gpointer     user_data)
-{
-       preferences_widget_sync_string_combo (key, user_data);
-}
 
 static void
 preferences_notify_bool_cb (EmpathyConf  *conf,
@@ -816,7 +741,7 @@ preferences_notify_int_cb (EmpathyConf  *conf,
                           const gchar *key,
                           gpointer     user_data)
 {
-       preferences_widget_sync_int (key, user_data);   
+       preferences_widget_sync_int (key, user_data);
 }
 
 static void
@@ -954,32 +879,6 @@ preferences_hookup_radio_button (EmpathyPreferences *preferences,
        }
 }
 
-static void
-preferences_hookup_string_combo (EmpathyPreferences *preferences,
-                                const gchar       *key,
-                                GtkWidget         *widget)
-{
-       guint id;
-
-       preferences_widget_sync_string_combo (key, widget);
-
-       g_object_set_data_full (G_OBJECT (widget), "key",
-                               g_strdup (key), g_free);
-
-       g_signal_connect (widget,
-                         "changed",
-                         G_CALLBACK (preferences_string_combo_changed_cb),
-                         NULL);
-
-       id = empathy_conf_notify_add (empathy_conf_get (),
-                                     key,
-                                     preferences_notify_string_combo_cb,
-                                     widget);
-       if (id) {
-               preferences_add_id (preferences, id);
-       }
-}
-
 static void
 preferences_hookup_sensitivity (EmpathyPreferences *preferences,
                                const gchar       *key,
@@ -1032,14 +931,14 @@ preferences_radio_button_toggled_cb (GtkWidget *button,
                GType        type;
                GEnumClass  *enum_class;
                GEnumValue  *enum_value;
-               
+
                group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
-               
+
                /* Get string from index */
                type = empathy_contact_list_store_sort_get_type ();
                enum_class = G_ENUM_CLASS (g_type_class_peek (type));
                enum_value = g_enum_get_value (enum_class, g_slist_index (group, button));
-               
+
                if (!enum_value) {
                        g_warning ("No GEnumValue for EmpathyContactListSort with GtkRadioButton index:%d",
                                   g_slist_index (group, button));
@@ -1054,28 +953,215 @@ preferences_radio_button_toggled_cb (GtkWidget *button,
        empathy_conf_set_string (empathy_conf_get (), key, value);
 }
 
+
 static void
-preferences_string_combo_changed_cb (GtkWidget *combo,
-                                    gpointer   user_data)
+preferences_theme_adium_update_visibility (EmpathyPreferences *preferences,
+                                          const gchar        *name)
+{
+       if (name && strcmp (name, "adium") == 0) {
+               gtk_widget_show (preferences->hbox_adium_theme);
+       } else {
+               gtk_widget_hide (preferences->hbox_adium_theme);
+               gtk_widget_hide (preferences->label_invalid_adium_theme);
+       }
+}
+
+static void
+preferences_theme_adium_update_validity (EmpathyPreferences *preferences,
+                                        const gchar        *path)
+{
+#ifdef HAVE_WEBKIT
+       if (empathy_adium_path_is_valid (path)) {
+               gtk_widget_hide (preferences->label_invalid_adium_theme);
+       } else {
+               gtk_widget_show (preferences->label_invalid_adium_theme);
+       }
+#endif
+}
+
+static void
+preferences_theme_adium_path_notify_cb (EmpathyConf *conf,
+                                       const gchar *key,
+                                       gpointer     user_data)
+{
+       EmpathyPreferences *preferences = user_data;
+       GtkFileChooser     *chooser;
+       gchar              *value;
+       const gchar        *path;
+
+       if (!empathy_conf_get_string (conf, key, &value)) {
+               return;
+       }
+
+       if (EMP_STR_EMPTY (value)) {
+               path = g_get_home_dir ();
+       } else {
+               path = value;
+       }
+
+       chooser = GTK_FILE_CHOOSER (preferences->filechooserbutton_adium_theme);
+       gtk_file_chooser_set_current_folder (chooser, path);
+       preferences_theme_adium_update_validity (preferences, path);
+       g_free (value);
+}
+
+static void
+preferences_theme_adium_file_set_cb (GtkFileChooser     *chooser,
+                                    EmpathyPreferences *preferences)
+{
+       gchar *path;
+
+       path = gtk_file_chooser_get_current_folder (chooser);
+       empathy_conf_set_string (empathy_conf_get (),
+                                EMPATHY_PREFS_CHAT_ADIUM_PATH,
+                                path);
+       preferences_theme_adium_update_validity (preferences, path);
+
+       g_free (path);
+}
+
+static void
+preferences_theme_notify_cb (EmpathyConf *conf,
+                            const gchar *key,
+                            gpointer     user_data)
+{
+       EmpathyPreferences *preferences = user_data;
+       GtkComboBox        *combo;
+       gchar              *value;
+       GtkTreeModel       *model;
+       GtkTreeIter         iter;
+       gboolean            found = FALSE;
+
+       if (!empathy_conf_get_string (conf, key, &value)) {
+               return;
+       }
+
+       preferences_theme_adium_update_visibility (preferences, value);
+
+       combo = GTK_COMBO_BOX (preferences->combobox_chat_theme);
+       model = gtk_combo_box_get_model (combo);
+       if (value && gtk_tree_model_get_iter_first (model, &iter)) {
+               gchar *name;
+
+               do {
+                       gtk_tree_model_get (model, &iter,
+                                           COL_COMBO_NAME, &name,
+                                           -1);
+
+                       if (strcmp (name, value) == 0) {
+                               found = TRUE;
+                               gtk_combo_box_set_active_iter (combo, &iter);
+                               break;
+                       }
+
+                       g_free (name);
+               } while (gtk_tree_model_iter_next (model, &iter));
+       }
+
+       /* Fallback to the first one. */
+       if (!found) {
+               if (gtk_tree_model_get_iter_first (model, &iter)) {
+                       gtk_combo_box_set_active_iter (combo, &iter);
+               }
+       }
+
+       g_free (value);
+}
+
+static void
+preferences_theme_changed_cb (GtkComboBox        *combo,
+                             EmpathyPreferences *preferences)
 {
-       const gchar  *key;
        GtkTreeModel *model;
        GtkTreeIter   iter;
        gchar        *name;
 
-       key = g_object_get_data (G_OBJECT (combo), "key");
-
-       if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
-               model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
+       if (gtk_combo_box_get_active_iter (combo, &iter)) {
+               model = gtk_combo_box_get_model (combo);
 
                gtk_tree_model_get (model, &iter,
                                    COL_COMBO_NAME, &name,
                                    -1);
-               empathy_conf_set_string (empathy_conf_get (), key, name);
+
+               preferences_theme_adium_update_visibility (preferences, name);
+
+               empathy_conf_set_string (empathy_conf_get (),
+                                        EMPATHY_PREFS_CHAT_THEME,
+                                        name);
                g_free (name);
        }
 }
 
+static void
+preferences_themes_setup (EmpathyPreferences *preferences)
+{
+       GtkComboBox   *combo;
+       GtkCellLayout *cell_layout;
+       GtkCellRenderer *renderer;
+       GtkListStore  *store;
+       const gchar  **themes;
+       gint           i;
+       guint          id;
+
+       combo = GTK_COMBO_BOX (preferences->combobox_chat_theme);
+       cell_layout = GTK_CELL_LAYOUT (combo);
+
+       /* Create the model */
+       store = gtk_list_store_new (COL_COMBO_COUNT,
+                                   G_TYPE_STRING,  /* Display name */
+                                   G_TYPE_STRING); /* Theme name */
+
+       /* 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_VISIBLE_NAME, _(themes[i + 1]),
+                       COL_COMBO_NAME, themes[i],
+                       -1);
+       }
+
+       /* Add cell renderer */
+       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);
+
+       gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
+       g_object_unref (store);
+
+       g_signal_connect (combo, "changed",
+                         G_CALLBACK (preferences_theme_changed_cb),
+                         preferences);
+
+       /* Select the theme from the gconf key and track changes */
+       preferences_theme_notify_cb (empathy_conf_get (),
+                                    EMPATHY_PREFS_CHAT_THEME,
+                                    preferences);
+       id = empathy_conf_notify_add (empathy_conf_get (),
+                                     EMPATHY_PREFS_CHAT_THEME,
+                                     preferences_theme_notify_cb,
+                                     preferences);
+       if (id) {
+               preferences_add_id (preferences, id);
+       }
+
+       g_signal_connect (preferences->filechooserbutton_adium_theme,
+                         "file-set",
+                         G_CALLBACK (preferences_theme_adium_file_set_cb),
+                         preferences);
+       /* Select the adium path from the gconf key and track changes */
+       preferences_theme_adium_path_notify_cb (empathy_conf_get (),
+                                               EMPATHY_PREFS_CHAT_ADIUM_PATH,
+                                               preferences);
+       id = empathy_conf_notify_add (empathy_conf_get (),
+                                     EMPATHY_PREFS_CHAT_ADIUM_PATH,
+                                     preferences_theme_adium_path_notify_cb,
+                                     preferences);
+       if (id) {
+               preferences_add_id (preferences, id);
+       }
+}
+
 static void
 preferences_response_cb (GtkWidget         *widget,
                         gint               response,
@@ -1123,7 +1209,11 @@ empathy_preferences_show (GtkWindow *parent)
                "checkbutton_show_avatars", &preferences->checkbutton_show_avatars,
                "checkbutton_compact_contact_list", &preferences->checkbutton_compact_contact_list,
                "checkbutton_show_smileys", &preferences->checkbutton_show_smileys,
+               "checkbutton_show_contacts_in_rooms", &preferences->checkbutton_show_contacts_in_rooms,
                "combobox_chat_theme", &preferences->combobox_chat_theme,
+               "hbox_adium_theme", &preferences->hbox_adium_theme,
+               "filechooserbutton_adium_theme", &preferences->filechooserbutton_adium_theme,
+               "label_invalid_adium_theme", &preferences->label_invalid_adium_theme,
                "checkbutton_separate_chat_windows", &preferences->checkbutton_separate_chat_windows,
                "checkbutton_autoconnect", &preferences->checkbutton_autoconnect,
                "radiobutton_contact_list_sort_by_name", &preferences->radiobutton_contact_list_sort_by_name,
@@ -1131,6 +1221,8 @@ empathy_preferences_show (GtkWindow *parent)
                "checkbutton_notifications_enabled", &preferences->checkbutton_notifications_enabled,
                "checkbutton_notifications_disabled_away", &preferences->checkbutton_notifications_disabled_away,
                "checkbutton_notifications_focus", &preferences->checkbutton_notifications_focus,
+               "checkbutton_notifications_contact_signin", &preferences->checkbutton_notifications_contact_signin,
+               "checkbutton_notifications_contact_signout", &preferences->checkbutton_notifications_contact_signout,
                "checkbutton_sounds_enabled", &preferences->checkbutton_sounds_enabled,
                "checkbutton_sounds_disabled_away", &preferences->checkbutton_sounds_disabled_away,
                "treeview_sounds", &preferences->treeview_sounds,
index 6cc86d1d6f5d736db6476e324946a1e25199f351..aba58828ef43653a8df536ac1bb43f2ea89efe74 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef __EMPATHY_PREFERENCES_H__
 #define __EMPATHY_PREFERENCES_H__
 
-#include <gtk/gtkwindow.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
index d92fc8f88458e25bef00a2e7d6a4e1c807e68173..38cfd3419aa6aa7f549fa113060fa52b2ef74e76 100644 (file)
@@ -37,7 +37,6 @@
                         <child>
                           <object class="GtkVBox" id="vbox199">
                             <property name="visible">True</property>
-                            <property name="spacing">6</property>
                             <child>
                               <object class="GtkCheckButton" id="checkbutton_compact_contact_list">
                                 <property name="label" translatable="yes">Show co_mpact contact list</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>
                       </object>
                     <child type="label">
                       <object class="GtkLabel" id="label611">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Appearance&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">Appearance</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
                     <child type="label">
                       <object class="GtkLabel" id="label612">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Behavior&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">Behavior</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
                     <child type="label">
                       <object class="GtkLabel" id="label644">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Contact List&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">Contact List</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
                             <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>
                     </child>
                   </object>
                       <object class="GtkLabel" id="label645">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Play sound for events&lt;/b&gt;</property>
-                        <property name="use_markup">True</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>
                                   <object class="GtkLabel" id="label6">
                                     <property name="visible">True</property>
                                     <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">&lt;small&gt;Reduced location accuracy means that nothing more precise than your city, state and country will be published.  GPS coordinates will have a random value added (&#xB1;0.25&#xB0;).&lt;/small&gt;</property>
-                                    <property name="use_markup">True</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 have a random value added (&#xB1;0.25&#xB0;).</property>
+                                    <attributes>
+                                      <attribute name="scale" value="0.8"/>
+                                    </attributes>
                                   </object>
                                   <packing>
                                     <property name="position">1</property>
                     <child type="label">
                       <object class="GtkLabel" id="label3">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Privacy&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">Privacy</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
                     <child type="label">
                       <object class="GtkLabel" id="label5">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Geoclue Settings&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">Geoclue Settings</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
                                   <object class="GtkLabel" id="label616">
                                     <property name="visible">True</property>
                                     <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">&lt;small&gt;The list of languages reflects only the languages for which you have a dictionary installed.&lt;/small&gt;</property>
-                                    <property name="use_markup">True</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>
                     <child type="label">
                       <object class="GtkLabel" id="label615">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Enable spell checking for languages:&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">Enable spell checking for languages:</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
                                 <property name="position">0</property>
                               </packing>
                             </child>
+                            <child>
+                              <object class="GtkHBox" id="hbox_adium_theme">
+                                <property name="visible">True</property>
+                                <property name="spacing">6</property>
+                                <child>
+                                  <object class="GtkLabel" id="label587">
+                                    <property name="visible">True</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Adium theme to use:</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkFileChooserButton" id="filechooserbutton_adium_theme">
+                                    <property name="visible">True</property>
+                                    <property name="preview_widget_active">False</property>
+                                    <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label_invalid_adium_theme">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Not a valid adium theme</property>
+                                <attributes>
+                                  <attribute name="foreground" value="red"/>
+                                </attributes>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
                           </object>
                         </child>
                       </object>
                     <child type="label">
                       <object class="GtkLabel" id="label626">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">&lt;b&gt;Appearance&lt;/b&gt;</property>
-                        <property name="use_markup">True</property>
+                        <property name="label" translatable="yes">Appearance</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
                     </child>
                   </object>
index caca6b5e3980d42247449063f835487f4241b7df..7b70229e2003f533d0747100733553a51ec874a4 100644 (file)
@@ -165,7 +165,7 @@ empathy_sidebar_set_property (GObject *object,
   switch (prop_id)
     {
       case PROP_CURRENT_PAGE:
-        empathy_sidebar_set_page (sidebar, g_value_get_object (value));        
+        empathy_sidebar_set_page (sidebar, g_value_get_object (value));
         break;
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
index 9c21948808732794dd87e5b9dc4068d19032d1bc..d6520ff7cf1aa5eecd29c8151ac2fd0051be3fda 100644 (file)
@@ -229,13 +229,14 @@ status_icon_event_added_cb (EmpathyEventManager *manager,
        DEBUG ("New event %p", event);
 
        priv->event = event;
-       priv->showing_event_icon = TRUE;
-
-       status_icon_update_icon (icon);
-       status_icon_update_tooltip (icon);
+       if (event->must_ack) {
+               priv->showing_event_icon = TRUE;
+               status_icon_update_icon (icon);
+               status_icon_update_tooltip (icon);
+       }
        status_icon_update_notification (icon);
 
-       if (!priv->blink_timeout) {
+       if (!priv->blink_timeout && priv->showing_event_icon) {
                priv->blink_timeout = g_timeout_add (BLINK_TIMEOUT,
                                                     (GSourceFunc) status_icon_blink_timeout_cb,
                                                     icon);
@@ -260,7 +261,7 @@ status_icon_event_removed_cb (EmpathyEventManager *manager,
 
        /* update notification anyway, as it's safe and we might have been
         * changed presence in the meanwhile
-        */     
+        */
        status_icon_update_notification (icon);
 
        if (!priv->event && priv->blink_timeout) {
@@ -378,7 +379,7 @@ status_icon_key_press_event_cb  (GtkWidget *window,
        }
        return FALSE;
 }
-                               
+
 static void
 status_icon_activate_cb (GtkStatusIcon     *status_icon,
                         EmpathyStatusIcon *icon)
index d5be4df8d4a7902dea53a3b50ef2395fda5512bb..85124d1e9156056ed813130780a670dd6bd61552 100644 (file)
@@ -38,6 +38,7 @@
 #include <libebook/e-book.h>
 #include <libnotify/notify.h>
 
+#include <telepathy-glib/dbus.h>
 #include <telepathy-glib/util.h>
 #include <libmissioncontrol/mc-account.h>
 #include <libmissioncontrol/mission-control.h>
@@ -47,6 +48,7 @@
 #include <libempathy/empathy-call-factory.h>
 #include <libempathy/empathy-chatroom-manager.h>
 #include <libempathy/empathy-account-manager.h>
+#include <libempathy/empathy-debugger.h>
 #include <libempathy/empathy-dispatcher.h>
 #include <libempathy/empathy-dispatch-operation.h>
 #include <libempathy/empathy-log-manager.h>
@@ -284,13 +286,13 @@ create_salut_account (void)
 
        account = mc_account_create (profile);
        mc_account_set_display_name (account, _("People nearby"));
-       
+
        nickname = e_contact_get (contact, E_CONTACT_NICKNAME);
        first_name = e_contact_get (contact, E_CONTACT_GIVEN_NAME);
        last_name = e_contact_get (contact, E_CONTACT_FAMILY_NAME);
        email = e_contact_get (contact, E_CONTACT_EMAIL_1);
        jid = e_contact_get (contact, E_CONTACT_IM_JABBER_HOME_1);
-       
+
        if (!tp_strdiff (nickname, "nickname")) {
                g_free (nickname);
                nickname = NULL;
@@ -449,6 +451,31 @@ new_call_handler_cb (EmpathyCallFactory *factory, EmpathyCallHandler *handler,
        gtk_widget_show (GTK_WIDGET (window));
 }
 
+#ifdef ENABLE_DEBUG
+static void
+default_log_handler (const gchar *log_domain,
+    GLogLevelFlags log_level,
+    const gchar *message,
+    gpointer user_data)
+{
+       g_log_default_handler (log_domain, log_level, message, NULL);
+
+       /* G_LOG_DOMAIN = "empathy". No need to send empathy messages to the
+        * debugger as they already have in empathy_debug. */
+       if (log_level != G_LOG_LEVEL_DEBUG
+           || tp_strdiff (log_domain, G_LOG_DOMAIN)) {
+               EmpathyDebugger *dbg;
+               GTimeVal now;
+
+               dbg = empathy_debugger_get_singleton ();
+               g_get_current_time (&now);
+
+               empathy_debugger_add_message (dbg, &now, log_domain,
+                                             log_level, message);
+       }
+}
+#endif /* ENABLE_DEBUG */
+
 int
 main (int argc, char *argv[])
 {
@@ -470,6 +497,7 @@ main (int argc, char *argv[])
        gboolean           hide_contact_list = FALSE;
        gboolean           accounts_dialog = FALSE;
        GError            *error = NULL;
+       TpDBusDaemon      *dbus_daemon;
        GOptionEntry       options[] = {
                { "no-connect", 'n',
                  0, G_OPTION_ARG_NONE, &no_connect,
@@ -512,6 +540,11 @@ main (int argc, char *argv[])
        gtk_window_set_default_icon_name ("empathy");
        textdomain (GETTEXT_PACKAGE);
 
+#ifdef ENABLE_DEBUG
+       /* Set up debugger */
+       g_log_set_default_handler (default_log_handler, NULL);
+#endif
+
         /* Setting up the bacon connection */
        startup_timestamp = get_startup_timestamp ();
        connection = bacon_message_connection_new ("empathy");
@@ -547,6 +580,23 @@ main (int argc, char *argv[])
                g_warning ("Cannot create the 'empathy' bacon connection.");
        }
 
+       /* Take well-known name */
+       dbus_daemon = tp_dbus_daemon_dup (&error);
+       if (error == NULL) {
+               if (!tp_dbus_daemon_request_name (dbus_daemon,
+                                                 "org.gnome.Empathy",
+                                                 TRUE, &error)) {
+                       DEBUG ("Failed to request well-known name: %s",
+                              error ? error->message : "no message");
+                       g_clear_error (&error);
+               }
+               g_object_unref (dbus_daemon);
+       } else {
+               DEBUG ("Failed to dup dbus daemon: %s",
+                      error ? error->message : "no message");
+               g_clear_error (&error);
+       }
+
        /* Setting up MC */
        mc = empathy_mission_control_dup_singleton ();
        g_signal_connect (mc, "ServiceEnded",
@@ -584,7 +634,7 @@ main (int argc, char *argv[])
                        (idle), TP_CONNECTION_PRESENCE_TYPE_OFFLINE) <= 0) {
                empathy_idle_set_state (idle, MC_PRESENCE_AVAILABLE);
        }
-       
+
        create_salut_account ();
 
        /* Setting up UI */
index be82ca71b3183500c26ed2277f09fe6bc72557ae..30ffa57c147d8512da1b51bbb1f61dec6581aaed 100644 (file)
@@ -34,9 +34,7 @@
 #define STOP_PROFILER(name)
 
 #include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gtk/gtkicontheme.h>
-#include <gtk/gtkiconfactory.h>
-#include <gtk/gtksettings.h>
+#include <gtk/gtk.h>
 
 /* Spinner cache implementation */
 
index 4435fe3715255137517700a9f5924b55a9b56b18..769d54a3d80540068eefa117f15b7b901f06a85b 100644 (file)
@@ -25,8 +25,7 @@
 #ifndef EPHY_SPINNER_H
 #define EPHY_SPINNER_H
 
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkenums.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
index 84356f20b9e3e8e3974681709d7d96edefc048bf..489322f9ca0c97931ed3aa353ffdd17ed02d9a14 100644 (file)
@@ -8,6 +8,12 @@ then
   fail=1
 fi
 
+if grep -n '   $' "$@"
+then
+  echo "^^^ The above files contain unwanted trailing tabs"
+  fail=1
+fi
+
 # TODO: enable tab checking once all Empathy switched to TP coding style
 #if grep -n '  ' "$@"
 #then