aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--NEWS48
-rw-r--r--configure.ac127
-rw-r--r--data/.gitignore1
-rw-r--r--data/Makefile.am21
-rw-r--r--data/org.gnome.Empathy.gschema.xml307
-rw-r--r--data/org.gnome.Empathy.gschema.xml.in302
-rw-r--r--extensions/Authentication_TLS_Certificate.xml305
-rw-r--r--extensions/Debug.xml165
-rw-r--r--extensions/Makefile.am2
-rw-r--r--extensions/misc.xml2
-rw-r--r--goa-mc-plugin/mcp-account-manager-goa.c34
-rw-r--r--libempathy-gtk/empathy-account-widget-irc.c10
-rw-r--r--libempathy-gtk/empathy-account-widget-irc.h6
-rw-r--r--libempathy-gtk/empathy-account-widget-irc.ui6
-rw-r--r--libempathy-gtk/empathy-account-widget-private.h2
-rw-r--r--libempathy-gtk/empathy-account-widget-sip.c6
-rw-r--r--libempathy-gtk/empathy-account-widget-sip.h2
-rw-r--r--libempathy-gtk/empathy-account-widget-sip.ui59
-rw-r--r--libempathy-gtk/empathy-account-widget.c174
-rw-r--r--libempathy-gtk/empathy-account-widget.h6
-rw-r--r--libempathy-gtk/empathy-bad-password-dialog.c2
-rw-r--r--libempathy-gtk/empathy-call-utils.c73
-rw-r--r--libempathy-gtk/empathy-call-utils.h4
-rw-r--r--libempathy-gtk/empathy-chat.c112
-rw-r--r--libempathy-gtk/empathy-contact-blocking-dialog.c59
-rw-r--r--libempathy-gtk/empathy-contact-blocking-dialog.ui1
-rw-r--r--libempathy-gtk/empathy-contact-chooser.c62
-rw-r--r--libempathy-gtk/empathy-contact-dialogs.c1
-rw-r--r--libempathy-gtk/empathy-contact-search-dialog.c79
-rw-r--r--libempathy-gtk/empathy-contact-widget.c849
-rw-r--r--libempathy-gtk/empathy-contact-widget.h41
-rw-r--r--libempathy-gtk/empathy-images.h2
-rw-r--r--libempathy-gtk/empathy-individual-menu.c4
-rw-r--r--libempathy-gtk/empathy-individual-store-channel.c31
-rw-r--r--libempathy-gtk/empathy-individual-store.h1
-rw-r--r--libempathy-gtk/empathy-individual-view.c122
-rw-r--r--libempathy-gtk/empathy-live-search.c8
-rw-r--r--libempathy-gtk/empathy-local-xmpp-assistant-widget.c17
-rw-r--r--libempathy-gtk/empathy-new-account-dialog.c47
-rw-r--r--libempathy-gtk/empathy-new-call-dialog.c1
-rw-r--r--libempathy-gtk/empathy-new-message-dialog.c1
-rw-r--r--libempathy-gtk/empathy-plist.c29
-rw-r--r--libempathy-gtk/empathy-presence-chooser.c79
-rw-r--r--libempathy-gtk/empathy-tls-dialog.c46
-rw-r--r--libempathy-gtk/empathy-tls-dialog.h8
-rw-r--r--libempathy/Makefile.am12
-rw-r--r--libempathy/empathy-client-factory.c69
-rw-r--r--libempathy/empathy-client-factory.h15
-rw-r--r--libempathy/empathy-connection-aggregator.c41
-rw-r--r--libempathy/empathy-connection-aggregator.h5
-rw-r--r--libempathy/empathy-connectivity.c435
-rw-r--r--libempathy/empathy-connectivity.h71
-rw-r--r--libempathy/empathy-contact-list.c214
-rw-r--r--libempathy/empathy-contact-list.h92
-rw-r--r--libempathy/empathy-contact.c153
-rw-r--r--libempathy/empathy-ft-handler.c38
-rw-r--r--libempathy/empathy-gsettings.h1
-rw-r--r--libempathy/empathy-individual-manager.c121
-rw-r--r--libempathy/empathy-individual-manager.h11
-rw-r--r--libempathy/empathy-request-util.h3
-rw-r--r--libempathy/empathy-server-tls-handler.c31
-rw-r--r--libempathy/empathy-server-tls-handler.h6
-rw-r--r--libempathy/empathy-tls-certificate.c432
-rw-r--r--libempathy/empathy-tls-certificate.h93
-rw-r--r--libempathy/empathy-tls-verifier.c65
-rw-r--r--libempathy/empathy-tls-verifier.h8
-rw-r--r--libempathy/empathy-tp-chat.c2222
-rw-r--r--libempathy/empathy-tp-chat.h99
-rw-r--r--libempathy/empathy-tp-contact-factory.c347
-rw-r--r--libempathy/empathy-tp-contact-factory.h85
-rw-r--r--libempathy/empathy-tp-roomlist.c524
-rw-r--r--libempathy/empathy-tp-roomlist.h59
-rw-r--r--libempathy/empathy-tp-streamed-media.c856
-rw-r--r--libempathy/empathy-tp-streamed-media.h113
-rw-r--r--libempathy/empathy-utils.c50
-rw-r--r--po/POTFILES.in8
-rw-r--r--po/ca@valencia.po441
-rw-r--r--po/en_CA.po1535
-rw-r--r--po/es.po1986
-rw-r--r--po/fa.po826
-rw-r--r--po/gl.po1999
-rw-r--r--po/he.po740
-rw-r--r--po/nb.po1788
-rw-r--r--po/sk.po500
-rw-r--r--po/sl.po998
-rw-r--r--po/te.po699
-rw-r--r--po/zh_CN.po2
-rwxr-xr-xrelease.py2
-rw-r--r--src/Makefile.am49
-rw-r--r--src/empathy-accounts-dialog.c238
-rw-r--r--src/empathy-accounts.c3
-rw-r--r--src/empathy-audio-sink.c26
-rw-r--r--src/empathy-audio-src.c55
-rw-r--r--src/empathy-auth-client.c28
-rw-r--r--src/empathy-av.c172
-rw-r--r--src/empathy-call-factory.c1
-rw-r--r--src/empathy-call-handler.c1
-rw-r--r--src/empathy-call-observer.c36
-rw-r--r--src/empathy-call-window.c30
-rw-r--r--src/empathy-call.c6
-rw-r--r--src/empathy-chat-manager.c18
-rw-r--r--src/empathy-chat-window.c7
-rw-r--r--src/empathy-chat.c4
-rw-r--r--src/empathy-debug-window.c1015
-rw-r--r--src/empathy-debug-window.h3
-rw-r--r--src/empathy-debugger.c5
-rw-r--r--src/empathy-event-manager.c503
-rw-r--r--src/empathy-event-manager.h1
-rw-r--r--src/empathy-invite-participant-dialog.c19
-rw-r--r--src/empathy-map-view.c556
-rw-r--r--src/empathy-map-view.h56
-rw-r--r--src/empathy-map-view.ui89
-rw-r--r--src/empathy-new-chatroom-dialog.c1310
-rw-r--r--src/empathy-new-chatroom-dialog.h54
-rw-r--r--src/empathy-new-chatroom-dialog.ui420
-rw-r--r--src/empathy-notifications-approver.c9
-rw-r--r--src/empathy-preferences.c324
-rw-r--r--src/empathy-preferences.ui223
-rw-r--r--src/empathy-roster-window-menubar.ui393
-rw-r--r--src/empathy-roster-window.c1014
-rw-r--r--src/empathy-roster-window.h8
-rw-r--r--src/empathy-roster-window.ui10
-rw-r--r--src/empathy-streamed-media-factory.c270
-rw-r--r--src/empathy-streamed-media-factory.h69
-rw-r--r--src/empathy-streamed-media-handler.c921
-rw-r--r--src/empathy-streamed-media-handler.h106
-rw-r--r--src/empathy-streamed-media-window-fullscreen.c309
-rw-r--r--src/empathy-streamed-media-window-fullscreen.h77
-rw-r--r--src/empathy-streamed-media-window.c3200
-rw-r--r--src/empathy-streamed-media-window.h65
-rw-r--r--src/empathy-streamed-media-window.ui861
-rw-r--r--src/empathy-video-widget.c512
-rw-r--r--src/empathy-video-widget.h72
-rw-r--r--src/empathy.c35
-rw-r--r--src/ev-sidebar.c351
-rw-r--r--src/ev-sidebar.h76
-rw-r--r--tests/Makefile.am19
-rw-r--r--tests/certificates/Makefile.am3
-rw-r--r--tests/certificates/collabora-ca.cer (renamed from tests/certificates/collabora-ca/collabora-ca.cer)bin1536 -> 1536 bytes
-rw-r--r--tests/empathy-tls-test.c208
-rw-r--r--tests/interactive/empathy-logs.c1
-rw-r--r--tests/mock-pkcs11.c1351
-rw-r--r--tests/mock-pkcs11.h352
144 files changed, 12662 insertions, 23942 deletions
diff --git a/Makefile.am b/Makefile.am
index 59a2435d6..1a3a118b5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -17,7 +17,6 @@ endif
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
DISTCHECK_CONFIGURE_FLAGS = \
- --enable-empathy-av \
--disable-scrollkeeper \
--disable-schemas-install
diff --git a/NEWS b/NEWS
index c2983c407..9efd8a688 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,51 @@
+NEW in 3.5.1 (30/04/2012)
+============
+
+Dependencies:
+ • GLib ≥ 2.32.0
+ • telepathy-glib ≥ 0.17.6
+ • Intltool ≥ 0.50.0
+
+Bugs fixed:
+ - Fixed #501065, Can't rename group (Guillaume Desmottes)
+ - Fixed #668186, make check does not run the test suite (which doesn't pass when it is run) (Guillaume Desmottes)
+ - Fixed #668261, empathy-tls-test (Stef Walter)
+ - Fixed #669134, SIP widget: add local IP widgets (Laurent Contzen)
+ - Fixed #669177, Show who changed the subject.
+ - Fixed #672619, Drop org.gnome.Empathy.gschema.xml.in (Guillaume Desmottes)
+ - Fixed #672976, Use GNetworkMonitor (Guillaume Desmottes)
+ - Fixed #673159, Add 'Rename' entry to accounts context menu (Guillaume Desmottes)
+ - Fixed #673410, Tooltip text when editing should be translatable (Laurent)
+ - Fixed #673821, Remove old contact list code (Guillaume Desmottes)
+ - Fixed #674432, The buddy list window is very small by default (Guillaume Desmottes)
+ - Fixed #640846, No tooltips in status picker (Laurent Contzen)
+
+Translations:
+ - Updated an Translation (Daniel Martinez Cucalon)
+ - Updated ar Translation (Ibrahim Saed)
+ - Updated ca Translation (Jordi Serratosa)
+ - Updated ca@valencia Translation (Carles Ferrando)
+ - Updated en_CA Translation (Tiffany Antopolski)
+ - Updated es Translation (Daniel Mustieles)
+ - Updated eu Translation (Inaki Larranaga Murgoitio)
+ - Updated fa Translation (Arash Mousavi)
+ - Updated gl Translation (Fran Diéguez)
+ - Updated he Translation (Yaron Shahrabani)
+ - Updated hi Translation (Chandan Kumar)
+ - Updated id Translation (Andika Triwidada)
+ - Updated ja Translation (Mako N)
+ - Updated ko Translation (Changwoo Ryu)
+ - Updated nb Translation (Kjartan Maraas)
+ - Updated or Translation (ManojKumar Giri)
+ - Updated sk Translation (Pavol KlaÄanský)
+ - Updated sl Translation (Matej UrbanÄiÄ, Andrej ŽnidarÅ¡iÄ)
+ - Updated te Translation (Sasi Bhushan)
+ - Updated zh_CN Translation (Automatic Mirroring)
+
+Documentation translations:
+ - Updated fr Documentation translation (Bruno Brouard)
+ - Updated ja Documentation translation (Mako N)
+
NEW in 3.4.2 (14/05/2012)
============
diff --git a/configure.ac b/configure.ac
index eebe69790..0ff4ea8ca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,8 +2,8 @@ dnl If not 1, append datestamp to the version number
m4_define(empathy_released, 0)
m4_define([empathy_major_version], [3])
-m4_define([empathy_minor_version], [4])
-m4_define([empathy_micro_version], [2])
+m4_define([empathy_minor_version], [5])
+m4_define([empathy_micro_version], [1])
m4_define([empathy_nano_version], [0])
dnl Display the nano_version only if it's not '0'
@@ -37,9 +37,9 @@ AC_COPYRIGHT([
FOLKS_REQUIRED=0.6.6
GNUTLS_REQUIRED=2.8.5
-GLIB_REQUIRED=2.30.0
+GLIB_REQUIRED=2.32.0
AC_DEFINE(GLIB_VERSION_MIN_REQUIRED, GLIB_VERSION_2_30, [Ignore post 2.30 deprecations])
-AC_DEFINE(GLIB_VERSION_MAX_ALLOWED, GLIB_VERSION_2_30, [Prevent post 2.30 APIs])
+AC_DEFINE(GLIB_VERSION_MAX_ALLOWED, GLIB_VERSION_2_32, [Prevent post 2.32 APIs])
GTK_REQUIRED=3.3.6
AC_DEFINE(GDK_VERSION_MIN_REQUIRED, GDK_VERSION_3_4, [Ignore post 3.4 deprecations])
@@ -52,9 +52,9 @@ AC_DEFINE(CLUTTER_VERSION_MAX_ALLOWED, CLUTTER_VERSION_1_10, [Prevent post 1.10
CLUTTER_GTK_REQUIRED=1.1.2
CLUTTER_GST_REQUIRED=1.5.2
-TELEPATHY_GLIB_REQUIRED=0.18.0
-AC_DEFINE(TP_VERSION_MIN_REQUIRED, TP_VERSION_0_18, [Ignore post 0.18 deprecations])
-AC_DEFINE(TP_VERSION_MAX_ALLOWED, TP_VERSION_0_18, [Prevent post 0.18 APIs])
+TELEPATHY_GLIB_REQUIRED=0.19.0
+AC_DEFINE(TP_VERSION_MIN_REQUIRED, TP_VERSION_0_20, [Ignore post 0.20 deprecations])
+AC_DEFINE(TP_VERSION_MAX_ALLOWED, TP_VERSION_0_20, [Prevent post 0.20 APIs])
GSTREAMER_REQUIRED=0.10.32
KEYRING_REQUIRED=2.26.0
@@ -64,7 +64,7 @@ LIBNOTIFY_REQUIRED=0.7.0
TELEPATHY_FARSTREAM_REQUIRED=0.2.1
TELEPATHY_LOGGER=0.2.13
WEBKIT_REQUIRED=1.3.13
-GOA_REQUIRED=3.3.0
+GOA_REQUIRED=3.5.1
# Optional deps
ENCHANT_REQUIRED=1.2.0
@@ -218,24 +218,6 @@ AC_DEFINE(EMPATHY_GOA_PROVIDER, "org.gnome.OnlineAccounts",
[Name of provider for accounts imported from GOA])
# -----------------------------------------------------------
-# Build empathy-av?
-# -----------------------------------------------------------
-AC_ARG_ENABLE(empathy-av,
- AS_HELP_STRING([--enable-empathy-av=@<:@no/yes@:>@],
- [build empathy-av (legacy call UI)]),,
- [enable_empathy_av=no])
-if test "x$enable_empathy_av" != "xno" ; then
- PKG_CHECK_MODULES(EMPATHY_AV,
- [
- farstream-0.1
- telepathy-farstream >= $TELEPATHY_FARSTREAM_REQUIRED
- ])
- AC_DEFINE(HAVE_EMPATHY_AV, 1, [Define if you have StreamedMedia channel support])
- have_empathy_av=yes
-fi
-AM_CONDITIONAL(HAVE_EMPATHY_AV, test "x$have_empathy_av" = "xyes")
-
-# -----------------------------------------------------------
# evolution-data-server (about-me)
# -----------------------------------------------------------
AC_ARG_WITH(eds,
@@ -263,65 +245,13 @@ fi
# -----------------------------------------------------------
# Language Support
# -----------------------------------------------------------
-IT_PROG_INTLTOOL([0.40.0])
+IT_PROG_INTLTOOL([0.50.0])
GETTEXT_PACKAGE=empathy
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package name])
# -----------------------------------------------------------
-# Connectivity integration
-# -----------------------------------------------------------
-AC_ARG_WITH(connectivity,
- AS_HELP_STRING([--with-connectivity=@<:@nm/connman/auto/no@:>@],
- [build with connectivity support]), ,
- with_connectivity=auto)
-
-if test "x$with_connectivity" = "xno"; then
- have_nm=no
- have_connman=no
-
-elif test "x$with_connectivity" = "xconnman"; then
- have_nm=no
-
- PKG_CHECK_MODULES(CONNMAN,
- [
- dbus-glib-1
- ], have_connman="yes", have_connman="no")
-
- if test "x$have_connman" = "xyes"; then
- AC_DEFINE(HAVE_CONNMAN, 1, [Define if you have connman dependencies])
- fi
-
-else
- have_connman=no
-
- PKG_CHECK_MODULES(NETWORK_MANAGER,
- [
- libnm-glib >= $NETWORK_MANAGER_REQUIRED
- ], have_nm="yes", have_nm="no")
-
- if test "x$have_nm" = "xyes"; then
- AC_DEFINE(HAVE_NM, 1, [Define if you have libnm-glib])
- fi
-fi
-
-if test "x$with_connectivity" = "xconnman" -a "x$have_connman" != "xyes"; then
- AC_MSG_ERROR([Couldn't find connman dependencies:
-
-$CONNMAN_PKG_ERRORS])
-fi
-
-if test "x$with_connectivity" = "xnm" -a "x$have_nm" != "xyes"; then
- AC_MSG_ERROR([Couldn't find Network Manager dependencies:
-
-$NETWORK_MANAGER_PKG_ERRORS])
-fi
-
-AM_CONDITIONAL(HAVE_NM, test "x$have_nm" = "xyes")
-AM_CONDITIONAL(HAVE_CONNMAN, test "x$have_connman" = "xyes")
-
-# -----------------------------------------------------------
# gudev
# -----------------------------------------------------------
AC_ARG_ENABLE(gudev,
@@ -483,38 +413,6 @@ AC_SUBST(GEOCODE_CFLAGS)
AC_SUBST(GEOCODE_LIBS)
# -----------------------------------------------------------
-# meego widgets support
-# -----------------------------------------------------------
-AC_ARG_ENABLE(meego,
- AS_HELP_STRING([--enable-meego=@<:@no/yes@:>@],
- [Enable meego widgets]), ,
- enable_meego=no)
-
-if test "x$enable_meego" != "xno"; then
- PKG_CHECK_MODULES(MEEGO,
- [
- mx-gtk-1.0
- gio-unix-2.0
- ], have_meego="yes", have_meego="no")
-
- if test "x$have_meego" = "xyes"; then
- AC_DEFINE(HAVE_MEEGO, 1, [Define if you have meego])
- fi
-else
- have_meego="no"
-fi
-
-if test "x$enable_meego" = "xyes" -a "x$have_meego" != "xyes"; then
- AC_MSG_ERROR([Could not find meego dependencies:
-
-$MEEGO_PKG_ERRORS])
-fi
-
-AM_CONDITIONAL(HAVE_MEEGO, test "x$have_meego" = "xyes")
-AC_SUBST(MEEGO_CFLAGS)
-AC_SUBST(MEEGO_LIBS)
-
-# -----------------------------------------------------------
# nautilus-sendto
# -----------------------------------------------------------
AC_ARG_ENABLE(nautilus-sendto,
@@ -626,6 +524,7 @@ AC_CONFIG_FILES([
tests/Makefile
tests/interactive/Makefile
tests/xml/Makefile
+ tests/certificates/Makefile
tools/Makefile
])
AC_OUTPUT
@@ -644,17 +543,11 @@ Configure summary:
Display maps (libchamplain).: ${have_libchamplain}
Location awareness (Geoclue): ${have_geoclue}
Geocode support (Geocode)...: ${have_geocode}
- Meego widgets...............: ${have_meego}
Cheese webcam support ......: ${have_cheese}
Camera monitoring...........: ${have_gudev}
- Connectivity:
- NetworkManager integration..: ${have_nm}
- ConnMan integration.........: ${have_connman}
-
Extras:
Nautilus-sendto plugin......: ${have_nst}
GOA MC plugin...............: ${have_goa}
Salut E-D-S support.........: ${with_eds}
- empathy-av (legacy).........: ${enable_empathy_av}
"
diff --git a/data/.gitignore b/data/.gitignore
index 2d4a96f0c..1b5fab599 100644
--- a/data/.gitignore
+++ b/data/.gitignore
@@ -1,7 +1,6 @@
empathy.desktop
empathy.desktop.in
org.gnome.Empathy.gschema.valid
-org.gnome.Empathy.gschema.xml
gschemas.compiled
org.freedesktop.Telepathy.Client.Empathy.Chat.service
org.freedesktop.Telepathy.Client.Empathy.AudioVideo.service
diff --git a/data/Makefile.am b/data/Makefile.am
index a2be750cf..ffef27bf1 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -8,11 +8,7 @@ desktop_in_files = \
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
-gsettings_files = \
- org.gnome.Empathy.gschema.xml.in \
- $(NULL)
-gsettings_SCHEMAS = $(gsettings_files:.xml.in=.xml)
-@INTLTOOL_XML_NOMERGE_RULE@
+gsettings_SCHEMAS = org.gnome.Empathy.gschema.xml
@GSETTINGS_RULES@
# We need to compile schemas at make time
@@ -33,19 +29,11 @@ servicefile_in_files = \
org.freedesktop.Telepathy.Client.Empathy.Call.service.in \
org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service.in
-if HAVE_EMPATHY_AV
-servicefile_in_files += \
- org.freedesktop.Telepathy.Client.Empathy.AudioVideo.service.in
-endif
-
servicefile_DATA = $(servicefile_in_files:.service.in=.service)
org.freedesktop.Telepathy.Client.Empathy.Chat.service: org.freedesktop.Telepathy.Client.Empathy.Chat.service.in
$(AM_V_GEN)sed -e "s|[@]libexecdir[@]|$(libexecdir)|" $< > $@
-org.freedesktop.Telepathy.Client.Empathy.AudioVideo.service: org.freedesktop.Telepathy.Client.Empathy.AudioVideo.service.in
- $(AM_V_GEN)sed -e "s|[@]libexecdir[@]|$(libexecdir)|" $< > $@
-
org.freedesktop.Telepathy.Client.Empathy.Auth.service: org.freedesktop.Telepathy.Client.Empathy.Auth.service.in
$(AM_V_GEN)sed -e "s|[@]libexecdir[@]|$(libexecdir)|" $< > $@
@@ -62,11 +50,6 @@ clientfile_DATA = \
Empathy.Call.client \
Empathy.FileTransfer.client
-if HAVE_EMPATHY_AV
-clientfile_DATA += \
- Empathy.AudioVideo.client
-endif
-
htmldir = $(datadir)/empathy
html_DATA = \
Template.html \
@@ -81,7 +64,7 @@ EXTRA_DIST = \
$(html_DATA) \
$(clientfile_DATA) \
$(servicefile_in_files) \
- $(gsettings_files) \
+ $(gsettings_SCHEMAS) \
$(NULL)
DISTCLEANFILES = \
diff --git a/data/org.gnome.Empathy.gschema.xml b/data/org.gnome.Empathy.gschema.xml
new file mode 100644
index 000000000..49451979f
--- /dev/null
+++ b/data/org.gnome.Empathy.gschema.xml
@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist>
+
+ <enum id="position">
+ <value nick="top-left" value="1"/>
+ <value nick="top-right" value="2"/>
+ <value nick="bottom-left" value="3"/>
+ <value nick="bottom-right" value="4"/>
+ </enum>
+
+ <schema id="org.gnome.Empathy" path="/org/gnome/empathy/">
+ <key name="use-conn" type="b">
+ <default>true</default>
+ <summary>Connection managers should be used</summary>
+ <description>Whether connectivity managers should be used to automatically disconnect/reconnect.</description>
+ </key>
+ <key name="autoconnect" type="b">
+ <default>true</default>
+ <summary>Empathy should auto-connect on startup</summary>
+ <description>Whether Empathy should automatically log into your accounts on startup.</description>
+ </key>
+ <key name="autoaway" type="b">
+ <default>true</default>
+ <summary>Empathy should auto-away when idle</summary>
+ <description>Whether Empathy should go into away mode automatically if the user is idle.</description>
+ </key>
+ <key name="file-transfer-default-folder" type="s">
+ <default>''</default>
+ <summary>Empathy default download folder</summary>
+ <description>The default folder to save file transfers in.</description>
+ </key>
+ <key name="sanity-cleaning-number" type="u">
+ <default>0</default>
+ <!-- translators: Automatic tasks which are run once to port/update account settings. Ideally, this shouldn't be exposed to users at all, we just use a gsettings key here as an optimization to only run it only once. -->
+ <summary>Magic number used to check if sanity cleaning tasks should be run</summary>
+ <description>empathy-sanity-cleaning.c uses this number to check if the cleaning tasks should be executed or not. Users should not change this key manually.</description>
+ </key>
+ <child name="ui" schema="org.gnome.Empathy.ui"/>
+ <child name="contacts" schema="org.gnome.Empathy.contacts"/>
+ <child name="sounds" schema="org.gnome.Empathy.sounds"/>
+ <child name="notifications" schema="org.gnome.Empathy.notifications"/>
+ <child name="conversation" schema="org.gnome.Empathy.conversation"/>
+ <child name="hints" schema="org.gnome.Empathy.hints"/>
+ <child name="location" schema="org.gnome.Empathy.location"/>
+ </schema>
+ <schema id="org.gnome.Empathy.ui" path="/org/gnome/empathy/ui/">
+ <key name="show-offline" type="b">
+ <default>true</default>
+ <summary>Show offline contacts</summary>
+ <description>Whether to show contacts that are offline in the contact list.</description>
+ </key>
+ <key name="show-avatars" type="b">
+ <default>true</default>
+ <summary>Show avatars</summary>
+ <description>Whether to show avatars for contacts in the contact list and chat windows.</description>
+ </key>
+ <key name="show-protocols" type="b">
+ <default>false</default>
+ <summary>Show protocols</summary>
+ <description>Whether to show protocols for contacts in the contact list.</description>
+ </key>
+ <key name="show-balance-in-roster" type="b">
+ <default>true</default>
+ <summary>Show Balance in contact list</summary>
+ <description>Whether to show account balances in the contact list.</description>
+ </key>
+ <key name="compact-contact-list" type="b">
+ <default>false</default>
+ <summary>Compact contact list</summary>
+ <description>Whether to show the contact list in compact mode.</description>
+ </key>
+ <key name="main-window-hidden" type="b">
+ <default>false</default>
+ <summary>Hide main window</summary>
+ <description>Hide the main window.</description>
+ </key>
+ <key name="avatar-directory" type="s">
+ <default>''</default>
+ <summary>Default directory to select an avatar image from</summary>
+ <description>The last directory that an avatar image was chosen from.</description>
+ </key>
+ <key name="separate-chat-windows" type="b">
+ <default>false</default>
+ <summary>Open new chats in separate windows</summary>
+ <description>Always open a separate chat window for new chats.</description>
+ </key>
+ <key name="events-notify-area" type="b">
+ <default>true</default>
+ <summary>Display incoming events in the status area</summary>
+ <description>Display incoming events in the status area. If false,
+present them to the user immediately.</description>
+ </key>
+ <key name="chat-window-paned-pos" type="i">
+ <default>0</default>
+ <summary>The position for the chat window side pane</summary>
+ <description>The stored position (in pixels) of the chat window side pane.</description>
+ </key>
+ <key name="show-groups" type="b">
+ <default>true</default>
+ <summary>Show contact groups</summary>
+ <description>Whether to show groups in the contact list.</description>
+ </key>
+ </schema>
+ <schema id="org.gnome.Empathy.contacts" path="/org/gnome/empathy/contacts/">
+ <key name="sort-criterium" type="s">
+ <default>'state'</default>
+ <choices>
+ <choice value='state'/>
+ <choice value='name'/>
+ </choices>
+ <summary>Contact list sort criterion</summary>
+ <description>Which criterion to use when sorting the contact list. Default is to sort by the contact's state with the value "state". A value of "name" will sort the contact list by name.</description>
+ </key>
+ </schema>
+ <schema id="org.gnome.Empathy.sounds" path="/org/gnome/empathy/sounds/">
+ <key name="sounds-enabled" type="b">
+ <default>true</default>
+ <summary>Use notification sounds</summary>
+ <description>Whether to play a sound to notify of events.</description>
+ </key>
+ <key name="sounds-disabled-away" type="b">
+ <default>true</default>
+ <summary>Disable sounds when away</summary>
+ <description>Whether to play sound notifications when away or busy.</description>
+ </key>
+ <key name="sounds-incoming-message" type="b">
+ <default>true</default>
+ <summary>Play a sound for incoming messages</summary>
+ <description>Whether to play a sound to notify of incoming messages.</description>
+ </key>
+ <key name="sounds-outgoing-message" type="b">
+ <default>false</default>
+ <summary>Play a sound for outgoing messages</summary>
+ <description>Whether to play a sound to notify of outgoing messages.</description>
+ </key>
+ <key name="sounds-new-conversation" type="b">
+ <default>true</default>
+ <summary>Play a sound for new conversations</summary>
+ <description>Whether to play a sound to notify of new conversations.</description>
+ </key>
+ <key name="sounds-contact-login" type="b">
+ <default>false</default>
+ <summary>Play a sound when a contact logs in</summary>
+ <description>Whether to play a sound to notify of contacts logging into the network.</description>
+ </key>
+ <key name="sounds-contact-logout" type="b">
+ <default>false</default>
+ <summary>Play a sound when a contact logs out</summary>
+ <description>Whether to play a sound to notify of contacts logging out of the network.</description>
+ </key>
+ <key name="sounds-service-login" type="b">
+ <default>false</default>
+ <summary>Play a sound when we log in</summary>
+ <description>Whether to play a sound when logging into a network.</description>
+ </key>
+ <key name="sounds-service-logout" type="b">
+ <default>false</default>
+ <summary>Play a sound when we log out</summary>
+ <description>Whether to play a sound when logging out of a network.</description>
+ </key>
+ </schema>
+ <schema id="org.gnome.Empathy.notifications" path="/org/gnome/empathy/notifications/">
+ <key name="notifications-enabled" type="b">
+ <default>true</default>
+ <summary>Enable popup notifications for new messages</summary>
+ <description>Whether to show a popup notification when receiving a new message.</description>
+ </key>
+ <key name="notifications-disabled-away" type="b">
+ <default>true</default>
+ <summary>Disable popup notifications when away</summary>
+ <description>Whether to show popup notifications when away or busy.</description>
+ </key>
+ <key name="notifications-focus" type="b">
+ <default>false</default>
+ <summary>Pop up notifications if the chat isn't focused</summary>
+ <description>Whether to show a popup notification when receiving a new message even if the chat is already opened, but not focused.</description>
+ </key>
+ <key name="notifications-contact-signin" type="b">
+ <default>false</default>
+ <summary>Pop up notifications when a contact logs in</summary>
+ <description>Whether to show a popup notification when a contact goes online.</description>
+ </key>
+ <key name="notifications-contact-signout" type="b">
+ <default>false</default>
+ <summary>Pop up notifications when a contact logs out</summary>
+ <description>Whether to show a popup notification when a contact goes offline.</description>
+ </key>
+ </schema>
+ <schema id="org.gnome.Empathy.conversation" path="/org/gnome/empathy/conversation/">
+ <key name="graphical-smileys" type="b">
+ <default>true</default>
+ <summary>Use graphical smileys</summary>
+ <description>Whether to convert smileys into graphical images in conversations.</description>
+ </key>
+ <key name="show-contacts-in-rooms" type="b">
+ <default>true</default>
+ <summary>Show contact list in rooms</summary>
+ <description>Whether to show the contact list in chat rooms.</description>
+ </key>
+ <key name="theme" type="s">
+ <default>'classic'</default>
+ <summary>Chat window theme</summary>
+ <description>The theme that is used to display the conversation in chat windows.</description>
+ </key>
+ <key name="theme-variant" type="s">
+ <default>''</default>
+ <summary>Chat window theme variant</summary>
+ <description>The theme variant that is used to display the conversation in chat windows.</description>
+ </key>
+ <key name="adium-path" type="s">
+ <default>''</default>
+ <summary>Path of the Adium theme to use</summary>
+ <description>Path of the Adium theme to use if the theme used for chat is Adium.</description>
+ </key>
+ <key name="enable-webkit-developer-tools" type="b">
+ <default>false</default>
+ <summary>Enable WebKit Developer Tools</summary>
+ <description>Whether WebKit developer tools, such as the Web Inspector, should be enabled.</description>
+ </key>
+ <key name="send-chat-states" type="b">
+ <default>true</default>
+ <summary>Inform other users when you are typing to them</summary>
+ <description>Whether to send the 'composing' or 'paused' chat states. Does not currently affect the 'gone' state.</description>
+ </key>
+ <key name="theme-chat-room" type="b">
+ <default>true</default>
+ <summary>Use theme for chat rooms</summary>
+ <description>Whether to use the theme for chat rooms.</description>
+ </key>
+ <key name="spell-checker-languages" type="s">
+ <default>'en'</default>
+ <summary>Spell checking languages</summary>
+ <description>Comma-separated list of spell checker languages to use (e.g. "en, fr, nl").</description>
+ </key>
+ <key name="spell-checker-enabled" type="b">
+ <default>true</default>
+ <summary>Enable spell checker</summary>
+ <description>Whether to check words typed against the languages you want to check with.</description>
+ </key>
+ <key name="nick-completion-char" type="s">
+ <default>':'</default>
+ <summary>Nick completed character</summary>
+ <description>Character to add after nickname when using nick completion (tab) in group chat.</description>
+ </key>
+ <key name="avatar-in-icon" type="b">
+ <default>false</default>
+ <summary>Empathy should use the avatar of the contact as the chat window icon</summary>
+ <description>Whether Empathy should use the avatar of the contact as the chat window icon.</description>
+ </key>
+ <key name="room-last-account" type="o">
+ <default>"/"</default>
+ <summary>Last account selected in Join Room dialog</summary>
+ <description>D-Bus object path of the last account selected to join a room.</description>
+ </key>
+ </schema>
+ <schema id="org.gnome.Empathy.call" path="/org/gnome/empathy/call/">
+ <key name="camera-device" type="s">
+ <default>''</default>
+ <summary>Camera device</summary>
+ <description>Default camera device to use in video calls, e.g. /dev/video0.</description>
+ </key>
+ <key name="camera-position" enum="position">
+ <default>'bottom-left'</default>
+ <summary>Camera position</summary>
+ <description>Position the camera preview should be during a call.</description>
+ </key>
+ <key name="echo-cancellation" type="b">
+ <default>true</default>
+ <summary>Echo cancellation support</summary>
+ <description>Whether to enable Pulseaudio's echo cancellation filter.</description>
+ </key>
+ </schema>
+ <schema id="org.gnome.Empathy.hints" path="/org/gnome/empathy/hints/">
+ <key name="close-main-window" type="b">
+ <default>true</default>
+ <summary>Show hint about closing the main window</summary>
+ <description>Whether to show the message dialog about closing the main window with the 'x' button in the title bar.</description>
+ </key>
+ </schema>
+ <schema id="org.gnome.Empathy.location" path="/org/gnome/empathy/location/">
+ <key name="publish" type="b">
+ <default>false</default>
+ <summary>Empathy can publish the user's location</summary>
+ <description>Whether Empathy can publish the user's location to their contacts.</description>
+ </key>
+ <key name="resource-network" type="b">
+ <default>true</default>
+ <summary>Empathy can use the network to guess the location</summary>
+ <description>Whether Empathy can use the network to guess the location.</description>
+ </key>
+ <key name="resource-cell" type="b">
+ <default>true</default>
+ <summary>Empathy can use the cellular network to guess the location</summary>
+ <description>Whether Empathy can use the cellular network to guess the location.</description>
+ </key>
+ <key name="resource-gps" type="b">
+ <default>false</default>
+ <summary>Empathy can use the GPS to guess the location</summary>
+ <description>Whether Empathy can use the GPS to guess the location.</description>
+ </key>
+ <key name="reduce-accuracy" type="b">
+ <default>true</default>
+ <summary>Empathy should reduce the location's accuracy</summary>
+ <description>Whether Empathy should reduce the location's accuracy for privacy reasons.</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/org.gnome.Empathy.gschema.xml.in b/data/org.gnome.Empathy.gschema.xml.in
deleted file mode 100644
index c1ac758e6..000000000
--- a/data/org.gnome.Empathy.gschema.xml.in
+++ /dev/null
@@ -1,302 +0,0 @@
-<schemalist>
-
- <enum id="position">
- <value nick="top-left" value="1"/>
- <value nick="top-right" value="2"/>
- <value nick="bottom-left" value="3"/>
- <value nick="bottom-right" value="4"/>
- </enum>
-
- <schema id="org.gnome.Empathy" path="/org/gnome/empathy/">
- <key name="use-conn" type="b">
- <default>true</default>
- <_summary>Connection managers should be used</_summary>
- <_description>Whether connectivity managers should be used to automatically disconnect/reconnect.</_description>
- </key>
- <key name="autoconnect" type="b">
- <default>true</default>
- <_summary>Empathy should auto-connect on startup</_summary>
- <_description>Whether Empathy should automatically log into your accounts on startup.</_description>
- </key>
- <key name="autoaway" type="b">
- <default>true</default>
- <_summary>Empathy should auto-away when idle</_summary>
- <_description>Whether Empathy should go into away mode automatically if the user is idle.</_description>
- </key>
- <key name="file-transfer-default-folder" type="s">
- <default>''</default>
- <_summary>Empathy default download folder</_summary>
- <_description>The default folder to save file transfers in.</_description>
- </key>
- <key name="sanity-cleaning-number" type="u">
- <default>0</default>
- <!-- translators: Automatic tasks which are run once to port/update account settings. Ideally, this shouldn't be exposed to users at all, we just use a gsettings key here as an optimization to only run it only once. -->
- <_summary>Magic number used to check if sanity cleaning tasks should be run</_summary>
- <_description>empathy-sanity-cleaning.c uses this number to check if the cleaning tasks should be executed or not. Users should not change this key manually.</_description>
- </key>
- <child name="ui" schema="org.gnome.Empathy.ui"/>
- <child name="contacts" schema="org.gnome.Empathy.contacts"/>
- <child name="sounds" schema="org.gnome.Empathy.sounds"/>
- <child name="notifications" schema="org.gnome.Empathy.notifications"/>
- <child name="conversation" schema="org.gnome.Empathy.conversation"/>
- <child name="hints" schema="org.gnome.Empathy.hints"/>
- <child name="location" schema="org.gnome.Empathy.location"/>
- </schema>
- <schema id="org.gnome.Empathy.ui" path="/org/gnome/empathy/ui/">
- <key name="show-offline" type="b">
- <default>true</default>
- <_summary>Show offline contacts</_summary>
- <_description>Whether to show contacts that are offline in the contact list.</_description>
- </key>
- <key name="show-avatars" type="b">
- <default>true</default>
- <_summary>Show avatars</_summary>
- <_description>Whether to show avatars for contacts in the contact list and chat windows.</_description>
- </key>
- <key name="show-protocols" type="b">
- <default>false</default>
- <_summary>Show protocols</_summary>
- <_description>Whether to show protocols for contacts in the contact list.</_description>
- </key>
- <key name="show-balance-in-roster" type="b">
- <default>false</default>
- <_summary>Show Balance in contact list</_summary>
- <_description>Whether to show account balances in the contact list.</_description>
- </key>
- <key name="compact-contact-list" type="b">
- <default>false</default>
- <_summary>Compact contact list</_summary>
- <_description>Whether to show the contact list in compact mode.</_description>
- </key>
- <key name="main-window-hidden" type="b">
- <default>false</default>
- <_summary>Hide main window</_summary>
- <_description>Hide the main window.</_description>
- </key>
- <key name="avatar-directory" type="s">
- <default>''</default>
- <_summary>Default directory to select an avatar image from</_summary>
- <_description>The last directory that an avatar image was chosen from.</_description>
- </key>
- <key name="separate-chat-windows" type="b">
- <default>false</default>
- <_summary>Open new chats in separate windows</_summary>
- <_description>Always open a separate chat window for new chats.</_description>
- </key>
- <key name="events-notify-area" type="b">
- <default>true</default>
- <_summary>Display incoming events in the status area</_summary>
- <_description>Display incoming events in the status area. If false,
-present them to the user immediately.</_description>
- </key>
- <key name="chat-window-paned-pos" type="i">
- <default>0</default>
- <_summary>The position for the chat window side pane</_summary>
- <_description>The stored position (in pixels) of the chat window side pane.</_description>
- </key>
- <key name="show-groups" type="b">
- <default>true</default>
- <_summary>Show contact groups</_summary>
- <_description>Whether to show groups in the contact list.</_description>
- </key>
- </schema>
- <schema id="org.gnome.Empathy.contacts" path="/org/gnome/empathy/contacts/">
- <key name="sort-criterium" type="s">
- <default>'state'</default>
- <_summary>Contact list sort criterion</_summary>
- <_description>Which criterion to use when sorting the contact list. Default is to sort by the contact's state with the value "state". A value of "name" will sort the contact list by name.</_description>
- </key>
- </schema>
- <schema id="org.gnome.Empathy.sounds" path="/org/gnome/empathy/sounds/">
- <key name="sounds-enabled" type="b">
- <default>true</default>
- <_summary>Use notification sounds</_summary>
- <_description>Whether to play a sound to notify of events.</_description>
- </key>
- <key name="sounds-disabled-away" type="b">
- <default>true</default>
- <_summary>Disable sounds when away</_summary>
- <_description>Whether to play sound notifications when away or busy.</_description>
- </key>
- <key name="sounds-incoming-message" type="b">
- <default>true</default>
- <_summary>Play a sound for incoming messages</_summary>
- <_description>Whether to play a sound to notify of incoming messages.</_description>
- </key>
- <key name="sounds-outgoing-message" type="b">
- <default>false</default>
- <_summary>Play a sound for outgoing messages</_summary>
- <_description>Whether to play a sound to notify of outgoing messages.</_description>
- </key>
- <key name="sounds-new-conversation" type="b">
- <default>true</default>
- <_summary>Play a sound for new conversations</_summary>
- <_description>Whether to play a sound to notify of new conversations.</_description>
- </key>
- <key name="sounds-contact-login" type="b">
- <default>false</default>
- <_summary>Play a sound when a contact logs in</_summary>
- <_description>Whether to play a sound to notify of contacts logging into the network.</_description>
- </key>
- <key name="sounds-contact-logout" type="b">
- <default>false</default>
- <_summary>Play a sound when a contact logs out</_summary>
- <_description>Whether to play a sound to notify of contacts logging out of the network.</_description>
- </key>
- <key name="sounds-service-login" type="b">
- <default>false</default>
- <_summary>Play a sound when we log in</_summary>
- <_description>Whether to play a sound when logging into a network.</_description>
- </key>
- <key name="sounds-service-logout" type="b">
- <default>false</default>
- <_summary>Play a sound when we log out</_summary>
- <_description>Whether to play a sound when logging out of a network.</_description>
- </key>
- </schema>
- <schema id="org.gnome.Empathy.notifications" path="/org/gnome/empathy/notifications/">
- <key name="notifications-enabled" type="b">
- <default>true</default>
- <_summary>Enable popup notifications for new messages</_summary>
- <_description>Whether to show a popup notification when receiving a new message.</_description>
- </key>
- <key name="notifications-disabled-away" type="b">
- <default>true</default>
- <_summary>Disable popup notifications when away</_summary>
- <_description>Whether to show popup notifications when away or busy.</_description>
- </key>
- <key name="notifications-focus" type="b">
- <default>false</default>
- <_summary>Pop up notifications if the chat isn't focused</_summary>
- <_description>Whether to show a popup notification when receiving a new message even if the chat is already opened, but not focused.</_description>
- </key>
- <key name="notifications-contact-signin" type="b">
- <default>false</default>
- <_summary>Pop up notifications when a contact logs in</_summary>
- <_description>Whether to show a popup notification when a contact goes online.</_description>
- </key>
- <key name="notifications-contact-signout" type="b">
- <default>false</default>
- <_summary>Pop up notifications when a contact logs out</_summary>
- <_description>Whether to show a popup notification when a contact goes offline.</_description>
- </key>
- </schema>
- <schema id="org.gnome.Empathy.conversation" path="/org/gnome/empathy/conversation/">
- <key name="graphical-smileys" type="b">
- <default>true</default>
- <_summary>Use graphical smileys</_summary>
- <_description>Whether to convert smileys into graphical images in conversations.</_description>
- </key>
- <key name="show-contacts-in-rooms" type="b">
- <default>true</default>
- <_summary>Show contact list in rooms</_summary>
- <_description>Whether to show the contact list in chat rooms.</_description>
- </key>
- <key name="theme" type="s">
- <default>'classic'</default>
- <_summary>Chat window theme</_summary>
- <_description>The theme that is used to display the conversation in chat windows.</_description>
- </key>
- <key name="theme-variant" type="s">
- <default>''</default>
- <_summary>Chat window theme variant</_summary>
- <_description>The theme variant that is used to display the conversation in chat windows.</_description>
- </key>
- <key name="adium-path" type="s">
- <default>''</default>
- <_summary>Path of the Adium theme to use</_summary>
- <_description>Path of the Adium theme to use if the theme used for chat is Adium.</_description>
- </key>
- <key name="enable-webkit-developer-tools" type="b">
- <default>false</default>
- <_summary>Enable WebKit Developer Tools</_summary>
- <_description>Whether WebKit developer tools, such as the Web Inspector, should be enabled.</_description>
- </key>
- <key name="send-chat-states" type="b">
- <default>true</default>
- <_summary>Inform other users when you are typing to them</_summary>
- <_description>Whether to send the 'composing' or 'paused' chat states. Does not currently affect the 'gone' state.</_description>
- </key>
- <key name="theme-chat-room" type="b">
- <default>true</default>
- <_summary>Use theme for chat rooms</_summary>
- <_description>Whether to use the theme for chat rooms.</_description>
- </key>
- <key name="spell-checker-languages" type="s">
- <default>'en'</default>
- <_summary>Spell checking languages</_summary>
- <_description>Comma-separated list of spell checker languages to use (e.g. "en, fr, nl").</_description>
- </key>
- <key name="spell-checker-enabled" type="b">
- <default>true</default>
- <_summary>Enable spell checker</_summary>
- <_description>Whether to check words typed against the languages you want to check with.</_description>
- </key>
- <key name="nick-completion-char" type="s">
- <default>':'</default>
- <_summary>Nick completed character</_summary>
- <_description>Character to add after nickname when using nick completion (tab) in group chat.</_description>
- </key>
- <key name="avatar-in-icon" type="b">
- <default>false</default>
- <_summary>Empathy should use the avatar of the contact as the chat window icon</_summary>
- <_description>Whether Empathy should use the avatar of the contact as the chat window icon.</_description>
- </key>
- <key name="room-last-account" type="o">
- <default>"/"</default>
- <_summary>Last account selected in Join Room dialog</_summary>
- <_description>D-Bus object path of the last account selected to join a room.</_description>
- </key>
- </schema>
- <schema id="org.gnome.Empathy.call" path="/org/gnome/empathy/call/">
- <key name="camera-device" type="s">
- <default>''</default>
- <_summary>Camera device</_summary>
- <_description>Default camera device to use in video calls, e.g. /dev/video0.</_description>
- </key>
- <key name="camera-position" enum="position">
- <default>'bottom-left'</default>
- <_summary>Camera position</_summary>
- <_description>Position the camera preview should be during a call.</_description>
- </key>
- <key name="echo-cancellation" type="b">
- <default>true</default>
- <_summary>Echo cancellation support</_summary>
- <_description>Whether to enable Pulseaudio's echo cancellation filter.</_description>
- </key>
- </schema>
- <schema id="org.gnome.Empathy.hints" path="/org/gnome/empathy/hints/">
- <key name="close-main-window" type="b">
- <default>true</default>
- <_summary>Show hint about closing the main window</_summary>
- <_description>Whether to show the message dialog about closing the main window with the 'x' button in the title bar.</_description>
- </key>
- </schema>
- <schema id="org.gnome.Empathy.location" path="/org/gnome/empathy/location/">
- <key name="publish" type="b">
- <default>false</default>
- <_summary>Empathy can publish the user's location</_summary>
- <_description>Whether Empathy can publish the user's location to their contacts.</_description>
- </key>
- <key name="resource-network" type="b">
- <default>true</default>
- <_summary>Empathy can use the network to guess the location</_summary>
- <_description>Whether Empathy can use the network to guess the location.</_description>
- </key>
- <key name="resource-cell" type="b">
- <default>true</default>
- <_summary>Empathy can use the cellular network to guess the location</_summary>
- <_description>Whether Empathy can use the cellular network to guess the location.</_description>
- </key>
- <key name="resource-gps" type="b">
- <default>false</default>
- <_summary>Empathy can use the GPS to guess the location</_summary>
- <_description>Whether Empathy can use the GPS to guess the location.</_description>
- </key>
- <key name="reduce-accuracy" type="b">
- <default>true</default>
- <_summary>Empathy should reduce the location's accuracy</_summary>
- <_description>Whether Empathy should reduce the location's accuracy for privacy reasons.</_description>
- </key>
- </schema>
-</schemalist>
diff --git a/extensions/Authentication_TLS_Certificate.xml b/extensions/Authentication_TLS_Certificate.xml
deleted file mode 100644
index db1d76fd7..000000000
--- a/extensions/Authentication_TLS_Certificate.xml
+++ /dev/null
@@ -1,305 +0,0 @@
-<?xml version="1.0" ?>
-<node name="/Authentication_TLS_Certificate" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
- <tp:copyright>Copyright © 2010 Collabora Limited</tp:copyright>
- <tp:license>
- 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
- </tp:license>
-
- <interface name="org.freedesktop.Telepathy.Authentication.TLSCertificate">
- <tp:added version="0.19.13">(as stable API)</tp:added>
-
- <tp:docstring>
- This object represents a TLS certificate.
- </tp:docstring>
-
- <tp:simple-type name="Certificate_Data" array-name="Certificate_Data_List"
- type="ay">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>The raw data contained in a TLS certificate.</p>
-
- <p>For X.509 certificates (<tp:member-ref>CertificateType</tp:member-ref>
- = "x509"), this MUST be in DER format, as defined by the
- <a href="http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf">X.690</a>
- ITU standard.</p>
-
- <p>For PGP certificates (<tp:member-ref>CertificateType</tp:member-ref>
- = "pgp"), this MUST be a binary OpenPGP key as defined by section 11.1
- of <a href="http://www.rfc-editor.org/rfc/4880.txt">RFC 4880</a>.</p>
- </tp:docstring>
- </tp:simple-type>
-
- <tp:struct name="TLS_Certificate_Rejection" array-name="TLS_Certificate_Rejection_List">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>Struct representing one reason why a TLS certificate was rejected.</p>
- <p>Since there can be multiple things wrong with a TLS certificate,
- arrays of this type are used to represent lists of reasons for
- rejection. In that case, the most important reason SHOULD be placed
- first in the list.</p>
- </tp:docstring>
-
- <tp:member name="Reason" type="u"
- tp:type="TLS_Certificate_Reject_Reason">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>The value of the TLS_Certificate_Reject_Reason enumeration for
- this certificate rejection.
- <tp:rationale>
- Clients that do not understand the <code>Error</code> member,
- which may be implementation-specific, can use this property to
- classify rejection reasons into common categories.
- </tp:rationale>
- </p>
- </tp:docstring>
- </tp:member>
-
- <tp:member name="Error" type="s"
- tp:type="DBus_Error_Name">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>The DBus error name for this certificate rejection.</p>
- <p>This MAY correspond to the value of the <code>Reason</code> member,
- or MAY be a more specific D-Bus error name, perhaps implementation-specific.</p>
- </tp:docstring>
- </tp:member>
-
- <tp:member name="Details" type="a{sv}"
- tp:type="String_Variant_Map">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>Additional information about why the certificate was rejected.
- This MAY also include one or more of the following well-known keys:</p>
- <p>
- <dl>
- <dt>user-requested (b)</dt>
- <dd>True if the error was due to an user-requested rejection of
- the certificate; False if there was an unrecoverable error in the
- verification process.</dd>
- <dt>expected-hostname (s)</dt>
- <dd>If the rejection reason is Hostname_Mismatch, the hostname that
- the server certificate was expected to have.</dd>
- <dt>certificate-hostname (s)</dt>
- <dd>If the rejection reason is Hostname_Mismatch, the hostname of
- the certificate that was presented.
- <tp:rationale>
- <p>For instance, if you try to connect to gmail.com but are presented
- with a TLS certificate issued to evil.example.org, the error details
- for Hostname_Mismatch MAY include:</p>
- <pre>
- {
- 'expected-hostname': 'gmail.com',
- 'certificate-hostname': 'evil.example.org',
- }
- </pre>
- </tp:rationale>
- </dd>
- <dt>debug-message (s)</dt>
- <dd>Debugging information on the error, corresponding to the
- message part of a D-Bus error message, which SHOULD NOT be
- displayed to users under normal circumstances</dd>
- </dl>
- </p>
- </tp:docstring>
- </tp:member>
- </tp:struct>
-
- <tp:enum type="u" name="TLS_Certificate_State">
- <tp:docstring>
- The possible states for a <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Authentication">TLSCertificate</tp:dbus-ref>
- object.
- </tp:docstring>
-
- <tp:enumvalue suffix="Pending" value="0">
- <tp:docstring>
- The certificate is currently waiting to be accepted or rejected.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Accepted" value="1">
- <tp:docstring>
- The certificate has been verified.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Rejected" value="2">
- <tp:docstring>
- The certificate has been rejected.
- </tp:docstring>
- </tp:enumvalue>
- </tp:enum>
-
- <tp:enum type="u" name="TLS_Certificate_Reject_Reason">
- <tp:docstring>
- Possible reasons to reject a TLS certificate.
- </tp:docstring>
-
- <tp:enumvalue suffix="Unknown" value="0">
- <tp:docstring>
- The certificate has been rejected for another reason
- not listed in this enumeration.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Untrusted" value="1">
- <tp:docstring>
- The certificate is not trusted.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Expired" value="2">
- <tp:docstring>
- The certificate is expired.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Not_Activated" value="3">
- <tp:docstring>
- The certificate is not active yet.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Fingerprint_Mismatch" value="4">
- <tp:docstring>
- The certificate provided does not have the expected
- fingerprint.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Hostname_Mismatch" value="5">
- <tp:docstring>
- The hostname certified does not match the provided one.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Self_Signed" value="6">
- <tp:docstring>
- The certificate is self-signed.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Revoked" value="7">
- <tp:docstring>
- The certificate has been revoked.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Insecure" value="8">
- <tp:docstring>
- The certificate uses an insecure cipher algorithm, or is
- cryptographically weak.
- </tp:docstring>
- </tp:enumvalue>
-
- <tp:enumvalue suffix="Limit_Exceeded" value="9">
- <tp:docstring>
- The length in bytes of the certificate, or the depth of the
- certificate chain exceed the limits imposed by the crypto
- library.
- </tp:docstring>
- </tp:enumvalue>
- </tp:enum>
-
- <property name="State" type="u" access="read"
- tp:type="TLS_Certificate_State"
- tp:name-for-bindings="State">
- <tp:docstring>
- The current state of this certificate.
- State change notifications happen by means of the
- <tp:member-ref>Accepted</tp:member-ref> and
- <tp:member-ref>Rejected</tp:member-ref> signals.
- </tp:docstring>
- </property>
-
- <property name="Rejections" type="a(usa{sv})" access="read"
- tp:type="TLS_Certificate_Rejection[]" tp:name-for-bindings="Rejections">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>If the <tp:member-ref>State</tp:member-ref> is Rejected,
- an array of <tp:type>TLS_Certificate_Rejection</tp:type>
- structures containing the reason why the certificate is rejected.</p>
- <p>If the <tp:member-ref>State</tp:member-ref> is not Rejected,
- this property is not meaningful, and SHOULD be set to an empty
- array.</p>
- <p>The first rejection in the list MAY be assumed to be
- the most important; if the array contains more than one
- element, the CM MAY either use the values after the first,
- or ignore them.</p>
- </tp:docstring>
- </property>
-
- <property name="CertificateType" type="s" access="read"
- tp:name-for-bindings="Certificate_Type">
- <tp:docstring>
- The type of this TLS certificate (e.g. 'x509' or 'pgp').
- <p>This property is immutable</p>
- </tp:docstring>
- </property>
-
- <property name="CertificateChainData" type="aay" access="read"
- tp:type="Certificate_Data[]" tp:name-for-bindings="Certificate_Chain_Data">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>One or more TLS certificates forming a trust chain, each encoded as
- specified by <tp:type>Certificate_Data</tp:type>.</p>
- <p>The first certificate in the chain MUST be the server certificate,
- followed by the issuer's certificate, followed by the issuer's issuer
- and so on.</p>
- </tp:docstring>
- </property>
-
- <signal name="Accepted"
- tp:name-for-bindings="Accepted">
- <tp:docstring>
- The <tp:member-ref>State</tp:member-ref> of this certificate has changed to Accepted.
- </tp:docstring>
- </signal>
-
- <signal name="Rejected"
- tp:name-for-bindings="Rejected">
- <tp:docstring>
- The <tp:member-ref>State</tp:member-ref> of this certificate has changed to Rejected.
- </tp:docstring>
- <arg name="Rejections" type="a(usa{sv})" tp:type="TLS_Certificate_Rejection[]">
- <tp:docstring>
- The new value of the <tp:member-ref>Rejections</tp:member-ref> property.
- </tp:docstring>
- </arg>
- </signal>
-
- <method name="Accept" tp:name-for-bindings="Accept">
- <tp:docstring>
- Accepts this certificate, i.e. marks it as verified.
- </tp:docstring>
- </method>
-
- <method name="Reject" tp:name-for-bindings="Reject">
- <tp:docstring>
- Rejects this certificate.
- </tp:docstring>
- <arg direction="in" type="a(usa{sv})" name="Rejections"
- tp:type="TLS_Certificate_Rejection[]">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>The new value of the <tp:member-ref>Rejections</tp:member-ref> property.</p>
- <p>This MUST NOT be an empty array.</p>
- </tp:docstring>
- </arg>
- <tp:possible-errors>
- <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
- <tp:docstring>
- Raised when the method is called on an object whose <tp:member-ref>State</tp:member-ref>
- is not <code>Pending</code>, or when the provided rejection list is empty.
- </tp:docstring>
- </tp:error>
- </tp:possible-errors>
- </method>
-
- </interface>
-</node>
-<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/extensions/Debug.xml b/extensions/Debug.xml
deleted file mode 100644
index 70a82e903..000000000
--- a/extensions/Debug.xml
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" ?>
-<node name="/Debug"
- xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
- <tp:copyright>Copyright (C) 2009 Collabora Ltd.</tp:copyright>
- <tp:license xmlns="http://www.w3.org/1999/xhtml">
- <p>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.</p>
-
-<p>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.</p>
-
-<p>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 Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
- </tp:license>
- <interface name="org.freedesktop.Telepathy.Debug">
- <tp:added version="0.17.27">(as stable API)</tp:added>
-
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>An interface for providing debug messages.</p>
-
- <p>This interface is primarily provided by one object per
- service, at the path <tt>/org/freedesktop/Telepathy/debug</tt>.</p>
- </tp:docstring>
-
- <property name="Enabled" type="b" access="readwrite"
- tp:name-for-bindings="Enabled">
- <tp:docstring>
- TRUE if the <tp:member-ref>NewDebugMessage</tp:member-ref> signal
- should be emitted when a new debug message is generated.
- </tp:docstring>
- </property>
-
- <method name="GetMessages" tp:name-for-bindings="Get_Messages">
- <tp:docstring>
- Retrieve buffered debug messages. An implementation could have a
- limit on how many message it keeps and so the array returned from
- this method should not be assumed to be all of the messages in
- the lifetime of the service.
- </tp:docstring>
-
- <arg direction="out" name="Messages" type="a(dsus)"
- tp:type="Debug_Message[]">
- <tp:docstring>
- A list of debug messages.
- </tp:docstring>
- </arg>
- </method>
-
- <signal name="NewDebugMessage" tp:name-for-bindings="New_Debug_Message">
- <tp:docstring>
- Emitted when a debug messages is generated if the
- <tp:member-ref>Enabled</tp:member-ref> property is set to TRUE.
- </tp:docstring>
-
- <arg name="time" type="d">
- <tp:docstring>
- Timestamp of the debug message.
- </tp:docstring>
- </arg>
- <arg name="domain" type="s">
- <tp:docstring>
- Domain of the debug message, as described in the Debug_Message struct.
- </tp:docstring>
- </arg>
- <arg name="level" type="u" tp:type="Debug_Level">
- <tp:docstring>
- Level of the debug message.
- </tp:docstring>
- </arg>
- <arg name="message" type="s">
- <tp:docstring>
- The text of the debug message.
- </tp:docstring>
- </arg>
- </signal>
-
- <tp:enum name="Debug_Level" type="u">
- <tp:enumvalue suffix="Error" value="0">
- <tp:docstring>
- Log level for errors. Error messages are always fatal, resulting
- in the service terminating after something completely
- unexpected occurred.
- </tp:docstring>
- </tp:enumvalue>
- <tp:enumvalue suffix="Critical" value="1">
- <tp:docstring>
- Log level for critical messages. Critical messages are messages
- that the service might predict and it is up to the service itself
- to decide whether to terminate following a critical message.
- </tp:docstring>
- </tp:enumvalue>
- <tp:enumvalue suffix="Warning" value="2">
- <tp:docstring>
- Log level for warnings.
- </tp:docstring>
- </tp:enumvalue>
- <tp:enumvalue suffix="Message" value="3">
- <tp:docstring>
- Log level for messages.
- </tp:docstring>
- </tp:enumvalue>
- <tp:enumvalue suffix="Info" value="4">
- <tp:docstring>
- Log level for information messages.
- </tp:docstring>
- </tp:enumvalue>
- <tp:enumvalue suffix="Debug" value="5">
- <tp:docstring>
- Log level for debug messages.
- </tp:docstring>
- </tp:enumvalue>
- </tp:enum>
-
- <tp:struct name="Debug_Message" array-name="Debug_Message_List">
- <tp:docstring>
- A struct representing a debug message, as returned by
- <tp:member-ref>GetMessages</tp:member-ref>.
- </tp:docstring>
-
- <tp:member type="d" name="Timestamp">
- <tp:docstring>
- Timestamp of the debug message. This is a double to allow
- more accuracy in the time the message was logged.
- </tp:docstring>
- </tp:member>
-
- <tp:member type="s" name="Domain">
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>Domain of the debug message. This is used to identify
- the source of debug messages. For example, debug messages
- from a connection manager could have this Domain struct
- member be the name of the connection manager, and logs
- from any helper library could have the name of the helper
- library.</p>
-
- <p>The domain could also contain a category as to where
- the log message originated separated by a forward-slash.
- For example, if a debug message was output in a connection
- manager called "dummy", in the file-transfer code, this
- Domain struct member might be <tt>dummy/file-transfer</tt>.</p>
- </tp:docstring>
- </tp:member>
-
- <tp:member type="u" tp:type="Debug_Level" name="Level">
- <tp:docstring>
- Level of the debug message. This states the severity of the
- debug message.
- </tp:docstring>
- </tp:member>
-
- <tp:member type="s" name="Message">
- <tp:docstring>
- The text of the debug message.
- </tp:docstring>
- </tp:member>
- </tp:struct>
-
- </interface>
-</node>
-<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/extensions/Makefile.am b/extensions/Makefile.am
index 1227b3f03..2d8b86485 100644
--- a/extensions/Makefile.am
+++ b/extensions/Makefile.am
@@ -12,10 +12,8 @@ EXTRA_DIST = \
all.xml \
generic-types.xml \
misc.xml \
- Debug.xml \
Logger.xml \
Connection_Interface_Renaming.xml \
- Authentication_TLS_Certificate.xml \
Channel_Interface_Credentials_Storage.xml \
Channel_Type_Server_TLS_Connection.xml \
Chat_Manager.xml \
diff --git a/extensions/misc.xml b/extensions/misc.xml
index c3f06e54f..9d07e6129 100644
--- a/extensions/misc.xml
+++ b/extensions/misc.xml
@@ -4,11 +4,9 @@
<tp:title>Misc extensions for Empathy</tp:title>
-<xi:include href="Debug.xml" />
<xi:include href="Logger.xml" />
<xi:include href="Chat_Manager.xml" />
<xi:include href="Connection_Interface_Renaming.xml" />
-<xi:include href="Authentication_TLS_Certificate.xml" />
<xi:include href="Channel_Interface_Credentials_Storage.xml" />
<xi:include href="Channel_Type_Server_TLS_Connection.xml" />
diff --git a/goa-mc-plugin/mcp-account-manager-goa.c b/goa-mc-plugin/mcp-account-manager-goa.c
index aa7f7fe78..2f6e53b86 100644
--- a/goa-mc-plugin/mcp-account-manager-goa.c
+++ b/goa-mc-plugin/mcp-account-manager-goa.c
@@ -356,10 +356,10 @@ static void
get_enabled (const McpAccountStorage *self,
const McpAccountManager *am,
const gchar *acc,
- GoaObject *object)
+ GoaAccount *account)
{
mcp_account_manager_set_value (am, acc, "Enabled",
- goa_object_peek_chat (object) != NULL ? "true" : "false");
+ goa_account_get_chat_disabled (account) == FALSE ? "true" : "false");
}
@@ -419,11 +419,11 @@ mcp_account_manager_goa_get (const McpAccountStorage *self,
g_strfreev (keys);
/* Enabled */
- get_enabled (self, am, acc, object);
+ get_enabled (self, am, acc, account);
}
else if (!tp_strdiff (key, "Enabled"))
{
- get_enabled (self, am, acc, object);
+ get_enabled (self, am, acc, account);
}
else
{
@@ -468,18 +468,33 @@ mcp_account_manager_goa_set (const McpAccountStorage *self,
if (!account_is_in_goa (self, account))
return FALSE;
- /* No need to save Enabled, it's up to the GOA configuration if the account
- * is configured or not. */
+ DEBUG ("%s: (%s, %s, %s)", G_STRFUNC, account, key, val);
+
if (!tp_strdiff (key, "Enabled"))
- return TRUE;
+ {
+ GoaObject *object;
+ GoaAccount *acc;
- DEBUG ("%s: (%s, %s, %s)", G_STRFUNC, account, key, val);
+ object = g_hash_table_lookup (priv->accounts, account);
+
+ if (object == NULL)
+ return FALSE;
+
+ acc = goa_object_peek_account (object);
+
+ if (acc == NULL)
+ return FALSE;
+
+ goa_account_set_chat_disabled (acc, tp_strdiff (val, "true"));
+ goto out;
+ }
if (val != NULL)
g_key_file_set_value (priv->store, account, key, val);
else
g_key_file_remove_key (priv->store, account, key, NULL);
+ out:
/* Pretend we save everything so MC won't save this in accounts.cfg */
return TRUE;
}
@@ -562,8 +577,7 @@ mcp_account_manager_goa_get_restrictions (const McpAccountStorage *self,
const gchar *account)
{
return TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_PARAMETERS |
- TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_SERVICE |
- TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_ENABLED;
+ TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_SERVICE;
}
diff --git a/libempathy-gtk/empathy-account-widget-irc.c b/libempathy-gtk/empathy-account-widget-irc.c
index d7282b198..a4343e161 100644
--- a/libempathy-gtk/empathy-account-widget-irc.c
+++ b/libempathy-gtk/empathy-account-widget-irc.c
@@ -139,7 +139,8 @@ entry_password_changed_cb (GtkEntry *entry,
EmpathyIrcNetworkChooser *
empathy_account_widget_irc_build (EmpathyAccountWidget *self,
const char *filename,
- GtkWidget **table_common_settings)
+ GtkWidget **table_common_settings,
+ GtkWidget **box)
{
EmpathyAccountWidgetIrc *settings;
EmpathyAccountSettings *ac_settings;
@@ -151,7 +152,7 @@ empathy_account_widget_irc_build (EmpathyAccountWidget *self,
self->ui_details->gui = empathy_builder_get_file (filename,
"table_irc_settings", table_common_settings,
- "vbox_irc", &self->ui_details->widget,
+ "vbox_irc", box,
"table_irc_settings", &settings->vbox_settings,
"entry_password", &entry_password,
NULL);
@@ -204,7 +205,8 @@ empathy_account_widget_irc_build (EmpathyAccountWidget *self,
EmpathyIrcNetworkChooser *
empathy_account_widget_irc_build_simple (EmpathyAccountWidget *self,
- const char *filename)
+ const char *filename,
+ GtkWidget **box)
{
EmpathyAccountWidgetIrc *settings;
EmpathyAccountSettings *ac_settings;
@@ -214,7 +216,7 @@ empathy_account_widget_irc_build_simple (EmpathyAccountWidget *self,
settings->self = self;
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_irc_simple", &self->ui_details->widget,
+ "vbox_irc_simple", box,
"alignment_network_simple", &alignment,
NULL);
diff --git a/libempathy-gtk/empathy-account-widget-irc.h b/libempathy-gtk/empathy-account-widget-irc.h
index cc5dfff27..bcd45b76a 100644
--- a/libempathy-gtk/empathy-account-widget-irc.h
+++ b/libempathy-gtk/empathy-account-widget-irc.h
@@ -30,11 +30,13 @@ G_BEGIN_DECLS
EmpathyIrcNetworkChooser * empathy_account_widget_irc_build (
EmpathyAccountWidget *self,
const char *filename,
- GtkWidget **table_common_settings);
+ GtkWidget **table_common_settings,
+ GtkWidget **box);
EmpathyIrcNetworkChooser * empathy_account_widget_irc_build_simple (
EmpathyAccountWidget *self,
- const char *filename);
+ const char *filename,
+ GtkWidget **box);
G_END_DECLS
diff --git a/libempathy-gtk/empathy-account-widget-irc.ui b/libempathy-gtk/empathy-account-widget-irc.ui
index 8081e2284..95f30a2f6 100644
--- a/libempathy-gtk/empathy-account-widget-irc.ui
+++ b/libempathy-gtk/empathy-account-widget-irc.ui
@@ -393,7 +393,6 @@
<object class="GtkEntry" id="entry_quit_message">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="invisible_char">•</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -420,8 +419,6 @@
<object class="GtkEntry" id="entry_fullname">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="invisible_char">â—</property>
- <property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -465,8 +462,6 @@
<object class="GtkEntry" id="entry_username">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="invisible_char">â—</property>
- <property name="invisible_char_set">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -560,7 +555,6 @@
<object class="GtkEntry" id="entry_nick_simple">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="invisible_char">•</property>
</object>
</child>
</object>
diff --git a/libempathy-gtk/empathy-account-widget-private.h b/libempathy-gtk/empathy-account-widget-private.h
index db8dc7ddf..988b09883 100644
--- a/libempathy-gtk/empathy-account-widget-private.h
+++ b/libempathy-gtk/empathy-account-widget-private.h
@@ -29,8 +29,6 @@
G_BEGIN_DECLS
struct _EmpathyAccountWidgetUIDetails {
- GtkWidget *widget;
-
GtkBuilder *gui;
char *default_focus;
diff --git a/libempathy-gtk/empathy-account-widget-sip.c b/libempathy-gtk/empathy-account-widget-sip.c
index 05be1b874..8aa4e89d1 100644
--- a/libempathy-gtk/empathy-account-widget-sip.c
+++ b/libempathy-gtk/empathy-account-widget-sip.c
@@ -108,7 +108,7 @@ checkbutton_tel_toggled (
empathy_account_widget_changed (sip_settings->self);
}
-void
+GtkWidget *
empathy_account_widget_sip_build (EmpathyAccountWidget *self,
const char *filename,
GtkWidget **grid_common_settings)
@@ -174,6 +174,8 @@ empathy_account_widget_sip_build (EmpathyAccountWidget *self,
"checkbutton_discover-binding", "discover-binding",
"spinbutton_keepalive-interval", "keepalive-interval",
"checkbutton_ignore-tls-errors", "ignore-tls-errors",
+ "entry_local-ip-address", "local-ip-address",
+ "spinbutton_local-port", "local-port",
NULL);
account_widget_sip_discover_stun_toggled_cb (
@@ -263,5 +265,5 @@ empathy_account_widget_sip_build (EmpathyAccountWidget *self,
gtk_widget_show (settings->combobox_keep_alive_mechanism);
}
- self->ui_details->widget = vbox_settings;
+ return vbox_settings;
}
diff --git a/libempathy-gtk/empathy-account-widget-sip.h b/libempathy-gtk/empathy-account-widget-sip.h
index 7673a5bfd..84e96e7b6 100644
--- a/libempathy-gtk/empathy-account-widget-sip.h
+++ b/libempathy-gtk/empathy-account-widget-sip.h
@@ -26,7 +26,7 @@
G_BEGIN_DECLS
-void empathy_account_widget_sip_build (EmpathyAccountWidget *self,
+GtkWidget * empathy_account_widget_sip_build (EmpathyAccountWidget *self,
const char *filename,
GtkWidget **grid_common_settings);
diff --git a/libempathy-gtk/empathy-account-widget-sip.ui b/libempathy-gtk/empathy-account-widget-sip.ui
index e86e58850..4104572d1 100644
--- a/libempathy-gtk/empathy-account-widget-sip.ui
+++ b/libempathy-gtk/empathy-account-widget-sip.ui
@@ -16,6 +16,11 @@
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
+ <object class="GtkAdjustment" id="adjustment4">
+ <property name="upper">65535</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
<object class="GtkVBox" id="vbox_sip_settings">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -205,6 +210,16 @@
</packing>
</child>
<child>
+ <object class="GtkEntry" id="entry_local-ip-address">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">14</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkLabel" id="label_nat_traversal">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -515,6 +530,50 @@
<property name="top_attach">5</property>
</packing>
</child>
+ <child>
+ <object class="GtkAlignment" id="alignment16">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkLabel" id="label_local-ip-address">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Local IP Address:</property>
+ <property name="mnemonic_widget">entry_local-ip-address</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">14</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_local-port">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Port:</property>
+ <property name="mnemonic_widget">spinbutton_local-port</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">14</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="spinbutton_local-port">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">adjustment4</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="top_attach">14</property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c
index 7530914fc..96e6a8868 100644
--- a/libempathy-gtk/empathy-account-widget.c
+++ b/libempathy-gtk/empathy-account-widget.c
@@ -50,7 +50,7 @@
#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
#include <libempathy/empathy-debug.h>
-G_DEFINE_TYPE (EmpathyAccountWidget, empathy_account_widget, G_TYPE_OBJECT)
+G_DEFINE_TYPE (EmpathyAccountWidget, empathy_account_widget, GTK_TYPE_BOX)
typedef enum
{
@@ -903,6 +903,8 @@ account_widget_account_enabled_cb (GObject *source_object,
empathy_connect_new_account (account, self->priv->account_manager);
}
+ g_signal_emit (self, signals[CLOSE], 0, GTK_RESPONSE_APPLY);
+
/* unref self - part of the workaround */
g_object_unref (self);
}
@@ -917,6 +919,7 @@ account_widget_applied_cb (GObject *source_object,
EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (source_object);
EmpathyAccountWidget *self = EMPATHY_ACCOUNT_WIDGET (user_data);
gboolean reconnect_required;
+ gboolean fire_close = TRUE;
empathy_account_settings_apply_finish (settings, res, &reconnect_required,
&error);
@@ -942,6 +945,9 @@ account_widget_applied_cb (GObject *source_object,
tp_account_set_enabled_async (account, TRUE,
account_widget_account_enabled_cb, self);
g_signal_emit (self, signals[ACCOUNT_CREATED], 0, account);
+
+ /* Will be fired in account_widget_account_enabled_cb */
+ fire_close = FALSE;
}
else
{
@@ -969,8 +975,11 @@ account_widget_applied_cb (GObject *source_object,
self->priv->contains_pending_changes = FALSE;
- /* announce the widget can be closed */
- g_signal_emit (self, signals[CLOSE], 0, GTK_RESPONSE_APPLY);
+ if (fire_close)
+ {
+ /* announce the widget can be closed */
+ g_signal_emit (self, signals[CLOSE], 0, GTK_RESPONSE_APPLY);
+ }
/* unref the widget - part of the workaround */
g_object_unref (self);
@@ -1049,15 +1058,15 @@ account_widget_settings_ready_cb (EmpathyAccountSettings *settings,
account_widget_setup_generic (self);
}
-static void
+static GtkWidget *
account_widget_build_generic (EmpathyAccountWidget *self,
const char *filename)
{
- GtkWidget *expander_advanced;
+ GtkWidget *expander_advanced, *box;
self->ui_details->gui = empathy_builder_get_file (filename,
"grid_common_settings", &self->priv->grid_common_settings,
- "vbox_generic_settings", &self->ui_details->widget,
+ "vbox_generic_settings", &box,
"expander_advanced_settings", &expander_advanced,
NULL);
@@ -1071,17 +1080,19 @@ account_widget_build_generic (EmpathyAccountWidget *self,
else
g_signal_connect (self->priv->settings, "notify::ready",
G_CALLBACK (account_widget_settings_ready_cb), self);
+
+ return box;
}
-static void
+static GtkWidget *
account_widget_build_salut (EmpathyAccountWidget *self,
const char *filename)
{
- GtkWidget *expander_advanced;
+ GtkWidget *expander_advanced, *box;
self->ui_details->gui = empathy_builder_get_file (filename,
"grid_common_settings", &self->priv->grid_common_settings,
- "vbox_salut_settings", &self->ui_details->widget,
+ "vbox_salut_settings", &box,
"expander_advanced_settings", &expander_advanced,
NULL);
@@ -1098,12 +1109,16 @@ account_widget_build_salut (EmpathyAccountWidget *self,
gtk_widget_hide (expander_advanced);
self->ui_details->default_focus = g_strdup ("entry_first_name");
+
+ return box;
}
-static void
+static GtkWidget *
account_widget_build_irc (EmpathyAccountWidget *self,
const char *filename)
{
+ GtkWidget *box;
+
empathy_account_settings_set_regex (self->priv->settings, "account",
ACCOUNT_REGEX_IRC);
empathy_account_settings_set_regex (self->priv->settings, "username",
@@ -1112,20 +1127,24 @@ account_widget_build_irc (EmpathyAccountWidget *self,
if (self->priv->simple)
{
self->priv->irc_network_chooser = empathy_account_widget_irc_build_simple
- (self, filename);
+ (self, filename, &box);
}
else
{
self->priv->irc_network_chooser = empathy_account_widget_irc_build (self,
- filename, &self->priv->grid_common_settings);
+ filename, &self->priv->grid_common_settings, &box);
}
+
+ return box;
}
-static void
+static GtkWidget *
account_widget_build_sip (EmpathyAccountWidget *self,
const char *filename)
{
- empathy_account_widget_sip_build (self, filename,
+ GtkWidget *box;
+
+ box = empathy_account_widget_sip_build (self, filename,
&self->priv->grid_common_settings);
if (self->priv->simple)
@@ -1139,19 +1158,23 @@ account_widget_build_sip (EmpathyAccountWidget *self,
self->priv->remember_password_widget = GTK_WIDGET (
gtk_builder_get_object (self->ui_details->gui, "remember_password"));
}
+
+ return box;
}
-static void
+static GtkWidget *
account_widget_build_msn (EmpathyAccountWidget *self,
const char *filename)
{
+ GtkWidget *box;
+
empathy_account_settings_set_regex (self->priv->settings, "account",
ACCOUNT_REGEX_MSN);
if (self->priv->simple)
{
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_msn_simple", &self->ui_details->widget,
+ "vbox_msn_simple", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1169,7 +1192,7 @@ account_widget_build_msn (EmpathyAccountWidget *self,
{
self->ui_details->gui = empathy_builder_get_file (filename,
"grid_common_msn_settings", &self->priv->grid_common_settings,
- "vbox_msn_settings", &self->ui_details->widget,
+ "vbox_msn_settings", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1184,6 +1207,8 @@ account_widget_build_msn (EmpathyAccountWidget *self,
self->priv->remember_password_widget = GTK_WIDGET (
gtk_builder_get_object (self->ui_details->gui, "remember_password"));
}
+
+ return box;
}
static void
@@ -1277,7 +1302,7 @@ account_widget_get_service (EmpathyAccountWidget *self)
return NO_SERVICE;
}
-static void
+static GtkWidget *
account_widget_build_jabber (EmpathyAccountWidget *self,
const char *filename)
{
@@ -1289,6 +1314,7 @@ account_widget_build_jabber (EmpathyAccountWidget *self,
GtkWidget *label_example;
GtkWidget *expander_advanced;
GtkWidget *entry_id;
+ GtkWidget *box;
Service service;
service = account_widget_get_service (self);
@@ -1300,7 +1326,7 @@ account_widget_build_jabber (EmpathyAccountWidget *self,
{
/* Simple widget for XMPP */
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_jabber_simple", &self->ui_details->widget,
+ "vbox_jabber_simple", &box,
"label_id_simple", &label_id,
"label_id_create", &label_id_create,
"label_password_simple", &label_password,
@@ -1331,7 +1357,7 @@ account_widget_build_jabber (EmpathyAccountWidget *self,
{
/* Simple widget for Google Talk */
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_gtalk_simple", &self->ui_details->widget,
+ "vbox_gtalk_simple", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1349,7 +1375,7 @@ account_widget_build_jabber (EmpathyAccountWidget *self,
{
/* Simple widget for Facebook */
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_fb_simple", &self->ui_details->widget,
+ "vbox_fb_simple", &box,
"entry_id_fb_simple", &entry_id,
NULL);
@@ -1372,7 +1398,7 @@ account_widget_build_jabber (EmpathyAccountWidget *self,
/* Full widget for XMPP, Google Talk and Facebook*/
self->ui_details->gui = empathy_builder_get_file (filename,
"grid_common_settings", &self->priv->grid_common_settings,
- "vbox_jabber_settings", &self->ui_details->widget,
+ "vbox_jabber_settings", &box,
"spinbutton_port", &spinbutton_port,
"checkbutton_ssl", &checkbutton_ssl,
"label_username_f_example", &label_example_fb,
@@ -1434,13 +1460,16 @@ account_widget_build_jabber (EmpathyAccountWidget *self,
if (!info.show_advanced)
gtk_widget_hide (expander_advanced);
}
+
+ return box;
}
-static void
+static GtkWidget *
account_widget_build_icq (EmpathyAccountWidget *self,
const char *filename)
{
GtkWidget *spinbutton_port;
+ GtkWidget *box;
empathy_account_settings_set_regex (self->priv->settings, "account",
ACCOUNT_REGEX_ICQ);
@@ -1448,7 +1477,7 @@ account_widget_build_icq (EmpathyAccountWidget *self,
if (self->priv->simple)
{
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_icq_simple", &self->ui_details->widget,
+ "vbox_icq_simple", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1466,7 +1495,7 @@ account_widget_build_icq (EmpathyAccountWidget *self,
{
self->ui_details->gui = empathy_builder_get_file (filename,
"grid_common_settings", &self->priv->grid_common_settings,
- "vbox_icq_settings", &self->ui_details->widget,
+ "vbox_icq_settings", &box,
"spinbutton_port", &spinbutton_port,
NULL);
@@ -1483,18 +1512,20 @@ account_widget_build_icq (EmpathyAccountWidget *self,
self->priv->remember_password_widget = GTK_WIDGET (
gtk_builder_get_object (self->ui_details->gui, "remember_password"));
}
+
+ return box;
}
-static void
+static GtkWidget *
account_widget_build_aim (EmpathyAccountWidget *self,
const char *filename)
{
- GtkWidget *spinbutton_port;
+ GtkWidget *spinbutton_port, *box;
if (self->priv->simple)
{
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_aim_simple", &self->ui_details->widget,
+ "vbox_aim_simple", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1512,7 +1543,7 @@ account_widget_build_aim (EmpathyAccountWidget *self,
{
self->ui_details->gui = empathy_builder_get_file (filename,
"grid_common_settings", &self->priv->grid_common_settings,
- "vbox_aim_settings", &self->ui_details->widget,
+ "vbox_aim_settings", &box,
"spinbutton_port", &spinbutton_port,
NULL);
@@ -1528,19 +1559,23 @@ account_widget_build_aim (EmpathyAccountWidget *self,
self->priv->remember_password_widget = GTK_WIDGET (
gtk_builder_get_object (self->ui_details->gui, "remember_password"));
}
+
+ return box;
}
-static void
+static GtkWidget *
account_widget_build_yahoo (EmpathyAccountWidget *self,
const char *filename)
{
+ GtkWidget *box;
+
empathy_account_settings_set_regex (self->priv->settings, "account",
ACCOUNT_REGEX_YAHOO);
if (self->priv->simple)
{
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_yahoo_simple", &self->ui_details->widget,
+ "vbox_yahoo_simple", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1558,7 +1593,7 @@ account_widget_build_yahoo (EmpathyAccountWidget *self,
{
self->ui_details->gui = empathy_builder_get_file (filename,
"grid_common_settings", &self->priv->grid_common_settings,
- "vbox_yahoo_settings", &self->ui_details->widget,
+ "vbox_yahoo_settings", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1575,16 +1610,20 @@ account_widget_build_yahoo (EmpathyAccountWidget *self,
self->priv->remember_password_widget = GTK_WIDGET (
gtk_builder_get_object (self->ui_details->gui, "remember_password"));
}
+
+ return box;
}
-static void
+static GtkWidget *
account_widget_build_groupwise (EmpathyAccountWidget *self,
const char *filename)
{
+ GtkWidget *box;
+
if (self->priv->simple)
{
self->ui_details->gui = empathy_builder_get_file (filename,
- "vbox_groupwise_simple", &self->ui_details->widget,
+ "vbox_groupwise_simple", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1602,7 +1641,7 @@ account_widget_build_groupwise (EmpathyAccountWidget *self,
{
self->ui_details->gui = empathy_builder_get_file (filename,
"grid_common_groupwise_settings", &self->priv->grid_common_settings,
- "vbox_groupwise_settings", &self->ui_details->widget,
+ "vbox_groupwise_settings", &box,
NULL);
empathy_account_widget_handle_params (self,
@@ -1617,16 +1656,8 @@ account_widget_build_groupwise (EmpathyAccountWidget *self,
self->priv->remember_password_widget = GTK_WIDGET (
gtk_builder_get_object (self->ui_details->gui, "remember_password"));
}
-}
-
-static void
-account_widget_destroy_cb (GtkWidget *widget,
- EmpathyAccountWidget *self)
-{
- /* set the destroyed flag - workaround */
- self->priv->destroyed = TRUE;
- g_object_unref (self);
+ return box;
}
void
@@ -1782,15 +1813,12 @@ out:
{ #cm, #proto, "empathy-account-widget-"#proto".ui", \
account_widget_build_##proto }
-#ifndef HAVE_MEEGO
-/* Meego doesn't support registration */
static void
add_register_buttons (EmpathyAccountWidget *self,
TpAccount *account)
{
const TpConnectionManagerProtocol *protocol;
GtkWidget *radiobutton_register;
- GtkWidget *vbox = self->ui_details->widget;
if (!self->priv->creating_account)
return;
@@ -1815,15 +1843,14 @@ add_register_buttons (EmpathyAccountWidget *self,
GTK_RADIO_BUTTON (self->priv->radiobutton_reuse)),
_("Create a new account on the server"));
- gtk_box_pack_start (GTK_BOX (vbox), self->priv->radiobutton_reuse, FALSE,
+ gtk_box_pack_start (GTK_BOX (self), self->priv->radiobutton_reuse, FALSE,
FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), radiobutton_register, FALSE, FALSE, 0);
- gtk_box_reorder_child (GTK_BOX (vbox), self->priv->radiobutton_reuse, 0);
- gtk_box_reorder_child (GTK_BOX (vbox), radiobutton_register, 1);
+ gtk_box_pack_start (GTK_BOX (self), radiobutton_register, FALSE, FALSE, 0);
+ gtk_box_reorder_child (GTK_BOX (self), self->priv->radiobutton_reuse, 0);
+ gtk_box_reorder_child (GTK_BOX (self), radiobutton_register, 1);
gtk_widget_show (self->priv->radiobutton_reuse);
gtk_widget_show (radiobutton_register);
}
-#endif /* HAVE_MEEGO */
static void
remember_password_toggled_cb (GtkToggleButton *button,
@@ -1876,7 +1903,7 @@ do_constructed (GObject *obj)
const gchar *cm_name;
const gchar *protocol;
const char *file;
- void (*func)(EmpathyAccountWidget *self, const gchar *filename);
+ GtkWidget * (*func)(EmpathyAccountWidget *self, const gchar *filename);
} widgets [] = {
{ "salut", "local-xmpp", "empathy-account-widget-local-xmpp.ui",
account_widget_build_salut },
@@ -1890,6 +1917,7 @@ do_constructed (GObject *obj)
WIDGET (sofiasip, sip),
};
const gchar *protocol, *cm_name;
+ GtkWidget *box;
account = empathy_account_settings_get_account (self->priv->settings);
@@ -1905,7 +1933,7 @@ do_constructed (GObject *obj)
filename = empathy_file_lookup (widgets[i].file,
"libempathy-gtk");
- widgets[i].func (self, filename);
+ box = widgets[i].func (self, filename);
g_free (filename);
break;
@@ -1916,10 +1944,12 @@ do_constructed (GObject *obj)
{
gchar *filename = empathy_file_lookup (
"empathy-account-widget-generic.ui", "libempathy-gtk");
- account_widget_build_generic (self, filename);
+ box = account_widget_build_generic (self, filename);
g_free (filename);
}
+ gtk_container_add (GTK_CONTAINER (self), box);
+
/* handle default focus */
if (self->ui_details->default_focus != NULL)
{
@@ -1997,7 +2027,7 @@ do_constructed (GObject *obj)
gtk_box_pack_end (GTK_BOX (self->priv->hbox_buttons),
self->priv->cancel_button, TRUE, TRUE, 3);
- gtk_box_pack_end (GTK_BOX (self->ui_details->widget), self->priv->hbox_buttons, FALSE,
+ gtk_box_pack_end (GTK_BOX (self), self->priv->hbox_buttons, FALSE,
FALSE, 3);
g_signal_connect (self->priv->cancel_button, "clicked",
@@ -2017,20 +2047,9 @@ do_constructed (GObject *obj)
else
account_widget_set_control_buttons_sensitivity (self, FALSE);
-#ifndef HAVE_MEEGO
add_register_buttons (self, account);
-#endif /* HAVE_MEEGO */
-
- /* hook up to widget destruction to unref ourselves */
- g_signal_connect (self->ui_details->widget, "destroy",
- G_CALLBACK (account_widget_destroy_cb), self);
- if (self->ui_details->gui != NULL)
- {
- empathy_builder_unref_and_keep_widget (self->ui_details->gui,
- self->ui_details->widget);
- self->ui_details->gui = NULL;
- }
+ g_clear_object (&self->ui_details->gui);
display_name = empathy_account_settings_get_display_name (
self->priv->settings);
@@ -2185,28 +2204,19 @@ empathy_account_widget_handle_params (EmpathyAccountWidget *self,
va_end (args);
}
-GtkWidget *
-empathy_account_widget_get_widget (EmpathyAccountWidget *widget)
-{
- return widget->ui_details->widget;
-}
-
EmpathyAccountWidget *
empathy_account_widget_new_for_protocol (EmpathyAccountSettings *settings,
gboolean simple)
{
- EmpathyAccountWidget *self;
-
g_return_val_if_fail (EMPATHY_IS_ACCOUNT_SETTINGS (settings), NULL);
- self = g_object_new
- (EMPATHY_TYPE_ACCOUNT_WIDGET,
- "settings", settings, "simple", simple,
+ return g_object_new (EMPATHY_TYPE_ACCOUNT_WIDGET,
+ "orientation", GTK_ORIENTATION_VERTICAL,
+ "settings", settings,
+ "simple", simple,
"creating-account",
- empathy_account_settings_get_account (settings) == NULL,
+ empathy_account_settings_get_account (settings) == NULL,
NULL);
-
- return self;
}
gchar *
diff --git a/libempathy-gtk/empathy-account-widget.h b/libempathy-gtk/empathy-account-widget.h
index 5279d75f2..acc8a051a 100644
--- a/libempathy-gtk/empathy-account-widget.h
+++ b/libempathy-gtk/empathy-account-widget.h
@@ -46,7 +46,7 @@ typedef struct _EmpathyAccountWidgetPriv EmpathyAccountWidgetPriv;
typedef struct _EmpathyAccountWidgetUIDetails EmpathyAccountWidgetUIDetails;
typedef struct {
- GObject parent;
+ GtkBox parent;
EmpathyAccountWidgetUIDetails *ui_details;
@@ -54,13 +54,11 @@ typedef struct {
} EmpathyAccountWidget;
typedef struct {
- GObjectClass parent_class;
+ GtkBoxClass parent_class;
} EmpathyAccountWidgetClass;
GType empathy_account_widget_get_type (void);
-GtkWidget *empathy_account_widget_get_widget (EmpathyAccountWidget *widget);
-
EmpathyAccountWidget * empathy_account_widget_new_for_protocol (
EmpathyAccountSettings *settings,
gboolean simple);
diff --git a/libempathy-gtk/empathy-bad-password-dialog.c b/libempathy-gtk/empathy-bad-password-dialog.c
index 2209ff064..78b8b879e 100644
--- a/libempathy-gtk/empathy-bad-password-dialog.c
+++ b/libempathy-gtk/empathy-bad-password-dialog.c
@@ -127,7 +127,7 @@ empathy_bad_password_dialog_constructed (GObject *object)
G_OBJECT_CLASS (empathy_bad_password_dialog_parent_class)->constructed (
object);
- text = g_strdup_printf (_("Authentification failed for account <b>%s</b>"),
+ text = g_strdup_printf (_("Authentication failed for account <b>%s</b>"),
tp_account_get_display_name (base->account));
gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (self), text);
g_free (text);
diff --git a/libempathy-gtk/empathy-call-utils.c b/libempathy-gtk/empathy-call-utils.c
index 545ec7ce8..77fdb565a 100644
--- a/libempathy-gtk/empathy-call-utils.c
+++ b/libempathy-gtk/empathy-call-utils.c
@@ -95,71 +95,19 @@ empathy_call_create_call_request (const gchar *contact,
NULL);
}
-GHashTable *
-empathy_call_create_streamed_media_request (const gchar *contact,
- gboolean initial_audio,
- gboolean initial_video)
-{
- return tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING,
- contact,
- TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_AUDIO, G_TYPE_BOOLEAN,
- initial_audio,
- TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_VIDEO, G_TYPE_BOOLEAN,
- initial_video,
- NULL);
-}
-
-static void
-create_streamed_media_channel_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tp_account_channel_request_create_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source),
- result,
- &error))
- {
- DEBUG ("Failed to create StreamedMedia channel: %s", error->message);
- show_call_error (error);
- g_error_free (error);
- }
-}
-
static void
create_call_channel_cb (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
- TpAccountChannelRequest *streamed_media_req = user_data;
GError *error = NULL;
if (tp_account_channel_request_create_channel_finish (
TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error))
- {
- g_clear_object (&streamed_media_req);
- return;
- }
+ return;
DEBUG ("Failed to create Call channel: %s", error->message);
- if (streamed_media_req != NULL)
- {
- DEBUG ("Let's try with an StreamedMedia channel");
- g_error_free (error);
- tp_account_channel_request_create_channel_async (streamed_media_req,
- EMPATHY_AV_BUS_NAME, NULL,
- create_streamed_media_channel_cb,
- NULL);
- return;
- }
-
show_call_error (error);
}
@@ -172,10 +120,7 @@ call_new_with_streams (const gchar *contact,
gint64 timestamp)
{
GHashTable *call_request;
- TpAccountChannelRequest *call_req, *streamed_media_req = NULL;
-#ifdef HAVE_EMPATHY_AV
- GHashTable *streamed_media_request;
-#endif
+ TpAccountChannelRequest *call_req;
/* Call */
call_request = empathy_call_create_call_request (contact,
@@ -186,20 +131,8 @@ call_new_with_streams (const gchar *contact,
g_hash_table_unref (call_request);
-#ifdef HAVE_EMPATHY_AV
- /* StreamedMedia */
- streamed_media_request = empathy_call_create_streamed_media_request (
- contact, initial_audio, initial_video);
-
- streamed_media_req = tp_account_channel_request_new (account,
- streamed_media_request,
- timestamp);
-
- g_hash_table_unref (streamed_media_request);
-#endif
-
tp_account_channel_request_create_channel_async (call_req,
- EMPATHY_CALL_BUS_NAME, NULL, create_call_channel_cb, streamed_media_req);
+ EMPATHY_CALL_BUS_NAME, NULL, create_call_channel_cb, NULL);
g_object_unref (call_req);
}
diff --git a/libempathy-gtk/empathy-call-utils.h b/libempathy-gtk/empathy-call-utils.h
index 99e4ecf91..6d78908b8 100644
--- a/libempathy-gtk/empathy-call-utils.h
+++ b/libempathy-gtk/empathy-call-utils.h
@@ -36,10 +36,6 @@ GHashTable * empathy_call_create_call_request (const gchar *contact,
gboolean initial_audio,
gboolean initial_video);
-GHashTable * empathy_call_create_streamed_media_request (const gchar *contact,
- gboolean initial_audio,
- gboolean initial_video);
-
void empathy_call_set_stream_properties (GstElement *element,
gboolean echo_cancellation);
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index e6019f821..18b08d480 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -39,12 +39,12 @@
#include <telepathy-glib/account-manager.h>
#include <telepathy-glib/util.h>
#include <telepathy-logger/telepathy-logger.h>
-#include <libempathy/empathy-contact-list.h>
#include <libempathy/empathy-gsettings.h>
#include <libempathy/empathy-keyring.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-request-util.h>
#include <libempathy/empathy-chatroom-manager.h>
+#include <libempathy/empathy-client-factory.h>
#include "empathy-chat.h"
#include "empathy-spell.h"
@@ -953,65 +953,32 @@ chat_command_say (EmpathyChat *chat,
}
static void
-whois_got_contact_cb (TpConnection *connection,
- guint n_contacts,
- TpContact * const *contacts,
- const gchar * const *requested_ids,
- GHashTable *failed_id_errors,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyChat *chat = EMPATHY_CHAT (weak_object);
-
- g_return_if_fail (n_contacts <= 1);
-
- if (n_contacts == 0) {
- GHashTableIter iter;
- gpointer key = NULL, value = NULL;
- gchar *id;
- GError *id_error;
-
- /* tp-glib guarantees that the contacts you requested will be
- * in failed_id_errors regardless of whether the individual
- * contact was invalid or the whole operation failed.
- */
- g_hash_table_iter_init (&iter, failed_id_errors);
- g_hash_table_iter_next (&iter, &key, &value);
- id = key;
- id_error = value;
-
- DEBUG ("Error getting TpContact for '%s': %s %u %s",
- id, g_quark_to_string (id_error->domain),
- id_error->code, id_error->message);
-
- if (error == NULL) {
- /* The specific ID failed. */
- gchar *event = g_strdup_printf (
- _("“%s†is not a valid contact ID"), id);
- empathy_chat_view_append_event (chat->view, event);
- g_free (event);
- }
- /* Otherwise we're disconnected or something; so the window
- * will already say ‘Disconnected’, so let's not show anything.
- */
- } else {
- EmpathyContact *empathy_contact;
- GtkWidget *window;
+whois_got_contact_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ EmpathyChat *chat = user_data;
+ EmpathyContact *contact;
+ GtkWidget *window;
- g_return_if_fail (contacts[0] != NULL);
- empathy_contact = empathy_contact_dup_from_tp_contact (
- contacts[0]);
+ contact = empathy_client_factory_dup_contact_by_id_finish (
+ EMPATHY_CLIENT_FACTORY (source), result, NULL);
- window = gtk_widget_get_toplevel (GTK_WIDGET (chat));
- /* If we're alive and this command is running, we'd better be
- * in a window. */
- g_return_if_fail (window != NULL);
- g_return_if_fail (gtk_widget_is_toplevel (window));
- empathy_contact_information_dialog_show (empathy_contact,
- GTK_WINDOW (window));
- g_object_unref (empathy_contact);
+ if (contact == NULL) {
+ empathy_chat_view_append_event (chat->view, _("Invalid contact ID"));
+ goto out;
}
+
+ window = gtk_widget_get_toplevel (GTK_WIDGET (chat));
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (gtk_widget_is_toplevel (window));
+ empathy_contact_information_dialog_show (contact,
+ GTK_WINDOW (window));
+
+ g_object_unref (contact);
+
+out:
+ g_object_unref (chat);
}
static void
@@ -1020,14 +987,17 @@ chat_command_whois (EmpathyChat *chat,
{
EmpathyChatPriv *priv = GET_PRIV (chat);
TpConnection *conn;
+ EmpathyClientFactory *factory;
conn = tp_channel_borrow_connection ((TpChannel *) priv->tp_chat);
- tp_connection_get_contacts_by_id (conn,
- /* Element 0 of 'strv' is "whois"; element 1 is the contact ID
- * entered by the user (including spaces, if any). */
- 1, (const gchar * const *) strv + 1,
- 0, NULL,
- whois_got_contact_cb, NULL, NULL, G_OBJECT (chat));
+ factory = empathy_client_factory_dup ();
+
+ /* Element 0 of 'strv' is "whois"; element 1 is the contact ID
+ * entered by the user (including spaces, if any). */
+ empathy_client_factory_dup_contact_by_id_async (factory, conn, strv[1],
+ whois_got_contact_cb, g_object_ref (chat));
+
+ g_object_unref (factory);
}
static void
@@ -1345,19 +1315,22 @@ chat_input_text_view_send (EmpathyChat *chat)
static void
chat_state_changed_cb (EmpathyTpChat *tp_chat,
- EmpathyContact *contact,
+ TpContact *tp_contact,
TpChannelChatState state,
EmpathyChat *chat)
{
EmpathyChatPriv *priv;
GList *l;
gboolean was_composing;
+ EmpathyContact *contact;
priv = GET_PRIV (chat);
+ contact = empathy_contact_dup_from_tp_contact (tp_contact);
+
if (empathy_contact_is_user (contact)) {
/* We don't care about our own chat state */
- return;
+ goto out;
}
was_composing = (priv->compositors != NULL);
@@ -1402,6 +1375,9 @@ chat_state_changed_cb (EmpathyTpChat *tp_chat,
g_signal_emit (chat, signals[COMPOSING], 0,
priv->compositors != NULL);
}
+
+out:
+ g_object_unref (contact);
}
static GRegex *
@@ -1525,7 +1501,7 @@ chat_message_received (EmpathyChat *chat,
/* We received a message so the contact is no longer
* composing */
- chat_state_changed_cb (priv->tp_chat, sender,
+ chat_state_changed_cb (priv->tp_chat, empathy_contact_get_tp_contact (sender),
TP_CHANNEL_CHAT_STATE_ACTIVE,
chat);
}
@@ -2012,7 +1988,7 @@ chat_input_key_press_event_cb (GtkWidget *widget,
}
is_start_of_buffer = gtk_text_iter_is_start (&start);
- list = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (priv->tp_chat));
+ list = empathy_tp_chat_get_members (priv->tp_chat);
g_completion_add_items (priv->completion, list);
nick = gtk_text_buffer_get_text (buffer, &start, &current, FALSE);
@@ -4026,7 +4002,7 @@ empathy_chat_set_tp_chat (EmpathyChat *chat,
g_signal_connect (tp_chat, "send-error",
G_CALLBACK (chat_send_error_cb),
chat);
- g_signal_connect (tp_chat, "chat-state-changed-empathy",
+ g_signal_connect (tp_chat, "contact-chat-state-changed",
G_CALLBACK (chat_state_changed_cb),
chat);
g_signal_connect (tp_chat, "members-changed",
diff --git a/libempathy-gtk/empathy-contact-blocking-dialog.c b/libempathy-gtk/empathy-contact-blocking-dialog.c
index f22da44d7..58d574925 100644
--- a/libempathy-gtk/empathy-contact-blocking-dialog.c
+++ b/libempathy-gtk/empathy-contact-blocking-dialog.c
@@ -299,38 +299,39 @@ block_cb (GObject *source,
}
static void
-block_contact_got_contact (TpConnection *conn,
- guint n_contacts,
- TpContact * const *contacts,
- const gchar * const *requested_ids,
- GHashTable *failed_id_errors,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
+block_contact_got_contact (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- EmpathyContactBlockingDialog *self =
- EMPATHY_CONTACT_BLOCKING_DIALOG (weak_object);
- gchar *id = user_data;
+ EmpathyContactBlockingDialog *self;
+ TpConnection *conn = TP_CONNECTION (source);
+ TpWeakRef *wr = user_data;
+ TpContact *contact;
+ GError *error = NULL;
- if (error != NULL)
- goto error;
+ self = tp_weak_ref_dup_object (wr);
+ if (self == NULL)
+ goto finally;
- error = g_hash_table_lookup (failed_id_errors, id);
- if (error != NULL)
- goto error;
+ contact = tp_connection_dup_contact_by_id_finish (conn, result, &error);
+ if (contact == NULL)
+ {
+ DEBUG ("Error getting contact on %s: %s",
+ get_pretty_conn_name (conn), error->message);
- tp_contact_block_async (contacts[0], FALSE, block_cb, self);
- goto finally;
+ contact_blocking_dialog_set_error (
+ EMPATHY_CONTACT_BLOCKING_DIALOG (self), error);
-error:
- DEBUG ("Error getting contact on %s: %s",
- get_pretty_conn_name (conn), error->message);
+ g_error_free (error);
+ goto finally;
+ }
- contact_blocking_dialog_set_error (
- EMPATHY_CONTACT_BLOCKING_DIALOG (self), error);
+ tp_contact_block_async (contact, FALSE, block_cb, self);
+ g_object_unref (contact);
finally:
- g_free (id);
+ g_clear_object (&self);
+ tp_weak_ref_destroy (wr);
}
static void
@@ -339,17 +340,17 @@ contact_blocking_dialog_add_contact (GtkWidget *widget,
{
TpConnection *conn = empathy_account_chooser_get_connection (
EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser));
- const char *identifiers[2] = { NULL, };
+ const char *identifier;
- identifiers[0] = gtk_entry_get_text (
+ identifier = gtk_entry_get_text (
GTK_ENTRY (self->priv->add_contact_entry));
DEBUG ("Looking up handle for '%s' on %s",
- identifiers[0], get_pretty_conn_name (conn));
+ identifier, get_pretty_conn_name (conn));
- tp_connection_get_contacts_by_id (conn, 1, identifiers,
+ tp_connection_dup_contact_by_id_async (conn, identifier,
0, NULL, block_contact_got_contact,
- g_strdup (identifiers[0]), NULL, G_OBJECT (self));
+ tp_weak_ref_new (self, NULL, NULL));
gtk_entry_set_text (GTK_ENTRY (self->priv->add_contact_entry), "");
gtk_widget_hide (self->priv->info_bar);
diff --git a/libempathy-gtk/empathy-contact-blocking-dialog.ui b/libempathy-gtk/empathy-contact-blocking-dialog.ui
index 19c50fe92..35dd1c31d 100644
--- a/libempathy-gtk/empathy-contact-blocking-dialog.ui
+++ b/libempathy-gtk/empathy-contact-blocking-dialog.ui
@@ -118,7 +118,6 @@
<object class="GtkEntry" id="add-contact-entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="invisible_char">â—</property>
</object>
<packing>
<property name="position">0</property>
diff --git a/libempathy-gtk/empathy-contact-chooser.c b/libempathy-gtk/empathy-contact-chooser.c
index 01e4b6a83..f873bdc79 100644
--- a/libempathy-gtk/empathy-contact-chooser.c
+++ b/libempathy-gtk/empathy-contact-chooser.c
@@ -17,6 +17,7 @@
#include "empathy-contact-chooser.h"
#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-client-factory.h>
#include <libempathy-gtk/empathy-individual-store-manager.h>
#include <libempathy-gtk/empathy-individual-view.h>
@@ -207,33 +208,38 @@ contact_capabilities_changed (TpContact *contact,
}
static void
-get_contacts_cb (TpConnection *connection,
- guint n_contacts,
- TpContact * const *contacts,
- const gchar * const *requested_ids,
- GHashTable *failed_id_errors,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
+get_contacts_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- EmpathyContactChooser *self =
- (EmpathyContactChooser *) weak_object;
- AddTemporaryIndividualCtx *ctx = user_data;
+ TpWeakRef *wr = user_data;
+ AddTemporaryIndividualCtx *ctx;
+ EmpathyContactChooser *self;
+ GError *error = NULL;
FolksIndividual *individual;
TpContact *contact;
+ EmpathyContact *emp_contact;
- if (self->priv->add_temp_ctx != ctx)
- /* another request has been started */
- return;
+ self = tp_weak_ref_dup_object (wr);
+ if (self == NULL)
+ goto out;
- if (n_contacts != 1)
- return;
+ ctx = tp_weak_ref_get_user_data (wr);
- contact = contacts[0];
+ emp_contact = empathy_client_factory_dup_contact_by_id_finish (
+ EMPATHY_CLIENT_FACTORY (source), result, &error);
+ if (emp_contact == NULL)
+ goto out;
+
+ contact = empathy_contact_get_tp_contact (emp_contact);
+
+ if (self->priv->add_temp_ctx != ctx)
+ /* another request has been started */
+ goto out;
individual = empathy_create_individual_from_tp_contact (contact);
if (individual == NULL)
- return;
+ goto out;
/* tp-glib will unref the TpContact once we return from this callback
* but folks expect us to keep a reference on the TpContact.
@@ -255,6 +261,11 @@ get_contacts_cb (TpConnection *connection,
gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->view)),
NULL, NULL))
empathy_individual_view_select_first (self->priv->view);
+
+out:
+ g_clear_object (&emp_contact);
+ g_clear_object (&self);
+ tp_weak_ref_destroy (wr);
}
static void
@@ -277,18 +288,19 @@ add_temporary_individuals (EmpathyContactChooser *self,
{
TpAccount *account = l->data;
TpConnection *conn;
- TpContactFeature features[] = { TP_CONTACT_FEATURE_ALIAS,
- TP_CONTACT_FEATURE_AVATAR_DATA,
- TP_CONTACT_FEATURE_PRESENCE,
- TP_CONTACT_FEATURE_CAPABILITIES };
+ EmpathyClientFactory *factory;
conn = tp_account_get_connection (account);
if (conn == NULL)
continue;
- tp_connection_get_contacts_by_id (conn, 1, &id, G_N_ELEMENTS (features),
- features, get_contacts_cb, self->priv->add_temp_ctx, NULL,
- G_OBJECT (self));
+ factory = empathy_client_factory_dup ();
+
+ empathy_client_factory_dup_contact_by_id_async (factory, conn, id,
+ get_contacts_cb,
+ tp_weak_ref_new (self, self->priv->add_temp_ctx, NULL));
+
+ g_object_unref (factory);
}
g_list_free (accounts);
diff --git a/libempathy-gtk/empathy-contact-dialogs.c b/libempathy-gtk/empathy-contact-dialogs.c
index 00d737bda..027ba370c 100644
--- a/libempathy-gtk/empathy-contact-dialogs.c
+++ b/libempathy-gtk/empathy-contact-dialogs.c
@@ -30,7 +30,6 @@
#include <telepathy-glib/account-manager.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-utils.h>
#include "empathy-contact-dialogs.h"
diff --git a/libempathy-gtk/empathy-contact-search-dialog.c b/libempathy-gtk/empathy-contact-search-dialog.c
index e0b7c441f..82ca6cc31 100644
--- a/libempathy-gtk/empathy-contact-search-dialog.c
+++ b/libempathy-gtk/empathy-contact-search-dialog.c
@@ -28,8 +28,8 @@
#include <telepathy-glib/telepathy-glib.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-client-factory.h>
#include <libempathy-gtk/empathy-account-chooser.h>
#include <libempathy-gtk/empathy-cell-renderer-text.h>
@@ -136,21 +136,28 @@ empathy_contact_search_dialog_do_search (EmpathyContactSearchDialog *self)
}
static void
-on_get_contact_factory_get_from_id_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *object)
+on_get_contact_factory_get_from_id_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- const gchar *message = user_data;
+ gchar *message = user_data;
+ GError *error = NULL;
+ EmpathyContact *contact;
- if (error != NULL)
- {
- g_warning ("Error while getting the contact: %s", error->message);
- return;
- }
+ contact = empathy_client_factory_dup_contact_by_id_finish (
+ EMPATHY_CLIENT_FACTORY (source), result, &error);
+ if (contact == NULL)
+ {
+ g_warning ("Error while getting the contact: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ empathy_contact_add_to_contact_list (contact, message);
+ g_object_unref (contact);
- empathy_contact_add_to_contact_list (contact, message);
+out:
+ g_free (message);
}
static void
@@ -166,6 +173,7 @@ add_selected_contact (EmpathyContactSearchDialog *self)
gchar *message;
gboolean sel;
gchar *id;
+ EmpathyClientFactory *factory;
conn = empathy_account_chooser_get_connection (EMPATHY_ACCOUNT_CHOOSER (priv->chooser));
@@ -181,9 +189,12 @@ add_selected_contact (EmpathyContactSearchDialog *self)
gtk_text_buffer_get_end_iter (buffer, &end);
message = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
- empathy_tp_contact_factory_get_from_id (conn, id,
- on_get_contact_factory_get_from_id_cb,
- message, g_free, NULL);
+ factory = empathy_client_factory_dup ();
+
+ empathy_client_factory_dup_contact_by_id_async (factory, conn, id,
+ on_get_contact_factory_get_from_id_cb, message);
+
+ g_object_unref (factory);
/* Close the dialog */
gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CANCEL);
@@ -437,19 +448,25 @@ contact_search_dialog_row_activated_cb (GtkTreeView *tv,
}
static void
-on_profile_button_got_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *object)
+on_profile_button_got_contact_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- if (error != NULL)
- {
- g_warning ("Error while getting the contact: %s", error->message);
- return;
- }
+ GError *error = NULL;
+ EmpathyContact *contact;
+
+ contact = empathy_client_factory_dup_contact_by_id_finish (
+ EMPATHY_CLIENT_FACTORY (source), result, &error);
+ if (contact == NULL)
+ {
+ g_warning ("Error while getting the contact: %s", error->message);
+ g_error_free (error);
+ return;
+ }
empathy_contact_information_dialog_show (contact, NULL);
+
+ g_object_unref (contact);
}
static void
@@ -463,6 +480,7 @@ on_profile_button_clicked_cb (EmpathyCellRendererActivatable *cell,
GtkTreeModel *model;
gboolean valid;
gchar *id;
+ EmpathyClientFactory *factory;
model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->tree_view));
@@ -476,9 +494,12 @@ on_profile_button_clicked_cb (EmpathyCellRendererActivatable *cell,
DEBUG ("Requested to show profile for contact: %s", id);
- empathy_tp_contact_factory_get_from_id (conn, id,
- on_profile_button_got_contact_cb, NULL,
- NULL, NULL);
+ factory = empathy_client_factory_dup ();
+
+ empathy_client_factory_dup_contact_by_id_async (factory, conn, id,
+ on_profile_button_got_contact_cb, self);
+
+ g_object_unref (factory);
}
static void
diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c
index 5691891a2..5a3658cd0 100644
--- a/libempathy-gtk/empathy-contact-widget.c
+++ b/libempathy-gtk/empathy-contact-widget.c
@@ -36,11 +36,10 @@
#include <telepathy-glib/util.h>
#include <telepathy-glib/interfaces.h>
-#include <libempathy/empathy-tp-contact-factory.h>
-#include <libempathy/empathy-contact-list.h>
#include <libempathy/empathy-location.h>
#include <libempathy/empathy-time.h>
#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-client-factory.h>
#include "empathy-calendar-button.h"
#include "empathy-contact-widget.h"
@@ -74,20 +73,20 @@
* also allowing changing these details, if desired.
*/
+G_DEFINE_TYPE (EmpathyContactWidget, empathy_contact_widget, GTK_TYPE_BOX)
+
/* Delay before updating the widget when the id entry changed (seconds) */
#define ID_CHANGED_TIMEOUT 1
#define DATA_FIELD "contact-info-field"
-typedef struct
+struct _EmpathyContactWidgetPriv
{
EmpathyContact *contact;
EmpathyContactWidgetFlags flags;
guint widget_id_timeout;
gulong fav_sig_id;
- GtkWidget *vbox_contact_widget;
-
/* Contact */
GtkWidget *widget_avatar;
GtkWidget *widget_account;
@@ -132,11 +131,11 @@ typedef struct
GtkWidget *vbox_client;
GtkWidget *grid_client;
GtkWidget *hbox_client_requested;
-} EmpathyContactWidget;
+};
typedef struct
{
- EmpathyContactWidget *information;
+ EmpathyContactWidget *self;
const gchar *name;
gboolean found;
GtkTreeIter found_iter;
@@ -187,15 +186,15 @@ set_contact_info_cb (GObject *source,
}
static void
-contact_widget_save (EmpathyContactWidget *information)
+contact_widget_save (EmpathyContactWidget *self)
{
TpConnection *connection;
GList *l, *next;
- connection = empathy_contact_get_connection (information->contact);
+ connection = empathy_contact_get_connection (self->priv->contact);
/* Remove empty fields */
- for (l = information->details_to_set; l != NULL; l = next)
+ for (l = self->priv->details_to_set; l != NULL; l = next)
{
TpContactInfoField *field = l->data;
@@ -204,33 +203,33 @@ contact_widget_save (EmpathyContactWidget *information)
{
DEBUG ("Drop empty field: %s", field->field_name);
tp_contact_info_field_free (field);
- information->details_to_set =
- g_list_delete_link (information->details_to_set, l);
+ self->priv->details_to_set =
+ g_list_delete_link (self->priv->details_to_set, l);
}
}
- if (information->details_to_set != NULL)
+ if (self->priv->details_to_set != NULL)
{
- if (information->details_changed)
+ if (self->priv->details_changed)
{
tp_connection_set_contact_info_async (connection,
- information->details_to_set, set_contact_info_cb, NULL);
+ self->priv->details_to_set, set_contact_info_cb, NULL);
}
- tp_contact_info_list_free (information->details_to_set);
- information->details_to_set = NULL;
+ tp_contact_info_list_free (self->priv->details_to_set);
+ self->priv->details_to_set = NULL;
}
}
static void
-contact_widget_details_setup (EmpathyContactWidget *information)
+contact_widget_details_setup (EmpathyContactWidget *self)
{
- gtk_widget_hide (information->vbox_details);
+ gtk_widget_hide (self->priv->vbox_details);
- information->spinner_details = gtk_spinner_new ();
- gtk_box_pack_end (GTK_BOX (information->hbox_details_requested),
- information->spinner_details, TRUE, TRUE, 0);
- gtk_widget_show (information->spinner_details);
+ self->priv->spinner_details = gtk_spinner_new ();
+ gtk_box_pack_end (GTK_BOX (self->priv->hbox_details_requested),
+ self->priv->spinner_details, TRUE, TRUE, 0);
+ gtk_widget_show (self->priv->spinner_details);
}
static void
@@ -240,7 +239,7 @@ contact_widget_details_changed_cb (GtkEntry *entry,
const gchar *strv[] = { NULL, NULL };
TpContactInfoField *field;
- self->details_changed = TRUE;
+ self->priv->details_changed = TRUE;
field = g_object_get_data ((GObject *) entry, DATA_FIELD);
g_assert (field != NULL);
@@ -260,7 +259,7 @@ contact_widget_bday_changed_cb (EmpathyCalendarButton *button,
const gchar *strv[] = { NULL, NULL };
TpContactInfoField *field;
- self->details_changed = TRUE;
+ self->priv->details_changed = TRUE;
field = g_object_get_data ((GObject *) button, DATA_FIELD);
g_assert (field != NULL);
@@ -279,7 +278,7 @@ contact_widget_bday_changed_cb (EmpathyCalendarButton *button,
field->field_value = g_strdupv ((GStrv) strv);
}
-static void contact_widget_details_notify_cb (EmpathyContactWidget *information);
+static void contact_widget_details_notify_cb (EmpathyContactWidget *self);
static gboolean
field_name_in_field_list (GList *list,
@@ -316,7 +315,7 @@ get_spec_from_list (GList *list,
}
static guint
-contact_widget_details_update_edit (EmpathyContactWidget *information)
+contact_widget_details_update_edit (EmpathyContactWidget *self)
{
TpContact *contact;
TpConnection *connection;
@@ -326,11 +325,11 @@ contact_widget_details_update_edit (EmpathyContactWidget *information)
const char **field_names = empathy_contact_info_get_field_names (NULL);
guint i;
- g_assert (information->details_to_set == NULL);
+ g_assert (self->priv->details_to_set == NULL);
- information->details_changed = FALSE;
+ self->priv->details_changed = FALSE;
- contact = empathy_contact_get_tp_contact (information->contact);
+ contact = empathy_contact_get_tp_contact (self->priv->contact);
connection = tp_contact_get_connection (contact);
info = tp_contact_get_contact_info (contact);
@@ -346,7 +345,7 @@ contact_widget_details_update_edit (EmpathyContactWidget *information)
field = tp_contact_info_field_copy (field);
DEBUG ("Field %s is in our vCard", field->field_name);
- information->details_to_set = g_list_prepend (information->details_to_set,
+ self->priv->details_to_set = g_list_prepend (self->priv->details_to_set,
field);
}
@@ -357,7 +356,7 @@ contact_widget_details_update_edit (EmpathyContactWidget *information)
TpContactInfoField *field;
/* Check if the field was in the vCard */
- if (field_name_in_field_list (information->details_to_set,
+ if (field_name_in_field_list (self->priv->details_to_set,
field_names[i]))
continue;
@@ -369,15 +368,15 @@ contact_widget_details_update_edit (EmpathyContactWidget *information)
/* add an empty field so user can set a value */
field = tp_contact_info_field_new (spec->name, spec->parameters, NULL);
- information->details_to_set = g_list_prepend (information->details_to_set,
+ self->priv->details_to_set = g_list_prepend (self->priv->details_to_set,
field);
}
/* Add widgets for supported fields */
- information->details_to_set = g_list_sort (information->details_to_set,
+ self->priv->details_to_set = g_list_sort (self->priv->details_to_set,
(GCompareFunc) empathy_contact_info_field_spec_cmp);
- for (l = information->details_to_set; l != NULL; l= g_list_next (l))
+ for (l = self->priv->details_to_set; l != NULL; l= g_list_next (l))
{
TpContactInfoField *field = l->data;
GtkWidget *w;
@@ -418,7 +417,7 @@ contact_widget_details_update_edit (EmpathyContactWidget *information)
/* TODO: if TP_CONTACT_INFO_FIELD_FLAG_PARAMETERS_EXACT is not set we
* should allow user to tag the vCard fields (bgo#672034) */
- gtk_grid_attach (GTK_GRID (information->grid_details),
+ gtk_grid_attach (GTK_GRID (self->priv->grid_details),
w, 0, n_rows, 1, 1);
gtk_misc_set_alignment (GTK_MISC (w), 1, 0.5);
@@ -441,28 +440,28 @@ contact_widget_details_update_edit (EmpathyContactWidget *information)
}
}
- gtk_grid_attach (GTK_GRID (information->grid_details),
+ gtk_grid_attach (GTK_GRID (self->priv->grid_details),
w, 1, n_rows, 1, 1);
gtk_widget_show_all (w);
g_object_set_data ((GObject *) w, DATA_FIELD, field);
g_signal_connect (w, "date-changed",
- G_CALLBACK (contact_widget_bday_changed_cb), information);
+ G_CALLBACK (contact_widget_bday_changed_cb), self);
}
else
{
w = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY (w),
field->field_value[0] ? field->field_value[0] : "");
- gtk_grid_attach (GTK_GRID (information->grid_details),
+ gtk_grid_attach (GTK_GRID (self->priv->grid_details),
w, 1, n_rows, 1, 1);
gtk_widget_show (w);
g_object_set_data ((GObject *) w, DATA_FIELD, field);
g_signal_connect (w, "changed",
- G_CALLBACK (contact_widget_details_changed_cb), information);
+ G_CALLBACK (contact_widget_details_changed_cb), self);
}
n_rows++;
@@ -490,7 +489,7 @@ add_row (GtkGrid *grid,
}
static guint
-contact_widget_details_update_show (EmpathyContactWidget *information)
+contact_widget_details_update_show (EmpathyContactWidget *self)
{
TpContact *contact;
GList *info, *l;
@@ -498,7 +497,7 @@ contact_widget_details_update_show (EmpathyContactWidget *information)
GtkWidget *channels_label;
TpAccount *account;
- contact = empathy_contact_get_tp_contact (information->contact);
+ contact = empathy_contact_get_tp_contact (self->priv->contact);
info = tp_contact_get_contact_info (contact);
info = g_list_sort (info, (GCompareFunc) empathy_contact_info_field_cmp);
for (l = info; l != NULL; l = l->next)
@@ -546,16 +545,16 @@ contact_widget_details_update_show (EmpathyContactWidget *information)
g_free (markup);
}
- if ((information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP) == 0)
+ if ((self->priv->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP) == 0)
gtk_label_set_selectable (GTK_LABEL (value_widget), TRUE);
- add_row (GTK_GRID (information->grid_details), n_rows, title_widget,
+ add_row (GTK_GRID (self->priv->grid_details), n_rows, title_widget,
value_widget);
n_rows++;
}
- account = empathy_contact_get_account (information->contact);
+ account = empathy_contact_get_account (self->priv->contact);
channels_label = empathy_contact_info_create_channel_list_label (account,
info, n_rows);
@@ -566,7 +565,7 @@ contact_widget_details_update_show (EmpathyContactWidget *information)
title_widget = gtk_label_new (_("Channels:"));
- add_row (GTK_GRID (information->grid_details), n_rows, title_widget,
+ add_row (GTK_GRID (self->priv->grid_details), n_rows, title_widget,
channels_label);
n_rows++;
@@ -578,30 +577,30 @@ contact_widget_details_update_show (EmpathyContactWidget *information)
}
static void
-contact_widget_details_notify_cb (EmpathyContactWidget *information)
+contact_widget_details_notify_cb (EmpathyContactWidget *self)
{
guint n_rows;
- gtk_container_foreach (GTK_CONTAINER (information->grid_details),
+ gtk_container_foreach (GTK_CONTAINER (self->priv->grid_details),
(GtkCallback) gtk_widget_destroy, NULL);
- if ((information->flags & EMPATHY_CONTACT_WIDGET_EDIT_DETAILS) != 0)
- n_rows = contact_widget_details_update_edit (information);
+ if ((self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_DETAILS) != 0)
+ n_rows = contact_widget_details_update_edit (self);
else
- n_rows = contact_widget_details_update_show (information);
+ n_rows = contact_widget_details_update_show (self);
if (n_rows > 0)
{
- gtk_widget_show (information->vbox_details);
- gtk_widget_show (information->grid_details);
+ gtk_widget_show (self->priv->vbox_details);
+ gtk_widget_show (self->priv->grid_details);
}
else
{
- gtk_widget_hide (information->vbox_details);
+ gtk_widget_hide (self->priv->vbox_details);
}
- gtk_widget_hide (information->hbox_details_requested);
- gtk_spinner_stop (GTK_SPINNER (information->spinner_details));
+ gtk_widget_hide (self->priv->hbox_details_requested);
+ gtk_spinner_stop (GTK_SPINNER (self->priv->spinner_details));
}
static void
@@ -610,40 +609,40 @@ contact_widget_details_request_cb (GObject *object,
gpointer user_data)
{
TpContact *contact = TP_CONTACT (object);
- EmpathyContactWidget *information = user_data;
+ EmpathyContactWidget *self = user_data;
GError *error = NULL;
if (!tp_contact_request_contact_info_finish (contact, res, &error))
{
/* If the request got cancelled it could mean the contact widget is
- * destroyed, so we should not dereference information */
+ * destroyed, so we should not dereference self */
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_clear_error (&error);
return;
}
- gtk_widget_hide (information->vbox_details);
+ gtk_widget_hide (self->priv->vbox_details);
g_clear_error (&error);
}
else
{
- contact_widget_details_notify_cb (information);
+ contact_widget_details_notify_cb (self);
}
/* If we are going to edit ContactInfo, we don't want live updates */
- if ((information->flags & EMPATHY_CONTACT_WIDGET_EDIT_DETAILS) == 0)
+ if ((self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_DETAILS) == 0)
{
g_signal_connect_swapped (contact, "notify::contact-info",
- G_CALLBACK (contact_widget_details_notify_cb), information);
+ G_CALLBACK (contact_widget_details_notify_cb), self);
}
- tp_clear_object (&information->details_cancellable);
+ tp_clear_object (&self->priv->details_cancellable);
}
static void
-fetch_contact_information (EmpathyContactWidget *information,
- TpConnection *connection)
+fetch_contact_information (EmpathyContactWidget *self,
+ TpConnection *connection)
{
TpContact *contact;
TpContactInfoFlags flags;
@@ -651,46 +650,46 @@ fetch_contact_information (EmpathyContactWidget *information,
if (!tp_proxy_has_interface_by_id (connection,
TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_INFO))
{
- gtk_widget_hide (information->vbox_details);
+ gtk_widget_hide (self->priv->vbox_details);
return;
}
/* If we want to edit info, but connection does not support that, stop */
flags = tp_connection_get_contact_info_flags (connection);
if ((flags & TP_CONTACT_INFO_FLAG_CAN_SET) == 0 &&
- (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_DETAILS) != 0)
+ (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_DETAILS) != 0)
{
- gtk_widget_hide (information->vbox_details);
+ gtk_widget_hide (self->priv->vbox_details);
return;
}
/* Request the contact's info */
- gtk_widget_show (information->vbox_details);
- gtk_widget_show (information->hbox_details_requested);
- gtk_widget_hide (information->grid_details);
- gtk_spinner_start (GTK_SPINNER (information->spinner_details));
-
- contact = empathy_contact_get_tp_contact (information->contact);
- g_assert (information->details_cancellable == NULL);
- information->details_cancellable = g_cancellable_new ();
+ gtk_widget_show (self->priv->vbox_details);
+ gtk_widget_show (self->priv->hbox_details_requested);
+ gtk_widget_hide (self->priv->grid_details);
+ gtk_spinner_start (GTK_SPINNER (self->priv->spinner_details));
+
+ contact = empathy_contact_get_tp_contact (self->priv->contact);
+ g_assert (self->priv->details_cancellable == NULL);
+ self->priv->details_cancellable = g_cancellable_new ();
tp_contact_request_contact_info_async (contact,
- information->details_cancellable, contact_widget_details_request_cb,
- information);
+ self->priv->details_cancellable, contact_widget_details_request_cb,
+ self);
}
static void
-contact_widget_details_update (EmpathyContactWidget *information)
+contact_widget_details_update (EmpathyContactWidget *self)
{
TpContact *tp_contact = NULL;
- if ((information->flags & EMPATHY_CONTACT_WIDGET_SHOW_DETAILS) == 0 &&
- (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_DETAILS) == 0)
+ if ((self->priv->flags & EMPATHY_CONTACT_WIDGET_SHOW_DETAILS) == 0 &&
+ (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_DETAILS) == 0)
return;
- gtk_widget_hide (information->vbox_details);
+ gtk_widget_hide (self->priv->vbox_details);
- if (information->contact != NULL)
- tp_contact = empathy_contact_get_tp_contact (information->contact);
+ if (self->priv->contact != NULL)
+ tp_contact = empathy_contact_get_tp_contact (self->priv->contact);
if (tp_contact != NULL)
{
@@ -698,45 +697,45 @@ contact_widget_details_update (EmpathyContactWidget *information)
connection = tp_contact_get_connection (tp_contact);
- fetch_contact_information (information, connection);
+ fetch_contact_information (self, connection);
}
}
static void
-contact_widget_client_update (EmpathyContactWidget *information)
+contact_widget_client_update (EmpathyContactWidget *self)
{
/* FIXME: Needs new telepathy spec */
}
static void
-contact_widget_client_setup (EmpathyContactWidget *information)
+contact_widget_client_setup (EmpathyContactWidget *self)
{
/* FIXME: Needs new telepathy spec */
- gtk_widget_hide (information->vbox_client);
+ gtk_widget_hide (self->priv->vbox_client);
}
static void
-contact_widget_groups_update (EmpathyContactWidget *information)
+contact_widget_groups_update (EmpathyContactWidget *self)
{
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_GROUPS &&
- information->contact != NULL)
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_GROUPS &&
+ self->priv->contact != NULL)
{
FolksPersona *persona =
- empathy_contact_get_persona (information->contact);
+ empathy_contact_get_persona (self->priv->contact);
if (FOLKS_IS_GROUP_DETAILS (persona))
{
empathy_groups_widget_set_group_details (
- EMPATHY_GROUPS_WIDGET (information->groups_widget),
+ EMPATHY_GROUPS_WIDGET (self->priv->groups_widget),
FOLKS_GROUP_DETAILS (persona));
- gtk_widget_show (information->groups_widget);
+ gtk_widget_show (self->priv->groups_widget);
return;
}
}
/* In case of failure */
- gtk_widget_hide (information->groups_widget);
+ gtk_widget_hide (self->priv->groups_widget);
}
/* Converts the Location's GHashTable's key to a user readable string */
@@ -799,7 +798,7 @@ location_key_to_label (const gchar *key)
}
static void
-contact_widget_location_update (EmpathyContactWidget *information)
+contact_widget_location_update (EmpathyContactWidget *self)
{
GHashTable *location;
GValue *value;
@@ -827,16 +826,16 @@ contact_widget_location_update (EmpathyContactWidget *information)
const gchar *skey;
gboolean display_map = FALSE;
- if (!(information->flags & EMPATHY_CONTACT_WIDGET_SHOW_LOCATION))
+ if (!(self->priv->flags & EMPATHY_CONTACT_WIDGET_SHOW_LOCATION))
{
- gtk_widget_hide (information->vbox_location);
+ gtk_widget_hide (self->priv->vbox_location);
return;
}
- location = empathy_contact_get_location (information->contact);
+ location = empathy_contact_get_location (self->priv->contact);
if (location == NULL || g_hash_table_size (location) == 0)
{
- gtk_widget_hide (information->vbox_location);
+ gtk_widget_hide (self->priv->vbox_location);
return;
}
@@ -844,7 +843,7 @@ contact_widget_location_update (EmpathyContactWidget *information)
if (value == NULL)
{
gchar *loc = g_strdup_printf ("<b>%s</b>", _("Location"));
- gtk_label_set_markup (GTK_LABEL (information->label_location), loc);
+ gtk_label_set_markup (GTK_LABEL (self->priv->label_location), loc);
g_free (loc);
}
else
@@ -862,21 +861,21 @@ contact_widget_location_update (EmpathyContactWidget *information)
/* translators: format is "Location, $date" */
text = g_strdup_printf (_("%s, %s"), tmp, user_date);
g_free (tmp);
- gtk_label_set_markup (GTK_LABEL (information->label_location), text);
+ gtk_label_set_markup (GTK_LABEL (self->priv->label_location), text);
g_free (user_date);
g_free (text);
}
- /* Prepare the location information grid */
- if (information->grid_location != NULL)
+ /* Prepare the location self grid */
+ if (self->priv->grid_location != NULL)
{
- gtk_widget_destroy (information->grid_location);
+ gtk_widget_destroy (self->priv->grid_location);
}
- information->grid_location = gtk_grid_new ();
- gtk_box_pack_start (GTK_BOX (information->subvbox_location),
- information->grid_location, FALSE, FALSE, 5);
+ self->priv->grid_location = gtk_grid_new ();
+ gtk_box_pack_start (GTK_BOX (self->priv->subvbox_location),
+ self->priv->grid_location, FALSE, FALSE, 5);
for (i = 0; (skey = ordered_geolocation_keys[i]); i++)
@@ -893,7 +892,7 @@ contact_widget_location_update (EmpathyContactWidget *information)
label = gtk_label_new (user_label);
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_grid_attach (GTK_GRID (information->grid_location),
+ gtk_grid_attach (GTK_GRID (self->priv->grid_location),
label, 0, row, 1, 1);
gtk_widget_show (label);
@@ -918,12 +917,12 @@ contact_widget_location_update (EmpathyContactWidget *information)
if (svalue != NULL)
{
label = gtk_label_new (svalue);
- gtk_grid_attach (GTK_GRID (information->grid_location),
+ gtk_grid_attach (GTK_GRID (self->priv->grid_location),
label, 1, row, 1, 1);
gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
gtk_widget_show (label);
- if (!(information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP))
+ if (!(self->priv->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP))
gtk_label_set_selectable (GTK_LABEL (label), TRUE);
}
@@ -933,7 +932,7 @@ contact_widget_location_update (EmpathyContactWidget *information)
#ifdef HAVE_LIBCHAMPLAIN
if (has_position &&
- !(information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP))
+ !(self->priv->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP))
{
/* Cannot be displayed in tooltips until Clutter-Gtk can deal with such
* windows */
@@ -944,12 +943,12 @@ contact_widget_location_update (EmpathyContactWidget *information)
if (row > 0)
{
/* We can display some fields */
- gtk_widget_show (information->grid_location);
+ gtk_widget_show (self->priv->grid_location);
}
else if (!display_map)
{
/* Can't display either fields or map */
- gtk_widget_hide (information->vbox_location);
+ gtk_widget_hide (self->priv->vbox_location);
return;
}
@@ -959,36 +958,36 @@ contact_widget_location_update (EmpathyContactWidget *information)
ClutterActor *marker;
ChamplainMarkerLayer *layer;
- information->map_view_embed = gtk_champlain_embed_new ();
- information->map_view = gtk_champlain_embed_get_view (
- GTK_CHAMPLAIN_EMBED (information->map_view_embed));
+ self->priv->map_view_embed = gtk_champlain_embed_new ();
+ self->priv->map_view = gtk_champlain_embed_get_view (
+ GTK_CHAMPLAIN_EMBED (self->priv->map_view_embed));
- gtk_container_add (GTK_CONTAINER (information->viewport_map),
- information->map_view_embed);
- g_object_set (G_OBJECT (information->map_view),
+ gtk_container_add (GTK_CONTAINER (self->priv->viewport_map),
+ self->priv->map_view_embed);
+ g_object_set (G_OBJECT (self->priv->map_view),
"kinetic-mode", TRUE,
"zoom-level", 10,
NULL);
layer = champlain_marker_layer_new ();
- champlain_view_add_layer (information->map_view, CHAMPLAIN_LAYER (layer));
+ champlain_view_add_layer (self->priv->map_view, CHAMPLAIN_LAYER (layer));
marker = champlain_label_new_with_text (
- empathy_contact_get_alias (information->contact), NULL, NULL, NULL);
+ empathy_contact_get_alias (self->priv->contact), NULL, NULL, NULL);
champlain_location_set_location (CHAMPLAIN_LOCATION (marker), lat, lon);
champlain_marker_layer_add_marker (layer, CHAMPLAIN_MARKER (marker));
- champlain_view_center_on (information->map_view, lat, lon);
- gtk_widget_show_all (information->viewport_map);
+ champlain_view_center_on (self->priv->map_view, lat, lon);
+ gtk_widget_show_all (self->priv->viewport_map);
}
#endif
- gtk_widget_show (information->vbox_location);
+ gtk_widget_show (self->priv->vbox_location);
}
static void
save_avatar_menu_activate_cb (GtkWidget *widget,
- EmpathyContactWidget *information)
+ EmpathyContactWidget *self)
{
GtkWidget *dialog;
EmpathyAvatar *avatar;
@@ -1005,7 +1004,7 @@ save_avatar_menu_activate_cb (GtkWidget *widget,
TRUE);
/* look for the avatar extension */
- avatar = empathy_contact_get_avatar (information->contact);
+ avatar = empathy_contact_get_avatar (self->priv->contact);
if (avatar->format != NULL)
{
gchar **splitted;
@@ -1027,7 +1026,7 @@ save_avatar_menu_activate_cb (GtkWidget *widget,
gchar *id;
id = tp_escape_as_identifier (empathy_contact_get_id (
- information->contact));
+ self->priv->contact));
filename = g_strdup_printf ("%s.%s", id, ext);
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename);
@@ -1070,15 +1069,15 @@ save_avatar_menu_activate_cb (GtkWidget *widget,
}
static void
-popup_avatar_menu (EmpathyContactWidget *information,
+popup_avatar_menu (EmpathyContactWidget *self,
GtkWidget *parent,
GdkEventButton *event)
{
GtkWidget *menu, *item;
gint button, event_time;
- if (information->contact == NULL ||
- empathy_contact_get_avatar (information->contact) == NULL)
+ if (self->priv->contact == NULL ||
+ empathy_contact_get_avatar (self->priv->contact) == NULL)
return;
menu = empathy_context_menu_new (parent);
@@ -1089,7 +1088,7 @@ popup_avatar_menu (EmpathyContactWidget *information,
gtk_widget_show (item);
g_signal_connect (item, "activate",
- G_CALLBACK (save_avatar_menu_activate_cb), information);
+ G_CALLBACK (save_avatar_menu_activate_cb), self);
if (event)
{
@@ -1108,9 +1107,9 @@ popup_avatar_menu (EmpathyContactWidget *information,
static gboolean
widget_avatar_popup_menu_cb (GtkWidget *widget,
- EmpathyContactWidget *information)
+ EmpathyContactWidget *self)
{
- popup_avatar_menu (information, widget, NULL);
+ popup_avatar_menu (self, widget, NULL);
return TRUE;
}
@@ -1118,12 +1117,12 @@ widget_avatar_popup_menu_cb (GtkWidget *widget,
static gboolean
widget_avatar_button_press_event_cb (GtkWidget *widget,
GdkEventButton *event,
- EmpathyContactWidget *information)
+ EmpathyContactWidget *self)
{
/* Ignore double-clicks and triple-clicks */
if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
{
- popup_avatar_menu (information, widget, event);
+ popup_avatar_menu (self, widget, event);
return TRUE;
}
@@ -1158,7 +1157,7 @@ set_avatar_on_account (TpAccount *account,
static void
contact_widget_avatar_changed_cb (EmpathyAvatarChooser *chooser,
- EmpathyContactWidget *information)
+ EmpathyContactWidget *self)
{
const gchar *data;
gsize size;
@@ -1166,10 +1165,10 @@ contact_widget_avatar_changed_cb (EmpathyAvatarChooser *chooser,
TpAccount *account;
empathy_avatar_chooser_get_image_data (
- EMPATHY_AVATAR_CHOOSER (information->widget_avatar),
+ EMPATHY_AVATAR_CHOOSER (self->priv->widget_avatar),
&data, &size, &mime_type);
- account = empathy_contact_get_account (information->contact);
+ account = empathy_contact_get_account (self->priv->contact);
set_avatar_on_account (account, data, size, mime_type);
}
@@ -1200,7 +1199,7 @@ update_nickname_in_contact_info (EmpathyContactWidget *self,
specs = tp_connection_get_contact_info_supported_fields (connection);
- for (l = self->details_to_set; l != NULL; l= g_list_next (l))
+ for (l = self->priv->details_to_set; l != NULL; l= g_list_next (l))
{
TpContactInfoField *field = l->data;
TpContactInfoFieldSpec *spec;
@@ -1229,21 +1228,21 @@ update_nickname_in_contact_info (EmpathyContactWidget *self,
static gboolean
contact_widget_entry_alias_focus_event_cb (GtkEditable *editable,
- GdkEventFocus *event,
- EmpathyContactWidget *information)
+ GdkEventFocus *event,
+ EmpathyContactWidget *self)
{
- if (information->contact)
+ if (self->priv->contact)
{
const gchar *alias;
alias = gtk_entry_get_text (GTK_ENTRY (editable));
- if (empathy_contact_is_user (information->contact))
+ if (empathy_contact_is_user (self->priv->contact))
{
TpAccount * account;
const gchar *current_nickname;
- account = empathy_contact_get_account (information->contact);
+ account = empathy_contact_get_account (self->priv->contact);
current_nickname = tp_account_get_nickname (account);
if (tp_strdiff (current_nickname, alias))
@@ -1253,13 +1252,13 @@ contact_widget_entry_alias_focus_event_cb (GtkEditable *editable,
tp_account_set_nickname_async (account, alias, set_nickname_cb,
NULL);
- update_nickname_in_contact_info (information,
- empathy_contact_get_connection (information->contact), alias);
+ update_nickname_in_contact_info (self,
+ empathy_contact_get_connection (self->priv->contact), alias);
}
}
else
{
- empathy_contact_set_alias (information->contact, alias);
+ empathy_contact_set_alias (self->priv->contact, alias);
}
}
@@ -1280,264 +1279,280 @@ update_avatar_chooser_account_cb (EmpathyAccountChooser *account_chooser,
}
static void
-contact_widget_avatar_notify_cb (EmpathyContactWidget *information)
+contact_widget_avatar_notify_cb (EmpathyContactWidget *self)
{
EmpathyAvatar *avatar = NULL;
- if (information->contact)
- avatar = empathy_contact_get_avatar (information->contact);
+ if (self->priv->contact)
+ avatar = empathy_contact_get_avatar (self->priv->contact);
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_AVATAR)
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_AVATAR)
{
- g_signal_handlers_block_by_func (information->widget_avatar,
+ g_signal_handlers_block_by_func (self->priv->widget_avatar,
contact_widget_avatar_changed_cb,
- information);
+ self);
empathy_avatar_chooser_set (
- EMPATHY_AVATAR_CHOOSER (information->widget_avatar), avatar);
- g_signal_handlers_unblock_by_func (information->widget_avatar,
- contact_widget_avatar_changed_cb, information);
+ EMPATHY_AVATAR_CHOOSER (self->priv->widget_avatar), avatar);
+ g_signal_handlers_unblock_by_func (self->priv->widget_avatar,
+ contact_widget_avatar_changed_cb, self);
}
else
empathy_avatar_image_set (
- EMPATHY_AVATAR_IMAGE (information->widget_avatar), avatar);
+ EMPATHY_AVATAR_IMAGE (self->priv->widget_avatar), avatar);
}
static void
-contact_widget_name_notify_cb (EmpathyContactWidget *information)
+contact_widget_name_notify_cb (EmpathyContactWidget *self)
{
- if (GTK_IS_ENTRY (information->widget_alias))
- gtk_entry_set_text (GTK_ENTRY (information->widget_alias),
- empathy_contact_get_alias (information->contact));
+ if (GTK_IS_ENTRY (self->priv->widget_alias))
+ gtk_entry_set_text (GTK_ENTRY (self->priv->widget_alias),
+ empathy_contact_get_alias (self->priv->contact));
else
- gtk_label_set_label (GTK_LABEL (information->widget_alias),
- empathy_contact_get_alias (information->contact));
+ gtk_label_set_label (GTK_LABEL (self->priv->widget_alias),
+ empathy_contact_get_alias (self->priv->contact));
}
static void
-contact_widget_presence_notify_cb (EmpathyContactWidget *information)
+contact_widget_presence_notify_cb (EmpathyContactWidget *self)
{
const gchar *status;
gchar *markup_text = NULL;
- status = empathy_contact_get_status (information->contact);
+ status = empathy_contact_get_status (self->priv->contact);
if (status != NULL)
markup_text = empathy_add_link_markup (status);
- gtk_label_set_markup (GTK_LABEL (information->label_status), markup_text);
+ gtk_label_set_markup (GTK_LABEL (self->priv->label_status), markup_text);
g_free (markup_text);
- gtk_image_set_from_icon_name (GTK_IMAGE (information->image_state),
- empathy_icon_name_for_contact (information->contact),
+ gtk_image_set_from_icon_name (GTK_IMAGE (self->priv->image_state),
+ empathy_icon_name_for_contact (self->priv->contact),
GTK_ICON_SIZE_BUTTON);
- gtk_widget_show (information->image_state);
+ gtk_widget_show (self->priv->image_state);
}
static void
-contact_widget_remove_contact (EmpathyContactWidget *information)
+contact_widget_remove_contact (EmpathyContactWidget *self)
{
- if (information->contact)
+ if (self->priv->contact)
{
TpContact *tp_contact;
- contact_widget_save (information);
+ contact_widget_save (self);
- g_signal_handlers_disconnect_by_func (information->contact,
- contact_widget_name_notify_cb, information);
- g_signal_handlers_disconnect_by_func (information->contact,
- contact_widget_presence_notify_cb, information);
- g_signal_handlers_disconnect_by_func (information->contact,
- contact_widget_avatar_notify_cb, information);
+ g_signal_handlers_disconnect_by_func (self->priv->contact,
+ contact_widget_name_notify_cb, self);
+ g_signal_handlers_disconnect_by_func (self->priv->contact,
+ contact_widget_presence_notify_cb, self);
+ g_signal_handlers_disconnect_by_func (self->priv->contact,
+ contact_widget_avatar_notify_cb, self);
- tp_contact = empathy_contact_get_tp_contact (information->contact);
+ tp_contact = empathy_contact_get_tp_contact (self->priv->contact);
if (tp_contact != NULL)
{
g_signal_handlers_disconnect_by_func (tp_contact,
- contact_widget_details_notify_cb, information);
+ contact_widget_details_notify_cb, self);
}
- g_object_unref (information->contact);
- information->contact = NULL;
+ g_object_unref (self->priv->contact);
+ self->priv->contact = NULL;
}
- if (information->details_cancellable != NULL)
+ if (self->priv->details_cancellable != NULL)
{
- g_cancellable_cancel (information->details_cancellable);
- tp_clear_object (&information->details_cancellable);
+ g_cancellable_cancel (self->priv->details_cancellable);
+ tp_clear_object (&self->priv->details_cancellable);
}
}
-static void contact_widget_change_contact (EmpathyContactWidget *information);
+static void contact_widget_change_contact (EmpathyContactWidget *self);
static void
-contact_widget_contact_update (EmpathyContactWidget *information)
+contact_widget_contact_update (EmpathyContactWidget *self)
{
TpAccount *account = NULL;
const gchar *id = NULL;
/* Connect and get info from new contact */
- if (information->contact)
+ if (self->priv->contact)
{
- g_signal_connect_swapped (information->contact, "notify::name",
- G_CALLBACK (contact_widget_name_notify_cb), information);
- g_signal_connect_swapped (information->contact, "notify::presence",
- G_CALLBACK (contact_widget_presence_notify_cb), information);
- g_signal_connect_swapped (information->contact,
+ g_signal_connect_swapped (self->priv->contact, "notify::name",
+ G_CALLBACK (contact_widget_name_notify_cb), self);
+ g_signal_connect_swapped (self->priv->contact, "notify::presence",
+ G_CALLBACK (contact_widget_presence_notify_cb), self);
+ g_signal_connect_swapped (self->priv->contact,
"notify::presence-message",
- G_CALLBACK (contact_widget_presence_notify_cb), information);
- g_signal_connect_swapped (information->contact, "notify::avatar",
- G_CALLBACK (contact_widget_avatar_notify_cb), information);
+ G_CALLBACK (contact_widget_presence_notify_cb), self);
+ g_signal_connect_swapped (self->priv->contact, "notify::avatar",
+ G_CALLBACK (contact_widget_avatar_notify_cb), self);
- account = empathy_contact_get_account (information->contact);
- id = empathy_contact_get_id (information->contact);
+ account = empathy_contact_get_account (self->priv->contact);
+ id = empathy_contact_get_id (self->priv->contact);
}
/* Update account widget */
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT)
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT)
{
if (account)
{
- g_signal_handlers_block_by_func (information->widget_account,
+ g_signal_handlers_block_by_func (self->priv->widget_account,
contact_widget_change_contact,
- information);
+ self);
empathy_account_chooser_set_account (
- EMPATHY_ACCOUNT_CHOOSER (information->widget_account), account);
- g_signal_handlers_unblock_by_func (information->widget_account,
- contact_widget_change_contact, information);
+ EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account), account);
+ g_signal_handlers_unblock_by_func (self->priv->widget_account,
+ contact_widget_change_contact, self);
}
}
else
{
- if (EMPATHY_IS_AVATAR_CHOOSER (information->widget_avatar))
+ if (EMPATHY_IS_AVATAR_CHOOSER (self->priv->widget_avatar))
{
empathy_avatar_chooser_set_account (
- EMPATHY_AVATAR_CHOOSER (information->widget_avatar), account);
+ EMPATHY_AVATAR_CHOOSER (self->priv->widget_avatar), account);
}
- if ((information->flags & EMPATHY_CONTACT_WIDGET_NO_ACCOUNT) == 0)
+ if ((self->priv->flags & EMPATHY_CONTACT_WIDGET_NO_ACCOUNT) == 0)
{
if (account)
{
const gchar *name;
name = tp_account_get_display_name (account);
- gtk_label_set_label (GTK_LABEL (information->label_account),
+ gtk_label_set_label (GTK_LABEL (self->priv->label_account),
name);
name = tp_account_get_icon_name (account);
gtk_image_set_from_icon_name (
- GTK_IMAGE (information->image_account),
+ GTK_IMAGE (self->priv->image_account),
name, GTK_ICON_SIZE_MENU);
}
}
}
/* Update id widget */
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID)
- gtk_entry_set_text (GTK_ENTRY (information->widget_id), id ? id : "");
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID)
+ gtk_entry_set_text (GTK_ENTRY (self->priv->widget_id), id ? id : "");
else
- gtk_label_set_label (GTK_LABEL (information->widget_id), id ? id : "");
+ gtk_label_set_label (GTK_LABEL (self->priv->widget_id), id ? id : "");
/* Update other widgets */
- if (information->contact)
+ if (self->priv->contact)
{
- contact_widget_name_notify_cb (information);
- contact_widget_presence_notify_cb (information);
- contact_widget_avatar_notify_cb (information);
+ contact_widget_name_notify_cb (self);
+ contact_widget_presence_notify_cb (self);
+ contact_widget_avatar_notify_cb (self);
- gtk_widget_show (information->label_alias);
- gtk_widget_show (information->widget_alias);
- gtk_widget_show (information->widget_avatar);
+ gtk_widget_show (self->priv->label_alias);
+ gtk_widget_show (self->priv->widget_alias);
+ gtk_widget_show (self->priv->widget_avatar);
- gtk_widget_set_visible (information->hbox_presence,
- !(information->flags & EMPATHY_CONTACT_WIDGET_NO_STATUS));
+ gtk_widget_set_visible (self->priv->hbox_presence,
+ !(self->priv->flags & EMPATHY_CONTACT_WIDGET_NO_STATUS));
- if (empathy_contact_is_user (information->contact))
- gtk_label_set_text (GTK_LABEL (information->label_details),
+ if (empathy_contact_is_user (self->priv->contact))
+ gtk_label_set_text (GTK_LABEL (self->priv->label_details),
_("Personal Details"));
else
- gtk_label_set_text (GTK_LABEL (information->label_details),
+ gtk_label_set_text (GTK_LABEL (self->priv->label_details),
_("Contact Details"));
}
else
{
- gtk_widget_hide (information->label_alias);
- gtk_widget_hide (information->widget_alias);
- gtk_widget_hide (information->hbox_presence);
- gtk_widget_hide (information->widget_avatar);
+ gtk_widget_hide (self->priv->label_alias);
+ gtk_widget_hide (self->priv->widget_alias);
+ gtk_widget_hide (self->priv->hbox_presence);
+ gtk_widget_hide (self->priv->widget_avatar);
}
}
static void
-contact_widget_set_contact (EmpathyContactWidget *information,
+contact_widget_set_contact (EmpathyContactWidget *self,
EmpathyContact *contact)
{
- if (contact == information->contact)
+ if (contact == self->priv->contact)
return;
- contact_widget_remove_contact (information);
+ contact_widget_remove_contact (self);
if (contact)
- information->contact = g_object_ref (contact);
+ self->priv->contact = g_object_ref (contact);
/* set the selected account to be the account this contact came from */
- if (contact && EMPATHY_IS_ACCOUNT_CHOOSER (information->widget_account)) {
+ if (contact && EMPATHY_IS_ACCOUNT_CHOOSER (self->priv->widget_account)) {
empathy_account_chooser_set_account (
- EMPATHY_ACCOUNT_CHOOSER (information->widget_account),
+ EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account),
empathy_contact_get_account (contact));
}
- /* Update information for widgets */
- contact_widget_contact_update (information);
- contact_widget_groups_update (information);
- contact_widget_details_update (information);
- contact_widget_client_update (information);
- contact_widget_location_update (information);
+ /* Update self for widgets */
+ contact_widget_contact_update (self);
+ contact_widget_groups_update (self);
+ contact_widget_details_update (self);
+ contact_widget_client_update (self);
+ contact_widget_location_update (self);
}
static void
-contact_widget_got_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
+contact_widget_got_contact_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- EmpathyContactWidget *information = user_data;
+ EmpathyContactWidget *self = user_data;
+ GError *error = NULL;
+ EmpathyContact *contact;
+
+ contact = empathy_client_factory_dup_contact_by_id_finish (
+ EMPATHY_CLIENT_FACTORY (source), result, &error);
- if (error != NULL)
+ if (contact == NULL)
{
DEBUG ("Error: %s", error->message);
- return;
+ g_error_free (error);
+ goto out;
}
- contact_widget_set_contact (information, contact);
+ contact_widget_set_contact (self, contact);
+
+ g_object_unref (contact);
+out:
+ g_object_unref (self);
}
static void
-contact_widget_change_contact (EmpathyContactWidget *information)
+contact_widget_change_contact (EmpathyContactWidget *self)
{
TpConnection *connection;
connection = empathy_account_chooser_get_connection (
- EMPATHY_ACCOUNT_CHOOSER (information->widget_account));
+ EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account));
if (!connection)
return;
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID)
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID)
{
const gchar *id;
- id = gtk_entry_get_text (GTK_ENTRY (information->widget_id));
+ id = gtk_entry_get_text (GTK_ENTRY (self->priv->widget_id));
if (!EMP_STR_EMPTY (id))
{
- empathy_tp_contact_factory_get_from_id (connection, id,
- contact_widget_got_contact_cb, information, NULL,
- G_OBJECT (information->vbox_contact_widget));
+ EmpathyClientFactory *factory;
+
+ factory = empathy_client_factory_dup ();
+
+ empathy_client_factory_dup_contact_by_id_async (factory, connection,
+ id, contact_widget_got_contact_cb, g_object_ref (self));
+
+ g_object_unref (factory);
}
}
else
{
- empathy_tp_contact_factory_get_from_handle (connection,
- tp_connection_get_self_handle (connection),
- contact_widget_got_contact_cb, information, NULL,
- G_OBJECT (information->vbox_contact_widget));
+ EmpathyContact *contact;
+
+ contact = empathy_contact_dup_from_tp_contact (
+ tp_connection_get_self_contact (connection));
+
+ contact_widget_set_contact (self, contact);
+ g_object_unref (contact);
}
}
@@ -1552,12 +1567,12 @@ static void
contact_widget_id_changed_cb (GtkEntry *entry,
EmpathyContactWidget *self)
{
- if (self->widget_id_timeout != 0)
+ if (self->priv->widget_id_timeout != 0)
{
- g_source_remove (self->widget_id_timeout);
+ g_source_remove (self->priv->widget_id_timeout);
}
- self->widget_id_timeout =
+ self->priv->widget_id_timeout =
g_timeout_add_seconds (ID_CHANGED_TIMEOUT,
(GSourceFunc) contact_widget_id_activate_timeout, self);
}
@@ -1565,175 +1580,180 @@ contact_widget_id_changed_cb (GtkEntry *entry,
static gboolean
contact_widget_id_focus_out_cb (GtkWidget *widget,
GdkEventFocus *event,
- EmpathyContactWidget *information)
+ EmpathyContactWidget *self)
{
- contact_widget_change_contact (information);
+ contact_widget_change_contact (self);
return FALSE;
}
static void
-contact_widget_contact_setup (EmpathyContactWidget *information)
+contact_widget_contact_setup (EmpathyContactWidget *self)
{
- information->label_status = gtk_label_new ("");
- gtk_label_set_line_wrap_mode (GTK_LABEL (information->label_status),
+ self->priv->label_status = gtk_label_new ("");
+ gtk_label_set_line_wrap_mode (GTK_LABEL (self->priv->label_status),
PANGO_WRAP_WORD_CHAR);
- gtk_label_set_line_wrap (GTK_LABEL (information->label_status),
+ gtk_label_set_line_wrap (GTK_LABEL (self->priv->label_status),
TRUE);
- gtk_misc_set_alignment (GTK_MISC (information->label_status), 0, 0.5);
+ gtk_misc_set_alignment (GTK_MISC (self->priv->label_status), 0, 0.5);
- if (!(information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP))
- gtk_label_set_selectable (GTK_LABEL (information->label_status), TRUE);
+ if (!(self->priv->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP))
+ gtk_label_set_selectable (GTK_LABEL (self->priv->label_status), TRUE);
- gtk_box_pack_start (GTK_BOX (information->hbox_presence),
- information->label_status, TRUE, TRUE, 0);
- gtk_widget_show (information->label_status);
+ gtk_box_pack_start (GTK_BOX (self->priv->hbox_presence),
+ self->priv->label_status, TRUE, TRUE, 0);
+ gtk_widget_show (self->priv->label_status);
/* Setup account label/chooser */
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT)
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT)
{
- information->widget_account = empathy_account_chooser_new ();
+ self->priv->widget_account = empathy_account_chooser_new ();
- g_signal_connect_swapped (information->widget_account, "changed",
+ g_signal_connect_swapped (self->priv->widget_account, "changed",
G_CALLBACK (contact_widget_change_contact),
- information);
+ self);
}
- else if (information->flags & EMPATHY_CONTACT_WIDGET_NO_ACCOUNT)
+ else if (self->priv->flags & EMPATHY_CONTACT_WIDGET_NO_ACCOUNT)
{
/* Don't display the account */
- gtk_widget_hide (information->label_left_account);
+ gtk_widget_hide (self->priv->label_left_account);
}
else
{
/* Pack the protocol icon with the account name in an hbox */
- information->widget_account = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ self->priv->widget_account = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- information->label_account = gtk_label_new (NULL);
- if (!(information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP)) {
- gtk_label_set_selectable (GTK_LABEL (information->label_account), TRUE);
+ self->priv->label_account = gtk_label_new (NULL);
+ if (!(self->priv->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP)) {
+ gtk_label_set_selectable (GTK_LABEL (self->priv->label_account), TRUE);
}
- gtk_misc_set_alignment (GTK_MISC (information->label_account), 0, 0.5);
- gtk_widget_show (information->label_account);
+ gtk_misc_set_alignment (GTK_MISC (self->priv->label_account), 0, 0.5);
+ gtk_widget_show (self->priv->label_account);
- information->image_account = gtk_image_new ();
- gtk_widget_show (information->image_account);
+ self->priv->image_account = gtk_image_new ();
+ gtk_widget_show (self->priv->image_account);
- gtk_box_pack_start (GTK_BOX (information->widget_account),
- information->image_account, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (information->widget_account),
- information->label_account, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (self->priv->widget_account),
+ self->priv->image_account, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (self->priv->widget_account),
+ self->priv->label_account, FALSE, TRUE, 0);
}
- if (information->widget_account != NULL)
+ if (self->priv->widget_account != NULL)
{
- gtk_grid_attach (GTK_GRID (information->grid_contact),
- information->widget_account,
+ gtk_grid_attach (GTK_GRID (self->priv->grid_contact),
+ self->priv->widget_account,
1, 0, 1, 1);
- gtk_widget_show (information->widget_account);
+ gtk_widget_show (self->priv->widget_account);
}
/* Set up avatar chooser/display */
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_AVATAR)
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_AVATAR)
{
- information->widget_avatar = empathy_avatar_chooser_new ();
- g_signal_connect (information->widget_avatar, "changed",
+ self->priv->widget_avatar = empathy_avatar_chooser_new ();
+ g_signal_connect (self->priv->widget_avatar, "changed",
G_CALLBACK (contact_widget_avatar_changed_cb),
- information);
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT)
+ self);
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT)
{
- g_signal_connect (information->widget_account, "changed",
+ g_signal_connect (self->priv->widget_account, "changed",
G_CALLBACK (update_avatar_chooser_account_cb),
- information->widget_avatar);
+ self->priv->widget_avatar);
update_avatar_chooser_account_cb (
- EMPATHY_ACCOUNT_CHOOSER (information->widget_account),
- EMPATHY_AVATAR_CHOOSER (information->widget_avatar));
+ EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account),
+ EMPATHY_AVATAR_CHOOSER (self->priv->widget_avatar));
}
}
else
{
- information->widget_avatar = empathy_avatar_image_new ();
+ self->priv->widget_avatar = empathy_avatar_image_new ();
- g_signal_connect (information->widget_avatar, "popup-menu",
- G_CALLBACK (widget_avatar_popup_menu_cb), information);
- g_signal_connect (information->widget_avatar, "button-press-event",
- G_CALLBACK (widget_avatar_button_press_event_cb), information);
+ g_signal_connect (self->priv->widget_avatar, "popup-menu",
+ G_CALLBACK (widget_avatar_popup_menu_cb), self);
+ g_signal_connect (self->priv->widget_avatar, "button-press-event",
+ G_CALLBACK (widget_avatar_button_press_event_cb), self);
}
- gtk_box_pack_start (GTK_BOX (information->vbox_avatar),
- information->widget_avatar,
+ gtk_box_pack_start (GTK_BOX (self->priv->vbox_avatar),
+ self->priv->widget_avatar,
FALSE, FALSE,
6);
- gtk_widget_show (information->widget_avatar);
+ gtk_widget_show (self->priv->widget_avatar);
/* Setup id label/entry */
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID)
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID)
{
- information->widget_id = gtk_entry_new ();
- g_signal_connect (information->widget_id, "focus-out-event",
+ self->priv->widget_id = gtk_entry_new ();
+ g_signal_connect (self->priv->widget_id, "focus-out-event",
G_CALLBACK (contact_widget_id_focus_out_cb),
- information);
- g_signal_connect (information->widget_id, "changed",
+ self);
+ g_signal_connect (self->priv->widget_id, "changed",
G_CALLBACK (contact_widget_id_changed_cb),
- information);
+ self);
}
else
{
- information->widget_id = gtk_label_new (NULL);
- if (!(information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP)) {
- gtk_label_set_selectable (GTK_LABEL (information->widget_id), TRUE);
+ self->priv->widget_id = gtk_label_new (NULL);
+ if (!(self->priv->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP)) {
+ gtk_label_set_selectable (GTK_LABEL (self->priv->widget_id), TRUE);
}
- gtk_misc_set_alignment (GTK_MISC (information->widget_id), 0, 0.5);
+ gtk_misc_set_alignment (GTK_MISC (self->priv->widget_id), 0, 0.5);
}
- gtk_grid_attach (GTK_GRID (information->grid_contact), information->widget_id,
+ gtk_grid_attach (GTK_GRID (self->priv->grid_contact), self->priv->widget_id,
1, 1, 1, 1);
- gtk_widget_show (information->widget_id);
+ gtk_widget_show (self->priv->widget_id);
/* Setup alias label/entry */
- if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ALIAS)
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ALIAS)
{
- information->widget_alias = gtk_entry_new ();
+ self->priv->widget_alias = gtk_entry_new ();
- if (!(information->flags & EMPATHY_CONTACT_WIDGET_NO_SET_ALIAS))
- g_signal_connect (information->widget_alias, "focus-out-event",
+ if (!(self->priv->flags & EMPATHY_CONTACT_WIDGET_NO_SET_ALIAS))
+ g_signal_connect (self->priv->widget_alias, "focus-out-event",
G_CALLBACK (contact_widget_entry_alias_focus_event_cb),
- information);
+ self);
/* Make return activate the window default (the Close button) */
- gtk_entry_set_activates_default (GTK_ENTRY (information->widget_alias),
+ gtk_entry_set_activates_default (GTK_ENTRY (self->priv->widget_alias),
TRUE);
}
else
{
- information->widget_alias = gtk_label_new (NULL);
- if (!(information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP)) {
- gtk_label_set_selectable (GTK_LABEL (information->widget_alias), TRUE);
+ self->priv->widget_alias = gtk_label_new (NULL);
+ if (!(self->priv->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP)) {
+ gtk_label_set_selectable (GTK_LABEL (self->priv->widget_alias), TRUE);
}
- gtk_misc_set_alignment (GTK_MISC (information->widget_alias), 0, 0.5);
+ gtk_misc_set_alignment (GTK_MISC (self->priv->widget_alias), 0, 0.5);
}
- gtk_grid_attach (GTK_GRID (information->grid_contact),
- information->widget_alias, 1, 2, 1, 1);
+ gtk_grid_attach (GTK_GRID (self->priv->grid_contact),
+ self->priv->widget_alias, 1, 2, 1, 1);
- if (information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP) {
- gtk_label_set_selectable (GTK_LABEL (information->label_status), FALSE);
+ if (self->priv->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP) {
+ gtk_label_set_selectable (GTK_LABEL (self->priv->label_status), FALSE);
}
- gtk_widget_show (information->widget_alias);
+ gtk_widget_show (self->priv->widget_alias);
}
static void
-contact_widget_destroy_cb (GtkWidget *widget,
- EmpathyContactWidget *information)
+empathy_contact_widget_finalize (GObject *object)
{
- contact_widget_remove_contact (information);
+ EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (object);
+ void (*chain_up) (GObject *) =
+ ((GObjectClass *) empathy_contact_widget_parent_class)->finalize;
- if (information->widget_id_timeout != 0)
+ contact_widget_remove_contact (self);
+
+ if (self->priv->widget_id_timeout != 0)
{
- g_source_remove (information->widget_id_timeout);
+ g_source_remove (self->priv->widget_id_timeout);
}
- g_slice_free (EmpathyContactWidget, information);
+
+ if (chain_up != NULL)
+ chain_up (object);
}
/**
@@ -1749,64 +1769,61 @@ GtkWidget *
empathy_contact_widget_new (EmpathyContact *contact,
EmpathyContactWidgetFlags flags)
{
- EmpathyContactWidget *information;
- GtkBuilder *gui;
+ EmpathyContactWidget *self;
gchar *filename;
+ GtkWidget *main_vbox;
+ GtkBuilder *gui;
g_return_val_if_fail (contact == NULL || EMPATHY_IS_CONTACT (contact), NULL);
- information = g_slice_new0 (EmpathyContactWidget);
- information->flags = flags;
+ self = g_object_new (EMPATHY_TYPE_CONTACT_WIDGET, NULL);
+
+ self->priv->flags = flags;
filename = empathy_file_lookup ("empathy-contact-widget.ui",
"libempathy-gtk");
gui = empathy_builder_get_file (filename,
- "vbox_contact_widget", &information->vbox_contact_widget,
- "hbox_presence", &information->hbox_presence,
- "label_alias", &information->label_alias,
- "image_state", &information->image_state,
- "grid_contact", &information->grid_contact,
- "vbox_avatar", &information->vbox_avatar,
- "vbox_location", &information->vbox_location,
- "subvbox_location", &information->subvbox_location,
- "label_location", &information->label_location,
+ "vbox_contact_widget", &main_vbox,
+ "hbox_presence", &self->priv->hbox_presence,
+ "label_alias", &self->priv->label_alias,
+ "image_state", &self->priv->image_state,
+ "grid_contact", &self->priv->grid_contact,
+ "vbox_avatar", &self->priv->vbox_avatar,
+ "vbox_location", &self->priv->vbox_location,
+ "subvbox_location", &self->priv->subvbox_location,
+ "label_location", &self->priv->label_location,
#ifdef HAVE_LIBCHAMPLAIN
- "viewport_map", &information->viewport_map,
+ "viewport_map", &self->priv->viewport_map,
#endif
- "groups_widget", &information->groups_widget,
- "vbox_details", &information->vbox_details,
- "grid_details", &information->grid_details,
- "hbox_details_requested", &information->hbox_details_requested,
- "vbox_client", &information->vbox_client,
- "grid_client", &information->grid_client,
- "hbox_client_requested", &information->hbox_client_requested,
- "label_details", &information->label_details,
- "label_left_account", &information->label_left_account,
+ "groups_widget", &self->priv->groups_widget,
+ "vbox_details", &self->priv->vbox_details,
+ "grid_details", &self->priv->grid_details,
+ "hbox_details_requested", &self->priv->hbox_details_requested,
+ "vbox_client", &self->priv->vbox_client,
+ "grid_client", &self->priv->grid_client,
+ "hbox_client_requested", &self->priv->hbox_client_requested,
+ "label_details", &self->priv->label_details,
+ "label_left_account", &self->priv->label_left_account,
NULL);
g_free (filename);
- empathy_builder_connect (gui, information,
- "vbox_contact_widget", "destroy", contact_widget_destroy_cb,
- NULL);
- information->grid_location = NULL;
-
- g_object_set_data (G_OBJECT (information->vbox_contact_widget),
- "EmpathyContactWidget",
- information);
+ gtk_container_add (GTK_CONTAINER (self), main_vbox);
+ gtk_widget_show (GTK_WIDGET (main_vbox));
/* Create widgets */
- contact_widget_contact_setup (information);
- contact_widget_details_setup (information);
- contact_widget_client_setup (information);
+ contact_widget_contact_setup (self);
+ contact_widget_details_setup (self);
+ contact_widget_client_setup (self);
if (contact != NULL)
- contact_widget_set_contact (information, contact);
- else if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT ||
- information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID)
- contact_widget_change_contact (information);
+ contact_widget_set_contact (self, contact);
+ else if (self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT ||
+ self->priv->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID)
+ contact_widget_change_contact (self);
+
+ g_object_unref (gui);
- return empathy_builder_unref_and_keep_widget (gui,
- information->vbox_contact_widget);
+ return GTK_WIDGET (self);
}
/**
@@ -1820,29 +1837,17 @@ empathy_contact_widget_new (EmpathyContact *contact,
EmpathyContact *
empathy_contact_widget_get_contact (GtkWidget *widget)
{
- EmpathyContactWidget *information;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+ EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (widget);
- information = g_object_get_data (G_OBJECT (widget), "EmpathyContactWidget");
- if (!information)
- return NULL;
-
- return information->contact;
+ return self->priv->contact;
}
const gchar *
empathy_contact_widget_get_alias (GtkWidget *widget)
{
- EmpathyContactWidget *information;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
-
- information = g_object_get_data (G_OBJECT (widget), "EmpathyContactWidget");
- if (!information)
- return NULL;
+ EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (widget);
- return gtk_entry_get_text (GTK_ENTRY (information->widget_alias));
+ return gtk_entry_get_text (GTK_ENTRY (self->priv->widget_alias));
}
/**
@@ -1856,16 +1861,11 @@ void
empathy_contact_widget_set_contact (GtkWidget *widget,
EmpathyContact *contact)
{
- EmpathyContactWidget *information;
+ EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (widget);
- g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (EMPATHY_IS_CONTACT (contact));
- information = g_object_get_data (G_OBJECT (widget), "EmpathyContactWidget");
- if (!information)
- return;
-
- contact_widget_set_contact (information, contact);
+ contact_widget_set_contact (self, contact);
}
/**
@@ -1883,17 +1883,28 @@ empathy_contact_widget_set_account_filter (
EmpathyAccountChooserFilterFunc filter,
gpointer user_data)
{
- EmpathyContactWidget *information;
+ EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (widget);
EmpathyAccountChooser *chooser;
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
- information = g_object_get_data (G_OBJECT (widget), "EmpathyContactWidget");
- if (!information)
- return;
-
- chooser = EMPATHY_ACCOUNT_CHOOSER (information->widget_account);
+ chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account);
if (chooser)
empathy_account_chooser_set_filter (chooser, filter, user_data);
}
+static void
+empathy_contact_widget_class_init (
+ EmpathyContactWidgetClass *klass)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (klass);
+
+ oclass->finalize = empathy_contact_widget_finalize;
+
+ g_type_class_add_private (klass, sizeof (EmpathyContactWidgetPriv));
+}
+
+static void
+empathy_contact_widget_init (EmpathyContactWidget *self)
+{
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ EMPATHY_TYPE_CONTACT_WIDGET, EmpathyContactWidgetPriv);
+}
diff --git a/libempathy-gtk/empathy-contact-widget.h b/libempathy-gtk/empathy-contact-widget.h
index a50f9fa3e..bf4acaf8e 100644
--- a/libempathy-gtk/empathy-contact-widget.h
+++ b/libempathy-gtk/empathy-contact-widget.h
@@ -29,6 +29,47 @@
G_BEGIN_DECLS
+typedef struct _EmpathyContactWidget EmpathyContactWidget;
+typedef struct _EmpathyContactWidgetClass EmpathyContactWidgetClass;
+typedef struct _EmpathyContactWidgetPriv EmpathyContactWidgetPriv;
+
+struct _EmpathyContactWidgetClass
+{
+ /*<private>*/
+ GtkBoxClass parent_class;
+};
+
+struct _EmpathyContactWidget
+{
+ /*<private>*/
+ GtkBox parent;
+ EmpathyContactWidgetPriv *priv;
+};
+
+GType empathy_contact_widget_get_type (void);
+
+/* TYPE MACROS */
+#define EMPATHY_TYPE_CONTACT_WIDGET \
+ (empathy_contact_widget_get_type ())
+#define EMPATHY_CONTACT_WIDGET(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+ EMPATHY_TYPE_CONTACT_WIDGET, \
+ EmpathyContactWidget))
+#define EMPATHY_CONTACT_WIDGET_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), \
+ EMPATHY_TYPE_CONTACT_WIDGET, \
+ EmpathyContactWidgetClass))
+#define EMPATHY_IS_CONTACT_WIDGET(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
+ EMPATHY_TYPE_CONTACT_WIDGET))
+#define EMPATHY_IS_CONTACT_WIDGET_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), \
+ EMPATHY_TYPE_CONTACT_WIDGET))
+#define EMPATHY_CONTACT_WIDGET_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ EMPATHY_TYPE_CONTACT_WIDGET, \
+ EmpathyContactWidgetClass))
+
/**
* EmpathyContactWidgetFlags:
* @EMPATHY_CONTACT_WIDGET_EDIT_NONE: Don't show any widgets to edit any details
diff --git a/libempathy-gtk/empathy-images.h b/libempathy-gtk/empathy-images.h
index 2962ad6a6..884c5714b 100644
--- a/libempathy-gtk/empathy-images.h
+++ b/libempathy-gtk/empathy-images.h
@@ -45,7 +45,7 @@ G_BEGIN_DECLS
#define EMPATHY_IMAGE_VIDEO_CALL "camera-web"
#define EMPATHY_IMAGE_LOG "document-open-recent"
#define EMPATHY_IMAGE_DOCUMENT_SEND "document-send"
-#define EMPATHY_IMAGE_AVATAR_DEFAULT "avatar-default"
+#define EMPATHY_IMAGE_AVATAR_DEFAULT "avatar-default-symbolic"
/* FIXME: need a better icon! */
#define EMPATHY_IMAGE_EDIT_MESSAGE "format-text-direction-ltr"
diff --git a/libempathy-gtk/empathy-individual-menu.c b/libempathy-gtk/empathy-individual-menu.c
index 22d314882..7f65735b8 100644
--- a/libempathy-gtk/empathy-individual-menu.c
+++ b/libempathy-gtk/empathy-individual-menu.c
@@ -38,7 +38,6 @@
#include <libempathy/empathy-individual-manager.h>
#include <libempathy/empathy-chatroom-manager.h>
#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-contact-list.h>
#include <libempathy/empathy-pkg-kit.h>
#include "empathy-account-selector-dialog.h"
@@ -1560,8 +1559,7 @@ room_sub_menu_activate_cb (GtkWidget *item,
g_return_if_fail (EMPATHY_IS_CONTACT (contact));
/* send invitation */
- empathy_contact_list_add (EMPATHY_CONTACT_LIST (chat),
- contact, _("Inviting you to this room"));
+ empathy_tp_chat_add (chat, contact, _("Inviting you to this room"));
out:
g_object_unref (contact);
diff --git a/libempathy-gtk/empathy-individual-store-channel.c b/libempathy-gtk/empathy-individual-store-channel.c
index 76ff74e25..e5edb2642 100644
--- a/libempathy-gtk/empathy-individual-store-channel.c
+++ b/libempathy-gtk/empathy-individual-store-channel.c
@@ -139,22 +139,14 @@ group_contacts_changed_cb (TpChannel *channel,
}
static void
-channel_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
+individual_store_channel_set_individual_channel (
+ EmpathyIndividualStoreChannel *self,
+ TpChannel *channel)
{
- EmpathyIndividualStoreChannel *self = user_data;
- TpChannel *channel = (TpChannel *) source;
- GError *error = NULL;
GPtrArray *members;
- if (!tp_proxy_prepare_finish (source, result, &error))
- {
- DEBUG ("Failed to prepare %s: %s", tp_proxy_get_object_path (source),
- error->message);
-
- g_error_free (error);
- }
+ g_assert (self->priv->channel == NULL); /* construct only */
+ self->priv->channel = g_object_ref (channel);
/* Add initial members */
members = tp_channel_group_dup_members_contacts (channel);
@@ -169,19 +161,6 @@ channel_prepare_cb (GObject *source,
}
static void
-individual_store_channel_set_individual_channel (
- EmpathyIndividualStoreChannel *self,
- TpChannel *channel)
-{
- GQuark features[] = { TP_CHANNEL_FEATURE_CONTACTS, 0 };
-
- g_assert (self->priv->channel == NULL); /* construct only */
- self->priv->channel = g_object_ref (channel);
-
- tp_proxy_prepare_async (channel, features, channel_prepare_cb, self);
-}
-
-static void
individual_store_channel_dispose (GObject *object)
{
EmpathyIndividualStoreChannel *self = EMPATHY_INDIVIDUAL_STORE_CHANNEL (
diff --git a/libempathy-gtk/empathy-individual-store.h b/libempathy-gtk/empathy-individual-store.h
index 61fd4b8d8..402f451b8 100644
--- a/libempathy-gtk/empathy-individual-store.h
+++ b/libempathy-gtk/empathy-individual-store.h
@@ -28,6 +28,7 @@
#define __EMPATHY_INDIVIDUAL_STORE_H__
#include <gtk/gtk.h>
+#include <folks/folks.h>
G_BEGIN_DECLS
#define EMPATHY_TYPE_INDIVIDUAL_STORE (empathy_individual_store_get_type ())
diff --git a/libempathy-gtk/empathy-individual-view.c b/libempathy-gtk/empathy-individual-view.c
index 54712d25a..c04812415 100644
--- a/libempathy-gtk/empathy-individual-view.c
+++ b/libempathy-gtk/empathy-individual-view.c
@@ -38,6 +38,7 @@
#include <folks/folks.h>
#include <folks/folks-telepathy.h>
+#include <libempathy/empathy-connection-aggregator.h>
#include <libempathy/empathy-individual-manager.h>
#include <libempathy/empathy-contact-groups.h>
#include <libempathy/empathy-request-util.h>
@@ -90,6 +91,8 @@ typedef struct
GtkTreeModelFilterVisibleFunc custom_filter;
gpointer custom_filter_data;
+
+ GtkCellRenderer *text_renderer;
} EmpathyIndividualViewPriv;
typedef struct
@@ -1811,10 +1814,62 @@ individual_view_filter_visible_func (GtkTreeModel *model,
return FALSE;
}
+static gchar * empathy_individual_view_dup_selected_group (
+ EmpathyIndividualView *view,
+ gboolean *is_fake_group);
+
+static void
+text_edited_cb (GtkCellRendererText *cellrenderertext,
+ gchar *path,
+ gchar *name,
+ EmpathyIndividualView *self)
+{
+ EmpathyIndividualViewPriv *priv = GET_PRIV (self);
+ gchar *old_name, *new_name;
+
+ g_object_set (priv->text_renderer, "editable", FALSE, NULL);
+
+ new_name = g_strdup (name);
+ g_strstrip (new_name);
+
+ if (tp_str_empty (new_name))
+ goto out;
+
+ old_name = empathy_individual_view_dup_selected_group (self, NULL);
+ g_return_if_fail (old_name != NULL);
+
+ if (tp_strdiff (old_name, new_name))
+ {
+ EmpathyConnectionAggregator *aggregator;
+
+ DEBUG ("rename group '%s' to '%s'", old_name, new_name);
+
+ aggregator = empathy_connection_aggregator_dup_singleton ();
+
+ empathy_connection_aggregator_rename_group (aggregator, old_name,
+ new_name);
+ g_object_unref (aggregator);
+ }
+
+ g_free (old_name);
+out:
+ g_free (new_name);
+}
+
+static void
+text_renderer_editing_cancelled_cb (GtkCellRenderer *renderer,
+ EmpathyIndividualView *self)
+{
+ EmpathyIndividualViewPriv *priv = GET_PRIV (self);
+
+ g_object_set (priv->text_renderer, "editable", FALSE, NULL);
+}
+
static void
individual_view_constructed (GObject *object)
{
EmpathyIndividualView *view = EMPATHY_INDIVIDUAL_VIEW (object);
+ EmpathyIndividualViewPriv *priv = GET_PRIV (view);
GtkCellRenderer *cell;
GtkTreeViewColumn *col;
guint i;
@@ -1856,26 +1911,31 @@ individual_view_constructed (GObject *object)
NULL);
/* Name */
- cell = empathy_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (col, cell, TRUE);
- gtk_tree_view_column_set_cell_data_func (col, cell,
+ priv->text_renderer = empathy_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (col, priv->text_renderer, TRUE);
+ gtk_tree_view_column_set_cell_data_func (col, priv->text_renderer,
(GtkTreeCellDataFunc) individual_view_text_cell_data_func, view, NULL);
- gtk_tree_view_column_add_attribute (col, cell,
+ gtk_tree_view_column_add_attribute (col, priv->text_renderer,
"name", EMPATHY_INDIVIDUAL_STORE_COL_NAME);
- gtk_tree_view_column_add_attribute (col, cell,
+ gtk_tree_view_column_add_attribute (col, priv->text_renderer,
"text", EMPATHY_INDIVIDUAL_STORE_COL_NAME);
- gtk_tree_view_column_add_attribute (col, cell,
+ gtk_tree_view_column_add_attribute (col, priv->text_renderer,
"presence-type", EMPATHY_INDIVIDUAL_STORE_COL_PRESENCE_TYPE);
- gtk_tree_view_column_add_attribute (col, cell,
+ gtk_tree_view_column_add_attribute (col, priv->text_renderer,
"status", EMPATHY_INDIVIDUAL_STORE_COL_STATUS);
- gtk_tree_view_column_add_attribute (col, cell,
+ gtk_tree_view_column_add_attribute (col, priv->text_renderer,
"is_group", EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP);
- gtk_tree_view_column_add_attribute (col, cell,
+ gtk_tree_view_column_add_attribute (col, priv->text_renderer,
"compact", EMPATHY_INDIVIDUAL_STORE_COL_COMPACT);
- gtk_tree_view_column_add_attribute (col, cell,
+ gtk_tree_view_column_add_attribute (col, priv->text_renderer,
"client-types", EMPATHY_INDIVIDUAL_STORE_COL_CLIENT_TYPES);
+ g_signal_connect (priv->text_renderer, "editing-canceled",
+ G_CALLBACK (text_renderer_editing_cancelled_cb), view);
+ g_signal_connect (priv->text_renderer, "edited",
+ G_CALLBACK (text_edited_cb), view);
+
/* Audio Call Icon */
cell = empathy_cell_renderer_activatable_new ();
gtk_tree_view_column_pack_start (col, cell, FALSE);
@@ -2354,6 +2414,31 @@ individual_view_group_remove_activate_cb (GtkMenuItem *menuitem,
g_free (group);
}
+static void
+individual_view_group_rename_activate_cb (GtkMenuItem *menuitem,
+ EmpathyIndividualView *self)
+{
+ EmpathyIndividualViewPriv *priv = GET_PRIV (self);
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self));
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+ path = gtk_tree_model_get_path (model, &iter);
+
+ g_object_set (G_OBJECT (priv->text_renderer), "editable", TRUE, NULL);
+
+ gtk_tree_view_set_enable_search (GTK_TREE_VIEW (self), FALSE);
+ gtk_widget_grab_focus (GTK_WIDGET (self));
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (self), path,
+ gtk_tree_view_get_column (GTK_TREE_VIEW (self), 0), TRUE);
+
+ gtk_tree_path_free (path);
+}
+
GtkWidget *
empathy_individual_view_get_group_menu (EmpathyIndividualView *view)
{
@@ -2380,17 +2465,14 @@ empathy_individual_view_get_group_menu (EmpathyIndividualView *view)
menu = gtk_menu_new ();
- /* TODO: implement
- if (priv->view_features &
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_RENAME) {
- item = gtk_menu_item_new_with_mnemonic (_("Re_name"));
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- gtk_widget_show (item);
- g_signal_connect (item, "activate",
- G_CALLBACK (individual_view_group_rename_activate_cb),
- view);
+ if (priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_RENAME)
+ {
+ item = gtk_menu_item_new_with_mnemonic (_("Re_name"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+ g_signal_connect (item, "activate",
+ G_CALLBACK (individual_view_group_rename_activate_cb), view);
}
- */
if (priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_REMOVE)
{
diff --git a/libempathy-gtk/empathy-live-search.c b/libempathy-gtk/empathy-live-search.c
index 3dc77998c..f03aa9fe4 100644
--- a/libempathy-gtk/empathy-live-search.c
+++ b/libempathy-gtk/empathy-live-search.c
@@ -357,6 +357,14 @@ live_search_key_press_event_cb (GtkWidget *widget,
return FALSE;
}
+ /* Don't forward shift keys events as focusing the search entry would
+ * cancel an in-progress editing on a cell renderer (like when renaming a
+ * group). There is no point focusing it anyway as we don't display the
+ * search entry when only a shift key is pressed. */
+ if (event->keyval == GDK_KEY_Shift_L ||
+ event->keyval == GDK_KEY_Shift_R)
+ return FALSE;
+
/* realize the widget if it is not realized yet */
gtk_widget_realize (priv->search_entry);
if (!gtk_widget_has_focus (priv->search_entry))
diff --git a/libempathy-gtk/empathy-local-xmpp-assistant-widget.c b/libempathy-gtk/empathy-local-xmpp-assistant-widget.c
index 9caca7de9..cf3803928 100644
--- a/libempathy-gtk/empathy-local-xmpp-assistant-widget.c
+++ b/libempathy-gtk/empathy-local-xmpp-assistant-widget.c
@@ -137,8 +137,7 @@ empathy_local_xmpp_assistant_widget_constructed (GObject *object)
object;
GtkWidget *w;
GdkPixbuf *pix;
- GtkWidget *account_widget;
- EmpathyAccountWidget *widget_object;
+ EmpathyAccountWidget *account_widget;
gchar *markup;
G_OBJECT_CLASS (empathy_local_xmpp_assistant_widget_parent_class)->
@@ -165,17 +164,15 @@ empathy_local_xmpp_assistant_widget_constructed (GObject *object)
self->priv->settings = create_salut_account_settings ();
- widget_object = empathy_account_widget_new_for_protocol (self->priv->settings,
- TRUE);
- empathy_account_widget_hide_buttons (widget_object);
+ account_widget = empathy_account_widget_new_for_protocol (
+ self->priv->settings, TRUE);
+ empathy_account_widget_hide_buttons (account_widget);
- account_widget = empathy_account_widget_get_widget (widget_object);
-
- g_signal_connect (widget_object, "handle-apply",
+ g_signal_connect (account_widget, "handle-apply",
G_CALLBACK (handle_apply_cb), self);
- gtk_grid_attach (GTK_GRID (self), account_widget, 0, 1, 2, 1);
- gtk_widget_show (account_widget);
+ gtk_grid_attach (GTK_GRID (self), GTK_WIDGET (account_widget), 0, 1, 2, 1);
+ gtk_widget_show (GTK_WIDGET (account_widget));
w = gtk_label_new (NULL);
markup = g_strdup_printf (
diff --git a/libempathy-gtk/empathy-new-account-dialog.c b/libempathy-gtk/empathy-new-account-dialog.c
index cab22ea4d..ed09be829 100644
--- a/libempathy-gtk/empathy-new-account-dialog.c
+++ b/libempathy-gtk/empathy-new-account-dialog.c
@@ -34,27 +34,19 @@ G_DEFINE_TYPE (EmpathyNewAccountDialog, empathy_new_account_dialog, \
struct _EmpathyNewAccountDialogPrivate
{
GtkWidget *chooser;
- GtkWidget *current_account_widget;
+ EmpathyAccountWidget *current_account_widget;
GtkWidget *main_vbox;
GtkWidget *connect_button;
- EmpathyAccountWidget *current_widget_object;
EmpathyAccountSettings *settings;
};
static void
-account_created_cb (EmpathyAccountWidget *widget,
- TpAccount *account,
+close_cb (EmpathyAccountWidget *widget,
+ GtkResponseType response,
EmpathyNewAccountDialog *self)
{
- gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_OK);
-}
-
-static void
-cancelled_cb (EmpathyAccountWidget *widget,
- EmpathyNewAccountDialog *self)
-{
- gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CANCEL);
+ gtk_dialog_response (GTK_DIALOG (self), response);
}
static void
@@ -62,8 +54,7 @@ protocol_changed_cb (GtkComboBox *chooser,
EmpathyNewAccountDialog *self)
{
EmpathyAccountSettings *settings;
- GtkWidget *account_widget;
- EmpathyAccountWidget *widget_object;
+ EmpathyAccountWidget *account_widget;
gchar *password = NULL, *account = NULL;
settings = empathy_protocol_chooser_create_account_settings (
@@ -84,45 +75,39 @@ protocol_changed_cb (GtkComboBox *chooser,
g_object_unref (self->priv->settings);
}
- widget_object = empathy_account_widget_new_for_protocol (settings, TRUE);
- account_widget = empathy_account_widget_get_widget (widget_object);
+ account_widget = empathy_account_widget_new_for_protocol (settings, TRUE);
if (self->priv->current_account_widget != NULL)
{
- g_signal_handlers_disconnect_by_func (self->priv->current_widget_object,
- account_created_cb, self);
- g_signal_handlers_disconnect_by_func (self->priv->current_widget_object,
- cancelled_cb, self);
+ g_signal_handlers_disconnect_by_func (self->priv->current_account_widget,
+ close_cb, self);
- gtk_widget_destroy (self->priv->current_account_widget);
+ gtk_widget_destroy (GTK_WIDGET (self->priv->current_account_widget));
}
self->priv->current_account_widget = account_widget;
- self->priv->current_widget_object = widget_object;
self->priv->settings = settings;
- g_signal_connect (self->priv->current_widget_object, "account-created",
- G_CALLBACK (account_created_cb), self);
- g_signal_connect (self->priv->current_widget_object, "cancelled",
- G_CALLBACK (cancelled_cb), self);
+ g_signal_connect (self->priv->current_account_widget, "close",
+ G_CALLBACK (close_cb), self);
/* Restore "account" and "password" parameters in the new widget */
if (account != NULL)
{
- empathy_account_widget_set_account_param (widget_object, account);
+ empathy_account_widget_set_account_param (account_widget, account);
g_free (account);
}
if (password != NULL)
{
- empathy_account_widget_set_password_param (widget_object, password);
+ empathy_account_widget_set_password_param (account_widget, password);
g_free (password);
}
- gtk_box_pack_start (GTK_BOX (self->priv->main_vbox), account_widget,
- FALSE, FALSE, 0);
- gtk_widget_show (account_widget);
+ gtk_box_pack_start (GTK_BOX (self->priv->main_vbox),
+ GTK_WIDGET (account_widget), FALSE, FALSE, 0);
+ gtk_widget_show (GTK_WIDGET (account_widget));
}
static void
diff --git a/libempathy-gtk/empathy-new-call-dialog.c b/libempathy-gtk/empathy-new-call-dialog.c
index ba44721d3..079afe476 100644
--- a/libempathy-gtk/empathy-new-call-dialog.c
+++ b/libempathy-gtk/empathy-new-call-dialog.c
@@ -28,7 +28,6 @@
#include <telepathy-glib/interfaces.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-camera-monitor.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-request-util.h>
diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c
index 3fcff98f0..14199578f 100644
--- a/libempathy-gtk/empathy-new-message-dialog.c
+++ b/libempathy-gtk/empathy-new-message-dialog.c
@@ -28,7 +28,6 @@
#include <telepathy-glib/interfaces.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-request-util.h>
#include <libempathy/empathy-utils.h>
diff --git a/libempathy-gtk/empathy-plist.c b/libempathy-gtk/empathy-plist.c
index 73d31466a..1bd4d8ecf 100644
--- a/libempathy-gtk/empathy-plist.c
+++ b/libempathy-gtk/empathy-plist.c
@@ -169,34 +169,6 @@ empathy_plist_parse_dict (xmlNode *a_node)
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 {
@@ -211,7 +183,6 @@ static const struct Parser parsers[] = { {"integer", empathy_plist_parse_integer
{"false", empathy_plist_parse_boolean},
{"data", empathy_plist_parse_data},
{"dict", empathy_plist_parse_dict},
- {"array", empathy_plist_parse_array},
{NULL, NULL} };
static ParseCallback
diff --git a/libempathy-gtk/empathy-presence-chooser.c b/libempathy-gtk/empathy-presence-chooser.c
index 948a0a7bd..08325d402 100644
--- a/libempathy-gtk/empathy-presence-chooser.c
+++ b/libempathy-gtk/empathy-presence-chooser.c
@@ -36,7 +36,6 @@
#include <telepathy-glib/account-manager.h>
#include <telepathy-glib/util.h>
-#include <libempathy/empathy-connectivity.h>
#include <libempathy/empathy-presence-manager.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-status-presets.h>
@@ -97,7 +96,7 @@ typedef enum {
typedef struct {
EmpathyPresenceManager *presence_mgr;
- EmpathyConnectivity *connectivity;
+ GNetworkMonitor *connectivity;
gboolean editing_status;
int block_set_editing;
@@ -108,7 +107,6 @@ typedef struct {
PresenceChooserEntryType previous_type;
TpAccountManager *account_manager;
- GdkPixbuf *not_favorite_pixbuf;
} EmpathyPresenceChooserPriv;
/* States to be listed in the menu.
@@ -327,7 +325,6 @@ presence_chooser_is_preset (EmpathyPresenceChooser *self)
static void
presence_chooser_set_favorite_icon (EmpathyPresenceChooser *self)
{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
GtkWidget *entry;
PresenceChooserEntryType type;
@@ -339,16 +336,16 @@ presence_chooser_set_favorite_icon (EmpathyPresenceChooser *self)
/* saved entries can be removed from the list */
gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
GTK_ENTRY_ICON_SECONDARY,
- "emblem-favorite");
+ "starred-symbolic");
gtk_entry_set_icon_tooltip_text (GTK_ENTRY (entry),
GTK_ENTRY_ICON_SECONDARY,
_("Click to remove this status as a favorite"));
}
- else if (priv->not_favorite_pixbuf != NULL) {
+ else {
/* custom entries can be favorited */
- gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (entry),
+ gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
GTK_ENTRY_ICON_SECONDARY,
- priv->not_favorite_pixbuf);
+ "non-starred-symbolic");
gtk_entry_set_icon_tooltip_text (GTK_ENTRY (entry),
GTK_ENTRY_ICON_SECONDARY,
_("Click to make this status a favorite"));
@@ -378,8 +375,17 @@ presence_chooser_set_status_editing (EmpathyPresenceChooser *self,
entry = gtk_bin_get_child (GTK_BIN (self));
if (editing) {
+ gchar *tooltip_text;
+ gchar *status;
+
priv->editing_status = TRUE;
+ get_state_and_status (self, &status);
+ /* Translators: %s is a status message like 'At the pub' for example */
+ tooltip_text = g_strdup_printf (_("<b>Current message: %s</b>\n"
+ "<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"),
+ status);
+ gtk_widget_set_tooltip_markup (entry, tooltip_text);
gtk_entry_set_icon_from_stock (GTK_ENTRY (entry),
GTK_ENTRY_ICON_SECONDARY,
GTK_STOCK_OK);
@@ -389,6 +395,8 @@ presence_chooser_set_status_editing (EmpathyPresenceChooser *self,
gtk_entry_set_icon_sensitive (GTK_ENTRY (entry),
GTK_ENTRY_ICON_PRIMARY,
FALSE);
+ g_free (status);
+ g_free (tooltip_text);
} else {
GtkWidget *window;
@@ -764,7 +772,7 @@ update_sensitivity_am_prepared_cb (GObject *source_object,
g_list_free (accounts);
- if (!empathy_connectivity_is_online (priv->connectivity))
+ if (!g_network_monitor_get_network_available (priv->connectivity))
sensitive = FALSE;
gtk_widget_set_sensitive (GTK_WIDGET (chooser), sensitive);
@@ -802,47 +810,13 @@ presence_chooser_account_manager_account_changed_cb (
}
static void
-presence_chooser_connectivity_state_change (EmpathyConnectivity *connectivity,
+presence_chooser_network_change (GNetworkMonitor *connectivity,
gboolean new_online,
EmpathyPresenceChooser *chooser)
{
presence_chooser_update_sensitivity (chooser);
}
-/* Create a greyed version of the 'favorite' icon */
-static GdkPixbuf *
-create_not_favorite_pixbuf (void)
-{
- GdkPixbuf *favorite, *result;
-
- favorite = empathy_pixbuf_from_icon_name ("emblem-favorite",
- GTK_ICON_SIZE_MENU);
-
- if (favorite == NULL)
- return NULL;
-
- result = gdk_pixbuf_copy (favorite);
- gdk_pixbuf_saturate_and_pixelate (favorite, result, 1.0, TRUE);
-
- g_object_unref (favorite);
- return result;
-}
-
-static void
-icon_theme_changed_cb (GtkIconTheme *icon_theme,
- EmpathyPresenceChooser *self)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
-
- /* Theme has changed, recreate the not-favorite icon */
- if (priv->not_favorite_pixbuf != NULL)
- g_object_unref (priv->not_favorite_pixbuf);
- priv->not_favorite_pixbuf = create_not_favorite_pixbuf ();
-
- /* Update the icon */
- presence_chooser_set_favorite_icon (self);
-}
-
static void
empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
{
@@ -850,9 +824,6 @@ empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
EMPATHY_TYPE_PRESENCE_CHOOSER, EmpathyPresenceChooserPriv);
chooser->priv = priv;
-
- /* Create the not-favorite icon */
- priv->not_favorite_pixbuf = create_not_favorite_pixbuf ();
}
static void
@@ -864,10 +835,6 @@ presence_chooser_constructed (GObject *object)
GtkCellRenderer *renderer;
const gchar *status_tooltip;
- tp_g_signal_connect_object (gtk_icon_theme_get_default (), "changed",
- G_CALLBACK (icon_theme_changed_cb),
- chooser, 0);
-
presence_chooser_create_model (chooser);
gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX (chooser),
@@ -945,10 +912,12 @@ presence_chooser_constructed (GObject *object)
status_tooltip = gtk_entry_get_text (GTK_ENTRY (entry));
gtk_widget_set_tooltip_text (GTK_WIDGET (chooser), status_tooltip);
- priv->connectivity = empathy_connectivity_dup_singleton ();
+ priv->connectivity = g_network_monitor_get_default ();
+ g_object_ref (priv->connectivity);
+
tp_g_signal_connect_object (priv->connectivity,
- "state-change",
- G_CALLBACK (presence_chooser_connectivity_state_change),
+ "network-changed",
+ G_CALLBACK (presence_chooser_network_change),
chooser, 0);
presence_chooser_update_sensitivity (chooser);
@@ -974,8 +943,6 @@ presence_chooser_finalize (GObject *object)
g_object_unref (priv->presence_mgr);
g_object_unref (priv->connectivity);
- if (priv->not_favorite_pixbuf != NULL)
- g_object_unref (priv->not_favorite_pixbuf);
G_OBJECT_CLASS (empathy_presence_chooser_parent_class)->finalize (object);
}
diff --git a/libempathy-gtk/empathy-tls-dialog.c b/libempathy-gtk/empathy-tls-dialog.c
index 9fb2297a5..bf36e9acf 100644
--- a/libempathy-gtk/empathy-tls-dialog.c
+++ b/libempathy-gtk/empathy-tls-dialog.c
@@ -47,8 +47,8 @@ enum {
};
typedef struct {
- EmpathyTLSCertificate *certificate;
- EmpTLSCertificateRejectReason reason;
+ TpTLSCertificate *certificate;
+ TpTLSCertificateRejectReason reason;
GHashTable *details;
gboolean remember;
@@ -139,7 +139,7 @@ reason_to_string (EmpathyTLSDialog *self)
{
GString *str;
const gchar *reason_str;
- EmpTLSCertificateRejectReason reason;
+ TpTLSCertificateRejectReason reason;
GHashTable *details;
EmpathyTLSDialogPriv *priv = GET_PRIV (self);
@@ -153,37 +153,37 @@ reason_to_string (EmpathyTLSDialog *self)
switch (reason)
{
- case EMP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED:
reason_str = _("The certificate is not signed by a Certification "
"Authority.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_EXPIRED:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_EXPIRED:
reason_str = _("The certificate has expired.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_NOT_ACTIVATED:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_NOT_ACTIVATED:
reason_str = _("The certificate hasn't yet been activated.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_FINGERPRINT_MISMATCH:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_FINGERPRINT_MISMATCH:
reason_str = _("The certificate does not have the expected fingerprint.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH:
reason_str = _("The hostname verified by the certificate doesn't match "
"the server name.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED:
reason_str = _("The certificate is self-signed.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_REVOKED:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_REVOKED:
reason_str = _("The certificate has been revoked by the issuing "
"Certification Authority.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_INSECURE:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_INSECURE:
reason_str = _("The certificate is cryptographically weak.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_LIMIT_EXCEEDED:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_LIMIT_EXCEEDED:
reason_str = _("The certificate length exceeds verifiable limits.");
break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN:
+ case TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN:
default:
reason_str = _("The certificate is malformed.");
break;
@@ -192,7 +192,7 @@ reason_to_string (EmpathyTLSDialog *self)
g_string_append (str, reason_str);
/* add more information in case of HOSTNAME_MISMATCH */
- if (reason == EMP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH)
+ if (reason == TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH)
{
const gchar *expected_hostname, *certificate_hostname;
@@ -257,7 +257,7 @@ checkbox_toggled_cb (GtkToggleButton *checkbox,
}
static void
-certificate_invalidated_cb (EmpathyTLSCertificate *certificate,
+certificate_invalidated_cb (TpTLSCertificate *certificate,
guint domain,
gint code,
gchar *message,
@@ -340,16 +340,16 @@ empathy_tls_dialog_class_init (EmpathyTLSDialogClass *klass)
oclass->finalize = empathy_tls_dialog_finalize;
oclass->constructed = empathy_tls_dialog_constructed;
- pspec = g_param_spec_object ("certificate", "The EmpathyTLSCertificate",
- "The EmpathyTLSCertificate to be displayed.",
- EMPATHY_TYPE_TLS_CERTIFICATE,
+ pspec = g_param_spec_object ("certificate", "The TpTLSCertificate",
+ "The TpTLSCertificate to be displayed.",
+ TP_TYPE_TLS_CERTIFICATE,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (oclass, PROP_TLS_CERTIFICATE, pspec);
pspec = g_param_spec_uint ("reason", "The reason",
"The reason why the certificate is being asked for confirmation.",
- 0, NUM_EMP_TLS_CERTIFICATE_REJECT_REASONS - 1,
- EMP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN,
+ 0, NUM_TP_TLS_CERTIFICATE_REJECT_REASONS - 1,
+ TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (oclass, PROP_REASON, pspec);
@@ -367,11 +367,11 @@ empathy_tls_dialog_class_init (EmpathyTLSDialogClass *klass)
}
GtkWidget *
-empathy_tls_dialog_new (EmpathyTLSCertificate *certificate,
- EmpTLSCertificateRejectReason reason,
+empathy_tls_dialog_new (TpTLSCertificate *certificate,
+ TpTLSCertificateRejectReason reason,
GHashTable *details)
{
- g_assert (EMPATHY_IS_TLS_CERTIFICATE (certificate));
+ g_assert (TP_IS_TLS_CERTIFICATE (certificate));
return g_object_new (EMPATHY_TYPE_TLS_DIALOG,
"message-type", GTK_MESSAGE_WARNING,
diff --git a/libempathy-gtk/empathy-tls-dialog.h b/libempathy-gtk/empathy-tls-dialog.h
index fcf72fe9b..a9c37ad5e 100644
--- a/libempathy-gtk/empathy-tls-dialog.h
+++ b/libempathy-gtk/empathy-tls-dialog.h
@@ -24,9 +24,7 @@
#include <glib-object.h>
#include <gtk/gtk.h>
-#include <libempathy/empathy-tls-certificate.h>
-
-#include <extensions/extensions.h>
+#include <telepathy-glib/telepathy-glib.h>
G_BEGIN_DECLS
@@ -60,8 +58,8 @@ GType empathy_tls_dialog_get_type (void);
(G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_TLS_DIALOG, \
EmpathyTLSDialogClass))
-GtkWidget * empathy_tls_dialog_new (EmpathyTLSCertificate *certificate,
- EmpTLSCertificateRejectReason reason,
+GtkWidget * empathy_tls_dialog_new (TpTLSCertificate *certificate,
+ TpTLSCertificateRejectReason reason,
GHashTable *details);
G_END_DECLS
diff --git a/libempathy/Makefile.am b/libempathy/Makefile.am
index 3d7e5fca7..ab7de6825 100644
--- a/libempathy/Makefile.am
+++ b/libempathy/Makefile.am
@@ -34,10 +34,8 @@ libempathy_headers = \
empathy-chatroom.h \
empathy-client-factory.h \
empathy-connection-managers.h \
- empathy-connectivity.h \
empathy-connection-aggregator.h \
empathy-contact-groups.h \
- empathy-contact-list.h \
empathy-contact.h \
empathy-debug.h \
empathy-ft-factory.h \
@@ -57,12 +55,8 @@ libempathy_headers = \
empathy-server-tls-handler.h \
empathy-status-presets.h \
empathy-time.h \
- empathy-tls-certificate.h \
empathy-tls-verifier.h \
empathy-tp-chat.h \
- empathy-tp-contact-factory.h \
- empathy-tp-roomlist.h \
- empathy-tp-streamed-media.h \
empathy-types.h \
empathy-utils.h
@@ -76,10 +70,8 @@ libempathy_handwritten_source = \
empathy-chatroom.c \
empathy-client-factory.c \
empathy-connection-managers.c \
- empathy-connectivity.c \
empathy-connection-aggregator.c \
empathy-contact-groups.c \
- empathy-contact-list.c \
empathy-contact.c \
empathy-debug.c \
empathy-ft-factory.c \
@@ -97,12 +89,8 @@ libempathy_handwritten_source = \
empathy-server-tls-handler.c \
empathy-status-presets.c \
empathy-time.c \
- empathy-tls-certificate.c \
empathy-tls-verifier.c \
empathy-tp-chat.c \
- empathy-tp-contact-factory.c \
- empathy-tp-roomlist.c \
- empathy-tp-streamed-media.c \
empathy-utils.c
# these are sources that depend on GOA
diff --git a/libempathy/empathy-client-factory.c b/libempathy/empathy-client-factory.c
index 2a8559441..603f4e3e4 100644
--- a/libempathy/empathy-client-factory.c
+++ b/libempathy/empathy-client-factory.c
@@ -66,9 +66,12 @@ empathy_client_factory_dup_channel_features (TpSimpleClientFactory *factory,
features = chainup->dup_channel_features (factory, channel);
+ feature = TP_CHANNEL_FEATURE_CONTACTS;
+ g_array_append_val (features, feature);
+
if (EMPATHY_IS_TP_CHAT (channel))
{
- feature = TP_CHANNEL_FEATURE_CHAT_STATES;
+ feature = TP_TEXT_CHANNEL_FEATURE_CHAT_STATES;
g_array_append_val (features, feature);
feature = EMPATHY_TP_CHAT_FEATURE_READY;
@@ -210,3 +213,67 @@ empathy_client_factory_dup (void)
return singleton;
}
+
+static void
+dup_contact_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *my_result = user_data;
+ GError *error = NULL;
+ TpContact *contact;
+
+ contact = tp_connection_dup_contact_by_id_finish (TP_CONNECTION (source),
+ result, &error);
+
+ if (contact == NULL)
+ {
+ g_simple_async_result_take_error (my_result, error);
+ }
+ else
+ {
+ g_simple_async_result_set_op_res_gpointer (my_result,
+ empathy_contact_dup_from_tp_contact (contact), g_object_unref);
+
+ g_object_unref (contact);
+ }
+
+ g_simple_async_result_complete (my_result);
+ g_object_unref (my_result);
+}
+
+void
+empathy_client_factory_dup_contact_by_id_async (
+ EmpathyClientFactory *self,
+ TpConnection *connection,
+ const gchar *id,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *result;
+ GArray *features;
+
+ g_return_if_fail (EMPATHY_IS_CLIENT_FACTORY (self));
+ g_return_if_fail (id != NULL);
+
+ result = g_simple_async_result_new ((GObject *) self, callback, user_data,
+ empathy_client_factory_dup_contact_by_id_async);
+
+ features = empathy_client_factory_dup_contact_features (
+ TP_SIMPLE_CLIENT_FACTORY (self), connection);
+
+ tp_connection_dup_contact_by_id_async (connection, id, features->len,
+ (TpContactFeature * ) features->data, dup_contact_cb, result);
+
+ g_array_unref (features);
+}
+
+EmpathyContact *
+empathy_client_factory_dup_contact_by_id_finish (
+ EmpathyClientFactory *self,
+ GAsyncResult *result,
+ GError **error)
+{
+ empathy_implement_finish_return_copy_pointer (self,
+ empathy_client_factory_dup_contact_by_id_async, g_object_ref);
+}
diff --git a/libempathy/empathy-client-factory.h b/libempathy/empathy-client-factory.h
index c4d88e286..034f6e6fd 100644
--- a/libempathy/empathy-client-factory.h
+++ b/libempathy/empathy-client-factory.h
@@ -24,6 +24,9 @@
#include <telepathy-glib/telepathy-glib.h>
+
+#include "empathy-contact.h"
+
G_BEGIN_DECLS
#define EMPATHY_TYPE_CLIENT_FACTORY (empathy_client_factory_get_type ())
@@ -52,5 +55,17 @@ GType empathy_client_factory_get_type (void) G_GNUC_CONST;
EmpathyClientFactory * empathy_client_factory_dup (void);
+void empathy_client_factory_dup_contact_by_id_async (
+ EmpathyClientFactory *self,
+ TpConnection *connection,
+ const gchar *id,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+EmpathyContact * empathy_client_factory_dup_contact_by_id_finish (
+ EmpathyClientFactory *self,
+ GAsyncResult *result,
+ GError **error) G_GNUC_WARN_UNUSED_RESULT;
+
G_END_DECLS
#endif /* __EMPATHY_CLIENT_FACTORY_H__ */
diff --git a/libempathy/empathy-connection-aggregator.c b/libempathy/empathy-connection-aggregator.c
index fde365c27..2b517bf51 100644
--- a/libempathy/empathy-connection-aggregator.c
+++ b/libempathy/empathy-connection-aggregator.c
@@ -288,3 +288,44 @@ empathy_connection_aggregator_dup_all_contacts (
return result;
}
+
+static void
+rename_group_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GError *error = NULL;
+
+ if (!tp_connection_rename_group_finish (TP_CONNECTION (source), result,
+ &error))
+ {
+ DEBUG ("Failed to rename group on %s: %s",
+ tp_proxy_get_object_path (source), error->message);
+ g_error_free (error);
+ }
+}
+
+void
+empathy_connection_aggregator_rename_group (EmpathyConnectionAggregator *self,
+ const gchar *old_name,
+ const gchar *new_name)
+{
+ GList *l;
+
+ for (l = self->priv->conns; l != NULL; l = g_list_next (l))
+ {
+ TpConnection *conn = l->data;
+ const gchar * const *groups;
+
+ groups = tp_connection_get_contact_groups (conn);
+
+ if (!tp_strv_contains (groups, old_name))
+ continue;
+
+ DEBUG ("Rename group '%s' to '%s' on %s", old_name, new_name,
+ tp_proxy_get_object_path (conn));
+
+ tp_connection_rename_group_async (conn, old_name, new_name,
+ rename_group_cb, NULL);
+ }
+}
diff --git a/libempathy/empathy-connection-aggregator.h b/libempathy/empathy-connection-aggregator.h
index c21c04dec..5f85193c9 100644
--- a/libempathy/empathy-connection-aggregator.h
+++ b/libempathy/empathy-connection-aggregator.h
@@ -67,6 +67,11 @@ GList * empathy_connection_aggregator_get_all_groups (
GPtrArray * empathy_connection_aggregator_dup_all_contacts (
EmpathyConnectionAggregator *self);
+void empathy_connection_aggregator_rename_group (
+ EmpathyConnectionAggregator *self,
+ const gchar *old_name,
+ const gchar *new_name);
+
G_END_DECLS
#endif /* #ifndef __EMPATHY_CONNECTION_AGGREGATOR_H__*/
diff --git a/libempathy/empathy-connectivity.c b/libempathy/empathy-connectivity.c
deleted file mode 100644
index f84505f9b..000000000
--- a/libempathy/empathy-connectivity.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
-/*
- * 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
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-connectivity.h"
-
-#ifdef HAVE_NM
-#include <nm-client.h>
-#endif
-
-#ifdef HAVE_CONNMAN
-#include <dbus/dbus-glib.h>
-#endif
-
-#include <telepathy-glib/util.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONNECTIVITY
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyConnectivity)
-
-typedef struct {
-#ifdef HAVE_NM
- NMClient *nm_client;
- gulong state_change_signal_id;
-#endif
-
-#ifdef HAVE_CONNMAN
- DBusGProxy *proxy;
-#endif
-
- gboolean connected;
- gboolean use_conn;
-} EmpathyConnectivityPriv;
-
-enum {
- STATE_CHANGE,
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_USE_CONN,
-};
-
-static guint signals[LAST_SIGNAL];
-static EmpathyConnectivity *connectivity_singleton = NULL;
-
-G_DEFINE_TYPE (EmpathyConnectivity, empathy_connectivity, G_TYPE_OBJECT);
-
-static void
-connectivity_change_state (EmpathyConnectivity *connectivity,
- gboolean new_state)
-{
- EmpathyConnectivityPriv *priv;
-
- priv = GET_PRIV (connectivity);
-
- if (priv->connected == new_state)
- return;
-
- priv->connected = new_state;
-
- g_signal_emit (connectivity, signals[STATE_CHANGE], 0,
- priv->connected);
-}
-
-#ifdef HAVE_NM
-
-#if !defined(NM_CHECK_VERSION)
-#define NM_CHECK_VERSION(x,y,z) 0
-#endif
-
-static void
-connectivity_nm_state_change_cb (NMClient *client,
- const GParamSpec *pspec,
- EmpathyConnectivity *connectivity)
-{
- EmpathyConnectivityPriv *priv;
- gboolean new_nm_connected;
- NMState state;
-
- priv = GET_PRIV (connectivity);
-
- if (!priv->use_conn)
- return;
-
- state = nm_client_get_state (priv->nm_client);
- new_nm_connected = !(state == NM_STATE_CONNECTING
-#if NM_CHECK_VERSION(0,8,992)
- || state == NM_STATE_DISCONNECTING
-#endif
- || state == NM_STATE_ASLEEP
- || state == NM_STATE_DISCONNECTED);
-
- DEBUG ("New NetworkManager network state %d (connected: %s)", state,
- new_nm_connected ? "true" : "false");
-
- connectivity_change_state (connectivity, new_nm_connected);
-}
-#endif
-
-#ifdef HAVE_CONNMAN
-static void
-connectivity_connman_state_changed_cb (DBusGProxy *proxy,
- const gchar *new_state,
- EmpathyConnectivity *connectivity)
-{
- EmpathyConnectivityPriv *priv;
- gboolean new_connected;
-
- priv = GET_PRIV (connectivity);
-
- if (!priv->use_conn)
- return;
-
- new_connected = !tp_strdiff (new_state, "online");
-
- DEBUG ("New ConnMan network state %s", new_state);
-
- connectivity_change_state (connectivity, new_connected);
-}
-
-static void
-connectivity_connman_check_state_cb (DBusGProxy *proxy,
- DBusGProxyCall *call_id,
- gpointer user_data)
-{
- EmpathyConnectivity *connectivity = (EmpathyConnectivity *) user_data;
- GError *error = NULL;
- gchar *state;
-
- if (dbus_g_proxy_end_call (proxy, call_id, &error,
- G_TYPE_STRING, &state, G_TYPE_INVALID))
- {
- connectivity_connman_state_changed_cb (proxy, state,
- connectivity);
- g_free (state);
- }
- else
- {
- DEBUG ("Failed to call GetState: %s", error->message);
- connectivity_connman_state_changed_cb (proxy, "offline",
- connectivity);
- }
-}
-
-static void
-connectivity_connman_check_state (EmpathyConnectivity *connectivity)
-{
- EmpathyConnectivityPriv *priv;
-
- priv = GET_PRIV (connectivity);
-
- dbus_g_proxy_begin_call (priv->proxy, "GetState",
- connectivity_connman_check_state_cb, connectivity, NULL,
- G_TYPE_INVALID);
-}
-#endif
-
-static void
-empathy_connectivity_init (EmpathyConnectivity *connectivity)
-{
- EmpathyConnectivityPriv *priv;
-#ifdef HAVE_CONNMAN
- DBusGConnection *connection;
- GError *error = NULL;
-#endif
-
- priv = G_TYPE_INSTANCE_GET_PRIVATE (connectivity,
- EMPATHY_TYPE_CONNECTIVITY, EmpathyConnectivityPriv);
-
- connectivity->priv = priv;
-
- priv->use_conn = TRUE;
-
-#ifdef HAVE_NM
- priv->nm_client = nm_client_new ();
- if (priv->nm_client != NULL)
- {
- priv->state_change_signal_id = g_signal_connect (priv->nm_client,
- "notify::" NM_CLIENT_STATE,
- G_CALLBACK (connectivity_nm_state_change_cb), connectivity);
-
- connectivity_nm_state_change_cb (priv->nm_client, NULL, connectivity);
- }
- else
- {
- DEBUG ("Failed to get NetworkManager proxy");
- }
-#endif
-
-#ifdef HAVE_CONNMAN
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (connection != NULL)
- {
- priv->proxy = dbus_g_proxy_new_for_name (connection,
- "net.connman", "/",
- "net.connman.Manager");
-
- dbus_g_object_register_marshaller (
- g_cclosure_marshal_generic,
- G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_add_signal (priv->proxy, "StateChanged",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal (priv->proxy, "StateChanged",
- G_CALLBACK (connectivity_connman_state_changed_cb),
- connectivity, NULL);
-
- connectivity_connman_check_state (connectivity);
- }
- else
- {
- DEBUG ("Failed to get system bus connection: %s", error->message);
- g_error_free (error);
- }
-#endif
-
-#if !defined(HAVE_NM) && !defined(HAVE_CONNMAN)
- priv->connected = TRUE;
-#endif
-}
-
-static void
-connectivity_finalize (GObject *object)
-{
-#ifdef HAVE_NM
- EmpathyConnectivity *connectivity = EMPATHY_CONNECTIVITY (object);
- EmpathyConnectivityPriv *priv = GET_PRIV (connectivity);
-
- if (priv->nm_client != NULL)
- {
- g_signal_handler_disconnect (priv->nm_client,
- priv->state_change_signal_id);
- priv->state_change_signal_id = 0;
- g_object_unref (priv->nm_client);
- priv->nm_client = NULL;
- }
-#endif
-
-#ifdef HAVE_CONNMAN
- EmpathyConnectivity *connectivity = EMPATHY_CONNECTIVITY (object);
- EmpathyConnectivityPriv *priv = GET_PRIV (connectivity);
-
- if (priv->proxy != NULL)
- {
- dbus_g_proxy_disconnect_signal (priv->proxy, "StateChanged",
- G_CALLBACK (connectivity_connman_state_changed_cb), connectivity);
-
- g_object_unref (priv->proxy);
- priv->proxy = NULL;
- }
-#endif
-
- G_OBJECT_CLASS (empathy_connectivity_parent_class)->finalize (object);
-}
-
-static void
-connectivity_dispose (GObject *object)
-{
- G_OBJECT_CLASS (empathy_connectivity_parent_class)->dispose (object);
-}
-
-static GObject *
-connectivity_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *retval;
-
- if (!connectivity_singleton)
- {
- retval = G_OBJECT_CLASS (empathy_connectivity_parent_class)->constructor
- (type, n_construct_params, construct_params);
-
- connectivity_singleton = EMPATHY_CONNECTIVITY (retval);
- g_object_add_weak_pointer (retval, (gpointer) &connectivity_singleton);
- }
- else
- {
- retval = g_object_ref (connectivity_singleton);
- }
-
- return retval;
-}
-
-static void
-connectivity_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyConnectivity *connectivity = EMPATHY_CONNECTIVITY (object);
-
- switch (param_id)
- {
- case PROP_USE_CONN:
- g_value_set_boolean (value, empathy_connectivity_get_use_conn (
- connectivity));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-connectivity_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyConnectivity *connectivity = EMPATHY_CONNECTIVITY (object);
-
- switch (param_id)
- {
- case PROP_USE_CONN:
- empathy_connectivity_set_use_conn (connectivity,
- g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-empathy_connectivity_class_init (EmpathyConnectivityClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- oclass->finalize = connectivity_finalize;
- oclass->dispose = connectivity_dispose;
- oclass->constructor = connectivity_constructor;
- oclass->get_property = connectivity_get_property;
- oclass->set_property = connectivity_set_property;
-
- signals[STATE_CHANGE] =
- g_signal_new ("state-change",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_BOOLEAN, NULL);
-
- g_object_class_install_property (oclass,
- PROP_USE_CONN,
- g_param_spec_boolean ("use-conn",
- "Use connectivity managers",
- "Set presence according to connectivity managers",
- TRUE,
- G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
- g_type_class_add_private (oclass, sizeof (EmpathyConnectivityPriv));
-}
-
-/* public methods */
-
-EmpathyConnectivity *
-empathy_connectivity_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_CONNECTIVITY, NULL);
-}
-
-gboolean
-empathy_connectivity_is_online (EmpathyConnectivity *connectivity)
-{
- EmpathyConnectivityPriv *priv = GET_PRIV (connectivity);
-
- return priv->connected;
-}
-
-gboolean
-empathy_connectivity_get_use_conn (EmpathyConnectivity *connectivity)
-{
- EmpathyConnectivityPriv *priv = GET_PRIV (connectivity);
-
- return priv->use_conn;
-}
-
-void
-empathy_connectivity_set_use_conn (EmpathyConnectivity *connectivity,
- gboolean use_conn)
-{
- EmpathyConnectivityPriv *priv = GET_PRIV (connectivity);
-
- if (use_conn == priv->use_conn)
- return;
-
- DEBUG ("use_conn GSetting key changed; new value = %s",
- use_conn ? "true" : "false");
-
- priv->use_conn = use_conn;
-
-#if defined(HAVE_NM) || defined(HAVE_CONNMAN)
- if (use_conn)
- {
-#if defined(HAVE_NM)
- connectivity_nm_state_change_cb (priv->nm_client, NULL, connectivity);
-#elif defined(HAVE_CONNMAN)
- connectivity_connman_check_state (connectivity);
-#endif
- }
- else
-#endif
- {
- connectivity_change_state (connectivity, TRUE);
- }
-
- g_object_notify (G_OBJECT (connectivity), "use-conn");
-}
diff --git a/libempathy/empathy-connectivity.h b/libempathy/empathy-connectivity.h
deleted file mode 100644
index ca507e910..000000000
--- a/libempathy/empathy-connectivity.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
-/*
- * 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
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_CONNECTIVITY_H__
-#define __EMPATHY_CONNECTIVITY_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CONNECTIVITY (empathy_connectivity_get_type ())
-#define EMPATHY_CONNECTIVITY(o) \
- (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONNECTIVITY, \
- EmpathyConnectivity))
-#define EMPATHY_CONNECTIVITY_CLASS(k) \
- (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_CONNECTIVITY, \
- EmpathyConnectivityClass))
-#define EMPATHY_IS_CONNECTIVITY(o) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONNECTIVITY))
-#define EMPATHY_IS_CONNECTIVITY_CLASS(k) \
- (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CONNECTIVITY))
-#define EMPATHY_CONNECTIVITY_GET_CLASS(o) \
- (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CONNECTIVITY, \
- EmpathyConnectivityClass))
-
-typedef struct _EmpathyConnectivity EmpathyConnectivity;
-typedef struct _EmpathyConnectivityClass EmpathyConnectivityClass;
-
-struct _EmpathyConnectivity {
- GObject parent;
- gpointer priv;
-};
-
-struct _EmpathyConnectivityClass {
- GObjectClass parent_class;
-};
-
-GType empathy_connectivity_get_type (void);
-
-/* public methods */
-
-EmpathyConnectivity * empathy_connectivity_dup_singleton (void);
-
-gboolean empathy_connectivity_is_online (EmpathyConnectivity *connectivity);
-
-gboolean empathy_connectivity_get_use_conn (EmpathyConnectivity *connectivity);
-void empathy_connectivity_set_use_conn (EmpathyConnectivity *connectivity,
- gboolean use_conn);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CONNECTIVITY_H__ */
-
diff --git a/libempathy/empathy-contact-list.c b/libempathy/empathy-contact-list.c
deleted file mode 100644
index b80071c53..000000000
--- a/libempathy/empathy-contact-list.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-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: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-
-#include "empathy-contact-list.h"
-
-static void contact_list_base_init (gpointer klass);
-
-GType
-empathy_contact_list_get_type (void)
-{
- static GType type = 0;
-
- if (!type) {
- static const GTypeInfo type_info = {
- sizeof (EmpathyContactListIface),
- contact_list_base_init,
- NULL,
- };
-
- type = g_type_register_static (G_TYPE_INTERFACE,
- "EmpathyContactList",
- &type_info, 0);
-
- g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
- }
-
- return type;
-}
-
-static void
-contact_list_base_init (gpointer klass)
-{
- static gboolean initialized = FALSE;
-
- if (!initialized) {
- g_signal_new ("member-renamed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 4, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT, G_TYPE_UINT, G_TYPE_STRING);
-
- g_signal_new ("members-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 5, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT,
- G_TYPE_UINT, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- g_signal_new ("pendings-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 5, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT,
- G_TYPE_UINT, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- g_signal_new ("groups-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 3, EMPATHY_TYPE_CONTACT, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- initialized = TRUE;
- }
-}
-
-void
-empathy_contact_list_add (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *message)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT_LIST (list));
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->add) {
- EMPATHY_CONTACT_LIST_GET_IFACE (list)->add (list, contact, message);
- }
-}
-
-void
-empathy_contact_list_remove (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *message)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT_LIST (list));
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove) {
- EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove (list, contact, message);
- }
-}
-
-GList *
-empathy_contact_list_get_members (EmpathyContactList *list)
-{
- g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST (list), NULL);
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->get_members) {
- return EMPATHY_CONTACT_LIST_GET_IFACE (list)->get_members (list);
- }
-
- return NULL;
-}
-
-GList *
-empathy_contact_list_get_pendings (EmpathyContactList *list)
-{
- g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST (list), NULL);
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->get_pendings) {
- return EMPATHY_CONTACT_LIST_GET_IFACE (list)->get_pendings (list);
- }
-
- return NULL;
-}
-
-GList *
-empathy_contact_list_get_groups (EmpathyContactList *list,
- EmpathyContact *contact)
-{
- g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST (list), NULL);
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->get_groups) {
- return EMPATHY_CONTACT_LIST_GET_IFACE (list)->get_groups (list, contact);
- }
-
- return NULL;
-}
-
-void
-empathy_contact_list_add_to_group (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *group)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT_LIST (list));
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
- g_return_if_fail (group != NULL);
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->add_to_group) {
- EMPATHY_CONTACT_LIST_GET_IFACE (list)->add_to_group (list, contact, group);
- }
-}
-
-void
-empathy_contact_list_remove_from_group (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *group)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT_LIST (list));
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
- g_return_if_fail (group != NULL);
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove_from_group) {
- EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove_from_group (list, contact, group);
- }
-}
-
-void
-empathy_contact_list_rename_group (EmpathyContactList *list,
- const gchar *old_group,
- const gchar *new_group)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT_LIST (list));
- g_return_if_fail (old_group != NULL);
- g_return_if_fail (new_group != NULL);
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->rename_group) {
- EMPATHY_CONTACT_LIST_GET_IFACE (list)->rename_group (list, old_group, new_group);
- }
-}
-
-void
-empathy_contact_list_remove_group (EmpathyContactList *list,
- const gchar *group)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT_LIST (list));
- g_return_if_fail (group != NULL);
-
- if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove_group) {
- EMPATHY_CONTACT_LIST_GET_IFACE (list)->remove_group (list, group);
- }
-}
diff --git a/libempathy/empathy-contact-list.h b/libempathy/empathy-contact-list.h
deleted file mode 100644
index a9149369b..000000000
--- a/libempathy/empathy-contact-list.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-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: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_CONTACT_LIST_H__
-#define __EMPATHY_CONTACT_LIST_H__
-
-#include <glib-object.h>
-
-#include "empathy-types.h"
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CONTACT_LIST (empathy_contact_list_get_type ())
-#define EMPATHY_CONTACT_LIST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONTACT_LIST, EmpathyContactList))
-#define EMPATHY_IS_CONTACT_LIST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONTACT_LIST))
-#define EMPATHY_CONTACT_LIST_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), EMPATHY_TYPE_CONTACT_LIST, EmpathyContactListIface))
-
-typedef struct _EmpathyContactListIface EmpathyContactListIface;
-
-struct _EmpathyContactListIface {
- GTypeInterface base_iface;
-
- /* VTabled */
- void (*add) (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *message);
- void (*remove) (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *message);
- GList * (*get_members) (EmpathyContactList *list);
- GList * (*get_pendings) (EmpathyContactList *list);
- GList * (*get_groups) (EmpathyContactList *list,
- EmpathyContact *contact);
- void (*add_to_group) (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *group);
- void (*remove_from_group) (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *group);
- void (*rename_group) (EmpathyContactList *list,
- const gchar *old_group,
- const gchar *new_group);
- void (*remove_group) (EmpathyContactList *list,
- const gchar *group);
-};
-
-GType empathy_contact_list_get_type (void) G_GNUC_CONST;
-void empathy_contact_list_add (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *message);
-void empathy_contact_list_remove (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *message);
-GList * empathy_contact_list_get_members (EmpathyContactList *list);
-GList * empathy_contact_list_get_pendings (EmpathyContactList *list);
-GList * empathy_contact_list_get_groups (EmpathyContactList *list,
- EmpathyContact *contact);
-void empathy_contact_list_add_to_group (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *group);
-void empathy_contact_list_remove_from_group (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *group);
-void empathy_contact_list_rename_group (EmpathyContactList *list,
- const gchar *old_group,
- const gchar *new_group);
-void empathy_contact_list_remove_group (EmpathyContactList *list,
- const gchar *group);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CONTACT_LIST_H__ */
-
diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c
index 0c4ef755f..6b1a7157b 100644
--- a/libempathy/empathy-contact.c
+++ b/libempathy/empathy-contact.c
@@ -229,8 +229,7 @@ contact_constructed (GObject *object)
EmpathyContact *contact = (EmpathyContact *) object;
EmpathyContactPriv *priv = GET_PRIV (contact);
GHashTable *location;
- TpHandle self_handle;
- TpHandle handle;
+ TpContact *self_contact;
const gchar * const *client_types;
if (priv->tp_contact == NULL)
@@ -254,10 +253,9 @@ contact_constructed (GObject *object)
/* Set is-user property. Note that it could still be the handle is
* different from the connection's self handle, in the case the handle
* comes from a group interface. */
- self_handle = tp_connection_get_self_handle (
+ self_contact = tp_connection_get_self_contact (
tp_contact_get_connection (priv->tp_contact));
- handle = tp_contact_get_handle (priv->tp_contact);
- empathy_contact_set_is_user (contact, self_handle == handle);
+ empathy_contact_set_is_user (contact, self_contact == priv->tp_contact);
g_signal_connect (priv->tp_contact, "notify",
G_CALLBACK (tp_contact_notify_cb), contact);
@@ -692,31 +690,36 @@ contact_is_tpl_entity (gpointer key,
}
static void
-get_contacts_cb (TpConnection *connection,
- guint n_contacts,
- TpContact * const *contacts,
- const gchar * const *requested_ids,
- GHashTable *failed_id_errors,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyContact *self = (EmpathyContact *) weak_object;
- EmpathyContactPriv *priv = GET_PRIV (self);
- TpContact *tp_contact;
+get_contacts_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TpWeakRef *wr = user_data;
+ EmpathyContactPriv *priv;
+ EmpathyContact *self;
- if (n_contacts != 1)
- return;
+ self = tp_weak_ref_dup_object (wr);
+ if (self == NULL)
+ goto out;
- tp_contact = contacts[0];
+ priv = GET_PRIV (self);
g_return_if_fail (priv->tp_contact == NULL);
- priv->tp_contact = g_object_ref (tp_contact);
+
+ priv->tp_contact = tp_connection_dup_contact_by_id_finish (
+ TP_CONNECTION (source), result, NULL);
+ if (priv->tp_contact == NULL)
+ goto out;
+
g_object_notify (G_OBJECT (self), "tp-contact");
/* Update capabilities now that we have a TpContact */
set_capabilities_from_tp_caps (self,
- tp_contact_get_capabilities (tp_contact));
+ tp_contact_get_capabilities (priv->tp_contact));
+
+out:
+ g_clear_object (&self);
+ tp_weak_ref_destroy (wr);
}
EmpathyContact *
@@ -772,9 +775,9 @@ empathy_contact_from_tpl_contact (TpAccount *account,
TpContactFeature features[] = { TP_CONTACT_FEATURE_CAPABILITIES };
conn = tp_account_get_connection (account);
- tp_connection_get_contacts_by_id (conn, 1, &id,
+ tp_connection_dup_contact_by_id_async (conn, id,
G_N_ELEMENTS (features), features, get_contacts_cb,
- NULL, NULL, G_OBJECT (retval));
+ tp_weak_ref_new (retval, NULL, NULL));
}
}
@@ -1698,96 +1701,26 @@ static EmpathyCapabilities
tp_caps_to_capabilities (TpCapabilities *caps)
{
EmpathyCapabilities capabilities = 0;
- guint i;
- GPtrArray *classes;
- classes = tp_capabilities_get_channel_classes (caps);
+ if (tp_capabilities_supports_file_transfer (caps))
+ capabilities |= EMPATHY_CAPABILITIES_FT;
- for (i = 0; i < classes->len; i++)
- {
- GValueArray *class_struct;
- GHashTable *fixed_prop;
- GStrv allowed_prop;
- TpHandleType handle_type;
- const gchar *chan_type;
-
- class_struct = g_ptr_array_index (classes, i);
- tp_value_array_unpack (class_struct, 2,
- &fixed_prop,
- &allowed_prop);
-
- handle_type = tp_asv_get_uint32 (fixed_prop,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL);
- if (handle_type != TP_HANDLE_TYPE_CONTACT)
- continue;
-
- chan_type = tp_asv_get_string (fixed_prop,
- TP_PROP_CHANNEL_CHANNEL_TYPE);
-
- if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER))
- {
- capabilities |= EMPATHY_CAPABILITIES_FT;
- }
- else if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE))
- {
- const gchar *service;
-
- service = tp_asv_get_string (fixed_prop,
- TP_PROP_CHANNEL_TYPE_STREAM_TUBE_SERVICE);
+ if (tp_capabilities_supports_stream_tubes (caps, TP_HANDLE_TYPE_CONTACT,
+ "rfb"))
+ capabilities |= EMPATHY_CAPABILITIES_RFB_STREAM_TUBE;
- if (!tp_strdiff (service, "rfb"))
- capabilities |= EMPATHY_CAPABILITIES_RFB_STREAM_TUBE;
- }
- else if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA))
- {
- guint j;
-
- for (j = 0; allowed_prop[j] != NULL; j++)
- {
- if (!tp_strdiff (allowed_prop[j],
- TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_AUDIO))
- capabilities |= EMPATHY_CAPABILITIES_AUDIO;
- else if (!tp_strdiff (allowed_prop[j],
- TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_VIDEO))
- capabilities |= EMPATHY_CAPABILITIES_VIDEO;
- }
-
- if (tp_asv_get_boolean (fixed_prop,
- TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_AUDIO, NULL))
- capabilities |= EMPATHY_CAPABILITIES_AUDIO;
- if (tp_asv_get_boolean (fixed_prop,
- TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_VIDEO, NULL))
- capabilities |= EMPATHY_CAPABILITIES_VIDEO;
- }
- else if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT))
- {
- if (tp_asv_get_boolean (fixed_prop,
- TP_PROP_CHANNEL_INTERFACE_SMS_SMS_CHANNEL, NULL))
- capabilities |= EMPATHY_CAPABILITIES_SMS;
- }
- else if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_CALL))
- {
- guint j;
-
- if (tp_asv_get_boolean (fixed_prop,
- TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, NULL))
- capabilities |= EMPATHY_CAPABILITIES_AUDIO;
-
- if (tp_asv_get_boolean (fixed_prop,
- TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, NULL))
- capabilities |= EMPATHY_CAPABILITIES_VIDEO;
-
- for (j = 0; allowed_prop[j] != NULL; j++)
- {
- if (!tp_strdiff (allowed_prop[j],
- TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO))
- capabilities |= EMPATHY_CAPABILITIES_AUDIO;
- else if (!tp_strdiff (allowed_prop[j],
- TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO))
- capabilities |= EMPATHY_CAPABILITIES_VIDEO;
- }
- }
+ if (tp_capabilities_supports_audio_video_call (caps, TP_HANDLE_TYPE_CONTACT))
+ {
+ capabilities |= EMPATHY_CAPABILITIES_AUDIO;
+ capabilities |= EMPATHY_CAPABILITIES_VIDEO;
}
+ else if (tp_capabilities_supports_audio_call (caps, TP_HANDLE_TYPE_CONTACT))
+ {
+ capabilities |= EMPATHY_CAPABILITIES_AUDIO;
+ }
+
+ if (tp_capabilities_supports_sms (caps))
+ capabilities |= EMPATHY_CAPABILITIES_SMS;
return capabilities;
}
diff --git a/libempathy/empathy-ft-handler.c b/libempathy/empathy-ft-handler.c
index effbf81bc..e7bbf8586 100644
--- a/libempathy/empathy-ft-handler.c
+++ b/libempathy/empathy-ft-handler.c
@@ -31,7 +31,6 @@
#include <telepathy-glib/interfaces.h>
#include "empathy-ft-handler.h"
-#include "empathy-tp-contact-factory.h"
#include "empathy-time.h"
#include "empathy-utils.h"
@@ -1299,32 +1298,6 @@ out:
}
static void
-contact_factory_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- CallbacksData *cb_data = user_data;
- EmpathyFTHandler *handler = EMPATHY_FT_HANDLER (weak_object);
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
-
- if (error != NULL)
- {
- if (!g_cancellable_is_cancelled (priv->cancellable))
- g_cancellable_cancel (priv->cancellable);
-
- cb_data->callback (handler, (GError *) error, cb_data->user_data);
- callbacks_data_free (cb_data);
- return;
- }
-
- priv->contact = g_object_ref (contact);
-
- cb_data->callback (handler, NULL, cb_data->user_data);
-}
-
-static void
channel_get_all_properties_cb (TpProxy *proxy,
GHashTable *properties,
const GError *error,
@@ -1334,7 +1307,7 @@ channel_get_all_properties_cb (TpProxy *proxy,
CallbacksData *cb_data = user_data;
EmpathyFTHandler *handler = EMPATHY_FT_HANDLER (weak_object);
EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- TpHandle c_handle;
+ TpContact *contact;
if (error != NULL)
{
@@ -1353,11 +1326,10 @@ channel_get_all_properties_cb (TpProxy *proxy,
priv->content_hash_type = g_value_get_uint (
g_hash_table_lookup (properties, "ContentHashType"));
- c_handle = tp_channel_get_handle (TP_CHANNEL (proxy), NULL);
- empathy_tp_contact_factory_get_from_handle (
- tp_channel_borrow_connection (TP_CHANNEL (proxy)), c_handle,
- contact_factory_contact_cb, cb_data, callbacks_data_free,
- G_OBJECT (handler));
+ contact = tp_channel_get_target_contact (TP_CHANNEL (proxy));
+ priv->contact = empathy_contact_dup_from_tp_contact (contact);
+
+ cb_data->callback (handler, NULL, cb_data->user_data);
}
/* public methods */
diff --git a/libempathy/empathy-gsettings.h b/libempathy/empathy-gsettings.h
index 2863cf9a7..4178b6728 100644
--- a/libempathy/empathy-gsettings.h
+++ b/libempathy/empathy-gsettings.h
@@ -76,6 +76,7 @@ G_BEGIN_DECLS
#define EMPATHY_PREFS_UI_AVATAR_DIRECTORY "avatar-directory"
#define EMPATHY_PREFS_UI_SHOW_AVATARS "show-avatars"
#define EMPATHY_PREFS_UI_SHOW_PROTOCOLS "show-protocols"
+#define EMPATHY_PREFS_UI_SHOW_BALANCES "show-balance-in-roster"
#define EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST "compact-contact-list"
#define EMPATHY_PREFS_UI_CHAT_WINDOW_PANED_POS "chat-window-paned-pos"
#define EMPATHY_PREFS_UI_SHOW_OFFLINE "show-offline"
diff --git a/libempathy/empathy-individual-manager.c b/libempathy/empathy-individual-manager.c
index 68b094ef1..28f35df2d 100644
--- a/libempathy/empathy-individual-manager.c
+++ b/libempathy/empathy-individual-manager.c
@@ -687,75 +687,6 @@ empathy_individual_manager_remove_group (EmpathyIndividualManager *manager,
(gpointer) group);
}
-static void
-link_personas_cb (FolksIndividualAggregator *aggregator,
- GAsyncResult *async_result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- folks_individual_aggregator_link_personas_finish (aggregator, async_result,
- &error);
-
- if (error != NULL)
- {
- g_warning ("Failed to link personas: %s", error->message);
- g_clear_error (&error);
- }
-}
-
-void
-empathy_individual_manager_link_personas (EmpathyIndividualManager *self,
- GeeSet *personas)
-{
- EmpathyIndividualManagerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self));
- g_return_if_fail (personas != NULL);
-
- priv = GET_PRIV (self);
-
- DEBUG ("Linking %u personas",
- gee_collection_get_size (GEE_COLLECTION (personas)));
-
- folks_individual_aggregator_link_personas (priv->aggregator, personas,
- (GAsyncReadyCallback) link_personas_cb, NULL);
-}
-
-static void
-unlink_individual_cb (FolksIndividualAggregator *aggregator,
- GAsyncResult *async_result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- folks_individual_aggregator_unlink_individual_finish (aggregator,
- async_result, &error);
-
- if (error != NULL)
- {
- g_warning ("Failed to unlink individual: %s", error->message);
- g_clear_error (&error);
- }
-}
-
-void
-empathy_individual_manager_unlink_individual (EmpathyIndividualManager *self,
- FolksIndividual *individual)
-{
- EmpathyIndividualManagerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self));
- g_return_if_fail (FOLKS_IS_INDIVIDUAL (individual));
-
- priv = GET_PRIV (self);
-
- DEBUG ("Unlinking individual '%s'", folks_individual_get_id (individual));
-
- folks_individual_aggregator_unlink_individual (priv->aggregator, individual,
- (GAsyncReadyCallback) unlink_individual_cb, NULL);
-}
-
gboolean
empathy_individual_manager_get_contacts_loaded (EmpathyIndividualManager *self)
{
@@ -763,55 +694,3 @@ empathy_individual_manager_get_contacts_loaded (EmpathyIndividualManager *self)
return priv->contacts_loaded;
}
-
-static gboolean
-individual_has_contact (FolksIndividual *individual,
- TpContact *contact)
-{
- GeeSet *personas;
- GeeIterator *iter;
- gboolean found = FALSE;
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
-
- while (!found && gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
-
- if (TPF_IS_PERSONA (persona))
- {
- TpContact *c = tpf_persona_get_contact (persona);
-
- if (c == contact)
- found = TRUE;
- }
-
- g_clear_object (&persona);
- }
-
- g_clear_object (&iter);
-
- return found;
-}
-
-/* Try finding a FolksIndividual containing @contact as one of his persona */
-FolksIndividual *
-empathy_individual_manager_lookup_by_contact (EmpathyIndividualManager *self,
- TpContact *contact)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
- GHashTableIter iter;
- gpointer value;
-
- g_hash_table_iter_init (&iter, priv->individuals);
- while (g_hash_table_iter_next (&iter, NULL, &value))
- {
- FolksIndividual *individual = value;
-
- if (individual_has_contact (individual, contact))
- return individual;
- }
-
- return NULL;
-}
diff --git a/libempathy/empathy-individual-manager.h b/libempathy/empathy-individual-manager.h
index 08a1faade..3e17bbd85 100644
--- a/libempathy/empathy-individual-manager.h
+++ b/libempathy/empathy-individual-manager.h
@@ -74,13 +74,6 @@ void empathy_individual_manager_remove (EmpathyIndividualManager *manager,
void empathy_individual_manager_remove_group (EmpathyIndividualManager *manager,
const gchar *group);
-void empathy_individual_manager_link_personas (EmpathyIndividualManager *self,
- GeeSet *personas);
-
-void empathy_individual_manager_unlink_individual (
- EmpathyIndividualManager *self,
- FolksIndividual *individual);
-
gboolean empathy_individual_manager_supports_blocking (
EmpathyIndividualManager *self,
FolksIndividual *individual);
@@ -93,9 +86,5 @@ void empathy_individual_manager_set_blocked (EmpathyIndividualManager *self,
gboolean empathy_individual_manager_get_contacts_loaded (
EmpathyIndividualManager *self);
-FolksIndividual * empathy_individual_manager_lookup_by_contact (
- EmpathyIndividualManager *self,
- TpContact *contact);
-
G_END_DECLS
#endif /* __EMPATHY_INDIVIDUAL_MANAGER_H__ */
diff --git a/libempathy/empathy-request-util.h b/libempathy/empathy-request-util.h
index 6781b72d4..cdecc631d 100644
--- a/libempathy/empathy-request-util.h
+++ b/libempathy/empathy-request-util.h
@@ -33,9 +33,6 @@ G_BEGIN_DECLS
#define EMPATHY_CHAT_BUS_NAME_SUFFIX "Empathy.Chat"
#define EMPATHY_CHAT_BUS_NAME TP_CLIENT_BUS_NAME_BASE EMPATHY_CHAT_BUS_NAME_SUFFIX
-#define EMPATHY_AV_BUS_NAME_SUFFIX "Empathy.AudioVideo"
-#define EMPATHY_AV_BUS_NAME TP_CLIENT_BUS_NAME_BASE EMPATHY_AV_BUS_NAME_SUFFIX
-
#define EMPATHY_CALL_BUS_NAME_SUFFIX "Empathy.Call"
#define EMPATHY_CALL_BUS_NAME TP_CLIENT_BUS_NAME_BASE EMPATHY_CALL_BUS_NAME_SUFFIX
diff --git a/libempathy/empathy-server-tls-handler.c b/libempathy/empathy-server-tls-handler.c
index b19e9cfde..dd3e7bb78 100644
--- a/libempathy/empathy-server-tls-handler.c
+++ b/libempathy/empathy-server-tls-handler.c
@@ -22,12 +22,8 @@
#include "empathy-server-tls-handler.h"
-#include <telepathy-glib/interfaces.h>
-#include <telepathy-glib/util.h>
-
#define DEBUG_FLAG EMPATHY_DEBUG_TLS
#include "empathy-debug.h"
-#include "empathy-tls-certificate.h"
#include "empathy-utils.h"
#include "extensions/extensions.h"
@@ -45,7 +41,7 @@ enum {
typedef struct {
TpChannel *channel;
- EmpathyTLSCertificate *certificate;
+ TpTLSCertificate *certificate;
gchar *hostname;
gchar **reference_identities;
@@ -63,14 +59,12 @@ tls_certificate_prepared_cb (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
- EmpathyTLSCertificate *certificate = EMPATHY_TLS_CERTIFICATE (source);
+ TpTLSCertificate *certificate = TP_TLS_CERTIFICATE (source);
EmpathyServerTLSHandler *self = user_data;
GError *error = NULL;
EmpathyServerTLSHandlerPriv *priv = GET_PRIV (self);
- empathy_tls_certificate_prepare_finish (certificate, result, &error);
-
- if (error != NULL)
+ if (!tp_proxy_prepare_finish (certificate, result, &error))
{
g_simple_async_result_set_from_error (priv->async_init_res, error);
g_error_free (error);
@@ -106,8 +100,8 @@ tls_handler_init_async (GAsyncInitable *initable,
const gchar *hostname;
const gchar * const *identities;
const gchar *bus_name;
- TpDBusDaemon *dbus;
GError *error = NULL;
+ GQuark features[] = { TP_TLS_CERTIFICATE_FEATURE_CORE, 0 };
/*
* Used when channel doesn't implement ReferenceIdentities. A GStrv
* with [0] the hostname, and [1] a NULL terminator.
@@ -155,17 +149,16 @@ tls_handler_init_async (GAsyncInitable *initable,
cert_object_path = tp_asv_get_object_path (properties,
EMP_IFACE_CHANNEL_TYPE_SERVER_TLS_CONNECTION ".ServerCertificate");
bus_name = tp_proxy_get_bus_name (TP_PROXY (priv->channel));
- dbus = tp_proxy_get_dbus_daemon (TP_PROXY (priv->channel));
- DEBUG ("Creating an EmpathyTLSCertificate for path %s, bus name %s",
+ DEBUG ("Creating an TpTLSCertificate for path %s, bus name %s",
cert_object_path, bus_name);
- priv->certificate = empathy_tls_certificate_new (dbus, bus_name,
+ priv->certificate = tp_tls_certificate_new (TP_PROXY (priv->channel),
cert_object_path, &error);
if (error != NULL)
{
- DEBUG ("Unable to create the EmpathyTLSCertificate: error %s",
+ DEBUG ("Unable to create the TpTLSCertificate: error %s",
error->message);
g_simple_async_result_set_from_error (priv->async_init_res, error);
@@ -177,7 +170,7 @@ tls_handler_init_async (GAsyncInitable *initable,
return;
}
- empathy_tls_certificate_prepare_async (priv->certificate,
+ tp_proxy_prepare_async (priv->certificate, features,
tls_certificate_prepared_cb, self);
}
@@ -268,9 +261,9 @@ empathy_server_tls_handler_class_init (EmpathyServerTLSHandlerClass *klass)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (oclass, PROP_CHANNEL, pspec);
- pspec = g_param_spec_object ("certificate", "The EmpathyTLSCertificate",
- "The EmpathyTLSCertificate carried by the channel.",
- EMPATHY_TYPE_TLS_CERTIFICATE,
+ pspec = g_param_spec_object ("certificate", "The TpTLSCertificate",
+ "The TpTLSCertificate carried by the channel.",
+ TP_TYPE_TLS_CERTIFICATE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (oclass, PROP_TLS_CERTIFICATE, pspec);
@@ -325,7 +318,7 @@ empathy_server_tls_handler_new_finish (GAsyncResult *result,
return NULL;
}
-EmpathyTLSCertificate *
+TpTLSCertificate *
empathy_server_tls_handler_get_certificate (EmpathyServerTLSHandler *self)
{
EmpathyServerTLSHandlerPriv *priv = GET_PRIV (self);
diff --git a/libempathy/empathy-server-tls-handler.h b/libempathy/empathy-server-tls-handler.h
index 1fae98b0a..f4caf3539 100644
--- a/libempathy/empathy-server-tls-handler.h
+++ b/libempathy/empathy-server-tls-handler.h
@@ -24,9 +24,7 @@
#include <glib-object.h>
#include <gio/gio.h>
-#include <telepathy-glib/channel.h>
-
-#include <libempathy/empathy-tls-certificate.h>
+#include <telepathy-glib/telepathy-glib.h>
G_BEGIN_DECLS
@@ -65,7 +63,7 @@ void empathy_server_tls_handler_new_async (TpChannel *channel,
EmpathyServerTLSHandler * empathy_server_tls_handler_new_finish (
GAsyncResult *result, GError **error);
-EmpathyTLSCertificate * empathy_server_tls_handler_get_certificate (
+TpTLSCertificate * empathy_server_tls_handler_get_certificate (
EmpathyServerTLSHandler *self);
G_END_DECLS
diff --git a/libempathy/empathy-tls-certificate.c b/libempathy/empathy-tls-certificate.c
deleted file mode 100644
index c14deec57..000000000
--- a/libempathy/empathy-tls-certificate.c
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * empathy-tls-certificate.c - Source for EmpathyTLSCertificate
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * 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-tls-certificate.h"
-
-#include <errno.h>
-
-#include <glib/gstdio.h>
-
-#include <gnutls/gnutls.h>
-#include <gnutls/x509.h>
-
-#include <telepathy-glib/gtypes.h>
-#include <telepathy-glib/util.h>
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TLS
-#include "empathy-debug.h"
-#include "empathy-utils.h"
-
-#include "extensions/extensions.h"
-
-enum {
- /* proxy properties */
- PROP_CERT_TYPE = 1,
- PROP_CERT_DATA,
- PROP_STATE,
- LAST_PROPERTY,
-};
-
-typedef struct {
- GSimpleAsyncResult *async_prepare_res;
-
- /* TLSCertificate properties */
- gchar *cert_type;
- GPtrArray *cert_data;
- EmpTLSCertificateState state;
-
- gboolean is_prepared;
-} EmpathyTLSCertificatePriv;
-
-G_DEFINE_TYPE (EmpathyTLSCertificate, empathy_tls_certificate,
- TP_TYPE_PROXY);
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTLSCertificate);
-
-static void
-tls_certificate_got_all_cb (TpProxy *proxy,
- GHashTable *properties,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- GPtrArray *cert_data;
- EmpathyTLSCertificate *self = EMPATHY_TLS_CERTIFICATE (weak_object);
- EmpathyTLSCertificatePriv *priv = GET_PRIV (self);
-
- if (error != NULL)
- {
- g_simple_async_result_set_from_error (priv->async_prepare_res, error);
- g_simple_async_result_complete (priv->async_prepare_res);
- tp_clear_object (&priv->async_prepare_res);
-
- return;
- }
-
- priv->cert_type = g_strdup (tp_asv_get_string (properties,
- "CertificateType"));
- priv->state = tp_asv_get_uint32 (properties, "State", NULL);
-
- cert_data = tp_asv_get_boxed (properties, "CertificateChainData",
- TP_ARRAY_TYPE_UCHAR_ARRAY_LIST);
- g_assert (cert_data != NULL);
- priv->cert_data = g_boxed_copy (TP_ARRAY_TYPE_UCHAR_ARRAY_LIST, cert_data);
-
- DEBUG ("Got a certificate chain long %u, of type %s",
- priv->cert_data->len, priv->cert_type);
-
- priv->is_prepared = TRUE;
-
- g_simple_async_result_complete (priv->async_prepare_res);
- tp_clear_object (&priv->async_prepare_res);
-}
-
-void
-empathy_tls_certificate_prepare_async (EmpathyTLSCertificate *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyTLSCertificatePriv *priv = GET_PRIV (self);
-
- /* emit an error if we're already preparing the object */
- if (priv->async_prepare_res != NULL)
- {
- g_simple_async_report_error_in_idle (G_OBJECT (self),
- callback, user_data,
- G_IO_ERROR, G_IO_ERROR_PENDING,
- "%s",
- "Prepare operation already in progress on the TLS certificate.");
-
- return;
- }
-
- /* if the object is already prepared, just complete in idle */
- if (priv->is_prepared)
- {
- tp_simple_async_report_success_in_idle (G_OBJECT (self),
- callback, user_data, empathy_tls_certificate_prepare_async);
-
- return;
- }
-
- priv->async_prepare_res = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, empathy_tls_certificate_prepare_async);
-
- /* call GetAll() on the certificate */
- tp_cli_dbus_properties_call_get_all (self,
- -1, EMP_IFACE_AUTHENTICATION_TLS_CERTIFICATE,
- tls_certificate_got_all_cb, NULL, NULL,
- G_OBJECT (self));
-}
-
-gboolean
-empathy_tls_certificate_prepare_finish (EmpathyTLSCertificate *self,
- GAsyncResult *result,
- GError **error)
-{
- gboolean retval = TRUE;
-
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
- error))
- retval = FALSE;
-
- return retval;
-}
-
-static void
-empathy_tls_certificate_finalize (GObject *object)
-{
- EmpathyTLSCertificatePriv *priv = GET_PRIV (object);
-
- DEBUG ("%p", object);
-
- g_free (priv->cert_type);
- tp_clear_boxed (TP_ARRAY_TYPE_UCHAR_ARRAY_LIST, &priv->cert_data);
-
- G_OBJECT_CLASS (empathy_tls_certificate_parent_class)->finalize (object);
-}
-
-static void
-empathy_tls_certificate_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTLSCertificatePriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CERT_TYPE:
- g_value_set_string (value, priv->cert_type);
- break;
- case PROP_CERT_DATA:
- g_value_set_boxed (value, priv->cert_data);
- break;
- case PROP_STATE:
- g_value_set_uint (value, priv->state);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_tls_certificate_init (EmpathyTLSCertificate *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_TLS_CERTIFICATE, EmpathyTLSCertificatePriv);
-}
-
-static void
-empathy_tls_certificate_class_init (EmpathyTLSCertificateClass *klass)
-{
- GParamSpec *pspec;
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- TpProxyClass *pclass = TP_PROXY_CLASS (klass);
-
- oclass->get_property = empathy_tls_certificate_get_property;
- oclass->finalize = empathy_tls_certificate_finalize;
-
- pclass->interface = EMP_IFACE_QUARK_AUTHENTICATION_TLS_CERTIFICATE;
- pclass->must_have_unique_name = TRUE;
-
- g_type_class_add_private (klass, sizeof (EmpathyTLSCertificatePriv));
-
- pspec = g_param_spec_string ("cert-type", "Certificate type",
- "The type of this certificate.",
- NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_CERT_TYPE, pspec);
-
- pspec = g_param_spec_boxed ("cert-data", "Certificate chain data",
- "The raw DER-encoded certificate chain data.",
- TP_ARRAY_TYPE_UCHAR_ARRAY_LIST,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_CERT_DATA, pspec);
-
- pspec = g_param_spec_uint ("state", "State",
- "The state of this certificate.",
- EMP_TLS_CERTIFICATE_STATE_PENDING, NUM_EMP_TLS_CERTIFICATE_STATES -1,
- EMP_TLS_CERTIFICATE_STATE_PENDING,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_STATE, pspec);
-}
-
-static void
-cert_proxy_accept_cb (TpProxy *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- GSimpleAsyncResult *accept_result = user_data;
-
- DEBUG ("Callback for accept(), error %p", error);
-
- if (error != NULL)
- {
- DEBUG ("Error was %s", error->message);
- g_simple_async_result_set_from_error (accept_result, error);
- }
-
- g_simple_async_result_complete (accept_result);
-}
-
-static void
-cert_proxy_reject_cb (TpProxy *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- GSimpleAsyncResult *reject_result = user_data;
-
- DEBUG ("Callback for reject(), error %p", error);
-
- if (error != NULL)
- {
- DEBUG ("Error was %s", error->message);
- g_simple_async_result_set_from_error (reject_result, error);
- }
-
- g_simple_async_result_complete (reject_result);
-}
-
-static const gchar *
-reject_reason_get_dbus_error (EmpTLSCertificateRejectReason reason)
-{
- const gchar *retval = NULL;
-
- switch (reason)
- {
- case EMP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_UNTRUSTED);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_EXPIRED:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_EXPIRED);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_NOT_ACTIVATED:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_NOT_ACTIVATED);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_FINGERPRINT_MISMATCH:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_FINGERPRINT_MISMATCH);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_HOSTNAME_MISMATCH);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_SELF_SIGNED);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_REVOKED:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_REVOKED);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_INSECURE:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_INSECURE);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_LIMIT_EXCEEDED:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_LIMIT_EXCEEDED);
- break;
- case EMP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN:
- default:
- retval = tp_error_get_dbus_name (TP_ERROR_CERT_INVALID);
- break;
- }
-
- return retval;
-}
-
-EmpathyTLSCertificate *
-empathy_tls_certificate_new (TpDBusDaemon *dbus,
- const gchar *bus_name,
- const gchar *object_path,
- GError **error)
-{
- EmpathyTLSCertificate *retval = NULL;
-
- if (!tp_dbus_check_valid_bus_name (bus_name,
- TP_DBUS_NAME_TYPE_UNIQUE, error))
- goto finally;
-
- if (!tp_dbus_check_valid_object_path (object_path, error))
- goto finally;
-
- retval = g_object_new (EMPATHY_TYPE_TLS_CERTIFICATE,
- "dbus-daemon", dbus,
- "bus-name", bus_name,
- "object-path", object_path,
- NULL);
-
-finally:
- if (*error != NULL)
- DEBUG ("Error while creating the TLS certificate: %s",
- (*error)->message);
-
- return retval;
-}
-
-void
-empathy_tls_certificate_accept_async (EmpathyTLSCertificate *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *accept_result;
-
- g_assert (EMPATHY_IS_TLS_CERTIFICATE (self));
-
- DEBUG ("Accepting TLS certificate");
-
- accept_result = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, empathy_tls_certificate_accept_async);
-
- emp_cli_authentication_tls_certificate_call_accept (TP_PROXY (self),
- -1, cert_proxy_accept_cb,
- accept_result, g_object_unref,
- G_OBJECT (self));
-}
-
-gboolean
-empathy_tls_certificate_accept_finish (EmpathyTLSCertificate *self,
- GAsyncResult *result,
- GError **error)
-{
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
- error))
- return FALSE;
-
- return TRUE;
-}
-
-static GPtrArray *
-build_rejections_array (EmpTLSCertificateRejectReason reason,
- GHashTable *details)
-{
- GPtrArray *retval;
- GValueArray *rejection;
-
- retval = g_ptr_array_new ();
- rejection = tp_value_array_build (3,
- G_TYPE_UINT, reason,
- G_TYPE_STRING, reject_reason_get_dbus_error (reason),
- TP_HASH_TYPE_STRING_VARIANT_MAP, details,
- NULL);
-
- g_ptr_array_add (retval, rejection);
-
- return retval;
-}
-
-void
-empathy_tls_certificate_reject_async (EmpathyTLSCertificate *self,
- EmpTLSCertificateRejectReason reason,
- GHashTable *details,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GPtrArray *rejections;
- GSimpleAsyncResult *reject_result;
-
- g_assert (EMPATHY_IS_TLS_CERTIFICATE (self));
-
- DEBUG ("Rejecting TLS certificate with reason %u", reason);
-
- rejections = build_rejections_array (reason, details);
- reject_result = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, empathy_tls_certificate_reject_async);
-
- emp_cli_authentication_tls_certificate_call_reject (TP_PROXY (self),
- -1, rejections, cert_proxy_reject_cb,
- reject_result, g_object_unref, G_OBJECT (self));
-
- tp_clear_boxed (EMP_ARRAY_TYPE_TLS_CERTIFICATE_REJECTION_LIST,
- &rejections);
-}
-
-gboolean
-empathy_tls_certificate_reject_finish (EmpathyTLSCertificate *self,
- GAsyncResult *result,
- GError **error)
-{
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
- error))
- return FALSE;
-
- return TRUE;
-}
diff --git a/libempathy/empathy-tls-certificate.h b/libempathy/empathy-tls-certificate.h
deleted file mode 100644
index 8ad3d209e..000000000
--- a/libempathy/empathy-tls-certificate.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * empathy-tls-certificate.h - Header for EmpathyTLSCertificate
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * 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_TLS_CERTIFICATE_H__
-#define __EMPATHY_TLS_CERTIFICATE_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include <telepathy-glib/proxy-subclass.h>
-
-#include <extensions/extensions.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyTLSCertificate EmpathyTLSCertificate;
-typedef struct _EmpathyTLSCertificateClass EmpathyTLSCertificateClass;
-
-struct _EmpathyTLSCertificateClass {
- TpProxyClass parent_class;
-};
-
-struct _EmpathyTLSCertificate {
- TpProxy parent;
- gpointer priv;
-};
-
-GType empathy_tls_certificate_get_type (void);
-
-#define EMPATHY_TYPE_TLS_CERTIFICATE \
- (empathy_tls_certificate_get_type ())
-#define EMPATHY_TLS_CERTIFICATE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_TLS_CERTIFICATE, \
- EmpathyTLSCertificate))
-#define EMPATHY_TLS_CERTIFICATE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_TLS_CERTIFICATE, \
- EmpathyTLSCertificateClass))
-#define EMPATHY_IS_TLS_CERTIFICATE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_TLS_CERTIFICATE))
-#define EMPATHY_IS_TLS_CERTIFICATE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_TLS_CERTIFICATE))
-#define EMPATHY_TLS_CERTIFICATE_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_TLS_CERTIFICATE, \
- EmpathyTLSCertificateClass))
-
-EmpathyTLSCertificate * empathy_tls_certificate_new (TpDBusDaemon *dbus,
- const gchar *bus_name,
- const gchar *object_path,
- GError **error);
-
-void empathy_tls_certificate_prepare_async (EmpathyTLSCertificate *self,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gboolean empathy_tls_certificate_prepare_finish (EmpathyTLSCertificate *self,
- GAsyncResult *result,
- GError **error);
-
-void empathy_tls_certificate_accept_async (EmpathyTLSCertificate *self,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gboolean empathy_tls_certificate_accept_finish (EmpathyTLSCertificate *self,
- GAsyncResult *result,
- GError **error);
-
-void empathy_tls_certificate_reject_async (EmpathyTLSCertificate *self,
- EmpTLSCertificateRejectReason reason,
- GHashTable *details,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gboolean empathy_tls_certificate_reject_finish (EmpathyTLSCertificate *self,
- GAsyncResult *result,
- GError **error);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_TLS_CERTIFICATE_H__*/
diff --git a/libempathy/empathy-tls-verifier.c b/libempathy/empathy-tls-verifier.c
index 2f20ca8e3..a9a4f3818 100644
--- a/libempathy/empathy-tls-verifier.c
+++ b/libempathy/empathy-tls-verifier.c
@@ -24,8 +24,6 @@
#include <gnutls/gnutls.h>
#include <gnutls/x509.h>
-#include <telepathy-glib/util.h>
-
#include "empathy-tls-verifier.h"
#include <gcr/gcr.h>
@@ -48,7 +46,7 @@ enum {
};
typedef struct {
- EmpathyTLSCertificate *certificate;
+ TpTLSCertificate *certificate;
gchar *hostname;
gchar **reference_identities;
@@ -61,7 +59,7 @@ typedef struct {
static gboolean
verification_output_to_reason (gint res,
guint verify_output,
- EmpTLSCertificateRejectReason *reason)
+ TpTLSCertificateRejectReason *reason)
{
gboolean retval = TRUE;
@@ -75,13 +73,13 @@ verification_output_to_reason (gint res,
switch (res)
{
case GNUTLS_E_INSUFFICIENT_CREDENTIALS:
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED;
break;
case GNUTLS_E_CONSTRAINT_ERROR:
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_LIMIT_EXCEEDED;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_LIMIT_EXCEEDED;
break;
default:
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
break;
}
@@ -94,17 +92,17 @@ verification_output_to_reason (gint res,
retval = FALSE;
if (verify_output & GNUTLS_CERT_SIGNER_NOT_FOUND)
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED;
else if (verify_output & GNUTLS_CERT_SIGNER_NOT_CA)
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED;
else if (verify_output & GNUTLS_CERT_INSECURE_ALGORITHM)
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_INSECURE;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_INSECURE;
else if (verify_output & GNUTLS_CERT_NOT_ACTIVATED)
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_NOT_ACTIVATED;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_NOT_ACTIVATED;
else if (verify_output & GNUTLS_CERT_EXPIRED)
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_EXPIRED;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_EXPIRED;
else
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
goto out;
}
@@ -201,7 +199,7 @@ complete_verification (EmpathyTLSVerifier *self)
static void
abort_verification (EmpathyTLSVerifier *self,
- EmpTLSCertificateRejectReason reason)
+ TpTLSCertificateRejectReason reason)
{
EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
@@ -251,8 +249,8 @@ perform_verification (EmpathyTLSVerifier *self,
GcrCertificateChain *chain)
{
gboolean ret = FALSE;
- EmpTLSCertificateRejectReason reason =
- EMP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
+ TpTLSCertificateRejectReason reason =
+ TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
gnutls_x509_crt_t *list, *anchors;
guint n_list, n_anchors;
guint verify_output;
@@ -282,7 +280,7 @@ perform_verification (EmpathyTLSVerifier *self,
&anchors, &n_anchors);
if (list == NULL || n_list == 0) {
g_warn_if_reached ();
- abort_verification (self, EMP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN);
+ abort_verification (self, TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN);
goto out;
}
@@ -328,7 +326,7 @@ perform_verification (EmpathyTLSVerifier *self,
g_free (certified_hostname);
abort_verification (self,
- EMP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
+ TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
goto out;
}
@@ -465,9 +463,9 @@ empathy_tls_verifier_class_init (EmpathyTLSVerifierClass *klass)
oclass->finalize = empathy_tls_verifier_finalize;
oclass->dispose = empathy_tls_verifier_dispose;
- pspec = g_param_spec_object ("certificate", "The EmpathyTLSCertificate",
- "The EmpathyTLSCertificate to be verified.",
- EMPATHY_TYPE_TLS_CERTIFICATE,
+ pspec = g_param_spec_object ("certificate", "The TpTLSCertificate",
+ "The TpTLSCertificate to be verified.",
+ TP_TYPE_TLS_CERTIFICATE,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (oclass, PROP_TLS_CERTIFICATE, pspec);
@@ -486,10 +484,11 @@ empathy_tls_verifier_class_init (EmpathyTLSVerifierClass *klass)
}
EmpathyTLSVerifier *
-empathy_tls_verifier_new (EmpathyTLSCertificate *certificate,
- const gchar *hostname, const gchar **reference_identities)
+empathy_tls_verifier_new (TpTLSCertificate *certificate,
+ const gchar *hostname,
+ const gchar **reference_identities)
{
- g_assert (EMPATHY_IS_TLS_CERTIFICATE (certificate));
+ g_assert (TP_IS_TLS_CERTIFICATE (certificate));
g_assert (hostname != NULL);
g_assert (reference_identities != NULL);
@@ -507,7 +506,7 @@ empathy_tls_verifier_verify_async (EmpathyTLSVerifier *self,
{
GcrCertificateChain *chain;
GcrCertificate *cert;
- GPtrArray *cert_data = NULL;
+ GPtrArray *cert_data;
GArray *data;
guint idx;
EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
@@ -516,7 +515,7 @@ empathy_tls_verifier_verify_async (EmpathyTLSVerifier *self,
g_return_if_fail (priv->verify_result == NULL);
- g_object_get (priv->certificate, "cert-data", &cert_data, NULL);
+ cert_data = tp_tls_certificate_get_cert_data (priv->certificate);
g_return_if_fail (cert_data);
priv->verify_result = g_simple_async_result_new (G_OBJECT (self),
@@ -531,17 +530,16 @@ empathy_tls_verifier_verify_async (EmpathyTLSVerifier *self,
g_object_unref (cert);
}
- gcr_certificate_chain_build_async (chain, GCR_PURPOSE_CLIENT_AUTH, priv->hostname, 0,
+ gcr_certificate_chain_build_async (chain, GCR_PURPOSE_SERVER_AUTH, priv->hostname, 0,
NULL, perform_verification_cb, g_object_ref (self));
g_object_unref (chain);
- g_boxed_free (TP_ARRAY_TYPE_UCHAR_ARRAY_LIST, cert_data);
}
gboolean
empathy_tls_verifier_verify_finish (EmpathyTLSVerifier *self,
GAsyncResult *res,
- EmpTLSCertificateRejectReason *reason,
+ TpTLSCertificateRejectReason *reason,
GHashTable **details,
GError **error)
{
@@ -565,7 +563,7 @@ empathy_tls_verifier_verify_finish (EmpathyTLSVerifier *self,
}
if (reason != NULL)
- *reason = EMP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
+ *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
return TRUE;
}
@@ -575,11 +573,11 @@ empathy_tls_verifier_store_exception (EmpathyTLSVerifier *self)
{
GArray *data;
GcrCertificate *cert;
- GPtrArray *cert_data = NULL;
+ GPtrArray *cert_data;
GError *error = NULL;
EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
- g_object_get (priv->certificate, "cert-data", &cert_data, NULL);
+ cert_data = tp_tls_certificate_get_cert_data (priv->certificate);
g_return_if_fail (cert_data);
if (!cert_data->len)
@@ -595,10 +593,9 @@ empathy_tls_verifier_store_exception (EmpathyTLSVerifier *self)
DEBUG ("Storing pinned certificate:");
debug_certificate (cert);
- if (!gcr_trust_add_pinned_certificate (cert, GCR_PURPOSE_CLIENT_AUTH,
+ if (!gcr_trust_add_pinned_certificate (cert, GCR_PURPOSE_SERVER_AUTH,
priv->hostname, NULL, &error))
DEBUG ("Can't store the pinned certificate: %s", error->message);
g_object_unref (cert);
- g_boxed_free (TP_ARRAY_TYPE_UCHAR_ARRAY_LIST, cert_data);
}
diff --git a/libempathy/empathy-tls-verifier.h b/libempathy/empathy-tls-verifier.h
index 436149336..2f66acb9c 100644
--- a/libempathy/empathy-tls-verifier.h
+++ b/libempathy/empathy-tls-verifier.h
@@ -24,9 +24,7 @@
#include <glib-object.h>
#include <gio/gio.h>
-#include <libempathy/empathy-tls-certificate.h>
-
-#include <extensions/extensions.h>
+#include <telepathy-glib/telepathy-glib.h>
G_BEGIN_DECLS
@@ -61,7 +59,7 @@ GType empathy_tls_verifier_get_type (void);
EmpathyTLSVerifierClass))
EmpathyTLSVerifier * empathy_tls_verifier_new (
- EmpathyTLSCertificate *certificate,
+ TpTLSCertificate *certificate,
const gchar *hostname,
const gchar **reference_identities);
@@ -71,7 +69,7 @@ void empathy_tls_verifier_verify_async (EmpathyTLSVerifier *self,
gboolean empathy_tls_verifier_verify_finish (EmpathyTLSVerifier *self,
GAsyncResult *res,
- EmpTLSCertificateRejectReason *reason,
+ TpTLSCertificateRejectReason *reason,
GHashTable **details,
GError **error);
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index e90f6ede2..431de6e65 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -1,6 +1,5 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
- * Copyright (C) 2007-2008 Collabora Ltd.
+ * Copyright (C) 2007-2012 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -28,8 +27,6 @@
#include <extensions/extensions.h>
#include "empathy-tp-chat.h"
-#include "empathy-tp-contact-factory.h"
-#include "empathy-contact-list.h"
#include "empathy-request-util.h"
#include "empathy-time.h"
#include "empathy-utils.h"
@@ -37,1380 +34,1164 @@
#define DEBUG_FLAG EMPATHY_DEBUG_TP | EMPATHY_DEBUG_CHAT
#include "empathy-debug.h"
-struct _EmpathyTpChatPrivate {
- TpAccount *account;
- EmpathyContact *user;
- EmpathyContact *remote_contact;
- GList *members;
- /* Queue of messages not signalled yet */
- GQueue *messages_queue;
- /* Queue of messages signalled but not acked yet */
- GQueue *pending_messages_queue;
+struct _EmpathyTpChatPrivate
+{
+ TpAccount *account;
+ EmpathyContact *user;
+ EmpathyContact *remote_contact;
+ GList *members;
+ /* Queue of messages signalled but not acked yet */
+ GQueue *pending_messages_queue;
- /* Subject */
- gboolean supports_subject;
- gboolean can_set_subject;
- gchar *subject;
- gchar *subject_actor;
+ /* Subject */
+ gboolean supports_subject;
+ gboolean can_set_subject;
+ gchar *subject;
+ gchar *subject_actor;
- /* Room config (for now, we only track the title and don't support
- * setting it) */
- gchar *title;
+ /* Room config (for now, we only track the title and don't support
+ * setting it) */
+ gchar *title;
- gboolean can_upgrade_to_muc;
+ gboolean can_upgrade_to_muc;
- GHashTable *messages_being_sent;
+ GHashTable *messages_being_sent;
- /* GSimpleAsyncResult used when preparing EMPATHY_TP_CHAT_FEATURE_CORE */
- GSimpleAsyncResult *ready_result;
+ /* GSimpleAsyncResult used when preparing EMPATHY_TP_CHAT_FEATURE_CORE */
+ GSimpleAsyncResult *ready_result;
};
-static void tp_chat_iface_init (EmpathyContactListIface *iface);
-
-enum {
- PROP_0,
- PROP_ACCOUNT,
- PROP_SELF_CONTACT,
- PROP_REMOTE_CONTACT,
- PROP_N_MESSAGES_SENDING,
- PROP_TITLE,
- PROP_SUBJECT,
+enum
+{
+ PROP_0,
+ PROP_ACCOUNT,
+ PROP_SELF_CONTACT,
+ PROP_REMOTE_CONTACT,
+ PROP_N_MESSAGES_SENDING,
+ PROP_TITLE,
+ PROP_SUBJECT,
};
-enum {
- MESSAGE_RECEIVED,
- SEND_ERROR,
- CHAT_STATE_CHANGED,
- MESSAGE_ACKNOWLEDGED,
- LAST_SIGNAL
+enum
+{
+ MESSAGE_RECEIVED,
+ SEND_ERROR,
+ MESSAGE_ACKNOWLEDGED,
+ SIG_MEMBER_RENAMED,
+ SIG_MEMBERS_CHANGED,
+ LAST_SIGNAL
};
static guint signals[LAST_SIGNAL];
-G_DEFINE_TYPE_WITH_CODE (EmpathyTpChat, empathy_tp_chat, TP_TYPE_TEXT_CHANNEL,
- G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_CONTACT_LIST,
- tp_chat_iface_init));
+G_DEFINE_TYPE (EmpathyTpChat, empathy_tp_chat, TP_TYPE_TEXT_CHANNEL)
static void
-tp_chat_set_delivery_status (EmpathyTpChat *self,
- const gchar *token,
- EmpathyDeliveryStatus delivery_status)
-{
- TpDeliveryReportingSupportFlags flags =
- tp_text_channel_get_delivery_reporting_support (
- TP_TEXT_CHANNEL (self));
-
- /* channel must support receiving failures and successes */
- if (!tp_str_empty (token) &&
- flags & TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_FAILURES &&
- flags & TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_SUCCESSES) {
-
- DEBUG ("Delivery status (%s) = %u", token, delivery_status);
-
- switch (delivery_status) {
- case EMPATHY_DELIVERY_STATUS_NONE:
- g_hash_table_remove (self->priv->messages_being_sent,
- token);
- break;
-
- default:
- g_hash_table_insert (self->priv->messages_being_sent,
- g_strdup (token),
- GUINT_TO_POINTER (delivery_status));
- break;
- }
-
- g_object_notify (G_OBJECT (self), "n-messages-sending");
- }
+tp_chat_set_delivery_status (EmpathyTpChat *self,
+ const gchar *token,
+ EmpathyDeliveryStatus delivery_status)
+{
+ TpDeliveryReportingSupportFlags flags =
+ tp_text_channel_get_delivery_reporting_support (
+ TP_TEXT_CHANNEL (self));
+
+ /* channel must support receiving failures and successes */
+ if (!tp_str_empty (token) &&
+ flags & TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_FAILURES &&
+ flags & TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_SUCCESSES)
+ {
+ DEBUG ("Delivery status (%s) = %u", token, delivery_status);
+
+ switch (delivery_status)
+ {
+ case EMPATHY_DELIVERY_STATUS_NONE:
+ g_hash_table_remove (self->priv->messages_being_sent,
+ token);
+ break;
+
+ default:
+ g_hash_table_insert (self->priv->messages_being_sent,
+ g_strdup (token),
+ GUINT_TO_POINTER (delivery_status));
+ break;
+ }
+
+ g_object_notify (G_OBJECT (self), "n-messages-sending");
+ }
}
static void tp_chat_prepare_ready_async (TpProxy *proxy,
- const TpProxyFeature *feature,
- GAsyncReadyCallback callback,
- gpointer user_data);
+ const TpProxyFeature *feature,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
static void
tp_chat_async_cb (TpChannel *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
{
- if (error) {
- DEBUG ("Error %s: %s", (gchar *) user_data, error->message);
- }
+ if (error != NULL)
+ DEBUG ("Error %s: %s", (gchar *) user_data, error->message);
}
static void
create_conference_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
+ GAsyncResult *result,
+ gpointer user_data)
{
- GError *error = NULL;
+ GError *error = NULL;
- if (!tp_account_channel_request_create_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error)) {
- DEBUG ("Failed to create conference channel: %s", error->message);
- g_error_free (error);
- }
+ if (!tp_account_channel_request_create_channel_finish (
+ TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error))
+ {
+ DEBUG ("Failed to create conference channel: %s", error->message);
+ g_error_free (error);
+ }
}
-static void
-tp_chat_add (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *message)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) list;
- TpChannel *channel = (TpChannel *) self;
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP)) {
- TpHandle handle;
- GArray handles = {(gchar *) &handle, 1};
-
- g_return_if_fail (EMPATHY_IS_TP_CHAT (list));
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- handle = empathy_contact_get_handle (contact);
- tp_cli_channel_interface_group_call_add_members (channel,
- -1, &handles, NULL, NULL, NULL, NULL, NULL);
- } else if (self->priv->can_upgrade_to_muc) {
- TpAccountChannelRequest *req;
- GHashTable *props;
- const char *object_path;
- GPtrArray channels = { (gpointer *) &object_path, 1 };
- const char *invitees[2] = { NULL, };
-
- invitees[0] = empathy_contact_get_id (contact);
- object_path = tp_proxy_get_object_path (self);
-
- props = tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_NONE,
- TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_CHANNELS,
- TP_ARRAY_TYPE_OBJECT_PATH_LIST, &channels,
- TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_INVITEE_IDS,
- G_TYPE_STRV, invitees,
- /* FIXME: InvitationMessage ? */
- NULL);
-
- req = tp_account_channel_request_new (self->priv->account, props,
- TP_USER_ACTION_TIME_NOT_USER_ACTION);
-
- /* Although this is a MUC, it's anonymous, so CreateChannel is
- * valid. */
- tp_account_channel_request_create_channel_async (req, EMPATHY_CHAT_BUS_NAME,
- NULL, create_conference_cb, NULL);
-
- g_object_unref (req);
- g_hash_table_unref (props);
- } else {
- g_warning ("Cannot add to this channel");
- }
-}
-
-static void
-tp_chat_remove (EmpathyContactList *list,
- EmpathyContact *contact,
- const gchar *message)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) list;
- TpHandle handle;
- GArray handles = {(gchar *) &handle, 1};
-
- g_return_if_fail (EMPATHY_IS_TP_CHAT (list));
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- handle = empathy_contact_get_handle (contact);
- tp_cli_channel_interface_group_call_remove_members ((TpChannel *) self, -1,
- &handles, NULL,
- NULL, NULL, NULL,
- NULL);
-}
-
-static GList *
-tp_chat_get_members (EmpathyContactList *list)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) list;
- GList *members = NULL;
-
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (list), NULL);
-
- if (self->priv->members) {
- members = g_list_copy (self->priv->members);
- g_list_foreach (members, (GFunc) g_object_ref, NULL);
- } else {
- members = g_list_prepend (members, g_object_ref (self->priv->user));
- if (self->priv->remote_contact != NULL)
- members = g_list_prepend (members, g_object_ref (self->priv->remote_contact));
- }
-
- return members;
+void
+empathy_tp_chat_add (EmpathyTpChat *self,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ TpChannel *channel = (TpChannel *) self;
+
+ if (tp_proxy_has_interface_by_id (self,
+ TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP))
+ {
+ TpHandle handle;
+ GArray handles = {(gchar *) &handle, 1};
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ handle = empathy_contact_get_handle (contact);
+ tp_cli_channel_interface_group_call_add_members (channel,
+ -1, &handles, NULL, NULL, NULL, NULL, NULL);
+ }
+ else if (self->priv->can_upgrade_to_muc)
+ {
+ TpAccountChannelRequest *req;
+ GHashTable *props;
+ const char *object_path;
+ GPtrArray channels = { (gpointer *) &object_path, 1 };
+ const char *invitees[2] = { NULL, };
+
+ invitees[0] = empathy_contact_get_id (contact);
+ object_path = tp_proxy_get_object_path (self);
+
+ props = tp_asv_new (
+ TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
+ TP_IFACE_CHANNEL_TYPE_TEXT,
+ TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
+ TP_HANDLE_TYPE_NONE,
+ TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_CHANNELS,
+ TP_ARRAY_TYPE_OBJECT_PATH_LIST, &channels,
+ TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_INVITEE_IDS,
+ G_TYPE_STRV, invitees,
+ /* FIXME: InvitationMessage ? */
+ NULL);
+
+ req = tp_account_channel_request_new (self->priv->account, props,
+ TP_USER_ACTION_TIME_NOT_USER_ACTION);
+
+ /* Although this is a MUC, it's anonymous, so CreateChannel is
+ * valid. */
+ tp_account_channel_request_create_channel_async (req,
+ EMPATHY_CHAT_BUS_NAME, NULL, create_conference_cb, NULL);
+
+ g_object_unref (req);
+ g_hash_table_unref (props);
+ }
+ else
+ {
+ g_warning ("Cannot add to this channel");
+ }
+}
+
+GList *
+empathy_tp_chat_get_members (EmpathyTpChat *self)
+{
+ GList *members = NULL;
+
+ if (self->priv->members)
+ {
+ members = g_list_copy (self->priv->members);
+ g_list_foreach (members, (GFunc) g_object_ref, NULL);
+ }
+ else
+ {
+ members = g_list_prepend (members, g_object_ref (self->priv->user));
+
+ if (self->priv->remote_contact != NULL)
+ members = g_list_prepend (members,
+ g_object_ref (self->priv->remote_contact));
+ }
+
+ return members;
}
static void
check_ready (EmpathyTpChat *self)
{
- if (self->priv->ready_result == NULL)
- return;
-
- if (g_queue_get_length (self->priv->messages_queue) > 0)
- return;
+ if (self->priv->ready_result == NULL)
+ return;
- DEBUG ("Ready");
+ DEBUG ("Ready");
- g_simple_async_result_complete (self->priv->ready_result);
- tp_clear_object (&self->priv->ready_result);
+ g_simple_async_result_complete_in_idle (self->priv->ready_result);
+ tp_clear_object (&self->priv->ready_result);
}
static void
-tp_chat_emit_queued_messages (EmpathyTpChat *self)
+tp_chat_build_message (EmpathyTpChat *self,
+ TpMessage *msg,
+ gboolean incoming)
{
- EmpathyMessage *message;
+ EmpathyMessage *message;
+ TpContact *sender;
- /* Check if we can now emit some queued messages */
- while ((message = g_queue_peek_head (self->priv->messages_queue)) != NULL) {
- if (empathy_message_get_sender (message) == NULL) {
- break;
- }
+ message = empathy_message_new_from_tp_message (msg, incoming);
+ /* FIXME: this is actually a lie for incoming messages. */
+ empathy_message_set_receiver (message, self->priv->user);
- DEBUG ("Queued message ready");
- g_queue_pop_head (self->priv->messages_queue);
- g_queue_push_tail (self->priv->pending_messages_queue, message);
- g_signal_emit (self, signals[MESSAGE_RECEIVED], 0, message);
- }
+ sender = tp_signalled_message_get_sender (msg);
+ g_assert (sender != NULL);
- check_ready (self);
-}
+ if (tp_contact_get_handle (sender) == 0)
+ {
+ empathy_message_set_sender (message, self->priv->user);
+ }
+ else
+ {
+ EmpathyContact *contact;
-static void
-tp_chat_got_sender_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer message,
- GObject *chat)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) chat;
+ contact = empathy_contact_dup_from_tp_contact (sender);
- if (error) {
- DEBUG ("Error: %s", error->message);
- /* Do not block the message queue, just drop this message */
- g_queue_remove (self->priv->messages_queue, message);
- } else {
- empathy_message_set_sender (message, contact);
- }
+ empathy_message_set_sender (message, contact);
- tp_chat_emit_queued_messages (EMPATHY_TP_CHAT (self));
-}
+ g_object_unref (contact);
+ }
-static void
-tp_chat_build_message (EmpathyTpChat *self,
- TpMessage *msg,
- gboolean incoming)
-{
- EmpathyMessage *message;
- TpContact *sender;
-
- message = empathy_message_new_from_tp_message (msg, incoming);
- /* FIXME: this is actually a lie for incoming messages. */
- empathy_message_set_receiver (message, self->priv->user);
-
- g_queue_push_tail (self->priv->messages_queue, message);
-
- sender = tp_signalled_message_get_sender (msg);
- g_assert (sender != NULL);
-
- if (tp_contact_get_handle (sender) == 0) {
- empathy_message_set_sender (message, self->priv->user);
- tp_chat_emit_queued_messages (self);
- } else {
- TpConnection *connection = tp_channel_borrow_connection (
- (TpChannel *) self);
-
- empathy_tp_contact_factory_get_from_handle (connection,
- tp_contact_get_handle (sender),
- tp_chat_got_sender_cb,
- message, NULL, G_OBJECT (self));
- }
+ g_queue_push_tail (self->priv->pending_messages_queue, message);
+ g_signal_emit (self, signals[MESSAGE_RECEIVED], 0, message);
}
static void
handle_delivery_report (EmpathyTpChat *self,
- TpMessage *message)
-{
- TpDeliveryStatus delivery_status;
- const GHashTable *header;
- TpChannelTextSendError delivery_error;
- gboolean valid;
- GPtrArray *echo;
- const gchar *message_body = NULL;
- const gchar *delivery_dbus_error;
- const gchar *delivery_token = NULL;
-
- header = tp_message_peek (message, 0);
- if (header == NULL)
- goto out;
-
- delivery_token = tp_asv_get_string (header, "delivery-token");
- delivery_status = tp_asv_get_uint32 (header, "delivery-status", &valid);
-
- if (!valid) {
- goto out;
- } else if (delivery_status == TP_DELIVERY_STATUS_ACCEPTED) {
- DEBUG ("Accepted %s", delivery_token);
- tp_chat_set_delivery_status (self, delivery_token,
- EMPATHY_DELIVERY_STATUS_ACCEPTED);
- goto out;
- } else if (delivery_status == TP_DELIVERY_STATUS_DELIVERED) {
- DEBUG ("Delivered %s", delivery_token);
- tp_chat_set_delivery_status (self, delivery_token,
- EMPATHY_DELIVERY_STATUS_NONE);
- goto out;
- } else if (delivery_status != TP_DELIVERY_STATUS_PERMANENTLY_FAILED &&
- delivery_status != TP_DELIVERY_STATUS_TEMPORARILY_FAILED) {
- goto out;
- }
-
- delivery_error = tp_asv_get_uint32 (header, "delivery-error", &valid);
- if (!valid)
- delivery_error = TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
-
- delivery_dbus_error = tp_asv_get_string (header, "delivery-dbus-error");
-
- /* TODO: ideally we should use tp-glib API giving us the echoed message as a
- * TpMessage. (fdo #35884) */
- echo = tp_asv_get_boxed (header, "delivery-echo",
- TP_ARRAY_TYPE_MESSAGE_PART_LIST);
- if (echo != NULL && echo->len >= 2) {
- const GHashTable *echo_body;
-
- echo_body = g_ptr_array_index (echo, 1);
- if (echo_body != NULL)
- message_body = tp_asv_get_string (echo_body, "content");
- }
-
- tp_chat_set_delivery_status (self, delivery_token,
- EMPATHY_DELIVERY_STATUS_NONE);
- g_signal_emit (self, signals[SEND_ERROR], 0, message_body,
- delivery_error, delivery_dbus_error);
+ TpMessage *message)
+{
+ TpDeliveryStatus delivery_status;
+ const GHashTable *header;
+ TpChannelTextSendError delivery_error;
+ gboolean valid;
+ GPtrArray *echo;
+ const gchar *message_body = NULL;
+ const gchar *delivery_dbus_error;
+ const gchar *delivery_token = NULL;
+
+ header = tp_message_peek (message, 0);
+ if (header == NULL)
+ goto out;
+
+ delivery_token = tp_asv_get_string (header, "delivery-token");
+ delivery_status = tp_asv_get_uint32 (header, "delivery-status", &valid);
+
+ if (!valid)
+ {
+ goto out;
+ }
+ else if (delivery_status == TP_DELIVERY_STATUS_ACCEPTED)
+ {
+ DEBUG ("Accepted %s", delivery_token);
+ tp_chat_set_delivery_status (self, delivery_token,
+ EMPATHY_DELIVERY_STATUS_ACCEPTED);
+ goto out;
+ }
+ else if (delivery_status == TP_DELIVERY_STATUS_DELIVERED)
+ {
+ DEBUG ("Delivered %s", delivery_token);
+ tp_chat_set_delivery_status (self, delivery_token,
+ EMPATHY_DELIVERY_STATUS_NONE);
+ goto out;
+ }
+ else if (delivery_status != TP_DELIVERY_STATUS_PERMANENTLY_FAILED &&
+ delivery_status != TP_DELIVERY_STATUS_TEMPORARILY_FAILED)
+ {
+ goto out;
+ }
+
+ delivery_error = tp_asv_get_uint32 (header, "delivery-error", &valid);
+ if (!valid)
+ delivery_error = TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
+
+ delivery_dbus_error = tp_asv_get_string (header, "delivery-dbus-error");
+
+ /* TODO: ideally we should use tp-glib API giving us the echoed message as a
+ * TpMessage. (fdo #35884) */
+ echo = tp_asv_get_boxed (header, "delivery-echo",
+ TP_ARRAY_TYPE_MESSAGE_PART_LIST);
+ if (echo != NULL && echo->len >= 2)
+ {
+ const GHashTable *echo_body;
+
+ echo_body = g_ptr_array_index (echo, 1);
+ if (echo_body != NULL)
+ message_body = tp_asv_get_string (echo_body, "content");
+ }
+
+ tp_chat_set_delivery_status (self, delivery_token,
+ EMPATHY_DELIVERY_STATUS_NONE);
+ g_signal_emit (self, signals[SEND_ERROR], 0, message_body,
+ delivery_error, delivery_dbus_error);
out:
- tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
- message, NULL, NULL);
+ tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
+ message, NULL, NULL);
}
static void
handle_incoming_message (EmpathyTpChat *self,
- TpMessage *message,
- gboolean pending)
+ TpMessage *message,
+ gboolean pending)
{
- gchar *message_body;
+ gchar *message_body;
- if (tp_message_is_delivery_report (message)) {
- handle_delivery_report (self, message);
- return;
- }
+ if (tp_message_is_delivery_report (message))
+ {
+ handle_delivery_report (self, message);
+ return;
+ }
- message_body = tp_message_to_text (message, NULL);
+ message_body = tp_message_to_text (message, NULL);
- DEBUG ("Message %s (channel %s): %s",
- pending ? "pending" : "received",
- tp_proxy_get_object_path (self), message_body);
+ DEBUG ("Message %s (channel %s): %s",
+ pending ? "pending" : "received",
+ tp_proxy_get_object_path (self), message_body);
- if (message_body == NULL) {
- DEBUG ("Empty message with NonTextContent, ignoring and acking.");
+ if (message_body == NULL)
+ {
+ DEBUG ("Empty message with NonTextContent, ignoring and acking.");
- tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
- message, NULL, NULL);
- return;
- }
+ tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
+ message, NULL, NULL);
+ return;
+ }
- tp_chat_build_message (self, message, TRUE);
+ tp_chat_build_message (self, message, TRUE);
- g_free (message_body);
+ g_free (message_body);
}
static void
-message_received_cb (TpTextChannel *channel,
- TpMessage *message,
- EmpathyTpChat *self)
+message_received_cb (TpTextChannel *channel,
+ TpMessage *message,
+ EmpathyTpChat *self)
{
- handle_incoming_message (self, message, FALSE);
+ handle_incoming_message (self, message, FALSE);
}
static gboolean
find_pending_message_func (gconstpointer a,
- gconstpointer b)
+ gconstpointer b)
{
- EmpathyMessage *msg = (EmpathyMessage *) a;
- TpMessage *message = (TpMessage *) b;
+ EmpathyMessage *msg = (EmpathyMessage *) a;
+ TpMessage *message = (TpMessage *) b;
- if (empathy_message_get_tp_message (msg) == message)
- return 0;
+ if (empathy_message_get_tp_message (msg) == message)
+ return 0;
- return -1;
+ return -1;
}
static void
pending_message_removed_cb (TpTextChannel *channel,
- TpMessage *message,
- EmpathyTpChat *self)
+ TpMessage *message,
+ EmpathyTpChat *self)
{
- GList *m;
+ GList *m;
- m = g_queue_find_custom (self->priv->pending_messages_queue, message,
- find_pending_message_func);
+ m = g_queue_find_custom (self->priv->pending_messages_queue, message,
+ find_pending_message_func);
- if (m == NULL)
- return;
+ if (m == NULL)
+ return;
- g_signal_emit (self, signals[MESSAGE_ACKNOWLEDGED], 0, m->data);
+ g_signal_emit (self, signals[MESSAGE_ACKNOWLEDGED], 0, m->data);
- g_object_unref (m->data);
- g_queue_delete_link (self->priv->pending_messages_queue, m);
+ g_object_unref (m->data);
+ g_queue_delete_link (self->priv->pending_messages_queue, m);
}
static void
-message_sent_cb (TpTextChannel *channel,
- TpMessage *message,
- TpMessageSendingFlags flags,
- gchar *token,
- EmpathyTpChat *self)
+message_sent_cb (TpTextChannel *channel,
+ TpMessage *message,
+ TpMessageSendingFlags flags,
+ gchar *token,
+ EmpathyTpChat *self)
{
- gchar *message_body;
+ gchar *message_body;
- message_body = tp_message_to_text (message, NULL);
+ message_body = tp_message_to_text (message, NULL);
- DEBUG ("Message sent: %s", message_body);
+ DEBUG ("Message sent: %s", message_body);
- tp_chat_build_message (self, message, FALSE);
+ tp_chat_build_message (self, message, FALSE);
- g_free (message_body);
+ g_free (message_body);
}
static TpChannelTextSendError
error_to_text_send_error (GError *error)
{
- if (error->domain != TP_ERROR)
- return TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
-
- switch (error->code) {
- case TP_ERROR_OFFLINE:
- return TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE;
- case TP_ERROR_INVALID_HANDLE:
- return TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT;
- case TP_ERROR_PERMISSION_DENIED:
- return TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED;
- case TP_ERROR_NOT_IMPLEMENTED:
- return TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED;
- }
-
- return TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
-}
+ if (error->domain != TP_ERROR)
+ return TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
-static void
-message_send_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyTpChat *self = user_data;
- TpTextChannel *channel = (TpTextChannel *) source;
- gchar *token = NULL;
- GError *error = NULL;
-
- if (!tp_text_channel_send_message_finish (channel, result, &token, &error)) {
- DEBUG ("Error: %s", error->message);
-
- /* FIXME: we should use the body of the message as first argument of the
- * signal but can't easily get it as we just get a user_data pointer. Once
- * we'll have rebased EmpathyTpChat on top of TpTextChannel we'll be able
- * to use the user_data pointer to pass the message and fix this. */
- g_signal_emit (self, signals[SEND_ERROR], 0,
- NULL, error_to_text_send_error (error), NULL);
-
- g_error_free (error);
- }
-
- tp_chat_set_delivery_status (self, token,
- EMPATHY_DELIVERY_STATUS_SENDING);
- g_free (token);
-}
+ switch (error->code)
+ {
+ case TP_ERROR_OFFLINE:
+ return TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE;
+ case TP_ERROR_INVALID_HANDLE:
+ return TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT;
+ case TP_ERROR_PERMISSION_DENIED:
+ return TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED;
+ case TP_ERROR_NOT_IMPLEMENTED:
+ return TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED;
+ }
-typedef struct {
- EmpathyTpChat *chat;
- TpChannelChatState state;
-} StateChangedData;
+ return TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
+}
static void
-tp_chat_state_changed_got_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *chat)
+message_send_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- TpChannelChatState state;
+ EmpathyTpChat *self = user_data;
+ TpTextChannel *channel = (TpTextChannel *) source;
+ gchar *token = NULL;
+ GError *error = NULL;
- if (error) {
- DEBUG ("Error: %s", error->message);
- return;
- }
+ if (!tp_text_channel_send_message_finish (channel, result, &token, &error))
+ {
+ DEBUG ("Error: %s", error->message);
- state = GPOINTER_TO_UINT (user_data);
- DEBUG ("Chat state changed for %s (%d): %d",
- empathy_contact_get_alias (contact),
- empathy_contact_get_handle (contact), state);
+ /* FIXME: we should use the body of the message as first argument of the
+ * signal but can't easily get it as we just get a user_data pointer. Once
+ * we'll have rebased EmpathyTpChat on top of TpTextChannel we'll be able
+ * to use the user_data pointer to pass the message and fix this. */
+ g_signal_emit (self, signals[SEND_ERROR], 0,
+ NULL, error_to_text_send_error (error), NULL);
- g_signal_emit (chat, signals[CHAT_STATE_CHANGED], 0, contact, state);
-}
-
-static void
-tp_chat_state_changed_cb (TpChannel *channel,
- TpHandle handle,
- TpChannelChatState state,
- EmpathyTpChat *self)
-{
- TpConnection *connection = tp_channel_borrow_connection (
- (TpChannel *) self);
+ g_error_free (error);
+ }
- empathy_tp_contact_factory_get_from_handle (connection, handle,
- tp_chat_state_changed_got_contact_cb, GUINT_TO_POINTER (state),
- NULL, G_OBJECT (self));
+ tp_chat_set_delivery_status (self, token,
+ EMPATHY_DELIVERY_STATUS_SENDING);
+ g_free (token);
}
static void
list_pending_messages (EmpathyTpChat *self)
{
- GList *messages, *l;
+ GList *messages, *l;
- messages = tp_text_channel_get_pending_messages (
- TP_TEXT_CHANNEL (self));
+ messages = tp_text_channel_get_pending_messages (TP_TEXT_CHANNEL (self));
- for (l = messages; l != NULL; l = g_list_next (l)) {
- TpMessage *message = l->data;
+ for (l = messages; l != NULL; l = g_list_next (l))
+ {
+ TpMessage *message = l->data;
- handle_incoming_message (self, message, FALSE);
- }
+ handle_incoming_message (self, message, FALSE);
+ }
- g_list_free (messages);
+ g_list_free (messages);
}
static void
update_subject (EmpathyTpChat *self,
- GHashTable *properties)
+ GHashTable *properties)
{
- EmpathyTpChatPrivate *priv = self->priv;
- gboolean can_set, valid;
- const gchar *subject;
-
- can_set = tp_asv_get_boolean (properties, "CanSet", &valid);
- if (valid) {
- priv->can_set_subject = can_set;
- }
-
- subject = tp_asv_get_string (properties, "Subject");
- if (subject != NULL) {
- const gchar *actor;
-
- g_free (priv->subject);
- priv->subject = g_strdup (subject);
-
- /* If the actor is included with this update, use it;
- * otherwise, clear it to avoid showing stale information.
- * Why might it not be included? When you join an IRC channel,
- * you get a pair of messages: first, the current topic; next,
- * who set it, and when. Idle reports these in two separate
- * signals.
- */
- actor = tp_asv_get_string (properties, "Actor");
- g_free (priv->subject_actor);
- priv->subject_actor = g_strdup (actor);
-
- g_object_notify (G_OBJECT (self), "subject");
- }
-
- /* TODO: track Timestamp. */
+ gboolean can_set, valid;
+ const gchar *subject;
+
+ can_set = tp_asv_get_boolean (properties, "CanSet", &valid);
+ if (valid)
+ self->priv->can_set_subject = can_set;
+
+ subject = tp_asv_get_string (properties, "Subject");
+ if (subject != NULL)
+ {
+ const gchar *actor;
+
+ g_free (self->priv->subject);
+ self->priv->subject = g_strdup (subject);
+
+ /* If the actor is included with this update, use it;
+ * otherwise, clear it to avoid showing stale information.
+ * Why might it not be included? When you join an IRC channel,
+ * you get a pair of messages: first, the current topic; next,
+ * who set it, and when. Idle reports these in two separate
+ * signals.
+ */
+ actor = tp_asv_get_string (properties, "Actor");
+ g_free (self->priv->subject_actor);
+ self->priv->subject_actor = g_strdup (actor);
+
+ g_object_notify (G_OBJECT (self), "subject");
+ }
+
+ /* TODO: track Timestamp. */
}
static void
-tp_chat_get_all_subject_cb (TpProxy *proxy,
- GHashTable *properties,
- const GError *error,
- gpointer user_data G_GNUC_UNUSED,
- GObject *chat)
+tp_chat_get_all_subject_cb (TpProxy *proxy,
+ GHashTable *properties,
+ const GError *error,
+ gpointer user_data G_GNUC_UNUSED,
+ GObject *chat)
{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
- EmpathyTpChatPrivate *priv = self->priv;
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
- if (error) {
- DEBUG ("Error fetching subject: %s", error->message);
- return;
- }
+ if (error != NULL)
+ {
+ DEBUG ("Error fetching subject: %s", error->message);
+ return;
+ }
- priv->supports_subject = TRUE;
- update_subject (self, properties);
+ self->priv->supports_subject = TRUE;
+ update_subject (self, properties);
}
static void
update_title (EmpathyTpChat *self,
- GHashTable *properties)
+ GHashTable *properties)
{
- EmpathyTpChatPrivate *priv = self->priv;
- const gchar *title = tp_asv_get_string (properties, "Title");
-
- if (title != NULL) {
- if (tp_str_empty (title)) {
- title = NULL;
- }
-
- g_free (priv->title);
- priv->title = g_strdup (title);
- g_object_notify (G_OBJECT (self), "title");
- }
+ const gchar *title = tp_asv_get_string (properties, "Title");
+
+ if (title != NULL)
+ {
+ if (tp_str_empty (title))
+ title = NULL;
+
+ g_free (self->priv->title);
+ self->priv->title = g_strdup (title);
+ g_object_notify (G_OBJECT (self), "title");
+ }
}
static void
-tp_chat_get_all_room_config_cb (TpProxy *proxy,
- GHashTable *properties,
- const GError *error,
- gpointer user_data G_GNUC_UNUSED,
- GObject *chat)
+tp_chat_get_all_room_config_cb (TpProxy *proxy,
+ GHashTable *properties,
+ const GError *error,
+ gpointer user_data G_GNUC_UNUSED,
+ GObject *chat)
{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
- if (error) {
- DEBUG ("Error fetching room config: %s", error->message);
- return;
- }
+ if (error)
+ {
+ DEBUG ("Error fetching room config: %s", error->message);
+ return;
+ }
- update_title (self, properties);
+ update_title (self, properties);
}
static void
tp_chat_dbus_properties_changed_cb (TpProxy *proxy,
- const gchar *interface_name,
- GHashTable *changed,
- const gchar **invalidated,
- gpointer user_data,
- GObject *chat)
+ const gchar *interface_name,
+ GHashTable *changed,
+ const gchar **invalidated,
+ gpointer user_data,
+ GObject *chat)
{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
- if (!tp_strdiff (interface_name, TP_IFACE_CHANNEL_INTERFACE_SUBJECT)) {
- update_subject (self, changed);
- }
+ if (!tp_strdiff (interface_name, TP_IFACE_CHANNEL_INTERFACE_SUBJECT))
+ update_subject (self, changed);
- if (!tp_strdiff (interface_name, TP_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG)) {
- update_title (self, changed);
- }
+ if (!tp_strdiff (interface_name, TP_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG))
+ update_title (self, changed);
}
void
empathy_tp_chat_set_subject (EmpathyTpChat *self,
- const gchar *subject)
+ const gchar *subject)
{
- tp_cli_channel_interface_subject_call_set_subject (TP_CHANNEL (self), -1,
- subject,
- tp_chat_async_cb,
- "while setting subject", NULL,
- G_OBJECT (self));
+ tp_cli_channel_interface_subject_call_set_subject (TP_CHANNEL (self), -1,
+ subject, tp_chat_async_cb, "while setting subject", NULL,
+ G_OBJECT (self));
}
const gchar *
empathy_tp_chat_get_title (EmpathyTpChat *self)
{
- EmpathyTpChatPrivate *priv = self->priv;
-
- return priv->title;
+ return self->priv->title;
}
gboolean
empathy_tp_chat_supports_subject (EmpathyTpChat *self)
{
- EmpathyTpChatPrivate *priv = self->priv;
-
- return priv->supports_subject;
+ return self->priv->supports_subject;
}
gboolean
empathy_tp_chat_can_set_subject (EmpathyTpChat *self)
{
- EmpathyTpChatPrivate *priv = self->priv;
-
- return priv->can_set_subject;
+ return self->priv->can_set_subject;
}
const gchar *
empathy_tp_chat_get_subject (EmpathyTpChat *self)
{
- EmpathyTpChatPrivate *priv = self->priv;
-
- return priv->subject;
+ return self->priv->subject;
}
const gchar *
empathy_tp_chat_get_subject_actor (EmpathyTpChat *self)
{
- EmpathyTpChatPrivate *priv = self->priv;
-
- return priv->subject_actor;
+ return self->priv->subject_actor;
}
static void
tp_chat_dispose (GObject *object)
{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (object);
-
- tp_clear_object (&self->priv->account);
- tp_clear_object (&self->priv->remote_contact);
- tp_clear_object (&self->priv->user);
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (object);
- g_queue_foreach (self->priv->messages_queue, (GFunc) g_object_unref, NULL);
- g_queue_clear (self->priv->messages_queue);
+ tp_clear_object (&self->priv->account);
+ tp_clear_object (&self->priv->remote_contact);
+ tp_clear_object (&self->priv->user);
- g_queue_foreach (self->priv->pending_messages_queue,
- (GFunc) g_object_unref, NULL);
- g_queue_clear (self->priv->pending_messages_queue);
+ g_queue_foreach (self->priv->pending_messages_queue,
+ (GFunc) g_object_unref, NULL);
+ g_queue_clear (self->priv->pending_messages_queue);
- tp_clear_object (&self->priv->ready_result);
+ tp_clear_object (&self->priv->ready_result);
- if (G_OBJECT_CLASS (empathy_tp_chat_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_tp_chat_parent_class)->dispose (object);
+ if (G_OBJECT_CLASS (empathy_tp_chat_parent_class)->dispose)
+ G_OBJECT_CLASS (empathy_tp_chat_parent_class)->dispose (object);
}
static void
tp_chat_finalize (GObject *object)
{
- EmpathyTpChat *self = (EmpathyTpChat *) object;
+ EmpathyTpChat *self = (EmpathyTpChat *) object;
- DEBUG ("Finalize: %p", object);
+ DEBUG ("Finalize: %p", object);
- g_queue_free (self->priv->messages_queue);
- g_queue_free (self->priv->pending_messages_queue);
- g_hash_table_unref (self->priv->messages_being_sent);
+ g_queue_free (self->priv->pending_messages_queue);
+ g_hash_table_unref (self->priv->messages_being_sent);
- g_free (self->priv->title);
- g_free (self->priv->subject);
- g_free (self->priv->subject_actor);
+ g_free (self->priv->title);
+ g_free (self->priv->subject);
+ g_free (self->priv->subject_actor);
- G_OBJECT_CLASS (empathy_tp_chat_parent_class)->finalize (object);
+ G_OBJECT_CLASS (empathy_tp_chat_parent_class)->finalize (object);
}
static void
check_almost_ready (EmpathyTpChat *self)
{
- TpChannel *channel = (TpChannel *) self;
+ TpChannel *channel = (TpChannel *) self;
- if (self->priv->ready_result == NULL)
- return;
+ if (self->priv->ready_result == NULL)
+ return;
- if (self->priv->user == NULL)
- return;
+ if (self->priv->user == NULL)
+ return;
- /* We need either the members (room) or the remote contact (private chat).
- * If the chat is protected by a password we can't get these information so
- * consider the chat as ready so it can be presented to the user. */
- if (!tp_channel_password_needed (channel) && self->priv->members == NULL &&
- self->priv->remote_contact == NULL)
- return;
+ /* We need either the members (room) or the remote contact (private chat).
+ * If the chat is protected by a password we can't get these information so
+ * consider the chat as ready so it can be presented to the user. */
+ if (!tp_channel_password_needed (channel) && self->priv->members == NULL &&
+ self->priv->remote_contact == NULL)
+ return;
- g_assert (tp_proxy_is_prepared (self,
- TP_TEXT_CHANNEL_FEATURE_INCOMING_MESSAGES));
+ g_assert (tp_proxy_is_prepared (self,
+ TP_TEXT_CHANNEL_FEATURE_INCOMING_MESSAGES));
- tp_g_signal_connect_object (self, "message-received",
- G_CALLBACK (message_received_cb), self, 0);
- tp_g_signal_connect_object (self, "pending-message-removed",
- G_CALLBACK (pending_message_removed_cb), self, 0);
+ tp_g_signal_connect_object (self, "message-received",
+ G_CALLBACK (message_received_cb), self, 0);
+ tp_g_signal_connect_object (self, "pending-message-removed",
+ G_CALLBACK (pending_message_removed_cb), self, 0);
- list_pending_messages (self);
+ list_pending_messages (self);
- tp_g_signal_connect_object (self, "message-sent",
- G_CALLBACK (message_sent_cb), self, 0);
+ tp_g_signal_connect_object (self, "message-sent",
+ G_CALLBACK (message_sent_cb), self, 0);
- tp_g_signal_connect_object (self, "chat-state-changed",
- G_CALLBACK (tp_chat_state_changed_cb), self, 0);
-
- check_ready (self);
+ check_ready (self);
}
static void
-tp_chat_got_added_contacts_cb (TpConnection *connection,
- guint n_contacts,
- EmpathyContact * const * contacts,
- guint n_failed,
- const TpHandle *failed,
- const GError *error,
- gpointer user_data,
- GObject *chat)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) chat;
- guint i;
- const TpIntSet *members;
- TpHandle handle;
- EmpathyContact *contact;
-
- if (error) {
- DEBUG ("Error: %s", error->message);
- return;
- }
-
- members = tp_channel_group_get_members ((TpChannel *) self);
- for (i = 0; i < n_contacts; i++) {
- contact = contacts[i];
- handle = empathy_contact_get_handle (contact);
-
- /* Make sure the contact is still member */
- if (tp_intset_is_member (members, handle)) {
- self->priv->members = g_list_prepend (self->priv->members,
- g_object_ref (contact));
- g_signal_emit_by_name (chat, "members-changed",
- contact, NULL, 0, NULL, TRUE);
- }
- }
-
- check_almost_ready (EMPATHY_TP_CHAT (chat));
-}
-
-static EmpathyContact *
-chat_lookup_contact (EmpathyTpChat *self,
- TpHandle handle,
- gboolean remove_)
+add_members_contact (EmpathyTpChat *self,
+ GPtrArray *contacts)
{
- GList *l;
+ guint i;
- for (l = self->priv->members; l; l = l->next) {
- EmpathyContact *c = l->data;
+ for (i = 0; i < contacts->len; i++)
+ {
+ EmpathyContact *contact;
- if (empathy_contact_get_handle (c) != handle) {
- continue;
- }
+ contact = empathy_contact_dup_from_tp_contact (g_ptr_array_index (
+ contacts, i));
- if (remove_) {
- /* Caller takes the reference. */
- self->priv->members = g_list_delete_link (self->priv->members, l);
- } else {
- g_object_ref (c);
- }
+ self->priv->members = g_list_prepend (self->priv->members, contact);
- return c;
- }
+ g_signal_emit (self, signals[SIG_MEMBERS_CHANGED], 0,
+ contact, NULL, 0, NULL, TRUE);
+ }
- return NULL;
+ check_almost_ready (self);
}
-typedef struct
-{
- TpHandle old_handle;
- guint reason;
- gchar *message;
-} ContactRenameData;
-
-static ContactRenameData *
-contact_rename_data_new (TpHandle handle,
- guint reason,
- const gchar* message)
+static void
+remove_member (EmpathyTpChat *self,
+ EmpathyContact *contact)
{
- ContactRenameData *data = g_new (ContactRenameData, 1);
- data->old_handle = handle;
- data->reason = reason;
- data->message = g_strdup (message);
+ GList *l;
- return data;
-}
+ for (l = self->priv->members; l; l = l->next)
+ {
+ EmpathyContact *c = l->data;
-static void
-contact_rename_data_free (ContactRenameData* data)
-{
- g_free (data->message);
- g_free (data);
+ if (contact == c)
+ {
+ self->priv->members = g_list_delete_link (self->priv->members, l);
+ g_object_unref (c);
+ break;
+ }
+ }
}
static void
-tp_chat_got_renamed_contacts_cb (TpConnection *connection,
- guint n_contacts,
- EmpathyContact * const * contacts,
- guint n_failed,
- const TpHandle *failed,
- const GError *error,
- gpointer user_data,
- GObject *chat)
+contact_renamed (EmpathyTpChat *self,
+ TpContact *old_contact,
+ TpContact *new_contact,
+ TpChannelGroupChangeReason reason,
+ const gchar *message)
{
- EmpathyTpChat *self = (EmpathyTpChat *) chat;
- const TpIntSet *members;
- TpHandle handle;
- EmpathyContact *old = NULL, *new = NULL;
- ContactRenameData *rename_data = (ContactRenameData *) user_data;
-
- if (error) {
- DEBUG ("Error: %s", error->message);
- return;
- }
-
- /* renamed members can only be delivered one at a time */
- g_warn_if_fail (n_contacts == 1);
-
- new = contacts[0];
-
- members = tp_channel_group_get_members ((TpChannel *) self);
- handle = empathy_contact_get_handle (new);
-
- old = chat_lookup_contact (self, rename_data->old_handle, TRUE);
-
- /* Make sure the contact is still member */
- if (tp_intset_is_member (members, handle)) {
- self->priv->members = g_list_prepend (self->priv->members,
- g_object_ref (new));
-
- if (old != NULL) {
- g_signal_emit_by_name (self, "member-renamed",
- old, new, rename_data->reason,
- rename_data->message);
- g_object_unref (old);
- }
- }
-
- if (self->priv->user == old) {
- /* We change our nick */
- tp_clear_object (&self->priv->user);
- self->priv->user = g_object_ref (new);
- g_object_notify (chat, "self-contact");
- }
-
- check_almost_ready (self);
-}
+ EmpathyContact *old = NULL, *new = NULL;
+
+ old = empathy_contact_dup_from_tp_contact (old_contact);
+ new = empathy_contact_dup_from_tp_contact (new_contact);
+
+ self->priv->members = g_list_prepend (self->priv->members, new);
+ if (old != NULL)
+ {
+ remove_member (self, old);
+
+ g_signal_emit (self, signals[SIG_MEMBER_RENAMED], 0, old, new,
+ reason, message);
+ g_object_unref (old);
+ }
+
+ if (self->priv->user == old)
+ {
+ /* We change our nick */
+ tp_clear_object (&self->priv->user);
+ self->priv->user = g_object_ref (new);
+ g_object_notify (G_OBJECT (self), "self-contact");
+ }
+
+ check_almost_ready (self);
+}
static void
-tp_chat_group_members_changed_cb (TpChannel *channel,
- gchar *message,
- GArray *added,
- GArray *removed,
- GArray *local_pending,
- GArray *remote_pending,
- guint actor,
- guint reason,
- EmpathyTpChat *self)
-{
- EmpathyContact *contact;
- EmpathyContact *actor_contact = NULL;
- guint i;
- ContactRenameData *rename_data;
- TpHandle old_handle;
- TpConnection *connection = tp_channel_borrow_connection (
- (TpChannel *) self);
-
- /* Contact renamed */
- if (reason == TP_CHANNEL_GROUP_CHANGE_REASON_RENAMED) {
- /* there can only be a single 'added' and a single 'removed' handle */
- if (removed->len != 1 || added->len != 1) {
- g_warning ("RENAMED with %u added, %u removed (expected 1, 1)",
- added->len, removed->len);
- return;
- }
-
- old_handle = g_array_index (removed, guint, 0);
-
- rename_data = contact_rename_data_new (old_handle, reason, message);
- empathy_tp_contact_factory_get_from_handles (connection,
- added->len, (TpHandle *) added->data,
- tp_chat_got_renamed_contacts_cb,
- rename_data, (GDestroyNotify) contact_rename_data_free,
- G_OBJECT (self));
- return;
- }
-
- if (actor != 0) {
- actor_contact = chat_lookup_contact (self, actor, FALSE);
- if (actor_contact == NULL) {
- /* FIXME: handle this a tad more gracefully: perhaps
- * the actor was a server op. We could use the
- * contact-ids detail of MembersChangedDetailed.
- */
- DEBUG ("actor %u not a channel member", actor);
- }
- }
-
- /* Remove contacts that are not members anymore */
- for (i = 0; i < removed->len; i++) {
- contact = chat_lookup_contact (self,
- g_array_index (removed, TpHandle, i), TRUE);
-
- if (contact != NULL) {
- g_signal_emit_by_name (self, "members-changed", contact,
- actor_contact, reason, message,
- FALSE);
- g_object_unref (contact);
- }
- }
-
- /* Request added contacts */
- if (added->len > 0) {
- empathy_tp_contact_factory_get_from_handles (connection,
- added->len, (TpHandle *) added->data,
- tp_chat_got_added_contacts_cb, NULL, NULL,
- G_OBJECT (self));
- }
-
- if (actor_contact != NULL) {
- g_object_unref (actor_contact);
- }
+tp_chat_group_contacts_changed_cb (TpChannel *channel,
+ GPtrArray *added,
+ GPtrArray *removed,
+ GPtrArray *local_pending,
+ GPtrArray *remote_pending,
+ TpContact *actor,
+ GHashTable *details,
+ EmpathyTpChat *self)
+{
+ EmpathyContact *actor_contact = NULL;
+ guint i;
+ TpChannelGroupChangeReason reason;
+ const gchar *message;
+
+ reason = tp_asv_get_uint32 (details, "change-reason", NULL);
+ message = tp_asv_get_string (details, "message");
+
+ /* Contact renamed */
+ if (reason == TP_CHANNEL_GROUP_CHANGE_REASON_RENAMED)
+ {
+ /* there can only be a single 'added' and a single 'removed' handle */
+ if (removed->len != 1 || added->len != 1)
+ {
+ g_warning ("RENAMED with %u added, %u removed (expected 1, 1)",
+ added->len, removed->len);
+ return;
+ }
+
+ contact_renamed (self, g_ptr_array_index (removed, 0),
+ g_ptr_array_index (added, 0), reason, message);
+ return;
+ }
+
+ if (actor != NULL)
+ {
+ actor_contact = empathy_contact_dup_from_tp_contact (actor);
+
+ if (actor_contact == NULL)
+ {
+ /* FIXME: handle this a tad more gracefully: perhaps
+ * the actor was a server op. We could use the
+ * contact-ids detail of MembersChangedDetailed.
+ */
+ DEBUG ("actor %s not a channel member",
+ tp_contact_get_identifier (actor));
+ }
+ }
+
+ /* Remove contacts that are not members anymore */
+ for (i = 0; i < removed->len; i++)
+ {
+ TpContact *tp_contact = g_ptr_array_index (removed, i);
+ EmpathyContact *contact;
+
+ contact = empathy_contact_dup_from_tp_contact (tp_contact);
+
+ if (contact != NULL)
+ {
+ remove_member (self, contact);
+
+ g_signal_emit (self, signals[SIG_MEMBERS_CHANGED], 0,
+ contact, actor_contact, reason, message, FALSE);
+ g_object_unref (contact);
+ }
+ }
+
+ if (added->len > 0)
+ {
+ add_members_contact (self, added);
+ }
+
+ if (actor_contact != NULL)
+ g_object_unref (actor_contact);
}
static void
-tp_chat_got_remote_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *chat)
+create_remote_contact (EmpathyTpChat *self,
+ TpContact *contact)
{
- EmpathyTpChat *self = (EmpathyTpChat *) chat;
-
- if (error) {
- DEBUG ("Error: %s", error->message);
- empathy_tp_chat_leave (self, "");
- return;
- }
+ self->priv->remote_contact = empathy_contact_dup_from_tp_contact (contact);
+ g_object_notify (G_OBJECT (self), "remote-contact");
- self->priv->remote_contact = g_object_ref (contact);
- g_object_notify (chat, "remote-contact");
-
- check_almost_ready (self);
+ check_almost_ready (self);
}
static void
-tp_chat_got_self_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *chat)
+create_self_contact (EmpathyTpChat *self,
+ TpContact *contact)
{
- EmpathyTpChat *self = (EmpathyTpChat *) chat;
-
- if (error) {
- DEBUG ("Error: %s", error->message);
- empathy_tp_chat_leave (self, "");
- return;
- }
-
- self->priv->user = g_object_ref (contact);
- empathy_contact_set_is_user (self->priv->user, TRUE);
- g_object_notify (chat, "self-contact");
- check_almost_ready (self);
+ self->priv->user = empathy_contact_dup_from_tp_contact (contact);
+ empathy_contact_set_is_user (self->priv->user, TRUE);
+ g_object_notify (G_OBJECT (self), "self-contact");
+ check_almost_ready (self);
}
static void
-tp_chat_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (object);
-
- switch (param_id) {
- case PROP_ACCOUNT:
- g_value_set_object (value, self->priv->account);
- break;
- case PROP_SELF_CONTACT:
- g_value_set_object (value, self->priv->user);
- break;
- case PROP_REMOTE_CONTACT:
- g_value_set_object (value, self->priv->remote_contact);
- break;
- case PROP_N_MESSAGES_SENDING:
- g_value_set_uint (value,
- g_hash_table_size (self->priv->messages_being_sent));
- break;
- case PROP_TITLE:
- g_value_set_string (value,
- empathy_tp_chat_get_title (self));
- break;
- case PROP_SUBJECT:
- g_value_set_string (value,
- empathy_tp_chat_get_subject (self));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
+tp_chat_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (object);
+
+ switch (param_id)
+ {
+ case PROP_ACCOUNT:
+ g_value_set_object (value, self->priv->account);
+ break;
+ case PROP_SELF_CONTACT:
+ g_value_set_object (value, self->priv->user);
+ break;
+ case PROP_REMOTE_CONTACT:
+ g_value_set_object (value, self->priv->remote_contact);
+ break;
+ case PROP_N_MESSAGES_SENDING:
+ g_value_set_uint (value,
+ g_hash_table_size (self->priv->messages_being_sent));
+ break;
+ case PROP_TITLE:
+ g_value_set_string (value,
+ empathy_tp_chat_get_title (self));
+ break;
+ case PROP_SUBJECT:
+ g_value_set_string (value,
+ empathy_tp_chat_get_subject (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
}
static void
-tp_chat_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
+tp_chat_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (object);
-
- switch (param_id) {
- case PROP_ACCOUNT:
- self->priv->account = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (object);
+
+ switch (param_id)
+ {
+ case PROP_ACCOUNT:
+ self->priv->account = g_value_dup_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
}
enum {
- FEAT_READY,
- N_FEAT
+ FEAT_READY,
+ N_FEAT
};
static const TpProxyFeature *
tp_chat_list_features (TpProxyClass *cls G_GNUC_UNUSED)
{
- static TpProxyFeature features[N_FEAT + 1] = { { 0 } };
+ static TpProxyFeature features[N_FEAT + 1] = { { 0 } };
static GQuark need[2] = {0, 0};
- if (G_LIKELY (features[0].name != 0))
- return features;
+ if (G_LIKELY (features[0].name != 0))
+ return features;
- features[FEAT_READY].name = EMPATHY_TP_CHAT_FEATURE_READY;
- need[0] = TP_TEXT_CHANNEL_FEATURE_INCOMING_MESSAGES;
- features[FEAT_READY].depends_on = need;
- features[FEAT_READY].prepare_async =
- tp_chat_prepare_ready_async;
+ features[FEAT_READY].name = EMPATHY_TP_CHAT_FEATURE_READY;
+ need[0] = TP_TEXT_CHANNEL_FEATURE_INCOMING_MESSAGES;
+ features[FEAT_READY].depends_on = need;
+ features[FEAT_READY].prepare_async =
+ tp_chat_prepare_ready_async;
- /* assert that the terminator at the end is there */
- g_assert (features[N_FEAT].name == 0);
+ /* assert that the terminator at the end is there */
+ g_assert (features[N_FEAT].name == 0);
- return features;
+ return features;
}
static void
empathy_tp_chat_class_init (EmpathyTpChatClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- TpProxyClass *proxy_class = TP_PROXY_CLASS (klass);
-
- object_class->dispose = tp_chat_dispose;
- object_class->finalize = tp_chat_finalize;
- object_class->get_property = tp_chat_get_property;
- object_class->set_property = tp_chat_set_property;
-
- proxy_class->list_features = tp_chat_list_features;
-
- g_object_class_install_property (object_class,
- PROP_ACCOUNT,
- g_param_spec_object ("account",
- "TpAccount",
- "the account associated with the chat",
- TP_TYPE_ACCOUNT,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * EmpathyTpChat:self-contact:
- *
- * Not to be confused with TpChannel:group-self-contact.
- */
- g_object_class_install_property (object_class,
- PROP_SELF_CONTACT,
- g_param_spec_object ("self-contact",
- "The local contact",
- "The EmpathyContact for the local user on this channel",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class,
- PROP_REMOTE_CONTACT,
- g_param_spec_object ("remote-contact",
- "The remote contact",
- "The remote contact if there is no group iface on the channel",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class,
- PROP_N_MESSAGES_SENDING,
- g_param_spec_uint ("n-messages-sending",
- "Num Messages Sending",
- "The number of messages being sent",
- 0, G_MAXUINT, 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class,
- PROP_TITLE,
- g_param_spec_string ("title",
- "Title",
- "A human-readable name for the room, if any",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_SUBJECT,
- g_param_spec_string ("subject",
- "Subject",
- "The room's current subject, if any",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- /* Signals */
- signals[MESSAGE_RECEIVED] =
- g_signal_new ("message-received-empathy",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, EMPATHY_TYPE_MESSAGE);
-
- signals[SEND_ERROR] =
- g_signal_new ("send-error",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 3, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING);
-
- signals[CHAT_STATE_CHANGED] =
- g_signal_new ("chat-state-changed-empathy",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, EMPATHY_TYPE_CONTACT, G_TYPE_UINT);
-
- signals[MESSAGE_ACKNOWLEDGED] =
- g_signal_new ("message-acknowledged",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, EMPATHY_TYPE_MESSAGE);
-
- g_type_class_add_private (object_class, sizeof (EmpathyTpChatPrivate));
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ TpProxyClass *proxy_class = TP_PROXY_CLASS (klass);
+
+ object_class->dispose = tp_chat_dispose;
+ object_class->finalize = tp_chat_finalize;
+ object_class->get_property = tp_chat_get_property;
+ object_class->set_property = tp_chat_set_property;
+
+ proxy_class->list_features = tp_chat_list_features;
+
+ g_object_class_install_property (object_class, PROP_ACCOUNT,
+ g_param_spec_object ("account", "TpAccount",
+ "the account associated with the chat",
+ TP_TYPE_ACCOUNT,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * EmpathyTpChat:self-contact:
+ *
+ * Not to be confused with TpChannel:group-self-contact.
+ */
+ g_object_class_install_property (object_class, PROP_SELF_CONTACT,
+ g_param_spec_object ("self-contact", "The local contact",
+ "The EmpathyContact for the local user on this channel",
+ EMPATHY_TYPE_CONTACT,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class, PROP_REMOTE_CONTACT,
+ g_param_spec_object ("remote-contact", "The remote contact",
+ "The remote contact if there is no group iface on the channel",
+ EMPATHY_TYPE_CONTACT,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class, PROP_N_MESSAGES_SENDING,
+ g_param_spec_uint ("n-messages-sending", "Num Messages Sending",
+ "The number of messages being sent",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class, PROP_TITLE,
+ g_param_spec_string ("title", "Title",
+ "A human-readable name for the room, if any",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (object_class, PROP_SUBJECT,
+ g_param_spec_string ("subject", "Subject",
+ "The room's current subject, if any",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /* Signals */
+ signals[MESSAGE_RECEIVED] = g_signal_new ("message-received-empathy",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 1, EMPATHY_TYPE_MESSAGE);
+
+ signals[SEND_ERROR] = g_signal_new ("send-error",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 3, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING);
+
+ signals[MESSAGE_ACKNOWLEDGED] = g_signal_new ("message-acknowledged",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 1, EMPATHY_TYPE_MESSAGE);
+
+ signals[SIG_MEMBER_RENAMED] = g_signal_new ("member-renamed",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 4, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT,
+ G_TYPE_UINT, G_TYPE_STRING);
+
+ signals[SIG_MEMBERS_CHANGED] = g_signal_new ("members-changed",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 5, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT,
+ G_TYPE_UINT, G_TYPE_STRING, G_TYPE_BOOLEAN);
+
+ g_type_class_add_private (object_class, sizeof (EmpathyTpChatPrivate));
}
static void
empathy_tp_chat_init (EmpathyTpChat *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_TP_CHAT, EmpathyTpChatPrivate);
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EMPATHY_TYPE_TP_CHAT,
+ EmpathyTpChatPrivate);
- self->priv->messages_queue = g_queue_new ();
- self->priv->pending_messages_queue = g_queue_new ();
- self->priv->messages_being_sent = g_hash_table_new_full (
- g_str_hash, g_str_equal, g_free, NULL);
-}
-
-static void
-tp_chat_iface_init (EmpathyContactListIface *iface)
-{
- iface->add = tp_chat_add;
- iface->remove = tp_chat_remove;
- iface->get_members = tp_chat_get_members;
+ self->priv->pending_messages_queue = g_queue_new ();
+ self->priv->messages_being_sent = g_hash_table_new_full (
+ g_str_hash, g_str_equal, g_free, NULL);
}
EmpathyTpChat *
-empathy_tp_chat_new (
- TpSimpleClientFactory *factory,
- TpAccount *account,
- TpConnection *conn,
- const gchar *object_path,
- const GHashTable *immutable_properties)
+empathy_tp_chat_new (TpSimpleClientFactory *factory,
+ TpAccount *account,
+ TpConnection *conn,
+ const gchar *object_path,
+ const GHashTable *immutable_properties)
{
- TpProxy *conn_proxy = (TpProxy *) conn;
-
- g_return_val_if_fail (TP_IS_ACCOUNT (account), NULL);
- g_return_val_if_fail (TP_IS_CONNECTION (conn), NULL);
- g_return_val_if_fail (immutable_properties != NULL, NULL);
-
- return g_object_new (EMPATHY_TYPE_TP_CHAT,
- "factory", factory,
- "account", account,
- "connection", conn,
- "dbus-daemon", conn_proxy->dbus_daemon,
- "bus-name", conn_proxy->bus_name,
- "object-path", object_path,
- "channel-properties", immutable_properties,
- NULL);
+ TpProxy *conn_proxy = (TpProxy *) conn;
+
+ g_return_val_if_fail (TP_IS_ACCOUNT (account), NULL);
+ g_return_val_if_fail (TP_IS_CONNECTION (conn), NULL);
+ g_return_val_if_fail (immutable_properties != NULL, NULL);
+
+ return g_object_new (EMPATHY_TYPE_TP_CHAT,
+ "factory", factory,
+ "account", account,
+ "connection", conn,
+ "dbus-daemon", conn_proxy->dbus_daemon,
+ "bus-name", conn_proxy->bus_name,
+ "object-path", object_path,
+ "channel-properties", immutable_properties,
+ NULL);
}
const gchar *
empathy_tp_chat_get_id (EmpathyTpChat *self)
{
- const gchar *id;
+ const gchar *id;
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
- id = tp_channel_get_identifier ((TpChannel *) self);
- if (!EMP_STR_EMPTY (id))
- return id;
- else if (self->priv->remote_contact)
- return empathy_contact_get_id (self->priv->remote_contact);
- else
- return NULL;
+ id = tp_channel_get_identifier ((TpChannel *) self);
+ if (!EMP_STR_EMPTY (id))
+ return id;
+ else if (self->priv->remote_contact)
+ return empathy_contact_get_id (self->priv->remote_contact);
+ else
+ return NULL;
}
EmpathyContact *
empathy_tp_chat_get_remote_contact (EmpathyTpChat *self)
{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
- return self->priv->remote_contact;
+ return self->priv->remote_contact;
}
TpAccount *
empathy_tp_chat_get_account (EmpathyTpChat *self)
{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
- return self->priv->account;
+ return self->priv->account;
}
void
empathy_tp_chat_send (EmpathyTpChat *self,
- TpMessage *message)
+ TpMessage *message)
{
- gchar *message_body;
+ gchar *message_body;
- g_return_if_fail (EMPATHY_IS_TP_CHAT (self));
- g_return_if_fail (TP_IS_CLIENT_MESSAGE (message));
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (self));
+ g_return_if_fail (TP_IS_CLIENT_MESSAGE (message));
- message_body = tp_message_to_text (message, NULL);
+ message_body = tp_message_to_text (message, NULL);
- DEBUG ("Sending message: %s", message_body);
+ DEBUG ("Sending message: %s", message_body);
- tp_text_channel_send_message_async (TP_TEXT_CHANNEL (self),
- message, TP_MESSAGE_SENDING_FLAG_REPORT_DELIVERY,
- message_send_cb, self);
+ tp_text_channel_send_message_async (TP_TEXT_CHANNEL (self),
+ message, TP_MESSAGE_SENDING_FLAG_REPORT_DELIVERY,
+ message_send_cb, self);
- g_free (message_body);
+ g_free (message_body);
}
const GList *
empathy_tp_chat_get_pending_messages (EmpathyTpChat *self)
{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
- return self->priv->pending_messages_queue->head;
+ return self->priv->pending_messages_queue->head;
}
void
empathy_tp_chat_acknowledge_message (EmpathyTpChat *self,
- EmpathyMessage *message) {
- TpMessage *tp_msg;
+ EmpathyMessage *message)
+{
+ TpMessage *tp_msg;
- g_return_if_fail (EMPATHY_IS_TP_CHAT (self));
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (self));
- if (!empathy_message_is_incoming (message))
- return;
+ if (!empathy_message_is_incoming (message))
+ return;
- tp_msg = empathy_message_get_tp_message (message);
- tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
- tp_msg, NULL, NULL);
+ tp_msg = empathy_message_get_tp_message (message);
+ tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
+ tp_msg, NULL, NULL);
}
/**
@@ -1423,11 +1204,11 @@ empathy_tp_chat_acknowledge_message (EmpathyTpChat *self,
gboolean
empathy_tp_chat_can_add_contact (EmpathyTpChat *self)
{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), FALSE);
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), FALSE);
- return self->priv->can_upgrade_to_muc ||
- tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP);;
+ return self->priv->can_upgrade_to_muc ||
+ tp_proxy_has_interface_by_id (self,
+ TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP);;
}
static void
@@ -1435,197 +1216,190 @@ tp_channel_leave_async_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- GError *error = NULL;
+ GError *error = NULL;
- if (!tp_channel_leave_finish (TP_CHANNEL (source_object), res, &error)) {
- DEBUG ("Could not leave channel properly: (%s); closing the channel",
- error->message);
- g_error_free (error);
- }
+ if (!tp_channel_leave_finish (TP_CHANNEL (source_object), res, &error))
+ {
+ DEBUG ("Could not leave channel properly: (%s); closing the channel",
+ error->message);
+ g_error_free (error);
+ }
}
void
empathy_tp_chat_leave (EmpathyTpChat *self,
- const gchar *message)
-{
- TpChannel *channel = (TpChannel *) self;
-
- DEBUG ("Leaving channel %s with message \"%s\"",
- tp_channel_get_identifier (channel), message);
-
- tp_channel_leave_async (channel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
- message, tp_channel_leave_async_cb, self);
-}
-
-static void
-add_members_cb (TpChannel *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) weak_object;
-
- if (error != NULL) {
- DEBUG ("Failed to join chat (%s): %s",
- tp_channel_get_identifier ((TpChannel *) self), error->message);
- }
-}
-
-void
-empathy_tp_chat_join (EmpathyTpChat *self)
+ const gchar *message)
{
- TpHandle self_handle;
- GArray *members;
+ TpChannel *channel = (TpChannel *) self;
- self_handle = tp_channel_group_get_self_handle ((TpChannel *) self);
+ DEBUG ("Leaving channel %s with message \"%s\"",
+ tp_channel_get_identifier (channel), message);
- members = g_array_sized_new (FALSE, FALSE, sizeof (TpHandle), 1);
- g_array_append_val (members, self_handle);
-
- tp_cli_channel_interface_group_call_add_members ((TpChannel *) self, -1, members,
- "", add_members_cb, NULL, NULL, G_OBJECT (self));
-
- g_array_unref (members);
+ tp_channel_leave_async (channel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
+ message, tp_channel_leave_async_cb, self);
}
gboolean
empathy_tp_chat_is_invited (EmpathyTpChat *self,
- TpHandle *inviter)
+ TpContact **inviter)
{
- TpHandle self_handle;
+ TpContact *self_contact;
+ TpChannel *channel = TP_CHANNEL (self);
- if (!tp_proxy_has_interface (self, TP_IFACE_CHANNEL_INTERFACE_GROUP))
- return FALSE;
+ if (!tp_proxy_has_interface (self, TP_IFACE_CHANNEL_INTERFACE_GROUP))
+ return FALSE;
- self_handle = tp_channel_group_get_self_handle ((TpChannel *) self);
- if (self_handle == 0)
- return FALSE;
+ self_contact = tp_channel_group_get_self_contact (channel);
+ if (self_contact == NULL)
+ return FALSE;
- return tp_channel_group_get_local_pending_info ((TpChannel *) self, self_handle,
- inviter, NULL, NULL);
+ return tp_channel_group_get_local_pending_contact_info (channel,
+ self_contact, inviter, NULL, NULL);
}
TpChannelChatState
empathy_tp_chat_get_chat_state (EmpathyTpChat *self,
- EmpathyContact *contact)
+ EmpathyContact *contact)
{
- return tp_channel_get_chat_state ((TpChannel *) self,
- empathy_contact_get_handle (contact));
+ return tp_text_channel_get_chat_state ((TpTextChannel *) self,
+ empathy_contact_get_tp_contact (contact));
}
EmpathyContact *
empathy_tp_chat_get_self_contact (EmpathyTpChat *self)
{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
- return self->priv->user;
+ return self->priv->user;
}
GQuark
empathy_tp_chat_get_feature_ready (void)
{
- return g_quark_from_static_string ("empathy-tp-chat-feature-ready");
+ return g_quark_from_static_string ("empathy-tp-chat-feature-ready");
}
static void
tp_chat_prepare_ready_async (TpProxy *proxy,
- const TpProxyFeature *feature,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) proxy;
- TpChannel *channel = (TpChannel *) proxy;
- TpConnection *connection;
- gboolean listen_for_dbus_properties_changed = FALSE;
-
- g_assert (self->priv->ready_result == NULL);
- self->priv->ready_result = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, tp_chat_prepare_ready_async);
-
- connection = tp_channel_borrow_connection (channel);
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP)) {
- const TpIntSet *members;
- GArray *handles;
- TpHandle handle;
-
- /* Get self contact from the group's self handle */
- handle = tp_channel_group_get_self_handle (channel);
- empathy_tp_contact_factory_get_from_handle (connection,
- handle, tp_chat_got_self_contact_cb,
- NULL, NULL, G_OBJECT (self));
-
- /* Get initial member contacts */
- members = tp_channel_group_get_members (channel);
- handles = tp_intset_to_array (members);
- empathy_tp_contact_factory_get_from_handles (connection,
- handles->len, (TpHandle *) handles->data,
- tp_chat_got_added_contacts_cb, NULL, NULL, G_OBJECT (self));
-
- self->priv->can_upgrade_to_muc = FALSE;
-
- tp_g_signal_connect_object (self, "group-members-changed",
- G_CALLBACK (tp_chat_group_members_changed_cb), self, 0);
- } else {
- TpCapabilities *caps;
- GPtrArray *classes;
- guint i;
- TpHandle handle;
-
- /* Get the self contact from the connection's self handle */
- handle = tp_connection_get_self_handle (connection);
- empathy_tp_contact_factory_get_from_handle (connection,
- handle, tp_chat_got_self_contact_cb,
- NULL, NULL, G_OBJECT (self));
-
- /* Get the remote contact */
- handle = tp_channel_get_handle (channel, NULL);
- empathy_tp_contact_factory_get_from_handle (connection,
- handle, tp_chat_got_remote_contact_cb,
- NULL, NULL, G_OBJECT (self));
-
- caps = tp_connection_get_capabilities (connection);
- g_assert (caps != NULL);
-
- classes = tp_capabilities_get_channel_classes (caps);
-
- for (i = 0; i < classes->len; i++) {
- GValueArray *array = g_ptr_array_index (classes, i);
- const char **oprops = g_value_get_boxed (
- g_value_array_get_nth (array, 1));
-
- if (tp_strv_contains (oprops, TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_CHANNELS)) {
- self->priv->can_upgrade_to_muc = TRUE;
- break;
- }
- }
- }
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_SUBJECT)) {
- tp_cli_dbus_properties_call_get_all (channel, -1,
- TP_IFACE_CHANNEL_INTERFACE_SUBJECT,
- tp_chat_get_all_subject_cb,
- NULL, NULL,
- G_OBJECT (self));
- listen_for_dbus_properties_changed = TRUE;
- }
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_ROOM_CONFIG)) {
- tp_cli_dbus_properties_call_get_all (channel, -1,
- TP_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG,
- tp_chat_get_all_room_config_cb,
- NULL, NULL,
- G_OBJECT (self));
- listen_for_dbus_properties_changed = TRUE;
- }
-
- if (listen_for_dbus_properties_changed) {
- tp_cli_dbus_properties_connect_to_properties_changed (channel,
- tp_chat_dbus_properties_changed_cb,
- NULL, NULL,
- G_OBJECT (self), NULL);
- }
+ const TpProxyFeature *feature,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ EmpathyTpChat *self = (EmpathyTpChat *) proxy;
+ TpChannel *channel = (TpChannel *) proxy;
+ TpConnection *connection;
+ gboolean listen_for_dbus_properties_changed = FALSE;
+
+ g_assert (self->priv->ready_result == NULL);
+ self->priv->ready_result = g_simple_async_result_new (G_OBJECT (self),
+ callback, user_data, tp_chat_prepare_ready_async);
+
+ connection = tp_channel_borrow_connection (channel);
+
+ if (tp_proxy_has_interface_by_id (self,
+ TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP))
+ {
+ GPtrArray *contacts;
+ TpContact *contact;
+
+ /* Get self contact from the group's self handle */
+ contact = tp_channel_group_get_self_contact (channel);
+ create_self_contact (self, contact);
+
+ /* Get initial member contacts */
+ contacts = tp_channel_group_dup_members_contacts (channel);
+ add_members_contact (self, contacts);
+ g_ptr_array_unref (contacts);
+
+ self->priv->can_upgrade_to_muc = FALSE;
+
+ tp_g_signal_connect_object (self, "group-contacts-changed",
+ G_CALLBACK (tp_chat_group_contacts_changed_cb), self, 0);
+ }
+ else
+ {
+ TpCapabilities *caps;
+ GVariant *classes, *class;
+ GVariantIter iter;
+ TpContact *contact;
+
+ /* Get the self contact from the connection's self handle */
+ contact = tp_connection_get_self_contact (connection);
+ create_self_contact (self, contact);
+
+ /* Get the remote contact */
+ contact = tp_channel_get_target_contact (channel);
+ create_remote_contact (self, contact);
+
+ caps = tp_connection_get_capabilities (connection);
+ g_assert (caps != NULL);
+
+ classes = tp_capabilities_dup_channel_classes_variant (caps);
+
+ g_variant_iter_init (&iter, classes);
+ while ((class = g_variant_iter_next_value (&iter)))
+ {
+ GVariant *fixed, *allowed;
+ const gchar *chan_type = NULL;
+
+ fixed = g_variant_get_child_value (class, 0);
+ allowed = g_variant_get_child_value (class, 1);
+
+ g_variant_lookup (fixed, TP_PROP_CHANNEL_CHANNEL_TYPE, "&s",
+ &chan_type);
+ if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT))
+ {
+ const gchar **oprops;
+
+ oprops = g_variant_get_strv (allowed, NULL);
+
+ if (tp_strv_contains (oprops,
+ TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_CHANNELS))
+ {
+ self->priv->can_upgrade_to_muc = TRUE;
+ }
+
+ g_free (oprops);
+ }
+
+ g_variant_unref (class);
+ g_variant_unref (fixed);
+ g_variant_unref (allowed);
+
+ if (self->priv->can_upgrade_to_muc)
+ break;
+ }
+
+ g_variant_unref (classes);
+ }
+
+ if (tp_proxy_has_interface_by_id (self,
+ TP_IFACE_QUARK_CHANNEL_INTERFACE_SUBJECT))
+ {
+ tp_cli_dbus_properties_call_get_all (channel, -1,
+ TP_IFACE_CHANNEL_INTERFACE_SUBJECT,
+ tp_chat_get_all_subject_cb,
+ NULL, NULL,
+ G_OBJECT (self));
+ listen_for_dbus_properties_changed = TRUE;
+ }
+
+ if (tp_proxy_has_interface_by_id (self,
+ TP_IFACE_QUARK_CHANNEL_INTERFACE_ROOM_CONFIG))
+ {
+ tp_cli_dbus_properties_call_get_all (channel, -1,
+ TP_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG,
+ tp_chat_get_all_room_config_cb,
+ NULL, NULL,
+ G_OBJECT (self));
+ listen_for_dbus_properties_changed = TRUE;
+ }
+
+ if (listen_for_dbus_properties_changed)
+ {
+ tp_cli_dbus_properties_connect_to_properties_changed (channel,
+ tp_chat_dbus_properties_changed_cb,
+ NULL, NULL,
+ G_OBJECT (self), NULL);
+ }
}
diff --git a/libempathy/empathy-tp-chat.h b/libempathy/empathy-tp-chat.h
index 885479cb3..d3ad334b3 100644
--- a/libempathy/empathy-tp-chat.h
+++ b/libempathy/empathy-tp-chat.h
@@ -1,6 +1,5 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
- * Copyright (C) 2007-2008 Collabora Ltd.
+ * Copyright (C) 2007-2012 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -30,80 +29,84 @@
#include "empathy-message.h"
#include "empathy-contact.h"
-
G_BEGIN_DECLS
-#define EMPATHY_TYPE_TP_CHAT (empathy_tp_chat_get_type ())
-#define EMPATHY_TP_CHAT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_TP_CHAT, EmpathyTpChat))
-#define EMPATHY_TP_CHAT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_TP_CHAT, EmpathyTpChatClass))
-#define EMPATHY_IS_TP_CHAT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_TP_CHAT))
-#define EMPATHY_IS_TP_CHAT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_TP_CHAT))
+#define EMPATHY_TYPE_TP_CHAT (empathy_tp_chat_get_type ())
+#define EMPATHY_TP_CHAT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_TP_CHAT, EmpathyTpChat))
+#define EMPATHY_TP_CHAT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_TP_CHAT, EmpathyTpChatClass))
+#define EMPATHY_IS_TP_CHAT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_TP_CHAT))
+#define EMPATHY_IS_TP_CHAT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_TP_CHAT))
#define EMPATHY_TP_CHAT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_TP_CHAT, EmpathyTpChatClass))
-typedef struct _EmpathyTpChat EmpathyTpChat;
+typedef struct _EmpathyTpChat EmpathyTpChat;
typedef struct _EmpathyTpChatClass EmpathyTpChatClass;
typedef struct _EmpathyTpChatPrivate EmpathyTpChatPrivate;
-struct _EmpathyTpChat {
- TpTextChannel parent;
- EmpathyTpChatPrivate *priv;
+struct _EmpathyTpChat
+{
+ TpTextChannel parent;
+ EmpathyTpChatPrivate *priv;
};
-struct _EmpathyTpChatClass {
- TpTextChannelClass parent_class;
+struct _EmpathyTpChatClass
+{
+ TpTextChannelClass parent_class;
};
typedef enum {
- EMPATHY_DELIVERY_STATUS_NONE,
- EMPATHY_DELIVERY_STATUS_SENDING,
- EMPATHY_DELIVERY_STATUS_ACCEPTED
+ EMPATHY_DELIVERY_STATUS_NONE,
+ EMPATHY_DELIVERY_STATUS_SENDING,
+ EMPATHY_DELIVERY_STATUS_ACCEPTED
} EmpathyDeliveryStatus;
#define EMPATHY_TP_CHAT_FEATURE_READY empathy_tp_chat_get_feature_ready ()
GQuark empathy_tp_chat_get_feature_ready (void) G_GNUC_CONST;
-GType empathy_tp_chat_get_type (void) G_GNUC_CONST;
+GType empathy_tp_chat_get_type (void) G_GNUC_CONST;
-EmpathyTpChat *empathy_tp_chat_new (
- TpSimpleClientFactory *factory,
- TpAccount *account,
- TpConnection *connection,
- const gchar *object_path,
- const GHashTable *immutable_properties);
+EmpathyTpChat * empathy_tp_chat_new (TpSimpleClientFactory *factory,
+ TpAccount *account,
+ TpConnection *connection,
+ const gchar *object_path,
+ const GHashTable *immutable_properties);
-const gchar * empathy_tp_chat_get_id (EmpathyTpChat *chat);
-EmpathyContact *empathy_tp_chat_get_remote_contact (EmpathyTpChat *chat);
-TpAccount * empathy_tp_chat_get_account (EmpathyTpChat *chat);
-void empathy_tp_chat_send (EmpathyTpChat *chat,
- TpMessage *message);
+const gchar * empathy_tp_chat_get_id (EmpathyTpChat *chat);
+EmpathyContact * empathy_tp_chat_get_remote_contact (EmpathyTpChat *chat);
+TpAccount * empathy_tp_chat_get_account (EmpathyTpChat *chat);
+void empathy_tp_chat_send (EmpathyTpChat *chat,
+ TpMessage *message);
-const gchar * empathy_tp_chat_get_title (EmpathyTpChat *self);
+const gchar * empathy_tp_chat_get_title (EmpathyTpChat *self);
-gboolean empathy_tp_chat_supports_subject (EmpathyTpChat *self);
-const gchar * empathy_tp_chat_get_subject (EmpathyTpChat *self);
-const gchar * empathy_tp_chat_get_subject_actor (EmpathyTpChat *self);
-gboolean empathy_tp_chat_can_set_subject (EmpathyTpChat *self);
-void empathy_tp_chat_set_subject (EmpathyTpChat *self,
- const gchar *subject);
+gboolean empathy_tp_chat_supports_subject (EmpathyTpChat *self);
+const gchar * empathy_tp_chat_get_subject (EmpathyTpChat *self);
+const gchar * empathy_tp_chat_get_subject_actor (EmpathyTpChat *self);
+gboolean empathy_tp_chat_can_set_subject (EmpathyTpChat *self);
+void empathy_tp_chat_set_subject (EmpathyTpChat *self,
+ const gchar *subject);
/* Returns a read-only list of pending messages (should be a copy maybe ?) */
const GList * empathy_tp_chat_get_pending_messages (EmpathyTpChat *chat);
-void empathy_tp_chat_acknowledge_message (EmpathyTpChat *chat,
- EmpathyMessage *message);
+void empathy_tp_chat_acknowledge_message (EmpathyTpChat *chat,
+ EmpathyMessage *message);
+
+gboolean empathy_tp_chat_can_add_contact (EmpathyTpChat *self);
+
+void empathy_tp_chat_leave (EmpathyTpChat *chat,
+ const gchar *message);
-gboolean empathy_tp_chat_can_add_contact (EmpathyTpChat *self);
+gboolean empathy_tp_chat_is_invited (EmpathyTpChat *chat,
+ TpContact **inviter);
+TpChannelChatState empathy_tp_chat_get_chat_state (EmpathyTpChat *chat,
+ EmpathyContact *contact);
-void empathy_tp_chat_leave (EmpathyTpChat *chat,
- const gchar *message);
-void empathy_tp_chat_join (EmpathyTpChat *chat);
+EmpathyContact * empathy_tp_chat_get_self_contact (EmpathyTpChat *self);
-gboolean empathy_tp_chat_is_invited (EmpathyTpChat *chat,
- TpHandle *inviter);
-TpChannelChatState
- empathy_tp_chat_get_chat_state (EmpathyTpChat *chat,
- EmpathyContact *contact);
+void empathy_tp_chat_add (EmpathyTpChat *self,
+ EmpathyContact *contact,
+ const gchar *message);
-EmpathyContact * empathy_tp_chat_get_self_contact (EmpathyTpChat *self);
+GList * empathy_tp_chat_get_members (EmpathyTpChat *self);
G_END_DECLS
diff --git a/libempathy/empathy-tp-contact-factory.c b/libempathy/empathy-tp-contact-factory.c
deleted file mode 100644
index 111e3190a..000000000
--- a/libempathy/empathy-tp-contact-factory.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-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 "empathy-tp-contact-factory.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TP | EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-static TpContactFeature contact_features[] = {
- TP_CONTACT_FEATURE_ALIAS,
- TP_CONTACT_FEATURE_AVATAR_DATA,
- TP_CONTACT_FEATURE_PRESENCE,
- TP_CONTACT_FEATURE_LOCATION,
- TP_CONTACT_FEATURE_CAPABILITIES,
- TP_CONTACT_FEATURE_CLIENT_TYPES,
-};
-
-typedef union {
- EmpathyTpContactFactoryContactsByIdCb ids_cb;
- EmpathyTpContactFactoryContactsByHandleCb handles_cb;
- EmpathyTpContactFactoryContactCb contact_cb;
-} GetContactsCb;
-
-typedef struct {
- TpConnection *connection;
- GetContactsCb callback;
- gpointer user_data;
- GDestroyNotify destroy;
-} GetContactsData;
-
-static void
-get_contacts_data_free (gpointer user_data)
-{
- GetContactsData *data = user_data;
-
- if (data->destroy) {
- data->destroy (data->user_data);
- }
- g_object_unref (data->connection);
-
- g_slice_free (GetContactsData, data);
-}
-
-static EmpathyContact **
-contacts_array_new (guint n_contacts,
- TpContact * const * contacts)
-{
- EmpathyContact **ret;
- guint i;
-
- ret = g_new0 (EmpathyContact *, n_contacts);
- for (i = 0; i < n_contacts; i++) {
- ret[i] = empathy_contact_dup_from_tp_contact (contacts[i]);
- }
-
- return ret;
-}
-
-static void
-contacts_array_free (guint n_contacts,
- EmpathyContact **contacts)
-{
- guint i;
-
- for (i = 0; i < n_contacts; i++) {
- g_object_unref (contacts[i]);
- }
- g_free (contacts);
-}
-
-static void
-get_contacts_by_id_cb (TpConnection *connection,
- guint n_contacts,
- TpContact * const *contacts,
- const gchar * const *requested_ids,
- GHashTable *failed_id_errors,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- GetContactsData *data = user_data;
- EmpathyContact **empathy_contacts;
-
- empathy_contacts = contacts_array_new (n_contacts, contacts);
- if (data->callback.ids_cb) {
- data->callback.ids_cb (data->connection,
- n_contacts, empathy_contacts,
- requested_ids,
- failed_id_errors,
- error,
- data->user_data, weak_object);
- }
-
- contacts_array_free (n_contacts, empathy_contacts);
-}
-
-/* The callback is NOT given a reference to the EmpathyContact objects */
-void
-empathy_tp_contact_factory_get_from_ids (TpConnection *connection,
- guint n_ids,
- const gchar * const *ids,
- EmpathyTpContactFactoryContactsByIdCb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object)
-{
- GetContactsData *data;
-
- g_return_if_fail (TP_IS_CONNECTION (connection));
- g_return_if_fail (ids != NULL);
-
- data = g_slice_new (GetContactsData);
- data->callback.ids_cb = callback;
- data->user_data = user_data;
- data->destroy = destroy;
- data->connection = g_object_ref (connection);
- tp_connection_get_contacts_by_id (connection,
- n_ids, ids,
- G_N_ELEMENTS (contact_features),
- contact_features,
- get_contacts_by_id_cb,
- data,
- (GDestroyNotify) get_contacts_data_free,
- weak_object);
-}
-
-static void
-get_contact_by_id_cb (TpConnection *connection,
- guint n_contacts,
- TpContact * const *contacts,
- const gchar * const *requested_ids,
- GHashTable *failed_id_errors,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- GetContactsData *data = user_data;
- EmpathyContact *contact = NULL;
-
- if (n_contacts == 1) {
- contact = empathy_contact_dup_from_tp_contact (contacts[0]);
- }
- else if (error == NULL) {
- GHashTableIter iter;
- gpointer value;
-
- g_hash_table_iter_init (&iter, failed_id_errors);
- while (g_hash_table_iter_next (&iter, NULL, &value)) {
- if (value) {
- error = value;
- break;
- }
- }
- }
-
- if (data->callback.contact_cb) {
- data->callback.contact_cb (data->connection,
- contact,
- error,
- data->user_data, weak_object);
- }
-
- if (contact != NULL)
- g_object_unref (contact);
-}
-
-/* The callback is NOT given a reference to the EmpathyContact objects */
-void
-empathy_tp_contact_factory_get_from_id (TpConnection *connection,
- const gchar *id,
- EmpathyTpContactFactoryContactCb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object)
-{
- GetContactsData *data;
-
- g_return_if_fail (TP_IS_CONNECTION (connection));
- g_return_if_fail (id != NULL);
-
- data = g_slice_new (GetContactsData);
- data->callback.contact_cb = callback;
- data->user_data = user_data;
- data->destroy = destroy;
- data->connection = g_object_ref (connection);
- tp_connection_get_contacts_by_id (connection,
- 1, &id,
- G_N_ELEMENTS (contact_features),
- contact_features,
- get_contact_by_id_cb,
- data,
- (GDestroyNotify) get_contacts_data_free,
- weak_object);
-}
-
-static void
-get_contacts_by_handle_cb (TpConnection *connection,
- guint n_contacts,
- TpContact * const *contacts,
- guint n_failed,
- const TpHandle *failed,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- GetContactsData *data = user_data;
- EmpathyContact **empathy_contacts;
-
- empathy_contacts = contacts_array_new (n_contacts, contacts);
- if (data->callback.handles_cb) {
- data->callback.handles_cb (data->connection,
- n_contacts, empathy_contacts,
- n_failed, failed,
- error,
- data->user_data, weak_object);
- }
-
- contacts_array_free (n_contacts, empathy_contacts);
-}
-
-/* The callback is NOT given a reference to the EmpathyContact objects */
-void
-empathy_tp_contact_factory_get_from_handles (TpConnection *connection,
- guint n_handles,
- const TpHandle *handles,
- EmpathyTpContactFactoryContactsByHandleCb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object)
-{
- GetContactsData *data;
-
- if (n_handles == 0) {
- callback (connection, 0, NULL, 0, NULL, NULL, user_data, weak_object);
- return;
- }
-
- g_return_if_fail (TP_IS_CONNECTION (connection));
- g_return_if_fail (handles != NULL);
-
- data = g_slice_new (GetContactsData);
- data->callback.handles_cb = callback;
- data->user_data = user_data;
- data->destroy = destroy;
- data->connection = g_object_ref (connection);
- tp_connection_get_contacts_by_handle (connection,
- n_handles, handles,
- G_N_ELEMENTS (contact_features),
- contact_features,
- get_contacts_by_handle_cb,
- data,
- (GDestroyNotify) get_contacts_data_free,
- weak_object);
-}
-
-/* The callback is NOT given a reference to the EmpathyContact objects */
-static void
-get_contact_by_handle_cb (TpConnection *connection,
- guint n_contacts,
- TpContact * const *contacts,
- guint n_failed,
- const TpHandle *failed,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- GetContactsData *data = user_data;
- EmpathyContact *contact = NULL;
- GError *err = NULL;
-
- if (n_contacts == 1) {
- contact = empathy_contact_dup_from_tp_contact (contacts[0]);
- }
- else {
- if (error == NULL) {
- /* tp-glib will provide an error only if the whole operation failed,
- * but not if, for example, the handle was invalid. We create an error
- * so the caller of empathy_tp_contact_factory_get_from_handle can
- * rely on the error to check if the operation succeeded or not. */
-
- err = g_error_new_literal (TP_ERROR, TP_ERROR_INVALID_HANDLE,
- "handle is invalid");
- }
- else {
- err = g_error_copy (error);
- }
- }
-
- if (data->callback.contact_cb) {
- data->callback.contact_cb (data->connection,
- contact,
- err,
- data->user_data, weak_object);
- }
-
- g_clear_error (&err);
- if (contact != NULL)
- g_object_unref (contact);
-}
-
-void
-empathy_tp_contact_factory_get_from_handle (TpConnection *connection,
- TpHandle handle,
- EmpathyTpContactFactoryContactCb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object)
-{
- GetContactsData *data;
-
- g_return_if_fail (TP_IS_CONNECTION (connection));
-
- data = g_slice_new (GetContactsData);
- data->callback.contact_cb = callback;
- data->user_data = user_data;
- data->destroy = destroy;
- data->connection = g_object_ref (connection);
- tp_connection_get_contacts_by_handle (connection,
- 1, &handle,
- G_N_ELEMENTS (contact_features),
- contact_features,
- get_contact_by_handle_cb,
- data,
- (GDestroyNotify) get_contacts_data_free,
- weak_object);
-}
-
diff --git a/libempathy/empathy-tp-contact-factory.h b/libempathy/empathy-tp-contact-factory.h
deleted file mode 100644
index 29146cb32..000000000
--- a/libempathy/empathy-tp-contact-factory.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-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_TP_CONTACT_FACTORY_H__
-#define __EMPATHY_TP_CONTACT_FACTORY_H__
-
-#include <glib.h>
-
-#include <telepathy-glib/connection.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-typedef void (*EmpathyTpContactFactoryContactsByIdCb) (TpConnection *connection,
- guint n_contacts,
- EmpathyContact * const * contacts,
- const gchar * const * requested_ids,
- GHashTable *failed_id_errors,
- const GError *error,
- gpointer user_data,
- GObject *weak_object);
-
-typedef void (*EmpathyTpContactFactoryContactsByHandleCb) (TpConnection *connection,
- guint n_contacts,
- EmpathyContact * const * contacts,
- guint n_failed,
- const TpHandle *failed,
- const GError *error,
- gpointer user_data,
- GObject *weak_object);
-
-typedef void (*EmpathyTpContactFactoryContactCb) (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *weak_object);
-
-void empathy_tp_contact_factory_get_from_ids (TpConnection *connection,
- guint n_ids,
- const gchar * const *ids,
- EmpathyTpContactFactoryContactsByIdCb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object);
-void empathy_tp_contact_factory_get_from_handles (TpConnection *connection,
- guint n_handles,
- const TpHandle *handles,
- EmpathyTpContactFactoryContactsByHandleCb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object);
-void empathy_tp_contact_factory_get_from_id (TpConnection *connection,
- const gchar *id,
- EmpathyTpContactFactoryContactCb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object);
-void empathy_tp_contact_factory_get_from_handle (TpConnection *connection,
- TpHandle handle,
- EmpathyTpContactFactoryContactCb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object);
-G_END_DECLS
-
-#endif /* __EMPATHY_TP_CONTACT_FACTORY_H__ */
diff --git a/libempathy/empathy-tp-roomlist.c b/libempathy/empathy-tp-roomlist.c
deleted file mode 100644
index 93e28d3d3..000000000
--- a/libempathy/empathy-tp-roomlist.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-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: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <telepathy-glib/channel.h>
-#include <telepathy-glib/dbus.h>
-#include <telepathy-glib/util.h>
-#include <telepathy-glib/interfaces.h>
-
-#include "empathy-tp-roomlist.h"
-#include "empathy-chatroom.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TP
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpRoomlist)
-typedef struct {
- TpConnection *connection;
- TpChannel *channel;
- TpAccount *account;
- gboolean is_listing;
- gboolean start_requested;
-} EmpathyTpRoomlistPriv;
-
-enum {
- NEW_ROOM,
- DESTROY,
- ERROR,
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_ACCOUNT,
- PROP_IS_LISTING,
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (EmpathyTpRoomlist, empathy_tp_roomlist, G_TYPE_OBJECT);
-
-static void
-tp_roomlist_listing_cb (TpChannel *channel,
- gboolean listing,
- gpointer user_data,
- GObject *list)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
-
- DEBUG ("Listing: %s", listing ? "Yes" : "No");
- priv->is_listing = listing;
- g_object_notify (list, "is-listing");
-}
-
-static void
-tp_roomlist_chatrooms_free (gpointer data)
-{
- GSList *chatrooms = data;
-
- g_slist_foreach (chatrooms, (GFunc) g_object_unref, NULL);
- g_slist_free (chatrooms);
-}
-
-static void
-tp_roomlist_inspect_handles_cb (TpConnection *connection,
- const gchar **names,
- const GError *error,
- gpointer user_data,
- GObject *list)
-{
- GSList *chatrooms = user_data;
-
- if (error != NULL) {
- DEBUG ("Error: %s", error->message);
- return;
- }
-
- while (*names != NULL) {
- EmpathyChatroom *chatroom = chatrooms->data;
-
- empathy_chatroom_set_room (chatroom, *names);
- g_signal_emit (list, signals[NEW_ROOM], 0, chatroom);
-
- names++;
- chatrooms = chatrooms->next;
- }
-}
-
-static void
-tp_roomlist_got_rooms_cb (TpChannel *channel,
- const GPtrArray *rooms,
- gpointer user_data,
- GObject *list)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
- EmpathyChatroom *chatroom;
- guint i;
- GArray *handles = NULL;
- GSList *chatrooms = NULL;
-
- for (i = 0; i < rooms->len; i++) {
- const GValue *room_name_value;
- const GValue *handle_name_value;
- const GValue *room_members_value;
- const GValue *room_subject_value;
- const GValue *room_invite_value;
- const GValue *room_password_value;
- GValueArray *room_struct;
- guint handle;
- const gchar *channel_type;
- GHashTable *info;
-
- /* Get information */
- room_struct = g_ptr_array_index (rooms, i);
- handle = g_value_get_uint (g_value_array_get_nth (room_struct, 0));
- channel_type = g_value_get_string (g_value_array_get_nth (room_struct, 1));
- info = g_value_get_boxed (g_value_array_get_nth (room_struct, 2));
- room_name_value = g_hash_table_lookup (info, "name");
- handle_name_value = g_hash_table_lookup (info, "handle-name");
- room_subject_value = g_hash_table_lookup (info, "subject");
- room_members_value = g_hash_table_lookup (info, "members");
- room_invite_value = g_hash_table_lookup (info, "invite-only");
- room_password_value = g_hash_table_lookup (info, "password");
-
- if (tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_TEXT)) {
- continue;
- }
-
- chatroom = empathy_chatroom_new (priv->account);
-
- if (room_name_value != NULL) {
- empathy_chatroom_set_name (chatroom,
- g_value_get_string (room_name_value));
- }
-
- if (room_members_value != NULL) {
- empathy_chatroom_set_members_count (chatroom,
- g_value_get_uint (room_members_value));
- }
-
- if (room_subject_value != NULL) {
- empathy_chatroom_set_subject (chatroom,
- g_value_get_string (room_subject_value));
- }
-
- if (room_invite_value != NULL) {
- empathy_chatroom_set_invite_only (chatroom,
- g_value_get_boolean (room_invite_value));
- }
-
- if (room_password_value != NULL) {
- empathy_chatroom_set_need_password (chatroom,
- g_value_get_boolean (room_password_value));
- }
-
- if (handle_name_value != NULL) {
- empathy_chatroom_set_room (chatroom,
- g_value_get_string (handle_name_value));
-
- /* We have the room ID, we can directly emit it */
- g_signal_emit (list, signals[NEW_ROOM], 0, chatroom);
- g_object_unref (chatroom);
- } else {
- /* We don't have the room ID, we'll inspect all handles
- * at once and then emit rooms */
- if (handles == NULL) {
- handles = g_array_new (FALSE, FALSE, sizeof (guint));
- }
-
- g_array_append_val (handles, handle);
- chatrooms = g_slist_prepend (chatrooms, chatroom);
- }
- }
-
- if (handles != NULL) {
- chatrooms = g_slist_reverse (chatrooms);
- tp_cli_connection_call_inspect_handles (priv->connection, -1,
- TP_HANDLE_TYPE_ROOM,
- handles,
- tp_roomlist_inspect_handles_cb,
- chatrooms,
- tp_roomlist_chatrooms_free,
- list);
- g_array_unref (handles);
- }
-}
-
-static void
-tp_roomlist_get_listing_rooms_cb (TpChannel *channel,
- gboolean is_listing,
- const GError *error,
- gpointer user_data,
- GObject *list)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
-
- if (error) {
- DEBUG ("Error geting listing rooms: %s", error->message);
- return;
- }
-
- priv->is_listing = is_listing;
- g_object_notify (list, "is-listing");
-}
-
-static void
-tp_roomlist_invalidated_cb (TpChannel *channel,
- guint domain,
- gint code,
- gchar *message,
- EmpathyTpRoomlist *list)
-{
- DEBUG ("Channel invalidated: %s", message);
- g_signal_emit (list, signals[DESTROY], 0);
-}
-
-static void
-call_list_rooms_cb (TpChannel *proxy,
- const GError *error,
- gpointer list,
- GObject *weak_object)
-{
- if (error != NULL) {
- DEBUG ("Error listing rooms: %s", error->message);
- g_signal_emit_by_name (list, "error::start", error);
- }
-}
-
-static void
-stop_listing_cb (TpChannel *proxy,
- const GError *error,
- gpointer list,
- GObject *weak_object)
-{
- if (error != NULL) {
- DEBUG ("Error on stop listing: %s", error->message);
- g_signal_emit_by_name (list, "error::stop", error);
- }
-}
-
-static void
-tp_roomlist_create_channel_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyTpRoomlist *self = user_data;
- EmpathyTpRoomlistPriv *priv = GET_PRIV (self);
- GError *error = NULL;
-
- priv->channel = tp_account_channel_request_create_and_handle_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, NULL, &error);
-
- if (priv->channel == NULL) {
- DEBUG ("Error creating channel: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- g_signal_connect (priv->channel, "invalidated",
- G_CALLBACK (tp_roomlist_invalidated_cb), self);
-
- tp_cli_channel_type_room_list_connect_to_listing_rooms (priv->channel,
- tp_roomlist_listing_cb,
- NULL, NULL,
- G_OBJECT (self),
- NULL);
- tp_cli_channel_type_room_list_connect_to_got_rooms (priv->channel,
- tp_roomlist_got_rooms_cb,
- NULL, NULL,
- G_OBJECT (self),
- NULL);
-
- tp_cli_channel_type_room_list_call_get_listing_rooms (priv->channel, -1,
- tp_roomlist_get_listing_rooms_cb,
- NULL, NULL,
- G_OBJECT (self));
-
- if (priv->start_requested == TRUE) {
- tp_cli_channel_type_room_list_call_list_rooms (priv->channel, -1,
- call_list_rooms_cb, self, NULL, G_OBJECT (self));
- priv->start_requested = FALSE;
- }
-
-out:
- g_object_unref (self);
-}
-
-static void
-tp_roomlist_finalize (GObject *object)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (object);
-
- if (priv->channel) {
- DEBUG ("Closing channel...");
- g_signal_handlers_disconnect_by_func (priv->channel,
- tp_roomlist_invalidated_cb,
- object);
- tp_cli_channel_call_close (priv->channel, -1,
- NULL, NULL, NULL, NULL);
- g_object_unref (priv->channel);
- }
-
- if (priv->account) {
- g_object_unref (priv->account);
- }
- if (priv->connection) {
- g_object_unref (priv->connection);
- }
-
- G_OBJECT_CLASS (empathy_tp_roomlist_parent_class)->finalize (object);
-}
-
-static void
-tp_roomlist_constructed (GObject *list)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
- GHashTable *request;
- TpAccountChannelRequest *req;
-
- request = tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_ROOM_LIST,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_NONE,
- NULL);
-
- priv->connection = tp_account_get_connection (priv->account);
- g_object_ref (priv->connection);
-
- req = tp_account_channel_request_new (priv->account, request,
- TP_USER_ACTION_TIME_CURRENT_TIME);
-
- /* Ensure we stay alive during the async call */
- g_object_ref (list);
-
- tp_account_channel_request_create_and_handle_channel_async (req, NULL,
- tp_roomlist_create_channel_cb, list);
-
- g_hash_table_unref (request);
- g_object_unref (req);
-}
-
-static void
-tp_roomlist_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (object);
-
- switch (param_id) {
- case PROP_ACCOUNT:
- g_value_set_object (value, priv->account);
- break;
- case PROP_IS_LISTING:
- g_value_set_boolean (value, priv->is_listing);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-tp_roomlist_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (object);
-
- switch (param_id) {
- case PROP_ACCOUNT:
- priv->account = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-empathy_tp_roomlist_class_init (EmpathyTpRoomlistClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = tp_roomlist_finalize;
- object_class->constructed = tp_roomlist_constructed;
- object_class->get_property = tp_roomlist_get_property;
- object_class->set_property = tp_roomlist_set_property;
-
- g_object_class_install_property (object_class,
- PROP_ACCOUNT,
- g_param_spec_object ("account",
- "The Account",
- "The account on which it lists rooms",
- TP_TYPE_ACCOUNT,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (object_class,
- PROP_IS_LISTING,
- g_param_spec_boolean ("is-listing",
- "Is listing",
- "Are we listing rooms",
- FALSE,
- G_PARAM_READABLE));
-
- signals[NEW_ROOM] =
- g_signal_new ("new-room",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, EMPATHY_TYPE_CHATROOM);
-
- signals[DESTROY] =
- g_signal_new ("destroy",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 0);
-
- signals[ERROR] =
- g_signal_new ("error",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_POINTER);
-
- g_type_class_add_private (object_class, sizeof (EmpathyTpRoomlistPriv));
-}
-
-static void
-empathy_tp_roomlist_init (EmpathyTpRoomlist *list)
-{
- EmpathyTpRoomlistPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (list,
- EMPATHY_TYPE_TP_ROOMLIST, EmpathyTpRoomlistPriv);
-
- list->priv = priv;
- priv->start_requested = FALSE;
- priv->is_listing = FALSE;
-}
-
-EmpathyTpRoomlist *
-empathy_tp_roomlist_new (TpAccount *account)
-{
- EmpathyTpRoomlist *list;
-
- list = g_object_new (EMPATHY_TYPE_TP_ROOMLIST,
- "account", account,
- NULL);
-
- return list;
-}
-
-gboolean
-empathy_tp_roomlist_is_listing (EmpathyTpRoomlist *list)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
-
- g_return_val_if_fail (EMPATHY_IS_TP_ROOMLIST (list), FALSE);
-
- return priv->is_listing;
-}
-
-void
-empathy_tp_roomlist_start (EmpathyTpRoomlist *list)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
-
- g_return_if_fail (EMPATHY_IS_TP_ROOMLIST (list));
- if (priv->channel != NULL) {
- tp_cli_channel_type_room_list_call_list_rooms (priv->channel, -1,
- call_list_rooms_cb, list, NULL, NULL);
- } else {
- priv->start_requested = TRUE;
- }
-}
-
-void
-empathy_tp_roomlist_stop (EmpathyTpRoomlist *list)
-{
- EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
-
- g_return_if_fail (EMPATHY_IS_TP_ROOMLIST (list));
-
- if (priv->channel == NULL)
- return;
-
- g_return_if_fail (TP_IS_CHANNEL (priv->channel));
-
- tp_cli_channel_type_room_list_call_stop_listing (priv->channel, -1,
- stop_listing_cb, list, NULL, NULL);
-}
-
diff --git a/libempathy/empathy-tp-roomlist.h b/libempathy/empathy-tp-roomlist.h
deleted file mode 100644
index f400766a9..000000000
--- a/libempathy/empathy-tp-roomlist.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-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: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_TP_ROOMLIST_H__
-#define __EMPATHY_TP_ROOMLIST_H__
-
-#include <glib.h>
-
-#include <telepathy-glib/account.h>
-#include <telepathy-glib/connection.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_TP_ROOMLIST (empathy_tp_roomlist_get_type ())
-#define EMPATHY_TP_ROOMLIST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_TP_ROOMLIST, EmpathyTpRoomlist))
-#define EMPATHY_TP_ROOMLIST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_TP_ROOMLIST, EmpathyTpRoomlistClass))
-#define EMPATHY_IS_TP_ROOMLIST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_TP_ROOMLIST))
-#define EMPATHY_IS_TP_ROOMLIST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_TP_ROOMLIST))
-#define EMPATHY_TP_ROOMLIST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_TP_ROOMLIST, EmpathyTpRoomlistClass))
-
-typedef struct _EmpathyTpRoomlist EmpathyTpRoomlist;
-typedef struct _EmpathyTpRoomlistClass EmpathyTpRoomlistClass;
-
-struct _EmpathyTpRoomlist {
- GObject parent;
- gpointer priv;
-};
-
-struct _EmpathyTpRoomlistClass {
- GObjectClass parent_class;
-};
-
-GType empathy_tp_roomlist_get_type (void) G_GNUC_CONST;
-EmpathyTpRoomlist *empathy_tp_roomlist_new (TpAccount *account);
-gboolean empathy_tp_roomlist_is_listing (EmpathyTpRoomlist *list);
-void empathy_tp_roomlist_start (EmpathyTpRoomlist *list);
-void empathy_tp_roomlist_stop (EmpathyTpRoomlist *list);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_TP_ROOMLIST_H__ */
diff --git a/libempathy/empathy-tp-streamed-media.c b/libempathy/empathy-tp-streamed-media.c
deleted file mode 100644
index f245dcfd5..000000000
--- a/libempathy/empathy-tp-streamed-media.c
+++ /dev/null
@@ -1,856 +0,0 @@
-/*
- * Copyright (C) 2007 Elliot Fairweather
- * Copyright (C) 2007-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: Elliot Fairweather <elliot.fairweather@collabora.co.uk>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include <telepathy-glib/proxy-subclass.h>
-#include <telepathy-glib/dbus.h>
-#include <telepathy-glib/interfaces.h>
-#include <telepathy-glib/util.h>
-
-#include "empathy-tp-streamed-media.h"
-#include "empathy-tp-contact-factory.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpStreamedMedia)
-typedef struct
-{
- gboolean dispose_has_run;
- TpAccount *account;
- TpChannel *channel;
- EmpathyContact *contact;
- gboolean is_incoming;
- guint status;
-
- EmpathyTpStreamedMediaStream *audio;
- EmpathyTpStreamedMediaStream *video;
-} EmpathyTpStreamedMediaPriv;
-
-/* signal enum */
-enum {
- AUDIO_STREAM_ERROR,
- VIDEO_STREAM_ERROR,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-enum
-{
- PROP_0,
- PROP_ACCOUNT,
- PROP_CHANNEL,
- PROP_CONTACT,
- PROP_STATUS,
- PROP_AUDIO_STREAM,
- PROP_VIDEO_STREAM
-};
-
-G_DEFINE_TYPE (EmpathyTpStreamedMedia, empathy_tp_streamed_media, G_TYPE_OBJECT)
-
-static void
-tp_streamed_media_add_stream (EmpathyTpStreamedMedia *call,
- guint stream_id,
- guint contact_handle,
- guint stream_type,
- guint stream_state,
- guint stream_direction)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- switch (stream_type)
- {
- case TP_MEDIA_STREAM_TYPE_AUDIO:
- DEBUG ("Audio stream - id: %d, state: %d, direction: %d",
- stream_id, stream_state, stream_direction);
- priv->audio->exists = TRUE;
- priv->audio->id = stream_id;
- priv->audio->state = stream_state;
- priv->audio->direction = stream_direction;
- g_object_notify (G_OBJECT (call), "audio-stream");
- break;
- case TP_MEDIA_STREAM_TYPE_VIDEO:
- DEBUG ("Video stream - id: %d, state: %d, direction: %d",
- stream_id, stream_state, stream_direction);
- priv->video->exists = TRUE;
- priv->video->id = stream_id;
- priv->video->state = stream_state;
- priv->video->direction = stream_direction;
- g_object_notify (G_OBJECT (call), "video-stream");
- break;
- default:
- DEBUG ("Unknown stream type: %d", stream_type);
- }
-}
-
-static void
-tp_streamed_media_stream_added_cb (TpChannel *channel,
- guint stream_id,
- guint contact_handle,
- guint stream_type,
- gpointer user_data,
- GObject *call)
-{
- DEBUG ("Stream added - stream id: %d, contact handle: %d, stream type: %d",
- stream_id, contact_handle, stream_type);
-
- tp_streamed_media_add_stream (EMPATHY_TP_STREAMED_MEDIA (call), stream_id, contact_handle,
- stream_type, TP_MEDIA_STREAM_STATE_DISCONNECTED,
- TP_MEDIA_STREAM_DIRECTION_NONE);
-}
-
-static void
-tp_streamed_media_stream_removed_cb (TpChannel *channel,
- guint stream_id,
- gpointer user_data,
- GObject *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- DEBUG ("Stream removed - stream id: %d", stream_id);
-
- if (stream_id == priv->audio->id)
- {
- priv->audio->exists = FALSE;
- g_object_notify (call, "audio-stream");
- }
- else if (stream_id == priv->video->id)
- {
- priv->video->exists = FALSE;
- g_object_notify (call, "video-stream");
- }
-}
-
-static void
-tp_streamed_media_stream_state_changed_cb (TpChannel *proxy,
- guint stream_id,
- guint stream_state,
- gpointer user_data,
- GObject *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- DEBUG ("Stream state changed - stream id: %d, state state: %d",
- stream_id, stream_state);
-
- if (stream_id == priv->audio->id)
- {
- priv->audio->state = stream_state;
- g_object_notify (call, "audio-stream");
- }
- else if (stream_id == priv->video->id)
- {
- priv->video->state = stream_state;
- g_object_notify (call, "video-stream");
- }
-}
-
-static void
-tp_streamed_media_stream_direction_changed_cb (TpChannel *channel,
- guint stream_id,
- guint stream_direction,
- guint pending_flags,
- gpointer user_data,
- GObject *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- DEBUG ("Stream direction changed - stream: %d, direction: %d",
- stream_id, stream_direction);
-
- if (stream_id == priv->audio->id)
- {
- priv->audio->direction = stream_direction;
- g_object_notify (call, "audio-stream");
- }
- else if (stream_id == priv->video->id)
- {
- priv->video->direction = stream_direction;
- g_object_notify (call, "video-stream");
- }
-}
-
-static void
-tp_streamed_media_request_streams_cb (TpChannel *channel,
- const GPtrArray *streams,
- const GError *error,
- gpointer user_data,
- GObject *call)
-{
- guint i;
-
- if (error)
- {
- DEBUG ("Error requesting streams: %s", error->message);
- return;
- }
-
- for (i = 0; i < streams->len; i++)
- {
- GValueArray *values;
- guint stream_id;
- guint contact_handle;
- guint stream_type;
- guint stream_state;
- guint stream_direction;
-
- values = g_ptr_array_index (streams, i);
- stream_id = g_value_get_uint (g_value_array_get_nth (values, 0));
- contact_handle = g_value_get_uint (g_value_array_get_nth (values, 1));
- stream_type = g_value_get_uint (g_value_array_get_nth (values, 2));
- stream_state = g_value_get_uint (g_value_array_get_nth (values, 3));
- stream_direction = g_value_get_uint (g_value_array_get_nth (values, 4));
-
- tp_streamed_media_add_stream (EMPATHY_TP_STREAMED_MEDIA (call), stream_id, contact_handle,
- stream_type, stream_state, stream_direction);
- }
-}
-
-static void
-tp_streamed_media_request_streams_for_capabilities (EmpathyTpStreamedMedia *call,
- EmpathyCapabilities capabilities)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
- GArray *stream_types;
- guint handle;
- guint stream_type;
-
- if (capabilities == EMPATHY_CAPABILITIES_UNKNOWN)
- capabilities = EMPATHY_CAPABILITIES_AUDIO | EMPATHY_CAPABILITIES_VIDEO;
-
- DEBUG ("Requesting new stream for capabilities %d",
- capabilities);
-
- stream_types = g_array_new (FALSE, FALSE, sizeof (guint));
- handle = empathy_contact_get_handle (priv->contact);
-
- if (capabilities & EMPATHY_CAPABILITIES_AUDIO)
- {
- stream_type = TP_MEDIA_STREAM_TYPE_AUDIO;
- g_array_append_val (stream_types, stream_type);
- }
- if (capabilities & EMPATHY_CAPABILITIES_VIDEO)
- {
- stream_type = TP_MEDIA_STREAM_TYPE_VIDEO;
- g_array_append_val (stream_types, stream_type);
- }
-
- tp_cli_channel_type_streamed_media_call_request_streams (priv->channel, -1,
- handle, stream_types, tp_streamed_media_request_streams_cb, NULL, NULL,
- G_OBJECT (call));
-
- g_array_unref (stream_types);
-}
-
-static void
-tp_streamed_media_got_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- if (error)
- {
- DEBUG ("Error: %s", error->message);
- return;
- }
-
- priv->contact = g_object_ref (contact);
-
- if (priv->status < EMPATHY_TP_STREAMED_MEDIA_STATUS_PENDING)
- {
- priv->status = EMPATHY_TP_STREAMED_MEDIA_STATUS_PENDING;
- g_object_notify (G_OBJECT (call), "status");
- }
-
- g_object_notify (G_OBJECT (call), "contact");
-}
-
-static void
-tp_streamed_media_update_status (EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
- TpHandle self_handle;
- const TpIntSet *set;
- TpIntSetIter iter;
-
- g_object_ref (call);
-
- self_handle = tp_channel_group_get_self_handle (priv->channel);
- set = tp_channel_group_get_members (priv->channel);
- tp_intset_iter_init (&iter, set);
- while (tp_intset_iter_next (&iter))
- {
- if (priv->status == EMPATHY_TP_STREAMED_MEDIA_STATUS_PENDING &&
- ((priv->is_incoming && iter.element == self_handle) ||
- (!priv->is_incoming && iter.element != self_handle)))
- {
- priv->status = EMPATHY_TP_STREAMED_MEDIA_STATUS_ACCEPTED;
- g_object_notify (G_OBJECT (call), "status");
- }
- }
-
- g_object_unref (call);
-}
-
-static void
-tp_streamed_media_channel_invalidated_cb (TpChannel *channel,
- GQuark domain,
- gint code,
- gchar *message,
- EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- DEBUG ("Channel invalidated: %s", message);
- priv->status = EMPATHY_TP_STREAMED_MEDIA_STATUS_CLOSED;
- g_object_notify (G_OBJECT (call), "status");
-}
-
-static void
-tp_streamed_media_async_cb (TpProxy *proxy,
- const GError *error,
- gpointer user_data,
- GObject *call)
-{
- if (error)
- DEBUG ("Error %s: %s", (gchar *) user_data, error->message);
-}
-
-static void
-tp_streamed_media_stream_error_cb (TpChannel *channel,
- guint stream_id,
- guint error_code,
- const gchar *msg,
- gpointer user_data,
- GObject *call)
-{
- EmpathyTpStreamedMedia *self = EMPATHY_TP_STREAMED_MEDIA (call);
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (self);
-
- DEBUG ("Stream error on stream %u: %s (code: %u)", stream_id, msg,
- error_code);
-
- if (priv->audio->id == stream_id)
- {
- g_signal_emit (call, signals[AUDIO_STREAM_ERROR], 0, error_code, msg);
- }
- else if (priv->video->id == stream_id)
- {
- g_signal_emit (call, signals[VIDEO_STREAM_ERROR], 0, error_code, msg);
- }
- else
- {
- DEBUG ("Unknown stream id: %u", stream_id);
- }
-}
-
-static GObject *
-tp_streamed_media_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- EmpathyTpStreamedMedia *call;
- EmpathyTpStreamedMediaPriv *priv;
-
- object = G_OBJECT_CLASS (empathy_tp_streamed_media_parent_class)->constructor (type,
- n_construct_params, construct_params);
-
- call = EMPATHY_TP_STREAMED_MEDIA (object);
- priv = GET_PRIV (call);
-
- /* Setup streamed media channel */
- g_signal_connect (priv->channel, "invalidated",
- G_CALLBACK (tp_streamed_media_channel_invalidated_cb), call);
- tp_cli_channel_type_streamed_media_connect_to_stream_added (priv->channel,
- tp_streamed_media_stream_added_cb, NULL, NULL, G_OBJECT (call), NULL);
- tp_cli_channel_type_streamed_media_connect_to_stream_removed (priv->channel,
- tp_streamed_media_stream_removed_cb, NULL, NULL, G_OBJECT (call), NULL);
- tp_cli_channel_type_streamed_media_connect_to_stream_state_changed (priv->channel,
- tp_streamed_media_stream_state_changed_cb, NULL, NULL, G_OBJECT (call), NULL);
- tp_cli_channel_type_streamed_media_connect_to_stream_direction_changed (priv->channel,
- tp_streamed_media_stream_direction_changed_cb, NULL, NULL, G_OBJECT (call), NULL);
- tp_cli_channel_type_streamed_media_connect_to_stream_error (priv->channel,
- tp_streamed_media_stream_error_cb, NULL, NULL, G_OBJECT (call), NULL);
- tp_cli_channel_type_streamed_media_call_list_streams (priv->channel, -1,
- tp_streamed_media_request_streams_cb, NULL, NULL, G_OBJECT (call));
-
- /* Is the call incoming? */
- priv->is_incoming = !tp_channel_get_requested (priv->channel);
-
- /* Get the remote contact */
- empathy_tp_contact_factory_get_from_handle (
- tp_channel_borrow_connection (priv->channel),
- tp_channel_get_handle (priv->channel, NULL), tp_streamed_media_got_contact_cb,
- NULL, NULL, object);
-
- /* Update status when members changes */
- tp_streamed_media_update_status (call);
- tp_g_signal_connect_object (priv->channel, "group-members-changed",
- G_CALLBACK (tp_streamed_media_update_status), call, G_CONNECT_SWAPPED);
-
- return object;
-}
-static void
-tp_streamed_media_dispose (GObject *object)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (object);
-
- DEBUG ("Disposing: %p, %d", object, priv->dispose_has_run);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- if (priv->channel != NULL)
- {
- g_signal_handlers_disconnect_by_func (priv->channel,
- tp_streamed_media_channel_invalidated_cb, object);
-
- g_object_unref (priv->channel);
- priv->channel = NULL;
- }
-
- if (priv->contact != NULL)
- g_object_unref (priv->contact);
-
- tp_clear_object (&priv->account);
-
- if (G_OBJECT_CLASS (empathy_tp_streamed_media_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_tp_streamed_media_parent_class)->dispose (object);
-}
-
-static void
-tp_streamed_media_finalize (GObject *object)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (object);
-
- DEBUG ("Finalizing: %p", object);
-
- g_slice_free (EmpathyTpStreamedMediaStream, priv->audio);
- g_slice_free (EmpathyTpStreamedMediaStream, priv->video);
-
- (G_OBJECT_CLASS (empathy_tp_streamed_media_parent_class)->finalize) (object);
-}
-
-static void
-tp_streamed_media_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (object);
-
- switch (prop_id)
- {
- case PROP_ACCOUNT:
- priv->account = g_value_dup_object (value);
- break;
- 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_streamed_media_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (object);
-
- switch (prop_id)
- {
- case PROP_ACCOUNT:
- g_value_set_object (value, priv->channel);
- break;
- case PROP_CHANNEL:
- g_value_set_object (value, priv->channel);
- break;
- case PROP_CONTACT:
- g_value_set_object (value, priv->contact);
- break;
- case PROP_STATUS:
- g_value_set_uint (value, priv->status);
- break;
- case PROP_AUDIO_STREAM:
- g_value_set_pointer (value, priv->audio);
- break;
- case PROP_VIDEO_STREAM:
- g_value_set_pointer (value, priv->video);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-empathy_tp_streamed_media_class_init (EmpathyTpStreamedMediaClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructor = tp_streamed_media_constructor;
- object_class->dispose = tp_streamed_media_dispose;
- object_class->finalize = tp_streamed_media_finalize;
- object_class->set_property = tp_streamed_media_set_property;
- object_class->get_property = tp_streamed_media_get_property;
-
- g_type_class_add_private (klass, sizeof (EmpathyTpStreamedMediaPriv));
-
- g_object_class_install_property (object_class, PROP_ACCOUNT,
- g_param_spec_object ("account", "TpAccount", "TpAccount",
- TP_TYPE_ACCOUNT,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_CHANNEL,
- g_param_spec_object ("channel", "channel", "channel",
- TP_TYPE_CHANNEL,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
- G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property (object_class, PROP_CONTACT,
- g_param_spec_object ("contact", "Call contact", "Call contact",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READABLE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property (object_class, PROP_STATUS,
- g_param_spec_uint ("status", "Call status",
- "Call status", 0, 255, 0, G_PARAM_READABLE | G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property (object_class, PROP_AUDIO_STREAM,
- g_param_spec_pointer ("audio-stream", "Audio stream data",
- "Audio stream data",
- G_PARAM_READABLE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property (object_class, PROP_VIDEO_STREAM,
- g_param_spec_pointer ("video-stream", "Video stream data",
- "Video stream data",
- G_PARAM_READABLE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
-
- signals[AUDIO_STREAM_ERROR] =
- g_signal_new ("audio-stream-error",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, G_TYPE_UINT, G_TYPE_STRING);
-
- signals[VIDEO_STREAM_ERROR] =
- g_signal_new ("video-stream-error",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, G_TYPE_UINT, G_TYPE_STRING);
-}
-
-static void
-empathy_tp_streamed_media_init (EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (call,
- EMPATHY_TYPE_TP_STREAMED_MEDIA, EmpathyTpStreamedMediaPriv);
-
- call->priv = priv;
- priv->status = EMPATHY_TP_STREAMED_MEDIA_STATUS_READYING;
- priv->contact = NULL;
- priv->audio = g_slice_new0 (EmpathyTpStreamedMediaStream);
- priv->video = g_slice_new0 (EmpathyTpStreamedMediaStream);
- priv->audio->exists = FALSE;
- priv->video->exists = FALSE;
-}
-
-EmpathyTpStreamedMedia *
-empathy_tp_streamed_media_new (TpAccount *account,
- TpChannel *channel)
-{
- g_return_val_if_fail (TP_IS_ACCOUNT (account), NULL);
- g_return_val_if_fail (TP_IS_CHANNEL (channel), NULL);
-
- return g_object_new (EMPATHY_TYPE_TP_STREAMED_MEDIA,
- "account", account,
- "channel", channel,
- NULL);
-}
-
-void
-empathy_tp_streamed_media_accept_incoming_call (EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
- TpHandle self_handle;
- GArray handles = {(gchar *) &self_handle, 1};
-
- g_return_if_fail (EMPATHY_IS_TP_STREAMED_MEDIA (call));
- g_return_if_fail (priv->status == EMPATHY_TP_STREAMED_MEDIA_STATUS_PENDING);
-
- if (!priv->is_incoming)
- return;
-
- DEBUG ("Accepting incoming call");
-
- self_handle = tp_channel_group_get_self_handle (priv->channel);
- tp_cli_channel_interface_group_call_add_members (priv->channel, -1,
- &handles, NULL, NULL, NULL, NULL, NULL);
-}
-
-void
-empathy_tp_streamed_media_close (EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- g_return_if_fail (EMPATHY_IS_TP_STREAMED_MEDIA (call));
-
- if (priv->status == EMPATHY_TP_STREAMED_MEDIA_STATUS_CLOSED)
- return;
-
- DEBUG ("Closing channel");
-
- tp_cli_channel_call_close (priv->channel, -1,
- NULL, NULL, NULL, NULL);
-
- priv->status = EMPATHY_TP_STREAMED_MEDIA_STATUS_CLOSED;
- g_object_notify (G_OBJECT (call), "status");
-}
-
-void
-empathy_tp_streamed_media_request_video_stream_direction (EmpathyTpStreamedMedia *call,
- gboolean is_sending)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
- guint new_direction;
-
- g_return_if_fail (EMPATHY_IS_TP_STREAMED_MEDIA (call));
- g_return_if_fail (priv->status == EMPATHY_TP_STREAMED_MEDIA_STATUS_ACCEPTED);
-
- DEBUG ("Requesting video stream direction - is_sending: %d", is_sending);
-
- if (!priv->video->exists)
- {
- if (is_sending)
- tp_streamed_media_request_streams_for_capabilities (call,
- EMPATHY_CAPABILITIES_VIDEO);
- return;
- }
-
- if (is_sending)
- new_direction = priv->video->direction | TP_MEDIA_STREAM_DIRECTION_SEND;
- else
- new_direction = priv->video->direction & ~TP_MEDIA_STREAM_DIRECTION_SEND;
-
- tp_cli_channel_type_streamed_media_call_request_stream_direction (priv->channel,
- -1, priv->video->id, new_direction,
- (tp_cli_channel_type_streamed_media_callback_for_request_stream_direction)
- tp_streamed_media_async_cb, NULL, NULL, G_OBJECT (call));
-}
-
-void
-empathy_tp_streamed_media_start_tone (EmpathyTpStreamedMedia *call, TpDTMFEvent event)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- g_return_if_fail (EMPATHY_IS_TP_STREAMED_MEDIA (call));
- g_return_if_fail (priv->status == EMPATHY_TP_STREAMED_MEDIA_STATUS_ACCEPTED);
-
- if (!priv->audio->exists)
- return;
-
- tp_cli_channel_interface_dtmf_call_start_tone (priv->channel, -1,
- priv->audio->id, event,
- (tp_cli_channel_interface_dtmf_callback_for_start_tone) tp_streamed_media_async_cb,
- "starting tone", NULL, G_OBJECT (call));
-}
-
-void
-empathy_tp_streamed_media_stop_tone (EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- g_return_if_fail (EMPATHY_IS_TP_STREAMED_MEDIA (call));
- g_return_if_fail (priv->status == EMPATHY_TP_STREAMED_MEDIA_STATUS_ACCEPTED);
-
- if (!priv->audio->exists)
- return;
-
- tp_cli_channel_interface_dtmf_call_stop_tone (priv->channel, -1,
- priv->audio->id,
- (tp_cli_channel_interface_dtmf_callback_for_stop_tone) tp_streamed_media_async_cb,
- "stoping tone", NULL, G_OBJECT (call));
-}
-
-gboolean
-empathy_tp_streamed_media_has_dtmf (EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- g_return_val_if_fail (EMPATHY_IS_TP_STREAMED_MEDIA (call), FALSE);
-
- return tp_proxy_has_interface_by_id (priv->channel,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_DTMF);
-}
-
-/**
- * empathy_tp_streamed_media_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_streamed_media_is_receiving_video (EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- g_return_val_if_fail (EMPATHY_IS_TP_STREAMED_MEDIA (call), FALSE);
-
- if (!priv->video->exists)
- return FALSE;
-
- return priv->video->direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE ?
- TRUE : FALSE;
-}
-
-/**
- * empathy_tp_streamed_media_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_streamed_media_is_sending_video (EmpathyTpStreamedMedia *call)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (call);
-
- g_return_val_if_fail (EMPATHY_IS_TP_STREAMED_MEDIA (call), FALSE);
-
- if (!priv->video->exists)
- return FALSE;
-
- return priv->video->direction & TP_MEDIA_STREAM_DIRECTION_SEND ?
- TRUE : FALSE;
-}
-
-const gchar *
-empathy_tp_streamed_media_get_connection_manager (EmpathyTpStreamedMedia *self)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (self);
-
- return tp_account_get_connection_manager (priv->account);
-}
-
-gboolean
-empathy_tp_streamed_media_has_initial_video (EmpathyTpStreamedMedia *self)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (self);
- GHashTable *props;
- gboolean initial_video;
- gboolean valid;
-
- if (priv->channel == NULL)
- return FALSE;
-
- g_object_get (priv->channel, "channel-properties", &props, NULL);
-
- initial_video = tp_asv_get_boolean (props,
- TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA ".InitialVideo", &valid);
- if (!valid)
- initial_video = FALSE;
-
- g_hash_table_unref (props);
- return initial_video;
-}
-
-static void
-leave_remove_members_cb (TpChannel *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyTpStreamedMedia *self = user_data;
-
- if (error == NULL)
- return;
-
- DEBUG ("RemoveMembers failed (%s); closing the channel", error->message);
- empathy_tp_streamed_media_close (self);
-}
-
-void
-empathy_tp_streamed_media_leave (EmpathyTpStreamedMedia *self)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (self);
- TpHandle self_handle;
- GArray array = { (gchar *) &self_handle, 1 };
-
- if (!tp_proxy_has_interface_by_id (priv->channel,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP))
- {
- empathy_tp_streamed_media_close (self);
- return;
- }
-
- self_handle = tp_channel_group_get_self_handle (priv->channel);
- if (self_handle == 0)
- {
- /* we are not member of the channel */
- empathy_tp_streamed_media_close (self);
- return;
- }
-
- tp_cli_channel_interface_group_call_remove_members (priv->channel, -1, &array,
- "", leave_remove_members_cb, self, NULL, G_OBJECT (self));
-}
-
-EmpathyTpStreamedMediaStatus
-empathy_tp_streamed_media_get_status (EmpathyTpStreamedMedia *self)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (self);
-
- return priv->status;
-}
-
-TpAccount *
-empathy_tp_streamed_media_get_account (EmpathyTpStreamedMedia *self)
-{
- EmpathyTpStreamedMediaPriv *priv = GET_PRIV (self);
-
- return priv->account;
-}
diff --git a/libempathy/empathy-tp-streamed-media.h b/libempathy/empathy-tp-streamed-media.h
deleted file mode 100644
index 35612b292..000000000
--- a/libempathy/empathy-tp-streamed-media.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007 Elliot Fairweather
- * Copyright (C) 2007-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: Elliot Fairweather <elliot.fairweather@collabora.co.uk>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_TP_STREAMED_MEDIA_H__
-#define __EMPATHY_TP_STREAMED_MEDIA_H__
-
-#include <glib.h>
-#include <telepathy-glib/channel.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_TP_STREAMED_MEDIA (empathy_tp_streamed_media_get_type ())
-#define EMPATHY_TP_STREAMED_MEDIA(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), \
- EMPATHY_TYPE_TP_STREAMED_MEDIA, EmpathyTpStreamedMedia))
-#define EMPATHY_TP_STREAMED_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_TP_STREAMED_MEDIA, EmpathyTpStreamedMediaClass))
-#define EMPATHY_IS_TP_STREAMED_MEDIA(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), \
- EMPATHY_TYPE_TP_STREAMED_MEDIA))
-#define EMPATHY_IS_TP_STREAMED_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
- EMPATHY_TYPE_TP_STREAMED_MEDIA))
-#define EMPATHY_TP_STREAMED_MEDIA_GET_CLASS(object) \
- (G_TYPE_INSTANCE_GET_CLASS ((object), \
- EMPATHY_TYPE_TP_STREAMED_MEDIA, EmpathyTpStreamedMediaClass))
-
-typedef struct _EmpathyTpStreamedMedia EmpathyTpStreamedMedia;
-typedef struct _EmpathyTpStreamedMediaClass EmpathyTpStreamedMediaClass;
-
-struct _EmpathyTpStreamedMedia {
- GObject parent;
- gpointer priv;
-};
-
-struct _EmpathyTpStreamedMediaClass {
- GObjectClass parent_class;
-};
-
-typedef enum
-{
- EMPATHY_TP_STREAMED_MEDIA_STATUS_READYING,
- EMPATHY_TP_STREAMED_MEDIA_STATUS_PENDING,
- EMPATHY_TP_STREAMED_MEDIA_STATUS_ACCEPTED,
- EMPATHY_TP_STREAMED_MEDIA_STATUS_CLOSED
-} EmpathyTpStreamedMediaStatus;
-
-typedef struct
-{
- gboolean exists;
- guint id;
- guint state;
- guint direction;
-} EmpathyTpStreamedMediaStream;
-
-GType empathy_tp_streamed_media_get_type (void) G_GNUC_CONST;
-EmpathyTpStreamedMedia *empathy_tp_streamed_media_new (TpAccount *account,
- TpChannel *channel);
-void empathy_tp_streamed_media_close (EmpathyTpStreamedMedia *streamed_media);
-
-void empathy_tp_streamed_media_accept_incoming_call (
- EmpathyTpStreamedMedia *streamed_media);
-void empathy_tp_streamed_media_request_video_stream_direction (
- EmpathyTpStreamedMedia *streamed_media,
- gboolean is_sending);
-void empathy_tp_streamed_media_start_tone (
- EmpathyTpStreamedMedia *streamed_media,
- TpDTMFEvent event);
-void empathy_tp_streamed_media_stop_tone (
- EmpathyTpStreamedMedia *streamed_media);
-gboolean empathy_tp_streamed_media_has_dtmf (
- EmpathyTpStreamedMedia *streamed_media);
-gboolean empathy_tp_streamed_media_is_receiving_video (
- EmpathyTpStreamedMedia *streamed_media);
-gboolean empathy_tp_streamed_media_is_sending_video (
- EmpathyTpStreamedMedia *streamed_media);
-
-const gchar * empathy_tp_streamed_media_get_connection_manager (
- EmpathyTpStreamedMedia *self);
-
-gboolean empathy_tp_streamed_media_has_initial_video (
- EmpathyTpStreamedMedia *self);
-
-void empathy_tp_streamed_media_leave (EmpathyTpStreamedMedia *self);
-
-EmpathyTpStreamedMediaStatus empathy_tp_streamed_media_get_status (
- EmpathyTpStreamedMedia *self);
-
-TpAccount * empathy_tp_streamed_media_get_account (
- EmpathyTpStreamedMedia *self);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_TP_STREAMED_MEDIA_H__ */
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index 2f4c9edde..c73f6514e 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -53,7 +53,6 @@
#include "empathy-individual-manager.h"
#include "empathy-presence-manager.h"
#include "empathy-request-util.h"
-#include "empathy-tp-contact-factory.h"
#include <extensions/extensions.h>
@@ -1167,10 +1166,28 @@ empathy_sasl_channel_supports_mechanism (TpChannel *channel,
return tp_strv_contains (available_mechanisms, mechanism);
}
+static FolksIndividual *
+create_individual_from_persona (FolksPersona *persona)
+{
+ GeeSet *personas;
+ FolksIndividual *individual;
+
+ personas = GEE_SET (
+ gee_hash_set_new (FOLKS_TYPE_PERSONA, g_object_ref, g_object_unref,
+ g_direct_hash, g_direct_equal));
+
+ gee_collection_add (GEE_COLLECTION (personas), persona);
+
+ individual = folks_individual_new (personas);
+
+ g_clear_object (&personas);
+
+ return individual;
+}
+
FolksIndividual *
empathy_create_individual_from_tp_contact (TpContact *contact)
{
- GeeSet *personas;
TpfPersona *persona;
FolksIndividual *individual;
@@ -1182,17 +1199,9 @@ empathy_create_individual_from_tp_contact (TpContact *contact)
return NULL;
}
- personas = GEE_SET (
- gee_hash_set_new (FOLKS_TYPE_PERSONA, g_object_ref, g_object_unref,
- g_direct_hash, g_direct_equal));
-
- gee_collection_add (GEE_COLLECTION (personas), persona);
-
- individual = folks_individual_new (personas);
-
- g_clear_object (&persona);
- g_clear_object (&personas);
+ individual = create_individual_from_persona (FOLKS_PERSONA (persona));
+ g_object_unref (persona);
return individual;
}
@@ -1201,17 +1210,24 @@ empathy_create_individual_from_tp_contact (TpContact *contact)
FolksIndividual *
empathy_ensure_individual_from_tp_contact (TpContact *contact)
{
- EmpathyIndividualManager *mgr;
+ TpfPersona *persona;
FolksIndividual *individual;
- mgr = empathy_individual_manager_dup_singleton ();
- individual = empathy_individual_manager_lookup_by_contact (mgr, contact);
+ persona = tpf_persona_dup_for_contact (contact);
+ if (persona == NULL)
+ {
+ DEBUG ("Failed to get a persona for %s",
+ tp_contact_get_identifier (contact));
+ return NULL;
+ }
+
+ individual = folks_persona_get_individual (FOLKS_PERSONA (persona));
if (individual != NULL)
g_object_ref (individual);
else
- individual = empathy_create_individual_from_tp_contact (contact);
+ individual = create_individual_from_persona (FOLKS_PERSONA (persona));
- g_object_unref (mgr);
+ g_object_unref (persona);
return individual;
}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 597cf8620..ad71b4011 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -3,7 +3,7 @@
data/empathy.desktop.in.in
data/empathy-accounts.desktop.in.in
-data/org.gnome.Empathy.gschema.xml.in
+[type: gettext/gsettings]data/org.gnome.Empathy.gschema.xml
libempathy/empathy-ft-handler.c
libempathy/empathy-message.c
@@ -79,8 +79,6 @@ src/empathy-about-dialog.c
src/empathy-accounts-dialog.c
[type: gettext/glade]src/empathy-accounts-dialog.ui
src/empathy-auth-client.c
-src/empathy-av.c
-src/empathy-streamed-media-window.c
[type: gettext/glade]src/empathy-call-window.ui
src/empathy-chat-window.c
[type: gettext/glade]src/empathy-chat-window.ui
@@ -102,14 +100,10 @@ src/empathy-preferences.c
[type: gettext/glade]src/empathy-preferences.ui
src/empathy-status-icon.c
[type: gettext/glade]src/empathy-status-icon.ui
-[type: gettext/glade]src/empathy-streamed-media-window.ui
[type: gettext/glade]src/empathy-call-window-fullscreen.ui
-src/empathy-map-view.c
-[type: gettext/glade]src/empathy-map-view.ui
src/empathy-debug-window.c
src/empathy-invite-participant-dialog.c
src/empathy-accounts.c
-src/empathy-av.c
src/empathy-debugger.c
src/empathy-chat.c
src/empathy-notifications-approver.c
diff --git a/po/ca@valencia.po b/po/ca@valencia.po
index 49ddd0e5b..549ce2d70 100644
--- a/po/ca@valencia.po
+++ b/po/ca@valencia.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: empathy\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-10 23:31+0200\n"
+"POT-Creation-Date: 2012-04-10 23:32+0200\n"
"PO-Revision-Date: 2012-03-17 00:05+0100\n"
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
"Language-Team: català; valencià <tradgnome@softcatala.org>\n"
@@ -39,7 +39,7 @@ msgstr ""
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2552
+#: ../src/empathy-accounts-dialog.c:2527
msgid "Messaging and VoIP Accounts"
msgstr "Comptes de missatgeria i VoIP"
@@ -887,11 +887,11 @@ msgstr "_Aplica"
msgid "L_og in"
msgstr "_Entra"
-#: ../libempathy-gtk/empathy-account-widget.c:1812
+#: ../libempathy-gtk/empathy-account-widget.c:1810
msgid "This account already exists on the server"
msgstr "Ja existeix este compte al servidor"
-#: ../libempathy-gtk/empathy-account-widget.c:1816
+#: ../libempathy-gtk/empathy-account-widget.c:1814
msgid "Create a new account on the server"
msgstr "Crea un compte nou al servidor"
@@ -900,19 +900,19 @@ msgstr "Crea un compte nou al servidor"
#. * like: "MyUserName on freenode".
#. * You should reverse the order of these arguments if the
#. * server should come before the login id in your locale.
-#: ../libempathy-gtk/empathy-account-widget.c:2241
+#: ../libempathy-gtk/empathy-account-widget.c:2236
#, c-format
msgid "%1$s on %2$s"
msgstr "%1$s a %2$s"
#. To translators: The parameter is the protocol name. The resulting
#. * string will be something like: "Jabber Account"
-#: ../libempathy-gtk/empathy-account-widget.c:2267
+#: ../libempathy-gtk/empathy-account-widget.c:2262
#, c-format
msgid "%s Account"
msgstr "Compte %s"
-#: ../libempathy-gtk/empathy-account-widget.c:2271
+#: ../libempathy-gtk/empathy-account-widget.c:2266
msgid "New account"
msgstr "Compte nou"
@@ -972,7 +972,7 @@ msgstr "_Servidor:"
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
msgid "Advanced"
msgstr "Avançat"
@@ -990,7 +990,7 @@ msgstr "Quina és la vostra contrasenya de l'AIM?"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:10
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "Remember Password"
msgstr "Recorda la contrasenya?"
@@ -1034,32 +1034,32 @@ msgstr "Quin és el vostre UIN de l'ICQ?"
msgid "What is your ICQ password?"
msgstr "Quina és la vostra contrasenya de l'ICQ?"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:205
-#: ../libempathy-gtk/empathy-account-widget-sip.c:238
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "Automàtic"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:208
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:211
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:214
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:243
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "Registre"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:248
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "Opcions"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:251
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "Cap"
@@ -1320,11 +1320,16 @@ msgstr "Ignora els errors de la TLS"
msgid "Port:"
msgstr "Port:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#, fuzzy
+msgid "Local IP Address:"
+msgstr "_Adreça electrònica:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP login ID?"
msgstr "Quin és el vostre identificador d'entrada de SIP?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP account password?"
msgstr "Quina és la vostra contrasenya del compte de SIP?"
@@ -1410,40 +1415,40 @@ msgstr "Este protocol no permet fer trucades d'emergència"
msgid "You don't have enough credit in order to place this call"
msgstr "No teniu prou saldo per fer esta trucada"
-#: ../libempathy-gtk/empathy-chat.c:728
+#: ../libempathy-gtk/empathy-chat.c:727
msgid "Failed to open private chat"
msgstr "No s'ha pogut obrir un xat privat"
-#: ../libempathy-gtk/empathy-chat.c:786
+#: ../libempathy-gtk/empathy-chat.c:785
msgid "Topic not supported on this conversation"
msgstr "No es pot establir el tema en esta conversa"
-#: ../libempathy-gtk/empathy-chat.c:792
+#: ../libempathy-gtk/empathy-chat.c:791
msgid "You are not allowed to change the topic"
msgstr "No podeu canviar el tema"
-#: ../libempathy-gtk/empathy-chat.c:991
+#: ../libempathy-gtk/empathy-chat.c:990
#, c-format
msgid "“%s†is not a valid contact ID"
msgstr "«%s» no és un identificador de contacte vàlid"
-#: ../libempathy-gtk/empathy-chat.c:1086
+#: ../libempathy-gtk/empathy-chat.c:1085
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear: neteja tots els missatges de la conversa actual"
-#: ../libempathy-gtk/empathy-chat.c:1089
+#: ../libempathy-gtk/empathy-chat.c:1088
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <tema>: estableix el tema de la conversa actual"
-#: ../libempathy-gtk/empathy-chat.c:1092
+#: ../libempathy-gtk/empathy-chat.c:1091
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <ID sala de xat>: entra a una sala de xat nova"
-#: ../libempathy-gtk/empathy-chat.c:1095
+#: ../libempathy-gtk/empathy-chat.c:1094
msgid "/j <chat room ID>: join a new chat room"
msgstr "/j <ID sala de xat>: entra a una sala de xat nova"
-#: ../libempathy-gtk/empathy-chat.c:1099
+#: ../libempathy-gtk/empathy-chat.c:1098
msgid ""
"/part [<chat room ID>] [<reason>]: leave the chat room, by default the "
"current one"
@@ -1451,23 +1456,23 @@ msgstr ""
"/part [<identificador de la sala de xat>] [<motiu>]: eixiu de la sala de "
"xat, si no s'indica el contrari, l'actual"
-#: ../libempathy-gtk/empathy-chat.c:1103
+#: ../libempathy-gtk/empathy-chat.c:1102
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <ID d'un contacte> [missatge]: obri un xat privat"
-#: ../libempathy-gtk/empathy-chat.c:1106
+#: ../libempathy-gtk/empathy-chat.c:1105
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <ID d'un contacte> <missatge>: obri un xat privat"
-#: ../libempathy-gtk/empathy-chat.c:1109
+#: ../libempathy-gtk/empathy-chat.c:1108
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <sobrenom>: canvieu el vostre sobrenom en el servidor actual"
-#: ../libempathy-gtk/empathy-chat.c:1112
+#: ../libempathy-gtk/empathy-chat.c:1111
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <missatge>: envia un missatge d'ACCIÓ a la conversa actual"
-#: ../libempathy-gtk/empathy-chat.c:1115
+#: ../libempathy-gtk/empathy-chat.c:1114
msgid ""
"/say <message>: send <message> to the current conversation. This is used to "
"send a message starting with a '/'. For example: \"/say /join is used to "
@@ -1477,12 +1482,12 @@ msgstr ""
"enviar un missatge que comence per «/». Per exemple: «/say /join s'utilitza "
"per entrar a una sala de xat nova»"
-#: ../libempathy-gtk/empathy-chat.c:1120
+#: ../libempathy-gtk/empathy-chat.c:1119
msgid "/whois <contact ID>: display information about a contact"
msgstr ""
"/whois <identificador del contacte>: mostra informació sobre el contacte"
-#: ../libempathy-gtk/empathy-chat.c:1123
+#: ../libempathy-gtk/empathy-chat.c:1122
msgid ""
"/help [<command>]: show all supported commands. If <command> is defined, "
"show its usage."
@@ -1490,127 +1495,127 @@ msgstr ""
"/help [<orde>]: mostra totes les ordes possibles. Si s'indica una <orde> es "
"mostra com s'ha d'utilitzar."
-#: ../libempathy-gtk/empathy-chat.c:1142
+#: ../libempathy-gtk/empathy-chat.c:1141
#, c-format
msgid "Usage: %s"
msgstr "Forma d'ús: %s"
-#: ../libempathy-gtk/empathy-chat.c:1187
+#: ../libempathy-gtk/empathy-chat.c:1186
msgid "Unknown command"
msgstr "Orde desconeguda"
-#: ../libempathy-gtk/empathy-chat.c:1313
+#: ../libempathy-gtk/empathy-chat.c:1312
msgid "Unknown command; see /help for the available commands"
msgstr "Orde desconeguda, vegeu /help per a la llista d'ordes disponibles"
-#: ../libempathy-gtk/empathy-chat.c:1564
+#: ../libempathy-gtk/empathy-chat.c:1563
msgid "insufficient balance to send message"
msgstr "no hi ha prou saldo per enviar el missatge"
-#: ../libempathy-gtk/empathy-chat.c:1568 ../libempathy-gtk/empathy-chat.c:1582
-#: ../libempathy-gtk/empathy-chat.c:1645
+#: ../libempathy-gtk/empathy-chat.c:1567 ../libempathy-gtk/empathy-chat.c:1581
+#: ../libempathy-gtk/empathy-chat.c:1644
#, c-format
msgid "Error sending message '%s': %s"
msgstr "S'ha produït un error en enviar el missatge «%s»: %s"
-#: ../libempathy-gtk/empathy-chat.c:1570 ../libempathy-gtk/empathy-chat.c:1587
-#: ../libempathy-gtk/empathy-chat.c:1649
+#: ../libempathy-gtk/empathy-chat.c:1569 ../libempathy-gtk/empathy-chat.c:1586
+#: ../libempathy-gtk/empathy-chat.c:1648
#, c-format
msgid "Error sending message: %s"
msgstr "S'ha produït un error en enviar el missatge: %s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1576
+#: ../libempathy-gtk/empathy-chat.c:1575
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr ""
"no hi ha prou saldo per enviar el missatge. <a href='%s'>Recarrega</a>."
-#: ../libempathy-gtk/empathy-chat.c:1616
+#: ../libempathy-gtk/empathy-chat.c:1615
msgid "not capable"
msgstr "no es pot realitzar"
-#: ../libempathy-gtk/empathy-chat.c:1623
+#: ../libempathy-gtk/empathy-chat.c:1622
msgid "offline"
msgstr "desconnectat"
-#: ../libempathy-gtk/empathy-chat.c:1626
+#: ../libempathy-gtk/empathy-chat.c:1625
msgid "invalid contact"
msgstr "contacte no vàlid"
-#: ../libempathy-gtk/empathy-chat.c:1629
+#: ../libempathy-gtk/empathy-chat.c:1628
msgid "permission denied"
msgstr "s'ha denegat el permís"
-#: ../libempathy-gtk/empathy-chat.c:1632
+#: ../libempathy-gtk/empathy-chat.c:1631
msgid "too long message"
msgstr "el missatge és massa llarg"
-#: ../libempathy-gtk/empathy-chat.c:1635
+#: ../libempathy-gtk/empathy-chat.c:1634
msgid "not implemented"
msgstr "no implementat"
-#: ../libempathy-gtk/empathy-chat.c:1639
+#: ../libempathy-gtk/empathy-chat.c:1638
msgid "unknown"
msgstr "desconegut"
-#: ../libempathy-gtk/empathy-chat.c:1706 ../src/empathy-chat-window.c:920
+#: ../libempathy-gtk/empathy-chat.c:1705 ../src/empathy-chat-window.c:919
msgid "Topic:"
msgstr "Tema:"
-#: ../libempathy-gtk/empathy-chat.c:1721
+#: ../libempathy-gtk/empathy-chat.c:1720
#, c-format
msgid "Topic set to: %s"
msgstr "Tema establit a: %s"
-#: ../libempathy-gtk/empathy-chat.c:1723
+#: ../libempathy-gtk/empathy-chat.c:1722
#, c-format
msgid "Topic set by %s to: %s"
msgstr "Tema establit per %s a: %s"
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1728
+#: ../libempathy-gtk/empathy-chat.c:1727
msgid "No topic defined"
msgstr "No s'ha definit cap tema"
-#: ../libempathy-gtk/empathy-chat.c:2244
+#: ../libempathy-gtk/empathy-chat.c:2243
msgid "(No Suggestions)"
msgstr "(Cap suggeriment)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2312
+#: ../libempathy-gtk/empathy-chat.c:2311
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "Afig «%s» al diccionari"
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2349
+#: ../libempathy-gtk/empathy-chat.c:2348
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "Afig «%s» al diccionari %s"
-#: ../libempathy-gtk/empathy-chat.c:2419
+#: ../libempathy-gtk/empathy-chat.c:2418
msgid "Insert Smiley"
msgstr "Insereix una emoticona"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2437
+#: ../libempathy-gtk/empathy-chat.c:2436
#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "_Envia"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2494
+#: ../libempathy-gtk/empathy-chat.c:2493
msgid "_Spelling Suggestions"
msgstr "_Suggeriments d'ortografia"
-#: ../libempathy-gtk/empathy-chat.c:2583
+#: ../libempathy-gtk/empathy-chat.c:2582
msgid "Failed to retrieve recent logs"
msgstr "No s'han pogut recuperar els registres recents"
-#: ../libempathy-gtk/empathy-chat.c:2722
+#: ../libempathy-gtk/empathy-chat.c:2721
#, c-format
msgid "%s has disconnected"
msgstr "En/na %s s'ha desconnectat"
@@ -1618,12 +1623,12 @@ msgstr "En/na %s s'ha desconnectat"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2729
+#: ../libempathy-gtk/empathy-chat.c:2728
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "En/na %2$s ha expulsat en/na %1$s"
-#: ../libempathy-gtk/empathy-chat.c:2732
+#: ../libempathy-gtk/empathy-chat.c:2731
#, c-format
msgid "%s was kicked"
msgstr "S'ha expulsat en/na %s"
@@ -1631,17 +1636,17 @@ msgstr "S'ha expulsat en/na %s"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2740
+#: ../libempathy-gtk/empathy-chat.c:2739
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "En/na %2$s ha bandejat en/na %1$s"
-#: ../libempathy-gtk/empathy-chat.c:2743
+#: ../libempathy-gtk/empathy-chat.c:2742
#, c-format
msgid "%s was banned"
msgstr "s'ha bandejat en/na %s"
-#: ../libempathy-gtk/empathy-chat.c:2747
+#: ../libempathy-gtk/empathy-chat.c:2746
#, c-format
msgid "%s has left the room"
msgstr "En/na %s ha eixit de la sala"
@@ -1651,17 +1656,17 @@ msgstr "En/na %s ha eixit de la sala"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2756
+#: ../libempathy-gtk/empathy-chat.c:2755
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: ../libempathy-gtk/empathy-chat.c:2781
+#: ../libempathy-gtk/empathy-chat.c:2780
#, c-format
msgid "%s has joined the room"
msgstr "En/na %s ha entrat a la sala"
-#: ../libempathy-gtk/empathy-chat.c:2806
+#: ../libempathy-gtk/empathy-chat.c:2805
#, c-format
msgid "%s is now known as %s"
msgstr "En/na %s ara es diu %s"
@@ -1669,7 +1674,7 @@ msgstr "En/na %s ara es diu %s"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2993
+#: ../libempathy-gtk/empathy-chat.c:2992
#: ../src/empathy-streamed-media-window.c:1888
#: ../src/empathy-event-manager.c:1279 ../src/empathy-call-window.c:1466
#: ../src/empathy-call-window.c:1516 ../src/empathy-call-window.c:2562
@@ -1677,47 +1682,47 @@ msgid "Disconnected"
msgstr "Fora de línia"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3657
+#: ../libempathy-gtk/empathy-chat.c:3656
msgid "Would you like to store this password?"
msgstr "Voleu emmagatzemar esta contrasenya?"
-#: ../libempathy-gtk/empathy-chat.c:3663
+#: ../libempathy-gtk/empathy-chat.c:3662
msgid "Remember"
msgstr "Recorda-la"
-#: ../libempathy-gtk/empathy-chat.c:3673
+#: ../libempathy-gtk/empathy-chat.c:3672
msgid "Not now"
msgstr "Ara no"
-#: ../libempathy-gtk/empathy-chat.c:3717
+#: ../libempathy-gtk/empathy-chat.c:3716
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "Torna-ho a intentar"
-#: ../libempathy-gtk/empathy-chat.c:3721
+#: ../libempathy-gtk/empathy-chat.c:3720
msgid "Wrong password; please try again:"
msgstr "Contrasenya errònia, torneu-ho a intentar:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3851
+#: ../libempathy-gtk/empathy-chat.c:3850
msgid "This room is protected by a password:"
msgstr "Esta sala és protegida per una contrasenya:"
-#: ../libempathy-gtk/empathy-chat.c:3878
+#: ../libempathy-gtk/empathy-chat.c:3877
msgid "Join"
msgstr "Uneix-m'hi"
-#: ../libempathy-gtk/empathy-chat.c:4070 ../src/empathy-event-manager.c:1300
+#: ../libempathy-gtk/empathy-chat.c:4069 ../src/empathy-event-manager.c:1300
msgid "Connected"
msgstr "Connectat"
-#: ../libempathy-gtk/empathy-chat.c:4125
+#: ../libempathy-gtk/empathy-chat.c:4124
msgid "Conversation"
msgstr "Conversa"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4130
+#: ../libempathy-gtk/empathy-chat.c:4129
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
@@ -1844,133 +1849,133 @@ msgstr "El vostre missatge d'introducció:"
msgid "Please let me see when you're online. Thanks!"
msgstr "Permeta'm veure quan estàs en línia. Gràcies."
-#: ../libempathy-gtk/empathy-contact-widget.c:567
+#: ../libempathy-gtk/empathy-contact-widget.c:566
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "Canals:"
-#: ../libempathy-gtk/empathy-contact-widget.c:747
+#: ../libempathy-gtk/empathy-contact-widget.c:746
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "Codi ISO del país:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:748
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "País:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:750
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "Estat:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:752
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "Ciutat:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:754
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "Àrea:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:756
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "Codi postal:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:758
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "Carrer:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:760
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "Edifici:"
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:762
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "Planta:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:764
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "Habitació:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:766
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "Text:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:768
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "Descripció:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:770
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "URI:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:772
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "Nivell de precisió:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:774
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "Error:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:776
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "Error vertical (metres):"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:778
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "Error horitzontal (metres):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:780
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "Velocitat:"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:782
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "Direcció:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:784
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "Velocitat de pujada:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:786
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "Última actualització a:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:788
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "Longitud:"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:790
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "Latitud:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:792
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "Altitud:"
-#: ../libempathy-gtk/empathy-contact-widget.c:846
-#: ../libempathy-gtk/empathy-contact-widget.c:861
+#: ../libempathy-gtk/empathy-contact-widget.c:845
+#: ../libempathy-gtk/empathy-contact-widget.c:860
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
#: ../src/empathy-preferences.ui.h:35
@@ -1978,32 +1983,32 @@ msgid "Location"
msgstr "Ubicació"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:862
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s el %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:915
+#: ../libempathy-gtk/empathy-contact-widget.c:914
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "%e de %B de %Y a les %R UTC"
-#: ../libempathy-gtk/empathy-contact-widget.c:997
+#: ../libempathy-gtk/empathy-contact-widget.c:996
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "Alça l'avatar"
-#: ../libempathy-gtk/empathy-contact-widget.c:1053
+#: ../libempathy-gtk/empathy-contact-widget.c:1052
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "No s'ha pogut alçar l'avatar"
-#: ../libempathy-gtk/empathy-contact-widget.c:1455
+#: ../libempathy-gtk/empathy-contact-widget.c:1454
msgid "Personal Details"
msgstr "Dades personals"
-#: ../libempathy-gtk/empathy-contact-widget.c:1458
+#: ../libempathy-gtk/empathy-contact-widget.c:1457
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
@@ -2134,7 +2139,7 @@ msgid "Select"
msgstr "Seleccioneu"
#: ../libempathy-gtk/empathy-groups-widget.c:403
-#: ../src/empathy-roster-window.c:1970
+#: ../src/empathy-roster-window.c:1969
msgid "Group"
msgstr "Grup"
@@ -2162,109 +2167,110 @@ msgstr "Metacontactes"
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:173
+#: ../libempathy-gtk/empathy-individual-menu.c:172
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:345
+#: ../libempathy-gtk/empathy-individual-menu.c:344
msgid "Select account to use to place the call"
msgstr "Seleccioneu el compte amb el que voleu fer la trucada"
#. translators: Call is a noun. This string is used in the window
#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:349
+#: ../libempathy-gtk/empathy-individual-menu.c:348
#: ../libempathy-gtk/empathy-log-window.ui.h:6
#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:18
msgid "Call"
msgstr "Trucada"
-#: ../libempathy-gtk/empathy-individual-menu.c:414
+#: ../libempathy-gtk/empathy-individual-menu.c:413
msgid "Mobile"
msgstr "Mòbil"
-#: ../libempathy-gtk/empathy-individual-menu.c:416
+#: ../libempathy-gtk/empathy-individual-menu.c:415
msgid "Work"
msgstr "Faena"
-#: ../libempathy-gtk/empathy-individual-menu.c:418
+#: ../libempathy-gtk/empathy-individual-menu.c:417
msgid "HOME"
msgstr "Casa"
-#: ../libempathy-gtk/empathy-individual-menu.c:659
+#: ../libempathy-gtk/empathy-individual-menu.c:658
msgid "_Block Contact"
msgstr "_Bloca el contacte"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1018
+#: ../libempathy-gtk/empathy-individual-menu.c:1017
#: ../libempathy-gtk/empathy-new-message-dialog.c:319
#: ../src/empathy-roster-window-menubar.ui.h:1
msgid "_Chat"
msgstr "_Xat"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1053
+#: ../libempathy-gtk/empathy-individual-menu.c:1052
#: ../libempathy-gtk/empathy-new-message-dialog.c:313
msgid "_SMS"
msgstr "_SMS"
-#: ../libempathy-gtk/empathy-individual-menu.c:1086
+#: ../libempathy-gtk/empathy-individual-menu.c:1085
msgctxt "menu item"
msgid "_Audio Call"
msgstr "Trucada de _veu"
-#: ../libempathy-gtk/empathy-individual-menu.c:1119
+#: ../libempathy-gtk/empathy-individual-menu.c:1118
msgctxt "menu item"
msgid "_Video Call"
msgstr "_Trucada de vídeo"
-#: ../libempathy-gtk/empathy-individual-menu.c:1160
+#: ../libempathy-gtk/empathy-individual-menu.c:1159
#: ../src/empathy-roster-window-menubar.ui.h:4
msgid "_Previous Conversations"
msgstr "Converses _anteriors"
-#: ../libempathy-gtk/empathy-individual-menu.c:1189
+#: ../libempathy-gtk/empathy-individual-menu.c:1188
msgid "Send File"
msgstr "Envia un fitxer"
-#: ../libempathy-gtk/empathy-individual-menu.c:1219
+#: ../libempathy-gtk/empathy-individual-menu.c:1218
msgid "Share My Desktop"
msgstr "Comparteix el meu escriptori"
-#: ../libempathy-gtk/empathy-individual-menu.c:1245
+#: ../libempathy-gtk/empathy-individual-menu.c:1244
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "Preferit"
-#: ../libempathy-gtk/empathy-individual-menu.c:1264
+#: ../libempathy-gtk/empathy-individual-menu.c:1263
msgid "gnome-contacts not installed"
msgstr "El Contactes del GNOME no està instal·lat"
-#: ../libempathy-gtk/empathy-individual-menu.c:1267
+#: ../libempathy-gtk/empathy-individual-menu.c:1266
msgid "Please install gnome-contacts to access contacts details."
msgstr ""
"Instal·leu el Contactes del GNOME per accedir a les dades dels contactes."
-#: ../libempathy-gtk/empathy-individual-menu.c:1398
+#: ../libempathy-gtk/empathy-individual-menu.c:1397
msgid "Infor_mation"
msgstr "Infor_mació"
-#: ../libempathy-gtk/empathy-individual-menu.c:1447
+#: ../libempathy-gtk/empathy-individual-menu.c:1446
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "_Edita"
-#: ../libempathy-gtk/empathy-individual-menu.c:1564
-#: ../src/empathy-chat-window.c:1192
+#. send invitation
+#: ../libempathy-gtk/empathy-individual-menu.c:1562
+#: ../src/empathy-chat-window.c:1190
msgid "Inviting you to this room"
msgstr "Se vos està convidant a esta sala"
-#: ../libempathy-gtk/empathy-individual-menu.c:1610
+#: ../libempathy-gtk/empathy-individual-menu.c:1608
msgid "_Invite to Chat Room"
msgstr "_Convida a la sala de xat"
-#: ../libempathy-gtk/empathy-individual-menu.c:1806
+#: ../libempathy-gtk/empathy-individual-menu.c:1804
#: ../src/empathy-roster-window-menubar.ui.h:5
msgid "_Add Contact…"
msgstr "_Afig un contacte…"
@@ -2606,30 +2612,38 @@ msgstr ""
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:167
-#: ../libempathy-gtk/empathy-presence-chooser.c:203
+#: ../libempathy-gtk/empathy-presence-chooser.c:166
+#: ../libempathy-gtk/empathy-presence-chooser.c:202
msgid "Custom Message…"
msgstr "Missatge personalitzat…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:220
-#: ../libempathy-gtk/empathy-presence-chooser.c:222
+#: ../libempathy-gtk/empathy-presence-chooser.c:219
+#: ../libempathy-gtk/empathy-presence-chooser.c:221
msgid "Edit Custom Messages…"
msgstr "Edita els missatges personalitzats…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:345
+#: ../libempathy-gtk/empathy-presence-chooser.c:344
msgid "Click to remove this status as a favorite"
msgstr "Feu clic per suprimir este estat com a preferit"
-#: ../libempathy-gtk/empathy-presence-chooser.c:354
+#: ../libempathy-gtk/empathy-presence-chooser.c:353
msgid "Click to make this status a favorite"
msgstr "Feu clic per fer que este estat siga un preferit"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#. Translators: %s is a status message like 'At the pub' for example
+#: ../libempathy-gtk/empathy-presence-chooser.c:387
+#, c-format
+msgid ""
+"<b>Current message: %s</b>\n"
+"<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:396
msgid "Set status"
msgstr "Estableix l'estat"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1147
msgid "Custom messages…"
msgstr "Missatges personalitzats…"
@@ -3018,23 +3032,23 @@ msgstr "No hi ha missatge d'error"
msgid "Instant Message (Empathy)"
msgstr "Missatgeria instantània (Empathy)"
-#: ../src/empathy.c:435
+#: ../src/empathy.c:432
msgid "Don't connect on startup"
msgstr "No connectes en iniciar"
-#: ../src/empathy.c:439
+#: ../src/empathy.c:436
msgid "Don't display the contact list or any other dialogs on startup"
msgstr "No mostres la llista de contactes ni cap altre diàleg en iniciar"
-#: ../src/empathy.c:454
+#: ../src/empathy.c:451
msgid "- Empathy IM Client"
msgstr "- Client de missatgeria instantània Empathy"
-#: ../src/empathy.c:641
+#: ../src/empathy.c:627
msgid "Error contacting the Account Manager"
msgstr "S'ha produït un error en contactar amb el gestor de comptes"
-#: ../src/empathy.c:643
+#: ../src/empathy.c:629
#, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. "
@@ -3094,14 +3108,14 @@ msgstr ""
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:72
+#: ../src/empathy-accounts-dialog.c:71
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "Hi ha modificacions no alçades en el compte %s."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:76
+#: ../src/empathy-accounts-dialog.c:75
msgid "Your new account has not been saved yet."
msgstr "Encara no heu alçat el vostre compte nou."
@@ -3168,7 +3182,7 @@ msgstr "Voleu suprimir %s de l'ordinador?"
msgid "This will not remove your account on the server."
msgstr "Amb això no se suprimirà el vostre compte del servidor."
-#: ../src/empathy-accounts-dialog.c:1602
+#: ../src/empathy-accounts-dialog.c:1571
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3176,24 +3190,25 @@ msgstr ""
"Esteu a punt de seleccionar un altre compte i perdreu els\n"
"canvis fets fins ara. Segur que voleu continuar?"
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1779
-msgid "_Enable"
-msgstr "_Habilita"
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1762
+msgid "_Enabled"
+msgstr "_Habilitat"
-#: ../src/empathy-accounts-dialog.c:1780
-msgid "_Disable"
-msgstr "_Inhabilita"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1785
+msgid "Rename"
+msgstr "Reanomena"
-#: ../src/empathy-accounts-dialog.c:2221
+#: ../src/empathy-accounts-dialog.c:2201
msgid "_Skip"
msgstr "_Omet"
-#: ../src/empathy-accounts-dialog.c:2225
+#: ../src/empathy-accounts-dialog.c:2205
msgid "_Connect"
msgstr "_Connecta"
-#: ../src/empathy-accounts-dialog.c:2404
+#: ../src/empathy-accounts-dialog.c:2384
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3221,19 +3236,19 @@ msgstr ""
msgid "No protocol backends installed"
msgstr "No hi ha cap protocol de rerefons instal·lat"
-#: ../src/empathy-auth-client.c:288
+#: ../src/empathy-auth-client.c:286
msgid " - Empathy authentication client"
msgstr " - Client d'autenticació de l'Empathy"
-#: ../src/empathy-auth-client.c:304
+#: ../src/empathy-auth-client.c:302
msgid "Empathy authentication client"
msgstr "Client d'autenticació de l'Empathy"
-#: ../src/empathy-av.c:118 ../src/empathy-call.c:201
+#: ../src/empathy-av.c:115 ../src/empathy-call.c:198
msgid "- Empathy Audio/Video Client"
msgstr "- Client d'àudio/vídeo de l'Empathy"
-#: ../src/empathy-av.c:134 ../src/empathy-call.c:223
+#: ../src/empathy-av.c:131 ../src/empathy-call.c:220
msgid "Empathy Audio/Video Client"
msgstr "Client d'àudio/vídeo de l'Empathy"
@@ -3542,11 +3557,11 @@ msgstr "Candidat local:"
msgid "Audio"
msgstr "Àudio"
-#: ../src/empathy-chat-window.c:289
+#: ../src/empathy-chat-window.c:288
msgid "Close this window?"
msgstr "Voleu tancar esta finestra?"
-#: ../src/empathy-chat-window.c:294
+#: ../src/empathy-chat-window.c:293
#, c-format
msgid ""
"Closing this window will leave %s. You will not receive any further messages "
@@ -3555,7 +3570,7 @@ msgstr ""
"Si tanqueu la finestra eixireu de %s. No rebreu cap més missatge fins que no "
"hi torneu a entrar."
-#: ../src/empathy-chat-window.c:305
+#: ../src/empathy-chat-window.c:304
#, c-format
msgid ""
"Closing this window will leave a chat room. You will not receive any further "
@@ -3570,12 +3585,12 @@ msgstr[1] ""
"Si tanqueu la finestra eixireu de %u sales de xat. No rebreu més missatges "
"fins que no hi torneu a entrar."
-#: ../src/empathy-chat-window.c:314
+#: ../src/empathy-chat-window.c:313
#, c-format
msgid "Leave %s?"
msgstr "Voleu eixir de %s?"
-#: ../src/empathy-chat-window.c:315
+#: ../src/empathy-chat-window.c:314
msgid ""
"You will not receive any further messages from this chat room until you "
"rejoin it."
@@ -3583,54 +3598,54 @@ msgstr ""
"No rebreu cap més missatge d'esta sala de xat fins que no hi torneu a entrar-"
"hi."
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Close window"
msgstr "Tanca la finestra"
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Leave room"
msgstr "Ix de la sala"
-#: ../src/empathy-chat-window.c:640 ../src/empathy-chat-window.c:660
+#: ../src/empathy-chat-window.c:639 ../src/empathy-chat-window.c:659
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
msgstr[0] "%s (%d sense llegir)"
msgstr[1] "%s (%d sense llegir)"
-#: ../src/empathy-chat-window.c:652
+#: ../src/empathy-chat-window.c:651
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
msgstr[0] "%s (i %u altre)"
msgstr[1] "%s (i %u altres)"
-#: ../src/empathy-chat-window.c:668
+#: ../src/empathy-chat-window.c:667
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
msgstr[0] "%s (%d sense llegir d'altres)"
msgstr[1] "%s (%d sense llegir d'altres)"
-#: ../src/empathy-chat-window.c:677
+#: ../src/empathy-chat-window.c:676
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
msgstr[0] "%s (%d sense llegir de tots)"
msgstr[1] "%s (%d sense llegir de tots)"
-#: ../src/empathy-chat-window.c:892
+#: ../src/empathy-chat-window.c:891
msgid "SMS:"
msgstr "SMS:"
-#: ../src/empathy-chat-window.c:902
+#: ../src/empathy-chat-window.c:901
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
msgstr[0] "S'està enviant %d missatge"
msgstr[1] "S'estan enviant %d missatges"
-#: ../src/empathy-chat-window.c:924
+#: ../src/empathy-chat-window.c:923
msgid "Typing a message."
msgstr "S'està escrivint un missatge."
@@ -3790,7 +3805,7 @@ msgstr "Vos han convidat a entrar a %s"
msgid "Incoming file transfer from %s"
msgstr "Transferència de fitxers entrant d'en/na %s"
-#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:374
+#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:373
msgid "Password required"
msgstr "Cal la contrasenya"
@@ -3950,76 +3965,76 @@ msgstr "Protocol"
msgid "Source"
msgstr "Font"
-#: ../src/empathy-roster-window.c:391
+#: ../src/empathy-roster-window.c:390
msgid "Provide Password"
msgstr "Introduïu la contrasenya"
-#: ../src/empathy-roster-window.c:397
+#: ../src/empathy-roster-window.c:396
msgid "Disconnect"
msgstr "Desconnecta"
-#: ../src/empathy-roster-window.c:657
+#: ../src/empathy-roster-window.c:656
msgid "You need to setup an account to see contacts here."
msgstr "Heu de configurar un compte per veure'n els contactes ací."
-#: ../src/empathy-roster-window.c:673
+#: ../src/empathy-roster-window.c:672
msgid "No match found"
msgstr "No s'ha trobat cap coincidència"
-#: ../src/empathy-roster-window.c:783
+#: ../src/empathy-roster-window.c:782
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr ""
"No podeu utilitzar els comptes de %s fins que no actualitzeu el programari "
"de %s."
-#: ../src/empathy-roster-window.c:849
+#: ../src/empathy-roster-window.c:848
msgid "Update software..."
msgstr "Actualitza el programari..."
-#: ../src/empathy-roster-window.c:855 ../src/empathy-roster-window.c:972
+#: ../src/empathy-roster-window.c:854 ../src/empathy-roster-window.c:971
msgid "Close"
msgstr "Tanca"
-#: ../src/empathy-roster-window.c:960
+#: ../src/empathy-roster-window.c:959
msgid "Reconnect"
msgstr "Torna a connectar"
-#: ../src/empathy-roster-window.c:966
+#: ../src/empathy-roster-window.c:965
msgid "Edit Account"
msgstr "Edita el compte"
#. Translators: this string will be something like:
#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1110
+#: ../src/empathy-roster-window.c:1109
#, c-format
msgid "Top up %s (%s)..."
msgstr "Recarrega %s (%s)..."
-#: ../src/empathy-roster-window.c:1156
+#: ../src/empathy-roster-window.c:1155
msgid "Top up account credit"
msgstr "Recarrega el saldo del compte"
#. top up button
-#: ../src/empathy-roster-window.c:1228
+#: ../src/empathy-roster-window.c:1227
msgid "Top Up..."
msgstr "Recarrega..."
-#: ../src/empathy-roster-window.c:1952
+#: ../src/empathy-roster-window.c:1951
msgid "Contact"
msgstr "Contacte"
-#: ../src/empathy-roster-window.c:2150
+#: ../src/empathy-roster-window.c:2149
msgid "You need to enable one of your accounts to see contacts here."
msgstr "Heu d'habilitar com a mínim un compte per veure contactes ací."
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2158
+#: ../src/empathy-roster-window.c:2157
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr "Heu d'habilitar %s per veure contactes ací."
-#: ../src/empathy-roster-window.c:2460
+#: ../src/empathy-roster-window.c:2459
msgid "Contact List"
msgstr "Llista de contactes"
@@ -4570,16 +4585,16 @@ msgstr ""
"El gestor de connexions seleccionat no permet utilitzar l'extensió de "
"depuració remota."
-#: ../src/empathy-invite-participant-dialog.c:202
-#: ../src/empathy-invite-participant-dialog.c:230
+#: ../src/empathy-invite-participant-dialog.c:200
+#: ../src/empathy-invite-participant-dialog.c:228
msgid "Invite Participant"
msgstr "Convida un participant"
-#: ../src/empathy-invite-participant-dialog.c:203
+#: ../src/empathy-invite-participant-dialog.c:201
msgid "Choose a contact to invite into the conversation:"
msgstr "Seleccioneu un contacte per convidar-lo a la conversa:"
-#: ../src/empathy-invite-participant-dialog.c:226
+#: ../src/empathy-invite-participant-dialog.c:224
msgid "Invite"
msgstr "Convida"
@@ -4606,7 +4621,7 @@ msgstr "<identificador-del-compte>"
msgid "- Empathy Accounts"
msgstr "- Comptes de l'Empathy"
-#: ../src/empathy-accounts.c:231
+#: ../src/empathy-accounts.c:230
msgid "Empathy Accounts"
msgstr "Comptes de l'Empathy"
@@ -4618,11 +4633,11 @@ msgstr "Mostra un servei en concret"
msgid "- Empathy Debugger"
msgstr "- Depurador de l'Empathy"
-#: ../src/empathy-debugger.c:113
+#: ../src/empathy-debugger.c:112
msgid "Empathy Debugger"
msgstr "Depurador de l'Empathy"
-#: ../src/empathy-chat.c:109
+#: ../src/empathy-chat.c:106
msgid "- Empathy Chat Client"
msgstr "- Client de xat Empathy"
@@ -4739,6 +4754,12 @@ msgstr ""
"seleccioneu <span style=\"italic\">Edita → Comptes</span> a la llista de "
"contactes."
+#~ msgid "_Enable"
+#~ msgstr "_Habilita"
+
+#~ msgid "_Disable"
+#~ msgstr "_Inhabilita"
+
#~ msgid "%s"
#~ msgstr "%s"
@@ -5012,9 +5033,6 @@ msgstr ""
#~ msgid "All"
#~ msgstr "Tots"
-#~ msgid "_Enabled"
-#~ msgstr "_Habilitat"
-
#~ msgid "Date"
#~ msgstr "Data"
@@ -5650,9 +5668,6 @@ msgstr ""
#~ msgid "Re_name"
#~ msgstr "Rea_nomena"
-#~ msgid "Rename"
-#~ msgstr "Reanomena"
-
#~ msgid "Edit the groups and name for this contact"
#~ msgstr "Edita els grups i nom per a aquest contacte"
diff --git a/po/en_CA.po b/po/en_CA.po
index 2d3d810d5..ee8da8ca3 100644
--- a/po/en_CA.po
+++ b/po/en_CA.po
@@ -7,17 +7,18 @@
msgid ""
msgstr ""
"Project-Id-Version: Empathy\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
-"product=empathy&keywords=I18N+L10N&component=General\n"
-"POT-Creation-Date: 2012-02-08 15:44+0000\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empath"
+"y&keywords=I18N+L10N&component=General\n"
+"POT-Creation-Date: 2012-04-02 17:52+0000\n"
"PO-Revision-Date: 2012-02-08 19:16-0500\n"
"Last-Translator: Tiffany Antopolski <tiffany.antopolski@gmail.com>\n"
"Language-Team: Canadian English\n"
+"Language: en_CA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: en_CA\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-DamnedLies-Scope: partial\n"
#: ../data/empathy.desktop.in.in.h:1
msgid "Empathy"
@@ -35,6 +36,16 @@ msgstr "Empathy Internet Messaging"
msgid "Chat on Google Talk, Facebook, MSN and many other chat services"
msgstr "Chat on Google Talk, Facebook, MSN and many other chat services"
+#. Tweak the dialog
+#: ../data/empathy-accounts.desktop.in.in.h:1
+#: ../src/empathy-accounts-dialog.c:2550
+msgid "Messaging and VoIP Accounts"
+msgstr "Messaging and VoIP Accounts"
+
+#: ../data/empathy-accounts.desktop.in.in.h:2
+msgid "Manage Messaging and VoIP accounts"
+msgstr "Manage Messaging and VoIP accounts"
+
#: ../data/org.gnome.Empathy.gschema.xml.in.h:1
msgid "Connection managers should be used"
msgstr "Connection managers should be used"
@@ -74,77 +85,77 @@ msgstr "Empathy default download folder"
msgid "The default folder to save file transfers in."
msgstr "The default folder to save file transfers in."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:9
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
msgid "Show offline contacts"
msgstr "Show offline contacts"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:10
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
msgid "Whether to show contacts that are offline in the contact list."
msgstr "Whether to show contacts that are offline in the contact list."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:11
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
msgid "Show avatars"
msgstr "Show avatars"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
msgid ""
"Whether to show avatars for contacts in the contact list and chat windows."
msgstr ""
"Whether to show avatars for contacts in the contact list and chat windows."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
msgid "Show protocols"
msgstr "Show protocols"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
msgid "Whether to show protocols for contacts in the contact list."
msgstr "Whether to show protocols for contacts in the contact list."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
msgid "Show Balance in contact list"
msgstr "Show Balance in contact list"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
msgid "Whether to show account balances in the contact list."
msgstr "Whether to show account balances in the contact list."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
msgid "Compact contact list"
msgstr "Compact contact list"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
msgid "Whether to show the contact list in compact mode."
msgstr "Whether to show the contact list in compact mode."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
msgid "Hide main window"
msgstr "Hide main window"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
msgid "Hide the main window."
msgstr "Hide the main window."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
msgid "Default directory to select an avatar image from"
msgstr "Default directory to select an avatar image from"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
msgid "The last directory that an avatar image was chosen from."
msgstr "The last directory that an avatar image was chosen from."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
msgid "Open new chats in separate windows"
msgstr "Open new chats in separate windows"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
msgid "Always open a separate chat window for new chats."
msgstr "Always open a separate chat window for new chats."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
msgid "Display incoming events in the status area"
msgstr "Display incoming events in the status area"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
msgid ""
"Display incoming events in the status area. If false, present them to the "
"user immediately."
@@ -152,19 +163,31 @@ msgstr ""
"Display incoming events in the status area. If false, present them to the "
"user immediately."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
msgid "The position for the chat window side pane"
msgstr "The position for the chat window side pane"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
msgid "The stored position (in pixels) of the chat window side pane."
msgstr "The stored position (in pixels) of the chat window side pane."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
+#, fuzzy
+#| msgid "Show contact list in rooms"
+msgid "Show contact groups"
+msgstr "Show contact list in rooms"
+
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
+#, fuzzy
+#| msgid "Whether to show account balances in the contact list."
+msgid "Whether to show groups in the contact list."
+msgstr "Whether to show account balances in the contact list."
+
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
msgid "Contact list sort criterion"
msgstr "Contact list sort criterion"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
msgid ""
"Which criterion to use when sorting the contact list. Default is to sort by "
"the contact's state with the value \"state\". A value of \"name\" will sort "
@@ -174,102 +197,102 @@ msgstr ""
"the contact's state with the value \"state\". A value of \"name\" will sort "
"the contact list by name."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
msgid "Use notification sounds"
msgstr "Use notification sounds"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
msgid "Whether to play a sound to notify of events."
msgstr "Whether to play a sound to notify of events."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
msgid "Disable sounds when away"
msgstr "Disable sounds when away"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
msgid "Whether to play sound notifications when away or busy."
msgstr "Whether to play sound notifications when away or busy."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
msgid "Play a sound for incoming messages"
msgstr "Play a sound for incoming messages"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
msgid "Whether to play a sound to notify of incoming messages."
msgstr "Whether to play a sound to notify of incoming messages."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
msgid "Play a sound for outgoing messages"
msgstr "Play a sound for outgoing messages"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
msgid "Whether to play a sound to notify of outgoing messages."
msgstr "Whether to play a sound to notify of outgoing messages."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
msgid "Play a sound for new conversations"
msgstr "Play a sound for new conversations"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
msgid "Whether to play a sound to notify of new conversations."
msgstr "Whether to play a sound to notify of new conversations."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
msgid "Play a sound when a contact logs in"
msgstr "Play a sound when a contact logs in"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
msgid "Whether to play a sound to notify of contacts logging into the network."
msgstr ""
"Whether to play a sound to notify of contacts logging into the network."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
msgid "Play a sound when a contact logs out"
msgstr "Play a sound when a contact logs out"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
msgid ""
"Whether to play a sound to notify of contacts logging out of the network."
msgstr ""
"Whether to play a sound to notify of contacts logging out of the network."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
msgid "Play a sound when we log in"
msgstr "Play a sound when we log in"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
msgid "Whether to play a sound when logging into a network."
msgstr "Whether to play a sound when logging into a network."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
msgid "Play a sound when we log out"
msgstr "Play a sound when we log out"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
msgid "Whether to play a sound when logging out of a network."
msgstr "Whether to play a sound when logging out of a network."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
msgid "Enable popup notifications for new messages"
msgstr "Enable popup notifications for new messages"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
msgid "Whether to show a popup notification when receiving a new message."
msgstr "Whether to show a popup notification when receiving a new message."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
msgid "Disable popup notifications when away"
msgstr "Disable popup notifications when away"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
msgid "Whether to show popup notifications when away or busy."
msgstr "Whether to show popup notifications when away or busy."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
msgid "Pop up notifications if the chat isn't focused"
msgstr "Pop up notifications if the chat isn't focused"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
msgid ""
"Whether to show a popup notification when receiving a new message even if "
"the chat is already opened, but not focused."
@@ -277,107 +300,107 @@ msgstr ""
"Whether to show a popup notification when receiving a new message even if "
"the chat is already opened, but not focused."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
msgid "Pop up notifications when a contact logs in"
msgstr "Pop up notifications when a contact logs in"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
msgid "Whether to show a popup notification when a contact goes online."
msgstr "Whether to show a popup notification when a contact goes online."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
msgid "Pop up notifications when a contact logs out"
msgstr "Pop up notifications when a contact logs out"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
msgid "Whether to show a popup notification when a contact goes offline."
msgstr "Whether to show a popup notification when a contact goes offline."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
msgid "Use graphical smileys"
msgstr "Use graphical smileys"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
msgid "Whether to convert smileys into graphical images in conversations."
msgstr "Whether to convert smileys into graphical images in conversations."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
msgid "Show contact list in rooms"
msgstr "Show contact list in rooms"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
msgid "Whether to show the contact list in chat rooms."
msgstr "Whether to show the contact list in chat rooms."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
msgid "Chat window theme"
msgstr "Chat window theme"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
msgid "The theme that is used to display the conversation in chat windows."
msgstr "The theme that is used to display the conversation in chat windows."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
msgid "Chat window theme variant"
msgstr "Chat window theme variant"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
msgid ""
"The theme variant that is used to display the conversation in chat windows."
msgstr ""
"The theme variant that is used to display the conversation in chat windows."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
msgid "Path of the Adium theme to use"
msgstr "Path of the Adium theme to use"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:73
msgid "Path of the Adium theme to use if the theme used for chat is Adium."
msgstr "Path of the Adium theme to use if the theme used for chat is Adium."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
msgid "Enable WebKit Developer Tools"
msgstr "Enable WebKit Developer Tools"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:75
msgid ""
"Whether WebKit developer tools, such as the Web Inspector, should be enabled."
msgstr ""
"Whether WebKit developer tools, such as the Web Inspector, should be enabled."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
msgid "Use theme for chat rooms"
msgstr "Use theme for chat rooms"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
msgid "Whether to use the theme for chat rooms."
msgstr "Whether to use the theme for chat rooms."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:73
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:80
msgid "Spell checking languages"
msgstr "Spell checking languages"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
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/org.gnome.Empathy.gschema.xml.in.h:75
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
msgid "Enable spell checker"
msgstr "Enable spell checker"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:76
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
msgid ""
"Whether to check words typed against the languages you want to check with."
msgstr ""
"Whether to check words typed against the languages you want to check with."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:77
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:84
msgid "Nick completed character"
msgstr "Nick completed character"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
msgid ""
"Character to add after nickname when using nick completion (tab) in group "
"chat."
@@ -385,53 +408,53 @@ msgstr ""
"Character to add after nickname when using nick completion (tab) in group "
"chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
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/org.gnome.Empathy.gschema.xml.in.h:80
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:87
msgid ""
"Whether Empathy should use the avatar of the contact as the chat window icon."
msgstr ""
"Whether Empathy should use the avatar of the contact as the chat window icon."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:88
msgid "Last account selected in Join Room dialog"
msgstr "Last account selected in Join Room dialog"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
msgid "D-Bus object path of the last account selected to join a room."
msgstr "D-Bus object path of the last account selected to join a room."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
msgid "Camera device"
msgstr "Camera device"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:84
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
msgid "Default camera device to use in video calls, e.g. /dev/video0."
msgstr "Default camera device to use in video calls, e.g. /dev/video0."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
msgid "Camera position"
msgstr "Camera position"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
msgid "Position the camera preview should be during a call."
msgstr "Position the camera preview should be during a call."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:87
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
msgid "Echo cancellation support"
-msgstr "Echo cancellllation support"
+msgstr "Echo cancellation support"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:88
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
msgid "Whether to enable Pulseaudio's echo cancellation filter."
-msgstr "Whether to enable Pulseaudio's echo cancellllation filter."
+msgstr "Whether to enable Pulseaudio's echo cancellation filter."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
msgid "Show hint about closing the main window"
msgstr "Show hint about closing the main window"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
msgid ""
"Whether to show the message dialog about closing the main window with the "
"'x' button in the title bar."
@@ -439,103 +462,93 @@ msgstr ""
"Whether to show the message dialog about closing the main window with the "
"'x' button in the title bar."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
msgid "Empathy can publish the user's location"
msgstr "Empathy can publish the user's location"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
msgid "Whether Empathy can publish the user's location to their contacts."
msgstr "Whether Empathy can publish the user's location to their contacts."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
msgid "Empathy can use the network to guess the location"
msgstr "Empathy can use the network to guess the location"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:101
msgid "Whether Empathy can use the network to guess the location."
msgstr "Whether Empathy can use the network to guess the location."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:102
msgid "Empathy can use the cellular network to guess the location"
msgstr "Empathy can use the cellular network to guess the location"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:103
msgid "Whether Empathy can use the cellular network to guess the location."
msgstr "Whether Empathy can use the cellular network to guess the location."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:104
msgid "Empathy can use the GPS to guess the location"
msgstr "Empathy can use the GPS to guess the location"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:105
msgid "Whether Empathy can use the GPS to guess the location."
msgstr "Whether Empathy can use the GPS to guess the location."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:106
msgid "Empathy should reduce the location's accuracy"
msgstr "Empathy should reduce the location's accuracy"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:107
msgid ""
"Whether Empathy should reduce the location's accuracy for privacy reasons."
msgstr ""
"Whether Empathy should reduce the location's accuracy for privacy reasons."
-#. Tweak the dialog
-#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2327
-msgid "Messaging and VoIP Accounts"
-msgstr "Messaging and VoIP Accounts"
-
-#: ../data/empathy-accounts.desktop.in.in.h:2
-msgid "Manage Messaging and VoIP accounts"
-msgstr "Manage Messaging and VoIP accounts"
-
-#: ../libempathy/empathy-ft-handler.c:736
+#: ../libempathy/empathy-ft-handler.c:738
msgid "No reason was specified"
msgstr "No reason was specified"
-#: ../libempathy/empathy-ft-handler.c:739
+#: ../libempathy/empathy-ft-handler.c:741
msgid "The change in state was requested"
msgstr "The change in state was requested"
-#: ../libempathy/empathy-ft-handler.c:742
+#: ../libempathy/empathy-ft-handler.c:744
msgid "You canceled the file transfer"
-msgstr "You cancellled the file transfer"
+msgstr "You cancelled the file transfer"
-#: ../libempathy/empathy-ft-handler.c:745
+#: ../libempathy/empathy-ft-handler.c:747
msgid "The other participant canceled the file transfer"
-msgstr "The other participant cancellled the file transfer"
+msgstr "The other participant cancelled the file transfer"
-#: ../libempathy/empathy-ft-handler.c:748
+#: ../libempathy/empathy-ft-handler.c:750
msgid "Error while trying to transfer the file"
msgstr "Error while trying to transfer the file"
-#: ../libempathy/empathy-ft-handler.c:751
+#: ../libempathy/empathy-ft-handler.c:753
msgid "The other participant is unable to transfer the file"
msgstr "The other participant is unable to transfer the file"
-#: ../libempathy/empathy-ft-handler.c:754 ../libempathy/empathy-utils.c:313
+#: ../libempathy/empathy-ft-handler.c:756 ../libempathy/empathy-utils.c:313
msgid "Unknown reason"
msgstr "Unknown reason"
-#: ../libempathy/empathy-ft-handler.c:917
+#: ../libempathy/empathy-ft-handler.c:919
msgid "File transfer completed, but the file was corrupted"
msgstr "File transfer completed, but the file was corrupted"
-#: ../libempathy/empathy-ft-handler.c:1203
+#: ../libempathy/empathy-ft-handler.c:1205
msgid "File transfer not supported by remote contact"
msgstr "File transfer not supported by remote contact"
-#: ../libempathy/empathy-ft-handler.c:1259
+#: ../libempathy/empathy-ft-handler.c:1261
msgid "The selected file is not a regular file"
msgstr "The selected file is not a regular file"
-#: ../libempathy/empathy-ft-handler.c:1268
+#: ../libempathy/empathy-ft-handler.c:1270
msgid "The selected file is empty"
msgstr "The selected file is empty"
-#: ../libempathy/empathy-message.c:415 ../src/empathy-call-observer.c:131
+#: ../libempathy/empathy-message.c:415 ../src/empathy-call-observer.c:129
#, c-format
msgid "Missed call from %s"
msgstr "Missed call from %s"
@@ -586,7 +599,7 @@ msgid "Status is set to offline"
msgstr "Status is set to offline"
#: ../libempathy/empathy-utils.c:289 ../libempathy/empathy-utils.c:323
-#: ../libempathy-gtk/empathy-call-utils.c:49
+#: ../libempathy-gtk/empathy-call-utils.c:47
#: ../libempathy-gtk/empathy-new-message-dialog.c:81
msgid "Network error"
msgstr "Network error"
@@ -761,12 +774,28 @@ msgstr[1] "%d months ago"
msgid "in the future"
msgstr "in the future"
+#: ../libempathy/empathy-keyring.c:75
+#, fuzzy
+#| msgid "Phrase not found"
+msgid "Password not found"
+msgstr "Phrase not found"
+
+#: ../libempathy/empathy-keyring.c:218
+#, c-format
+msgid "IM account password for %s (%s)"
+msgstr ""
+
+#: ../libempathy/empathy-keyring.c:253
+#, c-format
+msgid "Password for chatroom '%s' on account %s (%s)"
+msgstr ""
+
#: ../libempathy-gtk/empathy-account-chooser.c:692
msgid "All accounts"
msgstr "All accounts"
#: ../libempathy-gtk/empathy-account-widget.c:682
-#: ../src/empathy-import-widget.c:335
+#: ../src/empathy-import-widget.c:323
msgid "Account"
msgstr "Account"
@@ -775,12 +804,12 @@ msgid "Password"
msgstr "Password"
#: ../libempathy-gtk/empathy-account-widget.c:684
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:507
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:511
msgid "Server"
msgstr "Server"
#: ../libempathy-gtk/empathy-account-widget.c:685
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:522
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:529
msgid "Port"
msgstr "Port"
@@ -791,7 +820,7 @@ msgid "%s:"
msgstr "%s:"
#: ../libempathy-gtk/empathy-account-widget.c:1398
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
msgid "Username:"
msgstr "Username:"
@@ -884,7 +913,7 @@ msgstr "_Server:"
#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1
#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
@@ -950,36 +979,32 @@ msgstr "What is your ICQ UIN?"
msgid "What is your ICQ password?"
msgstr "What is your ICQ password?"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:206
-#: ../libempathy-gtk/empathy-account-widget-sip.c:239
+#: ../libempathy-gtk/empathy-account-widget-sip.c:205
+#: ../libempathy-gtk/empathy-account-widget-sip.c:238
msgid "Auto"
msgstr "Auto"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:209
+#: ../libempathy-gtk/empathy-account-widget-sip.c:208
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:212
+#: ../libempathy-gtk/empathy-account-widget-sip.c:211
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:215
+#: ../libempathy-gtk/empathy-account-widget-sip.c:214
msgid "TLS"
msgstr "TLS"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:244
+#: ../libempathy-gtk/empathy-account-widget-sip.c:243
msgid "Register"
msgstr "Register"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:249
+#: ../libempathy-gtk/empathy-account-widget-sip.c:248
msgid "Options"
msgstr "Options"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:252
+#: ../libempathy-gtk/empathy-account-widget-sip.c:251
msgid "None"
msgstr "None"
@@ -996,10 +1021,35 @@ msgid "Character set:"
msgstr "Character set:"
#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4
+#: ../src/empathy-accounts-dialog.ui.h:1
+msgid "Add…"
+msgstr "Add…"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:3
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1
+#: ../src/empathy-accounts-dialog.ui.h:2
+#: ../src/empathy-chatrooms-window.ui.h:3
+msgid "Remove"
+msgstr "Remove"
+
+#. Translators: tooltip on a 'Go Up' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
+msgid "Up"
+msgstr ""
+
+#. Translators: tooltip on a 'Go Down' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
+#, fuzzy
+#| msgid "Domain"
+msgid "Down"
+msgstr "Domain"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
msgid "Servers"
msgstr "Servers"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
msgid ""
"Most IRC servers don't need a password, so if you're not sure, don't enter a "
"password."
@@ -1007,27 +1057,27 @@ msgstr ""
"Most IRC servers don't need a password, so if you're not sure, don't enter a "
"password."
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
msgid "Nickname:"
msgstr "Nickname:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
msgid "Password:"
msgstr "Password:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
msgid "Quit message:"
msgstr "Quit message:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
msgid "Real name:"
msgstr "Real name:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:18
msgid "Which IRC network?"
msgstr "Which IRC network?"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:19
msgid "What is your IRC nickname?"
msgstr "What is your IRC nickname?"
@@ -1282,65 +1332,65 @@ msgstr "All Files"
msgid "Click to enlarge"
msgstr "Click to enlarge"
-#: ../libempathy-gtk/empathy-call-utils.c:44
-#: ../libempathy-gtk/empathy-call-utils.c:62
+#: ../libempathy-gtk/empathy-call-utils.c:42
+#: ../libempathy-gtk/empathy-call-utils.c:60
msgid "There was an error starting the call"
msgstr "There was an error starting the call"
-#: ../libempathy-gtk/empathy-call-utils.c:51
+#: ../libempathy-gtk/empathy-call-utils.c:49
msgid "The specified contact doesn't support calls"
msgstr "The specified contact doesn't support calls"
-#: ../libempathy-gtk/empathy-call-utils.c:53
+#: ../libempathy-gtk/empathy-call-utils.c:51
msgid "The specified contact is offline"
msgstr "The specified contact is offline"
-#: ../libempathy-gtk/empathy-call-utils.c:55
+#: ../libempathy-gtk/empathy-call-utils.c:53
msgid "The specified contact is not valid"
msgstr "The specified contact is not valid"
-#: ../libempathy-gtk/empathy-call-utils.c:57
+#: ../libempathy-gtk/empathy-call-utils.c:55
msgid "Emergency calls are not supported on this protocol"
msgstr "Emergency calls are not supported on this protocol"
-#: ../libempathy-gtk/empathy-call-utils.c:59
+#: ../libempathy-gtk/empathy-call-utils.c:57
msgid "You don't have enough credit in order to place this call"
msgstr "You don't have enough credit in order to place this call"
-#: ../libempathy-gtk/empathy-chat.c:710
+#: ../libempathy-gtk/empathy-chat.c:729
msgid "Failed to open private chat"
msgstr "Failed to open private chat"
-#: ../libempathy-gtk/empathy-chat.c:768
+#: ../libempathy-gtk/empathy-chat.c:787
msgid "Topic not supported on this conversation"
msgstr "Topic not supported on this conversation"
-#: ../libempathy-gtk/empathy-chat.c:774
+#: ../libempathy-gtk/empathy-chat.c:793
msgid "You are not allowed to change the topic"
msgstr "You are not allowed to change the topic"
-#: ../libempathy-gtk/empathy-chat.c:973
+#: ../libempathy-gtk/empathy-chat.c:992
#, c-format
msgid "“%s†is not a valid contact ID"
msgstr "“%s†is not a valid contact ID"
-#: ../libempathy-gtk/empathy-chat.c:1068
+#: ../libempathy-gtk/empathy-chat.c:1087
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear: clear all messages from the current conversation"
-#: ../libempathy-gtk/empathy-chat.c:1071
+#: ../libempathy-gtk/empathy-chat.c:1090
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <topic>: set the topic of the current conversation"
-#: ../libempathy-gtk/empathy-chat.c:1074
+#: ../libempathy-gtk/empathy-chat.c:1093
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <chat room ID>: join a new chat room"
-#: ../libempathy-gtk/empathy-chat.c:1077
+#: ../libempathy-gtk/empathy-chat.c:1096
msgid "/j <chat room ID>: join a new chat room"
msgstr "/j <chat room ID>: join a new chat room"
-#: ../libempathy-gtk/empathy-chat.c:1081
+#: ../libempathy-gtk/empathy-chat.c:1100
msgid ""
"/part [<chat room ID>] [<reason>]: leave the chat room, by default the "
"current one"
@@ -1348,23 +1398,23 @@ msgstr ""
"/part [<chat room ID>] [<reason>]: leave the chat room, by default the "
"current one"
-#: ../libempathy-gtk/empathy-chat.c:1085
+#: ../libempathy-gtk/empathy-chat.c:1104
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <contact ID> [<message>]: open a private chat"
-#: ../libempathy-gtk/empathy-chat.c:1088
+#: ../libempathy-gtk/empathy-chat.c:1107
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <contact ID> <message>: open a private chat"
-#: ../libempathy-gtk/empathy-chat.c:1091
+#: ../libempathy-gtk/empathy-chat.c:1110
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <nickname>: change your nickname on the current server"
-#: ../libempathy-gtk/empathy-chat.c:1094
+#: ../libempathy-gtk/empathy-chat.c:1113
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <message>: send an ACTION message to the current conversation"
-#: ../libempathy-gtk/empathy-chat.c:1097
+#: ../libempathy-gtk/empathy-chat.c:1116
msgid ""
"/say <message>: send <message> to the current conversation. This is used to "
"send a message starting with a '/'. For example: \"/say /join is used to "
@@ -1374,11 +1424,11 @@ msgstr ""
"send a message starting with a '/'. For example: \"/say /join is used to "
"join a new chat room\""
-#: ../libempathy-gtk/empathy-chat.c:1102
+#: ../libempathy-gtk/empathy-chat.c:1121
msgid "/whois <contact ID>: display information about a contact"
msgstr "/whois <contact ID>: display information about a contact"
-#: ../libempathy-gtk/empathy-chat.c:1105
+#: ../libempathy-gtk/empathy-chat.c:1124
msgid ""
"/help [<command>]: show all supported commands. If <command> is defined, "
"show its usage."
@@ -1386,126 +1436,126 @@ msgstr ""
"/help [<command>]: show all supported commands. If <command> is defined, "
"show its usage."
-#: ../libempathy-gtk/empathy-chat.c:1124
+#: ../libempathy-gtk/empathy-chat.c:1143
#, c-format
msgid "Usage: %s"
msgstr "Usage: %s"
-#: ../libempathy-gtk/empathy-chat.c:1169
+#: ../libempathy-gtk/empathy-chat.c:1188
msgid "Unknown command"
msgstr "Unknown command"
-#: ../libempathy-gtk/empathy-chat.c:1295
+#: ../libempathy-gtk/empathy-chat.c:1314
msgid "Unknown command; see /help for the available commands"
msgstr "Unknown command; see /help for the available commands"
-#: ../libempathy-gtk/empathy-chat.c:1541
+#: ../libempathy-gtk/empathy-chat.c:1565
msgid "insufficient balance to send message"
msgstr "insufficient balance to send message"
-#: ../libempathy-gtk/empathy-chat.c:1545 ../libempathy-gtk/empathy-chat.c:1559
-#: ../libempathy-gtk/empathy-chat.c:1622
+#: ../libempathy-gtk/empathy-chat.c:1569 ../libempathy-gtk/empathy-chat.c:1583
+#: ../libempathy-gtk/empathy-chat.c:1646
#, c-format
msgid "Error sending message '%s': %s"
msgstr "Error sending message '%s': %s"
-#: ../libempathy-gtk/empathy-chat.c:1547 ../libempathy-gtk/empathy-chat.c:1564
-#: ../libempathy-gtk/empathy-chat.c:1626
+#: ../libempathy-gtk/empathy-chat.c:1571 ../libempathy-gtk/empathy-chat.c:1588
+#: ../libempathy-gtk/empathy-chat.c:1650
#, c-format
msgid "Error sending message: %s"
msgstr "Error sending message: %s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1553
+#: ../libempathy-gtk/empathy-chat.c:1577
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr "insufficient balance to send message. <a href='%s'>Top up</a>."
-#: ../libempathy-gtk/empathy-chat.c:1593
+#: ../libempathy-gtk/empathy-chat.c:1617
msgid "not capable"
msgstr "not capable"
-#: ../libempathy-gtk/empathy-chat.c:1600
+#: ../libempathy-gtk/empathy-chat.c:1624
msgid "offline"
msgstr "offline"
-#: ../libempathy-gtk/empathy-chat.c:1603
+#: ../libempathy-gtk/empathy-chat.c:1627
msgid "invalid contact"
msgstr "invalid contact"
-#: ../libempathy-gtk/empathy-chat.c:1606
+#: ../libempathy-gtk/empathy-chat.c:1630
msgid "permission denied"
msgstr "permission denied"
-#: ../libempathy-gtk/empathy-chat.c:1609
+#: ../libempathy-gtk/empathy-chat.c:1633
msgid "too long message"
msgstr "too long message"
-#: ../libempathy-gtk/empathy-chat.c:1612
+#: ../libempathy-gtk/empathy-chat.c:1636
msgid "not implemented"
msgstr "not implemented"
-#: ../libempathy-gtk/empathy-chat.c:1616
+#: ../libempathy-gtk/empathy-chat.c:1640
msgid "unknown"
msgstr "unknown"
-#: ../libempathy-gtk/empathy-chat.c:1683 ../src/empathy-chat-window.c:916
+#: ../libempathy-gtk/empathy-chat.c:1707 ../src/empathy-chat-window.c:920
msgid "Topic:"
msgstr "Topic:"
-#: ../libempathy-gtk/empathy-chat.c:1698
+#: ../libempathy-gtk/empathy-chat.c:1722
#, c-format
msgid "Topic set to: %s"
msgstr "Topic set to: %s"
-#: ../libempathy-gtk/empathy-chat.c:1700
+#: ../libempathy-gtk/empathy-chat.c:1724
#, c-format
msgid "Topic set by %s to: %s"
msgstr "Topic set by %s to: %s"
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1705
+#: ../libempathy-gtk/empathy-chat.c:1729
msgid "No topic defined"
msgstr "No topic defined"
-#: ../libempathy-gtk/empathy-chat.c:2221
+#: ../libempathy-gtk/empathy-chat.c:2245
msgid "(No Suggestions)"
msgstr "(No Suggestions)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2289
+#: ../libempathy-gtk/empathy-chat.c:2313
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "Add '%s' to Dictionary"
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2326
+#: ../libempathy-gtk/empathy-chat.c:2350
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "Add '%s' to %s Dictionary"
-#: ../libempathy-gtk/empathy-chat.c:2396
+#: ../libempathy-gtk/empathy-chat.c:2420
msgid "Insert Smiley"
msgstr "Insert Smiley"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2414
-#: ../libempathy-gtk/empathy-ui-utils.c:1867
+#: ../libempathy-gtk/empathy-chat.c:2438
+#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "_Send"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2471
+#: ../libempathy-gtk/empathy-chat.c:2495
msgid "_Spelling Suggestions"
msgstr "_Spelling Suggestions"
-#: ../libempathy-gtk/empathy-chat.c:2560
+#: ../libempathy-gtk/empathy-chat.c:2584
msgid "Failed to retrieve recent logs"
msgstr "Failed to retrieve recent logs"
-#: ../libempathy-gtk/empathy-chat.c:2699
+#: ../libempathy-gtk/empathy-chat.c:2723
#, c-format
msgid "%s has disconnected"
msgstr "%s has disconnected"
@@ -1513,12 +1563,12 @@ msgstr "%s has disconnected"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2706
+#: ../libempathy-gtk/empathy-chat.c:2730
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "%1$s was kicked by %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2709
+#: ../libempathy-gtk/empathy-chat.c:2733
#, c-format
msgid "%s was kicked"
msgstr "%s was kicked"
@@ -1526,17 +1576,17 @@ msgstr "%s was kicked"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2717
+#: ../libempathy-gtk/empathy-chat.c:2741
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "%1$s was banned by %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2720
+#: ../libempathy-gtk/empathy-chat.c:2744
#, c-format
msgid "%s was banned"
msgstr "%s was banned"
-#: ../libempathy-gtk/empathy-chat.c:2724
+#: ../libempathy-gtk/empathy-chat.c:2748
#, c-format
msgid "%s has left the room"
msgstr "%s has left the room"
@@ -1546,17 +1596,17 @@ msgstr "%s has left the room"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2733
+#: ../libempathy-gtk/empathy-chat.c:2757
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: ../libempathy-gtk/empathy-chat.c:2758
+#: ../libempathy-gtk/empathy-chat.c:2782
#, c-format
msgid "%s has joined the room"
msgstr "%s has joined the room"
-#: ../libempathy-gtk/empathy-chat.c:2783
+#: ../libempathy-gtk/empathy-chat.c:2807
#, c-format
msgid "%s is now known as %s"
msgstr "%s is now known as %s"
@@ -1564,86 +1614,86 @@ msgstr "%s is now known as %s"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2970
-#: ../src/empathy-streamed-media-window.c:1889
-#: ../src/empathy-event-manager.c:1280 ../src/empathy-call-window.c:1538
-#: ../src/empathy-call-window.c:1588 ../src/empathy-call-window.c:2631
+#: ../libempathy-gtk/empathy-chat.c:2994
+#: ../src/empathy-streamed-media-window.c:1888
+#: ../src/empathy-event-manager.c:1279 ../src/empathy-call-window.c:1466
+#: ../src/empathy-call-window.c:1516 ../src/empathy-call-window.c:2562
msgid "Disconnected"
msgstr "Disconnected"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3634
+#: ../libempathy-gtk/empathy-chat.c:3658
msgid "Would you like to store this password?"
msgstr "Would you like to store this password?"
-#: ../libempathy-gtk/empathy-chat.c:3640
+#: ../libempathy-gtk/empathy-chat.c:3664
msgid "Remember"
msgstr "Remember"
-#: ../libempathy-gtk/empathy-chat.c:3650
+#: ../libempathy-gtk/empathy-chat.c:3674
msgid "Not now"
msgstr "Not now"
-#: ../libempathy-gtk/empathy-chat.c:3694
+#: ../libempathy-gtk/empathy-chat.c:3718
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "Retry"
-#: ../libempathy-gtk/empathy-chat.c:3698
+#: ../libempathy-gtk/empathy-chat.c:3722
msgid "Wrong password; please try again:"
msgstr "Wrong password; please try again:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3828
+#: ../libempathy-gtk/empathy-chat.c:3852
msgid "This room is protected by a password:"
msgstr "This room is protected by a password:"
-#: ../libempathy-gtk/empathy-chat.c:3855
+#: ../libempathy-gtk/empathy-chat.c:3879
msgid "Join"
msgstr "Join"
-#: ../libempathy-gtk/empathy-chat.c:4047 ../src/empathy-event-manager.c:1301
+#: ../libempathy-gtk/empathy-chat.c:4071 ../src/empathy-event-manager.c:1300
msgid "Connected"
msgstr "Connected"
-#: ../libempathy-gtk/empathy-chat.c:4102
+#: ../libempathy-gtk/empathy-chat.c:4126
msgid "Conversation"
msgstr "Conversation"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4107
+#: ../libempathy-gtk/empathy-chat.c:4131
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:264
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:262
msgid "Unknown or invalid identifier"
msgstr "Unknown or invalid identifier"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:266
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:264
msgid "Contact blocking temporarily unavailable"
msgstr "Contact blocking temporarily unavailable"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:268
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:266
msgid "Contact blocking unavailable"
msgstr "Contact blocking unavailable"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:270
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:268
msgid "Permission Denied"
msgstr "Permission Denied"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:274
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:272
msgid "Could not block contact"
msgstr "Could not block contact"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:612
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:610
msgid "Edit Blocked Contacts"
msgstr "Edit Blocked Contacts"
#. Account and Identifier
#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:506
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:503
#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
#: ../libempathy-gtk/empathy-individual-widget.c:1474
#: ../src/empathy-chatrooms-window.ui.h:2
@@ -1655,13 +1705,6 @@ msgstr "Account:"
msgid "Blocked Contacts"
msgstr "Blocked Contacts"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:3
-#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1
-#: ../src/empathy-accounts-dialog.ui.h:2
-#: ../src/empathy-chatrooms-window.ui.h:3
-msgid "Remove"
-msgstr "Remove"
-
#. Copy Link Address menu item
#: ../libempathy-gtk/empathy-chat-text-view.c:322
#: ../libempathy-gtk/empathy-webkit-utils.c:277
@@ -1722,157 +1765,157 @@ msgid "Decide _Later"
msgstr "Decide _Later"
#. Title
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:499
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:496
msgid "Search contacts"
msgstr "Search contacts"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:529
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:526
msgid "Search: "
msgstr "Search: "
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:587
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:584
msgid "_Add Contact"
msgstr "_Add Contact"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:602
msgid "No contacts found"
msgstr "No contacts found"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:621
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:618
msgid "Your message introducing yourself:"
msgstr "Your message introducing yourself:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:629
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:626
msgid "Please let me see when you're online. Thanks!"
msgstr "Please let me see when you're online. Thanks!"
-#: ../libempathy-gtk/empathy-contact-widget.c:569
+#: ../libempathy-gtk/empathy-contact-widget.c:567
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "Channels:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:747
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "Country ISO Code:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:749
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "Country:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:751
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "State:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:753
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "City:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:755
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "Area:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:757
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "Postal Code:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:759
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "Street:"
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:761
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "Building:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:763
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "Floor:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:765
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "Room:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:767
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "Text:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:769
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "Description:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:771
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "URI:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:773
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "Accuracy Level:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:775
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "Error:"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:777
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "Vertical Error (metres):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:779
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "Horizontal Error (metres):"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:781
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "Speed:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:783
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "Bearing:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:785
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "Climb Speed:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:787
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "Last Updated on:"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:789
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "Longitude:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:791
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "Latitude:"
-#: ../libempathy-gtk/empathy-contact-widget.c:795
+#: ../libempathy-gtk/empathy-contact-widget.c:793
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "Altitude:"
-#: ../libempathy-gtk/empathy-contact-widget.c:848
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:846
+#: ../libempathy-gtk/empathy-contact-widget.c:861
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
#: ../src/empathy-preferences.ui.h:35
@@ -1880,32 +1923,32 @@ msgid "Location"
msgstr "Location"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:865
+#: ../libempathy-gtk/empathy-contact-widget.c:863
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s, %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:917
+#: ../libempathy-gtk/empathy-contact-widget.c:915
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "%B %e, %Y at %I:%M %p UTC"
-#: ../libempathy-gtk/empathy-contact-widget.c:999
+#: ../libempathy-gtk/empathy-contact-widget.c:997
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "Save Avatar"
-#: ../libempathy-gtk/empathy-contact-widget.c:1055
+#: ../libempathy-gtk/empathy-contact-widget.c:1053
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "Unable to save avatar"
-#: ../libempathy-gtk/empathy-contact-widget.c:1446
+#: ../libempathy-gtk/empathy-contact-widget.c:1455
msgid "Personal Details"
msgstr "Personal Details"
-#: ../libempathy-gtk/empathy-contact-widget.c:1449
+#: ../libempathy-gtk/empathy-contact-widget.c:1458
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
@@ -2014,11 +2057,11 @@ msgstr "Version:"
msgid "Client:"
msgstr "Client:"
-#: ../libempathy-gtk/empathy-groups-widget.c:331
+#: ../libempathy-gtk/empathy-groups-widget.c:327
msgid "Groups"
msgstr "Groups"
-#: ../libempathy-gtk/empathy-groups-widget.c:343
+#: ../libempathy-gtk/empathy-groups-widget.c:339
msgid ""
"Select the groups you want this contact to appear in. Note that you can "
"select more than one group or no groups."
@@ -2026,17 +2069,17 @@ msgstr ""
"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-groups-widget.c:362
+#: ../libempathy-gtk/empathy-groups-widget.c:358
msgid "_Add Group"
msgstr "_Add Group"
-#: ../libempathy-gtk/empathy-groups-widget.c:397
+#: ../libempathy-gtk/empathy-groups-widget.c:393
msgctxt "verb in a column header displaying group names"
msgid "Select"
msgstr "Select"
-#: ../libempathy-gtk/empathy-groups-widget.c:407
-#: ../src/empathy-roster-window.c:1951
+#: ../libempathy-gtk/empathy-groups-widget.c:403
+#: ../src/empathy-roster-window.c:1970
msgid "Group"
msgstr "Group"
@@ -2056,140 +2099,147 @@ msgstr[1] "The following identities can not be blocked:"
msgid "Edit Contact Information"
msgstr "Edit Contact Information"
+#. Translators: the heading at the top of the Information dialogue
+#: ../libempathy-gtk/empathy-individual-information-dialog.c:288
+#, fuzzy
+#| msgid "Blocked Contacts"
+msgid "Linked Contacts"
+msgstr "Blocked Contacts"
+
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:172
+#: ../libempathy-gtk/empathy-individual-menu.c:173
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:344
+#: ../libempathy-gtk/empathy-individual-menu.c:345
msgid "Select account to use to place the call"
msgstr "Select account to use to place the call"
#. translators: Call is a noun. This string is used in the window
#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:348
+#: ../libempathy-gtk/empathy-individual-menu.c:349
#: ../libempathy-gtk/empathy-log-window.ui.h:6
-#: ../src/empathy-streamed-media-window.c:1288
+#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:18
msgid "Call"
msgstr "Call"
-#: ../libempathy-gtk/empathy-individual-menu.c:413
+#: ../libempathy-gtk/empathy-individual-menu.c:414
msgid "Mobile"
msgstr "Mobile"
-#: ../libempathy-gtk/empathy-individual-menu.c:415
+#: ../libempathy-gtk/empathy-individual-menu.c:416
msgid "Work"
msgstr "Work"
-#: ../libempathy-gtk/empathy-individual-menu.c:417
+#: ../libempathy-gtk/empathy-individual-menu.c:418
msgid "HOME"
msgstr "HOME"
-#: ../libempathy-gtk/empathy-individual-menu.c:658
+#: ../libempathy-gtk/empathy-individual-menu.c:659
msgid "_Block Contact"
msgstr "_Block Contact"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1017
+#: ../libempathy-gtk/empathy-individual-menu.c:1018
#: ../libempathy-gtk/empathy-new-message-dialog.c:319
#: ../src/empathy-roster-window-menubar.ui.h:1
msgid "_Chat"
msgstr "_Chat"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1052
+#: ../libempathy-gtk/empathy-individual-menu.c:1053
#: ../libempathy-gtk/empathy-new-message-dialog.c:313
msgid "_SMS"
msgstr "_SMS"
-#: ../libempathy-gtk/empathy-individual-menu.c:1085
+#: ../libempathy-gtk/empathy-individual-menu.c:1086
msgctxt "menu item"
msgid "_Audio Call"
msgstr "_Audio Call"
-#: ../libempathy-gtk/empathy-individual-menu.c:1118
+#: ../libempathy-gtk/empathy-individual-menu.c:1119
msgctxt "menu item"
msgid "_Video Call"
msgstr "_Video Call"
-#: ../libempathy-gtk/empathy-individual-menu.c:1159
+#: ../libempathy-gtk/empathy-individual-menu.c:1160
#: ../src/empathy-roster-window-menubar.ui.h:4
msgid "_Previous Conversations"
msgstr "_Previous Conversations"
-#: ../libempathy-gtk/empathy-individual-menu.c:1188
+#: ../libempathy-gtk/empathy-individual-menu.c:1189
msgid "Send File"
msgstr "Send File"
-#: ../libempathy-gtk/empathy-individual-menu.c:1218
+#: ../libempathy-gtk/empathy-individual-menu.c:1219
msgid "Share My Desktop"
msgstr "Share My Desktop"
-#: ../libempathy-gtk/empathy-individual-menu.c:1244
+#: ../libempathy-gtk/empathy-individual-menu.c:1245
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "Favourite"
-#: ../libempathy-gtk/empathy-individual-menu.c:1263
+#: ../libempathy-gtk/empathy-individual-menu.c:1264
msgid "gnome-contacts not installed"
msgstr "gnome-contacts not installed"
-#: ../libempathy-gtk/empathy-individual-menu.c:1266
+#: ../libempathy-gtk/empathy-individual-menu.c:1267
msgid "Please install gnome-contacts to access contacts details."
msgstr "Please install gnome-contacts to access contacts details."
-#: ../libempathy-gtk/empathy-individual-menu.c:1377
+#: ../libempathy-gtk/empathy-individual-menu.c:1398
msgid "Infor_mation"
msgstr "Infor_mation"
-#: ../libempathy-gtk/empathy-individual-menu.c:1426
+#: ../libempathy-gtk/empathy-individual-menu.c:1447
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "_Edit"
-#: ../libempathy-gtk/empathy-individual-menu.c:1543
-#: ../src/empathy-chat-window.c:1166
+#: ../libempathy-gtk/empathy-individual-menu.c:1564
+#: ../src/empathy-chat-window.c:1192
msgid "Inviting you to this room"
msgstr "Inviting you to this room"
-#: ../libempathy-gtk/empathy-individual-menu.c:1589
+#: ../libempathy-gtk/empathy-individual-menu.c:1610
msgid "_Invite to Chat Room"
msgstr "_Invite to Chat Room"
-#: ../libempathy-gtk/empathy-individual-menu.c:1785
+#: ../libempathy-gtk/empathy-individual-menu.c:1806
#: ../src/empathy-roster-window-menubar.ui.h:5
msgid "_Add Contact…"
msgstr "_Add Contact…"
-#: ../libempathy-gtk/empathy-individual-view.c:2306
+#: ../libempathy-gtk/empathy-individual-view.c:2304
msgid "Delete and _Block"
msgstr "Delete and _Block"
-#: ../libempathy-gtk/empathy-individual-view.c:2341
+#: ../libempathy-gtk/empathy-individual-view.c:2339
#, c-format
msgid "Do you really want to remove the group '%s'?"
msgstr "Do you really want to remove the group '%s'?"
-#: ../libempathy-gtk/empathy-individual-view.c:2344
+#: ../libempathy-gtk/empathy-individual-view.c:2342
msgid "Removing group"
msgstr "Removing group"
#. Remove
-#: ../libempathy-gtk/empathy-individual-view.c:2399
-#: ../libempathy-gtk/empathy-individual-view.c:2603
+#: ../libempathy-gtk/empathy-individual-view.c:2397
+#: ../libempathy-gtk/empathy-individual-view.c:2601
msgid "_Remove"
msgstr "_Remove"
-#: ../libempathy-gtk/empathy-individual-view.c:2476
+#: ../libempathy-gtk/empathy-individual-view.c:2474
#, c-format
msgid "Do you really want to remove the contact '%s'?"
msgstr "Do you really want to remove the contact '%s'?"
-#: ../libempathy-gtk/empathy-individual-view.c:2485
+#: ../libempathy-gtk/empathy-individual-view.c:2483
#, c-format
msgid ""
"Do you really want to remove the linked contact '%s'? Note that this will "
@@ -2198,7 +2248,7 @@ msgstr ""
"Do you really want to remove the linked contact '%s'? Note that this will "
"remove all the contacts which make up this linked contact."
-#: ../libempathy-gtk/empathy-individual-view.c:2497
+#: ../libempathy-gtk/empathy-individual-view.c:2495
msgid "Removing contact"
msgstr "Removing contact"
@@ -2238,139 +2288,139 @@ msgstr "Select"
msgid "new server"
msgstr "new server"
-#: ../libempathy-gtk/empathy-irc-network-dialog.c:535
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:539
msgid "SSL"
msgstr "SSL"
-#: ../libempathy-gtk/empathy-log-window.c:622
+#: ../libempathy-gtk/empathy-log-window.c:620
msgid "History"
msgstr "History"
-#: ../libempathy-gtk/empathy-log-window.c:677
+#: ../libempathy-gtk/empathy-log-window.c:675
msgid "Show"
msgstr "Show"
-#: ../libempathy-gtk/empathy-log-window.c:699
+#: ../libempathy-gtk/empathy-log-window.c:697
msgid "Search"
msgstr "Search"
-#: ../libempathy-gtk/empathy-log-window.c:1150
+#: ../libempathy-gtk/empathy-log-window.c:1148
#, c-format
msgid "Chat in %s"
msgstr "Chat in %s"
-#: ../libempathy-gtk/empathy-log-window.c:1152
+#: ../libempathy-gtk/empathy-log-window.c:1150
#, c-format
msgid "Chat with %s"
msgstr "Chat with %s"
-#: ../libempathy-gtk/empathy-log-window.c:1202
-#: ../libempathy-gtk/empathy-log-window.c:1349
+#: ../libempathy-gtk/empathy-log-window.c:1200
+#: ../libempathy-gtk/empathy-log-window.c:1347
msgctxt "A date with the time"
msgid "%A, %e %B %Y %X"
msgstr "%A, %e %B %Y %X"
#. Translators: this is an emote: '* Danielle waves'
-#: ../libempathy-gtk/empathy-log-window.c:1291
+#: ../libempathy-gtk/empathy-log-window.c:1289
#, c-format
msgid "<i>* %s %s</i>"
msgstr "<i>* %s %s</i>"
#. Translators: this is a message: 'Danielle: hello'
#. * The string in bold is the sender's name
-#: ../libempathy-gtk/empathy-log-window.c:1297
+#: ../libempathy-gtk/empathy-log-window.c:1295
#, c-format
msgid "<b>%s:</b> %s"
msgstr "<b>%s:</b> %s"
-#: ../libempathy-gtk/empathy-log-window.c:1373
+#: ../libempathy-gtk/empathy-log-window.c:1371
#, c-format
msgid "%s second"
msgid_plural "%s seconds"
msgstr[0] "%s second"
msgstr[1] "%s seconds"
-#: ../libempathy-gtk/empathy-log-window.c:1380
+#: ../libempathy-gtk/empathy-log-window.c:1378
#, c-format
msgid "%s minute"
msgid_plural "%s minutes"
msgstr[0] "%s minute"
msgstr[1] "%s minutes"
-#: ../libempathy-gtk/empathy-log-window.c:1388
+#: ../libempathy-gtk/empathy-log-window.c:1386
#, c-format
msgid "Call took %s, ended at %s"
msgstr "Call took %s, ended at %s"
-#: ../libempathy-gtk/empathy-log-window.c:1722
+#: ../libempathy-gtk/empathy-log-window.c:1720
msgid "Today"
msgstr "Today"
-#: ../libempathy-gtk/empathy-log-window.c:1726
+#: ../libempathy-gtk/empathy-log-window.c:1724
msgid "Yesterday"
msgstr "Yesterday"
#. Translators: A date such as '23 May 2010' (strftime format)
-#: ../libempathy-gtk/empathy-log-window.c:1741
+#: ../libempathy-gtk/empathy-log-window.c:1739
msgid "%e %B %Y"
msgstr "%e %B %Y"
-#: ../libempathy-gtk/empathy-log-window.c:1829
-#: ../libempathy-gtk/empathy-log-window.c:3489
+#: ../libempathy-gtk/empathy-log-window.c:1843
+#: ../libempathy-gtk/empathy-log-window.c:3471
msgid "Anytime"
msgstr "Anytime"
-#: ../libempathy-gtk/empathy-log-window.c:1918
-#: ../libempathy-gtk/empathy-log-window.c:2402
+#: ../libempathy-gtk/empathy-log-window.c:1942
+#: ../libempathy-gtk/empathy-log-window.c:2401
msgid "Anyone"
msgstr "Anyone"
-#: ../libempathy-gtk/empathy-log-window.c:2715
+#: ../libempathy-gtk/empathy-log-window.c:2714
msgid "Who"
msgstr "Who"
-#: ../libempathy-gtk/empathy-log-window.c:2924
+#: ../libempathy-gtk/empathy-log-window.c:2923
msgid "When"
msgstr "When"
-#: ../libempathy-gtk/empathy-log-window.c:3040
+#: ../libempathy-gtk/empathy-log-window.c:3039
msgid "Anything"
msgstr "Anything"
-#: ../libempathy-gtk/empathy-log-window.c:3042
+#: ../libempathy-gtk/empathy-log-window.c:3041
msgid "Text chats"
msgstr "Text chats"
-#: ../libempathy-gtk/empathy-log-window.c:3044
+#: ../libempathy-gtk/empathy-log-window.c:3043
#: ../src/empathy-preferences.ui.h:25
msgid "Calls"
msgstr "Calls"
-#: ../libempathy-gtk/empathy-log-window.c:3049
+#: ../libempathy-gtk/empathy-log-window.c:3048
msgid "Incoming calls"
msgstr "Incoming calls"
-#: ../libempathy-gtk/empathy-log-window.c:3050
+#: ../libempathy-gtk/empathy-log-window.c:3049
msgid "Outgoing calls"
msgstr "Outgoing calls"
-#: ../libempathy-gtk/empathy-log-window.c:3051
+#: ../libempathy-gtk/empathy-log-window.c:3050
msgid "Missed calls"
msgstr "Missed calls"
-#: ../libempathy-gtk/empathy-log-window.c:3073
+#: ../libempathy-gtk/empathy-log-window.c:3072
msgid "What"
msgstr "What"
-#: ../libempathy-gtk/empathy-log-window.c:3782
+#: ../libempathy-gtk/empathy-log-window.c:3764
msgid "Are you sure you want to delete all logs of previous conversations?"
msgstr "Are you sure you want to delete all logs of previous conversations?"
-#: ../libempathy-gtk/empathy-log-window.c:3786
+#: ../libempathy-gtk/empathy-log-window.c:3768
msgid "Clear All"
msgstr "Clear All"
-#: ../libempathy-gtk/empathy-log-window.c:3793
+#: ../libempathy-gtk/empathy-log-window.c:3775
msgid "Delete from:"
msgstr "Delete from:"
@@ -2456,7 +2506,7 @@ msgid "There was an error starting the conversation"
msgstr "There was an error starting the conversation"
#: ../libempathy-gtk/empathy-new-message-dialog.c:290
-#: ../libempathy-gtk/empathy-new-call-dialog.c:202
+#: ../libempathy-gtk/empathy-new-call-dialog.c:200
msgid "Enter a contact identifier or phone number:"
msgstr "Enter a contact identifier or phone number:"
@@ -2466,17 +2516,17 @@ msgid "New Conversation"
msgstr "New Conversation"
#. add video button
-#: ../libempathy-gtk/empathy-new-call-dialog.c:225
+#: ../libempathy-gtk/empathy-new-call-dialog.c:223
msgid "_Video Call"
msgstr "_Video Call"
#. add audio button
-#: ../libempathy-gtk/empathy-new-call-dialog.c:235
+#: ../libempathy-gtk/empathy-new-call-dialog.c:233
msgid "_Audio Call"
msgstr "_Audio Call"
#. Tweak the dialog
-#: ../libempathy-gtk/empathy-new-call-dialog.c:245
+#: ../libempathy-gtk/empathy-new-call-dialog.c:243
msgid "New Call"
msgstr "New Call"
@@ -2532,7 +2582,7 @@ msgstr "Custom messages…"
#. To translator: %s is the name of the protocol, such as "Google Talk" or
#. * "Yahoo!"
#.
-#: ../libempathy-gtk/empathy-protocol-chooser.c:584
+#: ../libempathy-gtk/empathy-protocol-chooser.c:588
#, c-format
msgid "New %s account"
msgstr "New %s account"
@@ -2684,7 +2734,9 @@ msgid "Certificate hostname: %s"
msgstr "Certificate hostname: %s"
#: ../libempathy-gtk/empathy-tls-dialog.c:281
-msgid "Continue"
+#, fuzzy
+#| msgid "Continue"
+msgid "C_ontinue"
msgstr "Continue"
#: ../libempathy-gtk/empathy-tls-dialog.c:287
@@ -2703,19 +2755,19 @@ msgstr "Remember this choice for future connections"
msgid "Certificate Details"
msgstr "Certificate Details"
-#: ../libempathy-gtk/empathy-ui-utils.c:1741
+#: ../libempathy-gtk/empathy-ui-utils.c:1754
msgid "Unable to open URI"
msgstr "Unable to open URI"
-#: ../libempathy-gtk/empathy-ui-utils.c:1859
+#: ../libempathy-gtk/empathy-ui-utils.c:1872
msgid "Select a file"
msgstr "Select a file"
-#: ../libempathy-gtk/empathy-ui-utils.c:1934
+#: ../libempathy-gtk/empathy-ui-utils.c:1947
msgid "Insufficient free space to save file"
msgstr "Insufficient free space to save file"
-#: ../libempathy-gtk/empathy-ui-utils.c:1942
+#: ../libempathy-gtk/empathy-ui-utils.c:1955
#, c-format
msgid ""
"%s of free space are required to save this file, but only %s is available. "
@@ -2724,7 +2776,7 @@ msgstr ""
"%s of free space are required to save this file, but only %s is available. "
"Please choose another location."
-#: ../libempathy-gtk/empathy-ui-utils.c:1986
+#: ../libempathy-gtk/empathy-ui-utils.c:1999
#, c-format
msgid "Incoming file from %s"
msgstr "Incoming file from %s"
@@ -2896,31 +2948,45 @@ msgstr "Western"
msgid "Vietnamese"
msgstr "Vietnamese"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:202
+#: ../libempathy-gtk/empathy-calendar-button.c:66
+#, fuzzy
+#| msgctxt "verb in a column header displaying group names"
+#| msgid "Select"
+msgid "Select..."
+msgstr "Select"
+
+#: ../libempathy-gtk/empathy-calendar-button.c:154
+#, fuzzy
+#| msgctxt "verb in a column header displaying group names"
+#| msgid "Select"
+msgid "_Select"
+msgstr "Select"
+
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:201
msgid "No error message"
msgstr "No error message"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:275
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:274
msgid "Instant Message (Empathy)"
msgstr "Instant Message (Empathy)"
-#: ../src/empathy.c:437
+#: ../src/empathy.c:435
msgid "Don't connect on startup"
msgstr "Don't connect on startup"
-#: ../src/empathy.c:441
+#: ../src/empathy.c:439
msgid "Don't display the contact list or any other dialogs on startup"
msgstr "Don't display the contact list or any other dialogs on startup"
-#: ../src/empathy.c:456
+#: ../src/empathy.c:454
msgid "- Empathy IM Client"
msgstr "- Empathy IM Client"
-#: ../src/empathy.c:643
+#: ../src/empathy.c:641
msgid "Error contacting the Account Manager"
msgstr "Error contacting the Account Manager"
-#: ../src/empathy.c:645
+#: ../src/empathy.c:643
#, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. "
@@ -2977,231 +3043,80 @@ msgstr ""
"Adam Weinberger\n"
"Tiffany Antopolski"
-#: ../src/empathy-account-assistant.c:167
-msgid "There was an error while importing the accounts."
-msgstr "There was an error while importing the accounts."
-
-#: ../src/empathy-account-assistant.c:170
-msgid "There was an error while parsing the account details."
-msgstr "There was an error while parsing the account details."
-
-#: ../src/empathy-account-assistant.c:173
-msgid "There was an error while creating the account."
-msgstr "There was an error while creating the account."
-
-#: ../src/empathy-account-assistant.c:175
-msgid "There was an error."
-msgstr "There was an error."
-
-#: ../src/empathy-account-assistant.c:179
-#, c-format
-msgid "The error message was: %s"
-msgstr "The error message was: %s"
-
-#: ../src/empathy-account-assistant.c:183
-msgid ""
-"You can either go back and try to enter your accounts' details again or quit "
-"this assistant and add accounts later from the Edit menu."
-msgstr ""
-"You can either go back and try to enter your accounts' details again or quit "
-"this assistant and add accounts later from the Edit menu."
-
-#: ../src/empathy-account-assistant.c:220
-#: ../src/empathy-account-assistant.c:1276
-msgid "An error occurred"
-msgstr "An error occurred"
-
-#: ../src/empathy-account-assistant.c:469
-#: ../libempathy-gtk/empathy-new-account-dialog.c:144
-msgid "What kind of chat account do you have?"
-msgstr "What kind of chat account do you have?"
-
-#: ../src/empathy-account-assistant.c:475
-msgid "Do you have any other chat accounts you want to set up?"
-msgstr "Do you have any other chat accounts you want to set up?"
-
-#: ../src/empathy-account-assistant.c:481
-msgid "Enter your account details"
-msgstr "Enter your account details"
-
-#: ../src/empathy-account-assistant.c:486
-msgid "What kind of chat account do you want to create?"
-msgstr "What kind of chat account do you want to create?"
-
-#: ../src/empathy-account-assistant.c:492
-msgid "Do you want to create other chat accounts?"
-msgstr "Do you want to create other chat accounts?"
-
-#: ../src/empathy-account-assistant.c:499
-msgid "Enter the details for the new account"
-msgstr "Enter the details for the new account"
-
-#: ../src/empathy-account-assistant.c:614
-msgid ""
-"With Empathy you can chat with people online nearby and with friends and "
-"colleagues who use Google Talk, AIM, Windows Live and many other chat "
-"programs. With a microphone or a webcam you can also have audio or video "
-"calls."
-msgstr ""
-"With Empathy you can chat with people online nearby and with friends and "
-"colleagues who use Google Talk, AIM, Windows Live and many other chat "
-"programs. With a microphone or a webcam you can also have audio or video "
-"calls."
-
-#: ../src/empathy-account-assistant.c:631
-msgid "Do you have an account you've been using with another chat program?"
-msgstr "Do you have an account you've been using with another chat program?"
-
-#: ../src/empathy-account-assistant.c:655
-msgid "Yes, import my account details from "
-msgstr "Yes, import my account details from "
-
-#: ../src/empathy-account-assistant.c:676
-msgid "Yes, I'll enter my account details now"
-msgstr "Yes, I'll enter my account details now"
-
-#: ../src/empathy-account-assistant.c:698
-msgid "No, I want a new account"
-msgstr "No, I want a new account"
-
-#: ../src/empathy-account-assistant.c:708
-msgid "No, I just want to see people online nearby for now"
-msgstr "No, I just want to see people online nearby for now"
-
-#: ../src/empathy-account-assistant.c:729
-msgid "Select the accounts you want to import:"
-msgstr "Select the accounts you want to import:"
-
-#: ../src/empathy-account-assistant.c:816
-#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
-msgid "Yes"
-msgstr "Yes"
-
-#: ../src/empathy-account-assistant.c:823
-msgid "No, that's all for now"
-msgstr "No, that's all for now"
-
-#: ../src/empathy-account-assistant.c:1088
-msgid ""
-"Empathy can automatically discover and chat with the people connected on the "
-"same network as you. If you want to use this feature, please check that the "
-"details below are correct. You can easily change these details later or "
-"disable this feature by using the 'Accounts' dialog"
-msgstr ""
-"Empathy can automatically discover and chat with the people connected on the "
-"same network as you. If you want to use this feature, please check that the "
-"details below are correct. You can easily change these details later or "
-"disable this feature by using the 'Accounts' dialog"
-
-#: ../src/empathy-account-assistant.c:1094
-#: ../src/empathy-account-assistant.c:1152
-msgid "Edit->Accounts"
-msgstr "Edit->Accounts"
-
-#: ../src/empathy-account-assistant.c:1110
-msgid "I do _not want to enable this feature for now"
-msgstr "I do _not want to enable this feature for now"
-
-#: ../src/empathy-account-assistant.c:1148
-msgid ""
-"You won't be able to chat with people connected to your local network, as "
-"telepathy-salut is not installed. If you want to enable this feature, please "
-"install the telepathy-salut package and create a People Nearby account from "
-"the Accounts dialog"
-msgstr ""
-"You won't be able to chat with people connected to your local network, as "
-"telepathy-salut is not installed. If you want to enable this feature, please "
-"install the telepathy-salut package and create a People Nearby account from "
-"the Accounts dialog"
-
-#: ../src/empathy-account-assistant.c:1154
-msgid "telepathy-salut not installed"
-msgstr "telepathy-salut not installed"
-
-#: ../src/empathy-account-assistant.c:1200
-msgid "Messaging and VoIP Accounts Assistant"
-msgstr "Messaging and VoIP Accounts Assistant"
-
-#: ../src/empathy-account-assistant.c:1234
-msgid "Welcome to Empathy"
-msgstr "Welcome to Empathy"
-
-#: ../src/empathy-account-assistant.c:1243
-msgid "Import your existing accounts"
-msgstr "Import your existing accounts"
-
-#: ../src/empathy-account-assistant.c:1261
-msgid "Please enter personal details"
-msgstr "Please enter personal details"
-
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:69
+#: ../src/empathy-accounts-dialog.c:72
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "There are unsaved modifications to your %s account."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:73
+#: ../src/empathy-accounts-dialog.c:76
msgid "Your new account has not been saved yet."
msgstr "Your new account has not been saved yet."
-#: ../src/empathy-accounts-dialog.c:344
-#: ../src/empathy-streamed-media-window.c:757
-#: ../src/empathy-call-window.c:1325
+#: ../src/empathy-accounts-dialog.c:404
+#: ../src/empathy-streamed-media-window.c:759
+#: ../src/empathy-call-window.c:1267
msgid "Connecting…"
msgstr "Connecting…"
-#: ../src/empathy-accounts-dialog.c:385
+#: ../src/empathy-accounts-dialog.c:445
#, c-format
msgid "Offline — %s"
msgstr "Offline — %s"
-#: ../src/empathy-accounts-dialog.c:397
+#: ../src/empathy-accounts-dialog.c:457
#, c-format
msgid "Disconnected — %s"
msgstr "Disconnected — %s"
-#: ../src/empathy-accounts-dialog.c:408
+#: ../src/empathy-accounts-dialog.c:468
msgid "Offline — No Network Connection"
msgstr "Offline — No Network Connection"
-#: ../src/empathy-accounts-dialog.c:415
+#: ../src/empathy-accounts-dialog.c:475
msgid "Unknown Status"
msgstr "Unknown Status"
-#: ../src/empathy-accounts-dialog.c:427
+#: ../src/empathy-accounts-dialog.c:492
+msgid ""
+"This account has been disabled because it relies on an old, unsupported "
+"backend. Please install telepathy-haze and restart your session to migrate "
+"the account."
+msgstr ""
+
+#: ../src/empathy-accounts-dialog.c:502
msgid "Offline — Account Disabled"
msgstr "Offline — Account Disabled"
-#: ../src/empathy-accounts-dialog.c:530
+#: ../src/empathy-accounts-dialog.c:608
msgid "Edit Connection Parameters"
-msgstr "Edit Connection Parametres"
+msgstr "Edit Connection Parameters"
-#: ../src/empathy-accounts-dialog.c:693
+#: ../src/empathy-accounts-dialog.c:773
msgid "Failed to retrieve your personal information from the server."
msgstr "Failed to retrieve your personal information from the server."
-#: ../src/empathy-accounts-dialog.c:699
+#: ../src/empathy-accounts-dialog.c:779
msgid "Go online to edit your personal information."
msgstr "Go online to edit your personal information."
-#: ../src/empathy-accounts-dialog.c:784
+#: ../src/empathy-accounts-dialog.c:866
msgid "_Edit Connection Parameters..."
-msgstr "_Edit Connection Parametres..."
+msgstr "_Edit Connection Parameters..."
-#: ../src/empathy-accounts-dialog.c:1289
+#: ../src/empathy-accounts-dialog.c:1362
#, c-format
msgid "Do you want to remove %s from your computer?"
msgstr "Do you want to remove %s from your computer?"
-#: ../src/empathy-accounts-dialog.c:1293
+#: ../src/empathy-accounts-dialog.c:1366
msgid "This will not remove your account on the server."
msgstr "This will not remove your account on the server."
-#: ../src/empathy-accounts-dialog.c:1529
+#: ../src/empathy-accounts-dialog.c:1602
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3210,15 +3125,25 @@ msgstr ""
"your changes. Are you sure you want to proceed?"
#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1705
+#: ../src/empathy-accounts-dialog.c:1779
msgid "_Enable"
msgstr "_Enable"
-#: ../src/empathy-accounts-dialog.c:1706
+#: ../src/empathy-accounts-dialog.c:1780
msgid "_Disable"
msgstr "_Disable"
-#: ../src/empathy-accounts-dialog.c:2176
+#: ../src/empathy-accounts-dialog.c:2221
+msgid "_Skip"
+msgstr ""
+
+#: ../src/empathy-accounts-dialog.c:2225
+#, fuzzy
+#| msgid "Connected"
+msgid "_Connect"
+msgstr "Connected"
+
+#: ../src/empathy-accounts-dialog.c:2402
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3226,17 +3151,13 @@ msgstr ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
-#: ../src/empathy-accounts-dialog.ui.h:1
-msgid "Add…"
-msgstr "Add…"
-
#: ../src/empathy-accounts-dialog.ui.h:3
msgid "_Import…"
msgstr "_Import…"
#: ../src/empathy-accounts-dialog.ui.h:4
-msgid "Protocol:"
-msgstr "Protocol:"
+msgid "Loading account information"
+msgstr "Loading account information"
#: ../src/empathy-accounts-dialog.ui.h:5
msgid ""
@@ -3247,123 +3168,117 @@ msgstr ""
"you want to use."
#: ../src/empathy-accounts-dialog.ui.h:6
-msgid "No protocol installed"
+#, fuzzy
+#| msgid "No protocol installed"
+msgid "No protocol backends installed"
msgstr "No protocol installed"
-#: ../src/empathy-accounts-dialog.ui.h:7
-msgid "Loading account information"
-msgstr "Loading account information"
-
-#: ../src/empathy-auth-client.c:286
+#: ../src/empathy-auth-client.c:288
msgid " - Empathy authentication client"
msgstr " - Empathy authentication client"
-#: ../src/empathy-auth-client.c:302
+#: ../src/empathy-auth-client.c:304
msgid "Empathy authentication client"
msgstr "Empathy authentication client"
-#: ../src/empathy-auto-salut-account-helper.c:83
-msgid "People nearby"
-msgstr "People nearby"
-
-#: ../src/empathy-av.c:118 ../src/empathy-call.c:193
+#: ../src/empathy-av.c:118 ../src/empathy-call.c:201
msgid "- Empathy Audio/Video Client"
msgstr "- Empathy Audio/Video Client"
-#: ../src/empathy-av.c:134 ../src/empathy-call.c:218
+#: ../src/empathy-av.c:134 ../src/empathy-call.c:223
msgid "Empathy Audio/Video Client"
msgstr "Empathy Audio/Video Client"
-#: ../src/empathy-streamed-media-window.c:433
+#: ../src/empathy-streamed-media-window.c:434
msgid "Contrast"
msgstr "Contrast"
-#: ../src/empathy-streamed-media-window.c:436
+#: ../src/empathy-streamed-media-window.c:437
msgid "Brightness"
msgstr "Brightness"
-#: ../src/empathy-streamed-media-window.c:439
+#: ../src/empathy-streamed-media-window.c:440
msgid "Gamma"
msgstr "Gamma"
-#: ../src/empathy-streamed-media-window.c:545
+#: ../src/empathy-streamed-media-window.c:547
msgid "Volume"
msgstr "Volume"
-#: ../src/empathy-streamed-media-window.c:1097
+#: ../src/empathy-streamed-media-window.c:1099
msgid "_Sidebar"
msgstr "_Sidebar"
-#: ../src/empathy-streamed-media-window.c:1117
+#: ../src/empathy-streamed-media-window.c:1119
msgid "Audio input"
msgstr "Audio input"
-#: ../src/empathy-streamed-media-window.c:1121
+#: ../src/empathy-streamed-media-window.c:1123
msgid "Video input"
msgstr "Video input"
-#: ../src/empathy-streamed-media-window.c:1129
+#: ../src/empathy-streamed-media-window.c:1131
msgid "Dialpad"
msgstr "Dialpad"
-#: ../src/empathy-streamed-media-window.c:1140
+#: ../src/empathy-streamed-media-window.c:1142
msgid "Details"
msgstr "Details"
#. translators: Call is a noun and %s is the contact name. This string
#. * is used in the window title
-#: ../src/empathy-streamed-media-window.c:1209
-#: ../src/empathy-call-window.c:1927
+#: ../src/empathy-streamed-media-window.c:1211
+#: ../src/empathy-call-window.c:1861
#, c-format
msgid "Call with %s"
msgstr "Call with %s"
-#: ../src/empathy-streamed-media-window.c:1442
-#: ../src/empathy-call-window.c:2171
+#: ../src/empathy-streamed-media-window.c:1444
+#: ../src/empathy-call-window.c:2105
msgid "The IP address as seen by the machine"
msgstr "The IP address as seen by the machine"
-#: ../src/empathy-streamed-media-window.c:1444
-#: ../src/empathy-call-window.c:2173
+#: ../src/empathy-streamed-media-window.c:1446
+#: ../src/empathy-call-window.c:2107
msgid "The IP address as seen by a server on the Internet"
msgstr "The IP address as seen by a server on the Internet"
-#: ../src/empathy-streamed-media-window.c:1446
-#: ../src/empathy-call-window.c:2175
+#: ../src/empathy-streamed-media-window.c:1448
+#: ../src/empathy-call-window.c:2109
msgid "The IP address of the peer as seen by the other side"
msgstr "The IP address of the peer as seen by the other side"
-#: ../src/empathy-streamed-media-window.c:1448
-#: ../src/empathy-call-window.c:2177
+#: ../src/empathy-streamed-media-window.c:1450
+#: ../src/empathy-call-window.c:2111
msgid "The IP address of a relay server"
msgstr "The IP address of a relay server"
-#: ../src/empathy-streamed-media-window.c:1450
-#: ../src/empathy-call-window.c:2179
+#: ../src/empathy-streamed-media-window.c:1452
+#: ../src/empathy-call-window.c:2113
msgid "The IP address of the multicast group"
msgstr "The IP address of the multicast group"
-#: ../src/empathy-streamed-media-window.c:1838
-#: ../src/empathy-streamed-media-window.c:1841
-#: ../src/empathy-streamed-media-window.c:1844
-#: ../src/empathy-streamed-media-window.c:1847
+#: ../src/empathy-streamed-media-window.c:1837
+#: ../src/empathy-streamed-media-window.c:1840
+#: ../src/empathy-streamed-media-window.c:1843
+#: ../src/empathy-streamed-media-window.c:1846
msgctxt "codec"
msgid "Unknown"
msgstr "Unknown"
#. Translators: number of minutes:seconds the caller has been connected
-#: ../src/empathy-streamed-media-window.c:2139
+#: ../src/empathy-streamed-media-window.c:2138
#, c-format
msgid "Connected — %d:%02dm"
msgstr "Connected — %d:%02dm"
-#: ../src/empathy-streamed-media-window.c:2200
-#: ../src/empathy-call-window.c:3033
+#: ../src/empathy-streamed-media-window.c:2199
+#: ../src/empathy-call-window.c:2964
msgid "Technical Details"
msgstr "Technical Details"
-#: ../src/empathy-streamed-media-window.c:2238
-#: ../src/empathy-call-window.c:3072
+#: ../src/empathy-streamed-media-window.c:2237
+#: ../src/empathy-call-window.c:3003
#, c-format
msgid ""
"%s's software does not understand any of the audio formats supported by your "
@@ -3372,8 +3287,8 @@ msgstr ""
"%s's software does not understand any of the audio formats supported by your "
"computer"
-#: ../src/empathy-streamed-media-window.c:2243
-#: ../src/empathy-call-window.c:3077
+#: ../src/empathy-streamed-media-window.c:2242
+#: ../src/empathy-call-window.c:3008
#, c-format
msgid ""
"%s's software does not understand any of the video formats supported by your "
@@ -3382,8 +3297,8 @@ msgstr ""
"%s's software does not understand any of the video formats supported by your "
"computer"
-#: ../src/empathy-streamed-media-window.c:2249
-#: ../src/empathy-call-window.c:3083
+#: ../src/empathy-streamed-media-window.c:2248
+#: ../src/empathy-call-window.c:3014
#, c-format
msgid ""
"Can't establish a connection to %s. One of you might be on a network that "
@@ -3392,27 +3307,27 @@ msgstr ""
"Can't establish a connection to %s. One of you might be on a network that "
"does not allow direct connections."
-#: ../src/empathy-streamed-media-window.c:2255
-#: ../src/empathy-call-window.c:3089
+#: ../src/empathy-streamed-media-window.c:2254
+#: ../src/empathy-call-window.c:3020
msgid "There was a failure on the network"
msgstr "There was a failure on the network"
-#: ../src/empathy-streamed-media-window.c:2259
-#: ../src/empathy-call-window.c:3093
+#: ../src/empathy-streamed-media-window.c:2258
+#: ../src/empathy-call-window.c:3024
msgid ""
"The audio formats necessary for this call are not installed on your computer"
msgstr ""
"The audio formats necessary for this call are not installed on your computer"
-#: ../src/empathy-streamed-media-window.c:2262
-#: ../src/empathy-call-window.c:3096
+#: ../src/empathy-streamed-media-window.c:2261
+#: ../src/empathy-call-window.c:3027
msgid ""
"The video formats necessary for this call are not installed on your computer"
msgstr ""
"The video formats necessary for this call are not installed on your computer"
-#: ../src/empathy-streamed-media-window.c:2272
-#: ../src/empathy-call-window.c:3108
+#: ../src/empathy-streamed-media-window.c:2271
+#: ../src/empathy-call-window.c:3039
#, c-format
msgid ""
"Something unexpected happened in a Telepathy component. Please <a href=\"%s"
@@ -3423,23 +3338,23 @@ msgstr ""
"\">report this bug</a> and attach logs gathered from the 'Debug' window in "
"the Help menu."
-#: ../src/empathy-streamed-media-window.c:2280
-#: ../src/empathy-call-window.c:3117
+#: ../src/empathy-streamed-media-window.c:2279
+#: ../src/empathy-call-window.c:3048
msgid "There was a failure in the call engine"
msgstr "There was a failure in the call engine"
-#: ../src/empathy-streamed-media-window.c:2283
-#: ../src/empathy-call-window.c:3120
+#: ../src/empathy-streamed-media-window.c:2282
+#: ../src/empathy-call-window.c:3051
msgid "The end of the stream was reached"
msgstr "The end of the stream was reached"
-#: ../src/empathy-streamed-media-window.c:2323
-#: ../src/empathy-call-window.c:3160
+#: ../src/empathy-streamed-media-window.c:2322
+#: ../src/empathy-call-window.c:3091
msgid "Can't establish audio stream"
msgstr "Can't establish audio stream"
-#: ../src/empathy-streamed-media-window.c:2333
-#: ../src/empathy-call-window.c:3170
+#: ../src/empathy-streamed-media-window.c:2332
+#: ../src/empathy-call-window.c:3101
msgid "Can't establish video stream"
msgstr "Can't establish video stream"
@@ -3552,8 +3467,8 @@ msgstr "Encoding Codec:"
#: ../src/empathy-call-window.ui.h:28
#: ../src/empathy-streamed-media-window.ui.h:21
-#: ../src/empathy-call-window.c:2580 ../src/empathy-call-window.c:2581
-#: ../src/empathy-call-window.c:2582 ../src/empathy-call-window.c:2583
+#: ../src/empathy-call-window.c:2514 ../src/empathy-call-window.c:2515
+#: ../src/empathy-call-window.c:2516 ../src/empathy-call-window.c:2517
msgid "Unknown"
msgstr "Unknown"
@@ -3577,11 +3492,11 @@ msgstr "Local Candidate:"
msgid "Audio"
msgstr "Audio"
-#: ../src/empathy-chat-window.c:285
+#: ../src/empathy-chat-window.c:289
msgid "Close this window?"
msgstr "Close this window?"
-#: ../src/empathy-chat-window.c:290
+#: ../src/empathy-chat-window.c:294
#, c-format
msgid ""
"Closing this window will leave %s. You will not receive any further messages "
@@ -3590,7 +3505,7 @@ msgstr ""
"Closing this window will leave %s. You will not receive any further messages "
"until you rejoin it."
-#: ../src/empathy-chat-window.c:301
+#: ../src/empathy-chat-window.c:305
#, c-format
msgid ""
"Closing this window will leave a chat room. You will not receive any further "
@@ -3605,12 +3520,12 @@ msgstr[1] ""
"Closing this window will leave %u chat rooms. You will not receive any "
"further messages until you rejoin them."
-#: ../src/empathy-chat-window.c:310
+#: ../src/empathy-chat-window.c:314
#, c-format
msgid "Leave %s?"
msgstr "Leave %s?"
-#: ../src/empathy-chat-window.c:311
+#: ../src/empathy-chat-window.c:315
msgid ""
"You will not receive any further messages from this chat room until you "
"rejoin it."
@@ -3618,54 +3533,54 @@ msgstr ""
"You will not receive any further messages from this chat room until you "
"rejoin it."
-#: ../src/empathy-chat-window.c:330
+#: ../src/empathy-chat-window.c:334
msgid "Close window"
msgstr "Close window"
-#: ../src/empathy-chat-window.c:330
+#: ../src/empathy-chat-window.c:334
msgid "Leave room"
msgstr "Leave room"
-#: ../src/empathy-chat-window.c:636 ../src/empathy-chat-window.c:656
+#: ../src/empathy-chat-window.c:640 ../src/empathy-chat-window.c:660
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
msgstr[0] "%s (%d unread)"
msgstr[1] "%s (%d unread)"
-#: ../src/empathy-chat-window.c:648
+#: ../src/empathy-chat-window.c:652
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
msgstr[0] "%s (and %u other)"
msgstr[1] "%s (and %u others)"
-#: ../src/empathy-chat-window.c:664
+#: ../src/empathy-chat-window.c:668
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
msgstr[0] "%s (%d unread from others)"
msgstr[1] "%s (%d unread from others)"
-#: ../src/empathy-chat-window.c:673
+#: ../src/empathy-chat-window.c:677
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
msgstr[0] "%s (%d unread from all)"
msgstr[1] "%s (%d unread from all)"
-#: ../src/empathy-chat-window.c:888
+#: ../src/empathy-chat-window.c:892
msgid "SMS:"
msgstr "SMS:"
-#: ../src/empathy-chat-window.c:898
+#: ../src/empathy-chat-window.c:902
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
msgstr[0] "Sending %d message"
msgstr[1] "Sending %d messages"
-#: ../src/empathy-chat-window.c:920
+#: ../src/empathy-chat-window.c:924
msgid "Typing a message."
msgstr "Typing a message."
@@ -3745,96 +3660,96 @@ msgstr "Auto-Connect"
msgid "Manage Favorite Rooms"
msgstr "Manage Favourite Rooms"
-#: ../src/empathy-event-manager.c:523
+#: ../src/empathy-event-manager.c:522
msgid "Incoming video call"
msgstr "Incoming video call"
-#: ../src/empathy-event-manager.c:523 ../src/empathy-call-window.c:1555
+#: ../src/empathy-event-manager.c:522 ../src/empathy-call-window.c:1483
msgid "Incoming call"
msgstr "Incoming call"
-#: ../src/empathy-event-manager.c:527
+#: ../src/empathy-event-manager.c:526
#, c-format
msgid "%s is video calling you. Do you want to answer?"
msgstr "%s is video calling you. Do you want to answer?"
-#: ../src/empathy-event-manager.c:528
+#: ../src/empathy-event-manager.c:527
#, c-format
msgid "%s is calling you. Do you want to answer?"
msgstr "%s is calling you. Do you want to answer?"
-#: ../src/empathy-event-manager.c:531 ../src/empathy-event-manager.c:732
-#: ../src/empathy-event-manager.c:765 ../src/empathy-call-window.c:1561
+#: ../src/empathy-event-manager.c:530 ../src/empathy-event-manager.c:731
+#: ../src/empathy-event-manager.c:764 ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming call from %s"
msgstr "Incoming call from %s"
-#: ../src/empathy-event-manager.c:556
+#: ../src/empathy-event-manager.c:555
msgid "_Reject"
msgstr "_Reject"
-#: ../src/empathy-event-manager.c:564 ../src/empathy-event-manager.c:572
+#: ../src/empathy-event-manager.c:563 ../src/empathy-event-manager.c:571
msgid "_Answer"
msgstr "_Answer"
-#: ../src/empathy-event-manager.c:572
+#: ../src/empathy-event-manager.c:571
msgid "_Answer with video"
msgstr "_Answer with video"
-#: ../src/empathy-event-manager.c:732 ../src/empathy-event-manager.c:765
-#: ../src/empathy-call-window.c:1561
+#: ../src/empathy-event-manager.c:731 ../src/empathy-event-manager.c:764
+#: ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming video call from %s"
msgstr "Incoming video call from %s"
-#: ../src/empathy-event-manager.c:838
+#: ../src/empathy-event-manager.c:837
msgid "Room invitation"
msgstr "Room invitation"
-#: ../src/empathy-event-manager.c:840
+#: ../src/empathy-event-manager.c:839
#, c-format
msgid "Invitation to join %s"
msgstr "Invitation to join %s"
-#: ../src/empathy-event-manager.c:847
+#: ../src/empathy-event-manager.c:846
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s is inviting you to join %s"
-#: ../src/empathy-event-manager.c:855
+#: ../src/empathy-event-manager.c:854
msgid "_Decline"
msgstr "_Decline"
-#: ../src/empathy-event-manager.c:860
+#: ../src/empathy-event-manager.c:859
#: ../src/empathy-new-chatroom-dialog.ui.h:2
msgid "_Join"
msgstr "_Join"
-#: ../src/empathy-event-manager.c:887
+#: ../src/empathy-event-manager.c:886
#, c-format
msgid "%s invited you to join %s"
msgstr "%s invited you to join %s"
-#: ../src/empathy-event-manager.c:893
+#: ../src/empathy-event-manager.c:892
#, c-format
msgid "You have been invited to join %s"
msgstr "You have been invited to join %s"
-#: ../src/empathy-event-manager.c:944
+#: ../src/empathy-event-manager.c:943
#, c-format
msgid "Incoming file transfer from %s"
msgstr "Incoming file transfer from %s"
-#: ../src/empathy-event-manager.c:1147 ../src/empathy-roster-window.c:372
+#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:374
msgid "Password required"
msgstr "Password required"
-#: ../src/empathy-event-manager.c:1217
+#: ../src/empathy-event-manager.c:1216
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s would like permission to see when you are online"
-#: ../src/empathy-event-manager.c:1223
+#: ../src/empathy-event-manager.c:1222
#, c-format
msgid ""
"\n"
@@ -3952,9 +3867,15 @@ msgstr "File Transfers"
#: ../src/empathy-ft-manager.ui.h:2
msgid "Remove completed, canceled and failed file transfers from the list"
-msgstr "Remove completed, cancellled and failed file transfers from the list"
+msgstr "Remove completed, cancelled and failed file transfers from the list"
+
+#: ../src/empathy-import-dialog.c:76
+#, fuzzy
+#| msgid "Import"
+msgid "_Import"
+msgstr "Import"
-#: ../src/empathy-import-dialog.c:84
+#: ../src/empathy-import-dialog.c:88
msgid ""
"No accounts to import could be found. Empathy currently only supports "
"importing accounts from Pidgin."
@@ -3962,91 +3883,91 @@ msgstr ""
"No accounts to import could be found. Empathy currently only supports "
"importing accounts from Pidgin."
-#: ../src/empathy-import-dialog.c:199
+#: ../src/empathy-import-dialog.c:209
msgid "Import Accounts"
msgstr "Import Accounts"
#. Translators: this is the header of a treeview column
-#: ../src/empathy-import-widget.c:315
+#: ../src/empathy-import-widget.c:303
msgid "Import"
msgstr "Import"
-#: ../src/empathy-import-widget.c:324
+#: ../src/empathy-import-widget.c:312
msgid "Protocol"
msgstr "Protocol"
-#: ../src/empathy-import-widget.c:348
+#: ../src/empathy-import-widget.c:336
msgid "Source"
msgstr "Source"
-#: ../src/empathy-roster-window.c:389
+#: ../src/empathy-roster-window.c:391
msgid "Provide Password"
msgstr "Provide Password"
-#: ../src/empathy-roster-window.c:395
+#: ../src/empathy-roster-window.c:397
msgid "Disconnect"
msgstr "Disconnect"
-#: ../src/empathy-roster-window.c:644
+#: ../src/empathy-roster-window.c:657
msgid "You need to setup an account to see contacts here."
msgstr "You need to setup an account to see contacts here."
-#: ../src/empathy-roster-window.c:660
+#: ../src/empathy-roster-window.c:673
msgid "No match found"
msgstr "No match found"
-#: ../src/empathy-roster-window.c:765
+#: ../src/empathy-roster-window.c:783
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr "Sorry, %s accounts can’t be used until your %s software is updated."
-#: ../src/empathy-roster-window.c:831
+#: ../src/empathy-roster-window.c:849
msgid "Update software..."
msgstr "Update software..."
-#: ../src/empathy-roster-window.c:837 ../src/empathy-roster-window.c:954
+#: ../src/empathy-roster-window.c:855 ../src/empathy-roster-window.c:972
msgid "Close"
msgstr "Close"
-#: ../src/empathy-roster-window.c:942
+#: ../src/empathy-roster-window.c:960
msgid "Reconnect"
msgstr "Reconnect"
-#: ../src/empathy-roster-window.c:948
+#: ../src/empathy-roster-window.c:966
msgid "Edit Account"
msgstr "Edit Account"
#. Translators: this string will be something like:
#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1092
+#: ../src/empathy-roster-window.c:1110
#, c-format
msgid "Top up %s (%s)..."
msgstr "Top up %s (%s)..."
-#: ../src/empathy-roster-window.c:1138
+#: ../src/empathy-roster-window.c:1156
msgid "Top up account credit"
msgstr "Top up account credit"
#. top up button
-#: ../src/empathy-roster-window.c:1210
+#: ../src/empathy-roster-window.c:1228
msgid "Top Up..."
msgstr "Top Up..."
-#: ../src/empathy-roster-window.c:1933
+#: ../src/empathy-roster-window.c:1952
msgid "Contact"
msgstr "Contact"
-#: ../src/empathy-roster-window.c:2131
+#: ../src/empathy-roster-window.c:2150
msgid "You need to enable one of your accounts to see contacts here."
msgstr "You need to enable one of your accounts to see contacts here."
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2139
+#: ../src/empathy-roster-window.c:2158
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr "You need to enable %s to see contacts here."
-#: ../src/empathy-roster-window.c:2419
+#: ../src/empathy-roster-window.c:2460
msgid "Contact List"
msgstr "Contact List"
@@ -4150,7 +4071,7 @@ msgstr "Members"
#. Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
#. yes/no, yes/no and a number.
-#: ../src/empathy-new-chatroom-dialog.c:637
+#: ../src/empathy-new-chatroom-dialog.c:636
#, c-format
msgid ""
"%s\n"
@@ -4163,16 +4084,21 @@ msgstr ""
"Password required: %s\n"
"Members: %s"
+#: ../src/empathy-new-chatroom-dialog.c:638
+#: ../src/empathy-new-chatroom-dialog.c:639
+msgid "Yes"
+msgstr "Yes"
+
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "No"
msgstr "No"
-#: ../src/empathy-new-chatroom-dialog.c:668
+#: ../src/empathy-new-chatroom-dialog.c:666
msgid "Could not start room listing"
msgstr "Could not start room listing"
-#: ../src/empathy-new-chatroom-dialog.c:678
+#: ../src/empathy-new-chatroom-dialog.c:676
msgid "Could not stop room listing"
msgstr "Could not stop room listing"
@@ -4239,46 +4165,46 @@ msgid "Language"
msgstr "Language"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:726
+#: ../src/empathy-preferences.c:724
msgid "Juliet"
msgstr "Juliet"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:733
+#: ../src/empathy-preferences.c:731
msgid "Romeo"
msgstr "Romeo"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:739
+#: ../src/empathy-preferences.c:737
msgid "O Romeo, Romeo, wherefore art thou Romeo?"
msgstr "O Romeo, Romeo, wherefore art thou Romeo?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:743
+#: ../src/empathy-preferences.c:741
msgid "Deny thy father and refuse thy name;"
msgstr "Deny thy father and refuse thy name;"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:746
+#: ../src/empathy-preferences.c:744
msgid "Or if thou wilt not, be but sworn my love"
msgstr "Or if thou wilt not, be but sworn my love"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:749
+#: ../src/empathy-preferences.c:747
msgid "And I'll no longer be a Capulet."
msgstr "And I'll no longer be a Capulet."
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:752
+#: ../src/empathy-preferences.c:750
msgid "Shall I hear more, or shall I speak at this?"
msgstr "Shall I hear more, or shall I speak at this?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:755
+#: ../src/empathy-preferences.c:753
msgid "Juliet has disconnected"
msgstr "Juliet has disconnected"
-#: ../src/empathy-preferences.c:1159
+#: ../src/empathy-preferences.c:1157
msgid "Preferences"
msgstr "Preferences"
@@ -4368,7 +4294,7 @@ msgstr "Sounds"
#: ../src/empathy-preferences.ui.h:22
msgid "Use _echo cancellation to improve call quality"
-msgstr "Use _echo cancellllation to improve call quality"
+msgstr "Use _echo cancellation to improve call quality"
#: ../src/empathy-preferences.ui.h:23
msgid ""
@@ -4377,10 +4303,10 @@ msgid ""
"hear strange noises or glitches during calls, try turning echo cancellation "
"off and restarting the call."
msgstr ""
-"Echo cancellllation helps to make your voice sound clearer to the other "
+"Echo cancellation helps to make your voice sound clearer to the other "
"person, but may cause problems on some computers. If you or the other person "
"hear strange noises or glitches during calls, try turning echo "
-"cancellllation off and restarting the call."
+"cancellation off and restarting the call."
#: ../src/empathy-preferences.ui.h:26
msgid "_Publish location to my contacts"
@@ -4509,63 +4435,79 @@ msgstr "Enable camera and send video"
msgid "Contact Map View"
msgstr "Contact Map View"
-#: ../src/empathy-debug-window.c:1228
+#: ../src/empathy-debug-window.c:1607
msgid "Save"
msgstr "Save"
-#: ../src/empathy-debug-window.c:1435
+#: ../src/empathy-debug-window.c:1667
+msgid "Pastebin link"
+msgstr ""
+
+#: ../src/empathy-debug-window.c:1676
+msgid "Pastebin response"
+msgstr ""
+
+#: ../src/empathy-debug-window.c:1683
+msgid "Data too large for a single paste. Please save logs to file."
+msgstr ""
+
+#: ../src/empathy-debug-window.c:1912
msgid "Debug Window"
msgstr "Debug Window"
-#: ../src/empathy-debug-window.c:1517
+#: ../src/empathy-debug-window.c:1970
+msgid "Send to pastebin"
+msgstr ""
+
+#: ../src/empathy-debug-window.c:2009
msgid "Pause"
msgstr "Pause"
-#: ../src/empathy-debug-window.c:1529
+#: ../src/empathy-debug-window.c:2021
msgid "Level "
msgstr "Level "
-#: ../src/empathy-debug-window.c:1549
+#: ../src/empathy-debug-window.c:2040
msgid "Debug"
msgstr "Debug"
-#: ../src/empathy-debug-window.c:1555
+#: ../src/empathy-debug-window.c:2045
msgid "Info"
msgstr "Info"
-#: ../src/empathy-debug-window.c:1561 ../src/empathy-debug-window.c:1610
+#: ../src/empathy-debug-window.c:2050 ../src/empathy-debug-window.c:2096
msgid "Message"
msgstr "Message"
-#: ../src/empathy-debug-window.c:1567
+#: ../src/empathy-debug-window.c:2055
msgid "Warning"
msgstr "Warning"
-#: ../src/empathy-debug-window.c:1573
+#: ../src/empathy-debug-window.c:2060
msgid "Critical"
msgstr "Critical"
-#: ../src/empathy-debug-window.c:1579
+#: ../src/empathy-debug-window.c:2065
msgid "Error"
msgstr "Error"
-#: ../src/empathy-debug-window.c:1598
+#: ../src/empathy-debug-window.c:2084
msgid "Time"
msgstr "Time"
-#: ../src/empathy-debug-window.c:1601
+#: ../src/empathy-debug-window.c:2087
msgid "Domain"
msgstr "Domain"
-#: ../src/empathy-debug-window.c:1603
+#: ../src/empathy-debug-window.c:2089
msgid "Category"
msgstr "Category"
-#: ../src/empathy-debug-window.c:1605
+#: ../src/empathy-debug-window.c:2091
msgid "Level"
msgstr "Level"
-#: ../src/empathy-debug-window.c:1642
+#: ../src/empathy-debug-window.c:2114
msgid ""
"The selected connection manager does not support the remote debugging "
"extension."
@@ -4573,47 +4515,43 @@ msgstr ""
"The selected connection manager does not support the remote debugging "
"extension."
-#: ../src/empathy-invite-participant-dialog.c:200
-#: ../src/empathy-invite-participant-dialog.c:228
+#: ../src/empathy-invite-participant-dialog.c:202
+#: ../src/empathy-invite-participant-dialog.c:230
msgid "Invite Participant"
msgstr "Invite Participant"
-#: ../src/empathy-invite-participant-dialog.c:201
+#: ../src/empathy-invite-participant-dialog.c:203
msgid "Choose a contact to invite into the conversation:"
msgstr "Choose a contact to invite into the conversation:"
-#: ../src/empathy-invite-participant-dialog.c:224
+#: ../src/empathy-invite-participant-dialog.c:226
msgid "Invite"
msgstr "Invite"
-#: ../src/empathy-accounts.c:183
+#: ../src/empathy-accounts.c:180
msgid "Don't display any dialogs; do any work (eg, importing) and exit"
msgstr "Don't display any dialogs; do any work (eg, importing) and exit"
-#: ../src/empathy-accounts.c:187
+#: ../src/empathy-accounts.c:184
msgid ""
"Don't display any dialogs unless there are only \"People Nearby\" accounts"
msgstr ""
"Don't display any dialogs unless there are only \"People Nearby\" accounts"
-#: ../src/empathy-accounts.c:191
+#: ../src/empathy-accounts.c:188
msgid "Initially select given account (eg, gabble/jabber/foo_40example_2eorg0)"
msgstr ""
"Initially select given account (eg, gabble/jabber/foo_40example_2eorg0)"
-#: ../src/empathy-accounts.c:193
+#: ../src/empathy-accounts.c:190
msgid "<account-id>"
msgstr "<account-id>"
-#: ../src/empathy-accounts.c:196
-msgid "Show account assistant"
-msgstr "Show account assistant"
-
-#: ../src/empathy-accounts.c:202
+#: ../src/empathy-accounts.c:195
msgid "- Empathy Accounts"
msgstr "- Empathy Accounts"
-#: ../src/empathy-accounts.c:238
+#: ../src/empathy-accounts.c:231
msgid "Empathy Accounts"
msgstr "Empathy Accounts"
@@ -4629,7 +4567,7 @@ msgstr "- Empathy Debugger"
msgid "Empathy Debugger"
msgstr "Empathy Debugger"
-#: ../src/empathy-chat.c:107
+#: ../src/empathy-chat.c:109
msgid "- Empathy Chat Client"
msgstr "- Empathy Chat Client"
@@ -4638,13 +4576,13 @@ msgid "Respond"
msgstr "Respond"
#: ../src/empathy-notifications-approver.c:204
-#: ../src/empathy-call-window.c:1565
+#: ../src/empathy-call-window.c:1493
msgid "Reject"
msgstr "Reject"
#: ../src/empathy-notifications-approver.c:209
#: ../src/empathy-notifications-approver.c:214
-#: ../src/empathy-call-window.c:1566
+#: ../src/empathy-call-window.c:1494
msgid "Answer"
msgstr "Answer"
@@ -4669,45 +4607,45 @@ msgstr "Accept"
msgid "Provide"
msgstr "Provide"
-#: ../src/empathy-call-observer.c:134
+#: ../src/empathy-call-observer.c:132
#, c-format
msgid "%s just tried to call you, but you were in another call."
msgstr "%s just tried to call you, but you were in another call."
#. Translators: this is an "Info" label. It should be as short
#. * as possible.
-#: ../src/empathy-call-window.c:1172 ../src/empathy-call-window.c:1195
+#: ../src/empathy-call-window.c:1124 ../src/empathy-call-window.c:1140
msgid "i"
msgstr "i"
-#: ../src/empathy-call-window.c:2929
+#: ../src/empathy-call-window.c:2860
msgid "On hold"
msgstr "On hold"
-#: ../src/empathy-call-window.c:2932
+#: ../src/empathy-call-window.c:2863
msgid "Mute"
msgstr "Mute"
-#: ../src/empathy-call-window.c:2934
+#: ../src/empathy-call-window.c:2865
msgid "Duration"
msgstr "Duration"
#. Translators: 'status - minutes:seconds' the caller has been connected
-#: ../src/empathy-call-window.c:2937
+#: ../src/empathy-call-window.c:2868
#, c-format
msgid "%s — %d:%02dm"
msgstr "%s — %d:%02dm"
-#: ../src/empathy-call-window.c:3207
+#: ../src/empathy-call-window.c:3138
#, c-format
msgid "Your current balance is %s."
msgstr "Your current balance is %s."
-#: ../src/empathy-call-window.c:3211
+#: ../src/empathy-call-window.c:3142
msgid "Sorry, you don’t have enough credit for that call."
msgstr "Sorry, you don’t have enough credit for that call."
-#: ../src/empathy-call-window.c:3213
+#: ../src/empathy-call-window.c:3144
msgid "Top Up"
msgstr "Top Up"
@@ -4715,6 +4653,147 @@ msgstr "Top Up"
msgid "_Match case"
msgstr "_Match case"
+#: ../libempathy-gtk/empathy-new-account-dialog.c:144
+msgid "What kind of chat account do you have?"
+msgstr "What kind of chat account do you have?"
+
#: ../libempathy-gtk/empathy-new-account-dialog.c:166
msgid "Adding new account"
msgstr "Adding new account"
+
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:77
+msgid "People nearby"
+msgstr "People nearby"
+
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:150
+#, fuzzy
+#| msgid ""
+#| "Empathy can automatically discover and chat with the people connected on "
+#| "the same network as you. If you want to use this feature, please check "
+#| "that the details below are correct. You can easily change these details "
+#| "later or disable this feature by using the 'Accounts' dialog"
+msgid ""
+"Empathy can automatically discover and chat with the people connected on the "
+"same network as you. If you want to use this feature, please check that the "
+"details below are correct."
+msgstr ""
+"Empathy can automatically discover and chat with the people connected on the "
+"same network as you. If you want to use this feature, please check that the "
+"details below are correct. You can easily change these details later or "
+"disable this feature by using the 'Accounts' dialog"
+
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:183
+msgid ""
+"You can change these details later or disable this feature by choosing <span "
+"style=\"italic\">Edit → Accounts</span> in the Contact List."
+msgstr ""
+
+#~ msgid "There was an error while importing the accounts."
+#~ msgstr "There was an error while importing the accounts."
+
+#~ msgid "There was an error while parsing the account details."
+#~ msgstr "There was an error while parsing the account details."
+
+#~ msgid "There was an error while creating the account."
+#~ msgstr "There was an error while creating the account."
+
+#~ msgid "There was an error."
+#~ msgstr "There was an error."
+
+#~ msgid "The error message was: %s"
+#~ msgstr "The error message was: %s"
+
+#~ msgid ""
+#~ "You can either go back and try to enter your accounts' details again or "
+#~ "quit this assistant and add accounts later from the Edit menu."
+#~ msgstr ""
+#~ "You can either go back and try to enter your accounts' details again or "
+#~ "quit this assistant and add accounts later from the Edit menu."
+
+#~ msgid "An error occurred"
+#~ msgstr "An error occurred"
+
+#~ msgid "Do you have any other chat accounts you want to set up?"
+#~ msgstr "Do you have any other chat accounts you want to set up?"
+
+#~ msgid "Enter your account details"
+#~ msgstr "Enter your account details"
+
+#~ msgid "What kind of chat account do you want to create?"
+#~ msgstr "What kind of chat account do you want to create?"
+
+#~ msgid "Do you want to create other chat accounts?"
+#~ msgstr "Do you want to create other chat accounts?"
+
+#~ msgid "Enter the details for the new account"
+#~ msgstr "Enter the details for the new account"
+
+#~ msgid ""
+#~ "With Empathy you can chat with people online nearby and with friends and "
+#~ "colleagues who use Google Talk, AIM, Windows Live and many other chat "
+#~ "programs. With a microphone or a webcam you can also have audio or video "
+#~ "calls."
+#~ msgstr ""
+#~ "With Empathy you can chat with people online nearby and with friends and "
+#~ "colleagues who use Google Talk, AIM, Windows Live and many other chat "
+#~ "programs. With a microphone or a webcam you can also have audio or video "
+#~ "calls."
+
+#~ msgid "Do you have an account you've been using with another chat program?"
+#~ msgstr "Do you have an account you've been using with another chat program?"
+
+#~ msgid "Yes, import my account details from "
+#~ msgstr "Yes, import my account details from "
+
+#~ msgid "Yes, I'll enter my account details now"
+#~ msgstr "Yes, I'll enter my account details now"
+
+#~ msgid "No, I want a new account"
+#~ msgstr "No, I want a new account"
+
+#~ msgid "No, I just want to see people online nearby for now"
+#~ msgstr "No, I just want to see people online nearby for now"
+
+#~ msgid "Select the accounts you want to import:"
+#~ msgstr "Select the accounts you want to import:"
+
+#~ msgid "No, that's all for now"
+#~ msgstr "No, that's all for now"
+
+#~ msgid "Edit->Accounts"
+#~ msgstr "Edit->Accounts"
+
+#~ msgid "I do _not want to enable this feature for now"
+#~ msgstr "I do _not want to enable this feature for now"
+
+#~ msgid ""
+#~ "You won't be able to chat with people connected to your local network, as "
+#~ "telepathy-salut is not installed. If you want to enable this feature, "
+#~ "please install the telepathy-salut package and create a People Nearby "
+#~ "account from the Accounts dialog"
+#~ msgstr ""
+#~ "You won't be able to chat with people connected to your local network, as "
+#~ "telepathy-salut is not installed. If you want to enable this feature, "
+#~ "please install the telepathy-salut package and create a People Nearby "
+#~ "account from the Accounts dialog"
+
+#~ msgid "telepathy-salut not installed"
+#~ msgstr "telepathy-salut not installed"
+
+#~ msgid "Messaging and VoIP Accounts Assistant"
+#~ msgstr "Messaging and VoIP Accounts Assistant"
+
+#~ msgid "Welcome to Empathy"
+#~ msgstr "Welcome to Empathy"
+
+#~ msgid "Import your existing accounts"
+#~ msgstr "Import your existing accounts"
+
+#~ msgid "Please enter personal details"
+#~ msgstr "Please enter personal details"
+
+#~ msgid "Protocol:"
+#~ msgstr "Protocol:"
+
+#~ msgid "Show account assistant"
+#~ msgstr "Show account assistant"
diff --git a/po/es.po b/po/es.po
index 54e0136b1..b2f6c8399 100644
--- a/po/es.po
+++ b/po/es.po
@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: empathy.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=empathy&keywords=I18N+L10N&component=General\n"
-"POT-Creation-Date: 2012-03-16 10:47+0000\n"
-"PO-Revision-Date: 2012-03-16 14:13+0100\n"
+"POT-Creation-Date: 2012-05-15 11:54+0000\n"
+"PO-Revision-Date: 2012-05-16 11:53+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"MIME-Version: 1.0\n"
@@ -37,7 +37,7 @@ msgstr "Chatee en Google Talk, Facebook, MSN y muchos otros servicios de chat"
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2512
+#: ../src/empathy-accounts-dialog.c:2511
msgid "Messaging and VoIP Accounts"
msgstr "Cuentas de mensajería y Voz IP"
@@ -45,11 +45,11 @@ msgstr "Cuentas de mensajería y Voz IP"
msgid "Manage Messaging and VoIP accounts"
msgstr "Gestionar las cuentas de mensajería y Voz IP"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:1
+#: ../data/org.gnome.Empathy.gschema.xml.h:1
msgid "Connection managers should be used"
msgstr "Se deberían usar gestores de conexión"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:2
+#: ../data/org.gnome.Empathy.gschema.xml.h:2
msgid ""
"Whether connectivity managers should be used to automatically disconnect/"
"reconnect."
@@ -57,41 +57,42 @@ msgstr ""
"Indica si se debe usan usar gestores de conectividad para desconectarse/"
"reconectarse automáticamente."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:3
+#: ../data/org.gnome.Empathy.gschema.xml.h:3
msgid "Empathy should auto-connect on startup"
msgstr "Empathy se debería autoconectar al inicio"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:4
+#: ../data/org.gnome.Empathy.gschema.xml.h:4
msgid "Whether Empathy should automatically log into your accounts on startup."
msgstr ""
"Indica si Empathy debe iniciar sesión en sus cuentas automáticamente al "
"inicio."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:5
+#: ../data/org.gnome.Empathy.gschema.xml.h:5
msgid "Empathy should auto-away when idle"
msgstr "Empathy debería mostrar ausencia en inactividad"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:6
+#: ../data/org.gnome.Empathy.gschema.xml.h:6
msgid ""
"Whether Empathy should go into away mode automatically if the user is idle."
msgstr ""
"Indica si Empathy debe entrar en modo de ausencia automáticamente si el "
"usuario está inactivo."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:7
+#: ../data/org.gnome.Empathy.gschema.xml.h:7
msgid "Empathy default download folder"
msgstr "Carpeta de descargas predeterminada de Epiphany"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:8
+#: ../data/org.gnome.Empathy.gschema.xml.h:8
msgid "The default folder to save file transfers in."
msgstr "La carpeta predeterminada donde guardar los archivos transferidos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:9
+#. translators: Automatic tasks which are run once to port/update account settings. Ideally, this shouldn't be exposed to users at all, we just use a gsettings key here as an optimization to only run it only once.
+#: ../data/org.gnome.Empathy.gschema.xml.h:10
msgid "Magic number used to check if sanity cleaning tasks should be run"
msgstr ""
"Número mágico usado para comprobar si se deben ejecutar tareas de limpieza"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:10
+#: ../data/org.gnome.Empathy.gschema.xml.h:11
msgid ""
"empathy-sanity-cleaning.c uses this number to check if the cleaning tasks "
"should be executed or not. Users should not change this key manually."
@@ -100,82 +101,83 @@ msgstr ""
"ejecutar o no las tareas de limpieza. Los usuarios no deben cambiar esta "
"clave manualmente."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:11
+#: ../data/org.gnome.Empathy.gschema.xml.h:12
+#: ../src/empathy-preferences.ui.h:1
msgid "Show offline contacts"
msgstr "Mostrar contactos no conectados"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
+#: ../data/org.gnome.Empathy.gschema.xml.h:13
msgid "Whether to show contacts that are offline in the contact list."
msgstr ""
"Indica si se debe mostrar los contactos que están desconectados en la lista "
"de contactos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
+#: ../data/org.gnome.Empathy.gschema.xml.h:14
msgid "Show avatars"
msgstr "Mostrar avatares"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
+#: ../data/org.gnome.Empathy.gschema.xml.h:15
msgid ""
"Whether to show avatars for contacts in the contact list and chat windows."
msgstr ""
"Indica si se deben mostrar los avatares para los contactos en la lista de "
"contactos y ventanas de chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
+#: ../data/org.gnome.Empathy.gschema.xml.h:16
msgid "Show protocols"
msgstr "Mostrar protocolos"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
+#: ../data/org.gnome.Empathy.gschema.xml.h:17
msgid "Whether to show protocols for contacts in the contact list."
msgstr ""
"Indica si se deben mostrar los protocolos para los contactos en la lista de "
"contactos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
+#: ../data/org.gnome.Empathy.gschema.xml.h:18
msgid "Show Balance in contact list"
msgstr "Mostrar crédito en la lista de contactos"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
+#: ../data/org.gnome.Empathy.gschema.xml.h:19
msgid "Whether to show account balances in the contact list."
msgstr "Indica si se debe mostrar el crédito en la lista de contactos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
+#: ../data/org.gnome.Empathy.gschema.xml.h:20
msgid "Compact contact list"
msgstr "Lista compacta de contactos"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
+#: ../data/org.gnome.Empathy.gschema.xml.h:21
msgid "Whether to show the contact list in compact mode."
msgstr "Indica si se debe mostrar la lista de contactos en modo compacto."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
+#: ../data/org.gnome.Empathy.gschema.xml.h:22
msgid "Hide main window"
msgstr "Ocultar la ventana principal"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
+#: ../data/org.gnome.Empathy.gschema.xml.h:23
msgid "Hide the main window."
msgstr "Ocultar la ventana principal."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
+#: ../data/org.gnome.Empathy.gschema.xml.h:24
msgid "Default directory to select an avatar image from"
msgstr "Carpeta predeterminada para seleccionar un avatar"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
+#: ../data/org.gnome.Empathy.gschema.xml.h:25
msgid "The last directory that an avatar image was chosen from."
msgstr "Última carpeta de la que se eligió un avatar."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
+#: ../data/org.gnome.Empathy.gschema.xml.h:26
msgid "Open new chats in separate windows"
msgstr "Abrir chats nuevos en ventanas separadas"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
+#: ../data/org.gnome.Empathy.gschema.xml.h:27
msgid "Always open a separate chat window for new chats."
msgstr "Siempre abrir una ventana de chat separada para chats nuevos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
+#: ../data/org.gnome.Empathy.gschema.xml.h:28
msgid "Display incoming events in the status area"
msgstr "Mostrar los eventos entrantes en el área de estado"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
+#: ../data/org.gnome.Empathy.gschema.xml.h:29
msgid ""
"Display incoming events in the status area. If false, present them to the "
"user immediately."
@@ -183,29 +185,29 @@ msgstr ""
"Mostrar los eventos entrantes en el área de estado. Si es falso presentarlos "
"directamente al usuario."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
+#: ../data/org.gnome.Empathy.gschema.xml.h:30
msgid "The position for the chat window side pane"
msgstr "La posición para el panel lateral de la ventana de charla"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
+#: ../data/org.gnome.Empathy.gschema.xml.h:31
msgid "The stored position (in pixels) of the chat window side pane."
msgstr ""
"La posición almacenada (en píxeles) del panel lateral de la ventana de "
"charla."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
+#: ../data/org.gnome.Empathy.gschema.xml.h:32
msgid "Show contact groups"
msgstr "Mostrar grupos de contactos"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
+#: ../data/org.gnome.Empathy.gschema.xml.h:33
msgid "Whether to show groups in the contact list."
msgstr "Indica si se deben mostrar los grupos en la lista de contactos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
+#: ../data/org.gnome.Empathy.gschema.xml.h:34
msgid "Contact list sort criterion"
msgstr "Criterio de ordenación de la lista de contactos"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
+#: ../data/org.gnome.Empathy.gschema.xml.h:35
msgid ""
"Which criterion to use when sorting the contact list. Default is to sort by "
"the contact's state with the value \"state\". A value of \"name\" will sort "
@@ -215,114 +217,114 @@ msgstr ""
"ordenar por el estado del contacto con el valor «state» (estado). Un valor "
"«nombre» (nombre) ordenará la lista por el nombre."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
+#: ../data/org.gnome.Empathy.gschema.xml.h:36
msgid "Use notification sounds"
msgstr "Usar sonidos de notificación"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
+#: ../data/org.gnome.Empathy.gschema.xml.h:37
msgid "Whether to play a sound to notify of events."
msgstr "Indica si se debe reproducir un sonido para notificar eventos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
+#: ../data/org.gnome.Empathy.gschema.xml.h:38
msgid "Disable sounds when away"
msgstr "Desactivar los sonidos al ausentarse"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
+#: ../data/org.gnome.Empathy.gschema.xml.h:39
msgid "Whether to play sound notifications when away or busy."
msgstr ""
"Indica si se deben reproducir sonidos de notificaciones cuando se esté "
"ausente u ocupado."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
+#: ../data/org.gnome.Empathy.gschema.xml.h:40
msgid "Play a sound for incoming messages"
msgstr "Reproducir un sonido cuando lleguen mensajes"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
+#: ../data/org.gnome.Empathy.gschema.xml.h:41
msgid "Whether to play a sound to notify of incoming messages."
msgstr ""
"Indica si se debe reproducir un sonido para notificar mensajes entrantes."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
+#: ../data/org.gnome.Empathy.gschema.xml.h:42
msgid "Play a sound for outgoing messages"
msgstr "Reproducir un sonido al enviar mensajes"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
+#: ../data/org.gnome.Empathy.gschema.xml.h:43
msgid "Whether to play a sound to notify of outgoing messages."
msgstr ""
"Indica si se debe reproducir un sonido para notificar mensajes salientes."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
+#: ../data/org.gnome.Empathy.gschema.xml.h:44
msgid "Play a sound for new conversations"
msgstr "Reproducir un sonido para conversaciones nuevas"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
+#: ../data/org.gnome.Empathy.gschema.xml.h:45
msgid "Whether to play a sound to notify of new conversations."
msgstr ""
"Indica si se debe reproducir un sonido para notificar conversaciones nuevas."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
+#: ../data/org.gnome.Empathy.gschema.xml.h:46
msgid "Play a sound when a contact logs in"
msgstr "Reproducir un sonido cuando un contacto inicie sesión"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
+#: ../data/org.gnome.Empathy.gschema.xml.h:47
msgid "Whether to play a sound to notify of contacts logging into the network."
msgstr ""
"Indica si se debe reproducir un sonido para notificar los inicios de sesión "
"de los contactos en la red."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
+#: ../data/org.gnome.Empathy.gschema.xml.h:48
msgid "Play a sound when a contact logs out"
msgstr "Reproducir un sonido cuando un contacto finalice su sesión"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
+#: ../data/org.gnome.Empathy.gschema.xml.h:49
msgid ""
"Whether to play a sound to notify of contacts logging out of the network."
msgstr ""
"Indica si se debe reproducir un sonido para notificar las finalizaciones de "
"sesión de los contactos en la red."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
+#: ../data/org.gnome.Empathy.gschema.xml.h:50
msgid "Play a sound when we log in"
msgstr "Reproducir un sonido cuando inicio sesión"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
+#: ../data/org.gnome.Empathy.gschema.xml.h:51
msgid "Whether to play a sound when logging into a network."
msgstr "Indica si se debe reproducir un sonido al iniciar sesión en una red."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
+#: ../data/org.gnome.Empathy.gschema.xml.h:52
msgid "Play a sound when we log out"
msgstr "Reproducir un sonido al finalizar una sesión"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
+#: ../data/org.gnome.Empathy.gschema.xml.h:53
msgid "Whether to play a sound when logging out of a network."
msgstr "Indica si se debe reproducir un sonido al finalizar sesión en una red."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
+#: ../data/org.gnome.Empathy.gschema.xml.h:54
msgid "Enable popup notifications for new messages"
msgstr "Activar notificaciones emergentes para mensajes nuevos"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
+#: ../data/org.gnome.Empathy.gschema.xml.h:55
msgid "Whether to show a popup notification when receiving a new message."
msgstr ""
"Indica si se deben mostrar notificaciones emergentes al recibir un mensaje "
"nuevo."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
+#: ../data/org.gnome.Empathy.gschema.xml.h:56
msgid "Disable popup notifications when away"
msgstr "Desactivar las notificaciones emergentes al estar ausente"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
+#: ../data/org.gnome.Empathy.gschema.xml.h:57
msgid "Whether to show popup notifications when away or busy."
msgstr ""
"Indica si se deben mostrar las notificaciones emergentes cuando se esté "
"ausente u ocupado."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
+#: ../data/org.gnome.Empathy.gschema.xml.h:58
msgid "Pop up notifications if the chat isn't focused"
msgstr ""
"Mostrar notificaciones emergentes si la ventana de chat no tiene el foco"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
+#: ../data/org.gnome.Empathy.gschema.xml.h:59
msgid ""
"Whether to show a popup notification when receiving a new message even if "
"the chat is already opened, but not focused."
@@ -330,88 +332,88 @@ msgstr ""
"Indica si de deben mostrar notificaciones emergentes al recibir un mensaje "
"nuevo incluso si la ventana de chat ya está abierta pero no tiene el foco."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
+#: ../data/org.gnome.Empathy.gschema.xml.h:60
msgid "Pop up notifications when a contact logs in"
msgstr "Mostrar notificaciones emergentes cuando un contacto se conecta"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
+#: ../data/org.gnome.Empathy.gschema.xml.h:61
msgid "Whether to show a popup notification when a contact goes online."
msgstr ""
"Indica si se deben mostrar las notificaciones emergentes cuando un contacto "
"se conecta."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
+#: ../data/org.gnome.Empathy.gschema.xml.h:62
msgid "Pop up notifications when a contact logs out"
msgstr "Mostrar notificaciones emergentes cuando un contacto se desconecta"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
+#: ../data/org.gnome.Empathy.gschema.xml.h:63
msgid "Whether to show a popup notification when a contact goes offline."
msgstr ""
"Indica si se deben mostrar las notificaciones emergentes cuando un contacto "
"se desconecta."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
+#: ../data/org.gnome.Empathy.gschema.xml.h:64
msgid "Use graphical smileys"
msgstr "Usar emoticonos gráficos"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
+#: ../data/org.gnome.Empathy.gschema.xml.h:65
msgid "Whether to convert smileys into graphical images in conversations."
msgstr ""
"Indica si se deben convertir los emoticonos en imágenes gráficas en las "
"conversaciones."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
+#: ../data/org.gnome.Empathy.gschema.xml.h:66
msgid "Show contact list in rooms"
msgstr "Mostrar lista de contactos en salas"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
+#: ../data/org.gnome.Empathy.gschema.xml.h:67
msgid "Whether to show the contact list in chat rooms."
msgstr "Indica si se debe mostrar la lista de contactos en salas de chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
+#: ../data/org.gnome.Empathy.gschema.xml.h:68
msgid "Chat window theme"
msgstr "Tema de la ventana de charla"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
+#: ../data/org.gnome.Empathy.gschema.xml.h:69
msgid "The theme that is used to display the conversation in chat windows."
msgstr ""
"El tema que se usará para mostrar la conversación en las ventanas de chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
+#: ../data/org.gnome.Empathy.gschema.xml.h:70
msgid "Chat window theme variant"
msgstr "Variante del tema de la ventana de charla"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
+#: ../data/org.gnome.Empathy.gschema.xml.h:71
msgid ""
"The theme variant that is used to display the conversation in chat windows."
msgstr ""
"La variante del tema que se usará para mostrar la conversación en las "
"ventanas de chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
+#: ../data/org.gnome.Empathy.gschema.xml.h:72
msgid "Path of the Adium theme to use"
msgstr "Ruta del tema Adium que usar"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
+#: ../data/org.gnome.Empathy.gschema.xml.h:73
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/org.gnome.Empathy.gschema.xml.in.h:73
+#: ../data/org.gnome.Empathy.gschema.xml.h:74
msgid "Enable WebKit Developer Tools"
msgstr "Activar las herramientas de desarrollo de WebKit"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
+#: ../data/org.gnome.Empathy.gschema.xml.h:75
msgid ""
"Whether WebKit developer tools, such as the Web Inspector, should be enabled."
msgstr ""
"Indica si las herramientas de desarrollo de WebKit, tales como el Inspector "
"web, den activarse."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:75
+#: ../data/org.gnome.Empathy.gschema.xml.h:76
msgid "Inform other users when you are typing to them"
msgstr "Informar a otros usuarios de cuándo les esta escribiendo"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:76
+#: ../data/org.gnome.Empathy.gschema.xml.h:77
msgid ""
"Whether to send the 'composing' or 'paused' chat states. Does not currently "
"affect the 'gone' state."
@@ -419,41 +421,41 @@ msgstr ""
"Indica si enviar los estados de chat «escribiendo» o «en pausa». No afecta al "
"estado «ausente»."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:77
+#: ../data/org.gnome.Empathy.gschema.xml.h:78
msgid "Use theme for chat rooms"
msgstr "Usar tema para salas de chat"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
+#: ../data/org.gnome.Empathy.gschema.xml.h:79
msgid "Whether to use the theme for chat rooms."
msgstr "Indica si se debe usar el tema para salas de chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
+#: ../data/org.gnome.Empathy.gschema.xml.h:80
msgid "Spell checking languages"
msgstr "Idiomas para revisión ortográfica"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:80
+#: ../data/org.gnome.Empathy.gschema.xml.h:81
msgid ""
"Comma-separated list of spell checker languages to use (e.g. \"en, fr, nl\")."
msgstr ""
"Lista separada por comas de idiomas que se usarán en la revisión ortográfica "
"(ej. «es, en, fr»)."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
+#: ../data/org.gnome.Empathy.gschema.xml.h:82
msgid "Enable spell checker"
msgstr "Activar revisor ortográfico"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
+#: ../data/org.gnome.Empathy.gschema.xml.h:83
msgid ""
"Whether to check words typed against the languages you want to check with."
msgstr ""
"Indica si se deben revisar las palabras tecleadas con respecto a los idiomas "
"con los que quiere comprobarlo."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
+#: ../data/org.gnome.Empathy.gschema.xml.h:84
msgid "Nick completed character"
msgstr "Carácter de completado de apodo"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:84
+#: ../data/org.gnome.Empathy.gschema.xml.h:85
msgid ""
"Character to add after nickname when using nick completion (tab) in group "
"chat."
@@ -461,60 +463,60 @@ msgstr ""
"Carácter que añadir después del apodo cuando se usa el completado de apodos "
"(tab) en salas de chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
+#: ../data/org.gnome.Empathy.gschema.xml.h:86
msgid "Empathy should use the avatar of the contact as the chat window icon"
msgstr ""
"Empathy debería usar el avatar del contacto como icono de la ventana de chat"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
+#: ../data/org.gnome.Empathy.gschema.xml.h:87
msgid ""
"Whether Empathy should use the avatar of the contact as the chat window icon."
msgstr ""
"Indica si Empathy debería usar el avatar del contacto como el icono de la "
"ventana de chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:87
+#: ../data/org.gnome.Empathy.gschema.xml.h:88
msgid "Last account selected in Join Room dialog"
msgstr "Última cuenta seleccionada en el diálogo Unirse a sala"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:88
+#: ../data/org.gnome.Empathy.gschema.xml.h:89
msgid "D-Bus object path of the last account selected to join a room."
msgstr ""
"Ruta del objeto D-Bus de la última cuenta seleccionada para unirse a una "
"sala."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
+#: ../data/org.gnome.Empathy.gschema.xml.h:90
msgid "Camera device"
msgstr "Dispositivo de cámara"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
+#: ../data/org.gnome.Empathy.gschema.xml.h:91
msgid "Default camera device to use in video calls, e.g. /dev/video0."
msgstr ""
"El dispositivo de cámara predeterminado que usar en las llamadas de vídeo, "
"ej. /dev/video0."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
+#: ../data/org.gnome.Empathy.gschema.xml.h:92
msgid "Camera position"
msgstr "Posición de la cámara"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
+#: ../data/org.gnome.Empathy.gschema.xml.h:93
msgid "Position the camera preview should be during a call."
msgstr "Posición donde estar la vista previa de la cámara durante una llamada."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
+#: ../data/org.gnome.Empathy.gschema.xml.h:94
msgid "Echo cancellation support"
msgstr "Soporte de cancelación de eco"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
+#: ../data/org.gnome.Empathy.gschema.xml.h:95
msgid "Whether to enable Pulseaudio's echo cancellation filter."
msgstr ""
"Indica si se debe activar la el filtro de cancelación de eco de Pulseaudio."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
+#: ../data/org.gnome.Empathy.gschema.xml.h:96
msgid "Show hint about closing the main window"
msgstr "Mostrar consejo sobre cómo cerrar la ventana principal"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
+#: ../data/org.gnome.Empathy.gschema.xml.h:97
msgid ""
"Whether to show the message dialog about closing the main window with the "
"'x' button in the title bar."
@@ -522,247 +524,247 @@ msgstr ""
"Indica si se debe mostrar un mensaje de diálogo sobre cómo cerrar la ventana "
"principal con el botón «x» en la barra de título."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
+#: ../data/org.gnome.Empathy.gschema.xml.h:98
msgid "Empathy can publish the user's location"
msgstr "Empathy puede publicar la ubicación del usuario"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
+#: ../data/org.gnome.Empathy.gschema.xml.h:99
msgid "Whether Empathy can publish the user's location to their contacts."
msgstr ""
"Indica si Empathy puede publicar la ubicación del usuario a sus contactos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
+#: ../data/org.gnome.Empathy.gschema.xml.h:100
msgid "Empathy can use the network to guess the location"
msgstr "Empathy puede usar la red para deducir la ubicación"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
+#: ../data/org.gnome.Empathy.gschema.xml.h:101
msgid "Whether Empathy can use the network to guess the location."
msgstr "Indica si Empathy puede usar la red para deducir la ubicación."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:101
+#: ../data/org.gnome.Empathy.gschema.xml.h:102
msgid "Empathy can use the cellular network to guess the location"
msgstr "Empathy puede usar la red telefónica móvil para deducir la ubicación"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:102
+#: ../data/org.gnome.Empathy.gschema.xml.h:103
msgid "Whether Empathy can use the cellular network to guess the location."
msgstr ""
"Indica si Empathy puede usar la red telefónica móvil para deducir la "
"ubicación."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:103
+#: ../data/org.gnome.Empathy.gschema.xml.h:104
msgid "Empathy can use the GPS to guess the location"
msgstr "Empathy puede usar el GPS para deducir la ubicación"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:104
+#: ../data/org.gnome.Empathy.gschema.xml.h:105
msgid "Whether Empathy can use the GPS to guess the location."
msgstr "Indica si Empathy puede usar el GPS para deducir la ubicación."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:105
+#: ../data/org.gnome.Empathy.gschema.xml.h:106
msgid "Empathy should reduce the location's accuracy"
msgstr "Empathy debería reducir la precisión de la ubicación"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:106
+#: ../data/org.gnome.Empathy.gschema.xml.h:107
msgid ""
"Whether Empathy should reduce the location's accuracy for privacy reasons."
msgstr ""
"Indica si Empathy debería reducir la precisión de la ubicación por motivos "
"de privacidad."
-#: ../libempathy/empathy-ft-handler.c:738
+#: ../libempathy/empathy-ft-handler.c:737
msgid "No reason was specified"
msgstr "No se especificó ninguna razón"
-#: ../libempathy/empathy-ft-handler.c:741
+#: ../libempathy/empathy-ft-handler.c:740
msgid "The change in state was requested"
msgstr "Se requirió un cambio en el estado"
-#: ../libempathy/empathy-ft-handler.c:744
+#: ../libempathy/empathy-ft-handler.c:743
msgid "You canceled the file transfer"
msgstr "Canceló la transferencia del archivo"
-#: ../libempathy/empathy-ft-handler.c:747
+#: ../libempathy/empathy-ft-handler.c:746
msgid "The other participant canceled the file transfer"
msgstr "El otro participante canceló la transferencia del archivo"
-#: ../libempathy/empathy-ft-handler.c:750
+#: ../libempathy/empathy-ft-handler.c:749
msgid "Error while trying to transfer the file"
msgstr "Error la intentar transferir el archivo"
-#: ../libempathy/empathy-ft-handler.c:753
+#: ../libempathy/empathy-ft-handler.c:752
msgid "The other participant is unable to transfer the file"
msgstr "El otro participante no puede transferir el archivo"
-#: ../libempathy/empathy-ft-handler.c:756 ../libempathy/empathy-utils.c:313
+#: ../libempathy/empathy-ft-handler.c:755 ../libempathy/empathy-utils.c:312
msgid "Unknown reason"
msgstr "Razón desconocida"
-#: ../libempathy/empathy-ft-handler.c:919
+#: ../libempathy/empathy-ft-handler.c:918
msgid "File transfer completed, but the file was corrupted"
msgstr "Se completó la transferencia de archivo pero el archivo está corrupto"
-#: ../libempathy/empathy-ft-handler.c:1205
+#: ../libempathy/empathy-ft-handler.c:1204
msgid "File transfer not supported by remote contact"
msgstr "El contacto remoto no soporta la transferencia de archivos"
-#: ../libempathy/empathy-ft-handler.c:1261
+#: ../libempathy/empathy-ft-handler.c:1260
msgid "The selected file is not a regular file"
msgstr "El archivo seleccionado no es un archivo regular"
-#: ../libempathy/empathy-ft-handler.c:1270
+#: ../libempathy/empathy-ft-handler.c:1269
msgid "The selected file is empty"
msgstr "El archivo seleccionado está vacío"
-#: ../libempathy/empathy-message.c:415 ../src/empathy-call-observer.c:129
+#: ../libempathy/empathy-message.c:407 ../src/empathy-call-observer.c:116
#, c-format
msgid "Missed call from %s"
msgstr "Llamada perdida de %s"
#. Translators: this is an outgoing call, e.g. 'Called Alice'
-#: ../libempathy/empathy-message.c:419
+#: ../libempathy/empathy-message.c:411
#, c-format
msgid "Called %s"
msgstr "Llamó %s"
-#: ../libempathy/empathy-message.c:422
+#: ../libempathy/empathy-message.c:414
#, c-format
msgid "Call from %s"
msgstr "Llamada de %s"
-#: ../libempathy/empathy-utils.c:233
+#: ../libempathy/empathy-utils.c:232
msgid "Available"
msgstr "Disponible"
-#: ../libempathy/empathy-utils.c:235
+#: ../libempathy/empathy-utils.c:234
msgid "Busy"
msgstr "Ocupado"
-#: ../libempathy/empathy-utils.c:238
+#: ../libempathy/empathy-utils.c:237
msgid "Away"
msgstr "Ausente"
-#: ../libempathy/empathy-utils.c:240
+#: ../libempathy/empathy-utils.c:239
msgid "Invisible"
msgstr "Invisible"
-#: ../libempathy/empathy-utils.c:242
+#: ../libempathy/empathy-utils.c:241
msgid "Offline"
msgstr "Desconectado"
#. translators: presence type is unknown
-#: ../libempathy/empathy-utils.c:245
+#: ../libempathy/empathy-utils.c:244
msgctxt "presence"
msgid "Unknown"
msgstr "Desconocido"
-#: ../libempathy/empathy-utils.c:285
+#: ../libempathy/empathy-utils.c:284
msgid "No reason specified"
msgstr "No se especificó ninguna razón"
-#: ../libempathy/empathy-utils.c:287 ../libempathy/empathy-utils.c:343
+#: ../libempathy/empathy-utils.c:286 ../libempathy/empathy-utils.c:342
msgid "Status is set to offline"
msgstr "El estado se ha establecido a desconectado"
-#: ../libempathy/empathy-utils.c:289 ../libempathy/empathy-utils.c:323
+#: ../libempathy/empathy-utils.c:288 ../libempathy/empathy-utils.c:322
#: ../libempathy-gtk/empathy-call-utils.c:47
-#: ../libempathy-gtk/empathy-new-message-dialog.c:81
+#: ../libempathy-gtk/empathy-new-message-dialog.c:80
msgid "Network error"
msgstr "Error de red"
-#: ../libempathy/empathy-utils.c:291 ../libempathy/empathy-utils.c:325
+#: ../libempathy/empathy-utils.c:290 ../libempathy/empathy-utils.c:324
msgid "Authentication failed"
msgstr "Falló la autenticación"
-#: ../libempathy/empathy-utils.c:293 ../libempathy/empathy-utils.c:327
+#: ../libempathy/empathy-utils.c:292 ../libempathy/empathy-utils.c:326
msgid "Encryption error"
msgstr "Error de cifrado"
-#: ../libempathy/empathy-utils.c:295
+#: ../libempathy/empathy-utils.c:294
msgid "Name in use"
msgstr "Nombre en uso"
-#: ../libempathy/empathy-utils.c:297 ../libempathy/empathy-utils.c:329
+#: ../libempathy/empathy-utils.c:296 ../libempathy/empathy-utils.c:328
msgid "Certificate not provided"
msgstr "No se proporcionó el certificado"
-#: ../libempathy/empathy-utils.c:299 ../libempathy/empathy-utils.c:331
+#: ../libempathy/empathy-utils.c:298 ../libempathy/empathy-utils.c:330
msgid "Certificate untrusted"
msgstr "Certificado sin confianza"
-#: ../libempathy/empathy-utils.c:301 ../libempathy/empathy-utils.c:333
+#: ../libempathy/empathy-utils.c:300 ../libempathy/empathy-utils.c:332
msgid "Certificate expired"
msgstr "El certificado ha expirado"
-#: ../libempathy/empathy-utils.c:303 ../libempathy/empathy-utils.c:335
+#: ../libempathy/empathy-utils.c:302 ../libempathy/empathy-utils.c:334
msgid "Certificate not activated"
msgstr "El certificado no está activado"
-#: ../libempathy/empathy-utils.c:305 ../libempathy/empathy-utils.c:337
+#: ../libempathy/empathy-utils.c:304 ../libempathy/empathy-utils.c:336
msgid "Certificate hostname mismatch"
msgstr "El nombre del equipo del certificado no coincide"
-#: ../libempathy/empathy-utils.c:307 ../libempathy/empathy-utils.c:339
+#: ../libempathy/empathy-utils.c:306 ../libempathy/empathy-utils.c:338
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
-#: ../libempathy/empathy-utils.c:309 ../libempathy/empathy-utils.c:341
+#: ../libempathy/empathy-utils.c:308 ../libempathy/empathy-utils.c:340
msgid "Certificate self-signed"
msgstr "Certificado firmado consigo mismo"
-#: ../libempathy/empathy-utils.c:311
+#: ../libempathy/empathy-utils.c:310
msgid "Certificate error"
msgstr "Error del certificado"
-#: ../libempathy/empathy-utils.c:345
+#: ../libempathy/empathy-utils.c:344
msgid "Encryption is not available"
msgstr "El cifrado no está disponible"
-#: ../libempathy/empathy-utils.c:347
+#: ../libempathy/empathy-utils.c:346
msgid "Certificate is invalid"
msgstr "El certificado no es válido"
-#: ../libempathy/empathy-utils.c:349
+#: ../libempathy/empathy-utils.c:348
msgid "Connection has been refused"
msgstr "Se rechazó la conexión"
-#: ../libempathy/empathy-utils.c:351
+#: ../libempathy/empathy-utils.c:350
msgid "Connection can't be established"
msgstr "No se pudo establecer la conexión"
-#: ../libempathy/empathy-utils.c:353
+#: ../libempathy/empathy-utils.c:352
msgid "Connection has been lost"
msgstr "Se perdió la conexión"
-#: ../libempathy/empathy-utils.c:355
+#: ../libempathy/empathy-utils.c:354
msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor"
-#: ../libempathy/empathy-utils.c:357
+#: ../libempathy/empathy-utils.c:356
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Se ha reemplazado la conexión por una conexión nueva usando el mismo recurso"
-#: ../libempathy/empathy-utils.c:360
+#: ../libempathy/empathy-utils.c:359
msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor"
-#: ../libempathy/empathy-utils.c:362
+#: ../libempathy/empathy-utils.c:361
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Actualmente el servidor está demasiado ocupado para gestionar la conexión"
-#: ../libempathy/empathy-utils.c:364
+#: ../libempathy/empathy-utils.c:363
msgid "Certificate has been revoked"
msgstr "Se revocó el certificado"
-#: ../libempathy/empathy-utils.c:366
+#: ../libempathy/empathy-utils.c:365
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
"débil"
-#: ../libempathy/empathy-utils.c:369
+#: ../libempathy/empathy-utils.c:368
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@@ -771,27 +773,27 @@ msgstr ""
"servidor de certificados exceden los límites impuestos por la biblioteca "
"cripotográfica"
-#: ../libempathy/empathy-utils.c:373
+#: ../libempathy/empathy-utils.c:372
msgid "Your software is too old"
msgstr "Su software es demasiado antiguo"
-#: ../libempathy/empathy-utils.c:375
+#: ../libempathy/empathy-utils.c:374
msgid "Internal error"
msgstr "Error interno"
-#: ../libempathy/empathy-utils.c:534
+#: ../libempathy/empathy-utils.c:533
msgid "People Nearby"
msgstr "Gente cerca"
-#: ../libempathy/empathy-utils.c:539
+#: ../libempathy/empathy-utils.c:538
msgid "Yahoo! Japan"
msgstr "Yahoo Japón"
-#: ../libempathy/empathy-utils.c:568
+#: ../libempathy/empathy-utils.c:567
msgid "Google Talk"
msgstr "Google Talk"
-#: ../libempathy/empathy-utils.c:569
+#: ../libempathy/empathy-utils.c:568
msgid "Facebook Chat"
msgstr "Chat de Facebook"
@@ -860,7 +862,7 @@ msgid "All accounts"
msgstr "Todas las cuentas"
#: ../libempathy-gtk/empathy-account-widget.c:682
-#: ../src/empathy-import-widget.c:336
+#: ../src/empathy-import-widget.c:323
msgid "Account"
msgstr "Cuenta"
@@ -884,24 +886,24 @@ msgstr "Puerto"
msgid "%s:"
msgstr "%s:"
-#: ../libempathy-gtk/empathy-account-widget.c:1398
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
+#: ../libempathy-gtk/empathy-account-widget.c:1424
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
msgid "Username:"
msgstr "Nombre de usuario:"
-#: ../libempathy-gtk/empathy-account-widget.c:1710
+#: ../libempathy-gtk/empathy-account-widget.c:1741
msgid "A_pply"
msgstr "_Aplicar"
-#: ../libempathy-gtk/empathy-account-widget.c:1739
+#: ../libempathy-gtk/empathy-account-widget.c:1770
msgid "L_og in"
msgstr "Iniciar _sesión"
-#: ../libempathy-gtk/empathy-account-widget.c:1812
+#: ../libempathy-gtk/empathy-account-widget.c:1840
msgid "This account already exists on the server"
msgstr "Esta cuenta ya existe en el servidor"
-#: ../libempathy-gtk/empathy-account-widget.c:1816
+#: ../libempathy-gtk/empathy-account-widget.c:1844
msgid "Create a new account on the server"
msgstr "Crear una cuenta nueva en el servidor"
@@ -910,19 +912,19 @@ msgstr "Crear una cuenta nueva en el servidor"
#. * like: "MyUserName on freenode".
#. * You should reverse the order of these arguments if the
#. * server should come before the login id in your locale.
-#: ../libempathy-gtk/empathy-account-widget.c:2241
+#: ../libempathy-gtk/empathy-account-widget.c:2251
#, c-format
msgid "%1$s on %2$s"
msgstr "%1$s en %2$s"
#. To translators: The parameter is the protocol name. The resulting
#. * string will be something like: "Jabber Account"
-#: ../libempathy-gtk/empathy-account-widget.c:2267
+#: ../libempathy-gtk/empathy-account-widget.c:2277
#, c-format
msgid "%s Account"
msgstr "Cuenta %s"
-#: ../libempathy-gtk/empathy-account-widget.c:2271
+#: ../libempathy-gtk/empathy-account-widget.c:2281
msgid "New account"
msgstr "Cuenta nueva"
@@ -970,7 +972,7 @@ msgstr "_Puerto:"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:21
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:6
-#: ../src/empathy-new-chatroom-dialog.ui.h:6
+#: ../src/empathy-new-chatroom-dialog.ui.h:5
msgid "_Server:"
msgstr "_Servidor:"
@@ -978,11 +980,11 @@ msgstr "_Servidor:"
#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1
#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
msgid "Advanced"
msgstr "Avanzadas"
@@ -1000,7 +1002,7 @@ msgstr "¿Cuál es su contraseña de AIM?"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:10
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "Remember Password"
msgstr "Recordar contraseña"
@@ -1044,36 +1046,32 @@ msgstr "¿Cuál es su UIN de ICQ?"
msgid "What is your ICQ password?"
msgstr "¿Cuál es su contraseña de ICQ?"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:206
-#: ../libempathy-gtk/empathy-account-widget-sip.c:239
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "Auto"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:209
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:212
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:215
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:244
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "Registrador"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:249
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "Opciones"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:252
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "Ninguno"
@@ -1102,19 +1100,21 @@ msgstr "Añadir…"
msgid "Remove"
msgstr "Quitar"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
+#. Translators: tooltip on a 'Go Up' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
msgid "Up"
msgstr "Subir"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
+#. Translators: tooltip on a 'Go Down' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
msgid "Down"
msgstr "Abajo"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
msgid "Servers"
msgstr "Servidores"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
msgid ""
"Most IRC servers don't need a password, so if you're not sure, don't enter a "
"password."
@@ -1122,27 +1122,27 @@ msgstr ""
"La mayoría de los servidores IRC no necesitan una contraseña, de tal forma "
"que si no está seguro, no introduzca una contraseña."
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
msgid "Nickname:"
msgstr "Apodo:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
msgid "Password:"
msgstr "Contraseña:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
msgid "Quit message:"
msgstr "Mensaje de salida:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
msgid "Real name:"
msgstr "Nombre real:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:18
msgid "Which IRC network?"
msgstr "¿Qué red de IRC?"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:19
msgid "What is your IRC nickname?"
msgstr "¿Cuál es su apodo del IRC?"
@@ -1332,11 +1332,15 @@ msgstr "Ignorar errores TLS"
msgid "Port:"
msgstr "Puerto:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+msgid "Local IP Address:"
+msgstr "Dirección IP local:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP login ID?"
msgstr "¿Cuál es su ID de inicio de sesión SIP?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP account password?"
msgstr "¿Cuál es la contraseña de su cuenta SIP?"
@@ -1422,40 +1426,39 @@ msgstr "Este protocolo no soporta llamadas de emergencia"
msgid "You don't have enough credit in order to place this call"
msgstr "No tiene crédito suficiente para hacer esta llamada"
-#: ../libempathy-gtk/empathy-chat.c:729
+#: ../libempathy-gtk/empathy-chat.c:728
msgid "Failed to open private chat"
msgstr "Falló al abrir el chat privado"
-#: ../libempathy-gtk/empathy-chat.c:787
+#: ../libempathy-gtk/empathy-chat.c:786
msgid "Topic not supported on this conversation"
msgstr "El tema no está soportado en esta conversación"
-#: ../libempathy-gtk/empathy-chat.c:793
+#: ../libempathy-gtk/empathy-chat.c:792
msgid "You are not allowed to change the topic"
msgstr "No le está permitido cambiar el tema"
-#: ../libempathy-gtk/empathy-chat.c:992
-#, c-format
-msgid "“%s†is not a valid contact ID"
-msgstr "%s no es un identificador de contacto válido"
+#: ../libempathy-gtk/empathy-chat.c:968
+msgid "Invalid contact ID"
+msgstr "ID de contacto no válido"
-#: ../libempathy-gtk/empathy-chat.c:1087
+#: ../libempathy-gtk/empathy-chat.c:1056
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear: limpiar todos los mensajes de la conversación actual"
-#: ../libempathy-gtk/empathy-chat.c:1090
+#: ../libempathy-gtk/empathy-chat.c:1059
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <tema>: establecer el tema para la conversación actual"
-#: ../libempathy-gtk/empathy-chat.c:1093
+#: ../libempathy-gtk/empathy-chat.c:1062
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <id de sala de chat>: unirse a una sala de chat nueva"
-#: ../libempathy-gtk/empathy-chat.c:1096
+#: ../libempathy-gtk/empathy-chat.c:1065
msgid "/j <chat room ID>: join a new chat room"
msgstr "/j <id de sala de chat>: unirse a una sala de chat nueva"
-#: ../libempathy-gtk/empathy-chat.c:1100
+#: ../libempathy-gtk/empathy-chat.c:1069
msgid ""
"/part [<chat room ID>] [<reason>]: leave the chat room, by default the "
"current one"
@@ -1463,23 +1466,23 @@ msgstr ""
"/part [<ID de la sala de chat>] [<razón>]: abandonar la sala de chat, la "
"actual de manera predeterminada"
-#: ../libempathy-gtk/empathy-chat.c:1104
+#: ../libempathy-gtk/empathy-chat.c:1073
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <id del contacto> [<mensaje>]: abrir un chat privado"
-#: ../libempathy-gtk/empathy-chat.c:1107
+#: ../libempathy-gtk/empathy-chat.c:1076
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <id del contacto> <mensaje>: abrir un chat privado"
-#: ../libempathy-gtk/empathy-chat.c:1110
+#: ../libempathy-gtk/empathy-chat.c:1079
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <apodo>: cambiar su apodo en el servidor actual"
-#: ../libempathy-gtk/empathy-chat.c:1113
+#: ../libempathy-gtk/empathy-chat.c:1082
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <mensaje>: enviar un mensaje de ACCIÓN a la conversación actual"
-#: ../libempathy-gtk/empathy-chat.c:1116
+#: ../libempathy-gtk/empathy-chat.c:1085
msgid ""
"/say <message>: send <message> to the current conversation. This is used to "
"send a message starting with a '/'. For example: \"/say /join is used to "
@@ -1489,11 +1492,11 @@ msgstr ""
"para enviar un mensaje comenzando por una «/». Por ejemplo: «/say /join se usa "
"para unirse a una sala de chat nueva»"
-#: ../libempathy-gtk/empathy-chat.c:1121
+#: ../libempathy-gtk/empathy-chat.c:1090
msgid "/whois <contact ID>: display information about a contact"
msgstr "/whois <ID del contacto>: mostrar información sobre un contacto"
-#: ../libempathy-gtk/empathy-chat.c:1124
+#: ../libempathy-gtk/empathy-chat.c:1093
msgid ""
"/help [<command>]: show all supported commands. If <command> is defined, "
"show its usage."
@@ -1501,128 +1504,128 @@ msgstr ""
"/help [<comando>]: mostrar todos los comandos soportados. Si <comando> está "
"definido, muestra su uso."
-#: ../libempathy-gtk/empathy-chat.c:1143
+#: ../libempathy-gtk/empathy-chat.c:1112
#, c-format
msgid "Usage: %s"
msgstr "Uso: %s"
-#: ../libempathy-gtk/empathy-chat.c:1188
+#: ../libempathy-gtk/empathy-chat.c:1157
msgid "Unknown command"
msgstr "Comando desconocido"
-#: ../libempathy-gtk/empathy-chat.c:1314
+#: ../libempathy-gtk/empathy-chat.c:1283
msgid "Unknown command; see /help for the available commands"
msgstr "Comando desconocido; consulte /help para ver los comandos disponibles"
-#: ../libempathy-gtk/empathy-chat.c:1565
+#: ../libempathy-gtk/empathy-chat.c:1540
msgid "insufficient balance to send message"
msgstr "no tiene balance suficiente para enviar el mensaje"
-#: ../libempathy-gtk/empathy-chat.c:1569 ../libempathy-gtk/empathy-chat.c:1583
-#: ../libempathy-gtk/empathy-chat.c:1646
+#: ../libempathy-gtk/empathy-chat.c:1544 ../libempathy-gtk/empathy-chat.c:1558
+#: ../libempathy-gtk/empathy-chat.c:1621
#, c-format
msgid "Error sending message '%s': %s"
msgstr "Error al enviar el mensaje «%s»: %s"
-#: ../libempathy-gtk/empathy-chat.c:1571 ../libempathy-gtk/empathy-chat.c:1588
-#: ../libempathy-gtk/empathy-chat.c:1650
+#: ../libempathy-gtk/empathy-chat.c:1546 ../libempathy-gtk/empathy-chat.c:1563
+#: ../libempathy-gtk/empathy-chat.c:1625
#, c-format
msgid "Error sending message: %s"
msgstr "Error al enviar el mensaje: %s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1577
+#: ../libempathy-gtk/empathy-chat.c:1552
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr ""
"no tiene balance suficiente para enviar el mensaje. <a href='%s'>Recargar</"
"a>."
-#: ../libempathy-gtk/empathy-chat.c:1617
+#: ../libempathy-gtk/empathy-chat.c:1592
msgid "not capable"
msgstr "no es posible"
-#: ../libempathy-gtk/empathy-chat.c:1624
+#: ../libempathy-gtk/empathy-chat.c:1599
msgid "offline"
msgstr "desconectado"
-#: ../libempathy-gtk/empathy-chat.c:1627
+#: ../libempathy-gtk/empathy-chat.c:1602
msgid "invalid contact"
msgstr "contacto no válido"
-#: ../libempathy-gtk/empathy-chat.c:1630
+#: ../libempathy-gtk/empathy-chat.c:1605
msgid "permission denied"
msgstr "permiso denegado"
-#: ../libempathy-gtk/empathy-chat.c:1633
+#: ../libempathy-gtk/empathy-chat.c:1608
msgid "too long message"
msgstr "mensaje demasiado largo"
-#: ../libempathy-gtk/empathy-chat.c:1636
+#: ../libempathy-gtk/empathy-chat.c:1611
msgid "not implemented"
msgstr "no implementado"
-#: ../libempathy-gtk/empathy-chat.c:1640
+#: ../libempathy-gtk/empathy-chat.c:1615
msgid "unknown"
msgstr "desconocido"
-#: ../libempathy-gtk/empathy-chat.c:1707 ../src/empathy-chat-window.c:920
+#: ../libempathy-gtk/empathy-chat.c:1682 ../src/empathy-chat-window.c:918
msgid "Topic:"
msgstr "Tema:"
-#: ../libempathy-gtk/empathy-chat.c:1722
+#: ../libempathy-gtk/empathy-chat.c:1697
#, c-format
msgid "Topic set to: %s"
msgstr "El tema se ha establecido a: %s"
-#: ../libempathy-gtk/empathy-chat.c:1724
+#: ../libempathy-gtk/empathy-chat.c:1699
#, c-format
msgid "Topic set by %s to: %s"
msgstr "Tema establecido por %s a: %s"
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1729
+#: ../libempathy-gtk/empathy-chat.c:1704
msgid "No topic defined"
msgstr "No se ha definido el tema"
-#: ../libempathy-gtk/empathy-chat.c:2245
+#: ../libempathy-gtk/empathy-chat.c:2220
msgid "(No Suggestions)"
msgstr "(Sin sugerencias)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2313
+#: ../libempathy-gtk/empathy-chat.c:2288
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "Añadir «%s» al diccionario"
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2350
+#: ../libempathy-gtk/empathy-chat.c:2325
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "Añadir «%s» al diccionario de «%s»"
-#: ../libempathy-gtk/empathy-chat.c:2420
+#: ../libempathy-gtk/empathy-chat.c:2395
msgid "Insert Smiley"
msgstr "Insertar emoticono"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2438
+#: ../libempathy-gtk/empathy-chat.c:2413
#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "E_nviar"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2495
+#: ../libempathy-gtk/empathy-chat.c:2470
msgid "_Spelling Suggestions"
msgstr "_Sugerencias ortográficas"
-#: ../libempathy-gtk/empathy-chat.c:2584
+#: ../libempathy-gtk/empathy-chat.c:2559
msgid "Failed to retrieve recent logs"
msgstr "Falló al recibir los registros recientes"
-#: ../libempathy-gtk/empathy-chat.c:2723
+#: ../libempathy-gtk/empathy-chat.c:2698
#, c-format
msgid "%s has disconnected"
msgstr "%s se ha desconectado"
@@ -1630,12 +1633,12 @@ msgstr "%s se ha desconectado"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2730
+#: ../libempathy-gtk/empathy-chat.c:2705
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "%2$s expulsó a %1$s"
-#: ../libempathy-gtk/empathy-chat.c:2733
+#: ../libempathy-gtk/empathy-chat.c:2708
#, c-format
msgid "%s was kicked"
msgstr "%s fue expulsado"
@@ -1643,17 +1646,17 @@ msgstr "%s fue expulsado"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2741
+#: ../libempathy-gtk/empathy-chat.c:2716
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "%2$s vetó a %1$s"
-#: ../libempathy-gtk/empathy-chat.c:2744
+#: ../libempathy-gtk/empathy-chat.c:2719
#, c-format
msgid "%s was banned"
msgstr "%s fue vetado"
-#: ../libempathy-gtk/empathy-chat.c:2748
+#: ../libempathy-gtk/empathy-chat.c:2723
#, c-format
msgid "%s has left the room"
msgstr "%s ha dejado la sala"
@@ -1663,17 +1666,17 @@ msgstr "%s ha dejado la sala"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2757
+#: ../libempathy-gtk/empathy-chat.c:2732
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: ../libempathy-gtk/empathy-chat.c:2782
+#: ../libempathy-gtk/empathy-chat.c:2757
#, c-format
msgid "%s has joined the room"
msgstr "%s ha entrado en la sala"
-#: ../libempathy-gtk/empathy-chat.c:2807
+#: ../libempathy-gtk/empathy-chat.c:2782
#, c-format
msgid "%s is now known as %s"
msgstr "Ahora %s se llama %s"
@@ -1681,55 +1684,55 @@ msgstr "Ahora %s se llama %s"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2994
-#: ../src/empathy-streamed-media-window.c:1888
-#: ../src/empathy-event-manager.c:1279 ../src/empathy-call-window.c:1502
-#: ../src/empathy-call-window.c:1552 ../src/empathy-call-window.c:2590
+#: ../libempathy-gtk/empathy-chat.c:2969 ../src/empathy-event-manager.c:1167
+#: ../src/empathy-call-window.c:1463 ../src/empathy-call-window.c:1513
+#: ../src/empathy-call-window.c:2559
msgid "Disconnected"
msgstr "Desconectado"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3658
+#: ../libempathy-gtk/empathy-chat.c:3633
msgid "Would you like to store this password?"
msgstr "¿Quiere guardar esta contraseña?"
-#: ../libempathy-gtk/empathy-chat.c:3664
+#: ../libempathy-gtk/empathy-chat.c:3639
msgid "Remember"
msgstr "Recordar"
-#: ../libempathy-gtk/empathy-chat.c:3674
+#: ../libempathy-gtk/empathy-chat.c:3649
msgid "Not now"
msgstr "Ahora no"
-#: ../libempathy-gtk/empathy-chat.c:3718
+#: ../libempathy-gtk/empathy-chat.c:3693
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "Volver a intentarlo"
-#: ../libempathy-gtk/empathy-chat.c:3722
+#: ../libempathy-gtk/empathy-chat.c:3697
msgid "Wrong password; please try again:"
msgstr "Contraseña incorrecta; inténtelo de nuevo:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3852
+#: ../libempathy-gtk/empathy-chat.c:3827
msgid "This room is protected by a password:"
msgstr "Esta sala está protegida por contraseña:"
-#: ../libempathy-gtk/empathy-chat.c:3879
+#: ../libempathy-gtk/empathy-chat.c:3854
+#: ../src/empathy-new-chatroom-dialog.c:780
msgid "Join"
msgstr "Unirse"
-#: ../libempathy-gtk/empathy-chat.c:4071 ../src/empathy-event-manager.c:1300
+#: ../libempathy-gtk/empathy-chat.c:4046 ../src/empathy-event-manager.c:1188
msgid "Connected"
msgstr "Conectado"
-#: ../libempathy-gtk/empathy-chat.c:4126
+#: ../libempathy-gtk/empathy-chat.c:4101
msgid "Conversation"
msgstr "Conversación"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4131
+#: ../libempathy-gtk/empathy-chat.c:4106
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
@@ -1754,17 +1757,17 @@ msgstr "Permiso denegado"
msgid "Could not block contact"
msgstr "No se pudo bloquear el contacto"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:610
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:611
msgid "Edit Blocked Contacts"
msgstr "Editar contactos bloqueados"
#. Account and Identifier
#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:506
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:524
#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
#: ../libempathy-gtk/empathy-individual-widget.c:1474
#: ../src/empathy-chatrooms-window.ui.h:2
-#: ../src/empathy-new-chatroom-dialog.ui.h:7
+#: ../src/empathy-new-chatroom-dialog.ui.h:6
msgid "Account:"
msgstr "Cuenta:"
@@ -1790,30 +1793,30 @@ msgstr "_Abrir enlace"
msgid "%A %B %d %Y"
msgstr "%A %d %B %Y"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:326
+#: ../libempathy-gtk/empathy-contact-dialogs.c:325
#: ../libempathy-gtk/empathy-individual-dialogs.c:118
msgid "New Contact"
msgstr "Contacto nuevo"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:395
+#: ../libempathy-gtk/empathy-contact-dialogs.c:394
#: ../libempathy-gtk/empathy-individual-dialogs.c:197
#, c-format
msgid "Block %s?"
msgstr "¿Bloquear a %s?"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:400
+#: ../libempathy-gtk/empathy-contact-dialogs.c:399
#: ../libempathy-gtk/empathy-individual-dialogs.c:252
#, c-format
msgid "Are you sure you want to block '%s' from contacting you again?"
msgstr ""
"¿Está seguro de que quiere bloquear a «%s» para que no le vuelva a contactar?"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:405
+#: ../libempathy-gtk/empathy-contact-dialogs.c:404
#: ../libempathy-gtk/empathy-individual-dialogs.c:274
msgid "_Block"
msgstr "_Bloquear"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:423
+#: ../libempathy-gtk/empathy-contact-dialogs.c:422
#: ../libempathy-gtk/empathy-individual-dialogs.c:283
msgid "_Report this contact as abusive"
msgid_plural "_Report these contacts as abusive"
@@ -1833,190 +1836,190 @@ msgid "Decide _Later"
msgstr "Decidir _luego"
#. Title
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:499
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:517
msgid "Search contacts"
msgstr "Buscar contactos"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:529
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:547
msgid "Search: "
msgstr "Buscar:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:587
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
msgid "_Add Contact"
msgstr "_Añadir contacto"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:623
msgid "No contacts found"
msgstr "No se encontraron contactos"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:621
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:639
msgid "Your message introducing yourself:"
msgstr "Su mensaje de presentación:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:629
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:647
msgid "Please let me see when you're online. Thanks!"
msgstr "Permítame ver cuando está en línea. Gracias."
-#: ../libempathy-gtk/empathy-contact-widget.c:567
+#: ../libempathy-gtk/empathy-contact-widget.c:566
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "Canales:"
-#: ../libempathy-gtk/empathy-contact-widget.c:747
+#: ../libempathy-gtk/empathy-contact-widget.c:746
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "Código ISO de país:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:748
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "País:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:750
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "Estado:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:752
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "Ciudad:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:754
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "Ãrea:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:756
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "Código postal:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:758
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "Calle:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:760
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "Edificio:"
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:762
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "Planta:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:764
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "Habitación:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:766
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "Texto:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:768
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "Descripción:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:770
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "URI:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:772
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "Nivel de precisión:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:774
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "Error:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:776
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "Error vertical (metros):"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:778
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "Error horizontal (metros):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:780
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "Velocidad:"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:782
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "Retardo:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:784
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "Velocidad de ascenso:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:786
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "Actualizado por última vez:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:788
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "Longitud_"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:790
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "Latitud:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:792
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "Altitud:"
-#: ../libempathy-gtk/empathy-contact-widget.c:846
-#: ../libempathy-gtk/empathy-contact-widget.c:861
+#: ../libempathy-gtk/empathy-contact-widget.c:845
+#: ../libempathy-gtk/empathy-contact-widget.c:860
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
-#: ../src/empathy-preferences.ui.h:35
+#: ../src/empathy-preferences.ui.h:42
msgid "Location"
msgstr "Ubicación geográfica"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:862
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s, %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:915
+#: ../libempathy-gtk/empathy-contact-widget.c:914
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "%e de %B de %Y a las %R UTC"
-#: ../libempathy-gtk/empathy-contact-widget.c:997
+#: ../libempathy-gtk/empathy-contact-widget.c:996
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "Guardar avatar"
-#: ../libempathy-gtk/empathy-contact-widget.c:1053
+#: ../libempathy-gtk/empathy-contact-widget.c:1052
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "No se pudo guardar el avatar"
-#: ../libempathy-gtk/empathy-contact-widget.c:1444
+#: ../libempathy-gtk/empathy-contact-widget.c:1454
msgid "Personal Details"
msgstr "Detalles personales"
-#: ../libempathy-gtk/empathy-contact-widget.c:1447
+#: ../libempathy-gtk/empathy-contact-widget.c:1457
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
@@ -2125,11 +2128,11 @@ msgstr "Versión:"
msgid "Client:"
msgstr "Cliente:"
-#: ../libempathy-gtk/empathy-groups-widget.c:331
+#: ../libempathy-gtk/empathy-groups-widget.c:327
msgid "Groups"
msgstr "Grupos"
-#: ../libempathy-gtk/empathy-groups-widget.c:343
+#: ../libempathy-gtk/empathy-groups-widget.c:339
msgid ""
"Select the groups you want this contact to appear in. Note that you can "
"select more than one group or no groups."
@@ -2137,17 +2140,16 @@ msgstr ""
"Seleccione los grupos en los que quiere que este contacto aparezca, Note que "
"puede seleccionar más de un grupo o ningún grupo."
-#: ../libempathy-gtk/empathy-groups-widget.c:362
+#: ../libempathy-gtk/empathy-groups-widget.c:358
msgid "_Add Group"
msgstr "_Añadir grupo"
-#: ../libempathy-gtk/empathy-groups-widget.c:397
+#: ../libempathy-gtk/empathy-groups-widget.c:393
msgctxt "verb in a column header displaying group names"
msgid "Select"
msgstr "Seleccionar"
-#: ../libempathy-gtk/empathy-groups-widget.c:407
-#: ../src/empathy-roster-window.c:1970
+#: ../libempathy-gtk/empathy-groups-widget.c:403
msgid "Group"
msgstr "Grupo"
@@ -2175,137 +2177,137 @@ msgstr "Contactos enlazados"
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:173
+#: ../libempathy-gtk/empathy-individual-menu.c:172
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:345
+#: ../libempathy-gtk/empathy-individual-menu.c:344
msgid "Select account to use to place the call"
msgstr "Seleccionar la cuenta que usar para realizar la llamada"
-#. translators: Call is a noun. This string is used in the window
-#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:349
+#: ../libempathy-gtk/empathy-individual-menu.c:348
#: ../libempathy-gtk/empathy-log-window.ui.h:6
-#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:18
msgid "Call"
msgstr "Llamar"
-#: ../libempathy-gtk/empathy-individual-menu.c:414
+#: ../libempathy-gtk/empathy-individual-menu.c:413
msgid "Mobile"
msgstr "Móvil"
-#: ../libempathy-gtk/empathy-individual-menu.c:416
+#: ../libempathy-gtk/empathy-individual-menu.c:415
msgid "Work"
msgstr "Trabajo"
-#: ../libempathy-gtk/empathy-individual-menu.c:418
+#: ../libempathy-gtk/empathy-individual-menu.c:417
msgid "HOME"
msgstr "Casa"
-#: ../libempathy-gtk/empathy-individual-menu.c:659
+#: ../libempathy-gtk/empathy-individual-menu.c:658
msgid "_Block Contact"
msgstr "_Bloquear contacto"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1018
-#: ../libempathy-gtk/empathy-new-message-dialog.c:319
-#: ../src/empathy-roster-window-menubar.ui.h:1
+#: ../libempathy-gtk/empathy-individual-menu.c:1017
+#: ../libempathy-gtk/empathy-new-message-dialog.c:318
msgid "_Chat"
msgstr "_Chat"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1053
-#: ../libempathy-gtk/empathy-new-message-dialog.c:313
+#: ../libempathy-gtk/empathy-individual-menu.c:1052
+#: ../libempathy-gtk/empathy-new-message-dialog.c:312
msgid "_SMS"
msgstr "_SMS"
-#: ../libempathy-gtk/empathy-individual-menu.c:1086
+#: ../libempathy-gtk/empathy-individual-menu.c:1085
msgctxt "menu item"
msgid "_Audio Call"
msgstr "Llamada de vo_z"
-#: ../libempathy-gtk/empathy-individual-menu.c:1119
+#: ../libempathy-gtk/empathy-individual-menu.c:1118
msgctxt "menu item"
msgid "_Video Call"
msgstr "Llamada de _vídeo"
-#: ../libempathy-gtk/empathy-individual-menu.c:1160
-#: ../src/empathy-roster-window-menubar.ui.h:4
+#: ../libempathy-gtk/empathy-individual-menu.c:1159
+#: ../src/empathy-roster-window-menubar.ui.h:11
msgid "_Previous Conversations"
msgstr "Conversaciones an_teriores"
-#: ../libempathy-gtk/empathy-individual-menu.c:1189
+#: ../libempathy-gtk/empathy-individual-menu.c:1188
msgid "Send File"
msgstr "Enviar archivo"
-#: ../libempathy-gtk/empathy-individual-menu.c:1219
+#: ../libempathy-gtk/empathy-individual-menu.c:1218
msgid "Share My Desktop"
msgstr "Compartir mi escritorio"
-#: ../libempathy-gtk/empathy-individual-menu.c:1245
+#: ../libempathy-gtk/empathy-individual-menu.c:1244
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "Favorita"
-#: ../libempathy-gtk/empathy-individual-menu.c:1264
+#: ../libempathy-gtk/empathy-individual-menu.c:1263
msgid "gnome-contacts not installed"
msgstr "gnome-contacts no está instalado"
-#: ../libempathy-gtk/empathy-individual-menu.c:1267
+#: ../libempathy-gtk/empathy-individual-menu.c:1266
msgid "Please install gnome-contacts to access contacts details."
msgstr "Instale gnome-contacts para acceder a los detalles de los contactos."
-#: ../libempathy-gtk/empathy-individual-menu.c:1398
+#: ../libempathy-gtk/empathy-individual-menu.c:1397
msgid "Infor_mation"
msgstr "Infor_mación"
-#: ../libempathy-gtk/empathy-individual-menu.c:1447
+#: ../libempathy-gtk/empathy-individual-menu.c:1446
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "_Editar"
-#: ../libempathy-gtk/empathy-individual-menu.c:1564
-#: ../src/empathy-chat-window.c:1192
+#. send invitation
+#: ../libempathy-gtk/empathy-individual-menu.c:1562
+#: ../src/empathy-chat-window.c:1189
msgid "Inviting you to this room"
msgstr "Invitándolo a esta sala"
-#: ../libempathy-gtk/empathy-individual-menu.c:1610
+#: ../libempathy-gtk/empathy-individual-menu.c:1608
msgid "_Invite to Chat Room"
msgstr "_Invitar a sala de chat"
-#: ../libempathy-gtk/empathy-individual-menu.c:1806
-#: ../src/empathy-roster-window-menubar.ui.h:5
+#: ../libempathy-gtk/empathy-individual-menu.c:1804
msgid "_Add Contact…"
msgstr "_Añadir contacto…"
-#: ../libempathy-gtk/empathy-individual-view.c:2304
+#: ../libempathy-gtk/empathy-individual-view.c:2364
msgid "Delete and _Block"
msgstr "Eliminar y _bloquear"
-#: ../libempathy-gtk/empathy-individual-view.c:2339
+#: ../libempathy-gtk/empathy-individual-view.c:2399
#, c-format
msgid "Do you really want to remove the group '%s'?"
msgstr "¿Realmente quiere quitar el grupo «%s»?"
-#: ../libempathy-gtk/empathy-individual-view.c:2342
+#: ../libempathy-gtk/empathy-individual-view.c:2402
msgid "Removing group"
msgstr "Quitando grupo"
+#: ../libempathy-gtk/empathy-individual-view.c:2470
+msgid "Re_name"
+msgstr "Re_nombrar"
+
#. Remove
-#: ../libempathy-gtk/empathy-individual-view.c:2397
-#: ../libempathy-gtk/empathy-individual-view.c:2601
+#: ../libempathy-gtk/empathy-individual-view.c:2479
+#: ../libempathy-gtk/empathy-individual-view.c:2683
msgid "_Remove"
msgstr "_Quitar"
-#: ../libempathy-gtk/empathy-individual-view.c:2474
+#: ../libempathy-gtk/empathy-individual-view.c:2556
#, c-format
msgid "Do you really want to remove the contact '%s'?"
msgstr "¿Realmente quiere quitar el contacto «%s»?"
-#: ../libempathy-gtk/empathy-individual-view.c:2483
+#: ../libempathy-gtk/empathy-individual-view.c:2565
#, c-format
msgid ""
"Do you really want to remove the linked contact '%s'? Note that this will "
@@ -2314,7 +2316,7 @@ msgstr ""
"¿Realmente quiere quitar el contacto enlazado «%s»? Tenga en cuenta que esto "
"quitará todos los contactos que componen este contacto enlazado."
-#: ../libempathy-gtk/empathy-individual-view.c:2495
+#: ../libempathy-gtk/empathy-individual-view.c:2577
msgid "Removing contact"
msgstr "Quitando el contacto"
@@ -2358,137 +2360,137 @@ msgstr "servidor nuevo"
msgid "SSL"
msgstr "SSL"
-#: ../libempathy-gtk/empathy-log-window.c:620
+#: ../libempathy-gtk/empathy-log-window.c:617
msgid "History"
msgstr "Histórico"
-#: ../libempathy-gtk/empathy-log-window.c:675
+#: ../libempathy-gtk/empathy-log-window.c:672
msgid "Show"
msgstr "Mostrar"
-#: ../libempathy-gtk/empathy-log-window.c:697
+#: ../libempathy-gtk/empathy-log-window.c:694
msgid "Search"
msgstr "Buscar"
-#: ../libempathy-gtk/empathy-log-window.c:1148
+#: ../libempathy-gtk/empathy-log-window.c:1145
#, c-format
msgid "Chat in %s"
msgstr "Chatee en %s"
-#: ../libempathy-gtk/empathy-log-window.c:1150
+#: ../libempathy-gtk/empathy-log-window.c:1147
#, c-format
msgid "Chat with %s"
msgstr "Chat con %s"
-#: ../libempathy-gtk/empathy-log-window.c:1200
-#: ../libempathy-gtk/empathy-log-window.c:1347
+#: ../libempathy-gtk/empathy-log-window.c:1197
+#: ../libempathy-gtk/empathy-log-window.c:1341
msgctxt "A date with the time"
msgid "%A, %e %B %Y %X"
msgstr "%A, %e de %B de %Y a las %X"
#. Translators: this is an emote: '* Danielle waves'
-#: ../libempathy-gtk/empathy-log-window.c:1289
+#: ../libempathy-gtk/empathy-log-window.c:1284
#, c-format
msgid "<i>* %s %s</i>"
msgstr "<i>* %s %s</i>"
#. Translators: this is a message: 'Danielle: hello'
#. * The string in bold is the sender's name
-#: ../libempathy-gtk/empathy-log-window.c:1295
+#: ../libempathy-gtk/empathy-log-window.c:1290
#, c-format
msgid "<b>%s:</b> %s"
msgstr "<b>%s:</b> %s"
-#: ../libempathy-gtk/empathy-log-window.c:1371
+#: ../libempathy-gtk/empathy-log-window.c:1365
#, c-format
msgid "%s second"
msgid_plural "%s seconds"
msgstr[0] "%s segundo"
msgstr[1] "%s segundos"
-#: ../libempathy-gtk/empathy-log-window.c:1378
+#: ../libempathy-gtk/empathy-log-window.c:1372
#, c-format
msgid "%s minute"
msgid_plural "%s minutes"
msgstr[0] "%s minuto"
msgstr[1] "%s minutos"
-#: ../libempathy-gtk/empathy-log-window.c:1386
+#: ../libempathy-gtk/empathy-log-window.c:1380
#, c-format
msgid "Call took %s, ended at %s"
msgstr "La llamada duró %s, finalizó a las %s"
-#: ../libempathy-gtk/empathy-log-window.c:1720
+#: ../libempathy-gtk/empathy-log-window.c:1711
msgid "Today"
msgstr "Hoy"
-#: ../libempathy-gtk/empathy-log-window.c:1724
+#: ../libempathy-gtk/empathy-log-window.c:1715
msgid "Yesterday"
msgstr "Ayer"
#. Translators: A date such as '23 May 2010' (strftime format)
-#: ../libempathy-gtk/empathy-log-window.c:1739
+#: ../libempathy-gtk/empathy-log-window.c:1730
msgid "%e %B %Y"
msgstr "%e de %B de %Y"
-#: ../libempathy-gtk/empathy-log-window.c:1827
-#: ../libempathy-gtk/empathy-log-window.c:3487
+#: ../libempathy-gtk/empathy-log-window.c:1834
+#: ../libempathy-gtk/empathy-log-window.c:3457
msgid "Anytime"
msgstr "Cualquier hora"
-#: ../libempathy-gtk/empathy-log-window.c:1916
-#: ../libempathy-gtk/empathy-log-window.c:2400
+#: ../libempathy-gtk/empathy-log-window.c:1933
+#: ../libempathy-gtk/empathy-log-window.c:2392
msgid "Anyone"
msgstr "Cualquiera"
-#: ../libempathy-gtk/empathy-log-window.c:2713
+#: ../libempathy-gtk/empathy-log-window.c:2705
msgid "Who"
msgstr "Quién"
-#: ../libempathy-gtk/empathy-log-window.c:2922
+#: ../libempathy-gtk/empathy-log-window.c:2914
msgid "When"
msgstr "Cuándo"
-#: ../libempathy-gtk/empathy-log-window.c:3038
+#: ../libempathy-gtk/empathy-log-window.c:3032
msgid "Anything"
msgstr "Cualquier cosa"
-#: ../libempathy-gtk/empathy-log-window.c:3040
+#: ../libempathy-gtk/empathy-log-window.c:3034
msgid "Text chats"
msgstr "Chats de texto"
-#: ../libempathy-gtk/empathy-log-window.c:3042
-#: ../src/empathy-preferences.ui.h:25
+#: ../libempathy-gtk/empathy-log-window.c:3035
+#: ../src/empathy-preferences.ui.h:32
msgid "Calls"
msgstr "Llamadas"
-#: ../libempathy-gtk/empathy-log-window.c:3047
+#: ../libempathy-gtk/empathy-log-window.c:3039
msgid "Incoming calls"
msgstr "Llamadas entrantes"
-#: ../libempathy-gtk/empathy-log-window.c:3048
+#: ../libempathy-gtk/empathy-log-window.c:3040
msgid "Outgoing calls"
msgstr "Llamadas salientes"
-#: ../libempathy-gtk/empathy-log-window.c:3049
+#: ../libempathy-gtk/empathy-log-window.c:3041
msgid "Missed calls"
msgstr "Llamadas perdidas"
-#: ../libempathy-gtk/empathy-log-window.c:3071
+#: ../libempathy-gtk/empathy-log-window.c:3061
msgid "What"
msgstr "Qué"
-#: ../libempathy-gtk/empathy-log-window.c:3780
+#: ../libempathy-gtk/empathy-log-window.c:3750
msgid "Are you sure you want to delete all logs of previous conversations?"
msgstr ""
"¿Está seguro de que quiere eliminar todos los registros de conversaciones "
"anteriores?"
-#: ../libempathy-gtk/empathy-log-window.c:3784
+#: ../libempathy-gtk/empathy-log-window.c:3754
msgid "Clear All"
msgstr "Limpiar todo"
-#: ../libempathy-gtk/empathy-log-window.c:3791
+#: ../libempathy-gtk/empathy-log-window.c:3761
msgid "Delete from:"
msgstr "Eliminar de:"
@@ -2498,7 +2500,6 @@ msgstr "_Archivo"
#: ../libempathy-gtk/empathy-log-window.ui.h:2
#: ../src/empathy-call-window.ui.h:2 ../src/empathy-chat-window.ui.h:9
-#: ../src/empathy-roster-window-menubar.ui.h:12
msgid "_Edit"
msgstr "_Editar"
@@ -2511,13 +2512,12 @@ msgid "Profile"
msgstr "Perfil"
#: ../libempathy-gtk/empathy-log-window.ui.h:5
-#: ../src/empathy-chat-window.ui.h:19
+#: ../src/empathy-chat-window.ui.h:19 ../src/empathy-preferences.ui.h:14
msgid "Chat"
msgstr "Chat"
#: ../libempathy-gtk/empathy-log-window.ui.h:7
#: ../src/empathy-call-window.ui.h:26
-#: ../src/empathy-streamed-media-window.ui.h:19
msgid "Video"
msgstr "Vídeo"
@@ -2529,78 +2529,79 @@ msgstr "paÌgina 2"
msgid "<span size=\"x-large\">Loading...</span>"
msgstr "<span size=\"x-large\">Cargando…</span>"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:83
+#: ../libempathy-gtk/empathy-new-message-dialog.c:82
msgid "The contact is offline"
msgstr "El contacto está desconectado"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:85
+#: ../libempathy-gtk/empathy-new-message-dialog.c:84
msgid "The specified contact is either invalid or unknown"
msgstr "El contacto especificado es desconocido o no es válido"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:87
+#: ../libempathy-gtk/empathy-new-message-dialog.c:86
msgid "The contact does not support this kind of conversation"
msgstr "El contacto no soporta este tipo de conversación"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:89
+#: ../libempathy-gtk/empathy-new-message-dialog.c:88
msgid "The requested functionality is not implemented for this protocol"
msgstr "La funcionalidad requerida no está implementada para ese protocolo"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:95
+#: ../libempathy-gtk/empathy-new-message-dialog.c:94
msgid "Could not start a conversation with the given contact"
msgstr "No se pudo iniciar una conversación con el contacto dado"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:97
+#: ../libempathy-gtk/empathy-new-message-dialog.c:96
msgid "You are banned from this channel"
msgstr "Se le ha bloqueado en este canal"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:99
+#: ../libempathy-gtk/empathy-new-message-dialog.c:98
msgid "This channel is full"
msgstr "Este canal está completo"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:101
+#: ../libempathy-gtk/empathy-new-message-dialog.c:100
msgid "You must be invited to join this channel"
msgstr "Debe estar invitado para unirse a este canal"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:103
+#: ../libempathy-gtk/empathy-new-message-dialog.c:102
msgid "Can't proceed while disconnected"
msgstr "No se puede proceder mientras esté desconectado"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:105
+#: ../libempathy-gtk/empathy-new-message-dialog.c:104
msgid "Permission denied"
msgstr "Permiso denegado"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:111
+#: ../libempathy-gtk/empathy-new-message-dialog.c:110
msgid "There was an error starting the conversation"
msgstr "Hubo un error al iniciar la conversación"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:290
-#: ../libempathy-gtk/empathy-new-call-dialog.c:200
+#: ../libempathy-gtk/empathy-new-message-dialog.c:289
+#: ../libempathy-gtk/empathy-new-call-dialog.c:199
msgid "Enter a contact identifier or phone number:"
msgstr "Introduzca el identificador de un contacto o un número de teléfono:"
#. Tweak the dialog
-#: ../libempathy-gtk/empathy-new-message-dialog.c:333
+#: ../libempathy-gtk/empathy-new-message-dialog.c:332
msgid "New Conversation"
msgstr "Conversación nueva"
#. add video button
-#: ../libempathy-gtk/empathy-new-call-dialog.c:223
+#: ../libempathy-gtk/empathy-new-call-dialog.c:222
msgid "_Video Call"
msgstr "Llamada de _vídeo"
#. add audio button
-#: ../libempathy-gtk/empathy-new-call-dialog.c:233
+#: ../libempathy-gtk/empathy-new-call-dialog.c:232
msgid "_Audio Call"
msgstr "Llamada de vo_z"
#. Tweak the dialog
-#: ../libempathy-gtk/empathy-new-call-dialog.c:243
+#: ../libempathy-gtk/empathy-new-call-dialog.c:242
msgid "New Call"
msgstr "Llamada nueva"
#: ../libempathy-gtk/empathy-bad-password-dialog.c:130
#, c-format
-msgid "Authentification failed for account <b>%s</b>"
+#| msgid "Authentification failed for account <b>%s</b>"
+msgid "Authentication failed for account <b>%s</b>"
msgstr "Falló la autenticación para la cuenta <b>%s</b>"
#: ../libempathy-gtk/empathy-base-password-dialog.c:224
@@ -2619,30 +2620,41 @@ msgstr ""
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:167
-#: ../libempathy-gtk/empathy-presence-chooser.c:203
+#: ../libempathy-gtk/empathy-presence-chooser.c:165
+#: ../libempathy-gtk/empathy-presence-chooser.c:201
msgid "Custom Message…"
msgstr "Mensaje personalizado…"
+#: ../libempathy-gtk/empathy-presence-chooser.c:218
#: ../libempathy-gtk/empathy-presence-chooser.c:220
-#: ../libempathy-gtk/empathy-presence-chooser.c:222
msgid "Edit Custom Messages…"
msgstr "Editar mensajes personalizados…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:345
+#: ../libempathy-gtk/empathy-presence-chooser.c:342
msgid "Click to remove this status as a favorite"
msgstr "Pulse pare eliminar este estado de los favoritos"
-#: ../libempathy-gtk/empathy-presence-chooser.c:354
+#: ../libempathy-gtk/empathy-presence-chooser.c:351
msgid "Click to make this status a favorite"
msgstr "Pulse para hacer este estado uno favorito"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#. Translators: %s is a status message like 'At the pub' for example
+#: ../libempathy-gtk/empathy-presence-chooser.c:385
+#, c-format
+msgid ""
+"<b>Current message: %s</b>\n"
+"<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"
+msgstr ""
+"<b>Mensaje actual: %s</b>\n"
+"<small><i>Pulse Intro para establecer el mensaje nuevo o Esc para cancelar.</"
+"i></small>"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:394
msgid "Set status"
msgstr "Establecer estado"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1102
msgid "Custom messages…"
msgstr "Mensajes personalizados…"
@@ -3016,42 +3028,38 @@ msgid "Vietnamese"
msgstr "Vietnamita"
#: ../libempathy-gtk/empathy-calendar-button.c:66
-#| msgctxt "verb in a column header displaying group names"
-#| msgid "Select"
msgid "Select..."
msgstr "Seleccionar…"
#: ../libempathy-gtk/empathy-calendar-button.c:154
-#| msgctxt "verb in a column header displaying group names"
-#| msgid "Select"
msgid "_Select"
msgstr "_Seleccionar"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:202
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:201
msgid "No error message"
msgstr "Sin mensaje de eeror"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:275
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:274
msgid "Instant Message (Empathy)"
msgstr "Mensaje instantáneo (Empathy)"
-#: ../src/empathy.c:435
+#: ../src/empathy.c:428
msgid "Don't connect on startup"
msgstr "No conectarse automáticamente al inicio"
-#: ../src/empathy.c:439
+#: ../src/empathy.c:432
msgid "Don't display the contact list or any other dialogs on startup"
msgstr "No mostrar la lista de contactos o cualquier otro diálogo al inicio"
-#: ../src/empathy.c:454
+#: ../src/empathy.c:448
msgid "- Empathy IM Client"
msgstr "- Cliente de mensajería instantánea Empathy"
-#: ../src/empathy.c:641
+#: ../src/empathy.c:624
msgid "Error contacting the Account Manager"
msgstr "Error al contactar con el Gestor de cuentas"
-#: ../src/empathy.c:643
+#: ../src/empathy.c:626
#, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. "
@@ -3110,42 +3118,40 @@ msgstr ""
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:72
+#: ../src/empathy-accounts-dialog.c:70
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "Existen modificaciones sin guardar en su cuenta %s."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:76
+#: ../src/empathy-accounts-dialog.c:74
msgid "Your new account has not been saved yet."
msgstr "Aún no se ha guardado su cuenta nueva."
-#: ../src/empathy-accounts-dialog.c:381
-#: ../src/empathy-streamed-media-window.c:759
-#: ../src/empathy-call-window.c:1289
+#: ../src/empathy-accounts-dialog.c:403 ../src/empathy-call-window.c:1265
msgid "Connecting…"
msgstr "Conectando…"
-#: ../src/empathy-accounts-dialog.c:422
+#: ../src/empathy-accounts-dialog.c:444
#, c-format
msgid "Offline — %s"
msgstr "Desconectado: %s"
-#: ../src/empathy-accounts-dialog.c:434
+#: ../src/empathy-accounts-dialog.c:456
#, c-format
msgid "Disconnected — %s"
msgstr "Desconectado: %s"
-#: ../src/empathy-accounts-dialog.c:445
+#: ../src/empathy-accounts-dialog.c:467
msgid "Offline — No Network Connection"
msgstr "Desconectado: sin conexión de red"
-#: ../src/empathy-accounts-dialog.c:452
+#: ../src/empathy-accounts-dialog.c:474
msgid "Unknown Status"
msgstr "Estado desconocido"
-#: ../src/empathy-accounts-dialog.c:469
+#: ../src/empathy-accounts-dialog.c:491
msgid ""
"This account has been disabled because it relies on an old, unsupported "
"backend. Please install telepathy-haze and restart your session to migrate "
@@ -3155,36 +3161,36 @@ msgstr ""
"soportado. Instale telepathy-haze y reinicie la sesión para migrar esta "
"cuenta."
-#: ../src/empathy-accounts-dialog.c:479
+#: ../src/empathy-accounts-dialog.c:501
msgid "Offline — Account Disabled"
msgstr "Desconectado: cuenta desactivada"
-#: ../src/empathy-accounts-dialog.c:585
+#: ../src/empathy-accounts-dialog.c:607
msgid "Edit Connection Parameters"
msgstr "Editar los parámetros de la conexión"
-#: ../src/empathy-accounts-dialog.c:750
+#: ../src/empathy-accounts-dialog.c:770
msgid "Failed to retrieve your personal information from the server."
msgstr "Falló al recuperar su información personal del servidor."
-#: ../src/empathy-accounts-dialog.c:756
+#: ../src/empathy-accounts-dialog.c:776
msgid "Go online to edit your personal information."
msgstr "Conéctese para editar su información personal."
-#: ../src/empathy-accounts-dialog.c:843
+#: ../src/empathy-accounts-dialog.c:850
msgid "_Edit Connection Parameters..."
msgstr "_Editar los parámetros de la conexión…"
-#: ../src/empathy-accounts-dialog.c:1339
+#: ../src/empathy-accounts-dialog.c:1346
#, c-format
msgid "Do you want to remove %s from your computer?"
msgstr "¿Quiere quitar %s de su equipo?"
-#: ../src/empathy-accounts-dialog.c:1343
+#: ../src/empathy-accounts-dialog.c:1350
msgid "This will not remove your account on the server."
msgstr "Esto no quitará su cuenta del servidor."
-#: ../src/empathy-accounts-dialog.c:1579
+#: ../src/empathy-accounts-dialog.c:1555
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3192,24 +3198,25 @@ msgstr ""
"Va a seleccionar otra cuenta lo que descartará sus cambios.\n"
"¿Seguro que quiere continuar?"
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1755
-msgid "_Enable"
-msgstr "_Activar"
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1746
+msgid "_Enabled"
+msgstr "_Activada"
-#: ../src/empathy-accounts-dialog.c:1756
-msgid "_Disable"
-msgstr "_Desactivar"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1769
+msgid "Rename"
+msgstr "Renombrar"
-#: ../src/empathy-accounts-dialog.c:2184
+#: ../src/empathy-accounts-dialog.c:2185
msgid "_Skip"
msgstr "_Omitir"
-#: ../src/empathy-accounts-dialog.c:2188
+#: ../src/empathy-accounts-dialog.c:2189
msgid "_Connect"
msgstr "_Conectar"
-#: ../src/empathy-accounts-dialog.c:2365
+#: ../src/empathy-accounts-dialog.c:2368
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3245,187 +3252,7 @@ msgstr ": Cliente de autenticación de Empathy"
msgid "Empathy authentication client"
msgstr "Cliente de autenticación de Empathy"
-#: ../src/empathy-av.c:118 ../src/empathy-call.c:201
-msgid "- Empathy Audio/Video Client"
-msgstr ": Cliente de sonido/vídeo Empathy"
-
-#: ../src/empathy-av.c:134 ../src/empathy-call.c:223
-msgid "Empathy Audio/Video Client"
-msgstr "Cliente de sonido/vídeo Empathy"
-
-#: ../src/empathy-streamed-media-window.c:434
-msgid "Contrast"
-msgstr "Contraste"
-
-#: ../src/empathy-streamed-media-window.c:437
-msgid "Brightness"
-msgstr "Brillo"
-
-#: ../src/empathy-streamed-media-window.c:440
-msgid "Gamma"
-msgstr "Gamma"
-
-#: ../src/empathy-streamed-media-window.c:547
-msgid "Volume"
-msgstr "Volumen"
-
-#: ../src/empathy-streamed-media-window.c:1099
-msgid "_Sidebar"
-msgstr "Barra _lateral"
-
-#: ../src/empathy-streamed-media-window.c:1119
-msgid "Audio input"
-msgstr "Entrada de voz"
-
-#: ../src/empathy-streamed-media-window.c:1123
-msgid "Video input"
-msgstr "Entrada de vídeo"
-
-#: ../src/empathy-streamed-media-window.c:1131
-msgid "Dialpad"
-msgstr "Teclado de llamada"
-
-#: ../src/empathy-streamed-media-window.c:1142
-msgid "Details"
-msgstr "Detalles"
-
-#. translators: Call is a noun and %s is the contact name. This string
-#. * is used in the window title
-#: ../src/empathy-streamed-media-window.c:1211
-#: ../src/empathy-call-window.c:1889
-#, c-format
-msgid "Call with %s"
-msgstr "Llamada con %s"
-
-#: ../src/empathy-streamed-media-window.c:1444
-#: ../src/empathy-call-window.c:2133
-msgid "The IP address as seen by the machine"
-msgstr "La dirección IP como la ve la máquina"
-
-#: ../src/empathy-streamed-media-window.c:1446
-#: ../src/empathy-call-window.c:2135
-msgid "The IP address as seen by a server on the Internet"
-msgstr "La dirección IP como la ve el servidor de Internet"
-
-#: ../src/empathy-streamed-media-window.c:1448
-#: ../src/empathy-call-window.c:2137
-msgid "The IP address of the peer as seen by the other side"
-msgstr "La dirección IP del par como la ve la otra parte"
-
-#: ../src/empathy-streamed-media-window.c:1450
-#: ../src/empathy-call-window.c:2139
-msgid "The IP address of a relay server"
-msgstr "La dirección IP de un servidor de desvío"
-
-#: ../src/empathy-streamed-media-window.c:1452
-#: ../src/empathy-call-window.c:2141
-msgid "The IP address of the multicast group"
-msgstr "La dirección IP del grupo multicast"
-
-#: ../src/empathy-streamed-media-window.c:1837
-#: ../src/empathy-streamed-media-window.c:1840
-#: ../src/empathy-streamed-media-window.c:1843
-#: ../src/empathy-streamed-media-window.c:1846
-msgctxt "codec"
-msgid "Unknown"
-msgstr "Desconocido"
-
-#. Translators: number of minutes:seconds the caller has been connected
-#: ../src/empathy-streamed-media-window.c:2138
-#, c-format
-msgid "Connected — %d:%02dm"
-msgstr "Conectado — %d:%02dm"
-
-#: ../src/empathy-streamed-media-window.c:2199
-#: ../src/empathy-call-window.c:2992
-msgid "Technical Details"
-msgstr "Detalles técnicos"
-
-#: ../src/empathy-streamed-media-window.c:2237
-#: ../src/empathy-call-window.c:3031
-#, c-format
-msgid ""
-"%s's software does not understand any of the audio formats supported by your "
-"computer"
-msgstr ""
-"El software de «%s» no entiende ninguno de los formatos de vídeo soportados "
-"por su equipo"
-
-#: ../src/empathy-streamed-media-window.c:2242
-#: ../src/empathy-call-window.c:3036
-#, c-format
-msgid ""
-"%s's software does not understand any of the video formats supported by your "
-"computer"
-msgstr ""
-"El software de «%s» no entiende ninguno de los formatos de vídeo soportados "
-"por su equipo"
-
-#: ../src/empathy-streamed-media-window.c:2248
-#: ../src/empathy-call-window.c:3042
-#, c-format
-msgid ""
-"Can't establish a connection to %s. One of you might be on a network that "
-"does not allow direct connections."
-msgstr ""
-"No se puede establecer una conexión con %s. Uno de los dos puede estar en "
-"una red que no acepta conexiones directas."
-
-#: ../src/empathy-streamed-media-window.c:2254
-#: ../src/empathy-call-window.c:3048
-msgid "There was a failure on the network"
-msgstr "Hubo un fallo en la red"
-
-#: ../src/empathy-streamed-media-window.c:2258
-#: ../src/empathy-call-window.c:3052
-msgid ""
-"The audio formats necessary for this call are not installed on your computer"
-msgstr ""
-"No están instalados en su equipo los formatos de sonido necesarios para esta "
-"llamada"
-
-#: ../src/empathy-streamed-media-window.c:2261
-#: ../src/empathy-call-window.c:3055
-msgid ""
-"The video formats necessary for this call are not installed on your computer"
-msgstr ""
-"No están instalados en su equipo los formatos de vídeo necesarios para esta "
-"llamada"
-
-#: ../src/empathy-streamed-media-window.c:2271
-#: ../src/empathy-call-window.c:3067
-#, c-format
-msgid ""
-"Something unexpected happened in a Telepathy component. Please <a href=\"%s"
-"\">report this bug</a> and attach logs gathered from the 'Debug' window in "
-"the Help menu."
-msgstr ""
-"Sucedió algo inesperado en un componente de Telepathy. <a href=\"%s"
-"\">Informe de este error</a> y añada los registros obtenidos de la ventana "
-"de «Depuración» en el menú de Ayuda."
-
-#: ../src/empathy-streamed-media-window.c:2279
-#: ../src/empathy-call-window.c:3076
-msgid "There was a failure in the call engine"
-msgstr "Hubo un fallo en el motor de llamadas"
-
-#: ../src/empathy-streamed-media-window.c:2282
-#: ../src/empathy-call-window.c:3079
-msgid "The end of the stream was reached"
-msgstr "Se llegó al final del flujo"
-
-#: ../src/empathy-streamed-media-window.c:2322
-#: ../src/empathy-call-window.c:3119
-msgid "Can't establish audio stream"
-msgstr "No se puede establecer el flujo de voz"
-
-#: ../src/empathy-streamed-media-window.c:2332
-#: ../src/empathy-call-window.c:3129
-msgid "Can't establish video stream"
-msgstr "No se puede establecer el flujo de vídeo"
-
#: ../src/empathy-call-window.ui.h:1
-#: ../src/empathy-streamed-media-window.ui.h:1
msgid "_Call"
msgstr "_Llamar"
@@ -3442,23 +3269,18 @@ msgid "_Settings"
msgstr "_ConfiguracioÌn"
#: ../src/empathy-call-window.ui.h:6
-#: ../src/empathy-roster-window-menubar.ui.h:17
-#: ../src/empathy-streamed-media-window.ui.h:8
msgid "_View"
msgstr "_Ver"
#: ../src/empathy-call-window.ui.h:7 ../src/empathy-chat-window.ui.h:17
-#: ../src/empathy-roster-window-menubar.ui.h:27
msgid "_Help"
msgstr "Ay_uda"
#: ../src/empathy-call-window.ui.h:8 ../src/empathy-chat-window.ui.h:18
-#: ../src/empathy-roster-window-menubar.ui.h:28
msgid "_Contents"
msgstr "Ãnd_ice"
#: ../src/empathy-call-window.ui.h:9
-#: ../src/empathy-roster-window-menubar.ui.h:29
msgid "_Debug"
msgstr "_Depurar"
@@ -3479,12 +3301,10 @@ msgid "Disable camera"
msgstr "Desactivar cámara"
#: ../src/empathy-call-window.ui.h:14
-#: ../src/empathy-streamed-media-window.ui.h:2
msgid "Hang up"
msgstr "Colgar"
#: ../src/empathy-call-window.ui.h:15
-#: ../src/empathy-streamed-media-window.ui.h:9
msgid "Hang up current call"
msgstr "Colgar la llamada actual"
@@ -3517,52 +3337,44 @@ msgid "Toggle video transmission"
msgstr "Conmutar la transmisión de vídeo"
#: ../src/empathy-call-window.ui.h:24
-#: ../src/empathy-streamed-media-window.ui.h:11
msgid "Send Audio"
msgstr "Enviar voz"
#: ../src/empathy-call-window.ui.h:25
-#: ../src/empathy-streamed-media-window.ui.h:12
msgid "Toggle audio transmission"
msgstr "Conmutar la transmisión de voz"
#: ../src/empathy-call-window.ui.h:27
-#: ../src/empathy-streamed-media-window.ui.h:20
msgid "Encoding Codec:"
msgstr "Códec de codificación:"
-#: ../src/empathy-call-window.ui.h:28
-#: ../src/empathy-streamed-media-window.ui.h:21
-#: ../src/empathy-call-window.c:2542 ../src/empathy-call-window.c:2543
-#: ../src/empathy-call-window.c:2544 ../src/empathy-call-window.c:2545
+#: ../src/empathy-call-window.ui.h:28 ../src/empathy-call-window.c:2511
+#: ../src/empathy-call-window.c:2512 ../src/empathy-call-window.c:2513
+#: ../src/empathy-call-window.c:2514
msgid "Unknown"
msgstr "Desconocido"
#: ../src/empathy-call-window.ui.h:29
-#: ../src/empathy-streamed-media-window.ui.h:22
msgid "Decoding Codec:"
msgstr "Códec de decodificación:"
#: ../src/empathy-call-window.ui.h:30
-#: ../src/empathy-streamed-media-window.ui.h:23
msgid "Remote Candidate:"
msgstr "Candidato remoto:"
#: ../src/empathy-call-window.ui.h:31
-#: ../src/empathy-streamed-media-window.ui.h:24
msgid "Local Candidate:"
msgstr "Candidato local:"
-#: ../src/empathy-call-window.ui.h:32 ../src/empathy-preferences.ui.h:24
-#: ../src/empathy-streamed-media-window.ui.h:25
+#: ../src/empathy-call-window.ui.h:32 ../src/empathy-preferences.ui.h:31
msgid "Audio"
msgstr "Sonido"
-#: ../src/empathy-chat-window.c:289
+#: ../src/empathy-chat-window.c:287
msgid "Close this window?"
msgstr "¿Cerrar esta ventana?"
-#: ../src/empathy-chat-window.c:294
+#: ../src/empathy-chat-window.c:292
#, c-format
msgid ""
"Closing this window will leave %s. You will not receive any further messages "
@@ -3571,7 +3383,7 @@ msgstr ""
"Cerrar esta ventana hará que abandone %s. No recibirá más mensajes hasta que "
"se una de nuevo."
-#: ../src/empathy-chat-window.c:305
+#: ../src/empathy-chat-window.c:303
#, c-format
msgid ""
"Closing this window will leave a chat room. You will not receive any further "
@@ -3586,65 +3398,65 @@ msgstr[1] ""
"Cerrar esta ventana hará que abandone %u salas de chat. No recibirá más "
"mensajes hasta que se una a ellas de nuevo."
-#: ../src/empathy-chat-window.c:314
+#: ../src/empathy-chat-window.c:312
#, c-format
msgid "Leave %s?"
msgstr "¿Cerrar %s?"
-#: ../src/empathy-chat-window.c:315
+#: ../src/empathy-chat-window.c:313
msgid ""
"You will not receive any further messages from this chat room until you "
"rejoin it."
msgstr "No recibirá más mensajes de este chat hasta que se una de nuevo."
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:332
msgid "Close window"
msgstr "Cerrar la ventana"
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:332
msgid "Leave room"
msgstr "Abandonar la sala"
-#: ../src/empathy-chat-window.c:640 ../src/empathy-chat-window.c:660
+#: ../src/empathy-chat-window.c:638 ../src/empathy-chat-window.c:658
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
msgstr[0] "%s (%d sin leer)"
msgstr[1] "%s (%d sin leer)"
-#: ../src/empathy-chat-window.c:652
+#: ../src/empathy-chat-window.c:650
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
msgstr[0] "%s (y otra)"
msgstr[1] "%s (y otras %u)"
-#: ../src/empathy-chat-window.c:668
+#: ../src/empathy-chat-window.c:666
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
msgstr[0] "%s (%d sin leer de otros)"
msgstr[1] "%s (%d sin leer de otros)"
-#: ../src/empathy-chat-window.c:677
+#: ../src/empathy-chat-window.c:675
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
msgstr[0] "%s (%d sin leer de todos)"
msgstr[1] "%s (%d sin leer de todos)"
-#: ../src/empathy-chat-window.c:892
+#: ../src/empathy-chat-window.c:890
msgid "SMS:"
msgstr "SMS:"
-#: ../src/empathy-chat-window.c:902
+#: ../src/empathy-chat-window.c:900
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
msgstr[0] "Enviando %d mensaje"
msgstr[1] "Enviando %d mensajes"
-#: ../src/empathy-chat-window.c:924
+#: ../src/empathy-chat-window.c:922
msgid "Typing a message."
msgstr "Tecleando un mensaje."
@@ -3724,96 +3536,94 @@ msgstr "Autoconectar"
msgid "Manage Favorite Rooms"
msgstr "Gestionar salas favoritas"
-#: ../src/empathy-event-manager.c:522
+#: ../src/empathy-event-manager.c:510
msgid "Incoming video call"
msgstr "Llamada de vídeo entrante"
-#: ../src/empathy-event-manager.c:522 ../src/empathy-call-window.c:1519
+#: ../src/empathy-event-manager.c:510 ../src/empathy-call-window.c:1480
msgid "Incoming call"
msgstr "Llamada entrante"
-#: ../src/empathy-event-manager.c:526
+#: ../src/empathy-event-manager.c:514
#, c-format
msgid "%s is video calling you. Do you want to answer?"
msgstr "%s le está llamando con vídeo. ¿Quiere responder?"
-#: ../src/empathy-event-manager.c:527
+#: ../src/empathy-event-manager.c:515
#, c-format
msgid "%s is calling you. Do you want to answer?"
msgstr "%s le está llamando. ¿Quiere responder?"
-#: ../src/empathy-event-manager.c:530 ../src/empathy-event-manager.c:731
-#: ../src/empathy-event-manager.c:764 ../src/empathy-call-window.c:1525
+#: ../src/empathy-event-manager.c:518 ../src/empathy-event-manager.c:915
+#: ../src/empathy-call-window.c:1486
#, c-format
msgid "Incoming call from %s"
msgstr "Llamada entrante de %s"
-#: ../src/empathy-event-manager.c:555
+#: ../src/empathy-event-manager.c:543
msgid "_Reject"
msgstr "_Rechazar"
-#: ../src/empathy-event-manager.c:563 ../src/empathy-event-manager.c:571
+#: ../src/empathy-event-manager.c:551 ../src/empathy-event-manager.c:559
msgid "_Answer"
msgstr "Re_spuesta"
-#: ../src/empathy-event-manager.c:571
+#: ../src/empathy-event-manager.c:559
msgid "_Answer with video"
msgstr "_Responder con vídeo"
-#: ../src/empathy-event-manager.c:731 ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
-#, c-format
-msgid "Incoming video call from %s"
-msgstr "Llamada de vídeo entrante de %s"
-
-#: ../src/empathy-event-manager.c:837
+#: ../src/empathy-event-manager.c:714
msgid "Room invitation"
msgstr "Invitación a una sala"
-#: ../src/empathy-event-manager.c:839
+#: ../src/empathy-event-manager.c:716
#, c-format
msgid "Invitation to join %s"
msgstr "Invitación para unirse a %s"
-#: ../src/empathy-event-manager.c:846
+#: ../src/empathy-event-manager.c:723
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
-#: ../src/empathy-event-manager.c:854
+#: ../src/empathy-event-manager.c:731
msgid "_Decline"
msgstr "_Rechazar"
-#: ../src/empathy-event-manager.c:859
-#: ../src/empathy-new-chatroom-dialog.ui.h:2
+#: ../src/empathy-event-manager.c:736
msgid "_Join"
msgstr "_Unirse"
-#: ../src/empathy-event-manager.c:886
+#: ../src/empathy-event-manager.c:762
#, c-format
msgid "%s invited you to join %s"
msgstr "%s le ha invitado a unirse a %s"
-#: ../src/empathy-event-manager.c:892
+#: ../src/empathy-event-manager.c:768
#, c-format
msgid "You have been invited to join %s"
msgstr "Le han invitado a unirse a %s"
-#: ../src/empathy-event-manager.c:943
+#: ../src/empathy-event-manager.c:915 ../src/empathy-call-window.c:1486
+#, c-format
+msgid "Incoming video call from %s"
+msgstr "Llamada de vídeo entrante de %s"
+
+#: ../src/empathy-event-manager.c:947
#, c-format
msgid "Incoming file transfer from %s"
msgstr "Transferencia de archivo entrante de %s"
-#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:374
+#: ../src/empathy-event-manager.c:983 ../src/empathy-roster-window.c:357
msgid "Password required"
msgstr "Se requiere una contraseña"
-#: ../src/empathy-event-manager.c:1216
+#: ../src/empathy-event-manager.c:1105
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s quiere permiso para ver cuándo está en línea"
-#: ../src/empathy-event-manager.c:1222
+#: ../src/empathy-event-manager.c:1111
#, c-format
msgid ""
"\n"
@@ -3952,88 +3762,73 @@ msgid "Import Accounts"
msgstr "Importar cuentas"
#. Translators: this is the header of a treeview column
-#: ../src/empathy-import-widget.c:316
+#: ../src/empathy-import-widget.c:303
msgid "Import"
msgstr "Importar"
-#: ../src/empathy-import-widget.c:325
+#: ../src/empathy-import-widget.c:312
msgid "Protocol"
msgstr "Protocolo"
-#: ../src/empathy-import-widget.c:349
+#: ../src/empathy-import-widget.c:336
msgid "Source"
msgstr "Origen"
-#: ../src/empathy-roster-window.c:391
+#: ../src/empathy-roster-window.c:374
msgid "Provide Password"
msgstr "Escriba su contraseña"
-#: ../src/empathy-roster-window.c:397
+#: ../src/empathy-roster-window.c:380
msgid "Disconnect"
msgstr "Desconectar"
-#: ../src/empathy-roster-window.c:657
+#: ../src/empathy-roster-window.c:640
msgid "You need to setup an account to see contacts here."
msgstr "Debe configurar una cuenta para ver contactos aquí."
-#: ../src/empathy-roster-window.c:673
+#: ../src/empathy-roster-window.c:656
msgid "No match found"
msgstr "No se encontró ninguna coincidencia"
-#: ../src/empathy-roster-window.c:783
+#: ../src/empathy-roster-window.c:766
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr ""
"Las cuentas de %s no se pueden usar hasta que no se haya actualizado su "
"software de %s."
-#: ../src/empathy-roster-window.c:849
+#: ../src/empathy-roster-window.c:832
msgid "Update software..."
msgstr "Actualizar software…"
-#: ../src/empathy-roster-window.c:855 ../src/empathy-roster-window.c:972
+#: ../src/empathy-roster-window.c:838 ../src/empathy-roster-window.c:955
msgid "Close"
msgstr "Cerrar"
-#: ../src/empathy-roster-window.c:960
+#: ../src/empathy-roster-window.c:943
msgid "Reconnect"
msgstr "Reconectar"
-#: ../src/empathy-roster-window.c:966
+#: ../src/empathy-roster-window.c:949
msgid "Edit Account"
msgstr "Editar cuenta"
-#. Translators: this string will be something like:
-#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1110
-#, c-format
-msgid "Top up %s (%s)..."
-msgstr "Recargar %s (%s)…"
-
-#: ../src/empathy-roster-window.c:1156
-msgid "Top up account credit"
-msgstr "Recargar el saldo de la cuenta"
+#: ../src/empathy-roster-window.c:1129
+#| msgid "Top up account credit"
+msgid "Top up account"
+msgstr "Recargar cuenta"
-#. top up button
-#: ../src/empathy-roster-window.c:1228
-msgid "Top Up..."
-msgstr "Recargar…"
-
-#: ../src/empathy-roster-window.c:1952
-msgid "Contact"
-msgstr "Contacto"
-
-#: ../src/empathy-roster-window.c:2150
+#: ../src/empathy-roster-window.c:1824
msgid "You need to enable one of your accounts to see contacts here."
msgstr "Debe activar una de sus cuentas para ver contactos aquí."
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2158
+#: ../src/empathy-roster-window.c:1832
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr "Debe activar %s para ver contactos aquiÌ."
-#: ../src/empathy-roster-window.c:2460
+#: ../src/empathy-roster-window.c:2148 ../src/empathy-preferences.ui.h:7
msgid "Contact List"
msgstr "Lista de contactos"
@@ -4041,103 +3836,91 @@ msgstr "Lista de contactos"
msgid "Account settings"
msgstr "Configuración de la cuenta"
+#: ../src/empathy-roster-window-menubar.ui.h:1
+msgid "_New Conversation..."
+msgstr "_Conversación nueva…"
+
#: ../src/empathy-roster-window-menubar.ui.h:2
-#: ../src/empathy-status-icon.ui.h:2
-msgid "_New Conversation…"
-msgstr "Conversación _nueva…"
+msgid "New _Call..."
+msgstr "_Llamada nueva…"
#: ../src/empathy-roster-window-menubar.ui.h:3
-#: ../src/empathy-status-icon.ui.h:3
-msgid "New _Call…"
-msgstr "_Llamada nueva…"
+#| msgid "Contact"
+msgid "Contacts"
+msgstr "Contactos"
-#: ../src/empathy-roster-window-menubar.ui.h:6
-msgid "_Search for Contacts…"
+#: ../src/empathy-roster-window-menubar.ui.h:4
+#| msgid "_Add Contact"
+msgid "_Add Contacts..."
+msgstr "_Añadir contactos…"
+
+#: ../src/empathy-roster-window-menubar.ui.h:5
+#| msgid "_Search for Contacts…"
+msgid "_Search for Contacts..."
msgstr "_Buscar contactos…"
+#: ../src/empathy-roster-window-menubar.ui.h:6
+msgid "_Blocked Contacts"
+msgstr "Contactos _bloqueados"
+
#: ../src/empathy-roster-window-menubar.ui.h:7
-msgid "_File Transfers"
-msgstr "_Transferencias de archivos"
+#| msgid "_Room"
+msgid "_Rooms"
+msgstr "_Salas"
#: ../src/empathy-roster-window-menubar.ui.h:8
-msgid "_Offline Contacts"
-msgstr "Contactos _desconectados"
+msgid "_Join..."
+msgstr "_Unirse…"
#: ../src/empathy-roster-window-menubar.ui.h:9
-msgid "Show P_rotocols"
-msgstr "Mostrar p_rotocolos"
+msgid "Join _Favorites"
+msgstr "Unirse a _favoritas"
#: ../src/empathy-roster-window-menubar.ui.h:10
-msgid "Credit Balance"
-msgstr "Crédito"
+#| msgid "Manage Favorites"
+msgid "_Manage Favorites"
+msgstr "_Gestionar favoritos"
-#: ../src/empathy-roster-window-menubar.ui.h:11
-msgid "Contacts on a _Map"
-msgstr "Contactos en el _mapa"
+#: ../src/empathy-roster-window-menubar.ui.h:12
+msgid "_File Transfers"
+msgstr "_Transferencias de archivos"
#: ../src/empathy-roster-window-menubar.ui.h:13
msgid "_Accounts"
msgstr "_Cuentas"
#: ../src/empathy-roster-window-menubar.ui.h:14
-msgid "_Blocked Contacts"
-msgstr "Contactos _bloqueados"
-
-#: ../src/empathy-roster-window-menubar.ui.h:15
msgid "P_references"
msgstr "Prefere_ncias"
-#: ../src/empathy-roster-window-menubar.ui.h:16
-msgid "Find in Contact _List"
-msgstr "_Buscar en la lista de contactos"
-
-#: ../src/empathy-roster-window-menubar.ui.h:18
-msgid "Sort by _Name"
-msgstr "Ordenar por _nombre"
-
-#: ../src/empathy-roster-window-menubar.ui.h:19
-msgid "Sort by _Status"
-msgstr "Ordenar por es_tado"
-
-#: ../src/empathy-roster-window-menubar.ui.h:20
-msgid "Normal Size With _Avatars"
-msgstr "Tamaño normal con _avatares"
-
-#: ../src/empathy-roster-window-menubar.ui.h:21
-msgid "N_ormal Size"
-msgstr "Tamaño n_ormal"
-
-#: ../src/empathy-roster-window-menubar.ui.h:22
-msgid "_Compact Size"
-msgstr "Tamaño _compacto"
-
-#: ../src/empathy-roster-window-menubar.ui.h:23
-msgid "_Room"
-msgstr "_Sala"
-
-#: ../src/empathy-roster-window-menubar.ui.h:24
-msgid "_Join…"
-msgstr "_Unirse…"
+#: ../src/empathy-roster-window-menubar.ui.h:15
+#| msgid "_Help"
+msgid "Help"
+msgstr "Ayuda"
-#: ../src/empathy-roster-window-menubar.ui.h:25
-msgid "Join _Favorites"
-msgstr "Unirse a _favoritas"
+#: ../src/empathy-roster-window-menubar.ui.h:16
+#| msgid "Empathy"
+msgid "About Empathy"
+msgstr "Acerca de Empathy"
-#: ../src/empathy-roster-window-menubar.ui.h:26
-msgid "Manage Favorites"
-msgstr "Gestionar favoritos"
+#: ../src/empathy-roster-window-menubar.ui.h:17
+#: ../src/empathy-status-icon.ui.h:5
+msgid "_Quit"
+msgstr "_Salir"
-#: ../src/empathy-new-chatroom-dialog.c:369
+#: ../src/empathy-new-chatroom-dialog.c:194
msgid "Chat Room"
msgstr "Sala de chat"
-#: ../src/empathy-new-chatroom-dialog.c:385
+#: ../src/empathy-new-chatroom-dialog.c:209
msgid "Members"
msgstr "Miembros"
-#. Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
-#. yes/no, yes/no and a number.
-#: ../src/empathy-new-chatroom-dialog.c:637
+#: ../src/empathy-new-chatroom-dialog.c:410
+msgid "Failed to list rooms"
+msgstr "Falló al listar las salas"
+
+#: ../src/empathy-new-chatroom-dialog.c:439
#, c-format
msgid ""
"%s\n"
@@ -4150,40 +3933,40 @@ msgstr ""
"Se necesita contraseña: %s\n"
"Miembros: %s"
-#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
+#: ../src/empathy-new-chatroom-dialog.c:441
+#: ../src/empathy-new-chatroom-dialog.c:442
msgid "Yes"
msgstr "Sí"
-#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
+#: ../src/empathy-new-chatroom-dialog.c:441
+#: ../src/empathy-new-chatroom-dialog.c:442
msgid "No"
msgstr "No"
-#: ../src/empathy-new-chatroom-dialog.c:668
-msgid "Could not start room listing"
-msgstr "No se pudo iniciar la lista de la sala"
-
-#: ../src/empathy-new-chatroom-dialog.c:678
-msgid "Could not stop room listing"
-msgstr "No se pudo parar la lista de la sala"
-
-#: ../src/empathy-new-chatroom-dialog.ui.h:1
+#: ../src/empathy-new-chatroom-dialog.c:782
msgid "Join Room"
msgstr "Unirse a sala"
-#: ../src/empathy-new-chatroom-dialog.ui.h:3
+#: ../src/empathy-new-chatroom-dialog.ui.h:1
msgid ""
"Enter the room name to join here or click on one or more rooms in the list."
msgstr ""
"Introduzca el nombre de la sala a la que unirse o pulse una o más salas de "
"la lista."
-#: ../src/empathy-new-chatroom-dialog.ui.h:4
+#: ../src/empathy-new-chatroom-dialog.ui.h:2
msgid "_Room:"
msgstr "_Sala:"
-#: ../src/empathy-new-chatroom-dialog.ui.h:5
+#: ../src/empathy-new-chatroom-dialog.ui.h:3
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account&apos;s server"
+msgstr ""
+"Introduzca el servidor que aloja la sala o déjelo vacío si la sala está en "
+"la cuenta del servidor actual"
+
+#: ../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"
@@ -4191,179 +3974,200 @@ msgstr ""
"Introduzca el servidor que aloja la sala o déjelo vacío si la sala está en "
"la cuenta del servidor actual"
-#: ../src/empathy-new-chatroom-dialog.ui.h:8
+#: ../src/empathy-new-chatroom-dialog.ui.h:7
msgid "Couldn't load room list"
msgstr "No se pudo cargar la lista de la sala"
-#: ../src/empathy-new-chatroom-dialog.ui.h:9
+#: ../src/empathy-new-chatroom-dialog.ui.h:8
msgid "Room List"
msgstr "Lista de salas"
-#: ../src/empathy-preferences.c:166
+#: ../src/empathy-preferences.c:146
msgid "Message received"
msgstr "Mensaje recibido"
-#: ../src/empathy-preferences.c:167
+#: ../src/empathy-preferences.c:147
msgid "Message sent"
msgstr "Mensaje enviado"
-#: ../src/empathy-preferences.c:168
+#: ../src/empathy-preferences.c:148
msgid "New conversation"
msgstr "Conversación nueva"
-#: ../src/empathy-preferences.c:169
+#: ../src/empathy-preferences.c:149
msgid "Contact comes online"
msgstr "El contacto se conecta"
-#: ../src/empathy-preferences.c:170
+#: ../src/empathy-preferences.c:150
msgid "Contact goes offline"
msgstr "El contacto se desconecta"
-#: ../src/empathy-preferences.c:171
+#: ../src/empathy-preferences.c:151
msgid "Account connected"
msgstr "Cuenta conectada"
-#: ../src/empathy-preferences.c:172
+#: ../src/empathy-preferences.c:152
msgid "Account disconnected"
msgstr "Cuenta desconectada"
-#: ../src/empathy-preferences.c:475
+#: ../src/empathy-preferences.c:429
msgid "Language"
msgstr "Idioma"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:726
+#: ../src/empathy-preferences.c:678
msgid "Juliet"
msgstr "Julieta"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:733
+#: ../src/empathy-preferences.c:685
msgid "Romeo"
msgstr "Romeo"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:739
+#: ../src/empathy-preferences.c:691
msgid "O Romeo, Romeo, wherefore art thou Romeo?"
msgstr "¡Oh, Romeo, Romeo!, ¿dónde estás que no te veo?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:743
+#: ../src/empathy-preferences.c:695
msgid "Deny thy father and refuse thy name;"
msgstr "Niega a tu padre y rehúsa tu nombre;"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:746
+#: ../src/empathy-preferences.c:698
msgid "Or if thou wilt not, be but sworn my love"
msgstr "O, si no quieres, júrame tan sólo que me amas"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:749
+#: ../src/empathy-preferences.c:701
msgid "And I'll no longer be a Capulet."
msgstr "Y dejaré yo de ser una Capuleto"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:752
+#: ../src/empathy-preferences.c:704
msgid "Shall I hear more, or shall I speak at this?"
msgstr "¿Debo oír más o contestar a lo dicho?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:755
+#: ../src/empathy-preferences.c:707
msgid "Juliet has disconnected"
msgstr "Julieta se ha desconectado"
-#: ../src/empathy-preferences.c:1159
+#: ../src/empathy-preferences.c:1112
msgid "Preferences"
msgstr "Preferencias"
-#: ../src/empathy-preferences.ui.h:1
-msgid "Show _smileys as images"
-msgstr "Mostrar los _emoticonos como imágenes"
-
#: ../src/empathy-preferences.ui.h:2
-msgid "Show contact _list in rooms"
-msgstr "Mostrar _lista de contactos en salas"
+#| msgid "Show protocols"
+msgid "Show protocol in avatar"
+msgstr "Mostrar protocolo en el avatar"
#: ../src/empathy-preferences.ui.h:3
-msgid "Appearance"
-msgstr "Apariencia"
+#| msgid "Show account assistant"
+msgid "Show account balances"
+msgstr "Mostrar los balances de las cuentas"
#: ../src/empathy-preferences.ui.h:4
+#| msgid "Search contacts"
+msgid "Sort contacts by:"
+msgstr "Ordenar contactos por:"
+
+#: ../src/empathy-preferences.ui.h:5
+#| msgid "Status"
+msgid "status"
+msgstr "estado"
+
+#: ../src/empathy-preferences.ui.h:6
+#| msgid "Rename"
+msgid "name"
+msgstr "nombre"
+
+#: ../src/empathy-preferences.ui.h:8
msgid "Start chats in:"
msgstr "Iniciar chats en:"
-#: ../src/empathy-preferences.ui.h:5
+#: ../src/empathy-preferences.ui.h:9
msgid "new ta_bs"
msgstr "pestañas nue_vas"
-#: ../src/empathy-preferences.ui.h:6
+#: ../src/empathy-preferences.ui.h:10
msgid "new _windows"
msgstr "v_entanas nuevas"
-#: ../src/empathy-preferences.ui.h:7
+#: ../src/empathy-preferences.ui.h:11
+msgid "Show _smileys as images"
+msgstr "Mostrar los _emoticonos como imágenes"
+
+#: ../src/empathy-preferences.ui.h:12
+msgid "Show contact _list in rooms"
+msgstr "Mostrar _lista de contactos en salas"
+
+#: ../src/empathy-preferences.ui.h:13
+msgid "Log conversations"
+msgstr "Registrar conversaciones"
+
+#: ../src/empathy-preferences.ui.h:15
msgid "Display incoming events in the notification area"
msgstr "Mostrar los eventos entrantes en el área de notificación"
-#: ../src/empathy-preferences.ui.h:8
+#: ../src/empathy-preferences.ui.h:16
msgid "_Automatically connect on startup"
msgstr "C_onectarse automáticamente al inicio"
-#: ../src/empathy-preferences.ui.h:9
-msgid "Log conversations"
-msgstr "Registrar conversaciones"
-
-#: ../src/empathy-preferences.ui.h:10
+#: ../src/empathy-preferences.ui.h:17
msgid "Behavior"
msgstr "Comportamiento"
-#: ../src/empathy-preferences.ui.h:11
+#: ../src/empathy-preferences.ui.h:18
msgid "General"
msgstr "General"
-#: ../src/empathy-preferences.ui.h:12
+#: ../src/empathy-preferences.ui.h:19
msgid "_Enable bubble notifications"
msgstr "_Activar notificaciones de burbuja"
-#: ../src/empathy-preferences.ui.h:13
+#: ../src/empathy-preferences.ui.h:20
msgid "Disable notifications when _away or busy"
msgstr "Desactivar notificaciones al _ausentarse o estar ocupado"
-#: ../src/empathy-preferences.ui.h:14
+#: ../src/empathy-preferences.ui.h:21
msgid "Enable notifications when the _chat is not focused"
msgstr "Activar notificaciones cuando el _chat no tenga el foco"
-#: ../src/empathy-preferences.ui.h:15
+#: ../src/empathy-preferences.ui.h:22
msgid "Enable notifications when a contact comes online"
msgstr "Activar notificaciones cuando un contacto se conecta"
-#: ../src/empathy-preferences.ui.h:16
+#: ../src/empathy-preferences.ui.h:23
msgid "Enable notifications when a contact goes offline"
msgstr "Activar notificaciones cuando un contacto se desconecta"
-#: ../src/empathy-preferences.ui.h:17
+#: ../src/empathy-preferences.ui.h:24
msgid "Notifications"
msgstr "Notificaciones"
-#: ../src/empathy-preferences.ui.h:18
+#: ../src/empathy-preferences.ui.h:25
msgid "_Enable sound notifications"
msgstr "_Activar notificaciones de sonido"
-#: ../src/empathy-preferences.ui.h:19
+#: ../src/empathy-preferences.ui.h:26
msgid "Disable sounds when _away or busy"
msgstr "Desactivar sonidos al _ausentarse o estar ocupado"
-#: ../src/empathy-preferences.ui.h:20
+#: ../src/empathy-preferences.ui.h:27
msgid "Play sound for events"
msgstr "Reproducir sonido para eventos"
-#: ../src/empathy-preferences.ui.h:21
+#: ../src/empathy-preferences.ui.h:28
msgid "Sounds"
msgstr "Sonidos"
-#: ../src/empathy-preferences.ui.h:22
+#: ../src/empathy-preferences.ui.h:29
msgid "Use _echo cancellation to improve call quality"
msgstr "Usar cancelación de _eco para mejorar la calidad de las llamadas"
-#: ../src/empathy-preferences.ui.h:23
+#: ../src/empathy-preferences.ui.h:30
msgid ""
"Echo cancellation helps to make your voice sound clearer to the other "
"person, but may cause problems on some computers. If you or the other person "
@@ -4375,11 +4179,11 @@ msgstr ""
"persona oyen ruidos o tienen problemas durante las llamadas, intente "
"desactivar la cancelación de eco y reiniciar la llamada."
-#: ../src/empathy-preferences.ui.h:26
+#: ../src/empathy-preferences.ui.h:33
msgid "_Publish location to my contacts"
msgstr "_Publicar mi ubicación a mis contactos"
-#: ../src/empathy-preferences.ui.h:27
+#: ../src/empathy-preferences.ui.h:34
msgid ""
"Reduced location accuracy means that nothing more precise than your city, "
"state and country will be published. GPS coordinates will be accurate to 1 "
@@ -4390,31 +4194,31 @@ msgstr ""
"aleatorio añadido 1 lugar decimal."
#. To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees.
-#: ../src/empathy-preferences.ui.h:29
+#: ../src/empathy-preferences.ui.h:36
msgid "_Reduce location accuracy"
msgstr "_Reducir la precisión de la ubicación"
-#: ../src/empathy-preferences.ui.h:30
+#: ../src/empathy-preferences.ui.h:37
msgid "Privacy"
msgstr "Privacidad"
-#: ../src/empathy-preferences.ui.h:31
+#: ../src/empathy-preferences.ui.h:38
msgid "_GPS"
msgstr "_GPS"
-#: ../src/empathy-preferences.ui.h:32
+#: ../src/empathy-preferences.ui.h:39
msgid "_Cellphone"
msgstr "Teléfono _móvil"
-#: ../src/empathy-preferences.ui.h:33
+#: ../src/empathy-preferences.ui.h:40
msgid "_Network (IP, Wi-Fi)"
msgstr "_Red (IP, Wi-Fi)"
-#: ../src/empathy-preferences.ui.h:34
+#: ../src/empathy-preferences.ui.h:41
msgid "Location sources:"
msgstr "Orígenes de las ubicaciones:"
-#: ../src/empathy-preferences.ui.h:36
+#: ../src/empathy-preferences.ui.h:43
msgid ""
"The list of languages reflects only the languages for which you have a "
"dictionary installed."
@@ -4422,166 +4226,117 @@ msgstr ""
"La lista de idiomas refleja sólo los idiomas para los cuales tiene un "
"diccionario instalado."
-#: ../src/empathy-preferences.ui.h:37
+#: ../src/empathy-preferences.ui.h:44
msgid "Enable spell checking for languages:"
msgstr "Activar la revisión ortográfica para idiomas:"
-#: ../src/empathy-preferences.ui.h:38
+#: ../src/empathy-preferences.ui.h:45
msgid "Spell Checking"
msgstr "Revisión ortográfica"
-#: ../src/empathy-preferences.ui.h:39
+#: ../src/empathy-preferences.ui.h:46
msgid "Chat Th_eme:"
msgstr "_Tema del chat:"
-#: ../src/empathy-preferences.ui.h:40
+#: ../src/empathy-preferences.ui.h:47
msgid "Variant:"
msgstr "Variante:"
-#: ../src/empathy-preferences.ui.h:41
+#: ../src/empathy-preferences.ui.h:48
msgid "Themes"
msgstr "Temas"
+#: ../src/empathy-status-icon.ui.h:2
+msgid "_New Conversation…"
+msgstr "Conversación _nueva…"
+
+#: ../src/empathy-status-icon.ui.h:3
+msgid "New _Call…"
+msgstr "_Llamada nueva…"
+
#: ../src/empathy-status-icon.ui.h:4
msgid "Status"
msgstr "Estado"
-#: ../src/empathy-status-icon.ui.h:5
-msgid "_Quit"
-msgstr "_Salir"
-
-#: ../src/empathy-streamed-media-window.ui.h:3
-msgid "Redial"
-msgstr "Volver a llamar"
-
-#: ../src/empathy-streamed-media-window.ui.h:4
-msgid "V_ideo"
-msgstr "Ví_deo"
-
-#: ../src/empathy-streamed-media-window.ui.h:5
-msgid "Video Off"
-msgstr "Vídeo apagado"
-
-#: ../src/empathy-streamed-media-window.ui.h:6
-msgid "Video Preview"
-msgstr "Vista preliminar del vídeo"
-
-#: ../src/empathy-streamed-media-window.ui.h:7
-msgid "Video On"
-msgstr "Vídeo encendido"
-
-#: ../src/empathy-streamed-media-window.ui.h:10
-msgid "Call the contact again"
-msgstr "Llamar de nuevo al contacto"
-
-#: ../src/empathy-streamed-media-window.ui.h:13
-msgid "Camera Off"
-msgstr "Cámara apagada"
-
-#: ../src/empathy-streamed-media-window.ui.h:14
-msgid "Disable camera and stop sending video"
-msgstr "Desactivar la cámara y dejar de enviar vídeo"
-
-#: ../src/empathy-streamed-media-window.ui.h:15
-msgid "Preview"
-msgstr "Vista previa"
-
-#: ../src/empathy-streamed-media-window.ui.h:16
-msgid "Enable camera but don't send video"
-msgstr "Activar la cámara pero no enviar vídeo"
-
-#: ../src/empathy-streamed-media-window.ui.h:17
-msgid "Camera On"
-msgstr "Cámara encendida"
-
-#: ../src/empathy-streamed-media-window.ui.h:18
-msgid "Enable camera and send video"
-msgstr "Activar la cámara y enviar vídeo"
-
#: ../src/empathy-map-view.c:471
msgid "Contact Map View"
msgstr "Vista del mapa de contactos"
-#: ../src/empathy-debug-window.c:1607
+#: ../src/empathy-debug-window.c:1603
msgid "Save"
msgstr "Guardar"
-#: ../src/empathy-debug-window.c:1667
+#: ../src/empathy-debug-window.c:1663
msgid "Pastebin link"
msgstr "Enlace a pastebin"
-#: ../src/empathy-debug-window.c:1676
+#: ../src/empathy-debug-window.c:1672
msgid "Pastebin response"
msgstr "Respuesta de pastebin"
-#: ../src/empathy-debug-window.c:1680
-#, c-format
-msgid "%s"
-msgstr "%s"
-
-#: ../src/empathy-debug-window.c:1683
+#: ../src/empathy-debug-window.c:1679
msgid "Data too large for a single paste. Please save logs to file."
msgstr ""
"Datos demasiado largos para un pegado sencillo. Guarde el registro en un "
"archivo."
-#: ../src/empathy-debug-window.c:1912
+#: ../src/empathy-debug-window.c:1858
msgid "Debug Window"
msgstr "Depurar ventana"
-#: ../src/empathy-debug-window.c:1970
+#: ../src/empathy-debug-window.c:1918
msgid "Send to pastebin"
msgstr "Enviar a pastebin"
-#: ../src/empathy-debug-window.c:2009
+#: ../src/empathy-debug-window.c:1962
msgid "Pause"
msgstr "Pausar"
-#: ../src/empathy-debug-window.c:2021
+#: ../src/empathy-debug-window.c:1974
msgid "Level "
msgstr "Nivel "
-#: ../src/empathy-debug-window.c:2040
+#: ../src/empathy-debug-window.c:1993
msgid "Debug"
msgstr "Depurar"
-#: ../src/empathy-debug-window.c:2045
+#: ../src/empathy-debug-window.c:1998
msgid "Info"
msgstr "Información"
-#: ../src/empathy-debug-window.c:2050 ../src/empathy-debug-window.c:2096
+#: ../src/empathy-debug-window.c:2003 ../src/empathy-debug-window.c:2052
msgid "Message"
msgstr "Mensaje"
-#: ../src/empathy-debug-window.c:2055
+#: ../src/empathy-debug-window.c:2008
msgid "Warning"
msgstr "Advertencia"
-#: ../src/empathy-debug-window.c:2060
+#: ../src/empathy-debug-window.c:2013
msgid "Critical"
msgstr "Crítico"
-#: ../src/empathy-debug-window.c:2065
+#: ../src/empathy-debug-window.c:2018
msgid "Error"
msgstr "Error"
-#: ../src/empathy-debug-window.c:2084
+#: ../src/empathy-debug-window.c:2037
msgid "Time"
msgstr "Hora"
-#: ../src/empathy-debug-window.c:2087
+#: ../src/empathy-debug-window.c:2040
msgid "Domain"
msgstr "Dominio"
-#: ../src/empathy-debug-window.c:2089
+#: ../src/empathy-debug-window.c:2043
msgid "Category"
msgstr "Categoría"
-#: ../src/empathy-debug-window.c:2091
+#: ../src/empathy-debug-window.c:2046
msgid "Level"
msgstr "Nivel"
-#: ../src/empathy-debug-window.c:2114
+#: ../src/empathy-debug-window.c:2075
msgid ""
"The selected connection manager does not support the remote debugging "
"extension."
@@ -4589,16 +4344,16 @@ msgstr ""
"El gestor de conexiones seleccionado no soporta la extensión de depuración "
"remota."
-#: ../src/empathy-invite-participant-dialog.c:202
-#: ../src/empathy-invite-participant-dialog.c:230
+#: ../src/empathy-invite-participant-dialog.c:201
+#: ../src/empathy-invite-participant-dialog.c:229
msgid "Invite Participant"
msgstr "Invitar participante"
-#: ../src/empathy-invite-participant-dialog.c:203
+#: ../src/empathy-invite-participant-dialog.c:202
msgid "Choose a contact to invite into the conversation:"
msgstr "Elegir un contacto para invitar a la conversación:"
-#: ../src/empathy-invite-participant-dialog.c:226
+#: ../src/empathy-invite-participant-dialog.c:225
msgid "Invite"
msgstr "Invitar"
@@ -4626,7 +4381,7 @@ msgstr "<id-de-cuenta>"
msgid "- Empathy Accounts"
msgstr ": Cuentas en Empathy"
-#: ../src/empathy-accounts.c:231
+#: ../src/empathy-accounts.c:232
msgid "Empathy Accounts"
msgstr "Cuentas en Empathy"
@@ -4642,97 +4397,208 @@ msgstr "- Depurador de Empathy"
msgid "Empathy Debugger"
msgstr "Depurador de Empathy"
-#: ../src/empathy-chat.c:109
+#: ../src/empathy-chat.c:106
msgid "- Empathy Chat Client"
msgstr ": Cliente de chat Empathy"
-#: ../src/empathy-notifications-approver.c:189
+#: ../src/empathy-notifications-approver.c:188
msgid "Respond"
msgstr "Respuesta"
-#: ../src/empathy-notifications-approver.c:203
-#: ../src/empathy-call-window.c:1529
+#: ../src/empathy-notifications-approver.c:197
+#: ../src/empathy-call-window.c:1490
msgid "Reject"
msgstr "Rechazar"
-#: ../src/empathy-notifications-approver.c:208
-#: ../src/empathy-notifications-approver.c:213
-#: ../src/empathy-call-window.c:1530
+#: ../src/empathy-notifications-approver.c:202
+#: ../src/empathy-notifications-approver.c:207
+#: ../src/empathy-call-window.c:1491
msgid "Answer"
msgstr "Responder"
-#: ../src/empathy-notifications-approver.c:213
+#: ../src/empathy-notifications-approver.c:207
msgid "Answer with video"
msgstr "Responder con vídeo"
-#: ../src/empathy-notifications-approver.c:221
-#: ../src/empathy-notifications-approver.c:231
+#: ../src/empathy-notifications-approver.c:215
+#: ../src/empathy-notifications-approver.c:225
msgid "Decline"
msgstr "Rechazar"
-#: ../src/empathy-notifications-approver.c:225
-#: ../src/empathy-notifications-approver.c:236
+#: ../src/empathy-notifications-approver.c:219
+#: ../src/empathy-notifications-approver.c:230
msgid "Accept"
msgstr "Aceptar"
#. translators: the 'Provide' button is displayed in a notification
#. * bubble when Empathy is asking for an account password; clicking on it
#. * brings the password popup.
-#: ../src/empathy-notifications-approver.c:246
+#: ../src/empathy-notifications-approver.c:240
msgid "Provide"
msgstr "Proporcionar"
-#: ../src/empathy-call-observer.c:132
+#: ../src/empathy-call-observer.c:119
#, c-format
msgid "%s just tried to call you, but you were in another call."
msgstr "%s intentó llamarle, pero estaba en otra llamada."
#. Translators: this is an "Info" label. It should be as short
#. * as possible.
-#: ../src/empathy-call-window.c:1140 ../src/empathy-call-window.c:1162
+#: ../src/empathy-call-window.c:1122 ../src/empathy-call-window.c:1138
msgid "i"
msgstr "Información"
-#: ../src/empathy-call-window.c:2888
+#. translators: Call is a noun and %s is the contact name. This string
+#. * is used in the window title
+#: ../src/empathy-call-window.c:1858
+#, c-format
+msgid "Call with %s"
+msgstr "Llamada con %s"
+
+#: ../src/empathy-call-window.c:2102
+msgid "The IP address as seen by the machine"
+msgstr "La dirección IP como la ve la máquina"
+
+#: ../src/empathy-call-window.c:2104
+msgid "The IP address as seen by a server on the Internet"
+msgstr "La dirección IP como la ve el servidor de Internet"
+
+#: ../src/empathy-call-window.c:2106
+msgid "The IP address of the peer as seen by the other side"
+msgstr "La dirección IP del par como la ve la otra parte"
+
+#: ../src/empathy-call-window.c:2108
+msgid "The IP address of a relay server"
+msgstr "La dirección IP de un servidor de desvío"
+
+#: ../src/empathy-call-window.c:2110
+msgid "The IP address of the multicast group"
+msgstr "La dirección IP del grupo multicast"
+
+#: ../src/empathy-call-window.c:2857
msgid "On hold"
msgstr "En espera"
-#: ../src/empathy-call-window.c:2891
+#: ../src/empathy-call-window.c:2860
msgid "Mute"
msgstr "Silenciar"
-#: ../src/empathy-call-window.c:2893
+#: ../src/empathy-call-window.c:2862
msgid "Duration"
msgstr "DuracioÌn"
#. Translators: 'status - minutes:seconds' the caller has been connected
-#: ../src/empathy-call-window.c:2896
+#: ../src/empathy-call-window.c:2865
#, c-format
msgid "%s — %d:%02dm"
msgstr "%s: %d:%02dm"
-#: ../src/empathy-call-window.c:3166
+#: ../src/empathy-call-window.c:2961
+msgid "Technical Details"
+msgstr "Detalles técnicos"
+
+#: ../src/empathy-call-window.c:3000
+#, c-format
+msgid ""
+"%s's software does not understand any of the audio formats supported by your "
+"computer"
+msgstr ""
+"El software de «%s» no entiende ninguno de los formatos de vídeo soportados "
+"por su equipo"
+
+#: ../src/empathy-call-window.c:3005
+#, c-format
+msgid ""
+"%s's software does not understand any of the video formats supported by your "
+"computer"
+msgstr ""
+"El software de «%s» no entiende ninguno de los formatos de vídeo soportados "
+"por su equipo"
+
+#: ../src/empathy-call-window.c:3011
+#, c-format
+msgid ""
+"Can't establish a connection to %s. One of you might be on a network that "
+"does not allow direct connections."
+msgstr ""
+"No se puede establecer una conexión con %s. Uno de los dos puede estar en "
+"una red que no acepta conexiones directas."
+
+#: ../src/empathy-call-window.c:3017
+msgid "There was a failure on the network"
+msgstr "Hubo un fallo en la red"
+
+#: ../src/empathy-call-window.c:3021
+msgid ""
+"The audio formats necessary for this call are not installed on your computer"
+msgstr ""
+"No están instalados en su equipo los formatos de sonido necesarios para esta "
+"llamada"
+
+#: ../src/empathy-call-window.c:3024
+msgid ""
+"The video formats necessary for this call are not installed on your computer"
+msgstr ""
+"No están instalados en su equipo los formatos de vídeo necesarios para esta "
+"llamada"
+
+#: ../src/empathy-call-window.c:3036
+#, c-format
+msgid ""
+"Something unexpected happened in a Telepathy component. Please <a href=\"%s"
+"\">report this bug</a> and attach logs gathered from the 'Debug' window in "
+"the Help menu."
+msgstr ""
+"Sucedió algo inesperado en un componente de Telepathy. <a href=\"%s"
+"\">Informe de este error</a> y añada los registros obtenidos de la ventana "
+"de «Depuración» en el menú de Ayuda."
+
+#: ../src/empathy-call-window.c:3045
+msgid "There was a failure in the call engine"
+msgstr "Hubo un fallo en el motor de llamadas"
+
+#: ../src/empathy-call-window.c:3048
+msgid "The end of the stream was reached"
+msgstr "Se llegó al final del flujo"
+
+#: ../src/empathy-call-window.c:3088
+msgid "Can't establish audio stream"
+msgstr "No se puede establecer el flujo de voz"
+
+#: ../src/empathy-call-window.c:3098
+msgid "Can't establish video stream"
+msgstr "No se puede establecer el flujo de vídeo"
+
+#: ../src/empathy-call-window.c:3135
#, c-format
msgid "Your current balance is %s."
msgstr "su balance actual es %s."
-#: ../src/empathy-call-window.c:3170
+#: ../src/empathy-call-window.c:3139
msgid "Sorry, you don’t have enough credit for that call."
msgstr "No tiene crédito suficiente para hacer esta llamada."
-#: ../src/empathy-call-window.c:3172
+#: ../src/empathy-call-window.c:3141
msgid "Top Up"
msgstr "Recargar"
+#: ../src/empathy-call.c:198
+msgid "- Empathy Audio/Video Client"
+msgstr ": Cliente de sonido/vídeo Empathy"
+
+#: ../src/empathy-call.c:222
+msgid "Empathy Audio/Video Client"
+msgstr "Cliente de sonido/vídeo Empathy"
+
#: ../libempathy-gtk/empathy-search-bar.c:243
msgid "_Match case"
msgstr "_Coincidir con capitalizacioÌn"
-#: ../libempathy-gtk/empathy-new-account-dialog.c:144
+#: ../libempathy-gtk/empathy-new-account-dialog.c:129
msgid "What kind of chat account do you have?"
msgstr "¿Qué tipo de cuenta tiene?"
-#: ../libempathy-gtk/empathy-new-account-dialog.c:166
+#: ../libempathy-gtk/empathy-new-account-dialog.c:151
msgid "Adding new account"
msgstr "Añadiendo cuenta nueva"
@@ -4740,7 +4606,7 @@ msgstr "Añadiendo cuenta nueva"
msgid "People nearby"
msgstr "Gente cerca"
-#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:150
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:149
msgid ""
"Empathy can automatically discover and chat with the people connected on the "
"same network as you. If you want to use this feature, please check that the "
@@ -4750,7 +4616,7 @@ msgstr ""
"red para poder chatear con ellas. Si quiere usar esta característica "
"compruebe que los detalles de abajo son correctos."
-#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:183
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:180
msgid ""
"You can change these details later or disable this feature by choosing <span "
"style=\"italic\">Edit → Accounts</span> in the Contact List."
@@ -4759,6 +4625,136 @@ msgstr ""
"característica eligiendo <span style=\"italic\">Editar → Cuentas</span> en "
"la lista de contactos."
+#~ msgid "Top up %s (%s)..."
+#~ msgstr "Recargar %s (%s)…"
+
+#~ msgid "Top Up..."
+#~ msgstr "Recargar…"
+
+#~ msgid "_Offline Contacts"
+#~ msgstr "Contactos _desconectados"
+
+#~ msgid "Show P_rotocols"
+#~ msgstr "Mostrar p_rotocolos"
+
+#~ msgid "Credit Balance"
+#~ msgstr "Crédito"
+
+#~ msgid "Contacts on a _Map"
+#~ msgstr "Contactos en el _mapa"
+
+#~ msgid "Find in Contact _List"
+#~ msgstr "_Buscar en la lista de contactos"
+
+#~ msgid "Sort by _Name"
+#~ msgstr "Ordenar por _nombre"
+
+#~ msgid "Sort by _Status"
+#~ msgstr "Ordenar por es_tado"
+
+#~ msgid "Normal Size With _Avatars"
+#~ msgstr "Tamaño normal con _avatares"
+
+#~ msgid "N_ormal Size"
+#~ msgstr "Tamaño n_ormal"
+
+#~ msgid "_Compact Size"
+#~ msgstr "Tamaño _compacto"
+
+#~ msgid "_Join…"
+#~ msgstr "_Unirse…"
+
+#~ msgid "Appearance"
+#~ msgstr "Apariencia"
+
+#~ msgid "“%s†is not a valid contact ID"
+#~ msgstr "%s no es un identificador de contacto válido"
+
+#~ msgid "Could not start room listing"
+#~ msgstr "No se pudo iniciar la lista de la sala"
+
+#~ msgid "Could not stop room listing"
+#~ msgstr "No se pudo parar la lista de la sala"
+
+#~ msgid "Contrast"
+#~ msgstr "Contraste"
+
+#~ msgid "Brightness"
+#~ msgstr "Brillo"
+
+#~ msgid "Gamma"
+#~ msgstr "Gamma"
+
+#~ msgid "Volume"
+#~ msgstr "Volumen"
+
+#~ msgid "_Sidebar"
+#~ msgstr "Barra _lateral"
+
+#~ msgid "Audio input"
+#~ msgstr "Entrada de voz"
+
+#~ msgid "Video input"
+#~ msgstr "Entrada de vídeo"
+
+#~ msgid "Dialpad"
+#~ msgstr "Teclado de llamada"
+
+#~ msgid "Details"
+#~ msgstr "Detalles"
+
+#~ msgctxt "codec"
+#~ msgid "Unknown"
+#~ msgstr "Desconocido"
+
+#~ msgid "Connected — %d:%02dm"
+#~ msgstr "Conectado — %d:%02dm"
+
+#~ msgid "Redial"
+#~ msgstr "Volver a llamar"
+
+#~ msgid "V_ideo"
+#~ msgstr "Ví_deo"
+
+#~ msgid "Video Off"
+#~ msgstr "Vídeo apagado"
+
+#~ msgid "Video Preview"
+#~ msgstr "Vista preliminar del vídeo"
+
+#~ msgid "Video On"
+#~ msgstr "Vídeo encendido"
+
+#~ msgid "Call the contact again"
+#~ msgstr "Llamar de nuevo al contacto"
+
+#~ msgid "Camera Off"
+#~ msgstr "Cámara apagada"
+
+#~ msgid "Disable camera and stop sending video"
+#~ msgstr "Desactivar la cámara y dejar de enviar vídeo"
+
+#~ msgid "Preview"
+#~ msgstr "Vista previa"
+
+#~ msgid "Enable camera but don't send video"
+#~ msgstr "Activar la cámara pero no enviar vídeo"
+
+#~ msgid "Camera On"
+#~ msgstr "Cámara encendida"
+
+#~ msgid "Enable camera and send video"
+#~ msgstr "Activar la cámara y enviar vídeo"
+
+#~ msgid "_Enable"
+#~ msgstr "_Activar"
+
+#~ msgid "_Disable"
+#~ msgstr "_Desactivar"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
#~ msgid "There was an error while importing the accounts."
#~ msgstr "Hubo un error al importar las cuentas."
@@ -4863,9 +4859,6 @@ msgstr ""
#~ msgid "Please enter personal details"
#~ msgstr "Introduzca los detalles personales"
-#~ msgid "Show account assistant"
-#~ msgstr "Mostrar el asistente de cuentas"
-
#~ msgid "Protocol:"
#~ msgstr "Protocolo:"
@@ -5058,9 +5051,6 @@ msgstr ""
#~ msgid "_For:"
#~ msgstr "_Para:"
-#~ msgid "_Enabled"
-#~ msgstr "_Activada"
-
#~ msgid "%s is now offline."
#~ msgstr "Ahora %s está desconectado."
@@ -5137,9 +5127,6 @@ msgstr ""
#~ msgid "Failed to reconnect this chat"
#~ msgstr "Falló al reconectar a este chat"
-#~ msgid "Failed to join chat room"
-#~ msgstr "Falló al unirse a la sala de chat"
-
#~ msgid "%s account"
#~ msgstr "Cuenta %s"
@@ -5244,15 +5231,6 @@ msgstr ""
#~ msgid "_Import..."
#~ msgstr "_Importar…"
-#~ msgid "New _Call..."
-#~ msgstr "_Llamada nueva…"
-
-#~ msgid "_Join..."
-#~ msgstr "_Unirse…"
-
-#~ msgid "_New Conversation..."
-#~ msgstr "_Conversación nueva…"
-
#~ msgid "Add new"
#~ msgstr "Añadir nueva"
diff --git a/po/fa.po b/po/fa.po
index 140b52a14..fcdde9f92 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: empathy 2.28.1.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&keywords=I18N+L10N&component=General\n"
-"POT-Creation-Date: 2012-03-16 10:47+0000\n"
-"PO-Revision-Date: 2012-03-31 15:49+0330\n"
+"POT-Creation-Date: 2012-04-02 11:48+0000\n"
+"PO-Revision-Date: 2012-04-02 18:31+0330\n"
"Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
@@ -39,7 +39,7 @@ msgstr "Ú¯Ù¾ در Ú¯ÙˆÚ¯Ù„ تاک، Ùیس بوک، ام‌اس‌ان، Ùˆ بس
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2512
+#: ../src/empathy-accounts-dialog.c:2563
msgid "Messaging and VoIP Accounts"
msgstr "حساب‌های پیام‌رسانی و VoIP"
@@ -79,401 +79,396 @@ msgstr "پوشه‌ی پیش‌Ùرض بارگیری امپاتی"
msgid "The default folder to save file transfers in."
msgstr "پوشه‌ی پیش‌Ùرض برای ذخیره‌ی پرونده‌های انتقالی."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:9
+#. translators: Automatic tasks which are run once to port/update account settings. Ideally, this shouldn't be exposed to users at all, we just use a gsettings key here as an optimization to only run it only once.
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:10
msgid "Magic number used to check if sanity cleaning tasks should be run"
msgstr "عدد جادویی برای بررسی وضعیت پاک‌سازی جهت اجرا"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:10
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:11
msgid "empathy-sanity-cleaning.c uses this number to check if the cleaning tasks should be executed or not. Users should not change this key manually."
msgstr "پرونده empathy-sanity-cleaning.c این عدد را بررسی می‌کند تا متوجه شود که پاک‌سازی باید اجرا شود یا خیر. کاربران نباید این کلید را بصورت دستی تغییر دهند."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:11
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
msgid "Show offline contacts"
msgstr "نمایش آشنا‌های برون‌خط"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
msgid "Whether to show contacts that are offline in the contact list."
msgstr "این‌که آشناهایی Ú©Ù‡ برون‌خط هستند در Ùهرست آشناها دیده شوند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
msgid "Show avatars"
msgstr "نشان دادن آواتارها"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
msgid "Whether to show avatars for contacts in the contact list and chat windows."
msgstr "این‌که آواتار برای آشناها در Ùهرست آشنایان Ùˆ پنجره‌ی Ú¯Ù¾ نشان داده شوند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
msgid "Show protocols"
msgstr "نشان دادن پروتکل‌ها"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
msgid "Whether to show protocols for contacts in the contact list."
msgstr "این‌که در Ùهرست آشناها، پروتکل‌های مورد استÙاده برای آشناها هم دیده شوند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
msgid "Show Balance in contact list"
msgstr "نمایش اعتبار در Ùهرست آشناها"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
msgid "Whether to show account balances in the contact list."
msgstr "این‌که در Ùهرست آشناها، اعتبار حساب‌ها نمایش داده شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
msgid "Compact contact list"
msgstr "Ùهرست Ùشرده‌ی آشناها"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
msgid "Whether to show the contact list in compact mode."
msgstr "این‌که Ùهرست آشنا‌ها در حالت Ùشرده نمایش داده شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
msgid "Hide main window"
msgstr "مخÙÛŒ کردن پنجره‌ی اصلی"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
msgid "Hide the main window."
msgstr "مخÙÛŒ کردن پنجره‌ی اصلی."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
msgid "Default directory to select an avatar image from"
msgstr "شاخه‌ی پیش‌Ùرض برای انتخاب تصویر آواتار از آن"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
msgid "The last directory that an avatar image was chosen from."
msgstr "آخرین شاخه‌ای که یک آواتار از آن انتخاب شده بود."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
msgid "Open new chats in separate windows"
msgstr "گپ‌های جدید در پنجره‌ی مجزا باز شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
msgid "Always open a separate chat window for new chats."
msgstr "برای گپ‌های جدید، همیشه یک پنجره‌ی جدید گپ باز شود."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
msgid "Display incoming events in the status area"
msgstr "رویدادهای ورودی در منطقه‌ی وضعیت نمایش داده شوند"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
msgid "Display incoming events in the status area. If false, present them to the user immediately."
msgstr "رویدادهای ورودی در منطقه‌ی وضعیت نمایش داده شوند. اگر نادرست باشد، مستقیما به کاربر نمایش داده شوند."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
msgid "The position for the chat window side pane"
msgstr "مکان قاب کناری پنجره‌ی گپ"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
msgid "The stored position (in pixels) of the chat window side pane."
msgstr "مکان ذخیره شده‌ی (به نقطه) قاب کناری پنجره‌ی گپ."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
-#| msgid "Show contact list in rooms"
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
msgid "Show contact groups"
msgstr "نمایش گروه آشناها"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
-#| msgid "Whether to show account balances in the contact list."
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
msgid "Whether to show groups in the contact list."
msgstr "این‌که آیا در Ùهرست آشناها گروه‌ها نمایش داده شود یا نه."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
msgid "Contact list sort criterion"
msgstr "معیارهای مرتب‌سازی Ùهرست آشناها"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
-#| msgid ""
-#| "Which criterion to use when sorting the contact list. Default is to sort "
-#| "by the contact's name with the value \"name\". A value of \"state\" will "
-#| "sort the contact list by state."
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
msgid "Which criterion to use when sorting the contact list. Default is to sort by the contact's state with the value \"state\". A value of \"name\" will sort the contact list by name."
msgstr "کدام معیار برای مرتب کردن Ùهرست آشناها بکار گرÙته شود. پیش Ùرض بر روی مرتب کردن بر اساس وضعیت آشنا با مقدار «state» است. مقدار «name» Ùهرست را بر اساس نام آشنا مرتب می‌کند."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
msgid "Use notification sounds"
msgstr "به کار انداختن صداهای اخطارها"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
msgid "Whether to play a sound to notify of events."
msgstr "این‌که برای اطلاع رویدادها صدایی پخش بشود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
msgid "Disable sounds when away"
msgstr "در حالت «غایب»، صداها از کار بیاÙتند"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
msgid "Whether to play sound notifications when away or busy."
msgstr "این‌که هنگام تغییر حالت به «مشغول» یا «غایب» صدایی پخش شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
msgid "Play a sound for incoming messages"
msgstr "هنگام دریاÙت پیام، صدایی پخش شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
msgid "Whether to play a sound to notify of incoming messages."
msgstr "این‌که برای اطلاع از پیام‌های ورودی صدایی پخش شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
msgid "Play a sound for outgoing messages"
msgstr "برای پیام‌های خروجی صدایی پخش شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
msgid "Whether to play a sound to notify of outgoing messages."
msgstr "این‌که برای اطلاع از پیام‌های خروجی صدایی پخش شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
msgid "Play a sound for new conversations"
msgstr "برای مکالمه‌های جدید صدایی پخش شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
msgid "Whether to play a sound to notify of new conversations."
msgstr "این‌که برای اطلاع از Ú¯Ùتگوهای جدید صدایی پخش شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
msgid "Play a sound when a contact logs in"
msgstr "وقتی آشنایی وارد می‌شود صدایی پخش شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
msgid "Whether to play a sound to notify of contacts logging into the network."
msgstr "این‌که برای اطلاع دادن از ورود آشناها به شبکه، صدایی پخش شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
msgid "Play a sound when a contact logs out"
msgstr "وقتی کاربری خارج می‌شود صدایی پخش شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
msgid "Whether to play a sound to notify of contacts logging out of the network."
msgstr "این‌که برای اطلاع دادن از خروج آشناها از شبکه، صدای پخش شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
msgid "Play a sound when we log in"
msgstr "وقتی وارد می‌شویم صدایی پخش شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
msgid "Whether to play a sound when logging into a network."
msgstr "این‌که هنگام ورود به شبکه صدایی پخش شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
msgid "Play a sound when we log out"
msgstr "وقتی خارج می‌شویم صدایی پخش شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
msgid "Whether to play a sound when logging out of a network."
msgstr "این‌که هنگام خروج از شبکه صدایی پخش شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
msgid "Enable popup notifications for new messages"
msgstr "Ùعال‌سازی اطلاعیه‌های واشو برای پیام‌های جدید"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
msgid "Whether to show a popup notification when receiving a new message."
msgstr "این‌که هنگام دریاÙت یک پیام جدید، یک اطلاعیه‌ی واشو نمایش داده شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
msgid "Disable popup notifications when away"
msgstr "در حالت «غایب»، اطلاعیه‌های واشو از کار بیاÙتند"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
msgid "Whether to show popup notifications when away or busy."
msgstr "این‌که در حالت «غایب» یا «مشغول»، اطلاعیه‌های واشو نمایش داده شوند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
msgid "Pop up notifications if the chat isn't focused"
msgstr "در صورتیکه پنجره‌ی گپ در مرکز توجه نیست، اطلاعیه‌های واشو انجام شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
msgid "Whether to show a popup notification when receiving a new message even if the chat is already opened, but not focused."
msgstr "این‌که هنگام دریاÙت پیام جدید، یک اطلاعیه‌ی واشو نمایش داده شود، حتی اگر پنجره‌ی Ú¯Ù¾ پیشاپیش باز شده باشد، ولی در مرکز توجه نباشد، یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
msgid "Pop up notifications when a contact logs in"
msgstr "وقتی آشنایی وارد می‌شود، اطلاعیه‌های واشو انجام شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
msgid "Whether to show a popup notification when a contact goes online."
msgstr "این‌که وقتی آشنایی برخط می‌شود، یک اطلاعیه‌ی واشو نمایش داده شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
msgid "Pop up notifications when a contact logs out"
msgstr "وقتی آشنایی خارج می‌شود، اطلاعیه‌های واشو انجام شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
msgid "Whether to show a popup notification when a contact goes offline."
msgstr "این‌که وقتی آشنایی برون‌خط می‌شود، یک اطلاعیه‌ی واشو نمایش داده شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
msgid "Use graphical smileys"
msgstr "استÙاده از صورتک‌های گراÙیکی"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
msgid "Whether to convert smileys into graphical images in conversations."
msgstr "این‌که در Ú¯Ùتگوها، صورتک‌ها تبدیل به تصویر گراÙیکی شوند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
msgid "Show contact list in rooms"
msgstr "نمایش Ùهرست اÙراد در اتاق‌ها"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
msgid "Whether to show the contact list in chat rooms."
msgstr "این‌که Ùهرست آشناها در اتاق‌های Ú¯Ù¾ دیده شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
msgid "Chat window theme"
msgstr "تم پنجره‌ی گپ"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
msgid "The theme that is used to display the conversation in chat windows."
msgstr "تمی Ú©Ù‡ برای نشان دادن Ú¯Ùتگو در پنجره‌ی چت استÙاده می‌شود."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
msgid "Chat window theme variant"
msgstr "گزینه‌های تم پنجره‌ی گپ"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
msgid "The theme variant that is used to display the conversation in chat windows."
msgstr "گزینه تمی Ú©Ù‡ برای نمایش Ú¯Ùتگو پنجره Ú¯Ù¾ استÙاده می‌شود."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
msgid "Path of the Adium theme to use"
msgstr "مسیر تم Adium برای استÙاده"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:73
msgid "Path of the Adium theme to use if the theme used for chat is Adium."
msgstr "مسیر تم Adium برای استÙاده چناچه تم مورد استÙاده برای Ú¯Ù¾ Adium باشد."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:73
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
msgid "Enable WebKit Developer Tools"
msgstr "Ùعال‌سازی ابزارهای توسعه‌ی WebKit"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:75
msgid "Whether WebKit developer tools, such as the Web Inspector, should be enabled."
msgstr "این‌که ابزارهای توسعه‌ی WebKitØŒ مانند Web InspectorØŒ باید به کار بیاÙتد یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:75
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:76
msgid "Inform other users when you are typing to them"
msgstr "هنگامی که شما در حال تایپ هستید به کاربران دیگر اطلاع داده شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:76
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:77
msgid "Whether to send the 'composing' or 'paused' chat states. Does not currently affect the 'gone' state."
msgstr "این‌که آیا وضعیت‌های «درحال ارسال» یا «مکث» ارسال شود یا نه. درحال حاضر در وضعیت «غایب» تاثیری ندارد."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:77
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
msgid "Use theme for chat rooms"
msgstr "استÙاده از تم برای اتاق‌های Ú¯Ù¾"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
msgid "Whether to use the theme for chat rooms."
msgstr "این‌که از تم برای اتاق‌های Ú¯Ù¾ استÙاده شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:80
msgid "Spell checking languages"
msgstr "زبان‌ها برای غلط‌یابی املایی"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:80
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
msgid "Comma-separated list of spell checker languages to use (e.g. \"en, fr, nl\")."
msgstr "Ùهرست زبان‌ها جهت غلط‌یابی املایی، جدا شده با ویرگول (مثال: «en, fr, nl»)."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
msgid "Enable spell checker"
msgstr "به کار انداختن غلط‌یابی املایی"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
msgid "Whether to check words typed against the languages you want to check with."
msgstr "این‌که کلماتی که تایپ می‌کنید براساس زبان‌هایی که می‌خواهید بررسی شود، یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:84
msgid "Nick completed character"
msgstr "نویسه‌ی کامل شده لقب"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:84
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
msgid "Character to add after nickname when using nick completion (tab) in group chat."
msgstr "نویسه‌ای Ú©Ù‡ هنگام کامل کردن اسم (با کلید جهش) در Ú¯Ù¾ گروهی، بعد از نام مستعار اضاÙÙ‡ می‌شود."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
msgid "Empathy should use the avatar of the contact as the chat window icon"
msgstr "امپاتی از آواتار برای شمایل پنجره‌ی Ú¯Ù¾ استÙاده کند"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:87
msgid "Whether Empathy should use the avatar of the contact as the chat window icon."
msgstr "این‌که امپاتی از آواتار آشنا برای شمایل پنجره‌ی Ú¯Ù¾ استÙاده کند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:87
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:88
msgid "Last account selected in Join Room dialog"
msgstr "آخرین حساب انتخاب شده در محاوره‌ی «پیوستن به اتاق»"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:88
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
msgid "D-Bus object path of the last account selected to join a room."
msgstr "مسیر شی در D-Bus برای آخرین حساب انتخاب شده برای پیوستن به یک اتاق."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
msgid "Camera device"
msgstr "دوربین"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
msgid "Default camera device to use in video calls, e.g. /dev/video0."
msgstr "دستگاه دوربین پیش‌Ùرض جهت استÙاده در تماس‌های ویدئویی، مثال dev/video0/."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
msgid "Camera position"
msgstr "محل دوربین"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
msgid "Position the camera preview should be during a call."
msgstr "موقعیتی که پیش‌نمایش دوربین باید در حین تماس آنجا باشد."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
msgid "Echo cancellation support"
msgstr "پشتیبانی از لغو پژواک صدا"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
msgid "Whether to enable Pulseaudio's echo cancellation filter."
msgstr "این‌که آیا Ùیلتر لغو پژواک صدای Pulseaudio Ùعال شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
msgid "Show hint about closing the main window"
msgstr "هنگام بستن پنجره، راهنمایی نشان داده شود"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
msgid "Whether to show the message dialog about closing the main window with the 'x' button in the title bar."
msgstr "این‌که در صورت بستن برنامه توسط دکمه‌ی «x»، محاوره‌ی پیام در این مورد نشان داده شود یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
msgid "Empathy can publish the user's location"
msgstr "امپاتی می‌تواند مکان کاربر را منتشر کند"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
msgid "Whether Empathy can publish the user's location to their contacts."
msgstr "این‌که امپاتی اجازه داشته باشد، مکان کاربر را برای آشنایان منتشر کنند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
msgid "Empathy can use the network to guess the location"
msgstr "امپاتی می‌تواند از شبکه برای حدس مکان استÙاده کند"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:101
msgid "Whether Empathy can use the network to guess the location."
msgstr "این‌که امپاتی اجازه داشته باشد، از شبکه برای حدس مکان استÙاده کند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:101
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:102
msgid "Empathy can use the cellular network to guess the location"
msgstr "امپاتی می‌تواند از شبکه‌ی سلولی برای حدس مکان استÙاده کند"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:102
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:103
msgid "Whether Empathy can use the cellular network to guess the location."
msgstr "این‌که امپاتی اجازه داشته باشد، از شبکه‌ی سلولی برای حدس مکان استÙاده کند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:103
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:104
msgid "Empathy can use the GPS to guess the location"
msgstr "امپاتی می‌تواند از مکان‌یاب جغراÙیایی (جی‌پی‌اس) استÙاده کند تا مکان کاربر را حدس بزند"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:104
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:105
msgid "Whether Empathy can use the GPS to guess the location."
msgstr "این‌که امپاتی اجازه داشته باشد، از مکان‌یاب جغراÙیایی (جی‌پی‌اس) برای حدس مکان استÙاده کند یا خیر."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:105
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:106
msgid "Empathy should reduce the location's accuracy"
msgstr "امپاتی دقت مکان را کاهش دهد"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:106
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:107
msgid "Whether Empathy should reduce the location's accuracy for privacy reasons."
msgstr "این‌که امپاتی دقت مکان را به دلیل حریم خصوصی کاهش دهد یا خیر."
@@ -655,7 +650,6 @@ msgid "Connection has been lost"
msgstr "اتصال از دست رÙت"
#: ../libempathy/empathy-utils.c:355
-#| msgid "This resource is already connected to the server"
msgid "This account is already connected to the server"
msgstr "این منبع از قبل به کارگزار متصل شده است"
@@ -688,7 +682,6 @@ msgid "Your software is too old"
msgstr "نرم‌اÙزار شما خیلی قدیمی است"
#: ../libempathy/empathy-utils.c:375
-#| msgid "Interval (seconds)"
msgid "Internal error"
msgstr "خطا داخلی"
@@ -755,7 +748,6 @@ msgid "in the future"
msgstr "در آینده"
#: ../libempathy/empathy-keyring.c:75
-#| msgid "Phrase not found"
msgid "Password not found"
msgstr "گذرواژه یاÙت نشد"
@@ -774,7 +766,7 @@ msgid "All accounts"
msgstr "تمام حساب‌ها"
#: ../libempathy-gtk/empathy-account-widget.c:682
-#: ../src/empathy-import-widget.c:336
+#: ../src/empathy-import-widget.c:323
msgid "Account"
msgstr "حساب"
@@ -799,7 +791,7 @@ msgid "%s:"
msgstr "%s:"
#: ../libempathy-gtk/empathy-account-widget.c:1398
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
msgid "Username:"
msgstr "نام کاربری:"
@@ -892,11 +884,11 @@ msgstr "_کارگزار:"
#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1
#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
msgid "Advanced"
msgstr "پیشرÙته"
@@ -914,7 +906,7 @@ msgstr "گذرواژه‌ی AIM شما چیست؟"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:10
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "Remember Password"
msgstr "به خاطر سپردن گذرواژه"
@@ -958,36 +950,32 @@ msgstr "نام کاربری (UIN) شما در ICQ چیست؟"
msgid "What is your ICQ password?"
msgstr "گذرواژه‌ی ICQ شما چیست؟"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:206
-#: ../libempathy-gtk/empathy-account-widget-sip.c:239
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "خودکار"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:209
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:212
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:215
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:244
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "Register"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:249
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "Options"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:252
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "هیچ‌کدام"
@@ -1016,44 +1004,45 @@ msgstr "اÙزودن..."
msgid "Remove"
msgstr "حذÙ"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
+#. Translators: tooltip on a 'Go Up' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
msgid "Up"
msgstr "بالا"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
-#| msgid "Domain"
+#. Translators: tooltip on a 'Go Down' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
msgid "Down"
msgstr "پایین"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
msgid "Servers"
msgstr "کارگزارها"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
msgid "Most IRC servers don't need a password, so if you're not sure, don't enter a password."
msgstr "بیشتر کارگزارهای IRC احتیاجی به گذرواژه ندارند، بنابراین چناچه مطمئن نیستید، هیچ گذرواژه‌ای وارد نکنید."
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
msgid "Nickname:"
msgstr "نام مستعار:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
msgid "Password:"
msgstr "گذرواژه:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
msgid "Quit message:"
msgstr "پیغام ترک:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
msgid "Real name:"
msgstr "نام واقعی:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:18
msgid "Which IRC network?"
msgstr "کدام شبکه IRC؟"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:19
msgid "What is your IRC nickname?"
msgstr "نام مستعار شما در IRC چیست؟"
@@ -1241,11 +1230,16 @@ msgstr "نادیده گرÙتن خطاهای TLS"
msgid "Port:"
msgstr "درگاه:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#| msgid "E-_mail address:"
+msgid "Local IP Address:"
+msgstr "آدرس IP محلی:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP login ID?"
msgstr "شناسه‌ی ورود SIP شما چیست؟"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP account password?"
msgstr "گذرواژه‌ی حساب SIP شما چیست؟"
@@ -1431,7 +1425,6 @@ msgstr "خطا در Ùرستان پیام: %s"
#. * account to send the message.
#: ../libempathy-gtk/empathy-chat.c:1577
#, c-format
-#| msgid "insufficient balance to send message"
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr "مانده اعتبار برای ارسال پیام کاÙÛŒ نیست. <a href='%s'>بالا بردن</a>."
@@ -1475,7 +1468,6 @@ msgstr "سرÙصل تنظیم شد: %s"
#: ../libempathy-gtk/empathy-chat.c:1724
#, c-format
-#| msgid "Topic set to: %s"
msgid "Topic set by %s to: %s"
msgstr "سرÙصل توسط %s تنظیم شد: %s"
@@ -1582,9 +1574,9 @@ msgstr "Ùرد %s اکنون با %s شناخته می‌شود"
#: ../libempathy-gtk/empathy-chat.c:2994
#: ../src/empathy-streamed-media-window.c:1888
#: ../src/empathy-event-manager.c:1279
-#: ../src/empathy-call-window.c:1502
-#: ../src/empathy-call-window.c:1552
-#: ../src/empathy-call-window.c:2590
+#: ../src/empathy-call-window.c:1466
+#: ../src/empathy-call-window.c:1516
+#: ../src/empathy-call-window.c:2562
msgid "Disconnected"
msgstr "قطع شد"
@@ -1661,7 +1653,7 @@ msgstr "ویرایش آشناهای مسدود شده"
#. Account and Identifier
#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:506
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:503
#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
#: ../libempathy-gtk/empathy-individual-widget.c:1474
#: ../src/empathy-chatrooms-window.ui.h:2
@@ -1733,27 +1725,27 @@ msgid "Decide _Later"
msgstr "بعدا _تصمیم می‌گیرم"
#. Title
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:499
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:496
msgid "Search contacts"
msgstr "جستجو آشناها"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:529
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:526
msgid "Search: "
msgstr "جستجو: "
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:587
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:584
msgid "_Add Contact"
msgstr "ا_Ùزودن آشنا"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:602
msgid "No contacts found"
msgstr "هیچ آشنایی پیدا نشد"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:621
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:618
msgid "Your message introducing yourself:"
msgstr "پیام شما برای معرÙÛŒ خودتان:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:629
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:626
msgid "Please let me see when you're online. Thanks!"
msgstr "لطÙا اجازه بدهید بدانم Ú†Ù‡ زمانی برخط هستید. تشکر!"
@@ -1912,39 +1904,33 @@ msgstr "ذخیره‌ی آواتار"
msgid "Unable to save avatar"
msgstr "ذخیره‌ی آواتار ممکن نیست"
-#: ../libempathy-gtk/empathy-contact-widget.c:1444
-#| msgid "Technical Details"
+#: ../libempathy-gtk/empathy-contact-widget.c:1455
msgid "Personal Details"
msgstr "جزئیات شخصی"
-#: ../libempathy-gtk/empathy-contact-widget.c:1447
+#: ../libempathy-gtk/empathy-contact-widget.c:1458
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
msgstr "جزئیات آشنا"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:104
-#| msgid "Full name:"
msgid "Full name"
msgstr "نام کامل"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:105
-#| msgid "Phone number:"
msgid "Phone number"
msgstr "شماره‌ی تلÙÙ†"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:106
-#| msgid "E-mail address:"
msgid "E-mail address"
msgstr "نشانی پست‌الکترونیکی"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:107
-#| msgid "Website:"
msgid "Website"
msgstr "پایگاه‌وب"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:108
-#| msgid "Birthday:"
msgid "Birthday"
msgstr "روز تولد"
@@ -1966,27 +1952,22 @@ msgid "Away message:"
msgstr "پیغام ترک:"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:132
-#| msgid "Work"
msgid "work"
msgstr "کار"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:133
-#| msgid "Romeo"
msgid "home"
msgstr "خانه"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:134
-#| msgid "Mobile"
msgid "mobile"
msgstr "تلÙÙ† همراه"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:135
-#| msgid "Favorite"
msgid "voice"
msgstr "صوتی"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:136
-#| msgid "Preferences"
msgid "preferred"
msgstr "ترجیح داده شده"
@@ -1995,7 +1976,6 @@ msgid "postal"
msgstr "کد پستی"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:138
-#| msgid "Appearance"
msgid "parcel"
msgstr "بسته"
@@ -2037,24 +2017,24 @@ msgstr "نسخه:"
msgid "Client:"
msgstr "کارگیر:"
-#: ../libempathy-gtk/empathy-groups-widget.c:331
+#: ../libempathy-gtk/empathy-groups-widget.c:327
msgid "Groups"
msgstr "گروه‌ها"
-#: ../libempathy-gtk/empathy-groups-widget.c:343
+#: ../libempathy-gtk/empathy-groups-widget.c:339
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-groups-widget.c:362
+#: ../libempathy-gtk/empathy-groups-widget.c:358
msgid "_Add Group"
msgstr "_اÙزودن گروه"
-#: ../libempathy-gtk/empathy-groups-widget.c:397
+#: ../libempathy-gtk/empathy-groups-widget.c:393
msgctxt "verb in a column header displaying group names"
msgid "Select"
msgstr "انتخاب"
-#: ../libempathy-gtk/empathy-groups-widget.c:407
+#: ../libempathy-gtk/empathy-groups-widget.c:403
#: ../src/empathy-roster-window.c:1970
msgid "Group"
msgstr "گروه"
@@ -2159,7 +2139,6 @@ msgid "Favorite"
msgstr "علاقه‌مندی‌ها"
#: ../libempathy-gtk/empathy-individual-menu.c:1264
-#| msgid "telepathy-salut not installed"
msgid "gnome-contacts not installed"
msgstr "برنامه‌ی gnome-contacts نصب نشده است"
@@ -2333,68 +2312,65 @@ msgstr "دیروز"
#. Translators: A date such as '23 May 2010' (strftime format)
#: ../libempathy-gtk/empathy-log-window.c:1739
-#| msgctxt ""
-#| "A date such as '23 May 2010', %e is the day, %B the month and %Y the year"
-#| msgid "%e %B %Y"
msgid "%e %B %Y"
msgstr "%e %B %Y"
-#: ../libempathy-gtk/empathy-log-window.c:1827
-#: ../libempathy-gtk/empathy-log-window.c:3487
+#: ../libempathy-gtk/empathy-log-window.c:1843
+#: ../libempathy-gtk/empathy-log-window.c:3471
msgid "Anytime"
msgstr "هرزمانی"
-#: ../libempathy-gtk/empathy-log-window.c:1916
-#: ../libempathy-gtk/empathy-log-window.c:2400
+#: ../libempathy-gtk/empathy-log-window.c:1942
+#: ../libempathy-gtk/empathy-log-window.c:2401
msgid "Anyone"
msgstr "هرکسی"
-#: ../libempathy-gtk/empathy-log-window.c:2713
+#: ../libempathy-gtk/empathy-log-window.c:2714
msgid "Who"
msgstr "چه کسی"
-#: ../libempathy-gtk/empathy-log-window.c:2922
+#: ../libempathy-gtk/empathy-log-window.c:2923
msgid "When"
msgstr "چه زمانی"
-#: ../libempathy-gtk/empathy-log-window.c:3038
+#: ../libempathy-gtk/empathy-log-window.c:3039
msgid "Anything"
msgstr "هرچیزی"
-#: ../libempathy-gtk/empathy-log-window.c:3040
+#: ../libempathy-gtk/empathy-log-window.c:3041
msgid "Text chats"
msgstr "گپ‌های متنی"
-#: ../libempathy-gtk/empathy-log-window.c:3042
+#: ../libempathy-gtk/empathy-log-window.c:3043
#: ../src/empathy-preferences.ui.h:25
msgid "Calls"
msgstr "تماس‌ها"
-#: ../libempathy-gtk/empathy-log-window.c:3047
+#: ../libempathy-gtk/empathy-log-window.c:3048
msgid "Incoming calls"
msgstr "تماس‌های ورودی"
-#: ../libempathy-gtk/empathy-log-window.c:3048
+#: ../libempathy-gtk/empathy-log-window.c:3049
msgid "Outgoing calls"
msgstr "تماس خروجی"
-#: ../libempathy-gtk/empathy-log-window.c:3049
+#: ../libempathy-gtk/empathy-log-window.c:3050
msgid "Missed calls"
msgstr "تماس‌های از دست رÙته"
-#: ../libempathy-gtk/empathy-log-window.c:3071
+#: ../libempathy-gtk/empathy-log-window.c:3072
msgid "What"
msgstr "کدام"
-#: ../libempathy-gtk/empathy-log-window.c:3780
+#: ../libempathy-gtk/empathy-log-window.c:3764
msgid "Are you sure you want to delete all logs of previous conversations?"
msgstr "آیا مطمئنید Ú©Ù‡ می‌خواهید تمام وقایع ثبت شده Ú¯Ùتگوهای قبلی را حذ٠کنید؟"
-#: ../libempathy-gtk/empathy-log-window.c:3784
+#: ../libempathy-gtk/empathy-log-window.c:3768
msgid "Clear All"
msgstr "پاک کردن همه"
-#: ../libempathy-gtk/empathy-log-window.c:3791
+#: ../libempathy-gtk/empathy-log-window.c:3775
msgid "Delete from:"
msgstr "پاک کردن از:"
@@ -2437,17 +2413,14 @@ msgid "<span size=\"x-large\">Loading...</span>"
msgstr "<span size=\"x-large\">بارگیری...</span>"
#: ../libempathy-gtk/empathy-new-message-dialog.c:83
-#| msgid "The specified contact is offline"
msgid "The contact is offline"
msgstr "آشنا برون‌خط است"
#: ../libempathy-gtk/empathy-new-message-dialog.c:85
-#| msgid "The specified contact is not valid"
msgid "The specified contact is either invalid or unknown"
msgstr "آشنای مشخص شده یا نامعتبر است یا ناشناس"
#: ../libempathy-gtk/empathy-new-message-dialog.c:87
-#| msgid "Topic not supported on this conversation"
msgid "The contact does not support this kind of conversation"
msgstr "آشنا از این نوع Ú¯Ùتگو پشتیبانی نمی‌کند"
@@ -2468,22 +2441,18 @@ msgid "This channel is full"
msgstr "این کانال Ù¾Ùر است"
#: ../libempathy-gtk/empathy-new-message-dialog.c:101
-#| msgid "You have been invited to join %s"
msgid "You must be invited to join this channel"
msgstr "شما باید به این اتاق دعوت شده باشید تا به آن بپیوندید"
#: ../libempathy-gtk/empathy-new-message-dialog.c:103
-#| msgid "Contact disconnected"
msgid "Can't proceed while disconnected"
msgstr "نمی‌توان هنگام قطع ارتباط ادامه داد"
#: ../libempathy-gtk/empathy-new-message-dialog.c:105
-#| msgid "permission denied"
msgid "Permission denied"
msgstr "مجوز رد شد"
#: ../libempathy-gtk/empathy-new-message-dialog.c:111
-#| msgid "There was an error starting the call"
msgid "There was an error starting the conversation"
msgstr "خطایی در هنگام شروع Ú¯Ùتگو رÙØ® داد"
@@ -2499,15 +2468,11 @@ msgstr "Ú¯Ùتگوی جدید"
#. add video button
#: ../libempathy-gtk/empathy-new-call-dialog.c:223
-#| msgctxt "menu item"
-#| msgid "_Video Call"
msgid "_Video Call"
msgstr "تماس _تصویری"
#. add audio button
#: ../libempathy-gtk/empathy-new-call-dialog.c:233
-#| msgctxt "menu item"
-#| msgid "_Audio Call"
msgid "_Audio Call"
msgstr "تماس _صوتی"
@@ -2518,7 +2483,6 @@ msgstr "تماس جدید"
#: ../libempathy-gtk/empathy-bad-password-dialog.c:130
#, c-format
-#| msgid "Authentication failed"
msgid "Authentification failed for account <b>%s</b>"
msgstr "تأیید هویت٠حساب <b>%s</b> شکست خورد"
@@ -2556,12 +2520,12 @@ msgstr "برای برداشتن این مورد از Ùهرست علاقه‌مÙ
msgid "Click to make this status a favorite"
msgstr "برای اÙزودن این وضعیت به علاقه‌مندی‌ها کلیک کنید"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#: ../libempathy-gtk/empathy-presence-chooser.c:396
msgid "Set status"
msgstr "تنظیم وضعیت"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1145
msgid "Custom messages…"
msgstr "پیام‌های دلخواه..."
@@ -2718,7 +2682,6 @@ msgid "Certificate hostname: %s"
msgstr "گواهی نام میزبان: %s"
#: ../libempathy-gtk/empathy-tls-dialog.c:281
-#| msgid "Continue"
msgid "C_ontinue"
msgstr "_ادامه"
@@ -2928,22 +2891,18 @@ msgid "Vietnamese"
msgstr "ویتنامی"
#: ../libempathy-gtk/empathy-calendar-button.c:66
-#| msgctxt "verb in a column header displaying group names"
-#| msgid "Select"
msgid "Select..."
msgstr "انتخاب..."
#: ../libempathy-gtk/empathy-calendar-button.c:154
-#| msgctxt "verb in a column header displaying group names"
-#| msgid "Select"
msgid "_Select"
msgstr "_انتخاب"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:202
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:201
msgid "No error message"
msgstr "پیغام خطایی وجود ندارد"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:275
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:274
msgid "Instant Message (Empathy)"
msgstr "پیام Ùوری (امپاتی)"
@@ -3009,65 +2968,64 @@ msgstr "تغییرات ذخیره نشده برای حساب %s شما وجود
msgid "Your new account has not been saved yet."
msgstr "حساب جدید شما هنوز ذخیره نشده است."
-#: ../src/empathy-accounts-dialog.c:381
+#: ../src/empathy-accounts-dialog.c:405
#: ../src/empathy-streamed-media-window.c:759
-#: ../src/empathy-call-window.c:1289
+#: ../src/empathy-call-window.c:1267
msgid "Connecting…"
msgstr "در حال اتصال..."
-#: ../src/empathy-accounts-dialog.c:422
+#: ../src/empathy-accounts-dialog.c:446
#, c-format
msgid "Offline — %s"
msgstr "برون‌خط — %s"
-#: ../src/empathy-accounts-dialog.c:434
+#: ../src/empathy-accounts-dialog.c:458
#, c-format
msgid "Disconnected — %s"
msgstr "قطع شد — %s"
-#: ../src/empathy-accounts-dialog.c:445
+#: ../src/empathy-accounts-dialog.c:469
msgid "Offline — No Network Connection"
msgstr "برون‌خط — هیچ اتصال شبکه‌ای نیست"
-#: ../src/empathy-accounts-dialog.c:452
+#: ../src/empathy-accounts-dialog.c:476
msgid "Unknown Status"
msgstr "وضعیت ناشناخته"
-#: ../src/empathy-accounts-dialog.c:469
+#: ../src/empathy-accounts-dialog.c:493
msgid "This account has been disabled because it relies on an old, unsupported backend. Please install telepathy-haze and restart your session to migrate the account."
msgstr "این حساب به دلیل استÙاده از یک پسانه‌ی قدیمی Ùˆ پشتیبانی نشده غیرÙعال شده است. لطÙا telepathy-haze را نصب Ùˆ نشست را مجددا راه‌اندازی کنید تا حساب منتقل شود."
-#: ../src/empathy-accounts-dialog.c:479
+#: ../src/empathy-accounts-dialog.c:503
msgid "Offline — Account Disabled"
msgstr "برون‌خط — حساب غیرÙعال شد"
-#: ../src/empathy-accounts-dialog.c:585
-#| msgid "Connection has been refused"
+#: ../src/empathy-accounts-dialog.c:609
msgid "Edit Connection Parameters"
msgstr "ویرایش پارامترهای اتصال"
-#: ../src/empathy-accounts-dialog.c:750
+#: ../src/empathy-accounts-dialog.c:774
msgid "Failed to retrieve your personal information from the server."
msgstr "دریاÙت اطلاعات شخصی شما از کارگزار شکست خورد."
-#: ../src/empathy-accounts-dialog.c:756
+#: ../src/empathy-accounts-dialog.c:780
msgid "Go online to edit your personal information."
msgstr "برای ویرایش اطلاعات شخصی برخط شوید."
-#: ../src/empathy-accounts-dialog.c:843
+#: ../src/empathy-accounts-dialog.c:867
msgid "_Edit Connection Parameters..."
msgstr "_ویرایش پارامترهای اتصال"
-#: ../src/empathy-accounts-dialog.c:1339
+#: ../src/empathy-accounts-dialog.c:1363
#, c-format
msgid "Do you want to remove %s from your computer?"
msgstr "آیا می‌خواهید %s را از رایانه‌تان حذ٠کنید؟"
-#: ../src/empathy-accounts-dialog.c:1343
+#: ../src/empathy-accounts-dialog.c:1367
msgid "This will not remove your account on the server."
msgstr "این کار حساب شما بر روی کارگزار را پاک نخواهد کرد."
-#: ../src/empathy-accounts-dialog.c:1579
+#: ../src/empathy-accounts-dialog.c:1604
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3075,25 +3033,27 @@ msgstr ""
"شما درحال انتخاب حساب دیگری هستید، که این کار تغییرات شما را نادیده\n"
"خواهد گرÙت. آیا مطمئنید Ú©Ù‡ میخواهید ادامه دهید؟"
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1755
-msgid "_Enable"
-msgstr "_Ùعال‌کردن"
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1795
+#| msgid "_Enable"
+msgid "_Enabled"
+msgstr "_Ùعال شده"
-#: ../src/empathy-accounts-dialog.c:1756
-msgid "_Disable"
-msgstr "_غیرÙعال‌کردن"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1818
+#| msgid "Real name:"
+msgid "Rename"
+msgstr "تغییر نام"
-#: ../src/empathy-accounts-dialog.c:2184
+#: ../src/empathy-accounts-dialog.c:2234
msgid "_Skip"
msgstr "_نادیده گرÙتن"
-#: ../src/empathy-accounts-dialog.c:2188
-#| msgid "Connected"
+#: ../src/empathy-accounts-dialog.c:2238
msgid "_Connect"
msgstr "_اتصال"
-#: ../src/empathy-accounts-dialog.c:2365
+#: ../src/empathy-accounts-dialog.c:2415
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3114,7 +3074,6 @@ msgid "To add a new account, you first have to install a backend for each protoc
msgstr "برای اÙزودن حساب جدید، اول از همه باید پسانه‌ی لازم برای هر قراردادی را Ú©Ù‡ می‌خواهید استÙاده کنید، نصب کنید."
#: ../src/empathy-accounts-dialog.ui.h:6
-#| msgid "No protocol installed"
msgid "No protocol backends installed"
msgstr "هیچ پسانه‌ی قراردادی نصب نشده است"
@@ -3175,33 +3134,33 @@ msgstr "جزئیات"
#. translators: Call is a noun and %s is the contact name. This string
#. * is used in the window title
#: ../src/empathy-streamed-media-window.c:1211
-#: ../src/empathy-call-window.c:1889
+#: ../src/empathy-call-window.c:1861
#, c-format
msgid "Call with %s"
msgstr "تماس با %s"
#: ../src/empathy-streamed-media-window.c:1444
-#: ../src/empathy-call-window.c:2133
+#: ../src/empathy-call-window.c:2105
msgid "The IP address as seen by the machine"
msgstr "نشانی IP همانطور که توسط ماشین دیده می‌شود"
#: ../src/empathy-streamed-media-window.c:1446
-#: ../src/empathy-call-window.c:2135
+#: ../src/empathy-call-window.c:2107
msgid "The IP address as seen by a server on the Internet"
msgstr "آدرس IP همانطور که توسط کارگزار روی اینترنت دیده می‌شود"
#: ../src/empathy-streamed-media-window.c:1448
-#: ../src/empathy-call-window.c:2137
+#: ../src/empathy-call-window.c:2109
msgid "The IP address of the peer as seen by the other side"
msgstr "آدرس IP مربوط به peer همانطور که توسط طر٠مقابل دیده می‌شود"
#: ../src/empathy-streamed-media-window.c:1450
-#: ../src/empathy-call-window.c:2139
+#: ../src/empathy-call-window.c:2111
msgid "The IP address of a relay server"
msgstr "آدرس IP مربوط به سرور بازپخش"
#: ../src/empathy-streamed-media-window.c:1452
-#: ../src/empathy-call-window.c:2141
+#: ../src/empathy-call-window.c:2113
msgid "The IP address of the multicast group"
msgstr "آدرس IP مربوط به گروه چندگانه"
@@ -3209,7 +3168,6 @@ msgstr "آدرس IP مربوط به گروه چندگانه"
#: ../src/empathy-streamed-media-window.c:1840
#: ../src/empathy-streamed-media-window.c:1843
#: ../src/empathy-streamed-media-window.c:1846
-#| msgid "Unknown"
msgctxt "codec"
msgid "Unknown"
msgstr "ناشناس"
@@ -3221,66 +3179,66 @@ msgid "Connected — %d:%02dm"
msgstr "متصل شد — %Id: %I02dm"
#: ../src/empathy-streamed-media-window.c:2199
-#: ../src/empathy-call-window.c:2992
+#: ../src/empathy-call-window.c:2964
msgid "Technical Details"
msgstr "جزئیات ÙÙ†ÛŒ"
#: ../src/empathy-streamed-media-window.c:2237
-#: ../src/empathy-call-window.c:3031
+#: ../src/empathy-call-window.c:3003
#, c-format
msgid "%s's software does not understand any of the audio formats supported by your computer"
msgstr "نرم‌اÙزار %s هیچ‌کدام از قالب‌های صوتی پشتیبانی شده توسط رایانه‌ی شما را تشخیص نمی‌دهد"
#: ../src/empathy-streamed-media-window.c:2242
-#: ../src/empathy-call-window.c:3036
+#: ../src/empathy-call-window.c:3008
#, c-format
msgid "%s's software does not understand any of the video formats supported by your computer"
msgstr "نرم‌اÙزار %s هیچ‌کدام از قالب‌های ویدئویی پشتیبانی شده توسط رایانه‌ی شما را تشخیص نمی‌دهد"
#: ../src/empathy-streamed-media-window.c:2248
-#: ../src/empathy-call-window.c:3042
+#: ../src/empathy-call-window.c:3014
#, c-format
msgid "Can't establish a connection to %s. One of you might be on a network that does not allow direct connections."
msgstr "نمی‌توان ارتباطی به %s برقرار کرد. ممکن است یکی از شما در شبکه‌ای باشد که اجازه‌ی اتصال مستقیم را نمی‌دهد."
#: ../src/empathy-streamed-media-window.c:2254
-#: ../src/empathy-call-window.c:3048
+#: ../src/empathy-call-window.c:3020
msgid "There was a failure on the network"
msgstr "یک خرابی در شبکه بوجود آمده بود"
#: ../src/empathy-streamed-media-window.c:2258
-#: ../src/empathy-call-window.c:3052
+#: ../src/empathy-call-window.c:3024
msgid "The audio formats necessary for this call are not installed on your computer"
msgstr "قالب‌های صوتی لازم برای برقراری این تماس روی رایانه‌ی شما نصب نشده‌اند"
#: ../src/empathy-streamed-media-window.c:2261
-#: ../src/empathy-call-window.c:3055
+#: ../src/empathy-call-window.c:3027
msgid "The video formats necessary for this call are not installed on your computer"
msgstr "قالب‌های ویدئویی لازم برای برقراری این تماس روی رایانه‌ی شما نصب نشده‌اند"
#: ../src/empathy-streamed-media-window.c:2271
-#: ../src/empathy-call-window.c:3067
+#: ../src/empathy-call-window.c:3039
#, c-format
msgid "Something unexpected happened in a Telepathy component. Please <a href=\"%s\">report this bug</a> and attach logs gathered from the 'Debug' window in the Help menu."
msgstr "اتÙاقی ناخواسته در یک مؤلÙه‌ی تله‌پاتی رخ داد. لطÙا <a href=\"%s\"> این ایراد را گزارش دهید</a> Ùˆ ثبت وقایع جمع‌آوری شده از پنجره‌ی اشکال‌زدایی در منوی راهنما، را پیوست کنید."
#: ../src/empathy-streamed-media-window.c:2279
-#: ../src/empathy-call-window.c:3076
+#: ../src/empathy-call-window.c:3048
msgid "There was a failure in the call engine"
msgstr "یک خرابی در موتور تماس بوجود آمده بود"
#: ../src/empathy-streamed-media-window.c:2282
-#: ../src/empathy-call-window.c:3079
+#: ../src/empathy-call-window.c:3051
msgid "The end of the stream was reached"
msgstr "به انتهای جریان رسیدیم"
#: ../src/empathy-streamed-media-window.c:2322
-#: ../src/empathy-call-window.c:3119
+#: ../src/empathy-call-window.c:3091
msgid "Can't establish audio stream"
msgstr "نمی‌توان جریان صوتی را برقرار کرد"
#: ../src/empathy-streamed-media-window.c:2332
-#: ../src/empathy-call-window.c:3129
+#: ../src/empathy-call-window.c:3101
msgid "Can't establish video stream"
msgstr "نمی‌توان جریان ویدئویی را برقرار کرد"
@@ -3395,10 +3353,10 @@ msgstr "رمزنگاری Ú©Ùدک:"
#: ../src/empathy-call-window.ui.h:28
#: ../src/empathy-streamed-media-window.ui.h:21
-#: ../src/empathy-call-window.c:2542
-#: ../src/empathy-call-window.c:2543
-#: ../src/empathy-call-window.c:2544
-#: ../src/empathy-call-window.c:2545
+#: ../src/empathy-call-window.c:2514
+#: ../src/empathy-call-window.c:2515
+#: ../src/empathy-call-window.c:2516
+#: ../src/empathy-call-window.c:2517
msgid "Unknown"
msgstr "ناشناخته"
@@ -3424,7 +3382,6 @@ msgid "Audio"
msgstr "صدا"
#: ../src/empathy-chat-window.c:289
-#| msgid "Hide the main window."
msgid "Close this window?"
msgstr "بستن این پنجره؟"
@@ -3442,7 +3399,6 @@ msgstr[1] "بستن این پنجره باعث ترک %Iu اتاق Ú¯Ù¾ می‌Ø
#: ../src/empathy-chat-window.c:314
#, c-format
-#| msgid "Level "
msgid "Leave %s?"
msgstr "ترک %s؟"
@@ -3455,7 +3411,6 @@ msgid "Close window"
msgstr "بستن پنجره"
#: ../src/empathy-chat-window.c:334
-#| msgid "Level "
msgid "Leave room"
msgstr "ترک اتاق"
@@ -3585,7 +3540,7 @@ msgid "Incoming video call"
msgstr "در حال دریاÙت تماس ویدئویی"
#: ../src/empathy-event-manager.c:522
-#: ../src/empathy-call-window.c:1519
+#: ../src/empathy-call-window.c:1483
msgid "Incoming call"
msgstr "در حال دریاÙت تماس"
@@ -3602,7 +3557,7 @@ msgstr "Ùرد %s با شما تماس گرÙته است، آیا جواب Ù…ÛŒâ
#: ../src/empathy-event-manager.c:530
#: ../src/empathy-event-manager.c:731
#: ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
+#: ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming call from %s"
msgstr "در حال دریاÙت تماس از %s"
@@ -3622,7 +3577,7 @@ msgstr "_پاسخگویی با ویدئو"
#: ../src/empathy-event-manager.c:731
#: ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
+#: ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming video call from %s"
msgstr "ویدئو ورودی از %s"
@@ -3799,7 +3754,6 @@ msgid "Remove completed, canceled and failed file transfers from the list"
msgstr "انتقال‌های کامل شده، لغو شده Ùˆ خراب شده از Ùهرست حذ٠شوند"
#: ../src/empathy-import-dialog.c:76
-#| msgid "Import"
msgid "_Import"
msgstr "_وارد کردن"
@@ -3812,15 +3766,15 @@ msgid "Import Accounts"
msgstr "وارد کردن حساب‌ها"
#. Translators: this is the header of a treeview column
-#: ../src/empathy-import-widget.c:316
+#: ../src/empathy-import-widget.c:303
msgid "Import"
msgstr "وارد کردن"
-#: ../src/empathy-import-widget.c:325
+#: ../src/empathy-import-widget.c:312
msgid "Protocol"
msgstr "قرارداد"
-#: ../src/empathy-import-widget.c:349
+#: ../src/empathy-import-widget.c:336
msgid "Source"
msgstr "منبع"
@@ -3897,7 +3851,6 @@ msgid "Contact List"
msgstr "Ùهرست آشناها"
#: ../src/empathy-roster-window.ui.h:1
-#| msgid "_Accounts"
msgid "Account settings"
msgstr "تنظیمات حساب"
@@ -3997,7 +3950,7 @@ msgstr "اعضا"
#. Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
#. yes/no, yes/no and a number.
-#: ../src/empathy-new-chatroom-dialog.c:637
+#: ../src/empathy-new-chatroom-dialog.c:636
#, c-format
msgid ""
"%s\n"
@@ -4010,21 +3963,21 @@ msgstr ""
"نیاز به گذرواژه: %s\n"
"اعضا: %s"
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "Yes"
msgstr "بله"
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "No"
msgstr "خیر"
-#: ../src/empathy-new-chatroom-dialog.c:668
+#: ../src/empathy-new-chatroom-dialog.c:666
msgid "Could not start room listing"
msgstr "شروع به Ùهرست کردن اتاق ممکن نبود"
-#: ../src/empathy-new-chatroom-dialog.c:678
+#: ../src/empathy-new-chatroom-dialog.c:676
msgid "Could not stop room listing"
msgstr "توق٠Ùهرست کردن اتاق امکان پذیر نشد"
@@ -4065,7 +4018,6 @@ msgid "New conversation"
msgstr "Ú¯Ùتگوی جدید"
#: ../src/empathy-preferences.c:169
-#| msgid "Contact goes online"
msgid "Contact comes online"
msgstr "آشنا برخط می‌شود"
@@ -4086,46 +4038,46 @@ msgid "Language"
msgstr "زبان"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:726
+#: ../src/empathy-preferences.c:724
msgid "Juliet"
msgstr "ژولیت"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:733
+#: ../src/empathy-preferences.c:731
msgid "Romeo"
msgstr "رومئو"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:739
+#: ../src/empathy-preferences.c:737
msgid "O Romeo, Romeo, wherefore art thou Romeo?"
msgstr "چه کار داری می‌کنی؟"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:743
+#: ../src/empathy-preferences.c:741
msgid "Deny thy father and refuse thy name;"
msgstr "Ù…ÙÛŒ می‌زنم."
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:746
+#: ../src/empathy-preferences.c:744
msgid "Or if thou wilt not, be but sworn my love"
msgstr "Ù…ÙÛŒ می‌زنی Ú©Ù‡ چی؟"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:749
+#: ../src/empathy-preferences.c:747
msgid "And I'll no longer be a Capulet."
msgstr "Ú©Ù‡ Ùراموش کنم."
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:752
+#: ../src/empathy-preferences.c:750
msgid "Shall I hear more, or shall I speak at this?"
msgstr "Ú†ÛŒ رو Ùراموش کنی؟"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:755
+#: ../src/empathy-preferences.c:753
msgid "Juliet has disconnected"
msgstr "ژولیت قطع شده است"
-#: ../src/empathy-preferences.c:1159
+#: ../src/empathy-preferences.c:1157
msgid "Preferences"
msgstr "ترجیحات"
@@ -4350,12 +4302,6 @@ msgstr "پیوند Pastebin"
msgid "Pastebin response"
msgstr "پاسخ Pastebin"
-#: ../src/empathy-debug-window.c:1680
-#, c-format
-#| msgid "%s:"
-msgid "%s"
-msgstr "%s"
-
#: ../src/empathy-debug-window.c:1683
msgid "Data too large for a single paste. Please save logs to file."
msgstr "داده‌ها برای یک ارسال بسیار بزرگ است. لطÙا رویدادها را بر روی یک پرونده ذخیره کنید."
@@ -4474,39 +4420,39 @@ msgstr "اشکال‌زدای امپاتی"
msgid "- Empathy Chat Client"
msgstr "- کارگیر گپ امپاتی"
-#: ../src/empathy-notifications-approver.c:189
+#: ../src/empathy-notifications-approver.c:190
msgid "Respond"
msgstr "پاسخ"
-#: ../src/empathy-notifications-approver.c:203
-#: ../src/empathy-call-window.c:1529
+#: ../src/empathy-notifications-approver.c:204
+#: ../src/empathy-call-window.c:1493
msgid "Reject"
msgstr "رَد"
-#: ../src/empathy-notifications-approver.c:208
-#: ../src/empathy-notifications-approver.c:213
-#: ../src/empathy-call-window.c:1530
+#: ../src/empathy-notifications-approver.c:209
+#: ../src/empathy-notifications-approver.c:214
+#: ../src/empathy-call-window.c:1494
msgid "Answer"
msgstr "پاسخ"
-#: ../src/empathy-notifications-approver.c:213
+#: ../src/empathy-notifications-approver.c:214
msgid "Answer with video"
msgstr "پاسخگویی با ویدئو"
-#: ../src/empathy-notifications-approver.c:221
-#: ../src/empathy-notifications-approver.c:231
+#: ../src/empathy-notifications-approver.c:222
+#: ../src/empathy-notifications-approver.c:232
msgid "Decline"
msgstr "چشم پوشی"
-#: ../src/empathy-notifications-approver.c:225
-#: ../src/empathy-notifications-approver.c:236
+#: ../src/empathy-notifications-approver.c:226
+#: ../src/empathy-notifications-approver.c:237
msgid "Accept"
msgstr "پذیرش"
#. translators: the 'Provide' button is displayed in a notification
#. * bubble when Empathy is asking for an account password; clicking on it
#. * brings the password popup.
-#: ../src/empathy-notifications-approver.c:246
+#: ../src/empathy-notifications-approver.c:247
msgid "Provide"
msgstr "Ùراهم کردن"
@@ -4517,40 +4463,39 @@ msgstr "لحظاتی پیش %s سعی کرد تا با شما تماس بگیرØ
#. Translators: this is an "Info" label. It should be as short
#. * as possible.
+#: ../src/empathy-call-window.c:1124
#: ../src/empathy-call-window.c:1140
-#: ../src/empathy-call-window.c:1162
msgid "i"
msgstr "ر"
-#: ../src/empathy-call-window.c:2888
+#: ../src/empathy-call-window.c:2860
msgid "On hold"
msgstr "نگه داشتن پشت خط"
-#: ../src/empathy-call-window.c:2891
+#: ../src/empathy-call-window.c:2863
msgid "Mute"
msgstr "بی‌صدا"
-#: ../src/empathy-call-window.c:2893
+#: ../src/empathy-call-window.c:2865
msgid "Duration"
msgstr "مدت"
#. Translators: 'status - minutes:seconds' the caller has been connected
-#: ../src/empathy-call-window.c:2896
+#: ../src/empathy-call-window.c:2868
#, c-format
msgid "%s — %d:%02dm"
msgstr "%s — %Id:%I02dm"
-#: ../src/empathy-call-window.c:3166
+#: ../src/empathy-call-window.c:3138
#, c-format
msgid "Your current balance is %s."
msgstr "اعتبار Ùعلی شما %s."
-#: ../src/empathy-call-window.c:3170
+#: ../src/empathy-call-window.c:3142
msgid "Sorry, you don’t have enough credit for that call."
msgstr "متاسÙÙ…ØŒ شما برای این تماس اعتبار کاÙÛŒ ندارید."
-#: ../src/empathy-call-window.c:3172
-#| msgid "Top Up..."
+#: ../src/empathy-call-window.c:3144
msgid "Top Up"
msgstr "بالا بردن"
@@ -4563,7 +4508,6 @@ msgid "What kind of chat account do you have?"
msgstr "چه نوع حساب گپی دارید؟"
#: ../libempathy-gtk/empathy-new-account-dialog.c:166
-#| msgid "New account"
msgid "Adding new account"
msgstr "اضاÙÙ‡ کردن حساب جدید"
@@ -4572,11 +4516,6 @@ msgid "People nearby"
msgstr "اÙراد دور Ùˆ بر"
#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:150
-#| msgid ""
-#| "Empathy can automatically discover and chat with the people connected on "
-#| "the same network as you. If you want to use this feature, please check "
-#| "that the details below are correct. You can easily change these details "
-#| "later or disable this feature by using the 'Accounts' dialog"
msgid "Empathy can automatically discover and chat with the people connected on the same network as you. If you want to use this feature, please check that the details below are correct."
msgstr "امپاتی می‌تواند به طور خودکار اÙرادی Ú©Ù‡ بر روی شبکه مشابه هستند را پیدا کند تا با آن‌ها Ú¯Ù¾ بزنید. اگر می‌خواهید از این قابلیت استÙاده کنید، بررسی کنید Ú©Ù‡ جزئیات زیر درست باشند."
@@ -4584,244 +4523,5 @@ msgstr "امپاتی می‌تواند به طور خودکار اÙرادی Ú©Ù
msgid "You can change these details later or disable this feature by choosing <span style=\"italic\">Edit → Accounts</span> in the Contact List."
msgstr "شما می‌توانید این جزئیات را بعدا تغییر دهید یا این امکان را با انتخاب <span style=\"italic\">ویرایش â€âƒª حساب‌ها</span> در Ùهرست آشناها غیرÙعال کنید."
-#~ msgid "Call volume"
-#~ msgstr "بلندی صدای تماس"
-
-#~ msgid "Call volume, as a percentage."
-#~ msgstr "بلندی صدای تماس، بر اساس درصد"
-
-#~ msgid "Empathy has migrated butterfly logs"
-#~ msgstr "امپاتی ثبت وقایع پروانه‌ای (butterfly) را منتقل کرده است"
-
-#~ msgid "Whether Empathy has migrated butterfly logs."
-#~ msgstr "این‌که امپاتی وقایع پروانه‌ای را منتقل کرده است یا خیر."
-
-#~ msgid "Socket type not supported"
-#~ msgstr "نوع سوکت پشتیبانی نمی‌شود"
-
-#~ msgid "My Web Accounts"
-#~ msgstr "حساب‌های وب من"
-
-#~ msgid "The account %s is edited via %s."
-#~ msgstr "حساب %s از طریق٠%s ویرایش شد."
-
-#~ msgid "The account %s cannot be edited in Empathy."
-#~ msgstr "حساب %s از طریق امپاتی قابل ویرایش نیست."
-
-#~ msgid "Launch My Web Accounts"
-#~ msgstr "اجرای حساب‌های وب من"
-
-#~ msgid "Edit %s"
-#~ msgstr "ویرایش %s"
-
-#~ msgid "Ca_ncel"
-#~ msgstr "_لغو"
-
-#~ msgid "Personal Information"
-#~ msgstr "اطلاعات شخصی"
-
-#~ msgid "Ungrouped"
-#~ msgstr "گروه‌بندی لغو شد"
-
-#~ msgid "Favorite People"
-#~ msgstr "اÙراد موردپسند"
-#~ msgctxt "Edit contact (contextual menu)"
-
-#~ msgid "_Edit"
-#~ msgstr "_ویرایش"
-
-#~ msgid "Select a contact"
-#~ msgstr "آشنایی انتخاب کنید"
-
-#~ msgid "Select contacts to link"
-#~ msgstr "آشناها را انتخاب کنید تا پیوند داده شود"
-
-#~ msgid "New contact preview"
-#~ msgstr "پیش‌نمایش آشنای جدید"
-
-#~ msgid "Contacts selected in the list on the left will be linked together."
-#~ msgstr "آشناهای انتخاب شده در Ùهرست سمت Ú†Ù¾ با یکدیگر پیوند داده می‌شوند."
-#~ msgctxt "Link individual (contextual menu)"
-
-#~ msgid "_Link Contacts…"
-#~ msgstr "_پیوند آشناها..."
-
-#~ msgid "Link Contacts"
-#~ msgstr "پیوند آشنایان"
-#~ msgctxt "Unlink individual (button)"
-
-#~ msgid "_Unlink…"
-#~ msgstr "_لغو پیوند..."
-
-#~ msgid ""
-#~ "Completely split the displayed linked contacts into the separate contacts."
-#~ msgstr ""
-#~ "جدا کردن کامل آشناهای پیوند شده‌ی نمایش داده شده به آشناهای جدا از هم."
-
-#~ msgid "_Link"
-#~ msgstr "_پیوند"
-
-#~ msgid "Unlink linked contacts '%s'?"
-#~ msgstr "لغو پیوند آشناهای پیوند شده «%s»؟"
-
-#~ msgid ""
-#~ "Are you sure you want to unlink these linked contacts? This will "
-#~ "completely split the linked contacts into separate contacts."
-#~ msgstr ""
-#~ "آیا مطمئن هستید که می‌خواهید این آشناهای پیوند شده را لغو پیوند کنید؟ این "
-#~ "کار باعث می‌شود تا آشناهای پیوند شده کاملا از هم جدا شوند."
-#~ msgctxt "Unlink individual (button)"
-
-#~ msgid "_Unlink"
-#~ msgstr "_لغو پیوند"
-
-#~ msgid "Contact ID:"
-#~ msgstr "شناسه‌ی آشنا:"
-
-#~ msgid "C_hat"
-#~ msgstr "_Ú¯Ù¾"
-
-#~ msgid "Send _Video"
-#~ msgstr "Ùرستادن _ویدئو"
-
-#~ msgid "C_all"
-#~ msgstr "_تماس"
-
-#~ msgid "Set your presence and current status"
-#~ msgstr "حضور و وضعیت جاری خود را تنظیم کنید"
-
-#~ msgid "The selected contact cannot receive files."
-#~ msgstr "آشنای گزیده شده نمی‌تواند پرونده دریاÙت کند."
-
-#~ msgid "The selected contact is offline."
-#~ msgstr "آشنای انتخاب شده برون‌خط است."
-
-#~ msgid "There was an error while importing the accounts."
-#~ msgstr "هنگام وارد کردن حساب‌ها خطایی به رخ داد."
-
-#~ msgid "There was an error while parsing the account details."
-#~ msgstr "هنگام تجزیه کردن جزئیات حساب خطایی رخ داد."
-
-#~ msgid "There was an error while creating the account."
-#~ msgstr "خطایی در هنگام ایجاد حساب رخ داد."
-
-#~ msgid "There was an error."
-#~ msgstr "خطایی وجود داشت."
-
-#~ msgid "The error message was: %s"
-#~ msgstr "خطا این بود: %s"
-
-#~ msgid ""
-#~ "You can either go back and try to enter your accounts' details again or "
-#~ "quit this assistant and add accounts later from the Edit menu."
-#~ msgstr ""
-#~ "می‌توانید جزئیات حساب‌های خود را دوباره وارد کنید یا از این دستیار خارج شده "
-#~ "Ùˆ بعدا حساب‌های خود را از منوی ویرایش باÙزایید."
-
-#~ msgid "An error occurred"
-#~ msgstr "خطایی رخ داد"
-
-#~ msgid "Do you have any other chat accounts you want to set up?"
-#~ msgstr "آیا حساب‌های گپ دیگری هم دارید که بخواهید برپا کنید؟"
-
-#~ msgid "Enter your account details"
-#~ msgstr "جزئیات حساب خود را وارد کنید"
-
-#~ msgid "What kind of chat account do you want to create?"
-#~ msgstr "چه نوع حساب گپی می‌خواهید ایجاد کنید؟"
-
-#~ msgid "Do you want to create other chat accounts?"
-#~ msgstr "آیا می‌خواهید حساب‌های گپ دیگری هم بسازید؟"
-
-#~ msgid "Enter the details for the new account"
-#~ msgstr "جزئیات حساب جدید را وارد کنید"
-
-#~ msgid ""
-#~ "With Empathy you can chat with people online nearby and with friends and "
-#~ "colleagues who use Google Talk, AIM, Windows Live and many other chat "
-#~ "programs. With a microphone or a webcam you can also have audio or video "
-#~ "calls."
-#~ msgstr ""
-#~ "با امپاتی می‌توانید با دیگران به صورت بر خط گپ بزنید و با دوستان و هم "
-#~ "دوره‌ای‌هایی که از گوگل‌تاک، AIM، ویندوز لایو و خیلی برنامه‌های گپ دیگر "
-#~ "استÙاده می‌کنند ارتباط داشته باشید. با یک میکروÙون یا یک وب‌کم می‌توانید صدا "
-#~ "و تصویر ویدئویی هم داشته باشید."
-
-#~ msgid "Do you have an account you've been using with another chat program?"
-#~ msgstr "آیا حسابی دارید Ú©Ù‡ با برنامه‌ی Ú¯Ù¾ دیگری از آن استÙاده می‌کرده‌اید؟"
-
-#~ msgid "Yes, import my account details from "
-#~ msgstr "بله، جزئیات حساب مرا وارد کن از "
-
-#~ msgid "Yes, I'll enter my account details now"
-#~ msgstr "بله، جزئیات حسابم را هم اکنون وارد خواهم کرد"
-
-#~ msgid "No, I want a new account"
-#~ msgstr "خیر، حساب جدیدی می‌خواهم"
-
-#~ msgid "No, I just want to see people online nearby for now"
-#~ msgstr "خیر، الان Ùقط می‌خواهم اÙراد برخط٠دور Ùˆ بر را ببینم"
-
-#~ msgid "Select the accounts you want to import:"
-#~ msgstr "حساب‌هایی که می‌خواهید وارد کنید را انتخاب کنید:"
-
-#~ msgid "No, that's all for now"
-#~ msgstr "خیر، Ùعلا کاÙیه"
-
-#~ msgid "Edit->Accounts"
-#~ msgstr "ویرایش->حساب‌ها"
-
-#~ msgid "I do _not want to enable this feature for now"
-#~ msgstr "_نمی‌خواهم Ùعلا این قابلیت را Ùعلا Ùعال کنم"
-
-#~ msgid ""
-#~ "You won't be able to chat with people connected to your local network, as "
-#~ "telepathy-salut is not installed. If you want to enable this feature, "
-#~ "please install the telepathy-salut package and create a People Nearby "
-#~ "account from the Accounts dialog"
-#~ msgstr ""
-#~ "چون telepathy-salut نصب نیست، شما نخواهید توانست با اÙراد متصل به شبکه‌ی "
-#~ "محلی خودتان Ú¯Ù¾ بزنید. اگر می‌خواهید این قابلیت را به کار اندازید، لطÙا "
-#~ "بسته‌ی telepathy-salut را نصب کنید Ùˆ در محاوره‌ی حساب‌ها یک حساب٠«اÙراد دور Ùˆ "
-#~ "بر» ایجاد کنید"
-
-#~ msgid "Messaging and VoIP Accounts Assistant"
-#~ msgstr "دستیار حساب‌های پیام‌رسان و VoIP"
-
-#~ msgid "Welcome to Empathy"
-#~ msgstr "به امپاتی خوش آمدید"
-
-#~ msgid "Import your existing accounts"
-#~ msgstr "وارد کردن حساب‌های موجود شما"
-
-#~ msgid "Please enter personal details"
-#~ msgstr "لطÙاً جزئیات شخصی را وارد کنید"
-
-#~ msgid ""
-#~ "You are about to create a new account, which will discard\n"
-#~ "your changes. Are you sure you want to proceed?"
-#~ msgstr ""
-#~ "شما درحال ایجاد یک حساب جدید هستید، این کار تغییرات شما را نادیده\n"
-#~ "خواهد گرÙت. آیا مطمئنید Ú©Ù‡ می‌خواهید ادامه دهید؟"
-
-#~ msgid "Protocol:"
-#~ msgstr "قرارداد:"
-#~ msgctxt "encoding video codec"
-
-#~ msgid "Unknown"
-#~ msgstr "ناشناخته"
-#~ msgctxt "encoding audio codec"
-
-#~ msgid "Unknown"
-#~ msgstr "ناشناخته"
-#~ msgctxt "decoding video codec"
-
-#~ msgid "Unknown"
-#~ msgstr "ناشناخته"
-#~ msgctxt "decoding audio codec"
-
-#~ msgid "Unknown"
-#~ msgstr "ناشناخته"
-
-#~ msgid "_Personal Information"
-#~ msgstr "_اطلاعات شخصی"
+#~ msgid "_Disable"
+#~ msgstr "_غیرÙعال‌کردن"
diff --git a/po/gl.po b/po/gl.po
index fa25b405a..308dec431 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: empathy-master-po-gl-57278_.merged\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-17 15:14+0100\n"
-"PO-Revision-Date: 2012-03-17 15:15+0100\n"
+"POT-Creation-Date: 2012-05-20 18:10+0200\n"
+"PO-Revision-Date: 2012-05-20 18:11+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
"Language: gl\n"
@@ -42,7 +42,7 @@ msgstr "Converse en Google Talk, Facebook, MSN e moitos máis servizos de chat"
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2512
+#: ../src/empathy-accounts-dialog.c:2511
msgid "Messaging and VoIP Accounts"
msgstr "Contas de mensaxaría e Voz IP"
@@ -51,12 +51,12 @@ msgid "Manage Messaging and VoIP accounts"
msgstr "Xestionar as contas de mensaxaría e Voz IP"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:1
+#: ../data/org.gnome.Empathy.gschema.xml.h:1
msgid "Connection managers should be used"
msgstr "Se se deberían usar xestores de conexión"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:2
+#: ../data/org.gnome.Empathy.gschema.xml.h:2
msgid ""
"Whether connectivity managers should be used to automatically disconnect/"
"reconnect."
@@ -65,24 +65,24 @@ msgstr ""
"reconectarse automaticamente ou non."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:3
+#: ../data/org.gnome.Empathy.gschema.xml.h:3
msgid "Empathy should auto-connect on startup"
msgstr "Empathy debería autoconectarse ao inicio"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:4
+#: ../data/org.gnome.Empathy.gschema.xml.h:4
msgid "Whether Empathy should automatically log into your accounts on startup."
msgstr ""
"Indica se Empathy debería iniciar a sesión nas súas contas automaticamente "
"ao inicio."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:5
+#: ../data/org.gnome.Empathy.gschema.xml.h:5
msgid "Empathy should auto-away when idle"
msgstr "Empathy debería mostrar ausencia ao estar inactivo"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:6
+#: ../data/org.gnome.Empathy.gschema.xml.h:6
msgid ""
"Whether Empathy should go into away mode automatically if the user is idle."
msgstr ""
@@ -90,21 +90,22 @@ msgstr ""
"usuario está inactivo."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:7
+#: ../data/org.gnome.Empathy.gschema.xml.h:7
msgid "Empathy default download folder"
msgstr "Cartafol de descargas predeterminado do Empathy"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:8
+#: ../data/org.gnome.Empathy.gschema.xml.h:8
msgid "The default folder to save file transfers in."
msgstr "O cartafol predeterminado no que gardar os ficheiros transferidos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:9
+#. translators: Automatic tasks which are run once to port/update account settings. Ideally, this shouldn't be exposed to users at all, we just use a gsettings key here as an optimization to only run it only once.
+#: ../data/org.gnome.Empathy.gschema.xml.h:10
msgid "Magic number used to check if sanity cleaning tasks should be run"
msgstr ""
"Número máxico usado para comprobar se se deben executar as tarefas de limpeza"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:10
+#: ../data/org.gnome.Empathy.gschema.xml.h:11
msgid ""
"empathy-sanity-cleaning.c uses this number to check if the cleaning tasks "
"should be executed or not. Users should not change this key manually."
@@ -113,96 +114,97 @@ msgstr ""
"as tarefas de limpeza. Os usuarios non deben cambiar esta chave manualmente."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:11
+#: ../data/org.gnome.Empathy.gschema.xml.h:12
+#: ../src/empathy-preferences.ui.h:1
msgid "Show offline contacts"
msgstr "Mostrar contactos desconectados"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
+#: ../data/org.gnome.Empathy.gschema.xml.h:13
msgid "Whether to show contacts that are offline in the contact list."
msgstr ""
"Indica se se debe mostrar os contactos que están desconectados na lista de "
"contactos."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
+#: ../data/org.gnome.Empathy.gschema.xml.h:14
msgid "Show avatars"
msgstr "Mostrar avatares"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
+#: ../data/org.gnome.Empathy.gschema.xml.h:15
msgid ""
"Whether to show avatars for contacts in the contact list and chat windows."
msgstr ""
"Indica se se deben mostrar os avatares dos contactos na lista de contactos e "
"das xanelas de conversa."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
+#: ../data/org.gnome.Empathy.gschema.xml.h:16
msgid "Show protocols"
msgstr "Mostrar protocolos"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
+#: ../data/org.gnome.Empathy.gschema.xml.h:17
msgid "Whether to show protocols for contacts in the contact list."
msgstr ""
"Indica se se deben mostrar os protocolos para os contactos na lista de "
"contactos."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
+#: ../data/org.gnome.Empathy.gschema.xml.h:18
msgid "Show Balance in contact list"
msgstr "Mostrar crédito na lista de contactos"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
+#: ../data/org.gnome.Empathy.gschema.xml.h:19
msgid "Whether to show account balances in the contact list."
msgstr "Indica se se debe mostrar o crédito na lista de contactos."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
+#: ../data/org.gnome.Empathy.gschema.xml.h:20
msgid "Compact contact list"
msgstr "Lista compacta de contactos"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
+#: ../data/org.gnome.Empathy.gschema.xml.h:21
msgid "Whether to show the contact list in compact mode."
msgstr "Indica se se debe mostrar a lista de contactos en modo compacto."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
+#: ../data/org.gnome.Empathy.gschema.xml.h:22
msgid "Hide main window"
msgstr "Ocultar a xanela principal"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
+#: ../data/org.gnome.Empathy.gschema.xml.h:23
msgid "Hide the main window."
msgstr "Ocultar a xanela principal."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
+#: ../data/org.gnome.Empathy.gschema.xml.h:24
msgid "Default directory to select an avatar image from"
msgstr "Cartafol predeterminado para seleccionar un avatar"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
+#: ../data/org.gnome.Empathy.gschema.xml.h:25
msgid "The last directory that an avatar image was chosen from."
msgstr "Último cartafol do que escolleu unha imaxe de avatar."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
+#: ../data/org.gnome.Empathy.gschema.xml.h:26
msgid "Open new chats in separate windows"
msgstr "Abrir as novas conversas en xanelas separadas"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
+#: ../data/org.gnome.Empathy.gschema.xml.h:27
msgid "Always open a separate chat window for new chats."
msgstr "Abrir sempre unha xanela de conversa separada para as conversas novas."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
+#: ../data/org.gnome.Empathy.gschema.xml.h:28
msgid "Display incoming events in the status area"
msgstr "Mostrar os eventos entrantes na área de estado"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
+#: ../data/org.gnome.Empathy.gschema.xml.h:29
msgid ""
"Display incoming events in the status area. If false, present them to the "
"user immediately."
@@ -210,32 +212,32 @@ msgstr ""
"Mostrar os eventos entrantes na área de estado. Se é falso mostrarllos "
"directamente ao usuario."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
+#: ../data/org.gnome.Empathy.gschema.xml.h:30
msgid "The position for the chat window side pane"
msgstr "A posición do panel lateral da xanela de conversa"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
+#: ../data/org.gnome.Empathy.gschema.xml.h:31
msgid "The stored position (in pixels) of the chat window side pane."
msgstr ""
"A posición almacenada (en píxeles) do panel lateral da xanela de conversa."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
+#: ../data/org.gnome.Empathy.gschema.xml.h:32
msgid "Show contact groups"
msgstr "Mostrar grupos de contactos"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
+#: ../data/org.gnome.Empathy.gschema.xml.h:33
msgid "Whether to show groups in the contact list."
msgstr "Indica se se deben mostrar os grupos na lista de contactos."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
+#: ../data/org.gnome.Empathy.gschema.xml.h:34
msgid "Contact list sort criterion"
msgstr "Criterio de ordenación da lista de contactos"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
+#: ../data/org.gnome.Empathy.gschema.xml.h:35
msgid ""
"Which criterion to use when sorting the contact list. Default is to sort by "
"the contact's state with the value \"state\". A value of \"name\" will sort "
@@ -246,76 +248,76 @@ msgstr ""
"«name» (nome) ordenará a lista de contactos polo nome."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
+#: ../data/org.gnome.Empathy.gschema.xml.h:36
msgid "Use notification sounds"
msgstr "Usar sons de notificación"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
+#: ../data/org.gnome.Empathy.gschema.xml.h:37
msgid "Whether to play a sound to notify of events."
msgstr "Indica se se debe reproducir un son para notificar os eventos."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
+#: ../data/org.gnome.Empathy.gschema.xml.h:38
msgid "Disable sounds when away"
msgstr "Desactivar os sons ao ausentarse"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
+#: ../data/org.gnome.Empathy.gschema.xml.h:39
msgid "Whether to play sound notifications when away or busy."
msgstr ""
"Indica se se debe reproducir un son para notificar cando se está ocupado ou "
"ausente."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
+#: ../data/org.gnome.Empathy.gschema.xml.h:40
msgid "Play a sound for incoming messages"
msgstr "Reproducir un son cando cheguen mensaxes"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
+#: ../data/org.gnome.Empathy.gschema.xml.h:41
msgid "Whether to play a sound to notify of incoming messages."
msgstr "Indica se se debe reproducir un son para notificar mensaxes entrantes."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
+#: ../data/org.gnome.Empathy.gschema.xml.h:42
msgid "Play a sound for outgoing messages"
msgstr "Reproducir un son ao enviar mensaxes"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
+#: ../data/org.gnome.Empathy.gschema.xml.h:43
msgid "Whether to play a sound to notify of outgoing messages."
msgstr ""
"Indica se se debe reproducir un son para notificar as mensaxes saíntes."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
+#: ../data/org.gnome.Empathy.gschema.xml.h:44
msgid "Play a sound for new conversations"
msgstr "Reproducir un son para as conversas novas"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
+#: ../data/org.gnome.Empathy.gschema.xml.h:45
msgid "Whether to play a sound to notify of new conversations."
msgstr "Indica se se debe reproducir un son para notificar as conversas novas."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
+#: ../data/org.gnome.Empathy.gschema.xml.h:46
msgid "Play a sound when a contact logs in"
msgstr "Reproducir un son cando un contacto inicie sesión"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
+#: ../data/org.gnome.Empathy.gschema.xml.h:47
msgid "Whether to play a sound to notify of contacts logging into the network."
msgstr ""
"Indica se se debe reproducir un son para notificar os inicio de sesión dos "
"contactos na rede."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
+#: ../data/org.gnome.Empathy.gschema.xml.h:48
msgid "Play a sound when a contact logs out"
msgstr "Reproducir un son cando un contacto saia da sesión"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
+#: ../data/org.gnome.Empathy.gschema.xml.h:49
msgid ""
"Whether to play a sound to notify of contacts logging out of the network."
msgstr ""
@@ -323,56 +325,56 @@ msgstr ""
"unha sesión na rede."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
+#: ../data/org.gnome.Empathy.gschema.xml.h:50
msgid "Play a sound when we log in"
msgstr "Reproducir un son cando inicio sesión"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
+#: ../data/org.gnome.Empathy.gschema.xml.h:51
msgid "Whether to play a sound when logging into a network."
msgstr "Indica se se debe reproducir un son cando se inicia sesión na rede."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
+#: ../data/org.gnome.Empathy.gschema.xml.h:52
msgid "Play a sound when we log out"
msgstr "Reproducir un son cando ao saír da sesión"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
+#: ../data/org.gnome.Empathy.gschema.xml.h:53
msgid "Whether to play a sound when logging out of a network."
msgstr "Indica se se debe reproducir un son cando se sae da sesión na rede."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
+#: ../data/org.gnome.Empathy.gschema.xml.h:54
msgid "Enable popup notifications for new messages"
msgstr "Activar as notificacións emerxentes para as mensaxes novas"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
+#: ../data/org.gnome.Empathy.gschema.xml.h:55
msgid "Whether to show a popup notification when receiving a new message."
msgstr ""
"Indica se mostrar ou non unha notificación emerxente cando se reciba unha "
"mensaxe nova."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
+#: ../data/org.gnome.Empathy.gschema.xml.h:56
msgid "Disable popup notifications when away"
msgstr "Desactivar as notificacións emerxentes cando se está ausente"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
+#: ../data/org.gnome.Empathy.gschema.xml.h:57
msgid "Whether to show popup notifications when away or busy."
msgstr ""
"Indica se mostrar ou non as notificacións emerxentes cando se está ausente "
"ou ocupado."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
+#: ../data/org.gnome.Empathy.gschema.xml.h:58
msgid "Pop up notifications if the chat isn't focused"
msgstr "Facer emerxer unha notificación cando a conversa non está enfocada"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
+#: ../data/org.gnome.Empathy.gschema.xml.h:59
msgid ""
"Whether to show a popup notification when receiving a new message even if "
"the chat is already opened, but not focused."
@@ -381,98 +383,98 @@ msgstr ""
"mensaxe nova, aínda cando a conversa xa estea aberta mais non estea enfocada."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
+#: ../data/org.gnome.Empathy.gschema.xml.h:60
msgid "Pop up notifications when a contact logs in"
msgstr "Facer emerxer unha notificación cando un contacto entra"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
+#: ../data/org.gnome.Empathy.gschema.xml.h:61
msgid "Whether to show a popup notification when a contact goes online."
msgstr ""
"Indica se mostrar ou non unha notificación emerxente cando un contacto está "
"conectado."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
+#: ../data/org.gnome.Empathy.gschema.xml.h:62
msgid "Pop up notifications when a contact logs out"
msgstr "Facer emerxer unha notificación cando un contacto sae"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
+#: ../data/org.gnome.Empathy.gschema.xml.h:63
msgid "Whether to show a popup notification when a contact goes offline."
msgstr ""
"Indica se mostrar ou non unha notificación emerxente cando un contacto está "
"desconectado."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
+#: ../data/org.gnome.Empathy.gschema.xml.h:64
msgid "Use graphical smileys"
msgstr "Usar emoticonas gráficas"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
+#: ../data/org.gnome.Empathy.gschema.xml.h:65
msgid "Whether to convert smileys into graphical images in conversations."
msgstr ""
"Indica se converter ou non as emoticonas en imaxes gráficas nas conversas."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
+#: ../data/org.gnome.Empathy.gschema.xml.h:66
msgid "Show contact list in rooms"
msgstr "Mostrar a lista de contactos nas salas"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
+#: ../data/org.gnome.Empathy.gschema.xml.h:67
msgid "Whether to show the contact list in chat rooms."
msgstr "Indica se mostrar ou non a lista de contactos nas salas de conversa."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
+#: ../data/org.gnome.Empathy.gschema.xml.h:68
msgid "Chat window theme"
msgstr "Tema da xanela de conversa"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
+#: ../data/org.gnome.Empathy.gschema.xml.h:69
msgid "The theme that is used to display the conversation in chat windows."
msgstr "O tema usado para mostrar as conversa nas xanelas de conversa."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
+#: ../data/org.gnome.Empathy.gschema.xml.h:70
msgid "Chat window theme variant"
msgstr "Variante do tema da xanela de charla"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
+#: ../data/org.gnome.Empathy.gschema.xml.h:71
msgid ""
"The theme variant that is used to display the conversation in chat windows."
msgstr ""
"A variante do tema que se usará para mostrar a conversa nas xanelas de chat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
+#: ../data/org.gnome.Empathy.gschema.xml.h:72
msgid "Path of the Adium theme to use"
msgstr "Ruta do tema de Adium para usar"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
+#: ../data/org.gnome.Empathy.gschema.xml.h:73
msgid "Path of the Adium theme to use if the theme used for chat is Adium."
msgstr ""
"Ruta do tema de Adium para usar se o tema usado para o chat é de Adium."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:73
+#: ../data/org.gnome.Empathy.gschema.xml.h:74
msgid "Enable WebKit Developer Tools"
msgstr "Activar as ferramentas de desenvolvedor WebKit"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
+#: ../data/org.gnome.Empathy.gschema.xml.h:75
msgid ""
"Whether WebKit developer tools, such as the Web Inspector, should be enabled."
msgstr ""
"Indica se as ferramentas de desenvolvedor WebKit, tales como Web Inspector, "
"deberían ser activadas."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:75
+#: ../data/org.gnome.Empathy.gschema.xml.h:76
msgid "Inform other users when you are typing to them"
msgstr "Informar a outros usuarios cando vostede está escribindo"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:76
+#: ../data/org.gnome.Empathy.gschema.xml.h:77
msgid ""
"Whether to send the 'composing' or 'paused' chat states. Does not currently "
"affect the 'gone' state."
@@ -481,22 +483,22 @@ msgstr ""
"afecta realmente ao estado «ausente»."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:77
+#: ../data/org.gnome.Empathy.gschema.xml.h:78
msgid "Use theme for chat rooms"
msgstr "Usar un tema para as salas de conversa"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
+#: ../data/org.gnome.Empathy.gschema.xml.h:79
msgid "Whether to use the theme for chat rooms."
msgstr "Indica se usar ou non o tema para as salas de conversa."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
+#: ../data/org.gnome.Empathy.gschema.xml.h:80
msgid "Spell checking languages"
msgstr "Idiomas para a corrección ortográfica"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:80
+#: ../data/org.gnome.Empathy.gschema.xml.h:81
msgid ""
"Comma-separated list of spell checker languages to use (e.g. \"en, fr, nl\")."
msgstr ""
@@ -504,12 +506,12 @@ msgstr ""
"ex., «gl, pt, en»)."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
+#: ../data/org.gnome.Empathy.gschema.xml.h:82
msgid "Enable spell checker"
msgstr "Activar a verificación ortográfica"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
+#: ../data/org.gnome.Empathy.gschema.xml.h:83
msgid ""
"Whether to check words typed against the languages you want to check with."
msgstr ""
@@ -517,12 +519,12 @@ msgstr ""
"as quere verificar."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
+#: ../data/org.gnome.Empathy.gschema.xml.h:84
msgid "Nick completed character"
msgstr "Carácter de completado de alcume"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:84
+#: ../data/org.gnome.Empathy.gschema.xml.h:85
msgid ""
"Character to add after nickname when using nick completion (tab) in group "
"chat."
@@ -531,63 +533,63 @@ msgstr ""
"alcume (tabulador) nunha conversa de grupo."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
+#: ../data/org.gnome.Empathy.gschema.xml.h:86
msgid "Empathy should use the avatar of the contact as the chat window icon"
msgstr ""
"O Empathy debería usar o avatar do contacto como a icona da xanela de "
"conversa"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
+#: ../data/org.gnome.Empathy.gschema.xml.h:87
msgid ""
"Whether Empathy should use the avatar of the contact as the chat window icon."
msgstr ""
"Indica se o Empathy debería usar o avatar dos contactos como a icona da "
"xanela da conversa ou non."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:87
+#: ../data/org.gnome.Empathy.gschema.xml.h:88
msgid "Last account selected in Join Room dialog"
msgstr "Última conta seleccionada no diálogo Unirse á sala"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:88
+#: ../data/org.gnome.Empathy.gschema.xml.h:89
msgid "D-Bus object path of the last account selected to join a room."
msgstr ""
"Ruta do obxecto D-Bus da última conta seleccionada para unirse a unha sala."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
+#: ../data/org.gnome.Empathy.gschema.xml.h:90
msgid "Camera device"
msgstr "Dispositivo da cámara"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
+#: ../data/org.gnome.Empathy.gschema.xml.h:91
msgid "Default camera device to use in video calls, e.g. /dev/video0."
msgstr ""
"Dispositivo de cámara predeterminado para usar nas chamadas de vídeo, p.ex. /"
"dev/video0."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
+#: ../data/org.gnome.Empathy.gschema.xml.h:92
msgid "Camera position"
msgstr "Posición da cámara"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
+#: ../data/org.gnome.Empathy.gschema.xml.h:93
msgid "Position the camera preview should be during a call."
msgstr ""
"Posición onde debe estar a vista previa da cámara durante unha chamada."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
+#: ../data/org.gnome.Empathy.gschema.xml.h:94
msgid "Echo cancellation support"
msgstr "Compatibilidade de cancelación de eco"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
+#: ../data/org.gnome.Empathy.gschema.xml.h:95
msgid "Whether to enable Pulseaudio's echo cancellation filter."
msgstr "Indica se activar o filtro de cancelación de eco de Pulseaudio."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
+#: ../data/org.gnome.Empathy.gschema.xml.h:96
msgid "Show hint about closing the main window"
msgstr "Mostrar unha indicación sobre pechar a xanela principal"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
+#: ../data/org.gnome.Empathy.gschema.xml.h:97
msgid ""
"Whether to show the message dialog about closing the main window with the "
"'x' button in the title bar."
@@ -595,55 +597,55 @@ msgstr ""
"Indica se mostrar ou non o diálogo de mensaxe sobre pechar a xanela "
"principal co botón 'x' da barra de título."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
+#: ../data/org.gnome.Empathy.gschema.xml.h:98
msgid "Empathy can publish the user's location"
msgstr "Empathy pode publicar a localización dos usuarios"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
+#: ../data/org.gnome.Empathy.gschema.xml.h:99
msgid "Whether Empathy can publish the user's location to their contacts."
msgstr ""
"Indica se o Empathy pode ou non publicar a localización do usuario aos seus "
"contactos."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
+#: ../data/org.gnome.Empathy.gschema.xml.h:100
msgid "Empathy can use the network to guess the location"
msgstr "Empathy pode usar a rede para adiviñar a localización"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
+#: ../data/org.gnome.Empathy.gschema.xml.h:101
msgid "Whether Empathy can use the network to guess the location."
msgstr ""
"Indica se o Empathy pode ou non usar a rede para adiviñar a localización."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:101
+#: ../data/org.gnome.Empathy.gschema.xml.h:102
msgid "Empathy can use the cellular network to guess the location"
msgstr "Empathy pode usar a rede de móbiles para seguir a localización"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:102
+#: ../data/org.gnome.Empathy.gschema.xml.h:103
msgid "Whether Empathy can use the cellular network to guess the location."
msgstr ""
"Indica se o Empathy pode ou non usar a rede de telefonía móbil para adiviñar "
"a localización."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:103
+#: ../data/org.gnome.Empathy.gschema.xml.h:104
msgid "Empathy can use the GPS to guess the location"
msgstr "Empathy pode usar o GPS para seguir a localización"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:104
+#: ../data/org.gnome.Empathy.gschema.xml.h:105
msgid "Whether Empathy can use the GPS to guess the location."
msgstr ""
"Indica se o Empathy pode usar ou non o GPS para adiviñar a localización."
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:105
+#: ../data/org.gnome.Empathy.gschema.xml.h:106
msgid "Empathy should reduce the location's accuracy"
msgstr "O Empathy debería reducir a precisión da localización"
# rever
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:106
+#: ../data/org.gnome.Empathy.gschema.xml.h:107
msgid ""
"Whether Empathy should reduce the location's accuracy for privacy reasons."
msgstr ""
@@ -651,223 +653,223 @@ msgstr ""
"motivos de privacidade."
# rever
-#: ../libempathy/empathy-ft-handler.c:738
+#: ../libempathy/empathy-ft-handler.c:737
msgid "No reason was specified"
msgstr "Non se especificou un motivo"
# rever
-#: ../libempathy/empathy-ft-handler.c:741
+#: ../libempathy/empathy-ft-handler.c:740
msgid "The change in state was requested"
msgstr "Foi solicitado o cambio de estado"
# rever
-#: ../libempathy/empathy-ft-handler.c:744
+#: ../libempathy/empathy-ft-handler.c:743
msgid "You canceled the file transfer"
msgstr "Vostede cancelou a transferencia de ficheiros"
# rever
-#: ../libempathy/empathy-ft-handler.c:747
+#: ../libempathy/empathy-ft-handler.c:746
msgid "The other participant canceled the file transfer"
msgstr "O outro participante cancelou a transferencia de ficheiros"
# rever
-#: ../libempathy/empathy-ft-handler.c:750
+#: ../libempathy/empathy-ft-handler.c:749
msgid "Error while trying to transfer the file"
msgstr "Produciuse un erro ao tentar transferir o ficheiro"
# rever
-#: ../libempathy/empathy-ft-handler.c:753
+#: ../libempathy/empathy-ft-handler.c:752
msgid "The other participant is unable to transfer the file"
msgstr "O outro participante non pode transferir o ficheiro"
-#: ../libempathy/empathy-ft-handler.c:756 ../libempathy/empathy-utils.c:313
+#: ../libempathy/empathy-ft-handler.c:755 ../libempathy/empathy-utils.c:312
msgid "Unknown reason"
msgstr "Motivo descoñecido"
-#: ../libempathy/empathy-ft-handler.c:919
+#: ../libempathy/empathy-ft-handler.c:918
msgid "File transfer completed, but the file was corrupted"
msgstr ""
"Completouse a transferencia de ficheiro pero o ficheiro está corrompido"
-#: ../libempathy/empathy-ft-handler.c:1205
+#: ../libempathy/empathy-ft-handler.c:1204
msgid "File transfer not supported by remote contact"
msgstr "O contacto remoto non admite a tranferencia de ficheiros"
-#: ../libempathy/empathy-ft-handler.c:1261
+#: ../libempathy/empathy-ft-handler.c:1260
msgid "The selected file is not a regular file"
msgstr "O ficheiro seleccionado non é un ficheiro regular"
-#: ../libempathy/empathy-ft-handler.c:1270
+#: ../libempathy/empathy-ft-handler.c:1269
msgid "The selected file is empty"
msgstr "O ficheiro seleccionado está baleiro"
-#: ../libempathy/empathy-message.c:415 ../src/empathy-call-observer.c:129
+#: ../libempathy/empathy-message.c:407 ../src/empathy-call-observer.c:116
#, c-format
msgid "Missed call from %s"
msgstr "Chamada perdida de %s"
#. Translators: this is an outgoing call, e.g. 'Called Alice'
-#: ../libempathy/empathy-message.c:419
+#: ../libempathy/empathy-message.c:411
#, c-format
msgid "Called %s"
msgstr "Chamou %s"
-#: ../libempathy/empathy-message.c:422
+#: ../libempathy/empathy-message.c:414
#, c-format
msgid "Call from %s"
msgstr "Chamada de %s"
-#: ../libempathy/empathy-utils.c:233
+#: ../libempathy/empathy-utils.c:232
msgid "Available"
msgstr "Dispoñíbel"
-#: ../libempathy/empathy-utils.c:235
+#: ../libempathy/empathy-utils.c:234
msgid "Busy"
msgstr "Ocupado"
-#: ../libempathy/empathy-utils.c:238
+#: ../libempathy/empathy-utils.c:237
msgid "Away"
msgstr "Ausente"
-#: ../libempathy/empathy-utils.c:240
+#: ../libempathy/empathy-utils.c:239
msgid "Invisible"
msgstr "Invisíbel"
-#: ../libempathy/empathy-utils.c:242
+#: ../libempathy/empathy-utils.c:241
msgid "Offline"
msgstr "Desconectado"
#. translators: presence type is unknown
-#: ../libempathy/empathy-utils.c:245
+#: ../libempathy/empathy-utils.c:244
msgctxt "presence"
msgid "Unknown"
msgstr "Descoñecido"
# rever
-#: ../libempathy/empathy-utils.c:285
+#: ../libempathy/empathy-utils.c:284
msgid "No reason specified"
msgstr "Non se especificou un motivo"
-#: ../libempathy/empathy-utils.c:287 ../libempathy/empathy-utils.c:343
+#: ../libempathy/empathy-utils.c:286 ../libempathy/empathy-utils.c:342
msgid "Status is set to offline"
msgstr "O estado está definido a desconectado"
# rever
-#: ../libempathy/empathy-utils.c:289 ../libempathy/empathy-utils.c:323
+#: ../libempathy/empathy-utils.c:288 ../libempathy/empathy-utils.c:322
#: ../libempathy-gtk/empathy-call-utils.c:47
-#: ../libempathy-gtk/empathy-new-message-dialog.c:81
+#: ../libempathy-gtk/empathy-new-message-dialog.c:80
msgid "Network error"
msgstr "Erro de rede"
-#: ../libempathy/empathy-utils.c:291 ../libempathy/empathy-utils.c:325
+#: ../libempathy/empathy-utils.c:290 ../libempathy/empathy-utils.c:324
msgid "Authentication failed"
msgstr "Fallou a autenticación"
# rever
-#: ../libempathy/empathy-utils.c:293 ../libempathy/empathy-utils.c:327
+#: ../libempathy/empathy-utils.c:292 ../libempathy/empathy-utils.c:326
msgid "Encryption error"
msgstr "Erro de cifrado"
# rever
-#: ../libempathy/empathy-utils.c:295
+#: ../libempathy/empathy-utils.c:294
msgid "Name in use"
msgstr "Nome en uso"
# rever
-#: ../libempathy/empathy-utils.c:297 ../libempathy/empathy-utils.c:329
+#: ../libempathy/empathy-utils.c:296 ../libempathy/empathy-utils.c:328
msgid "Certificate not provided"
msgstr "Non se forneceu o certificado"
-#: ../libempathy/empathy-utils.c:299 ../libempathy/empathy-utils.c:331
+#: ../libempathy/empathy-utils.c:298 ../libempathy/empathy-utils.c:330
msgid "Certificate untrusted"
msgstr "Certificado sen confianza"
# rever
-#: ../libempathy/empathy-utils.c:301 ../libempathy/empathy-utils.c:333
+#: ../libempathy/empathy-utils.c:300 ../libempathy/empathy-utils.c:332
msgid "Certificate expired"
msgstr "O certificado expirou"
# rever
-#: ../libempathy/empathy-utils.c:303 ../libempathy/empathy-utils.c:335
+#: ../libempathy/empathy-utils.c:302 ../libempathy/empathy-utils.c:334
msgid "Certificate not activated"
msgstr "O certificado non está activado"
# rever
-#: ../libempathy/empathy-utils.c:305 ../libempathy/empathy-utils.c:337
+#: ../libempathy/empathy-utils.c:304 ../libempathy/empathy-utils.c:336
msgid "Certificate hostname mismatch"
msgstr "O nome do host do certificado non coincide"
# rever
-#: ../libempathy/empathy-utils.c:307 ../libempathy/empathy-utils.c:339
+#: ../libempathy/empathy-utils.c:306 ../libempathy/empathy-utils.c:338
msgid "Certificate fingerprint mismatch"
msgstr "A impresión dixital do certificado non coincide"
# rever
-#: ../libempathy/empathy-utils.c:309 ../libempathy/empathy-utils.c:341
+#: ../libempathy/empathy-utils.c:308 ../libempathy/empathy-utils.c:340
msgid "Certificate self-signed"
msgstr "Certificado autoasinado"
# rever
-#: ../libempathy/empathy-utils.c:311
+#: ../libempathy/empathy-utils.c:310
msgid "Certificate error"
msgstr "Erro do certificado"
-#: ../libempathy/empathy-utils.c:345
+#: ../libempathy/empathy-utils.c:344
msgid "Encryption is not available"
msgstr "O cifrado non está dispoñíbel"
# rever
-#: ../libempathy/empathy-utils.c:347
+#: ../libempathy/empathy-utils.c:346
msgid "Certificate is invalid"
msgstr "O certificado non é válido"
# rever
-#: ../libempathy/empathy-utils.c:349
+#: ../libempathy/empathy-utils.c:348
msgid "Connection has been refused"
msgstr "Rexeitouse a conexión"
# rever
-#: ../libempathy/empathy-utils.c:351
+#: ../libempathy/empathy-utils.c:350
msgid "Connection can't be established"
msgstr "Non é posíbel estabelecer a conexión"
# rever
-#: ../libempathy/empathy-utils.c:353
+#: ../libempathy/empathy-utils.c:352
msgid "Connection has been lost"
msgstr "Perdeuse a conexión"
-#: ../libempathy/empathy-utils.c:355
+#: ../libempathy/empathy-utils.c:354
msgid "This account is already connected to the server"
msgstr "Esta conta xa está conectada ao servidor"
-#: ../libempathy/empathy-utils.c:357
+#: ../libempathy/empathy-utils.c:356
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"A conexión foi substituída por unha conexión nova empregando o mesmo recurso"
-#: ../libempathy/empathy-utils.c:360
+#: ../libempathy/empathy-utils.c:359
msgid "The account already exists on the server"
msgstr "Esta conta xa existe no servidor"
-#: ../libempathy/empathy-utils.c:362
+#: ../libempathy/empathy-utils.c:361
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Nestes intres o servidor está demasiado ocupado para xestionar a conexión"
# rever
-#: ../libempathy/empathy-utils.c:364
+#: ../libempathy/empathy-utils.c:363
msgid "Certificate has been revoked"
msgstr "O certificado foi revogado"
-#: ../libempathy/empathy-utils.c:366
+#: ../libempathy/empathy-utils.c:365
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"O certificado usa un algoritmo de cifrado inseguro ou cripotograficamente "
"débil"
-#: ../libempathy/empathy-utils.c:369
+#: ../libempathy/empathy-utils.c:368
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@@ -876,29 +878,29 @@ msgstr ""
"certificado do servidor excede os límites impostos pola biblioteca de "
"criptografía"
-#: ../libempathy/empathy-utils.c:373
+#: ../libempathy/empathy-utils.c:372
msgid "Your software is too old"
msgstr "O seu software é demasiado antigo"
-#: ../libempathy/empathy-utils.c:375
+#: ../libempathy/empathy-utils.c:374
msgid "Internal error"
msgstr "Erro interno"
# rever
-#: ../libempathy/empathy-utils.c:534
+#: ../libempathy/empathy-utils.c:533
msgid "People Nearby"
msgstr "Xente cerca"
# rever
-#: ../libempathy/empathy-utils.c:539
+#: ../libempathy/empathy-utils.c:538
msgid "Yahoo! Japan"
msgstr "Yahoo! Japan"
-#: ../libempathy/empathy-utils.c:568
+#: ../libempathy/empathy-utils.c:567
msgid "Google Talk"
msgstr "Google Talk"
-#: ../libempathy/empathy-utils.c:569
+#: ../libempathy/empathy-utils.c:568
msgid "Facebook Chat"
msgstr "Chat de Facebook"
@@ -967,7 +969,7 @@ msgid "All accounts"
msgstr "Todas as contas"
#: ../libempathy-gtk/empathy-account-widget.c:682
-#: ../src/empathy-import-widget.c:336
+#: ../src/empathy-import-widget.c:323
msgid "Account"
msgstr "Conta"
@@ -991,24 +993,24 @@ msgstr "Porto"
msgid "%s:"
msgstr "%s:"
-#: ../libempathy-gtk/empathy-account-widget.c:1398
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
+#: ../libempathy-gtk/empathy-account-widget.c:1424
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
msgid "Username:"
msgstr "Nome de usuario:"
-#: ../libempathy-gtk/empathy-account-widget.c:1710
+#: ../libempathy-gtk/empathy-account-widget.c:1741
msgid "A_pply"
msgstr "_Aplicar"
-#: ../libempathy-gtk/empathy-account-widget.c:1739
+#: ../libempathy-gtk/empathy-account-widget.c:1770
msgid "L_og in"
msgstr "Iniciar _sesión"
-#: ../libempathy-gtk/empathy-account-widget.c:1812
+#: ../libempathy-gtk/empathy-account-widget.c:1840
msgid "This account already exists on the server"
msgstr "Esta conta xa existe no servidor"
-#: ../libempathy-gtk/empathy-account-widget.c:1816
+#: ../libempathy-gtk/empathy-account-widget.c:1844
msgid "Create a new account on the server"
msgstr "Crear unha nova conta no servidor"
@@ -1018,20 +1020,20 @@ msgstr "Crear unha nova conta no servidor"
#. * like: "MyUserName on freenode".
#. * You should reverse the order of these arguments if the
#. * server should come before the login id in your locale.
-#: ../libempathy-gtk/empathy-account-widget.c:2241
+#: ../libempathy-gtk/empathy-account-widget.c:2251
#, c-format
msgid "%1$s on %2$s"
msgstr "%1$s sobre %2$s"
#. To translators: The parameter is the protocol name. The resulting
#. * string will be something like: "Jabber Account"
-#: ../libempathy-gtk/empathy-account-widget.c:2267
+#: ../libempathy-gtk/empathy-account-widget.c:2277
#, c-format
msgid "%s Account"
msgstr "Conta %s"
# rever
-#: ../libempathy-gtk/empathy-account-widget.c:2271
+#: ../libempathy-gtk/empathy-account-widget.c:2281
msgid "New account"
msgstr "Conta nova"
@@ -1080,7 +1082,7 @@ msgstr "_Porto:"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:21
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:6
-#: ../src/empathy-new-chatroom-dialog.ui.h:6
+#: ../src/empathy-new-chatroom-dialog.ui.h:5
msgid "_Server:"
msgstr "_Servidor:"
@@ -1088,11 +1090,11 @@ msgstr "_Servidor:"
#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1
#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
msgid "Advanced"
msgstr "Avanzadas"
@@ -1110,7 +1112,7 @@ msgstr "Cal e o seu contrasinal para AIM?"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:10
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "Remember Password"
msgstr "Lembrar o contrasinal"
@@ -1156,36 +1158,32 @@ msgstr "Cal é o seu UIN para ICQ?"
msgid "What is your ICQ password?"
msgstr "Cal é o seu contrasinal pra ICQ?"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:206
-#: ../libempathy-gtk/empathy-account-widget-sip.c:239
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "Auto"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:209
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:212
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:215
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:244
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "Rexistrador"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:249
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "Opcións"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:252
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "Ningún"
@@ -1215,19 +1213,21 @@ msgstr "Engadir…"
msgid "Remove"
msgstr "Eliminar"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
+#. Translators: tooltip on a 'Go Up' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
msgid "Up"
msgstr "Arriba"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
+#. Translators: tooltip on a 'Go Down' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
msgid "Down"
msgstr "Abaixo"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
msgid "Servers"
msgstr "Servidores"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
msgid ""
"Most IRC servers don't need a password, so if you're not sure, don't enter a "
"password."
@@ -1235,28 +1235,28 @@ msgstr ""
"A maioría dos servidores IRC non precisan contrasinal, polo que se non está "
"seguro non escriba un contrasinal."
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
msgid "Nickname:"
msgstr "Alcume:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
msgid "Password:"
msgstr "Contrasinal:"
# rever
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
msgid "Quit message:"
msgstr "Mensaxe de saída:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
msgid "Real name:"
msgstr "Nome real:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:18
msgid "Which IRC network?"
msgstr "Que rede IRC?"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:19
msgid "What is your IRC nickname?"
msgstr "Cal é o seu alcume de IRC?"
@@ -1452,11 +1452,15 @@ msgstr "Ignorar erros TLS"
msgid "Port:"
msgstr "Porto:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+msgid "Local IP Address:"
+msgstr "Enderezo IP local:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP login ID?"
msgstr "Cal é o seu ID de inicio de sesión SIP?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP account password?"
msgstr "Cal é o contrasinal da súa conta SIP?"
@@ -1551,40 +1555,39 @@ msgstr "Este protocolo non admite as chamadas de emerxencia"
msgid "You don't have enough credit in order to place this call"
msgstr "Non ten crédito dabondo para facer esta chamada"
-#: ../libempathy-gtk/empathy-chat.c:729
+#: ../libempathy-gtk/empathy-chat.c:728
msgid "Failed to open private chat"
msgstr "Produciuse un fallo ao abrir un chat privado"
-#: ../libempathy-gtk/empathy-chat.c:787
+#: ../libempathy-gtk/empathy-chat.c:786
msgid "Topic not supported on this conversation"
msgstr "O asunto non é ocmpatíbel nesta conversa"
-#: ../libempathy-gtk/empathy-chat.c:793
+#: ../libempathy-gtk/empathy-chat.c:792
msgid "You are not allowed to change the topic"
msgstr "Non se lle permite cambiar o asunto"
-#: ../libempathy-gtk/empathy-chat.c:992
-#, c-format
-msgid "“%s†is not a valid contact ID"
-msgstr "«%s» non é un ID de contacto válido"
+#: ../libempathy-gtk/empathy-chat.c:968
+msgid "Invalid contact ID"
+msgstr "ID de contacto non válido"
-#: ../libempathy-gtk/empathy-chat.c:1087
+#: ../libempathy-gtk/empathy-chat.c:1056
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear, limpa todas as mensaxes da conversa actual"
-#: ../libempathy-gtk/empathy-chat.c:1090
+#: ../libempathy-gtk/empathy-chat.c:1059
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <topic>, estabelece o asunto da conversa actual"
-#: ../libempathy-gtk/empathy-chat.c:1093
+#: ../libempathy-gtk/empathy-chat.c:1062
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <chatroom id>, unirse a unha nova sala de conversa"
-#: ../libempathy-gtk/empathy-chat.c:1096
+#: ../libempathy-gtk/empathy-chat.c:1065
msgid "/j <chat room ID>: join a new chat room"
msgstr "/j <chatroom id>, unirse a unha nova sala de conversa"
-#: ../libempathy-gtk/empathy-chat.c:1100
+#: ../libempathy-gtk/empathy-chat.c:1069
msgid ""
"/part [<chat room ID>] [<reason>]: leave the chat room, by default the "
"current one"
@@ -1592,23 +1595,23 @@ msgstr ""
"/part [<ID da sala de conversa>] [<razón>]: abandonar a sala de char, por "
"omisión a actual"
-#: ../libempathy-gtk/empathy-chat.c:1104
+#: ../libempathy-gtk/empathy-chat.c:1073
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <id do contacto> [<mensaxe>], abre unha conversa privada"
-#: ../libempathy-gtk/empathy-chat.c:1107
+#: ../libempathy-gtk/empathy-chat.c:1076
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <id do contacto> <mensaxe>, abre unha conversa privada"
-#: ../libempathy-gtk/empathy-chat.c:1110
+#: ../libempathy-gtk/empathy-chat.c:1079
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <alcume>, cambia o seu nome de usuario no servidor actual"
-#: ../libempathy-gtk/empathy-chat.c:1113
+#: ../libempathy-gtk/empathy-chat.c:1082
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <mensaxe>, envía unha mensaxe ACTION á conversa actual"
-#: ../libempathy-gtk/empathy-chat.c:1116
+#: ../libempathy-gtk/empathy-chat.c:1085
msgid ""
"/say <message>: send <message> to the current conversation. This is used to "
"send a message starting with a '/'. For example: \"/say /join is used to "
@@ -1618,11 +1621,11 @@ msgstr ""
"unha mensaxe que comeza cunha '/'. Por exemplo: \"/say /join úsase para "
"unirse a unha nova sala de conversa\""
-#: ../libempathy-gtk/empathy-chat.c:1121
+#: ../libempathy-gtk/empathy-chat.c:1090
msgid "/whois <contact ID>: display information about a contact"
msgstr "/whois <ID do contacto>: mostra información sobre un contacto"
-#: ../libempathy-gtk/empathy-chat.c:1124
+#: ../libempathy-gtk/empathy-chat.c:1093
msgid ""
"/help [<command>]: show all supported commands. If <command> is defined, "
"show its usage."
@@ -1630,134 +1633,134 @@ msgstr ""
"/help [<orde>], mostra todas as ordes admitidas. Se <orde> está definida, "
"mostra o seu uso."
-#: ../libempathy-gtk/empathy-chat.c:1143
+#: ../libempathy-gtk/empathy-chat.c:1112
#, c-format
msgid "Usage: %s"
msgstr "Uso: %s"
-#: ../libempathy-gtk/empathy-chat.c:1188
+#: ../libempathy-gtk/empathy-chat.c:1157
msgid "Unknown command"
msgstr "Orde descoñecida"
-#: ../libempathy-gtk/empathy-chat.c:1314
+#: ../libempathy-gtk/empathy-chat.c:1283
msgid "Unknown command; see /help for the available commands"
msgstr "Orde descoñecida, vexa /help para obter as ordes dispoñíbeis"
-#: ../libempathy-gtk/empathy-chat.c:1565
+#: ../libempathy-gtk/empathy-chat.c:1540
msgid "insufficient balance to send message"
msgstr "non ten balance suficiente para enviar a mensaxe"
# rever
-#: ../libempathy-gtk/empathy-chat.c:1569 ../libempathy-gtk/empathy-chat.c:1583
-#: ../libempathy-gtk/empathy-chat.c:1646
+#: ../libempathy-gtk/empathy-chat.c:1544 ../libempathy-gtk/empathy-chat.c:1558
+#: ../libempathy-gtk/empathy-chat.c:1621
#, c-format
msgid "Error sending message '%s': %s"
msgstr "Produciuse un erro ao enviar a mensaxe '%s': %s"
# rever
-#: ../libempathy-gtk/empathy-chat.c:1571 ../libempathy-gtk/empathy-chat.c:1588
-#: ../libempathy-gtk/empathy-chat.c:1650
+#: ../libempathy-gtk/empathy-chat.c:1546 ../libempathy-gtk/empathy-chat.c:1563
+#: ../libempathy-gtk/empathy-chat.c:1625
#, c-format
msgid "Error sending message: %s"
msgstr "Produciuse un erro ao enviar a mensaxe: %s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1577
+#: ../libempathy-gtk/empathy-chat.c:1552
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr ""
"non ten balance dabondo para enviar a mensaxe <a href='%s'>Recargar</a>."
-#: ../libempathy-gtk/empathy-chat.c:1617
+#: ../libempathy-gtk/empathy-chat.c:1592
msgid "not capable"
msgstr "non é posíbel"
-#: ../libempathy-gtk/empathy-chat.c:1624
+#: ../libempathy-gtk/empathy-chat.c:1599
msgid "offline"
msgstr "desconectado"
-#: ../libempathy-gtk/empathy-chat.c:1627
+#: ../libempathy-gtk/empathy-chat.c:1602
msgid "invalid contact"
msgstr "contacto non válido"
-#: ../libempathy-gtk/empathy-chat.c:1630
+#: ../libempathy-gtk/empathy-chat.c:1605
msgid "permission denied"
msgstr "permiso denegado"
# rever
-#: ../libempathy-gtk/empathy-chat.c:1633
+#: ../libempathy-gtk/empathy-chat.c:1608
msgid "too long message"
msgstr "mensaxe é demasiado longa"
-#: ../libempathy-gtk/empathy-chat.c:1636
+#: ../libempathy-gtk/empathy-chat.c:1611
msgid "not implemented"
msgstr "non implementado"
-#: ../libempathy-gtk/empathy-chat.c:1640
+#: ../libempathy-gtk/empathy-chat.c:1615
msgid "unknown"
msgstr "descoñecido"
-#: ../libempathy-gtk/empathy-chat.c:1707 ../src/empathy-chat-window.c:920
+#: ../libempathy-gtk/empathy-chat.c:1682 ../src/empathy-chat-window.c:918
msgid "Topic:"
msgstr "Asunto:"
# rever
-#: ../libempathy-gtk/empathy-chat.c:1722
+#: ../libempathy-gtk/empathy-chat.c:1697
#, c-format
msgid "Topic set to: %s"
msgstr "Cambiouse o asunto a: %s"
# rever
-#: ../libempathy-gtk/empathy-chat.c:1724
+#: ../libempathy-gtk/empathy-chat.c:1699
#, c-format
msgid "Topic set by %s to: %s"
msgstr "Tema estabelecido por %s a: %s"
# rever
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1729
+#: ../libempathy-gtk/empathy-chat.c:1704
msgid "No topic defined"
msgstr "Non se definiu o asunto"
-#: ../libempathy-gtk/empathy-chat.c:2245
+#: ../libempathy-gtk/empathy-chat.c:2220
msgid "(No Suggestions)"
msgstr "(Sen suxestións)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2313
+#: ../libempathy-gtk/empathy-chat.c:2288
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "Engadir «%s» ao dicionario"
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2350
+#: ../libempathy-gtk/empathy-chat.c:2325
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "Engadir «%s» ao dicionario de %s"
-#: ../libempathy-gtk/empathy-chat.c:2420
+#: ../libempathy-gtk/empathy-chat.c:2395
msgid "Insert Smiley"
msgstr "Inserir unha emoticona"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2438
+#: ../libempathy-gtk/empathy-chat.c:2413
#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "_Enviar"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2495
+#: ../libempathy-gtk/empathy-chat.c:2470
msgid "_Spelling Suggestions"
msgstr "Suxestións de _ortografía"
-#: ../libempathy-gtk/empathy-chat.c:2584
+#: ../libempathy-gtk/empathy-chat.c:2559
msgid "Failed to retrieve recent logs"
msgstr "Produciuse un fallo ao obter os rexistros recentes"
# rever
-#: ../libempathy-gtk/empathy-chat.c:2723
+#: ../libempathy-gtk/empathy-chat.c:2698
#, c-format
msgid "%s has disconnected"
msgstr "%s desconectou"
@@ -1765,12 +1768,12 @@ msgstr "%s desconectou"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2730
+#: ../libempathy-gtk/empathy-chat.c:2705
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "%1$s foi expulsado por %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2733
+#: ../libempathy-gtk/empathy-chat.c:2708
#, c-format
msgid "%s was kicked"
msgstr "%s foi expulsado"
@@ -1778,17 +1781,17 @@ msgstr "%s foi expulsado"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2741
+#: ../libempathy-gtk/empathy-chat.c:2716
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "%1$s foi vetado por %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2744
+#: ../libempathy-gtk/empathy-chat.c:2719
#, c-format
msgid "%s was banned"
msgstr "%s foi excluído"
-#: ../libempathy-gtk/empathy-chat.c:2748
+#: ../libempathy-gtk/empathy-chat.c:2723
#, c-format
msgid "%s has left the room"
msgstr "%s deixou a sala"
@@ -1798,18 +1801,18 @@ msgstr "%s deixou a sala"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2757
+#: ../libempathy-gtk/empathy-chat.c:2732
#, c-format
msgid " (%s)"
msgstr " (%s)"
# rever
-#: ../libempathy-gtk/empathy-chat.c:2782
+#: ../libempathy-gtk/empathy-chat.c:2757
#, c-format
msgid "%s has joined the room"
msgstr "%s uniuse á sala"
-#: ../libempathy-gtk/empathy-chat.c:2807
+#: ../libempathy-gtk/empathy-chat.c:2782
#, c-format
msgid "%s is now known as %s"
msgstr "%s agora é coñecido como %s"
@@ -1817,55 +1820,55 @@ msgstr "%s agora é coñecido como %s"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2994
-#: ../src/empathy-streamed-media-window.c:1888
-#: ../src/empathy-event-manager.c:1279 ../src/empathy-call-window.c:1502
-#: ../src/empathy-call-window.c:1552 ../src/empathy-call-window.c:2590
+#: ../libempathy-gtk/empathy-chat.c:2969 ../src/empathy-event-manager.c:1167
+#: ../src/empathy-call-window.c:1463 ../src/empathy-call-window.c:1513
+#: ../src/empathy-call-window.c:2560
msgid "Disconnected"
msgstr "Desconectado"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3658
+#: ../libempathy-gtk/empathy-chat.c:3633
msgid "Would you like to store this password?"
msgstr "Desexa gardar este contrasinal?"
-#: ../libempathy-gtk/empathy-chat.c:3664
+#: ../libempathy-gtk/empathy-chat.c:3639
msgid "Remember"
msgstr "Lembrar"
-#: ../libempathy-gtk/empathy-chat.c:3674
+#: ../libempathy-gtk/empathy-chat.c:3649
msgid "Not now"
msgstr "Agora non"
-#: ../libempathy-gtk/empathy-chat.c:3718
+#: ../libempathy-gtk/empathy-chat.c:3693
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "Reintentar"
-#: ../libempathy-gtk/empathy-chat.c:3722
+#: ../libempathy-gtk/empathy-chat.c:3697
msgid "Wrong password; please try again:"
msgstr "O contrasinal é incorrecto, ténteo de novo:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3852
+#: ../libempathy-gtk/empathy-chat.c:3827
msgid "This room is protected by a password:"
msgstr "Esta sala está protexida por un contrasinal:"
-#: ../libempathy-gtk/empathy-chat.c:3879
+#: ../libempathy-gtk/empathy-chat.c:3854
+#: ../src/empathy-new-chatroom-dialog.c:780
msgid "Join"
msgstr "Unirse"
-#: ../libempathy-gtk/empathy-chat.c:4071 ../src/empathy-event-manager.c:1300
+#: ../libempathy-gtk/empathy-chat.c:4046 ../src/empathy-event-manager.c:1188
msgid "Connected"
msgstr "Conectado"
-#: ../libempathy-gtk/empathy-chat.c:4126
+#: ../libempathy-gtk/empathy-chat.c:4101
msgid "Conversation"
msgstr "Conversa"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4131
+#: ../libempathy-gtk/empathy-chat.c:4106
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
@@ -1891,17 +1894,17 @@ msgid "Could not block contact"
msgstr "Non foi posíbel bloquear o contacto"
# rever
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:610
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:611
msgid "Edit Blocked Contacts"
msgstr "Editar os contactos bloqueados"
#. Account and Identifier
#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:506
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:524
#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
#: ../libempathy-gtk/empathy-individual-widget.c:1474
#: ../src/empathy-chatrooms-window.ui.h:2
-#: ../src/empathy-new-chatroom-dialog.ui.h:7
+#: ../src/empathy-new-chatroom-dialog.ui.h:6
msgid "Account:"
msgstr "Conta:"
@@ -1928,30 +1931,30 @@ msgstr "_Abrir a ligazón"
msgid "%A %B %d %Y"
msgstr "%A, %d de %B de %Y"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:326
+#: ../libempathy-gtk/empathy-contact-dialogs.c:325
#: ../libempathy-gtk/empathy-individual-dialogs.c:118
msgid "New Contact"
msgstr "Contacto novo"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:395
+#: ../libempathy-gtk/empathy-contact-dialogs.c:394
#: ../libempathy-gtk/empathy-individual-dialogs.c:197
#, c-format
msgid "Block %s?"
msgstr "Desexa bloquear a %s?"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:400
+#: ../libempathy-gtk/empathy-contact-dialogs.c:399
#: ../libempathy-gtk/empathy-individual-dialogs.c:252
#, c-format
msgid "Are you sure you want to block '%s' from contacting you again?"
msgstr ""
"Ten certeza de bloquear a «%s» para que non volva a contactar con vostede?"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:405
+#: ../libempathy-gtk/empathy-contact-dialogs.c:404
#: ../libempathy-gtk/empathy-individual-dialogs.c:274
msgid "_Block"
msgstr "_Bloquear"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:423
+#: ../libempathy-gtk/empathy-contact-dialogs.c:422
#: ../libempathy-gtk/empathy-individual-dialogs.c:283
msgid "_Report this contact as abusive"
msgid_plural "_Report these contacts as abusive"
@@ -1974,197 +1977,197 @@ msgstr "Decidir máis _adiante"
# rever
#. Title
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:499
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:517
msgid "Search contacts"
msgstr "Buscar contactos"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:529
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:547
msgid "Search: "
msgstr "Buscar:"
# rever
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:587
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
msgid "_Add Contact"
msgstr "_Engadir contacto"
# rever
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:623
msgid "No contacts found"
msgstr "Non se atoparon contactos"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:621
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:639
msgid "Your message introducing yourself:"
msgstr "A súa mensaxe de presentación:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:629
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:647
msgid "Please let me see when you're online. Thanks!"
msgstr "Permítame ver cando está en liña. Grazas."
-#: ../libempathy-gtk/empathy-contact-widget.c:567
+#: ../libempathy-gtk/empathy-contact-widget.c:566
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "Canles:"
-#: ../libempathy-gtk/empathy-contact-widget.c:747
+#: ../libempathy-gtk/empathy-contact-widget.c:746
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "Código ISO de país:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:748
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "País:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:750
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "Rexión:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:752
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "Cidade:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:754
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "Ãrea:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:756
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "Código postal:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:758
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "Rúa:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:760
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "Edificio:"
# rever
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:762
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "_Andar:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:764
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "Sala:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:766
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "Texto:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:768
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "Descrición:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:770
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "URI:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:772
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "Nivel de precisión:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:774
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "Erro:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:776
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "Erro vertical (metros):"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:778
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "Erro horizontal (metros):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:780
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "Velocidade:"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:782
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "Orientación:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:784
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "Velocidade de incremento:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:786
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "Última actualización:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:788
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "Lonxitude:"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:790
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "Latitude:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:792
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "Altitude:"
-#: ../libempathy-gtk/empathy-contact-widget.c:846
-#: ../libempathy-gtk/empathy-contact-widget.c:861
+#: ../libempathy-gtk/empathy-contact-widget.c:845
+#: ../libempathy-gtk/empathy-contact-widget.c:860
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
-#: ../src/empathy-preferences.ui.h:35
+#: ../src/empathy-preferences.ui.h:42
msgid "Location"
msgstr "Localización"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:862
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s, %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:915
+#: ../libempathy-gtk/empathy-contact-widget.c:914
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "%B %e, %Y de %R UTC"
# rever
-#: ../libempathy-gtk/empathy-contact-widget.c:997
+#: ../libempathy-gtk/empathy-contact-widget.c:996
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "Gardar o avatar"
# rever
-#: ../libempathy-gtk/empathy-contact-widget.c:1053
+#: ../libempathy-gtk/empathy-contact-widget.c:1052
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "Non foi posíbel gardar o avatar"
# rever
-#: ../libempathy-gtk/empathy-contact-widget.c:1444
+#: ../libempathy-gtk/empathy-contact-widget.c:1454
msgid "Personal Details"
msgstr "Detalles persoais"
# rever
-#: ../libempathy-gtk/empathy-contact-widget.c:1447
+#: ../libempathy-gtk/empathy-contact-widget.c:1457
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
@@ -2276,11 +2279,11 @@ msgstr "Versión:"
msgid "Client:"
msgstr "Cliente:"
-#: ../libempathy-gtk/empathy-groups-widget.c:331
+#: ../libempathy-gtk/empathy-groups-widget.c:327
msgid "Groups"
msgstr "Grupos"
-#: ../libempathy-gtk/empathy-groups-widget.c:343
+#: ../libempathy-gtk/empathy-groups-widget.c:339
msgid ""
"Select the groups you want this contact to appear in. Note that you can "
"select more than one group or no groups."
@@ -2288,17 +2291,16 @@ msgstr ""
"Seleccione os grupos en que quere que aparezan estes contactos. Note que "
"pode seleccionar máis dun grupo ou ningún."
-#: ../libempathy-gtk/empathy-groups-widget.c:362
+#: ../libempathy-gtk/empathy-groups-widget.c:358
msgid "_Add Group"
msgstr "Eng_adir grupo"
-#: ../libempathy-gtk/empathy-groups-widget.c:397
+#: ../libempathy-gtk/empathy-groups-widget.c:393
msgctxt "verb in a column header displaying group names"
msgid "Select"
msgstr "Seleccionar"
-#: ../libempathy-gtk/empathy-groups-widget.c:407
-#: ../src/empathy-roster-window.c:1970
+#: ../libempathy-gtk/empathy-groups-widget.c:403
msgid "Group"
msgstr "Grupo"
@@ -2327,147 +2329,147 @@ msgstr "Contactos ligados"
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:173
+#: ../libempathy-gtk/empathy-individual-menu.c:172
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:345
+#: ../libempathy-gtk/empathy-individual-menu.c:344
msgid "Select account to use to place the call"
msgstr "Seleccione a conta a usar para realizar a chamada"
-#. translators: Call is a noun. This string is used in the window
-#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:349
+#: ../libempathy-gtk/empathy-individual-menu.c:348
#: ../libempathy-gtk/empathy-log-window.ui.h:6
-#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:18
msgid "Call"
msgstr "Chamar"
-#: ../libempathy-gtk/empathy-individual-menu.c:414
+#: ../libempathy-gtk/empathy-individual-menu.c:413
msgid "Mobile"
msgstr "Móbil"
-#: ../libempathy-gtk/empathy-individual-menu.c:416
+#: ../libempathy-gtk/empathy-individual-menu.c:415
msgid "Work"
msgstr "Traballo"
-#: ../libempathy-gtk/empathy-individual-menu.c:418
+#: ../libempathy-gtk/empathy-individual-menu.c:417
msgid "HOME"
msgstr "Casa"
# rever
-#: ../libempathy-gtk/empathy-individual-menu.c:659
+#: ../libempathy-gtk/empathy-individual-menu.c:658
msgid "_Block Contact"
msgstr "_Bloquear contacto"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1018
-#: ../libempathy-gtk/empathy-new-message-dialog.c:319
-#: ../src/empathy-roster-window-menubar.ui.h:1
+#: ../libempathy-gtk/empathy-individual-menu.c:1017
+#: ../libempathy-gtk/empathy-new-message-dialog.c:318
msgid "_Chat"
msgstr "_Conversa"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1053
-#: ../libempathy-gtk/empathy-new-message-dialog.c:313
+#: ../libempathy-gtk/empathy-individual-menu.c:1052
+#: ../libempathy-gtk/empathy-new-message-dialog.c:312
msgid "_SMS"
msgstr "_SMS"
-#: ../libempathy-gtk/empathy-individual-menu.c:1086
+#: ../libempathy-gtk/empathy-individual-menu.c:1085
msgctxt "menu item"
msgid "_Audio Call"
msgstr "_Audiochamada"
-#: ../libempathy-gtk/empathy-individual-menu.c:1119
+#: ../libempathy-gtk/empathy-individual-menu.c:1118
msgctxt "menu item"
msgid "_Video Call"
msgstr "_Videochamada"
# rever
-#: ../libempathy-gtk/empathy-individual-menu.c:1160
-#: ../src/empathy-roster-window-menubar.ui.h:4
+#: ../libempathy-gtk/empathy-individual-menu.c:1159
+#: ../src/empathy-roster-window-menubar.ui.h:11
msgid "_Previous Conversations"
msgstr "Conversas _previas"
-#: ../libempathy-gtk/empathy-individual-menu.c:1189
+#: ../libempathy-gtk/empathy-individual-menu.c:1188
msgid "Send File"
msgstr "Enviar ficheiro"
-#: ../libempathy-gtk/empathy-individual-menu.c:1219
+#: ../libempathy-gtk/empathy-individual-menu.c:1218
msgid "Share My Desktop"
msgstr "Compartir o meu escritorio"
# rever
-#: ../libempathy-gtk/empathy-individual-menu.c:1245
+#: ../libempathy-gtk/empathy-individual-menu.c:1244
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "Favorito"
-#: ../libempathy-gtk/empathy-individual-menu.c:1264
+#: ../libempathy-gtk/empathy-individual-menu.c:1263
msgid "gnome-contacts not installed"
msgstr "gnome-contacts non está instalado"
-#: ../libempathy-gtk/empathy-individual-menu.c:1267
+#: ../libempathy-gtk/empathy-individual-menu.c:1266
msgid "Please install gnome-contacts to access contacts details."
msgstr ""
"Instale o programa gnome-contacts para acceder aos detalles dos contactos"
-#: ../libempathy-gtk/empathy-individual-menu.c:1398
+#: ../libempathy-gtk/empathy-individual-menu.c:1397
msgid "Infor_mation"
msgstr "Infor_mación"
-#: ../libempathy-gtk/empathy-individual-menu.c:1447
+#: ../libempathy-gtk/empathy-individual-menu.c:1446
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "_Editar"
# rever
-#: ../libempathy-gtk/empathy-individual-menu.c:1564
-#: ../src/empathy-chat-window.c:1192
+#. send invitation
+#: ../libempathy-gtk/empathy-individual-menu.c:1562
+#: ../src/empathy-chat-window.c:1189
msgid "Inviting you to this room"
msgstr "Invítao a vostede a esta sala"
# rever
-#: ../libempathy-gtk/empathy-individual-menu.c:1610
+#: ../libempathy-gtk/empathy-individual-menu.c:1608
msgid "_Invite to Chat Room"
msgstr "Conv_idar a sala de conversa"
# rever
-#: ../libempathy-gtk/empathy-individual-menu.c:1806
-#: ../src/empathy-roster-window-menubar.ui.h:5
+#: ../libempathy-gtk/empathy-individual-menu.c:1804
msgid "_Add Contact…"
msgstr "Eng_adir un contacto…"
-#: ../libempathy-gtk/empathy-individual-view.c:2304
+#: ../libempathy-gtk/empathy-individual-view.c:2364
msgid "Delete and _Block"
msgstr "Eliminar e _bloquear"
# rever
-#: ../libempathy-gtk/empathy-individual-view.c:2339
+#: ../libempathy-gtk/empathy-individual-view.c:2399
#, c-format
msgid "Do you really want to remove the group '%s'?"
msgstr "Está seguro de que quere eliminar o grupo '%s'?"
# rever
-#: ../libempathy-gtk/empathy-individual-view.c:2342
+#: ../libempathy-gtk/empathy-individual-view.c:2402
msgid "Removing group"
msgstr "Eliminando o grupo"
+#: ../libempathy-gtk/empathy-individual-view.c:2470
+msgid "Re_name"
+msgstr "Re_nomear"
+
#. Remove
-#: ../libempathy-gtk/empathy-individual-view.c:2397
-#: ../libempathy-gtk/empathy-individual-view.c:2601
+#: ../libempathy-gtk/empathy-individual-view.c:2479
+#: ../libempathy-gtk/empathy-individual-view.c:2683
msgid "_Remove"
msgstr "_Eliminar"
# rever
-#: ../libempathy-gtk/empathy-individual-view.c:2474
+#: ../libempathy-gtk/empathy-individual-view.c:2556
#, c-format
msgid "Do you really want to remove the contact '%s'?"
msgstr "Está seguro de quere eliminar o contacto '%s'?"
-#: ../libempathy-gtk/empathy-individual-view.c:2483
+#: ../libempathy-gtk/empathy-individual-view.c:2565
#, c-format
msgid ""
"Do you really want to remove the linked contact '%s'? Note that this will "
@@ -2476,7 +2478,7 @@ msgstr ""
"Desexa eliminar o contacto ligado %s? Teña en conta que eliminaranse tamén "
"todos os contactos que forman este contacto ligado."
-#: ../libempathy-gtk/empathy-individual-view.c:2495
+#: ../libempathy-gtk/empathy-individual-view.c:2577
msgid "Removing contact"
msgstr "Eliminando o contacto"
@@ -2521,137 +2523,137 @@ msgstr "servidor novo"
msgid "SSL"
msgstr "SSL"
-#: ../libempathy-gtk/empathy-log-window.c:620
+#: ../libempathy-gtk/empathy-log-window.c:617
msgid "History"
msgstr "Historial"
-#: ../libempathy-gtk/empathy-log-window.c:675
+#: ../libempathy-gtk/empathy-log-window.c:672
msgid "Show"
msgstr "Mostrar"
-#: ../libempathy-gtk/empathy-log-window.c:697
+#: ../libempathy-gtk/empathy-log-window.c:694
msgid "Search"
msgstr "Buscar"
-#: ../libempathy-gtk/empathy-log-window.c:1148
+#: ../libempathy-gtk/empathy-log-window.c:1145
#, c-format
msgid "Chat in %s"
msgstr "Conversar en %s"
-#: ../libempathy-gtk/empathy-log-window.c:1150
+#: ../libempathy-gtk/empathy-log-window.c:1147
#, c-format
msgid "Chat with %s"
msgstr "Conversa con %s"
-#: ../libempathy-gtk/empathy-log-window.c:1200
-#: ../libempathy-gtk/empathy-log-window.c:1347
+#: ../libempathy-gtk/empathy-log-window.c:1197
+#: ../libempathy-gtk/empathy-log-window.c:1341
msgctxt "A date with the time"
msgid "%A, %e %B %Y %X"
msgstr "%A, %e de %B de %Y ás %X"
#. Translators: this is an emote: '* Danielle waves'
-#: ../libempathy-gtk/empathy-log-window.c:1289
+#: ../libempathy-gtk/empathy-log-window.c:1284
#, c-format
msgid "<i>* %s %s</i>"
msgstr "<i>* %s %s</i>"
#. Translators: this is a message: 'Danielle: hello'
#. * The string in bold is the sender's name
-#: ../libempathy-gtk/empathy-log-window.c:1295
+#: ../libempathy-gtk/empathy-log-window.c:1290
#, c-format
msgid "<b>%s:</b> %s"
msgstr "<b>%s:</b> %s"
-#: ../libempathy-gtk/empathy-log-window.c:1371
+#: ../libempathy-gtk/empathy-log-window.c:1365
#, c-format
msgid "%s second"
msgid_plural "%s seconds"
msgstr[0] "%s segundo"
msgstr[1] "%s segundos"
-#: ../libempathy-gtk/empathy-log-window.c:1378
+#: ../libempathy-gtk/empathy-log-window.c:1372
#, c-format
msgid "%s minute"
msgid_plural "%s minutes"
msgstr[0] "%s minuto"
msgstr[1] "%s minutos"
-#: ../libempathy-gtk/empathy-log-window.c:1386
+#: ../libempathy-gtk/empathy-log-window.c:1380
#, c-format
msgid "Call took %s, ended at %s"
msgstr "A chamada levou %s, rematou ás %s"
-#: ../libempathy-gtk/empathy-log-window.c:1720
+#: ../libempathy-gtk/empathy-log-window.c:1711
msgid "Today"
msgstr "Hoxe"
-#: ../libempathy-gtk/empathy-log-window.c:1724
+#: ../libempathy-gtk/empathy-log-window.c:1715
msgid "Yesterday"
msgstr "Mañá"
#. Translators: A date such as '23 May 2010' (strftime format)
-#: ../libempathy-gtk/empathy-log-window.c:1739
+#: ../libempathy-gtk/empathy-log-window.c:1730
msgid "%e %B %Y"
msgstr "%e de %B de %Y"
-#: ../libempathy-gtk/empathy-log-window.c:1827
-#: ../libempathy-gtk/empathy-log-window.c:3487
+#: ../libempathy-gtk/empathy-log-window.c:1834
+#: ../libempathy-gtk/empathy-log-window.c:3457
msgid "Anytime"
msgstr "Calquera momento"
-#: ../libempathy-gtk/empathy-log-window.c:1916
-#: ../libempathy-gtk/empathy-log-window.c:2400
+#: ../libempathy-gtk/empathy-log-window.c:1933
+#: ../libempathy-gtk/empathy-log-window.c:2392
msgid "Anyone"
msgstr "Calquera persoa"
-#: ../libempathy-gtk/empathy-log-window.c:2713
+#: ../libempathy-gtk/empathy-log-window.c:2705
msgid "Who"
msgstr "Quen"
-#: ../libempathy-gtk/empathy-log-window.c:2922
+#: ../libempathy-gtk/empathy-log-window.c:2914
msgid "When"
msgstr "Cando"
-#: ../libempathy-gtk/empathy-log-window.c:3038
+#: ../libempathy-gtk/empathy-log-window.c:3032
msgid "Anything"
msgstr "Calquera cousa"
-#: ../libempathy-gtk/empathy-log-window.c:3040
+#: ../libempathy-gtk/empathy-log-window.c:3034
msgid "Text chats"
msgstr "Conversas de texto"
-#: ../libempathy-gtk/empathy-log-window.c:3042
-#: ../src/empathy-preferences.ui.h:25
+#: ../libempathy-gtk/empathy-log-window.c:3035
+#: ../src/empathy-preferences.ui.h:32
msgid "Calls"
msgstr "Chamadas"
# rever
-#: ../libempathy-gtk/empathy-log-window.c:3047
+#: ../libempathy-gtk/empathy-log-window.c:3039
msgid "Incoming calls"
msgstr "Chamadas entrantes"
# rever
-#: ../libempathy-gtk/empathy-log-window.c:3048
+#: ../libempathy-gtk/empathy-log-window.c:3040
msgid "Outgoing calls"
msgstr "Chamadas de voz saíntes"
-#: ../libempathy-gtk/empathy-log-window.c:3049
+#: ../libempathy-gtk/empathy-log-window.c:3041
msgid "Missed calls"
msgstr "Chamadas perdidas de %s"
-#: ../libempathy-gtk/empathy-log-window.c:3071
+#: ../libempathy-gtk/empathy-log-window.c:3061
msgid "What"
msgstr "Que"
-#: ../libempathy-gtk/empathy-log-window.c:3780
+#: ../libempathy-gtk/empathy-log-window.c:3750
msgid "Are you sure you want to delete all logs of previous conversations?"
msgstr "Ten certeza de eliminar tódolos rexistros das conversas anteriores?"
-#: ../libempathy-gtk/empathy-log-window.c:3784
+#: ../libempathy-gtk/empathy-log-window.c:3754
msgid "Clear All"
msgstr "Limpar todo"
-#: ../libempathy-gtk/empathy-log-window.c:3791
+#: ../libempathy-gtk/empathy-log-window.c:3761
msgid "Delete from:"
msgstr "Eliminar desde:"
@@ -2661,7 +2663,6 @@ msgstr "_Ficheiro"
#: ../libempathy-gtk/empathy-log-window.ui.h:2
#: ../src/empathy-call-window.ui.h:2 ../src/empathy-chat-window.ui.h:9
-#: ../src/empathy-roster-window-menubar.ui.h:12
msgid "_Edit"
msgstr "_Editar"
@@ -2674,13 +2675,12 @@ msgid "Profile"
msgstr "Perfíl"
#: ../libempathy-gtk/empathy-log-window.ui.h:5
-#: ../src/empathy-chat-window.ui.h:19
+#: ../src/empathy-chat-window.ui.h:19 ../src/empathy-preferences.ui.h:14
msgid "Chat"
msgstr "Conversa"
#: ../libempathy-gtk/empathy-log-window.ui.h:7
#: ../src/empathy-call-window.ui.h:26
-#: ../src/empathy-streamed-media-window.ui.h:19
msgid "Video"
msgstr "V_ídeo"
@@ -2693,82 +2693,82 @@ msgid "<span size=\"x-large\">Loading...</span>"
msgstr "<span size=\"x-large\">Cargando…</span>"
# rever
-#: ../libempathy-gtk/empathy-new-message-dialog.c:83
+#: ../libempathy-gtk/empathy-new-message-dialog.c:82
msgid "The contact is offline"
msgstr "O contacto está desconectado"
# rever
-#: ../libempathy-gtk/empathy-new-message-dialog.c:85
+#: ../libempathy-gtk/empathy-new-message-dialog.c:84
msgid "The specified contact is either invalid or unknown"
msgstr "O contacto especificado é descoñecido ou non é válido"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:87
+#: ../libempathy-gtk/empathy-new-message-dialog.c:86
msgid "The contact does not support this kind of conversation"
msgstr "O contacto non admite este tipo de conversa"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:89
+#: ../libempathy-gtk/empathy-new-message-dialog.c:88
msgid "The requested functionality is not implemented for this protocol"
msgstr "A funcionalidade requirida non está implementada para este protocolo"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:95
+#: ../libempathy-gtk/empathy-new-message-dialog.c:94
msgid "Could not start a conversation with the given contact"
msgstr "Non foi posíbel iniciar unha conversa co contacto dado"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:97
+#: ../libempathy-gtk/empathy-new-message-dialog.c:96
msgid "You are banned from this channel"
msgstr "Vostede foi bloqueado nesta canle"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:99
+#: ../libempathy-gtk/empathy-new-message-dialog.c:98
msgid "This channel is full"
msgstr "Esta canel está completa"
# rever
-#: ../libempathy-gtk/empathy-new-message-dialog.c:101
+#: ../libempathy-gtk/empathy-new-message-dialog.c:100
msgid "You must be invited to join this channel"
msgstr "Debe ter un convite para unirse a esta canle"
# rever
-#: ../libempathy-gtk/empathy-new-message-dialog.c:103
+#: ../libempathy-gtk/empathy-new-message-dialog.c:102
msgid "Can't proceed while disconnected"
msgstr "Non é posíbel continuar mentres estea desconectado"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:105
+#: ../libempathy-gtk/empathy-new-message-dialog.c:104
msgid "Permission denied"
msgstr "Permiso denegado"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:111
+#: ../libempathy-gtk/empathy-new-message-dialog.c:110
msgid "There was an error starting the conversation"
msgstr "Produciuse un erro ao iniciar a conversa"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:290
-#: ../libempathy-gtk/empathy-new-call-dialog.c:200
+#: ../libempathy-gtk/empathy-new-message-dialog.c:289
+#: ../libempathy-gtk/empathy-new-call-dialog.c:199
msgid "Enter a contact identifier or phone number:"
msgstr "Escriba o identificador dun contacto ou un número de teléfono:"
#. Tweak the dialog
-#: ../libempathy-gtk/empathy-new-message-dialog.c:333
+#: ../libempathy-gtk/empathy-new-message-dialog.c:332
msgid "New Conversation"
msgstr "Conversa nova"
#. add video button
-#: ../libempathy-gtk/empathy-new-call-dialog.c:223
+#: ../libempathy-gtk/empathy-new-call-dialog.c:222
msgid "_Video Call"
msgstr "Chamada de _vídeo"
#. add audio button
-#: ../libempathy-gtk/empathy-new-call-dialog.c:233
+#: ../libempathy-gtk/empathy-new-call-dialog.c:232
msgid "_Audio Call"
msgstr "Chamada de vo_z"
#. Tweak the dialog
-#: ../libempathy-gtk/empathy-new-call-dialog.c:243
+#: ../libempathy-gtk/empathy-new-call-dialog.c:242
msgid "New Call"
msgstr "Nova chamada"
#: ../libempathy-gtk/empathy-bad-password-dialog.c:130
#, c-format
-msgid "Authentification failed for account <b>%s</b>"
-msgstr "Fallou a autenticación para a conta <b>%s</b>"
+msgid "Authentication failed for account <b>%s</b>"
+msgstr "Fallou a autenticación para a conta <b>%s</b>"
#: ../libempathy-gtk/empathy-base-password-dialog.c:224
#: ../libempathy-gtk/empathy-password-dialog.c:134
@@ -2786,30 +2786,41 @@ msgstr ""
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:167
-#: ../libempathy-gtk/empathy-presence-chooser.c:203
+#: ../libempathy-gtk/empathy-presence-chooser.c:165
+#: ../libempathy-gtk/empathy-presence-chooser.c:201
msgid "Custom Message…"
msgstr "Mensaxe personalizada…"
+#: ../libempathy-gtk/empathy-presence-chooser.c:218
#: ../libempathy-gtk/empathy-presence-chooser.c:220
-#: ../libempathy-gtk/empathy-presence-chooser.c:222
msgid "Edit Custom Messages…"
msgstr "Editar mensaxes personalizadas…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:345
+#: ../libempathy-gtk/empathy-presence-chooser.c:342
msgid "Click to remove this status as a favorite"
msgstr "Faga clic para eliminar este estado como favorito"
-#: ../libempathy-gtk/empathy-presence-chooser.c:354
+#: ../libempathy-gtk/empathy-presence-chooser.c:351
msgid "Click to make this status a favorite"
msgstr "Faga clic para facer este estado un dos favoritos"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#. Translators: %s is a status message like 'At the pub' for example
+#: ../libempathy-gtk/empathy-presence-chooser.c:385
+#, c-format
+msgid ""
+"<b>Current message: %s</b>\n"
+"<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"
+msgstr ""
+"<b>Mensaxe actual: %s</b>\n"
+"<small><i>Prema Intro para estabelecer o novo mensaxe ou Esc para cancelar.</"
+"i></small>"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:394
msgid "Set status"
msgstr "Estabelecer status"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1102
msgid "Custom messages…"
msgstr "Mensaxes personalizadas…"
@@ -3208,34 +3219,34 @@ msgid "_Select"
msgstr "_Seleccionar"
# rever
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:202
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:201
msgid "No error message"
msgstr "Non hai mensaxe de erro"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:275
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:274
msgid "Instant Message (Empathy)"
msgstr "Mensaxe instantáneo (Empathy)"
# rever
-#: ../src/empathy.c:435
+#: ../src/empathy.c:432
msgid "Don't connect on startup"
msgstr "Non conectarse ao inicio"
# rever
-#: ../src/empathy.c:439
+#: ../src/empathy.c:436
msgid "Don't display the contact list or any other dialogs on startup"
msgstr "Non mostrar a lista de contactos nin outros diálogos no inicio"
# rever
-#: ../src/empathy.c:454
+#: ../src/empathy.c:452
msgid "- Empathy IM Client"
msgstr " - Cliente de mensaxaría instantánea Empathy"
-#: ../src/empathy.c:641
+#: ../src/empathy.c:628
msgid "Error contacting the Account Manager"
msgstr "Produciuse un erro ao contactar co Xestor de contas"
-#: ../src/empathy.c:643
+#: ../src/empathy.c:630
#, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. "
@@ -3302,42 +3313,40 @@ msgstr ""
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:72
+#: ../src/empathy-accounts-dialog.c:70
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "Hai modificacións sen gardar respecto da súa conta %s."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:76
+#: ../src/empathy-accounts-dialog.c:74
msgid "Your new account has not been saved yet."
msgstr "A súa nova conta aínda non foi gardada."
-#: ../src/empathy-accounts-dialog.c:381
-#: ../src/empathy-streamed-media-window.c:759
-#: ../src/empathy-call-window.c:1289
+#: ../src/empathy-accounts-dialog.c:403 ../src/empathy-call-window.c:1265
msgid "Connecting…"
msgstr "Conectando…"
-#: ../src/empathy-accounts-dialog.c:422
+#: ../src/empathy-accounts-dialog.c:444
#, c-format
msgid "Offline — %s"
msgstr "Desconectado — %s"
-#: ../src/empathy-accounts-dialog.c:434
+#: ../src/empathy-accounts-dialog.c:456
#, c-format
msgid "Disconnected — %s"
msgstr "Desconectado — %s"
-#: ../src/empathy-accounts-dialog.c:445
+#: ../src/empathy-accounts-dialog.c:467
msgid "Offline — No Network Connection"
msgstr "Desconectado — Sen conexión de rede"
-#: ../src/empathy-accounts-dialog.c:452
+#: ../src/empathy-accounts-dialog.c:474
msgid "Unknown Status"
msgstr "Estado descoñecido"
-#: ../src/empathy-accounts-dialog.c:469
+#: ../src/empathy-accounts-dialog.c:491
msgid ""
"This account has been disabled because it relies on an old, unsupported "
"backend. Please install telepathy-haze and restart your session to migrate "
@@ -3346,39 +3355,39 @@ msgstr ""
"Esta conta desactivouse porque básease nun «backend» non compatíbel. Instale "
"telepathy-haze e reinicie a sesión para migrar esta conta."
-#: ../src/empathy-accounts-dialog.c:479
+#: ../src/empathy-accounts-dialog.c:501
msgid "Offline — Account Disabled"
msgstr "Desconectado — Conta desactivada"
# rever
-#: ../src/empathy-accounts-dialog.c:585
+#: ../src/empathy-accounts-dialog.c:607
msgid "Edit Connection Parameters"
msgstr "Editar os parámetros da conexión"
-#: ../src/empathy-accounts-dialog.c:750
+#: ../src/empathy-accounts-dialog.c:770
msgid "Failed to retrieve your personal information from the server."
msgstr "Produciuse un fallo ao recuperar a súa información persoal do servidor"
-#: ../src/empathy-accounts-dialog.c:756
+#: ../src/empathy-accounts-dialog.c:776
msgid "Go online to edit your personal information."
msgstr "Conéctese para editar a súa información persoal"
-#: ../src/empathy-accounts-dialog.c:843
+#: ../src/empathy-accounts-dialog.c:850
msgid "_Edit Connection Parameters..."
msgstr "_Editar os parámetros da conexión…"
# rever
-#: ../src/empathy-accounts-dialog.c:1339
+#: ../src/empathy-accounts-dialog.c:1346
#, c-format
msgid "Do you want to remove %s from your computer?"
msgstr "Está seguro de que quere eliminar o grupo '%s' do seu computador?"
-#: ../src/empathy-accounts-dialog.c:1343
+#: ../src/empathy-accounts-dialog.c:1350
msgid "This will not remove your account on the server."
msgstr "Isto non eliminará a súa conta no servidor."
# rever
-#: ../src/empathy-accounts-dialog.c:1579
+#: ../src/empathy-accounts-dialog.c:1555
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3386,25 +3395,26 @@ msgstr ""
"Vai seleccionar outra conta, e descartaranse os seus cambios\n"
"Está seguro de que quere proceder?"
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1755
-msgid "_Enable"
-msgstr "_Activar"
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1746
+msgid "_Enabled"
+msgstr "_Activado"
-#: ../src/empathy-accounts-dialog.c:1756
-msgid "_Disable"
-msgstr "_Desactivar"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1769
+msgid "Rename"
+msgstr "Renomear"
-#: ../src/empathy-accounts-dialog.c:2184
+#: ../src/empathy-accounts-dialog.c:2185
msgid "_Skip"
msgstr "_Omitir"
-#: ../src/empathy-accounts-dialog.c:2188
+#: ../src/empathy-accounts-dialog.c:2189
msgid "_Connect"
msgstr "_Conectar"
# rever
-#: ../src/empathy-accounts-dialog.c:2365
+#: ../src/empathy-accounts-dialog.c:2368
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3443,189 +3453,7 @@ msgstr "- Cliente de autenticación Empathy"
msgid "Empathy authentication client"
msgstr "Cliente de autenticación Empathy"
-# rever
-#: ../src/empathy-av.c:118 ../src/empathy-call.c:201
-msgid "- Empathy Audio/Video Client"
-msgstr "- Cliente de voz/vídeo Empathy"
-
-#: ../src/empathy-av.c:134 ../src/empathy-call.c:223
-msgid "Empathy Audio/Video Client"
-msgstr "Cliente de voz/vídeo Empathy"
-
-#: ../src/empathy-streamed-media-window.c:434
-msgid "Contrast"
-msgstr "Contraste"
-
-#: ../src/empathy-streamed-media-window.c:437
-msgid "Brightness"
-msgstr "Brillo"
-
-#: ../src/empathy-streamed-media-window.c:440
-msgid "Gamma"
-msgstr "Gamma"
-
-#: ../src/empathy-streamed-media-window.c:547
-msgid "Volume"
-msgstr "Volume"
-
-#: ../src/empathy-streamed-media-window.c:1099
-msgid "_Sidebar"
-msgstr "Barra _lateral"
-
-# rever
-#: ../src/empathy-streamed-media-window.c:1119
-msgid "Audio input"
-msgstr "Entrada de voz"
-
-# rever
-#: ../src/empathy-streamed-media-window.c:1123
-msgid "Video input"
-msgstr "Entrada de vídeo"
-
-#: ../src/empathy-streamed-media-window.c:1131
-msgid "Dialpad"
-msgstr "Teclado de chamada"
-
-# rever
-#: ../src/empathy-streamed-media-window.c:1142
-msgid "Details"
-msgstr "Detalles"
-
-#. translators: Call is a noun and %s is the contact name. This string
-#. * is used in the window title
-#: ../src/empathy-streamed-media-window.c:1211
-#: ../src/empathy-call-window.c:1889
-#, c-format
-msgid "Call with %s"
-msgstr "Chamada con %s"
-
-#: ../src/empathy-streamed-media-window.c:1444
-#: ../src/empathy-call-window.c:2133
-msgid "The IP address as seen by the machine"
-msgstr "O enderezo IP como é visto polo computador"
-
-#: ../src/empathy-streamed-media-window.c:1446
-#: ../src/empathy-call-window.c:2135
-msgid "The IP address as seen by a server on the Internet"
-msgstr "O enderezo IP como é visto por un servidor na Internet"
-
-#: ../src/empathy-streamed-media-window.c:1448
-#: ../src/empathy-call-window.c:2137
-msgid "The IP address of the peer as seen by the other side"
-msgstr "O enderezo IP do par como é visto pola outra parte"
-
-#: ../src/empathy-streamed-media-window.c:1450
-#: ../src/empathy-call-window.c:2139
-msgid "The IP address of a relay server"
-msgstr "O enderezo IP dun servidor de desvío"
-
-#: ../src/empathy-streamed-media-window.c:1452
-#: ../src/empathy-call-window.c:2141
-msgid "The IP address of the multicast group"
-msgstr "O enderezo IP do grupo multicast"
-
-#: ../src/empathy-streamed-media-window.c:1837
-#: ../src/empathy-streamed-media-window.c:1840
-#: ../src/empathy-streamed-media-window.c:1843
-#: ../src/empathy-streamed-media-window.c:1846
-msgctxt "codec"
-msgid "Unknown"
-msgstr "Descoñecido"
-
-# rever
-#. Translators: number of minutes:seconds the caller has been connected
-#: ../src/empathy-streamed-media-window.c:2138
-#, c-format
-msgid "Connected — %d:%02dm"
-msgstr "Conectado — %d:%02dm"
-
-# rever
-#: ../src/empathy-streamed-media-window.c:2199
-#: ../src/empathy-call-window.c:2992
-msgid "Technical Details"
-msgstr "Detalles técnicos"
-
-#: ../src/empathy-streamed-media-window.c:2237
-#: ../src/empathy-call-window.c:3031
-#, c-format
-msgid ""
-"%s's software does not understand any of the audio formats supported by your "
-"computer"
-msgstr ""
-"O software de %s non entende algúns dos formatos de video admitidos polo seu "
-"computador"
-
-#: ../src/empathy-streamed-media-window.c:2242
-#: ../src/empathy-call-window.c:3036
-#, c-format
-msgid ""
-"%s's software does not understand any of the video formats supported by your "
-"computer"
-msgstr ""
-"O software de %s non entende algúns dos formatos de vídeo admitidos polo seu "
-"computador"
-
-#: ../src/empathy-streamed-media-window.c:2248
-#: ../src/empathy-call-window.c:3042
-#, c-format
-msgid ""
-"Can't establish a connection to %s. One of you might be on a network that "
-"does not allow direct connections."
-msgstr ""
-"Non é posíbel estabelecer unha conexión a %s. Un deles pode estar nunha rede "
-"que non permite conexións directas."
-
-#: ../src/empathy-streamed-media-window.c:2254
-#: ../src/empathy-call-window.c:3048
-msgid "There was a failure on the network"
-msgstr "Produciuse un fallo na rede"
-
-#: ../src/empathy-streamed-media-window.c:2258
-#: ../src/empathy-call-window.c:3052
-msgid ""
-"The audio formats necessary for this call are not installed on your computer"
-msgstr "Non ten instalados os formatos de audio necesarios neste computador"
-
-#: ../src/empathy-streamed-media-window.c:2261
-#: ../src/empathy-call-window.c:3055
-msgid ""
-"The video formats necessary for this call are not installed on your computer"
-msgstr "Non ten instalados os formatos de vídeo necesarios neste computador"
-
-#: ../src/empathy-streamed-media-window.c:2271
-#: ../src/empathy-call-window.c:3067
-#, c-format
-msgid ""
-"Something unexpected happened in a Telepathy component. Please <a href=\"%s"
-"\">report this bug</a> and attach logs gathered from the 'Debug' window in "
-"the Help menu."
-msgstr ""
-"Produciuse un fallo non esperado no compoñente Telepathy. <a href=\"%s"
-"\">Informe de este erro</a> e anexe os rexistros que pode ollar na xanela "
-"«Depuración» no menú Axuda."
-
-#: ../src/empathy-streamed-media-window.c:2279
-#: ../src/empathy-call-window.c:3076
-msgid "There was a failure in the call engine"
-msgstr "Produciuse un fallo ao chamar ao motor"
-
-#: ../src/empathy-streamed-media-window.c:2282
-#: ../src/empathy-call-window.c:3079
-msgid "The end of the stream was reached"
-msgstr "Chegouse ao final do fluxo"
-
-#: ../src/empathy-streamed-media-window.c:2322
-#: ../src/empathy-call-window.c:3119
-msgid "Can't establish audio stream"
-msgstr "Non é posíbel estabelecer un fluxo de audio"
-
-#: ../src/empathy-streamed-media-window.c:2332
-#: ../src/empathy-call-window.c:3129
-msgid "Can't establish video stream"
-msgstr "Non é posíbel estabelecer un fluxo de vídeo"
-
#: ../src/empathy-call-window.ui.h:1
-#: ../src/empathy-streamed-media-window.ui.h:1
msgid "_Call"
msgstr "_Chamar"
@@ -3642,23 +3470,18 @@ msgid "_Settings"
msgstr "_Preferencias"
#: ../src/empathy-call-window.ui.h:6
-#: ../src/empathy-roster-window-menubar.ui.h:17
-#: ../src/empathy-streamed-media-window.ui.h:8
msgid "_View"
msgstr "_Ver"
#: ../src/empathy-call-window.ui.h:7 ../src/empathy-chat-window.ui.h:17
-#: ../src/empathy-roster-window-menubar.ui.h:27
msgid "_Help"
msgstr "A_xuda"
#: ../src/empathy-call-window.ui.h:8 ../src/empathy-chat-window.ui.h:18
-#: ../src/empathy-roster-window-menubar.ui.h:28
msgid "_Contents"
msgstr "_Ãndice"
#: ../src/empathy-call-window.ui.h:9
-#: ../src/empathy-roster-window-menubar.ui.h:29
msgid "_Debug"
msgstr "_Depurar"
@@ -3679,12 +3502,10 @@ msgid "Disable camera"
msgstr "Desactivar cámara"
#: ../src/empathy-call-window.ui.h:14
-#: ../src/empathy-streamed-media-window.ui.h:2
msgid "Hang up"
msgstr "Colgar"
#: ../src/empathy-call-window.ui.h:15
-#: ../src/empathy-streamed-media-window.ui.h:9
msgid "Hang up current call"
msgstr "Colgar chamada actual"
@@ -3719,53 +3540,45 @@ msgstr "Activar/desactivar transmisión de vídeo"
# rever
#: ../src/empathy-call-window.ui.h:24
-#: ../src/empathy-streamed-media-window.ui.h:11
msgid "Send Audio"
msgstr "Enviar voz"
#: ../src/empathy-call-window.ui.h:25
-#: ../src/empathy-streamed-media-window.ui.h:12
msgid "Toggle audio transmission"
msgstr "Activar/desactivar transmisión de audio"
#: ../src/empathy-call-window.ui.h:27
-#: ../src/empathy-streamed-media-window.ui.h:20
msgid "Encoding Codec:"
msgstr "Códec de codificación:"
-#: ../src/empathy-call-window.ui.h:28
-#: ../src/empathy-streamed-media-window.ui.h:21
-#: ../src/empathy-call-window.c:2542 ../src/empathy-call-window.c:2543
-#: ../src/empathy-call-window.c:2544 ../src/empathy-call-window.c:2545
+#: ../src/empathy-call-window.ui.h:28 ../src/empathy-call-window.c:2512
+#: ../src/empathy-call-window.c:2513 ../src/empathy-call-window.c:2514
+#: ../src/empathy-call-window.c:2515
msgid "Unknown"
msgstr "Descoñecido"
#: ../src/empathy-call-window.ui.h:29
-#: ../src/empathy-streamed-media-window.ui.h:22
msgid "Decoding Codec:"
msgstr "Códec de decodificación:"
#: ../src/empathy-call-window.ui.h:30
-#: ../src/empathy-streamed-media-window.ui.h:23
msgid "Remote Candidate:"
msgstr "Candidato remoto:"
#: ../src/empathy-call-window.ui.h:31
-#: ../src/empathy-streamed-media-window.ui.h:24
msgid "Local Candidate:"
msgstr "Candidato local:"
-#: ../src/empathy-call-window.ui.h:32 ../src/empathy-preferences.ui.h:24
-#: ../src/empathy-streamed-media-window.ui.h:25
+#: ../src/empathy-call-window.ui.h:32 ../src/empathy-preferences.ui.h:31
msgid "Audio"
msgstr "Son"
# rever
-#: ../src/empathy-chat-window.c:289
+#: ../src/empathy-chat-window.c:287
msgid "Close this window?"
msgstr "Pechar esta xanela?"
-#: ../src/empathy-chat-window.c:294
+#: ../src/empathy-chat-window.c:292
#, c-format
msgid ""
"Closing this window will leave %s. You will not receive any further messages "
@@ -3774,7 +3587,7 @@ msgstr ""
"Pechar esta xanela fará que abandone %s. Non recibirá máis mensaxes até que "
"se una de novo."
-#: ../src/empathy-chat-window.c:305
+#: ../src/empathy-chat-window.c:303
#, c-format
msgid ""
"Closing this window will leave a chat room. You will not receive any further "
@@ -3789,59 +3602,59 @@ msgstr[1] ""
"Pechar esta xanela fará que abandone %u salas de chat. Non recibirá máis "
"mensaxes até que se una de novo."
-#: ../src/empathy-chat-window.c:314
+#: ../src/empathy-chat-window.c:312
#, c-format
msgid "Leave %s?"
msgstr "Pechar %s?"
-#: ../src/empathy-chat-window.c:315
+#: ../src/empathy-chat-window.c:313
msgid ""
"You will not receive any further messages from this chat room until you "
"rejoin it."
msgstr "Non recibirá máis mensaxes deste chat até que se una de novo."
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:332
msgid "Close window"
msgstr "Pechar a xanela"
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:332
msgid "Leave room"
msgstr "Abandonar a sala"
-#: ../src/empathy-chat-window.c:640 ../src/empathy-chat-window.c:660
+#: ../src/empathy-chat-window.c:638 ../src/empathy-chat-window.c:658
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
msgstr[0] "%s (%d sen ler)"
msgstr[1] "%s (%d sen ler)"
-#: ../src/empathy-chat-window.c:652
+#: ../src/empathy-chat-window.c:650
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
msgstr[0] "%s (e outro %u)"
msgstr[1] "%s (e outros %u)"
-#: ../src/empathy-chat-window.c:668
+#: ../src/empathy-chat-window.c:666
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
msgstr[0] "%s (%d sen ler de outros)"
msgstr[1] "%s (%d sen ler de outros)"
-#: ../src/empathy-chat-window.c:677
+#: ../src/empathy-chat-window.c:675
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
msgstr[0] "%s (%d sen ler de todos)"
msgstr[1] "%s (%d sen ler de todos)"
-#: ../src/empathy-chat-window.c:892
+#: ../src/empathy-chat-window.c:890
msgid "SMS:"
msgstr "SMS:"
# rever
-#: ../src/empathy-chat-window.c:902
+#: ../src/empathy-chat-window.c:900
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
@@ -3849,7 +3662,7 @@ msgstr[0] "Enviando %d mensaxe."
msgstr[1] "Enviando %d mensaxes."
# rever
-#: ../src/empathy-chat-window.c:924
+#: ../src/empathy-chat-window.c:922
msgid "Typing a message."
msgstr "Escribindo unha mensaxe."
@@ -3936,106 +3749,104 @@ msgid "Manage Favorite Rooms"
msgstr "Xestionar as salas favoritas"
# rever
-#: ../src/empathy-event-manager.c:522
+#: ../src/empathy-event-manager.c:510
msgid "Incoming video call"
msgstr "Chamada de vídeo entrante"
# rever
-#: ../src/empathy-event-manager.c:522 ../src/empathy-call-window.c:1519
+#: ../src/empathy-event-manager.c:510 ../src/empathy-call-window.c:1480
msgid "Incoming call"
msgstr "Chamada entrante"
# rever
-#: ../src/empathy-event-manager.c:526
+#: ../src/empathy-event-manager.c:514
#, c-format
msgid "%s is video calling you. Do you want to answer?"
msgstr "%s está chamándoo con vídeo. Desexa responderlle?"
# rever
-#: ../src/empathy-event-manager.c:527
+#: ../src/empathy-event-manager.c:515
#, c-format
msgid "%s is calling you. Do you want to answer?"
msgstr "%s estao chamando. Quere responder?"
-#: ../src/empathy-event-manager.c:530 ../src/empathy-event-manager.c:731
-#: ../src/empathy-event-manager.c:764 ../src/empathy-call-window.c:1525
+#: ../src/empathy-event-manager.c:518 ../src/empathy-event-manager.c:915
+#: ../src/empathy-call-window.c:1486
#, c-format
msgid "Incoming call from %s"
msgstr "Chamada entrante de %s"
-#: ../src/empathy-event-manager.c:555
+#: ../src/empathy-event-manager.c:543
msgid "_Reject"
msgstr "_Rexeitar"
# rever
-#: ../src/empathy-event-manager.c:563 ../src/empathy-event-manager.c:571
+#: ../src/empathy-event-manager.c:551 ../src/empathy-event-manager.c:559
msgid "_Answer"
msgstr "_Responder"
-#: ../src/empathy-event-manager.c:571
+#: ../src/empathy-event-manager.c:559
msgid "_Answer with video"
msgstr "_Responder con vídeo"
-#: ../src/empathy-event-manager.c:731 ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
-#, c-format
-msgid "Incoming video call from %s"
-msgstr "Videochamada entrante de %s"
-
# rever
-#: ../src/empathy-event-manager.c:837
+#: ../src/empathy-event-manager.c:714
msgid "Room invitation"
msgstr "Convite a unha sala"
# rever
-#: ../src/empathy-event-manager.c:839
+#: ../src/empathy-event-manager.c:716
#, c-format
msgid "Invitation to join %s"
msgstr "Convite para unirse a %s"
# rever
-#: ../src/empathy-event-manager.c:846
+#: ../src/empathy-event-manager.c:723
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s está convidándoo a unirse a %s"
-#: ../src/empathy-event-manager.c:854
+#: ../src/empathy-event-manager.c:731
msgid "_Decline"
msgstr "_Rexeitar"
-#: ../src/empathy-event-manager.c:859
-#: ../src/empathy-new-chatroom-dialog.ui.h:2
+#: ../src/empathy-event-manager.c:736
msgid "_Join"
msgstr "_Unirse"
# rever
-#: ../src/empathy-event-manager.c:886
+#: ../src/empathy-event-manager.c:762
#, c-format
msgid "%s invited you to join %s"
msgstr "%s convidouno a unirse a %s"
# rever
-#: ../src/empathy-event-manager.c:892
+#: ../src/empathy-event-manager.c:768
#, c-format
msgid "You have been invited to join %s"
msgstr "Vostede foi convidado a unirse a %s"
+#: ../src/empathy-event-manager.c:915 ../src/empathy-call-window.c:1486
+#, c-format
+msgid "Incoming video call from %s"
+msgstr "Videochamada entrante de %s"
+
# rever
-#: ../src/empathy-event-manager.c:943
+#: ../src/empathy-event-manager.c:947
#, c-format
msgid "Incoming file transfer from %s"
msgstr "Transferencia de ficheiro entrante de %s"
-#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:374
+#: ../src/empathy-event-manager.c:983 ../src/empathy-roster-window.c:356
msgid "Password required"
msgstr "Requírese o contrasinal"
-#: ../src/empathy-event-manager.c:1216
+#: ../src/empathy-event-manager.c:1105
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicita permiso para ver cando vostede está dispoñíbel"
-#: ../src/empathy-event-manager.c:1222
+#: ../src/empathy-event-manager.c:1111
#, c-format
msgid ""
"\n"
@@ -4187,89 +3998,73 @@ msgid "Import Accounts"
msgstr "Importar contas"
#. Translators: this is the header of a treeview column
-#: ../src/empathy-import-widget.c:316
+#: ../src/empathy-import-widget.c:303
msgid "Import"
msgstr "Importar"
-#: ../src/empathy-import-widget.c:325
+#: ../src/empathy-import-widget.c:312
msgid "Protocol"
msgstr "Protocolo"
-#: ../src/empathy-import-widget.c:349
+#: ../src/empathy-import-widget.c:336
msgid "Source"
msgstr "Orixe"
-#: ../src/empathy-roster-window.c:391
+#: ../src/empathy-roster-window.c:373
msgid "Provide Password"
msgstr "Escriba o seu contrasinal"
-#: ../src/empathy-roster-window.c:397
+#: ../src/empathy-roster-window.c:379
msgid "Disconnect"
msgstr "Desconectar"
-#: ../src/empathy-roster-window.c:657
+#: ../src/empathy-roster-window.c:639
msgid "You need to setup an account to see contacts here."
msgstr "Debe configurar unha conta para ver contactos aquí."
# rever
-#: ../src/empathy-roster-window.c:673
+#: ../src/empathy-roster-window.c:655
msgid "No match found"
msgstr "Non se atopou ningunha coincidencia."
-#: ../src/empathy-roster-window.c:783
+#: ../src/empathy-roster-window.c:765
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr ""
"As contas de %s non se poden usar até que non teña actualizado o seu "
"software %s."
-#: ../src/empathy-roster-window.c:849
+#: ../src/empathy-roster-window.c:831
msgid "Update software..."
msgstr "Actualizar software…"
-#: ../src/empathy-roster-window.c:855 ../src/empathy-roster-window.c:972
+#: ../src/empathy-roster-window.c:837 ../src/empathy-roster-window.c:954
msgid "Close"
msgstr "Pechar"
-#: ../src/empathy-roster-window.c:960
+#: ../src/empathy-roster-window.c:942
msgid "Reconnect"
msgstr "Reconectar"
-#: ../src/empathy-roster-window.c:966
+#: ../src/empathy-roster-window.c:948
msgid "Edit Account"
msgstr "Editar a conta"
-#. Translators: this string will be something like:
-#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1110
-#, c-format
-msgid "Top up %s (%s)..."
-msgstr "Recargar %s (%s)…"
-
-#: ../src/empathy-roster-window.c:1156
-msgid "Top up account credit"
-msgstr "Recargar o saldo da conta"
-
-#. top up button
-#: ../src/empathy-roster-window.c:1228
-msgid "Top Up..."
-msgstr "Recargar…"
+#: ../src/empathy-roster-window.c:1128
+msgid "Top up account"
+msgstr "Recargar conta"
-#: ../src/empathy-roster-window.c:1952
-msgid "Contact"
-msgstr "Contacto"
-
-#: ../src/empathy-roster-window.c:2150
+#: ../src/empathy-roster-window.c:1813
msgid "You need to enable one of your accounts to see contacts here."
msgstr "Debe activar unha das súas contas para ver contactos aquí."
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2158
+#: ../src/empathy-roster-window.c:1821
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr "Debe activar %s para ver contactos aquí."
-#: ../src/empathy-roster-window.c:2460
+#: ../src/empathy-roster-window.c:2152 ../src/empathy-preferences.ui.h:7
msgid "Contact List"
msgstr "Lista de contactos"
@@ -4277,110 +4072,90 @@ msgstr "Lista de contactos"
msgid "Account settings"
msgstr "Configuración da conta"
-#: ../src/empathy-roster-window-menubar.ui.h:2
-#: ../src/empathy-status-icon.ui.h:2
-msgid "_New Conversation…"
+#: ../src/empathy-roster-window-menubar.ui.h:1
+msgid "_New Conversation..."
msgstr "_Nova conversa…"
-#: ../src/empathy-roster-window-menubar.ui.h:3
-#: ../src/empathy-status-icon.ui.h:3
-msgid "New _Call…"
+#: ../src/empathy-roster-window-menubar.ui.h:2
+msgid "New _Call..."
msgstr "Nova _chamada…"
+#: ../src/empathy-roster-window-menubar.ui.h:3
+msgid "Contacts"
+msgstr "Contactos"
+
# rever
-#: ../src/empathy-roster-window-menubar.ui.h:6
-msgid "_Search for Contacts…"
+#: ../src/empathy-roster-window-menubar.ui.h:4
+msgid "_Add Contacts..."
+msgstr "_Engadir contactos…"
+
+# rever
+#: ../src/empathy-roster-window-menubar.ui.h:5
+msgid "_Search for Contacts..."
msgstr "_Buscar contactos…"
+# rever
+#: ../src/empathy-roster-window-menubar.ui.h:6
+msgid "_Blocked Contacts"
+msgstr "Contactos _bloqueados"
+
#: ../src/empathy-roster-window-menubar.ui.h:7
-msgid "_File Transfers"
-msgstr "Trans_ferencias de ficheiros"
+msgid "_Rooms"
+msgstr "Sa_las"
-# rever
#: ../src/empathy-roster-window-menubar.ui.h:8
-msgid "_Offline Contacts"
-msgstr "Contactos _desconectados"
+msgid "_Join..."
+msgstr "_Unirse…"
+# rever
#: ../src/empathy-roster-window-menubar.ui.h:9
-msgid "Show P_rotocols"
-msgstr "Mostrar p_rotocolos"
+msgid "Join _Favorites"
+msgstr "Unirse a _favoritas"
#: ../src/empathy-roster-window-menubar.ui.h:10
-msgid "Credit Balance"
-msgstr "Crédito"
+msgid "_Manage Favorites"
+msgstr "_Xestionar favoritas…"
-#: ../src/empathy-roster-window-menubar.ui.h:11
-msgid "Contacts on a _Map"
-msgstr "Contactos no _mapa"
+#: ../src/empathy-roster-window-menubar.ui.h:12
+msgid "_File Transfers"
+msgstr "Trans_ferencias de ficheiros"
#: ../src/empathy-roster-window-menubar.ui.h:13
msgid "_Accounts"
msgstr "_Contas"
-# rever
#: ../src/empathy-roster-window-menubar.ui.h:14
-msgid "_Blocked Contacts"
-msgstr "Contactos _bloqueados"
-
-#: ../src/empathy-roster-window-menubar.ui.h:15
msgid "P_references"
msgstr "P_referencias"
-#: ../src/empathy-roster-window-menubar.ui.h:16
-msgid "Find in Contact _List"
-msgstr "_Buscar na lista de contactos"
-
-# rever
-#: ../src/empathy-roster-window-menubar.ui.h:18
-msgid "Sort by _Name"
-msgstr "Ordenar por _nome"
-
-# rever
-#: ../src/empathy-roster-window-menubar.ui.h:19
-msgid "Sort by _Status"
-msgstr "Ordenar por es_tado"
-
-#: ../src/empathy-roster-window-menubar.ui.h:20
-msgid "Normal Size With _Avatars"
-msgstr "Tamaño normal con _avatares"
-
-#: ../src/empathy-roster-window-menubar.ui.h:21
-msgid "N_ormal Size"
-msgstr "Tamañ_o normal"
-
-#: ../src/empathy-roster-window-menubar.ui.h:22
-msgid "_Compact Size"
-msgstr "Ta_maño compacto"
-
-#: ../src/empathy-roster-window-menubar.ui.h:23
-msgid "_Room"
-msgstr "Sa_la"
-
-#: ../src/empathy-roster-window-menubar.ui.h:24
-msgid "_Join…"
-msgstr "_Unirse…"
+#: ../src/empathy-roster-window-menubar.ui.h:15
+msgid "Help"
+msgstr "Axuda"
-# rever
-#: ../src/empathy-roster-window-menubar.ui.h:25
-msgid "Join _Favorites"
-msgstr "Unirse a _favoritas"
+#: ../src/empathy-roster-window-menubar.ui.h:16
+msgid "About Empathy"
+msgstr "Sobre empathy"
-#: ../src/empathy-roster-window-menubar.ui.h:26
-msgid "Manage Favorites"
-msgstr "Xestionar favoritas"
+#: ../src/empathy-roster-window-menubar.ui.h:17
+#: ../src/empathy-status-icon.ui.h:5
+msgid "_Quit"
+msgstr "_Saír"
# rever
-#: ../src/empathy-new-chatroom-dialog.c:369
+#: ../src/empathy-new-chatroom-dialog.c:194
msgid "Chat Room"
msgstr "Salas de conversa"
-#: ../src/empathy-new-chatroom-dialog.c:385
+#: ../src/empathy-new-chatroom-dialog.c:209
msgid "Members"
msgstr "Membros"
-#. Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
-#. yes/no, yes/no and a number.
-#: ../src/empathy-new-chatroom-dialog.c:637
+# rever
+#: ../src/empathy-new-chatroom-dialog.c:410
+msgid "Failed to list rooms"
+msgstr "Produciuse un fallo ao listar as salas"
+
+#: ../src/empathy-new-chatroom-dialog.c:439
#, c-format
msgid ""
"%s\n"
@@ -4393,42 +4168,43 @@ msgstr ""
"Requírese contrasinal: %s\n"
"Membros: %s"
-#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
+#: ../src/empathy-new-chatroom-dialog.c:441
+#: ../src/empathy-new-chatroom-dialog.c:442
msgid "Yes"
msgstr "Si"
-#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
+#: ../src/empathy-new-chatroom-dialog.c:441
+#: ../src/empathy-new-chatroom-dialog.c:442
msgid "No"
msgstr "Non"
-#: ../src/empathy-new-chatroom-dialog.c:668
-msgid "Could not start room listing"
-msgstr "Non foi posíbel arrincar a lista da sala"
-
-#: ../src/empathy-new-chatroom-dialog.c:678
-msgid "Could not stop room listing"
-msgstr "Non foi posíbel deter a lista da sala"
-
-#: ../src/empathy-new-chatroom-dialog.ui.h:1
+#: ../src/empathy-new-chatroom-dialog.c:782
msgid "Join Room"
msgstr "Unirse á sala"
# rever
-#: ../src/empathy-new-chatroom-dialog.ui.h:3
+#: ../src/empathy-new-chatroom-dialog.ui.h:1
msgid ""
"Enter the room name to join here or click on one or more rooms in the list."
msgstr ""
"Introduza o nome da sala aquí para unirse ou prema nunha ou máis salas da "
"lista."
-#: ../src/empathy-new-chatroom-dialog.ui.h:4
+#: ../src/empathy-new-chatroom-dialog.ui.h:2
msgid "_Room:"
msgstr "Sa_la:"
# rever
-#: ../src/empathy-new-chatroom-dialog.ui.h:5
+#: ../src/empathy-new-chatroom-dialog.ui.h:3
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account&apos;s server"
+msgstr ""
+"Escriba o servidor onde se aloxa a sala, ou déixeo baleiro se a sala está na "
+"conta do servidor actual"
+
+# rever
+#: ../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"
@@ -4436,196 +4212,214 @@ msgstr ""
"Introduza o servidor onde se aloxa a sala ou déixeo baleiro se a sala está "
"na conta do servidor actual"
-#: ../src/empathy-new-chatroom-dialog.ui.h:8
+#: ../src/empathy-new-chatroom-dialog.ui.h:7
msgid "Couldn't load room list"
msgstr "Non foi posíbel ler a lista da sala"
# rever
-#: ../src/empathy-new-chatroom-dialog.ui.h:9
+#: ../src/empathy-new-chatroom-dialog.ui.h:8
msgid "Room List"
msgstr "Lista de salas"
-#: ../src/empathy-preferences.c:166
+#: ../src/empathy-preferences.c:146
msgid "Message received"
msgstr "Mensaxe recibida"
-#: ../src/empathy-preferences.c:167
+#: ../src/empathy-preferences.c:147
msgid "Message sent"
msgstr "Mensaxe enviada"
-#: ../src/empathy-preferences.c:168
+#: ../src/empathy-preferences.c:148
msgid "New conversation"
msgstr "Conversa nova"
# rever
-#: ../src/empathy-preferences.c:169
+#: ../src/empathy-preferences.c:149
msgid "Contact comes online"
msgstr "O contacto conéctase"
# rever
-#: ../src/empathy-preferences.c:170
+#: ../src/empathy-preferences.c:150
msgid "Contact goes offline"
msgstr "O contacto desconéctase"
# rever
-#: ../src/empathy-preferences.c:171
+#: ../src/empathy-preferences.c:151
msgid "Account connected"
msgstr "Conta conectada"
# rever
-#: ../src/empathy-preferences.c:172
+#: ../src/empathy-preferences.c:152
msgid "Account disconnected"
msgstr "Conta desconectada"
-#: ../src/empathy-preferences.c:475
+#: ../src/empathy-preferences.c:429
msgid "Language"
msgstr "Idioma"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:726
+#: ../src/empathy-preferences.c:678
msgid "Juliet"
msgstr "Xulieta"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:733
+#: ../src/empathy-preferences.c:685
msgid "Romeo"
msgstr "Romeo"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:739
+#: ../src/empathy-preferences.c:691
msgid "O Romeo, Romeo, wherefore art thou Romeo?"
msgstr "Oh, Romeu, Romeu!, ¿onde estás que non te vexo?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:743
+#: ../src/empathy-preferences.c:695
msgid "Deny thy father and refuse thy name;"
msgstr "Nega ao teu pai e rexeita o teu nome;"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:746
+#: ../src/empathy-preferences.c:698
msgid "Or if thou wilt not, be but sworn my love"
msgstr "Ou, se non queres, xúrame tan só que me amas"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:749
+#: ../src/empathy-preferences.c:701
msgid "And I'll no longer be a Capulet."
msgstr "E deixarei eu de ser un Capuleto."
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:752
+#: ../src/empathy-preferences.c:704
msgid "Shall I hear more, or shall I speak at this?"
msgstr "Debo escoitar máis ou contestar ao dito?"
# rever
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:755
+#: ../src/empathy-preferences.c:707
msgid "Juliet has disconnected"
msgstr "Xulieta desconectouse"
-#: ../src/empathy-preferences.c:1159
+#: ../src/empathy-preferences.c:1112
msgid "Preferences"
msgstr "Preferencias"
-# rever
-#: ../src/empathy-preferences.ui.h:1
-msgid "Show _smileys as images"
-msgstr "Mostrar as _emoticonas como imaxes"
-
-# rever
#: ../src/empathy-preferences.ui.h:2
-msgid "Show contact _list in rooms"
-msgstr "Mostrar _lista de contactos en salas"
+msgid "Show protocol in avatar"
+msgstr "Mostrar protocolo no avatar"
+# rever
#: ../src/empathy-preferences.ui.h:3
-msgid "Appearance"
-msgstr "Aparencia"
+msgid "Show account balances"
+msgstr "Mostrar os balances das contas"
+# rever
#: ../src/empathy-preferences.ui.h:4
+msgid "Sort contacts by:"
+msgstr "Ordenar contactos por:"
+
+#: ../src/empathy-preferences.ui.h:5
+msgid "status"
+msgstr "estado"
+
+#: ../src/empathy-preferences.ui.h:6
+msgid "name"
+msgstr "nome"
+
+#: ../src/empathy-preferences.ui.h:8
msgid "Start chats in:"
msgstr "Iniciar conversas en:"
-#: ../src/empathy-preferences.ui.h:5
+#: ../src/empathy-preferences.ui.h:9
msgid "new ta_bs"
msgstr "lapelas no_vas"
-#: ../src/empathy-preferences.ui.h:6
+#: ../src/empathy-preferences.ui.h:10
msgid "new _windows"
msgstr "xan_elas novas"
-#: ../src/empathy-preferences.ui.h:7
+# rever
+#: ../src/empathy-preferences.ui.h:11
+msgid "Show _smileys as images"
+msgstr "Mostrar as _emoticonas como imaxes"
+
+# rever
+#: ../src/empathy-preferences.ui.h:12
+msgid "Show contact _list in rooms"
+msgstr "Mostrar _lista de contactos en salas"
+
+#: ../src/empathy-preferences.ui.h:13
+msgid "Log conversations"
+msgstr "Rexistrar conversas"
+
+#: ../src/empathy-preferences.ui.h:15
msgid "Display incoming events in the notification area"
msgstr "Mostrar os eventos entrantes na área de notificación"
# rever
-#: ../src/empathy-preferences.ui.h:8
+#: ../src/empathy-preferences.ui.h:16
msgid "_Automatically connect on startup"
msgstr "_Conectar automaticamente ao inicio"
-#: ../src/empathy-preferences.ui.h:9
-msgid "Log conversations"
-msgstr "Rexistrar conversas"
-
-#: ../src/empathy-preferences.ui.h:10
+#: ../src/empathy-preferences.ui.h:17
msgid "Behavior"
msgstr "Comportamento"
-#: ../src/empathy-preferences.ui.h:11
+#: ../src/empathy-preferences.ui.h:18
msgid "General"
msgstr "Xeral"
# rever
-#: ../src/empathy-preferences.ui.h:12
+#: ../src/empathy-preferences.ui.h:19
msgid "_Enable bubble notifications"
msgstr "_Activar notificacións de burbulla"
# rever
-#: ../src/empathy-preferences.ui.h:13
+#: ../src/empathy-preferences.ui.h:20
msgid "Disable notifications when _away or busy"
msgstr "Desactivar notificacións ao estar _ausente ou ocupado"
# rever
-#: ../src/empathy-preferences.ui.h:14
+#: ../src/empathy-preferences.ui.h:21
msgid "Enable notifications when the _chat is not focused"
msgstr "Activar notificacións cando a _conversa non teña o foco"
# rever
-#: ../src/empathy-preferences.ui.h:15
+#: ../src/empathy-preferences.ui.h:22
msgid "Enable notifications when a contact comes online"
msgstr "Activar notificacións cando un contacto se conecta"
# rever
-#: ../src/empathy-preferences.ui.h:16
+#: ../src/empathy-preferences.ui.h:23
msgid "Enable notifications when a contact goes offline"
msgstr "Activar notificacións cando un contacto se desconecta"
-#: ../src/empathy-preferences.ui.h:17
+#: ../src/empathy-preferences.ui.h:24
msgid "Notifications"
msgstr "Notificacións"
# rever
-#: ../src/empathy-preferences.ui.h:18
+#: ../src/empathy-preferences.ui.h:25
msgid "_Enable sound notifications"
msgstr "_Activar notificacións de son"
# rever
-#: ../src/empathy-preferences.ui.h:19
+#: ../src/empathy-preferences.ui.h:26
msgid "Disable sounds when _away or busy"
msgstr "Desactivar os sons cando se estea _ausente ou ocupado"
# rever
-#: ../src/empathy-preferences.ui.h:20
+#: ../src/empathy-preferences.ui.h:27
msgid "Play sound for events"
msgstr "Reproducir un son para os eventos"
-#: ../src/empathy-preferences.ui.h:21
+#: ../src/empathy-preferences.ui.h:28
msgid "Sounds"
msgstr "Sons"
-#: ../src/empathy-preferences.ui.h:22
+#: ../src/empathy-preferences.ui.h:29
msgid "Use _echo cancellation to improve call quality"
msgstr "Usar cancelación de _eco para mellorar a calidade da chamada"
-#: ../src/empathy-preferences.ui.h:23
+#: ../src/empathy-preferences.ui.h:30
msgid ""
"Echo cancellation helps to make your voice sound clearer to the other "
"person, but may cause problems on some computers. If you or the other person "
@@ -4637,11 +4431,11 @@ msgstr ""
"persoa escoita ruidos estranos ou ten problemas técnicos durante as chamadas "
"tente desactivando a cancelación do eco e reiniciando a chamada."
-#: ../src/empathy-preferences.ui.h:26
+#: ../src/empathy-preferences.ui.h:33
msgid "_Publish location to my contacts"
msgstr "_Publicar a miña localización aos meus contactos"
-#: ../src/empathy-preferences.ui.h:27
+#: ../src/empathy-preferences.ui.h:34
msgid ""
"Reduced location accuracy means that nothing more precise than your city, "
"state and country will be published. GPS coordinates will be accurate to 1 "
@@ -4652,33 +4446,33 @@ msgstr ""
"aproximadas a 1 valor decimal."
#. To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees.
-#: ../src/empathy-preferences.ui.h:29
+#: ../src/empathy-preferences.ui.h:36
msgid "_Reduce location accuracy"
msgstr "_Reducir a precisión da localización"
-#: ../src/empathy-preferences.ui.h:30
+#: ../src/empathy-preferences.ui.h:37
msgid "Privacy"
msgstr "Privacidade"
-#: ../src/empathy-preferences.ui.h:31
+#: ../src/empathy-preferences.ui.h:38
msgid "_GPS"
msgstr "_GPS"
# rever
-#: ../src/empathy-preferences.ui.h:32
+#: ../src/empathy-preferences.ui.h:39
msgid "_Cellphone"
msgstr "_Teléfono móbil"
-#: ../src/empathy-preferences.ui.h:33
+#: ../src/empathy-preferences.ui.h:40
msgid "_Network (IP, Wi-Fi)"
msgstr "_Rede (IP, Wi-Fi)"
-#: ../src/empathy-preferences.ui.h:34
+#: ../src/empathy-preferences.ui.h:41
msgid "Location sources:"
msgstr "Fontes de localización:"
# rever
-#: ../src/empathy-preferences.ui.h:36
+#: ../src/empathy-preferences.ui.h:43
msgid ""
"The list of languages reflects only the languages for which you have a "
"dictionary installed."
@@ -4687,169 +4481,113 @@ msgstr ""
"dicionario instalado."
# rever
-#: ../src/empathy-preferences.ui.h:37
+#: ../src/empathy-preferences.ui.h:44
msgid "Enable spell checking for languages:"
msgstr "Activar a verificación ortográfica para os idiomas:"
-#: ../src/empathy-preferences.ui.h:38
+#: ../src/empathy-preferences.ui.h:45
msgid "Spell Checking"
msgstr "Verificación ortográfica"
# rever
-#: ../src/empathy-preferences.ui.h:39
+#: ../src/empathy-preferences.ui.h:46
msgid "Chat Th_eme:"
msgstr "T_ema do chat:"
-#: ../src/empathy-preferences.ui.h:40
+#: ../src/empathy-preferences.ui.h:47
msgid "Variant:"
msgstr "Variante:"
-#: ../src/empathy-preferences.ui.h:41
+#: ../src/empathy-preferences.ui.h:48
msgid "Themes"
msgstr "Temas"
+#: ../src/empathy-status-icon.ui.h:2
+msgid "_New Conversation…"
+msgstr "_Nova conversa…"
+
+#: ../src/empathy-status-icon.ui.h:3
+msgid "New _Call…"
+msgstr "Nova _chamada…"
+
#: ../src/empathy-status-icon.ui.h:4
msgid "Status"
msgstr "Estado"
-#: ../src/empathy-status-icon.ui.h:5
-msgid "_Quit"
-msgstr "_Saír"
-
-#: ../src/empathy-streamed-media-window.ui.h:3
-msgid "Redial"
-msgstr "Remarcar"
-
-#: ../src/empathy-streamed-media-window.ui.h:4
-msgid "V_ideo"
-msgstr "V_ídeo"
-
-# rever
-#: ../src/empathy-streamed-media-window.ui.h:5
-msgid "Video Off"
-msgstr "Vídeo desactivado"
-
-#: ../src/empathy-streamed-media-window.ui.h:6
-msgid "Video Preview"
-msgstr "Previsualizar vídeo"
-
-# rever
-#: ../src/empathy-streamed-media-window.ui.h:7
-msgid "Video On"
-msgstr "Vídeo activado"
-
-# rever
-#: ../src/empathy-streamed-media-window.ui.h:10
-msgid "Call the contact again"
-msgstr "Chamar ao contacto de novo"
-
-#: ../src/empathy-streamed-media-window.ui.h:13
-msgid "Camera Off"
-msgstr "Cámara desactivada"
-
-#: ../src/empathy-streamed-media-window.ui.h:14
-msgid "Disable camera and stop sending video"
-msgstr "Desactivar cámara e deter o envío do vídeo"
-
-#: ../src/empathy-streamed-media-window.ui.h:15
-msgid "Preview"
-msgstr "Previsualizar"
-
-#: ../src/empathy-streamed-media-window.ui.h:16
-msgid "Enable camera but don't send video"
-msgstr "Activar cámara pero non enviar o vídeo"
-
-#: ../src/empathy-streamed-media-window.ui.h:17
-msgid "Camera On"
-msgstr "Cámara activada"
-
-#: ../src/empathy-streamed-media-window.ui.h:18
-msgid "Enable camera and send video"
-msgstr "Activar cámara e enviar o vídeo"
-
-#: ../src/empathy-map-view.c:471
-msgid "Contact Map View"
-msgstr "Vista de mapa de contactos"
-
-#: ../src/empathy-debug-window.c:1607
+#: ../src/empathy-debug-window.c:1603
msgid "Save"
msgstr "Gardar"
-#: ../src/empathy-debug-window.c:1667
+#: ../src/empathy-debug-window.c:1663
msgid "Pastebin link"
msgstr "Ligazón a pastebin"
-#: ../src/empathy-debug-window.c:1676
+#: ../src/empathy-debug-window.c:1672
msgid "Pastebin response"
msgstr "Resposta de pastebin"
-#: ../src/empathy-debug-window.c:1680
-#, c-format
-msgid "%s"
-msgstr "%s"
-
-#: ../src/empathy-debug-window.c:1683
+#: ../src/empathy-debug-window.c:1679
msgid "Data too large for a single paste. Please save logs to file."
msgstr ""
"Datos demasiado longos para un pegado sinxelo. Garde o rexistro nun ficheiro."
-#: ../src/empathy-debug-window.c:1912
+#: ../src/empathy-debug-window.c:1858
msgid "Debug Window"
msgstr "Depurar xanela"
-#: ../src/empathy-debug-window.c:1970
+#: ../src/empathy-debug-window.c:1918
msgid "Send to pastebin"
msgstr "Enviar a pastebin"
-#: ../src/empathy-debug-window.c:2009
+#: ../src/empathy-debug-window.c:1962
msgid "Pause"
msgstr "Pausa"
-#: ../src/empathy-debug-window.c:2021
+#: ../src/empathy-debug-window.c:1974
msgid "Level "
msgstr "Nivel"
-#: ../src/empathy-debug-window.c:2040
+#: ../src/empathy-debug-window.c:1993
msgid "Debug"
msgstr "Depuración"
-#: ../src/empathy-debug-window.c:2045
+#: ../src/empathy-debug-window.c:1998
msgid "Info"
msgstr "Información"
-#: ../src/empathy-debug-window.c:2050 ../src/empathy-debug-window.c:2096
+#: ../src/empathy-debug-window.c:2003 ../src/empathy-debug-window.c:2052
msgid "Message"
msgstr "Mensaxe"
-#: ../src/empathy-debug-window.c:2055
+#: ../src/empathy-debug-window.c:2008
msgid "Warning"
msgstr "Aviso"
-#: ../src/empathy-debug-window.c:2060
+#: ../src/empathy-debug-window.c:2013
msgid "Critical"
msgstr "Crítico"
-#: ../src/empathy-debug-window.c:2065
+#: ../src/empathy-debug-window.c:2018
msgid "Error"
msgstr "Erro"
-#: ../src/empathy-debug-window.c:2084
+#: ../src/empathy-debug-window.c:2037
msgid "Time"
msgstr "Hora"
-#: ../src/empathy-debug-window.c:2087
+#: ../src/empathy-debug-window.c:2040
msgid "Domain"
msgstr "Dominio"
-#: ../src/empathy-debug-window.c:2089
+#: ../src/empathy-debug-window.c:2043
msgid "Category"
msgstr "Categoría"
-#: ../src/empathy-debug-window.c:2091
+#: ../src/empathy-debug-window.c:2046
msgid "Level"
msgstr "Nivel"
-#: ../src/empathy-debug-window.c:2114
+#: ../src/empathy-debug-window.c:2075
msgid ""
"The selected connection manager does not support the remote debugging "
"extension."
@@ -4857,16 +4595,16 @@ msgstr ""
"O xestor de conexións seleccionado non é compatíbel coa extensión de "
"depuración remota."
-#: ../src/empathy-invite-participant-dialog.c:202
-#: ../src/empathy-invite-participant-dialog.c:230
+#: ../src/empathy-invite-participant-dialog.c:201
+#: ../src/empathy-invite-participant-dialog.c:229
msgid "Invite Participant"
msgstr "Convidar participante"
-#: ../src/empathy-invite-participant-dialog.c:203
+#: ../src/empathy-invite-participant-dialog.c:202
msgid "Choose a contact to invite into the conversation:"
msgstr "Seleccione un contacto para convidalo á conversa:"
-#: ../src/empathy-invite-participant-dialog.c:226
+#: ../src/empathy-invite-participant-dialog.c:225
msgid "Invite"
msgstr "Convidar"
@@ -4896,7 +4634,7 @@ msgid "- Empathy Accounts"
msgstr "- Contas de Empathy"
# rever
-#: ../src/empathy-accounts.c:231
+#: ../src/empathy-accounts.c:232
msgid "Empathy Accounts"
msgstr "Contas de Empathy"
@@ -4913,100 +4651,209 @@ msgid "Empathy Debugger"
msgstr "Depurador de Empathy"
# rever
-#: ../src/empathy-chat.c:109
+#: ../src/empathy-chat.c:106
msgid "- Empathy Chat Client"
msgstr "- Cliente de conversa Empathy"
-#: ../src/empathy-notifications-approver.c:189
+#: ../src/empathy-notifications-approver.c:188
msgid "Respond"
msgstr "Responder"
-#: ../src/empathy-notifications-approver.c:203
-#: ../src/empathy-call-window.c:1529
+#: ../src/empathy-notifications-approver.c:197
+#: ../src/empathy-call-window.c:1490
msgid "Reject"
msgstr "Rexeitar"
# rever
-#: ../src/empathy-notifications-approver.c:208
-#: ../src/empathy-notifications-approver.c:213
-#: ../src/empathy-call-window.c:1530
+#: ../src/empathy-notifications-approver.c:202
+#: ../src/empathy-notifications-approver.c:207
+#: ../src/empathy-call-window.c:1491
msgid "Answer"
msgstr "Responder"
-#: ../src/empathy-notifications-approver.c:213
+#: ../src/empathy-notifications-approver.c:207
msgid "Answer with video"
msgstr "Responder con vídeo"
-#: ../src/empathy-notifications-approver.c:221
-#: ../src/empathy-notifications-approver.c:231
+#: ../src/empathy-notifications-approver.c:215
+#: ../src/empathy-notifications-approver.c:225
msgid "Decline"
msgstr "Rexeitar"
-#: ../src/empathy-notifications-approver.c:225
-#: ../src/empathy-notifications-approver.c:236
+#: ../src/empathy-notifications-approver.c:219
+#: ../src/empathy-notifications-approver.c:230
msgid "Accept"
msgstr "Aceptar"
#. translators: the 'Provide' button is displayed in a notification
#. * bubble when Empathy is asking for an account password; clicking on it
#. * brings the password popup.
-#: ../src/empathy-notifications-approver.c:246
+#: ../src/empathy-notifications-approver.c:240
msgid "Provide"
msgstr "Fornecer"
-#: ../src/empathy-call-observer.c:132
+#: ../src/empathy-call-observer.c:119
#, c-format
msgid "%s just tried to call you, but you were in another call."
msgstr "%s tentou chamarlle, pero vostede estaba noutra chamada."
#. Translators: this is an "Info" label. It should be as short
#. * as possible.
-#: ../src/empathy-call-window.c:1140 ../src/empathy-call-window.c:1162
+#: ../src/empathy-call-window.c:1122 ../src/empathy-call-window.c:1138
msgid "i"
msgstr "Información"
-#: ../src/empathy-call-window.c:2888
+#. translators: Call is a noun and %s is the contact name. This string
+#. * is used in the window title
+#: ../src/empathy-call-window.c:1859
+#, c-format
+msgid "Call with %s"
+msgstr "Chamada con %s"
+
+#: ../src/empathy-call-window.c:2103
+msgid "The IP address as seen by the machine"
+msgstr "O enderezo IP como é visto polo computador"
+
+#: ../src/empathy-call-window.c:2105
+msgid "The IP address as seen by a server on the Internet"
+msgstr "O enderezo IP como é visto por un servidor na Internet"
+
+#: ../src/empathy-call-window.c:2107
+msgid "The IP address of the peer as seen by the other side"
+msgstr "O enderezo IP do par como é visto pola outra parte"
+
+#: ../src/empathy-call-window.c:2109
+msgid "The IP address of a relay server"
+msgstr "O enderezo IP dun servidor de desvío"
+
+#: ../src/empathy-call-window.c:2111
+msgid "The IP address of the multicast group"
+msgstr "O enderezo IP do grupo multicast"
+
+#: ../src/empathy-call-window.c:2858
msgid "On hold"
msgstr "En espera"
-#: ../src/empathy-call-window.c:2891
+#: ../src/empathy-call-window.c:2861
msgid "Mute"
msgstr "Silenciar"
-#: ../src/empathy-call-window.c:2893
+#: ../src/empathy-call-window.c:2863
msgid "Duration"
msgstr "Duración"
# rever
#. Translators: 'status - minutes:seconds' the caller has been connected
-#: ../src/empathy-call-window.c:2896
+#: ../src/empathy-call-window.c:2866
#, c-format
msgid "%s — %d:%02dm"
msgstr "%s — %d:%02dm"
-#: ../src/empathy-call-window.c:3166
+# rever
+#: ../src/empathy-call-window.c:2962
+msgid "Technical Details"
+msgstr "Detalles técnicos"
+
+#: ../src/empathy-call-window.c:3001
+#, c-format
+msgid ""
+"%s's software does not understand any of the audio formats supported by your "
+"computer"
+msgstr ""
+"O software de %s non entende algúns dos formatos de video admitidos polo seu "
+"computador"
+
+#: ../src/empathy-call-window.c:3006
+#, c-format
+msgid ""
+"%s's software does not understand any of the video formats supported by your "
+"computer"
+msgstr ""
+"O software de %s non entende algúns dos formatos de vídeo admitidos polo seu "
+"computador"
+
+#: ../src/empathy-call-window.c:3012
+#, c-format
+msgid ""
+"Can't establish a connection to %s. One of you might be on a network that "
+"does not allow direct connections."
+msgstr ""
+"Non é posíbel estabelecer unha conexión a %s. Un deles pode estar nunha rede "
+"que non permite conexións directas."
+
+#: ../src/empathy-call-window.c:3018
+msgid "There was a failure on the network"
+msgstr "Produciuse un fallo na rede"
+
+#: ../src/empathy-call-window.c:3022
+msgid ""
+"The audio formats necessary for this call are not installed on your computer"
+msgstr "Non ten instalados os formatos de audio necesarios neste computador"
+
+#: ../src/empathy-call-window.c:3025
+msgid ""
+"The video formats necessary for this call are not installed on your computer"
+msgstr "Non ten instalados os formatos de vídeo necesarios neste computador"
+
+#: ../src/empathy-call-window.c:3037
+#, c-format
+msgid ""
+"Something unexpected happened in a Telepathy component. Please <a href=\"%s"
+"\">report this bug</a> and attach logs gathered from the 'Debug' window in "
+"the Help menu."
+msgstr ""
+"Produciuse un fallo non esperado no compoñente Telepathy. <a href=\"%s"
+"\">Informe de este erro</a> e anexe os rexistros que pode ollar na xanela "
+"«Depuración» no menú Axuda."
+
+#: ../src/empathy-call-window.c:3046
+msgid "There was a failure in the call engine"
+msgstr "Produciuse un fallo ao chamar ao motor"
+
+#: ../src/empathy-call-window.c:3049
+msgid "The end of the stream was reached"
+msgstr "Chegouse ao final do fluxo"
+
+#: ../src/empathy-call-window.c:3089
+msgid "Can't establish audio stream"
+msgstr "Non é posíbel estabelecer un fluxo de audio"
+
+#: ../src/empathy-call-window.c:3099
+msgid "Can't establish video stream"
+msgstr "Non é posíbel estabelecer un fluxo de vídeo"
+
+#: ../src/empathy-call-window.c:3136
#, c-format
msgid "Your current balance is %s."
msgstr "O seu crédito actual é %s."
-#: ../src/empathy-call-window.c:3170
+#: ../src/empathy-call-window.c:3140
msgid "Sorry, you don’t have enough credit for that call."
msgstr "Non ten crédito dabondo para facer esta chamada."
-#: ../src/empathy-call-window.c:3172
+#: ../src/empathy-call-window.c:3142
msgid "Top Up"
msgstr "Recargar"
+# rever
+#: ../src/empathy-call.c:195
+msgid "- Empathy Audio/Video Client"
+msgstr "- Cliente de voz/vídeo Empathy"
+
+#: ../src/empathy-call.c:219
+msgid "Empathy Audio/Video Client"
+msgstr "Cliente de voz/vídeo Empathy"
+
#: ../libempathy-gtk/empathy-search-bar.c:243
msgid "_Match case"
msgstr "_Coincidir con capitalizacioÌn"
-#: ../libempathy-gtk/empathy-new-account-dialog.c:144
+#: ../libempathy-gtk/empathy-new-account-dialog.c:129
msgid "What kind of chat account do you have?"
msgstr "Que tipo de conta ten?"
# rever
-#: ../libempathy-gtk/empathy-new-account-dialog.c:166
+#: ../libempathy-gtk/empathy-new-account-dialog.c:151
msgid "Adding new account"
msgstr "Engadindo conta nova"
@@ -5015,7 +4862,7 @@ msgstr "Engadindo conta nova"
msgid "People nearby"
msgstr "Xente cerca"
-#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:150
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:149
msgid ""
"Empathy can automatically discover and chat with the people connected on the "
"same network as you. If you want to use this feature, please check that the "
@@ -5025,7 +4872,7 @@ msgstr ""
"mesma rede que vostede. Se quere usar esta característica, comprobe que os "
"detalles de abaixo son correctos."
-#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:183
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:180
msgid ""
"You can change these details later or disable this feature by choosing <span "
"style=\"italic\">Edit → Accounts</span> in the Contact List."
@@ -5034,6 +4881,149 @@ msgstr ""
"característica usando o diálogo <span style=\"italic\">Editar → Contas</"
"span> na Lista de contactos."
+#~ msgid "Contact Map View"
+#~ msgstr "Vista de mapa de contactos"
+
+#~ msgid "Top up %s (%s)..."
+#~ msgstr "Recargar %s (%s)…"
+
+#~ msgid "Top Up..."
+#~ msgstr "Recargar…"
+
+# rever
+#~ msgid "_Offline Contacts"
+#~ msgstr "Contactos _desconectados"
+
+#~ msgid "Show P_rotocols"
+#~ msgstr "Mostrar p_rotocolos"
+
+#~ msgid "Credit Balance"
+#~ msgstr "Crédito"
+
+#~ msgid "Contacts on a _Map"
+#~ msgstr "Contactos no _mapa"
+
+#~ msgid "Find in Contact _List"
+#~ msgstr "_Buscar na lista de contactos"
+
+# rever
+#~ msgid "Sort by _Name"
+#~ msgstr "Ordenar por _nome"
+
+# rever
+#~ msgid "Sort by _Status"
+#~ msgstr "Ordenar por es_tado"
+
+#~ msgid "Normal Size With _Avatars"
+#~ msgstr "Tamaño normal con _avatares"
+
+#~ msgid "N_ormal Size"
+#~ msgstr "Tamañ_o normal"
+
+#~ msgid "_Compact Size"
+#~ msgstr "Ta_maño compacto"
+
+#~ msgid "_Join…"
+#~ msgstr "_Unirse…"
+
+#~ msgid "Appearance"
+#~ msgstr "Aparencia"
+
+#~ msgid "“%s†is not a valid contact ID"
+#~ msgstr "«%s» non é un ID de contacto válido"
+
+#~ msgid "Contrast"
+#~ msgstr "Contraste"
+
+#~ msgid "Brightness"
+#~ msgstr "Brillo"
+
+#~ msgid "Gamma"
+#~ msgstr "Gamma"
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "_Sidebar"
+#~ msgstr "Barra _lateral"
+
+# rever
+#~ msgid "Audio input"
+#~ msgstr "Entrada de voz"
+
+# rever
+#~ msgid "Video input"
+#~ msgstr "Entrada de vídeo"
+
+#~ msgid "Dialpad"
+#~ msgstr "Teclado de chamada"
+
+# rever
+#~ msgid "Details"
+#~ msgstr "Detalles"
+
+#~ msgctxt "codec"
+#~ msgid "Unknown"
+#~ msgstr "Descoñecido"
+
+# rever
+#~ msgid "Connected — %d:%02dm"
+#~ msgstr "Conectado — %d:%02dm"
+
+#~ msgid "Could not start room listing"
+#~ msgstr "Non foi posíbel arrincar a lista da sala"
+
+#~ msgid "Could not stop room listing"
+#~ msgstr "Non foi posíbel deter a lista da sala"
+
+#~ msgid "Redial"
+#~ msgstr "Remarcar"
+
+#~ msgid "V_ideo"
+#~ msgstr "V_ídeo"
+
+# rever
+#~ msgid "Video Off"
+#~ msgstr "Vídeo desactivado"
+
+#~ msgid "Video Preview"
+#~ msgstr "Previsualizar vídeo"
+
+# rever
+#~ msgid "Video On"
+#~ msgstr "Vídeo activado"
+
+# rever
+#~ msgid "Call the contact again"
+#~ msgstr "Chamar ao contacto de novo"
+
+#~ msgid "Camera Off"
+#~ msgstr "Cámara desactivada"
+
+#~ msgid "Disable camera and stop sending video"
+#~ msgstr "Desactivar cámara e deter o envío do vídeo"
+
+#~ msgid "Preview"
+#~ msgstr "Previsualizar"
+
+#~ msgid "Enable camera but don't send video"
+#~ msgstr "Activar cámara pero non enviar o vídeo"
+
+#~ msgid "Camera On"
+#~ msgstr "Cámara activada"
+
+#~ msgid "Enable camera and send video"
+#~ msgstr "Activar cámara e enviar o vídeo"
+
+#~ msgid "_Enable"
+#~ msgstr "_Activar"
+
+#~ msgid "_Disable"
+#~ msgstr "_Desactivar"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
# rever
#~ msgid "There was an error while importing the accounts."
#~ msgstr "Produciuse un erro ao importar as contas."
@@ -5148,10 +5138,6 @@ msgstr ""
#~ msgstr "Protocolo:"
# rever
-#~ msgid "Show account assistant"
-#~ msgstr "Mostrar o asistente de contas"
-
-# rever
#~ msgid "Select contacts to link"
#~ msgstr "Seleccione os contactos a ligar"
@@ -5352,9 +5338,6 @@ msgstr ""
#~ msgid "_For:"
#~ msgstr "_Por:"
-#~ msgid "_Enabled"
-#~ msgstr "_Activado"
-
#~ msgid "Context"
#~ msgstr "Contexto"
@@ -5421,10 +5404,6 @@ msgstr ""
#~ msgstr "Produciuse un fallo ao reconectar á conversa"
# rever
-#~ msgid "Failed to join chat room"
-#~ msgstr "Produciuse un fallo ao unirse á sala de conversa"
-
-# rever
#~ msgid "Select a destination"
#~ msgstr "Seleccione un destinatario"
diff --git a/po/he.po b/po/he.po
index 79162d0b6..28d1f6b69 100644
--- a/po/he.po
+++ b/po/he.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: empathy\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-24 19:28+0200\n"
-"PO-Revision-Date: 2012-03-24 19:30+0200\n"
+"POT-Creation-Date: 2012-04-13 01:01+0300\n"
+"PO-Revision-Date: 2012-04-13 01:02+0200\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: \n"
"Language: \n"
@@ -39,7 +39,7 @@ msgstr "ניהול חשבונות התכתבות ו־VoIP"
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:2
-#: ../src/empathy-accounts-dialog.c:2513
+#: ../src/empathy-accounts-dialog.c:2527
msgid "Messaging and VoIP Accounts"
msgstr "חשבונות התכתבות ו־VoIP"
@@ -513,19 +513,19 @@ msgstr "הקובץ הנבחר ×ינו קובץ רגיל"
msgid "The selected file is empty"
msgstr "הקובץ הנבחר ריק"
-#: ../libempathy/empathy-message.c:415
+#: ../libempathy/empathy-message.c:407
#: ../src/empathy-call-observer.c:129
#, c-format
msgid "Missed call from %s"
msgstr "שיחה ×©×œ× × ×¢× ×ª×” מ×ת %s"
#. Translators: this is an outgoing call, e.g. 'Called Alice'
-#: ../libempathy/empathy-message.c:419
+#: ../libempathy/empathy-message.c:411
#, c-format
msgid "Called %s"
msgstr "התקשרת ל%s"
-#: ../libempathy/empathy-message.c:422
+#: ../libempathy/empathy-message.c:414
#, c-format
msgid "Call from %s"
msgstr "שיחה מ×ת %s"
@@ -762,7 +762,7 @@ msgid "All accounts"
msgstr "כל החשבונות"
#: ../libempathy-gtk/empathy-account-widget.c:682
-#: ../src/empathy-import-widget.c:336
+#: ../src/empathy-import-widget.c:323
msgid "Account"
msgstr "חשבון"
@@ -799,11 +799,11 @@ msgstr "ה_חלה"
msgid "L_og in"
msgstr "_כניסה"
-#: ../libempathy-gtk/empathy-account-widget.c:1812
+#: ../libempathy-gtk/empathy-account-widget.c:1810
msgid "This account already exists on the server"
msgstr "חשבון ×–×” כבר ×§×™×™× ×¢×œ השרת"
-#: ../libempathy-gtk/empathy-account-widget.c:1816
+#: ../libempathy-gtk/empathy-account-widget.c:1814
msgid "Create a new account on the server"
msgstr "יצירת חשבון חדש על השרת"
@@ -812,19 +812,19 @@ msgstr "יצירת חשבון חדש על השרת"
#. * like: "MyUserName on freenode".
#. * You should reverse the order of these arguments if the
#. * server should come before the login id in your locale.
-#: ../libempathy-gtk/empathy-account-widget.c:2241
+#: ../libempathy-gtk/empathy-account-widget.c:2236
#, c-format
msgid "%1$s on %2$s"
msgstr "â€%1$s על גבי %2$s"
#. To translators: The parameter is the protocol name. The resulting
#. * string will be something like: "Jabber Account"
-#: ../libempathy-gtk/empathy-account-widget.c:2267
+#: ../libempathy-gtk/empathy-account-widget.c:2262
#, c-format
msgid "%s Account"
msgstr "חשבון %s"
-#: ../libempathy-gtk/empathy-account-widget.c:2271
+#: ../libempathy-gtk/empathy-account-widget.c:2266
msgid "New account"
msgstr "חשבון חדש"
@@ -850,7 +850,7 @@ msgstr "מתקד×"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:13
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:14
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5
msgid "Pass_word:"
msgstr "ססמ_ה:"
@@ -860,7 +860,7 @@ msgstr "ססמ_ה:"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:16
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:17
msgid "Remember Password"
msgstr "שמירת הססמה"
@@ -870,7 +870,7 @@ msgstr "שמירת הססמה"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:6
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:17
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:18
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6
#: ../libempathy-gtk/empathy-base-password-dialog.c:261
msgid "Remember password"
@@ -946,36 +946,32 @@ msgstr "מספר מנוי ה־ICQ שלך?"
msgid "What is your ICQ password?"
msgstr "ססמת ה־ICQ שלך?"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:206
-#: ../libempathy-gtk/empathy-account-widget-sip.c:239
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "×וטומטי"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:209
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:212
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:215
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:244
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "הרשמה"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:249
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "×פשרויות"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:252
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "לל×"
@@ -1186,55 +1182,59 @@ msgid "Keep-Alive Options"
msgstr "×פשרויות Keep-Alive"
#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:9
+msgid "Local IP Address:"
+msgstr "כתובת IP מקומית:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:10
msgid "Loose Routing"
msgstr "Loose Routing"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:11
msgid "Mechanism:"
msgstr "מנגנון:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:12
msgid "Miscellaneous Options"
msgstr "×פשרויות ×חרות"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:12
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:13
msgid "NAT Traversal Options"
msgstr "×פשרויות מעקף NAT"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:14
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:15
msgid "Port:"
msgstr "_פתחה:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:15
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:16
msgid "Proxy Options"
msgstr "×פשרויות מתווך"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:18
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:19
msgid "STUN Server:"
msgstr "שרת STUN:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:19
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:20
#: ../libempathy-gtk/empathy-contactinfo-utils.c:114
msgid "Server:"
msgstr "שרת:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:20
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
msgid "Transport:"
msgstr "תעבורה:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
msgid "Use this account to call _landlines and mobile phones"
msgstr "יש להשתמש בחשבון ×–×” על מנת להתקשר ×œ×˜×œ×¤×•× ×™× × ×™×™_×—×™× ×•× ×™×™×“×™×"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP account password?"
msgstr "מהי ססמת חשבון ה־SIP שלך?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP login ID?"
msgstr "מהו מזהה ההתחברות של חשבון ה־SIP שלך?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "_Username:"
msgstr "ש_× ×ž×©×ª×ž×©:"
@@ -1320,194 +1320,194 @@ msgstr "×ין תמיכה בשיחות ×—×™×¨×•× ×‘×¤×¨×•×˜×•×§×•×œ ×–×”"
msgid "You don't have enough credit in order to place this call"
msgstr "×ין לך די ×שר××™ כדי לבצע שיחה זו"
-#: ../libempathy-gtk/empathy-chat.c:729
+#: ../libempathy-gtk/empathy-chat.c:727
msgid "Failed to open private chat"
msgstr "×רע כשל בפתיחת שיחה פרטית"
-#: ../libempathy-gtk/empathy-chat.c:787
+#: ../libempathy-gtk/empathy-chat.c:785
msgid "Topic not supported on this conversation"
msgstr "×ין תמיכה בשימוש ×‘× ×•×©× ×‘×“×™×•×Ÿ ×–×”"
-#: ../libempathy-gtk/empathy-chat.c:793
+#: ../libempathy-gtk/empathy-chat.c:791
msgid "You are not allowed to change the topic"
msgstr "×ין לך הרש××” לשנות ×ת הנוש×"
-#: ../libempathy-gtk/empathy-chat.c:992
+#: ../libempathy-gtk/empathy-chat.c:990
#, c-format
msgid "“%s†is not a valid contact ID"
msgstr "\"%s\" ×ינו מזהה ×יש קשר ×œ× ×ª×§×™×Ÿ"
-#: ../libempathy-gtk/empathy-chat.c:1087
+#: ../libempathy-gtk/empathy-chat.c:1085
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear: פינוי כל ההודעות מהדיון הנוכחי"
-#: ../libempathy-gtk/empathy-chat.c:1090
+#: ../libempathy-gtk/empathy-chat.c:1088
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <נוש×>:‎ הגדרת × ×•×©× ×”×©×™×—×” הנוכחית"
-#: ../libempathy-gtk/empathy-chat.c:1093
+#: ../libempathy-gtk/empathy-chat.c:1091
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <זיהוי החדר>:‎ הצטרפות לחדר שיחה חדש"
-#: ../libempathy-gtk/empathy-chat.c:1096
+#: ../libempathy-gtk/empathy-chat.c:1094
msgid "/j <chat room ID>: join a new chat room"
msgstr "/j <זיהוי החדר>:‎ הצטרפות לחדר שיחה חדש"
-#: ../libempathy-gtk/empathy-chat.c:1100
+#: ../libempathy-gtk/empathy-chat.c:1098
msgid "/part [<chat room ID>] [<reason>]: leave the chat room, by default the current one"
msgstr "/part [<זיהוי החדר>]‎ [<סיבה>]:‎ עזיבת ערוץ השיחה, הנוכחי ×”×•× ×‘×¨×¨×ª המחדל"
-#: ../libempathy-gtk/empathy-chat.c:1104
+#: ../libempathy-gtk/empathy-chat.c:1102
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <זיהוי ×יש הקשר> ‎[<הודעה>]:‎ פתיחת צ׳×ט ×ישי"
-#: ../libempathy-gtk/empathy-chat.c:1107
+#: ../libempathy-gtk/empathy-chat.c:1105
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <זיהוי ×יש הקשר>‎ <הודעה>:‎ פתיחת צ׳×ט פרטי"
-#: ../libempathy-gtk/empathy-chat.c:1110
+#: ../libempathy-gtk/empathy-chat.c:1108
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <כינוי>:‎ שינוי הכינוי שלך בשרת הנוכחי"
-#: ../libempathy-gtk/empathy-chat.c:1113
+#: ../libempathy-gtk/empathy-chat.c:1111
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <הודעה>:‎ שליחת הודעת ACTION לדיון הנוכחי"
-#: ../libempathy-gtk/empathy-chat.c:1116
+#: ../libempathy-gtk/empathy-chat.c:1114
msgid "/say <message>: send <message> to the current conversation. This is used to send a message starting with a '/'. For example: \"/say /join is used to join a new chat room\""
msgstr "/say <הודעה>:‎ שליחת <הודעה> לדיון הנוכחי. פקודה זו משמשת לשליחת הודעות המתחילות ב־'/'. לדוגמה: \"/say /join משמשת לצורך התחברות לחדר שיחה חדש\""
-#: ../libempathy-gtk/empathy-chat.c:1121
+#: ../libempathy-gtk/empathy-chat.c:1119
msgid "/whois <contact ID>: display information about a contact"
msgstr "/whois <מזהה המשתמש>:‎ הצגת ×¤×¨×˜×™× ×¢×œ ×יש הקשר"
-#: ../libempathy-gtk/empathy-chat.c:1124
+#: ../libempathy-gtk/empathy-chat.c:1122
msgid "/help [<command>]: show all supported commands. If <command> is defined, show its usage."
msgstr "/help [<פקודה>]:‎ הצגת כל הפקודות הנתמכות. ×× ×™×© הגדרה ל־<פקודה> יוצג ×ופן הפעלתה."
-#: ../libempathy-gtk/empathy-chat.c:1143
+#: ../libempathy-gtk/empathy-chat.c:1141
#, c-format
msgid "Usage: %s"
msgstr "שימוש: %s"
-#: ../libempathy-gtk/empathy-chat.c:1188
+#: ../libempathy-gtk/empathy-chat.c:1186
msgid "Unknown command"
msgstr "פקודה ×œ× ×™×“×•×¢×”"
-#: ../libempathy-gtk/empathy-chat.c:1314
+#: ../libempathy-gtk/empathy-chat.c:1312
msgid "Unknown command; see /help for the available commands"
msgstr "פקודה בלתי מוכרת; יש לעיין ב־‎/help לצפייה בפקודות הזמינות"
-#: ../libempathy-gtk/empathy-chat.c:1565
+#: ../libempathy-gtk/empathy-chat.c:1563
msgid "insufficient balance to send message"
msgstr "המ×זן ×ינו מ×פשר לשלוח הודעה"
-#: ../libempathy-gtk/empathy-chat.c:1569
-#: ../libempathy-gtk/empathy-chat.c:1583
-#: ../libempathy-gtk/empathy-chat.c:1646
+#: ../libempathy-gtk/empathy-chat.c:1567
+#: ../libempathy-gtk/empathy-chat.c:1581
+#: ../libempathy-gtk/empathy-chat.c:1644
#, c-format
msgid "Error sending message '%s': %s"
msgstr "שגי××” בשליחת ההודעה '%s': â€%s"
-#: ../libempathy-gtk/empathy-chat.c:1571
-#: ../libempathy-gtk/empathy-chat.c:1588
-#: ../libempathy-gtk/empathy-chat.c:1650
+#: ../libempathy-gtk/empathy-chat.c:1569
+#: ../libempathy-gtk/empathy-chat.c:1586
+#: ../libempathy-gtk/empathy-chat.c:1648
#, c-format
msgid "Error sending message: %s"
msgstr "שגי××” בשליחת ההודעה: â€%s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1577
+#: ../libempathy-gtk/empathy-chat.c:1575
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr "המ×זן ×ינו מ×פשר לשלוח הודעה. <a href='%s'>Top up</a>."
-#: ../libempathy-gtk/empathy-chat.c:1617
+#: ../libempathy-gtk/empathy-chat.c:1615
msgid "not capable"
msgstr "×œ×œ× ×™×›×•×œ×ª"
-#: ../libempathy-gtk/empathy-chat.c:1624
+#: ../libempathy-gtk/empathy-chat.c:1622
msgid "offline"
msgstr "×œ× ×ž×—×•×‘×¨"
-#: ../libempathy-gtk/empathy-chat.c:1627
+#: ../libempathy-gtk/empathy-chat.c:1625
msgid "invalid contact"
msgstr "×יש קשר ×œ× ×ª×§×™×Ÿ"
-#: ../libempathy-gtk/empathy-chat.c:1630
+#: ../libempathy-gtk/empathy-chat.c:1628
msgid "permission denied"
msgstr "×יש קשר ×œ× ×ª×§×™×Ÿ"
-#: ../libempathy-gtk/empathy-chat.c:1633
+#: ../libempathy-gtk/empathy-chat.c:1631
msgid "too long message"
msgstr "הודעה ×רוכה מדי"
-#: ../libempathy-gtk/empathy-chat.c:1636
+#: ../libempathy-gtk/empathy-chat.c:1634
msgid "not implemented"
msgstr "×œ× ×ž×ž×•×ž×©"
-#: ../libempathy-gtk/empathy-chat.c:1640
+#: ../libempathy-gtk/empathy-chat.c:1638
msgid "unknown"
msgstr "×œ× ×™×“×•×¢"
-#: ../libempathy-gtk/empathy-chat.c:1707
-#: ../src/empathy-chat-window.c:920
+#: ../libempathy-gtk/empathy-chat.c:1705
+#: ../src/empathy-chat-window.c:919
msgid "Topic:"
msgstr "נוש×:"
-#: ../libempathy-gtk/empathy-chat.c:1722
+#: ../libempathy-gtk/empathy-chat.c:1720
#, c-format
msgid "Topic set to: %s"
msgstr "×”× ×•×©× ×”×•×’×“×¨ ל־: %s"
-#: ../libempathy-gtk/empathy-chat.c:1724
+#: ../libempathy-gtk/empathy-chat.c:1722
#, c-format
msgid "Topic set by %s to: %s"
msgstr "×”× ×•×©× ×”×•×’×“×¨ על ידי %s בתור: %s"
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1729
+#: ../libempathy-gtk/empathy-chat.c:1727
msgid "No topic defined"
msgstr "×œ× × ×§×‘×¢ נוש×"
-#: ../libempathy-gtk/empathy-chat.c:2245
+#: ../libempathy-gtk/empathy-chat.c:2243
msgid "(No Suggestions)"
msgstr "(×ין הצעות)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2313
+#: ../libempathy-gtk/empathy-chat.c:2311
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "הוספת '%s' למילון"
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2350
+#: ../libempathy-gtk/empathy-chat.c:2348
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "הוספת '%s' למילון %s"
-#: ../libempathy-gtk/empathy-chat.c:2420
+#: ../libempathy-gtk/empathy-chat.c:2418
msgid "Insert Smiley"
msgstr "הכנס סמיילי"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2438
+#: ../libempathy-gtk/empathy-chat.c:2436
#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "_שלח"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2495
+#: ../libempathy-gtk/empathy-chat.c:2493
msgid "_Spelling Suggestions"
msgstr "הצעות _×יות"
-#: ../libempathy-gtk/empathy-chat.c:2584
+#: ../libempathy-gtk/empathy-chat.c:2582
msgid "Failed to retrieve recent logs"
msgstr "×רע כשל בקבלת הדוחות ×”×חרוני×"
-#: ../libempathy-gtk/empathy-chat.c:2723
+#: ../libempathy-gtk/empathy-chat.c:2721
#, c-format
msgid "%s has disconnected"
msgstr "â€%s התנתק"
@@ -1515,12 +1515,12 @@ msgstr "â€%s התנתק"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2730
+#: ../libempathy-gtk/empathy-chat.c:2728
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "â€%1$s סולק על ידי %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2733
+#: ../libempathy-gtk/empathy-chat.c:2731
#, c-format
msgid "%s was kicked"
msgstr "â€%s סולק"
@@ -1528,17 +1528,17 @@ msgstr "â€%s סולק"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2741
+#: ../libempathy-gtk/empathy-chat.c:2739
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "â€%1$s × ×—×¡× ×¢×œ ידי %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2744
+#: ../libempathy-gtk/empathy-chat.c:2742
#, c-format
msgid "%s was banned"
msgstr "â€%s נחס×"
-#: ../libempathy-gtk/empathy-chat.c:2748
+#: ../libempathy-gtk/empathy-chat.c:2746
#, c-format
msgid "%s has left the room"
msgstr "â€%s עזב ×ת החדר"
@@ -1548,17 +1548,17 @@ msgstr "â€%s עזב ×ת החדר"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2757
+#: ../libempathy-gtk/empathy-chat.c:2755
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: ../libempathy-gtk/empathy-chat.c:2782
+#: ../libempathy-gtk/empathy-chat.c:2780
#, c-format
msgid "%s has joined the room"
msgstr "â€%s הצטרף לחדר"
-#: ../libempathy-gtk/empathy-chat.c:2807
+#: ../libempathy-gtk/empathy-chat.c:2805
#, c-format
msgid "%s is now known as %s"
msgstr "â€%s נודע כעת בכינוי %s"
@@ -1566,58 +1566,58 @@ msgstr "â€%s נודע כעת בכינוי %s"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2994
+#: ../libempathy-gtk/empathy-chat.c:2992
#: ../src/empathy-streamed-media-window.c:1888
#: ../src/empathy-event-manager.c:1279
-#: ../src/empathy-call-window.c:1502
-#: ../src/empathy-call-window.c:1552
-#: ../src/empathy-call-window.c:2590
+#: ../src/empathy-call-window.c:1466
+#: ../src/empathy-call-window.c:1516
+#: ../src/empathy-call-window.c:2562
msgid "Disconnected"
msgstr "מנותק"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3658
+#: ../libempathy-gtk/empathy-chat.c:3656
msgid "Would you like to store this password?"
msgstr "×”×× ×‘×¨×¦×•× ×š ל×חסן ססמה זו?"
-#: ../libempathy-gtk/empathy-chat.c:3664
+#: ../libempathy-gtk/empathy-chat.c:3662
msgid "Remember"
msgstr "שמירה"
-#: ../libempathy-gtk/empathy-chat.c:3674
+#: ../libempathy-gtk/empathy-chat.c:3672
msgid "Not now"
msgstr "×œ× ×›×¢×ª"
-#: ../libempathy-gtk/empathy-chat.c:3718
+#: ../libempathy-gtk/empathy-chat.c:3716
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "ניסיון חוזר"
-#: ../libempathy-gtk/empathy-chat.c:3722
+#: ../libempathy-gtk/empathy-chat.c:3720
msgid "Wrong password; please try again:"
msgstr "ססמה שגויה; × × ×œ× ×¡×•×ª שוב:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3852
+#: ../libempathy-gtk/empathy-chat.c:3850
msgid "This room is protected by a password:"
msgstr "חדר זה מוגן בססמה:"
-#: ../libempathy-gtk/empathy-chat.c:3879
+#: ../libempathy-gtk/empathy-chat.c:3877
msgid "Join"
msgstr "הצטרפות"
-#: ../libempathy-gtk/empathy-chat.c:4071
+#: ../libempathy-gtk/empathy-chat.c:4069
#: ../src/empathy-event-manager.c:1300
msgid "Connected"
msgstr "מחובר"
-#: ../libempathy-gtk/empathy-chat.c:4126
+#: ../libempathy-gtk/empathy-chat.c:4124
msgid "Conversation"
msgstr "שיחה"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4131
+#: ../libempathy-gtk/empathy-chat.c:4129
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
@@ -1648,7 +1648,7 @@ msgstr "עריכת ×נשי הקשר החסומי×"
#. Account and Identifier
#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:506
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:503
#: ../libempathy-gtk/empathy-contact-widget.ui.h:2
#: ../libempathy-gtk/empathy-individual-widget.c:1474
#: ../src/empathy-chatrooms-window.ui.h:1
@@ -1720,157 +1720,157 @@ msgid "_Block User"
msgstr "_חסימת משתמש"
#. Title
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:499
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:496
msgid "Search contacts"
msgstr "חיפוש בין ×נשי הקשר"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:529
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:526
msgid "Search: "
msgstr "חיפוש:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:587
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:584
msgid "_Add Contact"
msgstr "הוספת _×יש קשר"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:602
msgid "No contacts found"
msgstr "×œ× × ×ž×¦×ו ×נשי קשר"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:621
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:618
msgid "Your message introducing yourself:"
msgstr "ההודעה המציגה ×ותך:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:629
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:626
msgid "Please let me see when you're online. Thanks!"
msgstr "× × ×œ×פשר לי לר×ות מתי מצבך ×”×•× ×ž×—×•×‘×¨. תודה!"
-#: ../libempathy-gtk/empathy-contact-widget.c:567
+#: ../libempathy-gtk/empathy-contact-widget.c:566
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "ערוצי×:"
-#: ../libempathy-gtk/empathy-contact-widget.c:747
+#: ../libempathy-gtk/empathy-contact-widget.c:746
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "קוד המדינה בתקן ISO:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:748
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "×רץ:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:750
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "מדינה:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:752
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "עיר:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:754
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "×זור:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:756
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "מיקוד:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:758
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "רחוב:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:760
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "מבנה:"
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:762
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "קומה:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:764
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "חדר:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:766
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "טקסט:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:768
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "תי×ור:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:770
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "כתובת:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:772
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "רמת דיוק:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:774
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "שגי××”:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:776
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "סטייה ×נכית (מטרי×):"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:778
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "סטייה ×ופקית (מטרי×):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:780
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "מהירות:"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:782
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "×זימוט:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:784
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "מהירות הטיפוס:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:786
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "עדכון ×חרון ב־:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:788
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "קו ×ורך:"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:790
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "קו רוחב:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:792
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "גובה:"
-#: ../libempathy-gtk/empathy-contact-widget.c:846
-#: ../libempathy-gtk/empathy-contact-widget.c:861
+#: ../libempathy-gtk/empathy-contact-widget.c:845
+#: ../libempathy-gtk/empathy-contact-widget.c:860
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
#: ../src/empathy-preferences.ui.h:15
@@ -1878,32 +1878,32 @@ msgid "Location"
msgstr "מיקו×"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:862
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s, %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:915
+#: ../libempathy-gtk/empathy-contact-widget.c:914
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "â€%B %e, %Y ב־â€%R â€UTC"
-#: ../libempathy-gtk/empathy-contact-widget.c:997
+#: ../libempathy-gtk/empathy-contact-widget.c:996
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "שמירת תמונה ×ישית"
-#: ../libempathy-gtk/empathy-contact-widget.c:1053
+#: ../libempathy-gtk/empathy-contact-widget.c:1052
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "×œ× × ×™×ª×Ÿ לשמור תמונה ×ישית"
-#: ../libempathy-gtk/empathy-contact-widget.c:1444
+#: ../libempathy-gtk/empathy-contact-widget.c:1454
msgid "Personal Details"
msgstr "×¤×¨×˜×™× ×ישיי×"
-#: ../libempathy-gtk/empathy-contact-widget.c:1447
+#: ../libempathy-gtk/empathy-contact-widget.c:1457
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:2
msgid "Contact Details"
@@ -2012,25 +2012,25 @@ msgstr "מערכת הפעלה:"
msgid "Version:"
msgstr "גרסה:"
-#: ../libempathy-gtk/empathy-groups-widget.c:331
+#: ../libempathy-gtk/empathy-groups-widget.c:327
msgid "Groups"
msgstr "קבוצות"
-#: ../libempathy-gtk/empathy-groups-widget.c:343
+#: ../libempathy-gtk/empathy-groups-widget.c:339
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-groups-widget.c:362
+#: ../libempathy-gtk/empathy-groups-widget.c:358
msgid "_Add Group"
msgstr "הוס_פת קבוצה"
-#: ../libempathy-gtk/empathy-groups-widget.c:397
+#: ../libempathy-gtk/empathy-groups-widget.c:393
msgctxt "verb in a column header displaying group names"
msgid "Select"
msgstr "בחירה"
-#: ../libempathy-gtk/empathy-groups-widget.c:407
-#: ../src/empathy-roster-window.c:1970
+#: ../libempathy-gtk/empathy-groups-widget.c:403
+#: ../src/empathy-roster-window.c:1969
msgid "Group"
msgstr "קבוצה"
@@ -2058,108 +2058,109 @@ msgstr "×נשי קשר מקושרי×"
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:173
+#: ../libempathy-gtk/empathy-individual-menu.c:172
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:345
+#: ../libempathy-gtk/empathy-individual-menu.c:344
msgid "Select account to use to place the call"
msgstr "× × ×œ×‘×—×•×¨ ×ת החשבון לשימוש לצורך ההתקשרות"
#. translators: Call is a noun. This string is used in the window
#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:349
+#: ../libempathy-gtk/empathy-individual-menu.c:348
#: ../libempathy-gtk/empathy-log-window.ui.h:2
#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:2
msgid "Call"
msgstr "התקשרות"
-#: ../libempathy-gtk/empathy-individual-menu.c:414
+#: ../libempathy-gtk/empathy-individual-menu.c:413
msgid "Mobile"
msgstr "סלולרי"
-#: ../libempathy-gtk/empathy-individual-menu.c:416
+#: ../libempathy-gtk/empathy-individual-menu.c:415
msgid "Work"
msgstr "עבודה"
-#: ../libempathy-gtk/empathy-individual-menu.c:418
+#: ../libempathy-gtk/empathy-individual-menu.c:417
msgid "HOME"
msgstr "בית"
-#: ../libempathy-gtk/empathy-individual-menu.c:659
+#: ../libempathy-gtk/empathy-individual-menu.c:658
msgid "_Block Contact"
msgstr "×—_סימת ×יש קשר"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1018
+#: ../libempathy-gtk/empathy-individual-menu.c:1017
#: ../libempathy-gtk/empathy-new-message-dialog.c:319
#: ../src/empathy-roster-window-menubar.ui.h:16
msgid "_Chat"
msgstr "_שיחה"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1053
+#: ../libempathy-gtk/empathy-individual-menu.c:1052
#: ../libempathy-gtk/empathy-new-message-dialog.c:313
msgid "_SMS"
msgstr "_SMS"
-#: ../libempathy-gtk/empathy-individual-menu.c:1086
+#: ../libempathy-gtk/empathy-individual-menu.c:1085
msgctxt "menu item"
msgid "_Audio Call"
msgstr "שיחה _קולית"
-#: ../libempathy-gtk/empathy-individual-menu.c:1119
+#: ../libempathy-gtk/empathy-individual-menu.c:1118
msgctxt "menu item"
msgid "_Video Call"
msgstr "שיחת _ויד×ו"
-#: ../libempathy-gtk/empathy-individual-menu.c:1160
+#: ../libempathy-gtk/empathy-individual-menu.c:1159
#: ../src/empathy-roster-window-menubar.ui.h:26
msgid "_Previous Conversations"
msgstr "שיחות _קודמות"
-#: ../libempathy-gtk/empathy-individual-menu.c:1189
+#: ../libempathy-gtk/empathy-individual-menu.c:1188
msgid "Send File"
msgstr "שליחת קובץ"
-#: ../libempathy-gtk/empathy-individual-menu.c:1219
+#: ../libempathy-gtk/empathy-individual-menu.c:1218
msgid "Share My Desktop"
msgstr "שיתוף שולחן העבודה שלי"
-#: ../libempathy-gtk/empathy-individual-menu.c:1245
+#: ../libempathy-gtk/empathy-individual-menu.c:1244
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "מועדף"
-#: ../libempathy-gtk/empathy-individual-menu.c:1264
+#: ../libempathy-gtk/empathy-individual-menu.c:1263
msgid "gnome-contacts not installed"
msgstr "×œ× ×”×•×ª×§× ×” התכנית gnome-contacts"
-#: ../libempathy-gtk/empathy-individual-menu.c:1267
+#: ../libempathy-gtk/empathy-individual-menu.c:1266
msgid "Please install gnome-contacts to access contacts details."
msgstr "× × ×œ×”×ª×§×™×Ÿ ×ת gnome-contacts כדי לכשת לפרטי ×נשי הקשר."
-#: ../libempathy-gtk/empathy-individual-menu.c:1398
+#: ../libempathy-gtk/empathy-individual-menu.c:1397
msgid "Infor_mation"
msgstr "_מידע"
-#: ../libempathy-gtk/empathy-individual-menu.c:1447
+#: ../libempathy-gtk/empathy-individual-menu.c:1446
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "ע_ריכה"
-#: ../libempathy-gtk/empathy-individual-menu.c:1564
-#: ../src/empathy-chat-window.c:1192
+#. send invitation
+#: ../libempathy-gtk/empathy-individual-menu.c:1562
+#: ../src/empathy-chat-window.c:1190
msgid "Inviting you to this room"
msgstr "מזמין/×” ×ותך לחדר ×–×”"
-#: ../libempathy-gtk/empathy-individual-menu.c:1610
+#: ../libempathy-gtk/empathy-individual-menu.c:1608
msgid "_Invite to Chat Room"
msgstr "ה_זמנה לחדר שיחה"
-#: ../libempathy-gtk/empathy-individual-menu.c:1806
+#: ../libempathy-gtk/empathy-individual-menu.c:1804
#: ../src/empathy-roster-window-menubar.ui.h:14
msgid "_Add Contact…"
msgstr "הוספת _×יש קשר…"
@@ -2237,135 +2238,135 @@ msgstr "שרת חדש"
msgid "SSL"
msgstr "SSL"
-#: ../libempathy-gtk/empathy-log-window.c:620
+#: ../libempathy-gtk/empathy-log-window.c:617
msgid "History"
msgstr "היסטוריה"
-#: ../libempathy-gtk/empathy-log-window.c:675
+#: ../libempathy-gtk/empathy-log-window.c:672
msgid "Show"
msgstr "הצגה"
-#: ../libempathy-gtk/empathy-log-window.c:697
+#: ../libempathy-gtk/empathy-log-window.c:694
msgid "Search"
msgstr "חיפוש"
-#: ../libempathy-gtk/empathy-log-window.c:1148
+#: ../libempathy-gtk/empathy-log-window.c:1145
#, c-format
msgid "Chat in %s"
msgstr "שיחה תחת %s"
-#: ../libempathy-gtk/empathy-log-window.c:1150
+#: ../libempathy-gtk/empathy-log-window.c:1147
#, c-format
msgid "Chat with %s"
msgstr "שיחה ×¢× %s"
-#: ../libempathy-gtk/empathy-log-window.c:1200
-#: ../libempathy-gtk/empathy-log-window.c:1347
+#: ../libempathy-gtk/empathy-log-window.c:1197
+#: ../libempathy-gtk/empathy-log-window.c:1341
msgctxt "A date with the time"
msgid "%A, %e %B %Y %X"
msgstr "%A %d ב%B %Y %X"
#. Translators: this is an emote: '* Danielle waves'
-#: ../libempathy-gtk/empathy-log-window.c:1289
+#: ../libempathy-gtk/empathy-log-window.c:1284
#, c-format
msgid "<i>* %s %s</i>"
msgstr "* %s %s"
#. Translators: this is a message: 'Danielle: hello'
#. * The string in bold is the sender's name
-#: ../libempathy-gtk/empathy-log-window.c:1295
+#: ../libempathy-gtk/empathy-log-window.c:1290
#, c-format
msgid "<b>%s:</b> %s"
msgstr "<b>%s:</b> %s"
-#: ../libempathy-gtk/empathy-log-window.c:1371
+#: ../libempathy-gtk/empathy-log-window.c:1365
#, c-format
msgid "%s second"
msgid_plural "%s seconds"
msgstr[0] "שנייה ×חת"
msgstr[1] "%s שניות"
-#: ../libempathy-gtk/empathy-log-window.c:1378
+#: ../libempathy-gtk/empathy-log-window.c:1372
#, c-format
msgid "%s minute"
msgid_plural "%s minutes"
msgstr[0] "דקה ×חת"
msgstr[1] "%s דקות"
-#: ../libempathy-gtk/empathy-log-window.c:1386
+#: ../libempathy-gtk/empathy-log-window.c:1380
#, c-format
msgid "Call took %s, ended at %s"
msgstr "השיחה ×רכה %s, הסתיימה ב־%s"
-#: ../libempathy-gtk/empathy-log-window.c:1720
+#: ../libempathy-gtk/empathy-log-window.c:1711
msgid "Today"
msgstr "היו×"
-#: ../libempathy-gtk/empathy-log-window.c:1724
+#: ../libempathy-gtk/empathy-log-window.c:1715
msgid "Yesterday"
msgstr "×תמול"
#. Translators: A date such as '23 May 2010' (strftime format)
-#: ../libempathy-gtk/empathy-log-window.c:1739
+#: ../libempathy-gtk/empathy-log-window.c:1730
msgid "%e %B %Y"
msgstr "ה־%e ב%B %Y"
-#: ../libempathy-gtk/empathy-log-window.c:1827
-#: ../libempathy-gtk/empathy-log-window.c:3487
+#: ../libempathy-gtk/empathy-log-window.c:1834
+#: ../libempathy-gtk/empathy-log-window.c:3457
msgid "Anytime"
msgstr "כל זמן שהו×"
-#: ../libempathy-gtk/empathy-log-window.c:1916
-#: ../libempathy-gtk/empathy-log-window.c:2400
+#: ../libempathy-gtk/empathy-log-window.c:1933
+#: ../libempathy-gtk/empathy-log-window.c:2392
msgid "Anyone"
msgstr "כל ×חד"
-#: ../libempathy-gtk/empathy-log-window.c:2713
+#: ../libempathy-gtk/empathy-log-window.c:2705
msgid "Who"
msgstr "מי"
-#: ../libempathy-gtk/empathy-log-window.c:2922
+#: ../libempathy-gtk/empathy-log-window.c:2914
msgid "When"
msgstr "מתי"
-#: ../libempathy-gtk/empathy-log-window.c:3038
+#: ../libempathy-gtk/empathy-log-window.c:3032
msgid "Anything"
msgstr "כל דבר"
-#: ../libempathy-gtk/empathy-log-window.c:3040
+#: ../libempathy-gtk/empathy-log-window.c:3034
msgid "Text chats"
msgstr "מלל הצ׳×טי×"
-#: ../libempathy-gtk/empathy-log-window.c:3042
+#: ../libempathy-gtk/empathy-log-window.c:3035
#: ../src/empathy-preferences.ui.h:4
msgid "Calls"
msgstr "שיחות"
-#: ../libempathy-gtk/empathy-log-window.c:3047
+#: ../libempathy-gtk/empathy-log-window.c:3039
msgid "Incoming calls"
msgstr "שיחות נכנסות"
-#: ../libempathy-gtk/empathy-log-window.c:3048
+#: ../libempathy-gtk/empathy-log-window.c:3040
msgid "Outgoing calls"
msgstr "שיחות יוצ×ות"
-#: ../libempathy-gtk/empathy-log-window.c:3049
+#: ../libempathy-gtk/empathy-log-window.c:3041
msgid "Missed calls"
msgstr "שיחות ×©×œ× × ×¢× ×•"
-#: ../libempathy-gtk/empathy-log-window.c:3071
+#: ../libempathy-gtk/empathy-log-window.c:3061
msgid "What"
msgstr "מה"
-#: ../libempathy-gtk/empathy-log-window.c:3780
+#: ../libempathy-gtk/empathy-log-window.c:3750
msgid "Are you sure you want to delete all logs of previous conversations?"
msgstr "×”×× ×כן ברצונך למחוק ×ת כל ×”×™×•×ž× ×™× ×©×œ ×”×“×™×•× ×™× ×”××—×¨×•× ×™× ×©×œ×š?"
-#: ../libempathy-gtk/empathy-log-window.c:3784
+#: ../libempathy-gtk/empathy-log-window.c:3754
msgid "Clear All"
msgstr "מחיקת הכול"
-#: ../libempathy-gtk/empathy-log-window.c:3791
+#: ../libempathy-gtk/empathy-log-window.c:3761
msgid "Delete from:"
msgstr "מחיקה עד מ־:"
@@ -2497,30 +2498,40 @@ msgstr ""
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:167
-#: ../libempathy-gtk/empathy-presence-chooser.c:203
+#: ../libempathy-gtk/empathy-presence-chooser.c:166
+#: ../libempathy-gtk/empathy-presence-chooser.c:202
msgid "Custom Message…"
msgstr "הודעה מות×מת ×ישית…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:220
-#: ../libempathy-gtk/empathy-presence-chooser.c:222
+#: ../libempathy-gtk/empathy-presence-chooser.c:219
+#: ../libempathy-gtk/empathy-presence-chooser.c:221
msgid "Edit Custom Messages…"
msgstr "עריכת ההודעות המות×מות ×ישית…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:345
+#: ../libempathy-gtk/empathy-presence-chooser.c:344
msgid "Click to remove this status as a favorite"
msgstr "יש ללחוץ כדי להסיר מצב ×–×” מהמועדפי×"
-#: ../libempathy-gtk/empathy-presence-chooser.c:354
+#: ../libempathy-gtk/empathy-presence-chooser.c:353
msgid "Click to make this status a favorite"
msgstr "יש ללחוץ כדי להוסיף מצב ×–×” למועדפי×"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#. Translators: %s is a status message like 'At the pub' for example
+#: ../libempathy-gtk/empathy-presence-chooser.c:387
+#, c-format
+msgid ""
+"<b>Current message: %s</b>\n"
+"<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"
+msgstr ""
+"<b>הודעה נוכחית: %s</b>\n"
+"<small>יש ללחוץ על Enter כדי להגדיר הודעה חדשה ×ו Esc כדי לבטל.</small>"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:396
msgid "Set status"
msgstr "הגדרת מצב"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1147
msgid "Custom messages…"
msgstr "הודעות מות×מות ×ישית…"
@@ -2893,31 +2904,31 @@ msgstr "בחירה..."
msgid "_Select"
msgstr "_בחירה"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:202
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:201
msgid "No error message"
msgstr "×ין הודעת שגי××”"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:275
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:274
msgid "Instant Message (Empathy)"
msgstr "הודעה מיידית (Empathy)"
-#: ../src/empathy.c:435
+#: ../src/empathy.c:425
msgid "Don't connect on startup"
msgstr "×œ× ×œ×”×ª×—×‘×¨ בהפעלה"
-#: ../src/empathy.c:439
+#: ../src/empathy.c:429
msgid "Don't display the contact list or any other dialogs on startup"
msgstr "×ין להציג ×ת רשימת ×נשי הקשר ×ו כל דו־שיח ×חר בהפעלה"
-#: ../src/empathy.c:454
+#: ../src/empathy.c:444
msgid "- Empathy IM Client"
msgstr "- לקוח ×”×ž×¡×¨×™× ×”×ž×™×“×™×™× Empathy"
-#: ../src/empathy.c:641
+#: ../src/empathy.c:620
msgid "Error contacting the Account Manager"
msgstr "שגי××” ביצירת קשר ×¢× ×ž× ×”×œ החשבונות"
-#: ../src/empathy.c:643
+#: ../src/empathy.c:622
#, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. The error was:\n"
@@ -2955,75 +2966,75 @@ msgstr ""
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:72
+#: ../src/empathy-accounts-dialog.c:71
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "×™×©× × ×©×™× ×•×™×™× ×©×œ× × ×©×ž×¨×• בחשבון ×”Ö¾%s שלך."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:76
+#: ../src/empathy-accounts-dialog.c:75
msgid "Your new account has not been saved yet."
msgstr "החשבון החדש שלך ×œ× × ×©×ž×¨ עדיין."
-#: ../src/empathy-accounts-dialog.c:381
+#: ../src/empathy-accounts-dialog.c:404
#: ../src/empathy-streamed-media-window.c:759
-#: ../src/empathy-call-window.c:1289
+#: ../src/empathy-call-window.c:1267
msgid "Connecting…"
msgstr "בהתחברות…"
-#: ../src/empathy-accounts-dialog.c:422
+#: ../src/empathy-accounts-dialog.c:445
#, c-format
msgid "Offline — %s"
msgstr "×œ× ×ž×—×•×‘×¨ — %s"
-#: ../src/empathy-accounts-dialog.c:434
+#: ../src/empathy-accounts-dialog.c:457
#, c-format
msgid "Disconnected — %s"
msgstr "מנותק — %s"
-#: ../src/empathy-accounts-dialog.c:445
+#: ../src/empathy-accounts-dialog.c:468
msgid "Offline — No Network Connection"
msgstr "מנותק — ×ין חיבור לרשת"
-#: ../src/empathy-accounts-dialog.c:452
+#: ../src/empathy-accounts-dialog.c:475
msgid "Unknown Status"
msgstr "מצב ×œ× ×™×“×•×¢"
-#: ../src/empathy-accounts-dialog.c:469
+#: ../src/empathy-accounts-dialog.c:492
msgid "This account has been disabled because it relies on an old, unsupported backend. Please install telepathy-haze and restart your session to migrate the account."
msgstr "חשבון ×–×” נוטרל כיוון ×©×”×•× × ×©×¢×Ÿ על מנגנון ישן ש×ינו נתמך עוד. × × ×œ×”×ª×§×™×Ÿ ×ת telepathy-haze ולצ×ת ולהיכנס לחשבון המשתמש שלך כדי ×œ×™×™×‘× ×ת החשבון."
-#: ../src/empathy-accounts-dialog.c:479
+#: ../src/empathy-accounts-dialog.c:502
msgid "Offline — Account Disabled"
msgstr "מנותק — החשבון מנוטרל"
-#: ../src/empathy-accounts-dialog.c:585
+#: ../src/empathy-accounts-dialog.c:608
msgid "Edit Connection Parameters"
msgstr "עריכת הגדרות החיבור"
-#: ../src/empathy-accounts-dialog.c:750
+#: ../src/empathy-accounts-dialog.c:773
msgid "Failed to retrieve your personal information from the server."
msgstr "×ירע כשל בקבלת ×”×¤×¨×˜×™× ×”××™×©×™×™× ×©×œ×š מהשרת."
-#: ../src/empathy-accounts-dialog.c:756
+#: ../src/empathy-accounts-dialog.c:779
msgid "Go online to edit your personal information."
msgstr "עליך להתחבר כדי לערוך ×ת ×”×¤×¨×˜×™× ×”××™×©×™×™× ×©×œ×š."
-#: ../src/empathy-accounts-dialog.c:843
+#: ../src/empathy-accounts-dialog.c:866
msgid "_Edit Connection Parameters..."
msgstr "ע_ריכת הגדרות החיבור..."
-#: ../src/empathy-accounts-dialog.c:1339
+#: ../src/empathy-accounts-dialog.c:1362
#, c-format
msgid "Do you want to remove %s from your computer?"
msgstr "×”×× ×‘×¨×¦×•× ×š להסיר ×ת החשבון '%s' ממחשבך?"
-#: ../src/empathy-accounts-dialog.c:1343
+#: ../src/empathy-accounts-dialog.c:1366
msgid "This will not remove your account on the server."
msgstr "פעולה זו ×œ× ×ª×¡×™×¨ ×ת חשבונך מהשרת."
-#: ../src/empathy-accounts-dialog.c:1579
+#: ../src/empathy-accounts-dialog.c:1571
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3031,24 +3042,25 @@ msgstr ""
"×תה עומד לבחור חשבון חדש, מה שיבטל\n"
"×ת ×”×©×™× ×•×™×™× ×©×œ×š. ×”×ת ×תה בטוח שברצונך להמשיך?"
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1755
-msgid "_Enable"
-msgstr "ה_פעלה"
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1762
+msgid "_Enabled"
+msgstr "מו_פעל"
-#: ../src/empathy-accounts-dialog.c:1756
-msgid "_Disable"
-msgstr "נ_טרול"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1785
+msgid "Rename"
+msgstr "שנה ש×"
-#: ../src/empathy-accounts-dialog.c:2184
+#: ../src/empathy-accounts-dialog.c:2201
msgid "_Skip"
msgstr "_דילוג"
-#: ../src/empathy-accounts-dialog.c:2188
+#: ../src/empathy-accounts-dialog.c:2205
msgid "_Connect"
msgstr "הת_חברות"
-#: ../src/empathy-accounts-dialog.c:2365
+#: ../src/empathy-accounts-dialog.c:2384
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3072,21 +3084,21 @@ msgstr "על מנת להוסיף חשבון חדש עליך להתקין מנו×
msgid "_Import…"
msgstr "×™_בו×…"
-#: ../src/empathy-auth-client.c:288
+#: ../src/empathy-auth-client.c:286
msgid " - Empathy authentication client"
msgstr "- לקוח ×”×ימות של Empathy"
-#: ../src/empathy-auth-client.c:304
+#: ../src/empathy-auth-client.c:302
msgid "Empathy authentication client"
msgstr "לקוח ×”×ימות של Empathy"
-#: ../src/empathy-av.c:118
-#: ../src/empathy-call.c:201
+#: ../src/empathy-av.c:115
+#: ../src/empathy-call.c:198
msgid "- Empathy Audio/Video Client"
msgstr "- לקוח השמע/הוויד×ו Empathy"
-#: ../src/empathy-av.c:134
-#: ../src/empathy-call.c:223
+#: ../src/empathy-av.c:131
+#: ../src/empathy-call.c:220
msgid "Empathy Audio/Video Client"
msgstr "לקוח השמע/הוויד×ו Empathy"
@@ -3129,33 +3141,33 @@ msgstr "פרטי×"
#. translators: Call is a noun and %s is the contact name. This string
#. * is used in the window title
#: ../src/empathy-streamed-media-window.c:1211
-#: ../src/empathy-call-window.c:1889
+#: ../src/empathy-call-window.c:1861
#, c-format
msgid "Call with %s"
msgstr "שיחה ×¢× %s"
#: ../src/empathy-streamed-media-window.c:1444
-#: ../src/empathy-call-window.c:2133
+#: ../src/empathy-call-window.c:2105
msgid "The IP address as seen by the machine"
msgstr "כתובת ×”Ö¾IP כפי שנר×ית על ידי המחשב"
#: ../src/empathy-streamed-media-window.c:1446
-#: ../src/empathy-call-window.c:2135
+#: ../src/empathy-call-window.c:2107
msgid "The IP address as seen by a server on the Internet"
msgstr "כתובת ×”Ö¾IP כפי שנר×ית על ידי שרת ב×ינטרנט"
#: ../src/empathy-streamed-media-window.c:1448
-#: ../src/empathy-call-window.c:2137
+#: ../src/empathy-call-window.c:2109
msgid "The IP address of the peer as seen by the other side"
msgstr "כתובת ×”Ö¾IP כדי שנר×ית על ידי עמית מהצד השני"
#: ../src/empathy-streamed-media-window.c:1450
-#: ../src/empathy-call-window.c:2139
+#: ../src/empathy-call-window.c:2111
msgid "The IP address of a relay server"
msgstr "כתובת ה־IP של שרת הממסר"
#: ../src/empathy-streamed-media-window.c:1452
-#: ../src/empathy-call-window.c:2141
+#: ../src/empathy-call-window.c:2113
msgid "The IP address of the multicast group"
msgstr "כתובת ה־IP של קבוצת התשדורת"
@@ -3174,66 +3186,66 @@ msgid "Connected — %d:%02dm"
msgstr "מחובר — %d:%02d דק׳"
#: ../src/empathy-streamed-media-window.c:2199
-#: ../src/empathy-call-window.c:2992
+#: ../src/empathy-call-window.c:2964
msgid "Technical Details"
msgstr "×¤×¨×˜×™× ×˜×›× ×™×™×"
#: ../src/empathy-streamed-media-window.c:2237
-#: ../src/empathy-call-window.c:3031
+#: ../src/empathy-call-window.c:3003
#, c-format
msgid "%s's software does not understand any of the audio formats supported by your computer"
msgstr "התכנה של %s ××™× ×” מבינה ×ת מבני השמע ×”× ×ª×ž×›×™× ×¢×œ ידי המחשב שלך"
#: ../src/empathy-streamed-media-window.c:2242
-#: ../src/empathy-call-window.c:3036
+#: ../src/empathy-call-window.c:3008
#, c-format
msgid "%s's software does not understand any of the video formats supported by your computer"
msgstr "התכנה של %s ××™× ×” מבינה ×ת מבני הוויד×ו ×”× ×ª×ž×›×™× ×¢×œ ידי המחשב שלך"
#: ../src/empathy-streamed-media-window.c:2248
-#: ../src/empathy-call-window.c:3042
+#: ../src/empathy-call-window.c:3014
#, c-format
msgid "Can't establish a connection to %s. One of you might be on a network that does not allow direct connections."
msgstr "×œ× × ×™×ª×Ÿ להפעיל ×ת החיבור ×ל %s. כנר××” ×חד ממשתתפי השיחה מחובר לרשת ש××™× ×” מ×פשרת ×—×™×‘×•×¨×™× ×™×©×™×¨×™×."
#: ../src/empathy-streamed-media-window.c:2254
-#: ../src/empathy-call-window.c:3048
+#: ../src/empathy-call-window.c:3020
msgid "There was a failure on the network"
msgstr "×ירעה שגי××” ברשת"
#: ../src/empathy-streamed-media-window.c:2258
-#: ../src/empathy-call-window.c:3052
+#: ../src/empathy-call-window.c:3024
msgid "The audio formats necessary for this call are not installed on your computer"
msgstr "מבני השמע ×”×“×¨×•×©×™× ×œ×§×™×•× ×©×™×—×” זו ××™× × ×ž×•×ª×§× ×™× ×‘×ž×—×©×‘×š"
#: ../src/empathy-streamed-media-window.c:2261
-#: ../src/empathy-call-window.c:3055
+#: ../src/empathy-call-window.c:3027
msgid "The video formats necessary for this call are not installed on your computer"
msgstr "מבני הוויד×ו ×”×“×¨×•×©×™× ×œ×§×™×•× ×©×™×—×” זו ××™× × ×ž×•×ª×§× ×™× ×‘×ž×—×©×‘×š"
#: ../src/empathy-streamed-media-window.c:2271
-#: ../src/empathy-call-window.c:3067
+#: ../src/empathy-call-window.c:3039
#, c-format
msgid "Something unexpected happened in a Telepathy component. Please <a href=\"%s\">report this bug</a> and attach logs gathered from the 'Debug' window in the Help menu."
msgstr "משהו בלתי צפוי ×רע ברכיב של Telepathy. × × <a href=\"%s\">לדווח על ב××’ ×–×”</a> ולהוסיף דוחות שנ×ספו מחלון 'ניפוי השגי×ות' שבתפריט העזרה."
#: ../src/empathy-streamed-media-window.c:2279
-#: ../src/empathy-call-window.c:3076
+#: ../src/empathy-call-window.c:3048
msgid "There was a failure in the call engine"
msgstr "×ירעה שגי××” במנוע הקרי××”"
#: ../src/empathy-streamed-media-window.c:2282
-#: ../src/empathy-call-window.c:3079
+#: ../src/empathy-call-window.c:3051
msgid "The end of the stream was reached"
msgstr "×”×ª×–×¨×™× ×”×’×™×¢ לסיומו"
#: ../src/empathy-streamed-media-window.c:2322
-#: ../src/empathy-call-window.c:3119
+#: ../src/empathy-call-window.c:3091
msgid "Can't establish audio stream"
msgstr "×œ× × ×™×ª×Ÿ ×œ×§×™×™× ×ª×–×¨×™× ×©×ž×¢"
#: ../src/empathy-streamed-media-window.c:2332
-#: ../src/empathy-call-window.c:3129
+#: ../src/empathy-call-window.c:3101
msgid "Can't establish video stream"
msgstr "×œ× × ×™×ª×Ÿ ×œ×§×™×™× ×ª×–×¨×™× ×•×™×“×ו"
@@ -3325,10 +3337,10 @@ msgstr "החלפת מצב העברת ויד×ו"
#: ../src/empathy-call-window.ui.h:21
#: ../src/empathy-streamed-media-window.ui.h:18
-#: ../src/empathy-call-window.c:2542
-#: ../src/empathy-call-window.c:2543
-#: ../src/empathy-call-window.c:2544
-#: ../src/empathy-call-window.c:2545
+#: ../src/empathy-call-window.c:2514
+#: ../src/empathy-call-window.c:2515
+#: ../src/empathy-call-window.c:2516
+#: ../src/empathy-call-window.c:2517
msgid "Unknown"
msgstr "×œ× ×™×“×•×¢"
@@ -3376,80 +3388,80 @@ msgstr "ה_גדרות"
msgid "_View"
msgstr "_תצוגה"
-#: ../src/empathy-chat-window.c:289
+#: ../src/empathy-chat-window.c:288
msgid "Close this window?"
msgstr "×”×× ×œ×¡×’×•×¨ חלון ×–×”?"
-#: ../src/empathy-chat-window.c:294
+#: ../src/empathy-chat-window.c:293
#, c-format
msgid "Closing this window will leave %s. You will not receive any further messages until you rejoin it."
msgstr "סגירת חלון ×–×” ×ª×’×¨×•× ×œ×¢×–×™×‘×ª %s. ×œ× ×™×ª×§×‘×œ×• עוד הודעות על להצטרפותך ×ליו מחדש."
-#: ../src/empathy-chat-window.c:305
+#: ../src/empathy-chat-window.c:304
#, c-format
msgid "Closing this window will leave a chat room. You will not receive any further messages until you rejoin it."
msgid_plural "Closing this window will leave %u chat rooms. You will not receive any further messages until you rejoin them."
msgstr[0] "סגירת חלון ×–×” תוביל לעזיבת חדר הצ׳×ט. ×œ× ×™×ª×§×‘×œ×• עוד הודעות עד להתחברותך מחדש ×ליו."
msgstr[1] "סגירת חלון ×–×” תוביל לעזיבת %u חדרי הצ׳×ט. ×œ× ×™×ª×§×‘×œ×• עוד הודעות עד להתחברותך מחדש ×ליה×."
-#: ../src/empathy-chat-window.c:314
+#: ../src/empathy-chat-window.c:313
#, c-format
msgid "Leave %s?"
msgstr "×”×× ×œ×¢×–×•×‘ ×ת %s?"
-#: ../src/empathy-chat-window.c:315
+#: ../src/empathy-chat-window.c:314
msgid "You will not receive any further messages from this chat room until you rejoin it."
msgstr "×œ× ×™×ª×§×‘×œ×• עוד הודעות מחדר צ׳×ט ×–×” עד להצטרפותך המחודשת ×ליו."
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Close window"
msgstr "סגירת החלון"
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Leave room"
msgstr "עזיבת החדר"
-#: ../src/empathy-chat-window.c:640
-#: ../src/empathy-chat-window.c:660
+#: ../src/empathy-chat-window.c:639
+#: ../src/empathy-chat-window.c:659
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
msgstr[0] "â€%s (×חת ×©×œ× × ×§×¨××”)"
msgstr[1] "â€%s â€(%d ×©×œ× × ×§×¨×ו)"
-#: ../src/empathy-chat-window.c:652
+#: ../src/empathy-chat-window.c:651
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
msgstr[0] "â€%s (ו×חד נוסף)"
msgstr[1] "â€%s (ו־%u נוספי×)"
-#: ../src/empathy-chat-window.c:668
+#: ../src/empathy-chat-window.c:667
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
msgstr[0] "â€%s (×חת ×©×œ× × ×§×¨××” מ×חרי×)"
msgstr[1] "â€%s (%d ×©×œ× × ×§×¨×ו מ×חרי×)"
-#: ../src/empathy-chat-window.c:677
+#: ../src/empathy-chat-window.c:676
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
msgstr[0] "â€%s (×חת ×©×œ× × ×§×¨××” מכול×)"
msgstr[1] "â€%s (%d ×©×œ× × ×§×¨×ו מכול×)"
-#: ../src/empathy-chat-window.c:892
+#: ../src/empathy-chat-window.c:891
msgid "SMS:"
msgstr "SMS:"
-#: ../src/empathy-chat-window.c:902
+#: ../src/empathy-chat-window.c:901
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
msgstr[0] "נשלחת הודעה ×חת"
msgstr[1] "נשלחות %d הודעות"
-#: ../src/empathy-chat-window.c:924
+#: ../src/empathy-chat-window.c:923
msgid "Typing a message."
msgstr "הודעה מוקלדת."
@@ -3535,7 +3547,7 @@ msgid "Incoming video call"
msgstr "שיחה קולית נכנסת"
#: ../src/empathy-event-manager.c:522
-#: ../src/empathy-call-window.c:1519
+#: ../src/empathy-call-window.c:1483
msgid "Incoming call"
msgstr "שיחה נכנסת"
@@ -3552,7 +3564,7 @@ msgstr "â€%s מתקשר ×ליך, ×”×× ×‘×¨×¦×•× ×š לענות?"
#: ../src/empathy-event-manager.c:530
#: ../src/empathy-event-manager.c:731
#: ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
+#: ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming call from %s"
msgstr "שיחה נכנסת מ־%s"
@@ -3572,7 +3584,7 @@ msgstr "מ_×¢× ×” ×¢× ×•×™×“×ו"
#: ../src/empathy-event-manager.c:731
#: ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
+#: ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming video call from %s"
msgstr "שיחת ויד×ו נכנסת מ־%s"
@@ -3616,7 +3628,7 @@ msgid "Incoming file transfer from %s"
msgstr "העברת ×§×‘×¦×™× × ×›× ×¡×ª מ־%s"
#: ../src/empathy-event-manager.c:1146
-#: ../src/empathy-roster-window.c:374
+#: ../src/empathy-roster-window.c:373
msgid "Password required"
msgstr "נדרשת ססמה"
@@ -3761,87 +3773,87 @@ msgid "Import Accounts"
msgstr "×™×‘×•× ×—×©×‘×•× ×•×ª"
#. Translators: this is the header of a treeview column
-#: ../src/empathy-import-widget.c:316
+#: ../src/empathy-import-widget.c:303
msgid "Import"
msgstr "יבו×"
-#: ../src/empathy-import-widget.c:325
+#: ../src/empathy-import-widget.c:312
msgid "Protocol"
msgstr "פרוטוקול"
-#: ../src/empathy-import-widget.c:349
+#: ../src/empathy-import-widget.c:336
msgid "Source"
msgstr "מקור"
-#: ../src/empathy-roster-window.c:391
+#: ../src/empathy-roster-window.c:390
msgid "Provide Password"
msgstr "הזנת ססמה"
-#: ../src/empathy-roster-window.c:397
+#: ../src/empathy-roster-window.c:396
msgid "Disconnect"
msgstr "ניתוק"
-#: ../src/empathy-roster-window.c:657
+#: ../src/empathy-roster-window.c:656
msgid "You need to setup an account to see contacts here."
msgstr "עליך להגדיר חשבון כדי שיופיעו ×›×ן ×נשי קשר."
-#: ../src/empathy-roster-window.c:673
+#: ../src/empathy-roster-window.c:672
msgid "No match found"
msgstr "×œ× × ×ž×¦××” הת×מה"
-#: ../src/empathy-roster-window.c:783
+#: ../src/empathy-roster-window.c:782
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr "×œ× × ×™×ª×Ÿ להשתמש בחשבונות %s עד שהתכנה %s תעודכן, עמך הסליחה."
-#: ../src/empathy-roster-window.c:849
+#: ../src/empathy-roster-window.c:848
msgid "Update software..."
msgstr "עדכון התכנה..."
-#: ../src/empathy-roster-window.c:855
-#: ../src/empathy-roster-window.c:972
+#: ../src/empathy-roster-window.c:854
+#: ../src/empathy-roster-window.c:971
msgid "Close"
msgstr "סגירה"
-#: ../src/empathy-roster-window.c:960
+#: ../src/empathy-roster-window.c:959
msgid "Reconnect"
msgstr "התחברות מחדש"
-#: ../src/empathy-roster-window.c:966
+#: ../src/empathy-roster-window.c:965
msgid "Edit Account"
msgstr "עריכת חשבון"
#. Translators: this string will be something like:
#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1110
+#: ../src/empathy-roster-window.c:1109
#, c-format
msgid "Top up %s (%s)..."
msgstr "Top up %s (%s)..."
-#: ../src/empathy-roster-window.c:1156
+#: ../src/empathy-roster-window.c:1155
msgid "Top up account credit"
msgstr "×שר××™ חשבון ×”Ö¾Top up"
#. top up button
-#: ../src/empathy-roster-window.c:1228
+#: ../src/empathy-roster-window.c:1227
msgid "Top Up..."
msgstr "Top Up..."
-#: ../src/empathy-roster-window.c:1952
+#: ../src/empathy-roster-window.c:1951
msgid "Contact"
msgstr "×יש קשר"
-#: ../src/empathy-roster-window.c:2150
+#: ../src/empathy-roster-window.c:2149
msgid "You need to enable one of your accounts to see contacts here."
msgstr "עליך להפעיל ×ת ×חד החשבונות שלך כדי שיופיעו ×›×ן ×נשי קשר."
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2158
+#: ../src/empathy-roster-window.c:2157
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr "עליך להפעיל ×ת %s כדי שיופיעו ×›×ן ×נשי קשר."
-#: ../src/empathy-roster-window.c:2460
+#: ../src/empathy-roster-window.c:2459
msgid "Contact List"
msgstr "רשימת ×נשי קשר"
@@ -3945,7 +3957,7 @@ msgstr "חברי×"
#. Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
#. yes/no, yes/no and a number.
-#: ../src/empathy-new-chatroom-dialog.c:637
+#: ../src/empathy-new-chatroom-dialog.c:636
#, c-format
msgid ""
"%s\n"
@@ -3958,21 +3970,21 @@ msgstr ""
"נדרשת ססמה: %s\n"
"חברי×: %s"
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "Yes"
msgstr "כן"
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "No"
msgstr "ל×"
-#: ../src/empathy-new-chatroom-dialog.c:668
+#: ../src/empathy-new-chatroom-dialog.c:666
msgid "Could not start room listing"
msgstr "×œ× × ×™×ª×Ÿ להתחיל ×ת הצגת החדרי×"
-#: ../src/empathy-new-chatroom-dialog.c:678
+#: ../src/empathy-new-chatroom-dialog.c:676
msgid "Could not stop room listing"
msgstr "×œ× × ×™×ª×Ÿ לעצור ×ת הצגת החדרי×"
@@ -4033,46 +4045,46 @@ msgid "Language"
msgstr "שפה"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:726
+#: ../src/empathy-preferences.c:724
msgid "Juliet"
msgstr "יוליה"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:733
+#: ../src/empathy-preferences.c:731
msgid "Romeo"
msgstr "רומי×ו"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:739
+#: ../src/empathy-preferences.c:737
msgid "O Romeo, Romeo, wherefore art thou Romeo?"
msgstr "הו רומי×ו, רומי×ו, מן ×ין שבת רומי×ו?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:743
+#: ../src/empathy-preferences.c:741
msgid "Deny thy father and refuse thy name;"
msgstr "התכחש ל×ביך וסרב לשמו;"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:746
+#: ../src/empathy-preferences.c:744
msgid "Or if thou wilt not, be but sworn my love"
msgstr "×ו ×× ×œ× ×ª×¡×›×™×, ×שבע לך ב×הבתי"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:749
+#: ../src/empathy-preferences.c:747
msgid "And I'll no longer be a Capulet."
msgstr "×•×œ× ××”×™×” עוד בת קפולט."
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:752
+#: ../src/empathy-preferences.c:750
msgid "Shall I hear more, or shall I speak at this?"
msgstr "×”×× ×“×™×‘×¨×ª×™ די ×ו ×©×ž× ×וסיף לדבר?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:755
+#: ../src/empathy-preferences.c:753
msgid "Juliet has disconnected"
msgstr "יוליה התנתקה"
-#: ../src/empathy-preferences.c:1159
+#: ../src/empathy-preferences.c:1157
msgid "Preferences"
msgstr "העדפות"
@@ -4362,16 +4374,16 @@ msgstr "רמה"
msgid "The selected connection manager does not support the remote debugging extension."
msgstr "מנהל ×”×—×™×‘×•×¨×™× ×©× ×‘×—×¨ ×ינו תומך בהרחבת ניפוי שגי×ות מרחוק."
-#: ../src/empathy-invite-participant-dialog.c:202
-#: ../src/empathy-invite-participant-dialog.c:230
+#: ../src/empathy-invite-participant-dialog.c:200
+#: ../src/empathy-invite-participant-dialog.c:228
msgid "Invite Participant"
msgstr "הזמנת משתתפי×"
-#: ../src/empathy-invite-participant-dialog.c:203
+#: ../src/empathy-invite-participant-dialog.c:201
msgid "Choose a contact to invite into the conversation:"
msgstr "× × ×œ×‘×—×•×¨ ×נשי קשר להזמנה לדיון:"
-#: ../src/empathy-invite-participant-dialog.c:226
+#: ../src/empathy-invite-participant-dialog.c:224
msgid "Invite"
msgstr "הזמנה"
@@ -4395,7 +4407,7 @@ msgstr "<account-id>"
msgid "- Empathy Accounts"
msgstr "- חשבונות Empathy"
-#: ../src/empathy-accounts.c:231
+#: ../src/empathy-accounts.c:230
msgid "Empathy Accounts"
msgstr "חשבונות Empathy"
@@ -4407,47 +4419,47 @@ msgstr "הצגת שירות מסוי×"
msgid "- Empathy Debugger"
msgstr "- מנפה השגי×ות של Empathy"
-#: ../src/empathy-debugger.c:113
+#: ../src/empathy-debugger.c:112
msgid "Empathy Debugger"
msgstr "מנפה השגי×ות של Empathy"
-#: ../src/empathy-chat.c:109
+#: ../src/empathy-chat.c:106
msgid "- Empathy Chat Client"
msgstr "- לקוח הצ׳××˜×™× Empathy"
-#: ../src/empathy-notifications-approver.c:189
+#: ../src/empathy-notifications-approver.c:190
msgid "Respond"
msgstr "תגובה"
-#: ../src/empathy-notifications-approver.c:203
-#: ../src/empathy-call-window.c:1529
+#: ../src/empathy-notifications-approver.c:204
+#: ../src/empathy-call-window.c:1493
msgid "Reject"
msgstr "דחייה"
-#: ../src/empathy-notifications-approver.c:208
-#: ../src/empathy-notifications-approver.c:213
-#: ../src/empathy-call-window.c:1530
+#: ../src/empathy-notifications-approver.c:209
+#: ../src/empathy-notifications-approver.c:214
+#: ../src/empathy-call-window.c:1494
msgid "Answer"
msgstr "מענה"
-#: ../src/empathy-notifications-approver.c:213
+#: ../src/empathy-notifications-approver.c:214
msgid "Answer with video"
msgstr "מענה ×¢× ×•×™×“×ו"
-#: ../src/empathy-notifications-approver.c:221
-#: ../src/empathy-notifications-approver.c:231
+#: ../src/empathy-notifications-approver.c:222
+#: ../src/empathy-notifications-approver.c:232
msgid "Decline"
msgstr "סירוב"
-#: ../src/empathy-notifications-approver.c:225
-#: ../src/empathy-notifications-approver.c:236
+#: ../src/empathy-notifications-approver.c:226
+#: ../src/empathy-notifications-approver.c:237
msgid "Accept"
msgstr "×ישור"
#. translators: the 'Provide' button is displayed in a notification
#. * bubble when Empathy is asking for an account password; clicking on it
#. * brings the password popup.
-#: ../src/empathy-notifications-approver.c:246
+#: ../src/empathy-notifications-approver.c:247
msgid "Provide"
msgstr "×”×–× ×”"
@@ -4458,39 +4470,39 @@ msgstr "התקבלה בקשת שיחה מ×ת %s, ×ך ב×ותו הזמן כב×
#. Translators: this is an "Info" label. It should be as short
#. * as possible.
+#: ../src/empathy-call-window.c:1124
#: ../src/empathy-call-window.c:1140
-#: ../src/empathy-call-window.c:1162
msgid "i"
msgstr "i"
-#: ../src/empathy-call-window.c:2888
+#: ../src/empathy-call-window.c:2860
msgid "On hold"
msgstr "בהמתנה"
-#: ../src/empathy-call-window.c:2891
+#: ../src/empathy-call-window.c:2863
msgid "Mute"
msgstr "השתק"
-#: ../src/empathy-call-window.c:2893
+#: ../src/empathy-call-window.c:2865
msgid "Duration"
msgstr "משך"
#. Translators: 'status - minutes:seconds' the caller has been connected
-#: ../src/empathy-call-window.c:2896
+#: ../src/empathy-call-window.c:2868
#, c-format
msgid "%s — %d:%02dm"
msgstr "%s — %d:%02d דק׳"
-#: ../src/empathy-call-window.c:3166
+#: ../src/empathy-call-window.c:3138
#, c-format
msgid "Your current balance is %s."
msgstr "המ×זן הנוכחי שלך ×”×•× %s."
-#: ../src/empathy-call-window.c:3170
+#: ../src/empathy-call-window.c:3142
msgid "Sorry, you don’t have enough credit for that call."
msgstr "×ין לך מספיק ×שר××™ כדי לבצע שיחה זו."
-#: ../src/empathy-call-window.c:3172
+#: ../src/empathy-call-window.c:3144
msgid "Top Up"
msgstr "Top Up"
@@ -4518,6 +4530,12 @@ msgstr "ב×פשרות Empathy לגלות ולנהל שיחות ×¢× ×נשי×
msgid "You can change these details later or disable this feature by choosing <span style=\"italic\">Edit → Accounts</span> in the Contact List."
msgstr "ב×פשרותך לשנות ×¤×¨×˜×™× ×לה מ×וחר יותר ×ו לנטרל תכונה זו על ידי בחירה ב<span style=\"italic\">עריכה ↠חשבונות</span> ברשימת ×נשי הקשר."
+#~ msgid "_Enable"
+#~ msgstr "ה_פעלה"
+
+#~ msgid "_Disable"
+#~ msgstr "נ_טרול"
+
#~ msgid "%s"
#~ msgstr "%s"
@@ -4811,9 +4829,6 @@ msgstr "ב×פשרותך לשנות ×¤×¨×˜×™× ×לה מ×וחר יותר ×ו ×
#~ msgid "_For:"
#~ msgstr "_ערך:"
-#~ msgid "_Enabled"
-#~ msgstr "מו_פעל"
-
#~ msgid "%s is now offline."
#~ msgstr "â€%s מנותק/ת כעת."
@@ -5192,8 +5207,5 @@ msgstr "ב×פשרותך לשנות ×¤×¨×˜×™× ×לה מ×וחר יותר ×ו ×
#~ msgid "Re_name"
#~ msgstr "שנה _ש×"
-#~ msgid "Rename"
-#~ msgstr "שנה ש×"
-
#~ msgid "_Use for chat rooms"
#~ msgstr "_שימוש בחדרי שיחה"
diff --git a/po/nb.po b/po/nb.po
index 305591e75..541a61a52 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -5,10 +5,10 @@
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
msgid ""
msgstr ""
-"Project-Id-Version: empathy 3.3.x\n"
+"Project-Id-Version: empathy 3.5.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-29 09:32+0200\n"
-"PO-Revision-Date: 2012-03-29 09:32+0200\n"
+"POT-Creation-Date: 2012-05-15 16:13+0200\n"
+"PO-Revision-Date: 2012-05-15 16:18+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: no\n"
@@ -35,7 +35,7 @@ msgstr "Prat på Google Talk, Facebook, MSN og mange andre pratetjenester"
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2513
+#: ../src/empathy-accounts-dialog.c:2511
msgid "Messaging and VoIP Accounts"
msgstr "Meldings- og VoIP-kontoer"
@@ -43,49 +43,49 @@ msgstr "Meldings- og VoIP-kontoer"
msgid "Manage Messaging and VoIP accounts"
msgstr "HÃ¥ndter meldings- og VoIP-kontoer"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:1
+#: ../data/org.gnome.Empathy.gschema.xml.h:1
msgid "Connection managers should be used"
msgstr "Tilkoblingshåndterer skal brukes"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:2
+#: ../data/org.gnome.Empathy.gschema.xml.h:2
msgid ""
"Whether connectivity managers should be used to automatically disconnect/"
"reconnect."
msgstr "Om tilkoblingshåndterere skal brukes til å koble til/fra automatisk."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:3
+#: ../data/org.gnome.Empathy.gschema.xml.h:3
msgid "Empathy should auto-connect on startup"
msgstr "Empathy skal koble til automatisk ved oppstart"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:4
+#: ../data/org.gnome.Empathy.gschema.xml.h:4
msgid "Whether Empathy should automatically log into your accounts on startup."
msgstr "Om Empathy skal logge inn til dine kontoer automatisk ved oppstart."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:5
+#: ../data/org.gnome.Empathy.gschema.xml.h:5
msgid "Empathy should auto-away when idle"
msgstr "Empathy skal sette bortestatus automatisk ved inaktivitet"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:6
+#: ../data/org.gnome.Empathy.gschema.xml.h:6
msgid ""
"Whether Empathy should go into away mode automatically if the user is idle."
msgstr ""
"Om Empathy skal bytte til bortemodus automatisk hvis bruker ikke er aktiv."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:7
+#: ../data/org.gnome.Empathy.gschema.xml.h:7
msgid "Empathy default download folder"
msgstr "Forvalgt nedlastingsmappe for Empathy"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:8
+#: ../data/org.gnome.Empathy.gschema.xml.h:8
msgid "The default folder to save file transfers in."
msgstr "Forvalgt mappe for lagring av filoverføringer."
#. translators: Automatic tasks which are run once to port/update account settings. Ideally, this shouldn't be exposed to users at all, we just use a gsettings key here as an optimization to only run it only once.
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:10
+#: ../data/org.gnome.Empathy.gschema.xml.h:10
msgid "Magic number used to check if sanity cleaning tasks should be run"
msgstr ""
"Magisk nummer som brukes til å sjekke om oppryddingsoppgaver skal kjøres"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:11
+#: ../data/org.gnome.Empathy.gschema.xml.h:11
msgid ""
"empathy-sanity-cleaning.c uses this number to check if the cleaning tasks "
"should be executed or not. Users should not change this key manually."
@@ -94,76 +94,77 @@ msgstr ""
"oppryddingsoppgaver skal kjøres eller ikke. Brukere skal ikke endre dette "
"manuelt."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
+#: ../data/org.gnome.Empathy.gschema.xml.h:12
+#: ../src/empathy-preferences.ui.h:1
msgid "Show offline contacts"
msgstr "Vis frakoblede kontakter"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
+#: ../data/org.gnome.Empathy.gschema.xml.h:13
msgid "Whether to show contacts that are offline in the contact list."
msgstr "Om kontakter som er frakoblet skal vises i kontaktlisten."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
+#: ../data/org.gnome.Empathy.gschema.xml.h:14
msgid "Show avatars"
msgstr "Vis personbilder"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
+#: ../data/org.gnome.Empathy.gschema.xml.h:15
msgid ""
"Whether to show avatars for contacts in the contact list and chat windows."
-msgstr "Om bilder av kontakter skal vises i kontaktlisten og samtalevinduer."
+msgstr "Om personbilder skal vises i kontaktlisten og samtalevinduer."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
+#: ../data/org.gnome.Empathy.gschema.xml.h:16
msgid "Show protocols"
msgstr "Vis protokoller"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
+#: ../data/org.gnome.Empathy.gschema.xml.h:17
msgid "Whether to show protocols for contacts in the contact list."
msgstr "Om protokoller for kontakter skal vises i kontaktlisten."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
+#: ../data/org.gnome.Empathy.gschema.xml.h:18
msgid "Show Balance in contact list"
msgstr "Vis saldo i kontaktliste"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
+#: ../data/org.gnome.Empathy.gschema.xml.h:19
msgid "Whether to show account balances in the contact list."
msgstr "Om saldo for konto skal vises i kontaktlisten."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
+#: ../data/org.gnome.Empathy.gschema.xml.h:20
msgid "Compact contact list"
msgstr "Kompakt kontaktliste"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
+#: ../data/org.gnome.Empathy.gschema.xml.h:21
msgid "Whether to show the contact list in compact mode."
msgstr "Om kontaktlisten skal vises i kompakt modus."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
+#: ../data/org.gnome.Empathy.gschema.xml.h:22
msgid "Hide main window"
msgstr "Skjul hovedvinduet"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
+#: ../data/org.gnome.Empathy.gschema.xml.h:23
msgid "Hide the main window."
msgstr "Skjul hovedvinduet."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
+#: ../data/org.gnome.Empathy.gschema.xml.h:24
msgid "Default directory to select an avatar image from"
msgstr "Forvalgt mappe for personbilde"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
+#: ../data/org.gnome.Empathy.gschema.xml.h:25
msgid "The last directory that an avatar image was chosen from."
msgstr "Den forrige mappen et personbilde ble valgt fra."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
+#: ../data/org.gnome.Empathy.gschema.xml.h:26
msgid "Open new chats in separate windows"
msgstr "Ã…pne nye samtaler i egne vinduer"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
+#: ../data/org.gnome.Empathy.gschema.xml.h:27
msgid "Always open a separate chat window for new chats."
msgstr "Alltid åpne et eget vindu til nye samtaler."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
+#: ../data/org.gnome.Empathy.gschema.xml.h:28
msgid "Display incoming events in the status area"
msgstr "Vis innkommende hendelser i statusområdet"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
+#: ../data/org.gnome.Empathy.gschema.xml.h:29
msgid ""
"Display incoming events in the status area. If false, present them to the "
"user immediately."
@@ -171,27 +172,27 @@ msgstr ""
"Vis innkommende hendelser i statusområdet. Hvis denne er «false» vises disse "
"til bruker med det samme."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
+#: ../data/org.gnome.Empathy.gschema.xml.h:30
msgid "The position for the chat window side pane"
msgstr "Posisjon for pratevinduets sidelinje"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
+#: ../data/org.gnome.Empathy.gschema.xml.h:31
msgid "The stored position (in pixels) of the chat window side pane."
msgstr "Lagret posisjon (i pikselr) for pratevinduets sideområde."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
+#: ../data/org.gnome.Empathy.gschema.xml.h:32
msgid "Show contact groups"
msgstr "Vis kontaktgrupper"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
+#: ../data/org.gnome.Empathy.gschema.xml.h:33
msgid "Whether to show groups in the contact list."
msgstr "Om kontaktgrupper skal vises i kontaktlisten."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
+#: ../data/org.gnome.Empathy.gschema.xml.h:34
msgid "Contact list sort criterion"
msgstr "Sorteringskriterier for kontaktliste"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
+#: ../data/org.gnome.Empathy.gschema.xml.h:35
msgid ""
"Which criterion to use when sorting the contact list. Default is to sort by "
"the contact's state with the value \"state\". A value of \"name\" will sort "
@@ -201,103 +202,103 @@ msgstr ""
"å sortere kontakter etter kontaktens tilstand med verdien «state». Hvis man "
"bruker «name» vil kontaktlisten sorteres etter kontaktens navn."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
+#: ../data/org.gnome.Empathy.gschema.xml.h:36
msgid "Use notification sounds"
msgstr "Bruk varslingslyder"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
+#: ../data/org.gnome.Empathy.gschema.xml.h:37
msgid "Whether to play a sound to notify of events."
msgstr "Om lyder skal spilles av for å varsle om hendelser."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
+#: ../data/org.gnome.Empathy.gschema.xml.h:38
msgid "Disable sounds when away"
msgstr "Slå av lyder når du er borte"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
+#: ../data/org.gnome.Empathy.gschema.xml.h:39
msgid "Whether to play sound notifications when away or busy."
msgstr "Om lyder skal spilles av når du er borte eller opptatt."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
+#: ../data/org.gnome.Empathy.gschema.xml.h:40
msgid "Play a sound for incoming messages"
msgstr "Spill av lyd når meldinger kommer inn"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
+#: ../data/org.gnome.Empathy.gschema.xml.h:41
msgid "Whether to play a sound to notify of incoming messages."
msgstr "Om lyder skal spilles av for å varsle om innkommende meldinger."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
+#: ../data/org.gnome.Empathy.gschema.xml.h:42
msgid "Play a sound for outgoing messages"
msgstr "Spill av lyd for utgående meldinger"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
+#: ../data/org.gnome.Empathy.gschema.xml.h:43
msgid "Whether to play a sound to notify of outgoing messages."
msgstr "Om lyder skal spilles av for å varsle om utgående meldinger."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
+#: ../data/org.gnome.Empathy.gschema.xml.h:44
msgid "Play a sound for new conversations"
msgstr "Spill av lyd ved nye samtaler"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
+#: ../data/org.gnome.Empathy.gschema.xml.h:45
msgid "Whether to play a sound to notify of new conversations."
msgstr "Om lyder skal spilles av for å varsle om nye samtaler."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
+#: ../data/org.gnome.Empathy.gschema.xml.h:46
msgid "Play a sound when a contact logs in"
msgstr "Spill av lyd når kontakter logger inn"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
+#: ../data/org.gnome.Empathy.gschema.xml.h:47
msgid "Whether to play a sound to notify of contacts logging into the network."
msgstr ""
"Om en lyd skal spilles av for å varsle om at kontakter logger inn på "
"nettverket."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
+#: ../data/org.gnome.Empathy.gschema.xml.h:48
msgid "Play a sound when a contact logs out"
msgstr "Spill av lyd når kontakter logger ut"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
+#: ../data/org.gnome.Empathy.gschema.xml.h:49
msgid ""
"Whether to play a sound to notify of contacts logging out of the network."
msgstr ""
"Om en lyd skal spilles av for å varsle at kontakter logger ut av nettverket."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
+#: ../data/org.gnome.Empathy.gschema.xml.h:50
msgid "Play a sound when we log in"
msgstr "Spill av lyd når du logger inn"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
+#: ../data/org.gnome.Empathy.gschema.xml.h:51
msgid "Whether to play a sound when logging into a network."
msgstr "Om lyder skal spilles av når du logger inn på et nettverk."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
+#: ../data/org.gnome.Empathy.gschema.xml.h:52
msgid "Play a sound when we log out"
msgstr "Spill av lyd når du logger ut"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
+#: ../data/org.gnome.Empathy.gschema.xml.h:53
msgid "Whether to play a sound when logging out of a network."
msgstr "Om lyder skal spilles av når du logger ut av et nettverk."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
+#: ../data/org.gnome.Empathy.gschema.xml.h:54
msgid "Enable popup notifications for new messages"
msgstr "Aktiver varsling oppsprettmeldinger for nye meldinger"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
+#: ../data/org.gnome.Empathy.gschema.xml.h:55
msgid "Whether to show a popup notification when receiving a new message."
msgstr "Om varsling skal vises når en ny melding mottas."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
+#: ../data/org.gnome.Empathy.gschema.xml.h:56
msgid "Disable popup notifications when away"
msgstr "Slå av varsling når du er borte"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
+#: ../data/org.gnome.Empathy.gschema.xml.h:57
msgid "Whether to show popup notifications when away or busy."
msgstr "Om varsling skal vises når du er borte eller opptatt."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
+#: ../data/org.gnome.Empathy.gschema.xml.h:58
msgid "Pop up notifications if the chat isn't focused"
msgstr "Vis varsling når prat ikke er fokusert"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
+#: ../data/org.gnome.Empathy.gschema.xml.h:59
msgid ""
"Whether to show a popup notification when receiving a new message even if "
"the chat is already opened, but not focused."
@@ -305,77 +306,77 @@ msgstr ""
"Om varsling skal vises når en melding mottas selv om pratevinduet er åpent "
"men ikke har fokus."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
+#: ../data/org.gnome.Empathy.gschema.xml.h:60
msgid "Pop up notifications when a contact logs in"
msgstr "Vis varsling når en kontakt logger inn"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
+#: ../data/org.gnome.Empathy.gschema.xml.h:61
msgid "Whether to show a popup notification when a contact goes online."
msgstr "Om et varsel skal vises når en kontakt er kobler fra."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
+#: ../data/org.gnome.Empathy.gschema.xml.h:62
msgid "Pop up notifications when a contact logs out"
msgstr "Vis varsling når en kontakt logger ut"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
+#: ../data/org.gnome.Empathy.gschema.xml.h:63
msgid "Whether to show a popup notification when a contact goes offline."
msgstr "Om varsel skal vises når en kontakt kobler fra."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
+#: ../data/org.gnome.Empathy.gschema.xml.h:64
msgid "Use graphical smileys"
msgstr "Vis smilefjes grafisk"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
+#: ../data/org.gnome.Empathy.gschema.xml.h:65
msgid "Whether to convert smileys into graphical images in conversations."
msgstr "Om smilefjes skal konverteres til grafiske bilder i samtaler."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
+#: ../data/org.gnome.Empathy.gschema.xml.h:66
msgid "Show contact list in rooms"
msgstr "Vis kontaktliste i rom"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
+#: ../data/org.gnome.Empathy.gschema.xml.h:67
msgid "Whether to show the contact list in chat rooms."
msgstr "Om kontaktlisten skal vises i praterom."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
+#: ../data/org.gnome.Empathy.gschema.xml.h:68
msgid "Chat window theme"
msgstr "Tema for samtalevindu"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
+#: ../data/org.gnome.Empathy.gschema.xml.h:69
msgid "The theme that is used to display the conversation in chat windows."
msgstr "Temaet som brukes til å vise samtaler."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
+#: ../data/org.gnome.Empathy.gschema.xml.h:70
msgid "Chat window theme variant"
msgstr "Temavariant for samtalevindu"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
+#: ../data/org.gnome.Empathy.gschema.xml.h:71
msgid ""
"The theme variant that is used to display the conversation in chat windows."
msgstr "Temavariant som brukes til å vise samtale i pratevinduer."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
+#: ../data/org.gnome.Empathy.gschema.xml.h:72
msgid "Path of the Adium theme to use"
msgstr "Sti til Adium-tema som skal brukes"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:73
+#: ../data/org.gnome.Empathy.gschema.xml.h:73
msgid "Path of the Adium theme to use if the theme used for chat is Adium."
msgstr "Sti til Adium-tema skal brukes hvis tema for prat er Adium."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
+#: ../data/org.gnome.Empathy.gschema.xml.h:74
msgid "Enable WebKit Developer Tools"
msgstr "Slå på utviklerverktøy for WebKit"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:75
+#: ../data/org.gnome.Empathy.gschema.xml.h:75
msgid ""
"Whether WebKit developer tools, such as the Web Inspector, should be enabled."
msgstr "Om utviklerverktøy for WebKit, som Web Inspector, skal slås på."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:76
+#: ../data/org.gnome.Empathy.gschema.xml.h:76
msgid "Inform other users when you are typing to them"
msgstr "Informer andre brukere når du skriver til dem"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:77
+#: ../data/org.gnome.Empathy.gschema.xml.h:77
msgid ""
"Whether to send the 'composing' or 'paused' chat states. Does not currently "
"affect the 'gone' state."
@@ -383,39 +384,39 @@ msgstr ""
"Hvorvidt tilstand for «skriver» eller «pause» i prat skal sendes. Påvirker "
"ikke status «borte»."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
+#: ../data/org.gnome.Empathy.gschema.xml.h:78
msgid "Use theme for chat rooms"
msgstr "Bruk tema for samtalerom"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
+#: ../data/org.gnome.Empathy.gschema.xml.h:79
msgid "Whether to use the theme for chat rooms."
msgstr "Om tema skal brukes for praterom eller ikke."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:80
+#: ../data/org.gnome.Empathy.gschema.xml.h:80
msgid "Spell checking languages"
msgstr "Stavekontrollspråk"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
+#: ../data/org.gnome.Empathy.gschema.xml.h:81
msgid ""
"Comma-separated list of spell checker languages to use (e.g. \"en, fr, nl\")."
msgstr ""
"Kommaseparert liste over stavekontrollspråk som skal brukes (f.eks \"no, en, "
"fr, nl\")."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
+#: ../data/org.gnome.Empathy.gschema.xml.h:82
msgid "Enable spell checker"
msgstr "Bruk stavekontroll"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
+#: ../data/org.gnome.Empathy.gschema.xml.h:83
msgid ""
"Whether 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/org.gnome.Empathy.gschema.xml.in.h:84
+#: ../data/org.gnome.Empathy.gschema.xml.h:84
msgid "Nick completed character"
msgstr "Tegn for fullføring av kallenavn"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
+#: ../data/org.gnome.Empathy.gschema.xml.h:85
msgid ""
"Character to add after nickname when using nick completion (tab) in group "
"chat."
@@ -423,54 +424,54 @@ msgstr ""
"Tegn som skal legges til etter kallenavn når fullføring av kallenavn med "
"tabulator benyttes i gruppeprat."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
+#: ../data/org.gnome.Empathy.gschema.xml.h:86
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/org.gnome.Empathy.gschema.xml.in.h:87
+#: ../data/org.gnome.Empathy.gschema.xml.h:87
msgid ""
"Whether 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/org.gnome.Empathy.gschema.xml.in.h:88
+#: ../data/org.gnome.Empathy.gschema.xml.h:88
msgid "Last account selected in Join Room dialog"
msgstr "Siste konto valgt i dialogen «Bli med i rom»"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
+#: ../data/org.gnome.Empathy.gschema.xml.h:89
msgid "D-Bus object path of the last account selected to join a room."
msgstr "D-Bus objektsti for siste konto valgt for å bli med i et rom."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
+#: ../data/org.gnome.Empathy.gschema.xml.h:90
msgid "Camera device"
msgstr "Kameraenhet"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
+#: ../data/org.gnome.Empathy.gschema.xml.h:91
msgid "Default camera device to use in video calls, e.g. /dev/video0."
msgstr "Forvalgt kameraenhet til bruk for videosamtaler. F.eks. /dev/video0."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
+#: ../data/org.gnome.Empathy.gschema.xml.h:92
msgid "Camera position"
msgstr "Kameraposisjon"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
+#: ../data/org.gnome.Empathy.gschema.xml.h:93
msgid "Position the camera preview should be during a call."
msgstr "Posisjon for kameraforhåndsvisning under en samtale."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
+#: ../data/org.gnome.Empathy.gschema.xml.h:94
msgid "Echo cancellation support"
msgstr "Støtte for utlikning av ekko"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
+#: ../data/org.gnome.Empathy.gschema.xml.h:95
msgid "Whether to enable Pulseaudio's echo cancellation filter."
msgstr "Hvorvidt Pulseaudio's filter for utlikning av ekko skal slås på."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
+#: ../data/org.gnome.Empathy.gschema.xml.h:96
msgid "Show hint about closing the main window"
msgstr "Vis hint om lukking av hovedvinduet"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
+#: ../data/org.gnome.Empathy.gschema.xml.h:97
msgid ""
"Whether to show the message dialog about closing the main window with the "
"'x' button in the title bar."
@@ -478,241 +479,241 @@ msgstr ""
"Om meldingsdialog om lukking av vinduet med «x»-knappen i tittelfeltet skal "
"vises."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
+#: ../data/org.gnome.Empathy.gschema.xml.h:98
msgid "Empathy can publish the user's location"
msgstr "Empathy kan publisere brukers plassering"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
+#: ../data/org.gnome.Empathy.gschema.xml.h:99
msgid "Whether Empathy can publish the user's location to their contacts."
msgstr "Om Empathy kan publisere brukers plassering til kontakter."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
+#: ../data/org.gnome.Empathy.gschema.xml.h:100
msgid "Empathy can use the network to guess the location"
msgstr "Empathy kan bruke nettverket til å gjette plassering"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:101
+#: ../data/org.gnome.Empathy.gschema.xml.h:101
msgid "Whether Empathy can use the network to guess the location."
msgstr "Om Empathy kan bruke nettverket for å gjette plassering."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:102
+#: ../data/org.gnome.Empathy.gschema.xml.h:102
msgid "Empathy can use the cellular network to guess the location"
msgstr "Empathy kan bruke mobilnettverk til å gjette plassering"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:103
+#: ../data/org.gnome.Empathy.gschema.xml.h:103
msgid "Whether Empathy can use the cellular network to guess the location."
msgstr "Om Empathy kan bruke mobilnettverk for å gjette plassering."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:104
+#: ../data/org.gnome.Empathy.gschema.xml.h:104
msgid "Empathy can use the GPS to guess the location"
msgstr "Empathy kan bruke GPS til å gjette plassering"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:105
+#: ../data/org.gnome.Empathy.gschema.xml.h:105
msgid "Whether Empathy can use the GPS to guess the location."
msgstr "Om Empathy kan bruke GPS for å gjette plassering."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:106
+#: ../data/org.gnome.Empathy.gschema.xml.h:106
msgid "Empathy should reduce the location's accuracy"
msgstr "Empathy skal redusere nøyaktighet for plasseringenseri"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:107
+#: ../data/org.gnome.Empathy.gschema.xml.h:107
msgid ""
"Whether Empathy should reduce the location's accuracy for privacy reasons."
msgstr ""
"Om Empathy skal redusere nøyaktighet for plassering av personvernhensyn."
-#: ../libempathy/empathy-ft-handler.c:738
+#: ../libempathy/empathy-ft-handler.c:737
msgid "No reason was specified"
msgstr "Ingen årsak oppgitt"
-#: ../libempathy/empathy-ft-handler.c:741
+#: ../libempathy/empathy-ft-handler.c:740
msgid "The change in state was requested"
msgstr "Tilstandsendring ble etterspurt"
-#: ../libempathy/empathy-ft-handler.c:744
+#: ../libempathy/empathy-ft-handler.c:743
msgid "You canceled the file transfer"
msgstr "Du avbrøt filoverføringen"
-#: ../libempathy/empathy-ft-handler.c:747
+#: ../libempathy/empathy-ft-handler.c:746
msgid "The other participant canceled the file transfer"
msgstr "Avsender avbrøt filoverføringen"
-#: ../libempathy/empathy-ft-handler.c:750
+#: ../libempathy/empathy-ft-handler.c:749
msgid "Error while trying to transfer the file"
msgstr "Feil under overføring av filen"
-#: ../libempathy/empathy-ft-handler.c:753
+#: ../libempathy/empathy-ft-handler.c:752
msgid "The other participant is unable to transfer the file"
msgstr "Avsender kan ikke overføre filen"
-#: ../libempathy/empathy-ft-handler.c:756 ../libempathy/empathy-utils.c:313
+#: ../libempathy/empathy-ft-handler.c:755 ../libempathy/empathy-utils.c:312
msgid "Unknown reason"
msgstr "Ukjent årsak"
-#: ../libempathy/empathy-ft-handler.c:919
+#: ../libempathy/empathy-ft-handler.c:918
msgid "File transfer completed, but the file was corrupted"
msgstr "Filoverføring fullført, men filen ble korrupt"
-#: ../libempathy/empathy-ft-handler.c:1205
+#: ../libempathy/empathy-ft-handler.c:1204
msgid "File transfer not supported by remote contact"
msgstr "Filoverføring støttes ikke av ekstern kontakt"
-#: ../libempathy/empathy-ft-handler.c:1261
+#: ../libempathy/empathy-ft-handler.c:1260
msgid "The selected file is not a regular file"
msgstr "Valgt fil er ikke en vanlig fil"
-#: ../libempathy/empathy-ft-handler.c:1270
+#: ../libempathy/empathy-ft-handler.c:1269
msgid "The selected file is empty"
msgstr "Valgt fil er tom"
-#: ../libempathy/empathy-message.c:415 ../src/empathy-call-observer.c:129
+#: ../libempathy/empathy-message.c:407 ../src/empathy-call-observer.c:116
#, c-format
msgid "Missed call from %s"
msgstr "Tapt anrop fra %s"
#. Translators: this is an outgoing call, e.g. 'Called Alice'
-#: ../libempathy/empathy-message.c:419
+#: ../libempathy/empathy-message.c:411
#, c-format
msgid "Called %s"
msgstr "Samtale med %s"
-#: ../libempathy/empathy-message.c:422
+#: ../libempathy/empathy-message.c:414
#, c-format
msgid "Call from %s"
msgstr "Samtale fra %s"
-#: ../libempathy/empathy-utils.c:233
+#: ../libempathy/empathy-utils.c:232
msgid "Available"
msgstr "Tilgjengelig"
-#: ../libempathy/empathy-utils.c:235
+#: ../libempathy/empathy-utils.c:234
msgid "Busy"
msgstr "Opptatt"
-#: ../libempathy/empathy-utils.c:238
+#: ../libempathy/empathy-utils.c:237
msgid "Away"
msgstr "Borte"
-#: ../libempathy/empathy-utils.c:240
+#: ../libempathy/empathy-utils.c:239
msgid "Invisible"
msgstr "Usynlig"
-#: ../libempathy/empathy-utils.c:242
+#: ../libempathy/empathy-utils.c:241
msgid "Offline"
msgstr "Frakoblet"
#. translators: presence type is unknown
-#: ../libempathy/empathy-utils.c:245
+#: ../libempathy/empathy-utils.c:244
msgctxt "presence"
msgid "Unknown"
msgstr "Ukjent"
-#: ../libempathy/empathy-utils.c:285
+#: ../libempathy/empathy-utils.c:284
msgid "No reason specified"
msgstr "Ingen årsak oppgitt"
-#: ../libempathy/empathy-utils.c:287 ../libempathy/empathy-utils.c:343
+#: ../libempathy/empathy-utils.c:286 ../libempathy/empathy-utils.c:342
msgid "Status is set to offline"
msgstr "Status er satt til frakoblet"
-#: ../libempathy/empathy-utils.c:289 ../libempathy/empathy-utils.c:323
+#: ../libempathy/empathy-utils.c:288 ../libempathy/empathy-utils.c:322
#: ../libempathy-gtk/empathy-call-utils.c:47
-#: ../libempathy-gtk/empathy-new-message-dialog.c:81
+#: ../libempathy-gtk/empathy-new-message-dialog.c:80
msgid "Network error"
msgstr "Nettverksfeil"
-#: ../libempathy/empathy-utils.c:291 ../libempathy/empathy-utils.c:325
+#: ../libempathy/empathy-utils.c:290 ../libempathy/empathy-utils.c:324
msgid "Authentication failed"
msgstr "Autentiseringen feilet"
-#: ../libempathy/empathy-utils.c:293 ../libempathy/empathy-utils.c:327
+#: ../libempathy/empathy-utils.c:292 ../libempathy/empathy-utils.c:326
msgid "Encryption error"
msgstr "Krypteringsfeil"
-#: ../libempathy/empathy-utils.c:295
+#: ../libempathy/empathy-utils.c:294
msgid "Name in use"
msgstr "Navn i bruk"
-#: ../libempathy/empathy-utils.c:297 ../libempathy/empathy-utils.c:329
+#: ../libempathy/empathy-utils.c:296 ../libempathy/empathy-utils.c:328
msgid "Certificate not provided"
msgstr "Sertifikat ikke oppgitt"
-#: ../libempathy/empathy-utils.c:299 ../libempathy/empathy-utils.c:331
+#: ../libempathy/empathy-utils.c:298 ../libempathy/empathy-utils.c:330
msgid "Certificate untrusted"
msgstr "Stoler ikke på sertifikat"
-#: ../libempathy/empathy-utils.c:301 ../libempathy/empathy-utils.c:333
+#: ../libempathy/empathy-utils.c:300 ../libempathy/empathy-utils.c:332
msgid "Certificate expired"
msgstr "Sertifikat utgått"
-#: ../libempathy/empathy-utils.c:303 ../libempathy/empathy-utils.c:335
+#: ../libempathy/empathy-utils.c:302 ../libempathy/empathy-utils.c:334
msgid "Certificate not activated"
msgstr "Sertifikat ikke aktivert"
-#: ../libempathy/empathy-utils.c:305 ../libempathy/empathy-utils.c:337
+#: ../libempathy/empathy-utils.c:304 ../libempathy/empathy-utils.c:336
msgid "Certificate hostname mismatch"
msgstr "Feil vertsnavn i forhold til sertifikat"
-#: ../libempathy/empathy-utils.c:307 ../libempathy/empathy-utils.c:339
+#: ../libempathy/empathy-utils.c:306 ../libempathy/empathy-utils.c:338
msgid "Certificate fingerprint mismatch"
msgstr "Fingeravtrykk stemmer ikke for sertifikat"
-#: ../libempathy/empathy-utils.c:309 ../libempathy/empathy-utils.c:341
+#: ../libempathy/empathy-utils.c:308 ../libempathy/empathy-utils.c:340
msgid "Certificate self-signed"
msgstr "Selvsignert sertifikat"
-#: ../libempathy/empathy-utils.c:311
+#: ../libempathy/empathy-utils.c:310
msgid "Certificate error"
msgstr "Sertifikatsfeil"
-#: ../libempathy/empathy-utils.c:345
+#: ../libempathy/empathy-utils.c:344
msgid "Encryption is not available"
msgstr "Kryptering er ikke tilgjengelig"
-#: ../libempathy/empathy-utils.c:347
+#: ../libempathy/empathy-utils.c:346
msgid "Certificate is invalid"
msgstr "Sertifikatet ikke ugyldig"
-#: ../libempathy/empathy-utils.c:349
+#: ../libempathy/empathy-utils.c:348
msgid "Connection has been refused"
msgstr "Tilkobling nektes"
-#: ../libempathy/empathy-utils.c:351
+#: ../libempathy/empathy-utils.c:350
msgid "Connection can't be established"
msgstr "Tilkobling kan ikke etableres"
-#: ../libempathy/empathy-utils.c:353
+#: ../libempathy/empathy-utils.c:352
msgid "Connection has been lost"
msgstr "Tilkobling mistet"
-#: ../libempathy/empathy-utils.c:355
+#: ../libempathy/empathy-utils.c:354
msgid "This account is already connected to the server"
msgstr "Denne kontoen er allerede koblet til tjeneren"
-#: ../libempathy/empathy-utils.c:357
+#: ../libempathy/empathy-utils.c:356
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Tilkoblingen er erstattet med en ny tilkobling som bruker samme ressurs"
-#: ../libempathy/empathy-utils.c:360
+#: ../libempathy/empathy-utils.c:359
msgid "The account already exists on the server"
msgstr "Kontoen eksisterer allerede på tjeneren"
-#: ../libempathy/empathy-utils.c:362
+#: ../libempathy/empathy-utils.c:361
msgid "Server is currently too busy to handle the connection"
msgstr "Tjeneren er for opptatt til å håndtere tilkoblingen"
-#: ../libempathy/empathy-utils.c:364
+#: ../libempathy/empathy-utils.c:363
msgid "Certificate has been revoked"
msgstr "Sertifikatet er trukket tilbake"
-#: ../libempathy/empathy-utils.c:366
+#: ../libempathy/empathy-utils.c:365
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Sertifikatet bruker en usikker cipher-algoritme eller er kryptografisk svakt"
-#: ../libempathy/empathy-utils.c:369
+#: ../libempathy/empathy-utils.c:368
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@@ -720,27 +721,27 @@ msgstr ""
"Lengden på tjenersertifikatet eller dybden på sertifikatkjeden på tjeneren "
"oversteg grensen som settes av kryptografibiblioteket"
-#: ../libempathy/empathy-utils.c:373
+#: ../libempathy/empathy-utils.c:372
msgid "Your software is too old"
msgstr "Programvaren din er for gammel"
-#: ../libempathy/empathy-utils.c:375
+#: ../libempathy/empathy-utils.c:374
msgid "Internal error"
msgstr "Intern feil"
-#: ../libempathy/empathy-utils.c:534
+#: ../libempathy/empathy-utils.c:533
msgid "People Nearby"
msgstr "Personer i nærheten"
-#: ../libempathy/empathy-utils.c:539
+#: ../libempathy/empathy-utils.c:538
msgid "Yahoo! Japan"
msgstr "Yahoo! Japan"
-#: ../libempathy/empathy-utils.c:568
+#: ../libempathy/empathy-utils.c:567
msgid "Google Talk"
msgstr "Google Talk"
-#: ../libempathy/empathy-utils.c:569
+#: ../libempathy/empathy-utils.c:568
msgid "Facebook Chat"
msgstr "Facebook-prat"
@@ -809,7 +810,7 @@ msgid "All accounts"
msgstr "Alle kontoer"
#: ../libempathy-gtk/empathy-account-widget.c:682
-#: ../src/empathy-import-widget.c:326
+#: ../src/empathy-import-widget.c:323
msgid "Account"
msgstr "Konto"
@@ -833,24 +834,24 @@ msgstr "Port"
msgid "%s:"
msgstr "%s:"
-#: ../libempathy-gtk/empathy-account-widget.c:1398
+#: ../libempathy-gtk/empathy-account-widget.c:1424
#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
msgid "Username:"
msgstr "Brukernavn:"
-#: ../libempathy-gtk/empathy-account-widget.c:1710
+#: ../libempathy-gtk/empathy-account-widget.c:1741
msgid "A_pply"
msgstr "_Bruk"
-#: ../libempathy-gtk/empathy-account-widget.c:1739
+#: ../libempathy-gtk/empathy-account-widget.c:1770
msgid "L_og in"
msgstr "L_ogg inn"
-#: ../libempathy-gtk/empathy-account-widget.c:1812
+#: ../libempathy-gtk/empathy-account-widget.c:1840
msgid "This account already exists on the server"
msgstr "Denne kontoen eksisterer allerede på tjeneren"
-#: ../libempathy-gtk/empathy-account-widget.c:1816
+#: ../libempathy-gtk/empathy-account-widget.c:1844
msgid "Create a new account on the server"
msgstr "Lag en ny konto på tjeneren"
@@ -859,19 +860,19 @@ msgstr "Lag en ny konto på tjeneren"
#. * like: "MyUserName on freenode".
#. * You should reverse the order of these arguments if the
#. * server should come before the login id in your locale.
-#: ../libempathy-gtk/empathy-account-widget.c:2241
+#: ../libempathy-gtk/empathy-account-widget.c:2251
#, c-format
msgid "%1$s on %2$s"
msgstr "%1$s av %2$s"
#. To translators: The parameter is the protocol name. The resulting
#. * string will be something like: "Jabber Account"
-#: ../libempathy-gtk/empathy-account-widget.c:2267
+#: ../libempathy-gtk/empathy-account-widget.c:2277
#, c-format
msgid "%s Account"
msgstr "%s-konto"
-#: ../libempathy-gtk/empathy-account-widget.c:2271
+#: ../libempathy-gtk/empathy-account-widget.c:2281
msgid "New account"
msgstr "Ny konto"
@@ -919,7 +920,7 @@ msgstr "_Port:"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:21
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:6
-#: ../src/empathy-new-chatroom-dialog.ui.h:6
+#: ../src/empathy-new-chatroom-dialog.ui.h:5
msgid "_Server:"
msgstr "_Tjener:"
@@ -931,7 +932,7 @@ msgstr "_Tjener:"
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
msgid "Advanced"
msgstr "Avansert"
@@ -949,7 +950,7 @@ msgstr "HVa er ditt AIM-passord?"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:10
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "Remember Password"
msgstr "Husk passord"
@@ -993,36 +994,32 @@ msgstr "Hva er din UIN for ICQ?"
msgid "What is your ICQ password?"
msgstr "Hva er ditt passord for ICQ?"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:206
-#: ../libempathy-gtk/empathy-account-widget-sip.c:239
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "Auto"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:209
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:212
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:215
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:244
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "Register"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:249
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "Alternativer"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:252
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "Ingen"
@@ -1283,11 +1280,15 @@ msgstr "Overse TLS-feil"
msgid "Port:"
msgstr "Port:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+msgid "Local IP Address:"
+msgstr "Lokal IP-adresse:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP login ID?"
msgstr "Hva er din påloggings-ID for SIP?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP account password?"
msgstr "Hva er passordet for din SIP-konto?"
@@ -1373,40 +1374,39 @@ msgstr "Nødsamtaler er ikke støttet på denne protokollen"
msgid "You don't have enough credit in order to place this call"
msgstr "Du har ikke nok kreditt til å starte denne samtalen"
-#: ../libempathy-gtk/empathy-chat.c:729
+#: ../libempathy-gtk/empathy-chat.c:728
msgid "Failed to open private chat"
msgstr "Klarte ikke å åpne privat prat"
-#: ../libempathy-gtk/empathy-chat.c:787
+#: ../libempathy-gtk/empathy-chat.c:786
msgid "Topic not supported on this conversation"
msgstr "Emne er ikke støttet for denne samtalen"
-#: ../libempathy-gtk/empathy-chat.c:793
+#: ../libempathy-gtk/empathy-chat.c:792
msgid "You are not allowed to change the topic"
msgstr "Du har ikke lov til å bytte emne"
-#: ../libempathy-gtk/empathy-chat.c:992
-#, c-format
-msgid "“%s†is not a valid contact ID"
-msgstr "«%s» er ikke en gyldig kontakt-ID"
+#: ../libempathy-gtk/empathy-chat.c:968
+msgid "Invalid contact ID"
+msgstr "Ugyldig kontakt-ID"
-#: ../libempathy-gtk/empathy-chat.c:1087
+#: ../libempathy-gtk/empathy-chat.c:1056
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear: tøm alle meldinger fra aktiv samtale"
-#: ../libempathy-gtk/empathy-chat.c:1090
+#: ../libempathy-gtk/empathy-chat.c:1059
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <emne>: sett emne for aktiv samtale"
-#: ../libempathy-gtk/empathy-chat.c:1093
+#: ../libempathy-gtk/empathy-chat.c:1062
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <ID for praterom>: bli med i et nytt praterom"
-#: ../libempathy-gtk/empathy-chat.c:1096
+#: ../libempathy-gtk/empathy-chat.c:1065
msgid "/j <chat room ID>: join a new chat room"
msgstr "/j <prateroms-ID>: bli med i et nytt praterom"
-#: ../libempathy-gtk/empathy-chat.c:1100
+#: ../libempathy-gtk/empathy-chat.c:1069
msgid ""
"/part [<chat room ID>] [<reason>]: leave the chat room, by default the "
"current one"
@@ -1414,23 +1414,23 @@ msgstr ""
"/part [<praterom-ID>] [<Ã¥rsak>]: forlat praterommet, forvalg er det aktive "
"rommet"
-#: ../libempathy-gtk/empathy-chat.c:1104
+#: ../libempathy-gtk/empathy-chat.c:1073
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <kontakt-ID> [<melding>]: åpne en privat samtale"
-#: ../libempathy-gtk/empathy-chat.c:1107
+#: ../libempathy-gtk/empathy-chat.c:1076
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <kontakt-ID> <melding>: åpne en privat samtale"
-#: ../libempathy-gtk/empathy-chat.c:1110
+#: ../libempathy-gtk/empathy-chat.c:1079
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <kallenavn>: bytt kallenavn på denne tjeneren"
-#: ../libempathy-gtk/empathy-chat.c:1113
+#: ../libempathy-gtk/empathy-chat.c:1082
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <melding>: send en HANDLINGS-melding til aktiv samtale"
-#: ../libempathy-gtk/empathy-chat.c:1116
+#: ../libempathy-gtk/empathy-chat.c:1085
msgid ""
"/say <message>: send <message> to the current conversation. This is used to "
"send a message starting with a '/'. For example: \"/say /join is used to "
@@ -1440,11 +1440,11 @@ msgstr ""
"sende en melding som starter med tegnet «/». For eksempel: «/say /join "
"brukes til å bli med i et nytt praterom»"
-#: ../libempathy-gtk/empathy-chat.c:1121
+#: ../libempathy-gtk/empathy-chat.c:1090
msgid "/whois <contact ID>: display information about a contact"
msgstr "/whois <kontakt-ID>: vis informasjon om en kontakt"
-#: ../libempathy-gtk/empathy-chat.c:1124
+#: ../libempathy-gtk/empathy-chat.c:1093
msgid ""
"/help [<command>]: show all supported commands. If <command> is defined, "
"show its usage."
@@ -1452,126 +1452,126 @@ msgstr ""
"/help [<kommando>]: vis alle støttede kommandoer. Vis hjelp for <kommando> "
"hvis den er definert."
-#: ../libempathy-gtk/empathy-chat.c:1143
+#: ../libempathy-gtk/empathy-chat.c:1112
#, c-format
msgid "Usage: %s"
msgstr "Bruk: %s"
-#: ../libempathy-gtk/empathy-chat.c:1188
+#: ../libempathy-gtk/empathy-chat.c:1157
msgid "Unknown command"
msgstr "Ukjent kommando"
-#: ../libempathy-gtk/empathy-chat.c:1314
+#: ../libempathy-gtk/empathy-chat.c:1283
msgid "Unknown command; see /help for the available commands"
msgstr "Ukjent kommando; se /help for tilgjengelige kommandoer"
-#: ../libempathy-gtk/empathy-chat.c:1565
+#: ../libempathy-gtk/empathy-chat.c:1540
msgid "insufficient balance to send message"
msgstr "ikke nok kreditt til å sende melding"
-#: ../libempathy-gtk/empathy-chat.c:1569 ../libempathy-gtk/empathy-chat.c:1583
-#: ../libempathy-gtk/empathy-chat.c:1646
+#: ../libempathy-gtk/empathy-chat.c:1544 ../libempathy-gtk/empathy-chat.c:1558
+#: ../libempathy-gtk/empathy-chat.c:1621
#, c-format
msgid "Error sending message '%s': %s"
msgstr "Feil ved sending av melding «%s»: %s"
-#: ../libempathy-gtk/empathy-chat.c:1571 ../libempathy-gtk/empathy-chat.c:1588
-#: ../libempathy-gtk/empathy-chat.c:1650
+#: ../libempathy-gtk/empathy-chat.c:1546 ../libempathy-gtk/empathy-chat.c:1563
+#: ../libempathy-gtk/empathy-chat.c:1625
#, c-format
msgid "Error sending message: %s"
msgstr "Feil ved sending av melding: %s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1577
+#: ../libempathy-gtk/empathy-chat.c:1552
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr "ikke nok kreditt til å sende melding. <a href='%s'>Fyll på</a>."
-#: ../libempathy-gtk/empathy-chat.c:1617
+#: ../libempathy-gtk/empathy-chat.c:1592
msgid "not capable"
msgstr "ikke kapabel"
-#: ../libempathy-gtk/empathy-chat.c:1624
+#: ../libempathy-gtk/empathy-chat.c:1599
msgid "offline"
msgstr "frakoblet"
-#: ../libempathy-gtk/empathy-chat.c:1627
+#: ../libempathy-gtk/empathy-chat.c:1602
msgid "invalid contact"
msgstr "ugyldig kontakt"
-#: ../libempathy-gtk/empathy-chat.c:1630
+#: ../libempathy-gtk/empathy-chat.c:1605
msgid "permission denied"
msgstr "tilgang nektet"
-#: ../libempathy-gtk/empathy-chat.c:1633
+#: ../libempathy-gtk/empathy-chat.c:1608
msgid "too long message"
msgstr "meldingen er for lang"
-#: ../libempathy-gtk/empathy-chat.c:1636
+#: ../libempathy-gtk/empathy-chat.c:1611
msgid "not implemented"
msgstr "ikke implementert"
-#: ../libempathy-gtk/empathy-chat.c:1640
+#: ../libempathy-gtk/empathy-chat.c:1615
msgid "unknown"
msgstr "ukjent"
-#: ../libempathy-gtk/empathy-chat.c:1707 ../src/empathy-chat-window.c:920
+#: ../libempathy-gtk/empathy-chat.c:1682 ../src/empathy-chat-window.c:918
msgid "Topic:"
msgstr "Emne:"
-#: ../libempathy-gtk/empathy-chat.c:1722
+#: ../libempathy-gtk/empathy-chat.c:1697
#, c-format
msgid "Topic set to: %s"
msgstr "Emne satt til: %s"
-#: ../libempathy-gtk/empathy-chat.c:1724
+#: ../libempathy-gtk/empathy-chat.c:1699
#, c-format
msgid "Topic set by %s to: %s"
msgstr "Emne satt av %s til: %s"
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1729
+#: ../libempathy-gtk/empathy-chat.c:1704
msgid "No topic defined"
msgstr "Emne ikke definert"
-#: ../libempathy-gtk/empathy-chat.c:2245
+#: ../libempathy-gtk/empathy-chat.c:2220
msgid "(No Suggestions)"
msgstr "(Ingen forslag)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2313
+#: ../libempathy-gtk/empathy-chat.c:2288
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "Legg til «%s» i ordboken"
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2350
+#: ../libempathy-gtk/empathy-chat.c:2325
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "Legg til «%s» i ordbok for %s"
-#: ../libempathy-gtk/empathy-chat.c:2420
+#: ../libempathy-gtk/empathy-chat.c:2395
msgid "Insert Smiley"
msgstr "Sett inn smilefjes"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2438
+#: ../libempathy-gtk/empathy-chat.c:2413
#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "_Send"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2495
+#: ../libempathy-gtk/empathy-chat.c:2470
msgid "_Spelling Suggestions"
msgstr "_Staveforslag"
-#: ../libempathy-gtk/empathy-chat.c:2584
+#: ../libempathy-gtk/empathy-chat.c:2559
msgid "Failed to retrieve recent logs"
msgstr "Klarte ikke å hente siste logger"
-#: ../libempathy-gtk/empathy-chat.c:2723
+#: ../libempathy-gtk/empathy-chat.c:2698
#, c-format
msgid "%s has disconnected"
msgstr "%s har koblet fra"
@@ -1579,12 +1579,12 @@ msgstr "%s har koblet fra"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2730
+#: ../libempathy-gtk/empathy-chat.c:2705
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "%1$s ble sparket av %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2733
+#: ../libempathy-gtk/empathy-chat.c:2708
#, c-format
msgid "%s was kicked"
msgstr "%s ble sparket"
@@ -1592,17 +1592,17 @@ msgstr "%s ble sparket"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2741
+#: ../libempathy-gtk/empathy-chat.c:2716
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "%1$s ble bannlyst av %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2744
+#: ../libempathy-gtk/empathy-chat.c:2719
#, c-format
msgid "%s was banned"
msgstr "%s ble bannlyst"
-#: ../libempathy-gtk/empathy-chat.c:2748
+#: ../libempathy-gtk/empathy-chat.c:2723
#, c-format
msgid "%s has left the room"
msgstr "%s har forlatt rommet"
@@ -1612,17 +1612,17 @@ msgstr "%s har forlatt rommet"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2757
+#: ../libempathy-gtk/empathy-chat.c:2732
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: ../libempathy-gtk/empathy-chat.c:2782
+#: ../libempathy-gtk/empathy-chat.c:2757
#, c-format
msgid "%s has joined the room"
msgstr "%s har blitt med i rommet"
-#: ../libempathy-gtk/empathy-chat.c:2807
+#: ../libempathy-gtk/empathy-chat.c:2782
#, c-format
msgid "%s is now known as %s"
msgstr "%s er nå kjent som %s"
@@ -1630,55 +1630,55 @@ msgstr "%s er nå kjent som %s"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2994
-#: ../src/empathy-streamed-media-window.c:1888
-#: ../src/empathy-event-manager.c:1279 ../src/empathy-call-window.c:1477
-#: ../src/empathy-call-window.c:1527 ../src/empathy-call-window.c:2573
+#: ../libempathy-gtk/empathy-chat.c:2969 ../src/empathy-event-manager.c:1167
+#: ../src/empathy-call-window.c:1463 ../src/empathy-call-window.c:1513
+#: ../src/empathy-call-window.c:2559
msgid "Disconnected"
msgstr "Koblet fra"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3658
+#: ../libempathy-gtk/empathy-chat.c:3633
msgid "Would you like to store this password?"
msgstr "Vil du lagre dette passordet?"
-#: ../libempathy-gtk/empathy-chat.c:3664
+#: ../libempathy-gtk/empathy-chat.c:3639
msgid "Remember"
msgstr "Husk"
-#: ../libempathy-gtk/empathy-chat.c:3674
+#: ../libempathy-gtk/empathy-chat.c:3649
msgid "Not now"
msgstr "Ikke nå"
-#: ../libempathy-gtk/empathy-chat.c:3718
+#: ../libempathy-gtk/empathy-chat.c:3693
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "Prøv igjen"
-#: ../libempathy-gtk/empathy-chat.c:3722
+#: ../libempathy-gtk/empathy-chat.c:3697
msgid "Wrong password; please try again:"
msgstr "Feil passord; vennligst prøv igjen:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3852
+#: ../libempathy-gtk/empathy-chat.c:3827
msgid "This room is protected by a password:"
msgstr "Dette rommet er beskyttet med et passord:"
-#: ../libempathy-gtk/empathy-chat.c:3879
+#: ../libempathy-gtk/empathy-chat.c:3854
+#: ../src/empathy-new-chatroom-dialog.c:780
msgid "Join"
msgstr "Bli med"
-#: ../libempathy-gtk/empathy-chat.c:4071 ../src/empathy-event-manager.c:1300
+#: ../libempathy-gtk/empathy-chat.c:4046 ../src/empathy-event-manager.c:1188
msgid "Connected"
msgstr "Koblet til"
-#: ../libempathy-gtk/empathy-chat.c:4126
+#: ../libempathy-gtk/empathy-chat.c:4101
msgid "Conversation"
msgstr "Samtale"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4131
+#: ../libempathy-gtk/empathy-chat.c:4106
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
@@ -1703,17 +1703,17 @@ msgstr "Tilgang nektet"
msgid "Could not block contact"
msgstr "Kunne ikke blokkere kontakt"
-#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:610
+#: ../libempathy-gtk/empathy-contact-blocking-dialog.c:611
msgid "Edit Blocked Contacts"
msgstr "Rediger blokkerte kontakter"
#. Account and Identifier
#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:506
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:524
#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
#: ../libempathy-gtk/empathy-individual-widget.c:1474
#: ../src/empathy-chatrooms-window.ui.h:2
-#: ../src/empathy-new-chatroom-dialog.ui.h:7
+#: ../src/empathy-new-chatroom-dialog.ui.h:6
msgid "Account:"
msgstr "Konto:"
@@ -1739,29 +1739,29 @@ msgstr "_Ã…pne lenke"
msgid "%A %B %d %Y"
msgstr "%A %d %B %Y"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:326
+#: ../libempathy-gtk/empathy-contact-dialogs.c:325
#: ../libempathy-gtk/empathy-individual-dialogs.c:118
msgid "New Contact"
msgstr "Ny kontakt"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:395
+#: ../libempathy-gtk/empathy-contact-dialogs.c:394
#: ../libempathy-gtk/empathy-individual-dialogs.c:197
#, c-format
msgid "Block %s?"
msgstr "Blokker %s?"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:400
+#: ../libempathy-gtk/empathy-contact-dialogs.c:399
#: ../libempathy-gtk/empathy-individual-dialogs.c:252
#, c-format
msgid "Are you sure you want to block '%s' from contacting you again?"
msgstr "Er du sikker på at du vil blokkere «%s» fra å kontakte deg igjen?"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:405
+#: ../libempathy-gtk/empathy-contact-dialogs.c:404
#: ../libempathy-gtk/empathy-individual-dialogs.c:274
msgid "_Block"
msgstr "_Blokker"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:423
+#: ../libempathy-gtk/empathy-contact-dialogs.c:422
#: ../libempathy-gtk/empathy-individual-dialogs.c:283
msgid "_Report this contact as abusive"
msgid_plural "_Report these contacts as abusive"
@@ -1781,190 +1781,190 @@ msgid "Decide _Later"
msgstr "A_vgjør senere"
#. Title
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:499
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:517
msgid "Search contacts"
msgstr "Søk i kontakter"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:529
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:547
msgid "Search: "
msgstr "Søk: "
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:587
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
msgid "_Add Contact"
msgstr "_Legg til kontakt"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:623
msgid "No contacts found"
msgstr "Ingen kontakter funnet"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:621
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:639
msgid "Your message introducing yourself:"
msgstr "Melding der du introduserer deg selv:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:629
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:647
msgid "Please let me see when you're online. Thanks!"
msgstr "Vennligst la meg så når du er tilkoblet. Takk!"
-#: ../libempathy-gtk/empathy-contact-widget.c:567
+#: ../libempathy-gtk/empathy-contact-widget.c:566
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "Kanaler:"
-#: ../libempathy-gtk/empathy-contact-widget.c:747
+#: ../libempathy-gtk/empathy-contact-widget.c:746
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "ISO-kode for land:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:748
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "Land:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:750
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "Tilstand:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:752
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "By:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:754
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "Område:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:756
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "Postkode:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:758
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "Gate:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:760
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "Bygning:"
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:762
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "Etasje:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:764
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "Rom:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:766
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "Tekst:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:768
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "Beskrivelse:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:770
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "URI:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:772
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "Nøyaktighetsnivå:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:774
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "Feil:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:776
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "Vertikal feil (meter):"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:778
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "Horisontal feil (meter):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:780
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "Hastighet:"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:782
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "Retning:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:784
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "Klatrehastighet:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:786
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "Sist oppdatert:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:788
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "Lengdegrad:"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:790
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "Breddegrad:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:792
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "Høyde:"
-#: ../libempathy-gtk/empathy-contact-widget.c:846
-#: ../libempathy-gtk/empathy-contact-widget.c:861
+#: ../libempathy-gtk/empathy-contact-widget.c:845
+#: ../libempathy-gtk/empathy-contact-widget.c:860
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
-#: ../src/empathy-preferences.ui.h:35
+#: ../src/empathy-preferences.ui.h:42
msgid "Location"
msgstr "Sted"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:862
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s, %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:915
+#: ../libempathy-gtk/empathy-contact-widget.c:914
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "%B %e, %Y, %R UTC"
-#: ../libempathy-gtk/empathy-contact-widget.c:997
+#: ../libempathy-gtk/empathy-contact-widget.c:996
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "Lagre personbilder"
-#: ../libempathy-gtk/empathy-contact-widget.c:1053
+#: ../libempathy-gtk/empathy-contact-widget.c:1052
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "Kan ikke lagre personbilde"
-#: ../libempathy-gtk/empathy-contact-widget.c:1455
+#: ../libempathy-gtk/empathy-contact-widget.c:1454
msgid "Personal Details"
msgstr "Personlige detaljer"
-#: ../libempathy-gtk/empathy-contact-widget.c:1458
+#: ../libempathy-gtk/empathy-contact-widget.c:1457
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
@@ -2073,11 +2073,11 @@ msgstr "Versjon:"
msgid "Client:"
msgstr "Klient:"
-#: ../libempathy-gtk/empathy-groups-widget.c:331
+#: ../libempathy-gtk/empathy-groups-widget.c:327
msgid "Groups"
msgstr "Grupper"
-#: ../libempathy-gtk/empathy-groups-widget.c:343
+#: ../libempathy-gtk/empathy-groups-widget.c:339
msgid ""
"Select the groups you want this contact to appear in. Note that you can "
"select more than one group or no groups."
@@ -2085,17 +2085,16 @@ msgstr ""
"Velg gruppene du ønsker at denne kontakten skal vises i. Du kan velge flere "
"eller ingen."
-#: ../libempathy-gtk/empathy-groups-widget.c:362
+#: ../libempathy-gtk/empathy-groups-widget.c:358
msgid "_Add Group"
msgstr "_Legg til gruppe"
-#: ../libempathy-gtk/empathy-groups-widget.c:397
+#: ../libempathy-gtk/empathy-groups-widget.c:393
msgctxt "verb in a column header displaying group names"
msgid "Select"
msgstr "Velg"
-#: ../libempathy-gtk/empathy-groups-widget.c:407
-#: ../src/empathy-roster-window.c:1970
+#: ../libempathy-gtk/empathy-groups-widget.c:403
msgid "Group"
msgstr "Gruppe"
@@ -2123,137 +2122,137 @@ msgstr "Lenkede kontakter"
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:173
+#: ../libempathy-gtk/empathy-individual-menu.c:172
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:345
+#: ../libempathy-gtk/empathy-individual-menu.c:344
msgid "Select account to use to place the call"
msgstr "Velg en konto til bruk for samtalen"
-#. translators: Call is a noun. This string is used in the window
-#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:349
+#: ../libempathy-gtk/empathy-individual-menu.c:348
#: ../libempathy-gtk/empathy-log-window.ui.h:6
-#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:18
msgid "Call"
msgstr "Ring"
-#: ../libempathy-gtk/empathy-individual-menu.c:414
+#: ../libempathy-gtk/empathy-individual-menu.c:413
msgid "Mobile"
msgstr "Mobil"
-#: ../libempathy-gtk/empathy-individual-menu.c:416
+#: ../libempathy-gtk/empathy-individual-menu.c:415
msgid "Work"
msgstr "Arbeid"
-#: ../libempathy-gtk/empathy-individual-menu.c:418
+#: ../libempathy-gtk/empathy-individual-menu.c:417
msgid "HOME"
msgstr "Hjemme"
-#: ../libempathy-gtk/empathy-individual-menu.c:659
+#: ../libempathy-gtk/empathy-individual-menu.c:658
msgid "_Block Contact"
msgstr "_Blokker kontakt"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1018
-#: ../libempathy-gtk/empathy-new-message-dialog.c:319
-#: ../src/empathy-roster-window-menubar.ui.h:1
+#: ../libempathy-gtk/empathy-individual-menu.c:1017
+#: ../libempathy-gtk/empathy-new-message-dialog.c:318
msgid "_Chat"
msgstr "_Prat"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1053
-#: ../libempathy-gtk/empathy-new-message-dialog.c:313
+#: ../libempathy-gtk/empathy-individual-menu.c:1052
+#: ../libempathy-gtk/empathy-new-message-dialog.c:312
msgid "_SMS"
msgstr "_SMS"
-#: ../libempathy-gtk/empathy-individual-menu.c:1086
+#: ../libempathy-gtk/empathy-individual-menu.c:1085
msgctxt "menu item"
msgid "_Audio Call"
msgstr "_Lydsamtale"
-#: ../libempathy-gtk/empathy-individual-menu.c:1119
+#: ../libempathy-gtk/empathy-individual-menu.c:1118
msgctxt "menu item"
msgid "_Video Call"
msgstr "_Videosamtale"
-#: ../libempathy-gtk/empathy-individual-menu.c:1160
-#: ../src/empathy-roster-window-menubar.ui.h:4
+#: ../libempathy-gtk/empathy-individual-menu.c:1159
+#: ../src/empathy-roster-window-menubar.ui.h:11
msgid "_Previous Conversations"
msgstr "_Tidligere samtaler"
-#: ../libempathy-gtk/empathy-individual-menu.c:1189
+#: ../libempathy-gtk/empathy-individual-menu.c:1188
msgid "Send File"
msgstr "Send fil"
-#: ../libempathy-gtk/empathy-individual-menu.c:1219
+#: ../libempathy-gtk/empathy-individual-menu.c:1218
msgid "Share My Desktop"
msgstr "Del mitt skrivebord"
-#: ../libempathy-gtk/empathy-individual-menu.c:1245
+#: ../libempathy-gtk/empathy-individual-menu.c:1244
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "Favoritt"
-#: ../libempathy-gtk/empathy-individual-menu.c:1264
+#: ../libempathy-gtk/empathy-individual-menu.c:1263
msgid "gnome-contacts not installed"
msgstr "gnome-contacts er ikke installert"
-#: ../libempathy-gtk/empathy-individual-menu.c:1267
+#: ../libempathy-gtk/empathy-individual-menu.c:1266
msgid "Please install gnome-contacts to access contacts details."
msgstr "Vennligst installer gnome-contacts for tilgang til kontaktdetaljer."
-#: ../libempathy-gtk/empathy-individual-menu.c:1398
+#: ../libempathy-gtk/empathy-individual-menu.c:1397
msgid "Infor_mation"
msgstr "Infor_masjon"
-#: ../libempathy-gtk/empathy-individual-menu.c:1447
+#: ../libempathy-gtk/empathy-individual-menu.c:1446
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "R_ediger"
-#: ../libempathy-gtk/empathy-individual-menu.c:1564
-#: ../src/empathy-chat-window.c:1192
+#. send invitation
+#: ../libempathy-gtk/empathy-individual-menu.c:1562
+#: ../src/empathy-chat-window.c:1189
msgid "Inviting you to this room"
msgstr "Inviterer deg til dette rommet"
-#: ../libempathy-gtk/empathy-individual-menu.c:1610
+#: ../libempathy-gtk/empathy-individual-menu.c:1608
msgid "_Invite to Chat Room"
msgstr "_Inviter til praterom"
-#: ../libempathy-gtk/empathy-individual-menu.c:1806
-#: ../src/empathy-roster-window-menubar.ui.h:5
+#: ../libempathy-gtk/empathy-individual-menu.c:1804
msgid "_Add Contact…"
msgstr "_Legg til kontakt …"
-#: ../libempathy-gtk/empathy-individual-view.c:2304
+#: ../libempathy-gtk/empathy-individual-view.c:2364
msgid "Delete and _Block"
msgstr "Slett og _blokker"
-#: ../libempathy-gtk/empathy-individual-view.c:2339
+#: ../libempathy-gtk/empathy-individual-view.c:2399
#, c-format
msgid "Do you really want to remove the group '%s'?"
msgstr "Vil du virkelig fjerne gruppen «%s»?"
-#: ../libempathy-gtk/empathy-individual-view.c:2342
+#: ../libempathy-gtk/empathy-individual-view.c:2402
msgid "Removing group"
msgstr "Fjerner gruppe"
+#: ../libempathy-gtk/empathy-individual-view.c:2470
+msgid "Re_name"
+msgstr "Endre _navn"
+
#. Remove
-#: ../libempathy-gtk/empathy-individual-view.c:2397
-#: ../libempathy-gtk/empathy-individual-view.c:2601
+#: ../libempathy-gtk/empathy-individual-view.c:2479
+#: ../libempathy-gtk/empathy-individual-view.c:2683
msgid "_Remove"
msgstr "Fje_rn"
-#: ../libempathy-gtk/empathy-individual-view.c:2474
+#: ../libempathy-gtk/empathy-individual-view.c:2556
#, c-format
msgid "Do you really want to remove the contact '%s'?"
msgstr "Vil du virkelig fjerne kontakten «%s»?"
-#: ../libempathy-gtk/empathy-individual-view.c:2483
+#: ../libempathy-gtk/empathy-individual-view.c:2565
#, c-format
msgid ""
"Do you really want to remove the linked contact '%s'? Note that this will "
@@ -2262,7 +2261,7 @@ msgstr ""
"Vil du virkelig fjerne lenket kontakt «%s»? Merk at dette vil fjerne alle "
"kontaktene den lenkede kontakten består av."
-#: ../libempathy-gtk/empathy-individual-view.c:2495
+#: ../libempathy-gtk/empathy-individual-view.c:2577
msgid "Removing contact"
msgstr "Fjerner kontakt"
@@ -2306,135 +2305,135 @@ msgstr "ny tjener"
msgid "SSL"
msgstr "SSL"
-#: ../libempathy-gtk/empathy-log-window.c:620
+#: ../libempathy-gtk/empathy-log-window.c:617
msgid "History"
msgstr "Historikk"
-#: ../libempathy-gtk/empathy-log-window.c:675
+#: ../libempathy-gtk/empathy-log-window.c:672
msgid "Show"
msgstr "Vis"
-#: ../libempathy-gtk/empathy-log-window.c:697
+#: ../libempathy-gtk/empathy-log-window.c:694
msgid "Search"
msgstr "Søk"
-#: ../libempathy-gtk/empathy-log-window.c:1148
+#: ../libempathy-gtk/empathy-log-window.c:1145
#, c-format
msgid "Chat in %s"
msgstr "Prat i %s"
-#: ../libempathy-gtk/empathy-log-window.c:1150
+#: ../libempathy-gtk/empathy-log-window.c:1147
#, c-format
msgid "Chat with %s"
msgstr "Prat med %s"
-#: ../libempathy-gtk/empathy-log-window.c:1200
-#: ../libempathy-gtk/empathy-log-window.c:1347
+#: ../libempathy-gtk/empathy-log-window.c:1197
+#: ../libempathy-gtk/empathy-log-window.c:1341
msgctxt "A date with the time"
msgid "%A, %e %B %Y %X"
msgstr "%A, %e %B %Y %X"
#. Translators: this is an emote: '* Danielle waves'
-#: ../libempathy-gtk/empathy-log-window.c:1289
+#: ../libempathy-gtk/empathy-log-window.c:1284
#, c-format
msgid "<i>* %s %s</i>"
msgstr "<i>* %s %s</i>"
#. Translators: this is a message: 'Danielle: hello'
#. * The string in bold is the sender's name
-#: ../libempathy-gtk/empathy-log-window.c:1295
+#: ../libempathy-gtk/empathy-log-window.c:1290
#, c-format
msgid "<b>%s:</b> %s"
msgstr "<b>%s:</b> %s"
-#: ../libempathy-gtk/empathy-log-window.c:1371
+#: ../libempathy-gtk/empathy-log-window.c:1365
#, c-format
msgid "%s second"
msgid_plural "%s seconds"
msgstr[0] "%s sekund"
msgstr[1] "%s sekunder"
-#: ../libempathy-gtk/empathy-log-window.c:1378
+#: ../libempathy-gtk/empathy-log-window.c:1372
#, c-format
msgid "%s minute"
msgid_plural "%s minutes"
msgstr[0] "%s minutt"
msgstr[1] "%s minutter"
-#: ../libempathy-gtk/empathy-log-window.c:1386
+#: ../libempathy-gtk/empathy-log-window.c:1380
#, c-format
msgid "Call took %s, ended at %s"
msgstr "Samtalen tok %s, avsluttet %s"
-#: ../libempathy-gtk/empathy-log-window.c:1720
+#: ../libempathy-gtk/empathy-log-window.c:1711
msgid "Today"
msgstr "I dag"
-#: ../libempathy-gtk/empathy-log-window.c:1724
+#: ../libempathy-gtk/empathy-log-window.c:1715
msgid "Yesterday"
msgstr "I går"
#. Translators: A date such as '23 May 2010' (strftime format)
-#: ../libempathy-gtk/empathy-log-window.c:1739
+#: ../libempathy-gtk/empathy-log-window.c:1730
msgid "%e %B %Y"
msgstr "%e %B %Y"
-#: ../libempathy-gtk/empathy-log-window.c:1843
-#: ../libempathy-gtk/empathy-log-window.c:3471
+#: ../libempathy-gtk/empathy-log-window.c:1834
+#: ../libempathy-gtk/empathy-log-window.c:3457
msgid "Anytime"
msgstr "NÃ¥r som helst"
-#: ../libempathy-gtk/empathy-log-window.c:1942
-#: ../libempathy-gtk/empathy-log-window.c:2401
+#: ../libempathy-gtk/empathy-log-window.c:1933
+#: ../libempathy-gtk/empathy-log-window.c:2392
msgid "Anyone"
msgstr "Hvem som helst"
-#: ../libempathy-gtk/empathy-log-window.c:2714
+#: ../libempathy-gtk/empathy-log-window.c:2705
msgid "Who"
msgstr "Hvem"
-#: ../libempathy-gtk/empathy-log-window.c:2923
+#: ../libempathy-gtk/empathy-log-window.c:2914
msgid "When"
msgstr "NÃ¥r"
-#: ../libempathy-gtk/empathy-log-window.c:3039
+#: ../libempathy-gtk/empathy-log-window.c:3032
msgid "Anything"
msgstr "Hva som helst"
-#: ../libempathy-gtk/empathy-log-window.c:3041
+#: ../libempathy-gtk/empathy-log-window.c:3034
msgid "Text chats"
msgstr "Tekstsamtaler"
-#: ../libempathy-gtk/empathy-log-window.c:3043
-#: ../src/empathy-preferences.ui.h:25
+#: ../libempathy-gtk/empathy-log-window.c:3035
+#: ../src/empathy-preferences.ui.h:32
msgid "Calls"
msgstr "Samtaler"
-#: ../libempathy-gtk/empathy-log-window.c:3048
+#: ../libempathy-gtk/empathy-log-window.c:3039
msgid "Incoming calls"
msgstr "Innkommende samtaler"
-#: ../libempathy-gtk/empathy-log-window.c:3049
+#: ../libempathy-gtk/empathy-log-window.c:3040
msgid "Outgoing calls"
msgstr "Utgående samtaler"
-#: ../libempathy-gtk/empathy-log-window.c:3050
+#: ../libempathy-gtk/empathy-log-window.c:3041
msgid "Missed calls"
msgstr "Tapte samtaler"
-#: ../libempathy-gtk/empathy-log-window.c:3072
+#: ../libempathy-gtk/empathy-log-window.c:3061
msgid "What"
msgstr "Hva"
-#: ../libempathy-gtk/empathy-log-window.c:3764
+#: ../libempathy-gtk/empathy-log-window.c:3750
msgid "Are you sure you want to delete all logs of previous conversations?"
msgstr "Er du sikker på at du vil slette alle logger av tidligere samtaler?"
-#: ../libempathy-gtk/empathy-log-window.c:3768
+#: ../libempathy-gtk/empathy-log-window.c:3754
msgid "Clear All"
msgstr "Tøm alle"
-#: ../libempathy-gtk/empathy-log-window.c:3775
+#: ../libempathy-gtk/empathy-log-window.c:3761
msgid "Delete from:"
msgstr "Slett fra:"
@@ -2444,7 +2443,6 @@ msgstr "_Fil"
#: ../libempathy-gtk/empathy-log-window.ui.h:2
#: ../src/empathy-call-window.ui.h:2 ../src/empathy-chat-window.ui.h:9
-#: ../src/empathy-roster-window-menubar.ui.h:12
msgid "_Edit"
msgstr "_Rediger"
@@ -2457,13 +2455,12 @@ msgid "Profile"
msgstr "Profil"
#: ../libempathy-gtk/empathy-log-window.ui.h:5
-#: ../src/empathy-chat-window.ui.h:19
+#: ../src/empathy-chat-window.ui.h:19 ../src/empathy-preferences.ui.h:14
msgid "Chat"
msgstr "Prat"
#: ../libempathy-gtk/empathy-log-window.ui.h:7
#: ../src/empathy-call-window.ui.h:26
-#: ../src/empathy-streamed-media-window.ui.h:19
msgid "Video"
msgstr "Video"
@@ -2475,79 +2472,79 @@ msgstr "side 2"
msgid "<span size=\"x-large\">Loading...</span>"
msgstr "<span size=\"x-large\">Laster …</span>"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:83
+#: ../libempathy-gtk/empathy-new-message-dialog.c:82
msgid "The contact is offline"
msgstr "Kontakten er koblet fra"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:85
+#: ../libempathy-gtk/empathy-new-message-dialog.c:84
msgid "The specified contact is either invalid or unknown"
msgstr "Valgt kontakt er ugyldig eller ukjent"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:87
+#: ../libempathy-gtk/empathy-new-message-dialog.c:86
msgid "The contact does not support this kind of conversation"
msgstr "Kontakten støtter ikke denne type samtale"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:89
+#: ../libempathy-gtk/empathy-new-message-dialog.c:88
msgid "The requested functionality is not implemented for this protocol"
msgstr "Forespurt funksjonalitet er ikke implementert for denne protokollen"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:95
+#: ../libempathy-gtk/empathy-new-message-dialog.c:94
msgid "Could not start a conversation with the given contact"
msgstr "Kunne ikke starte en samtale med oppgitt kontakt"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:97
+#: ../libempathy-gtk/empathy-new-message-dialog.c:96
msgid "You are banned from this channel"
msgstr "Du er bannlyst fra denne kanalen"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:99
+#: ../libempathy-gtk/empathy-new-message-dialog.c:98
msgid "This channel is full"
msgstr "Kanalen er full"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:101
+#: ../libempathy-gtk/empathy-new-message-dialog.c:100
msgid "You must be invited to join this channel"
msgstr "Du må bli invitert til å bli med i denne kanalen"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:103
+#: ../libempathy-gtk/empathy-new-message-dialog.c:102
msgid "Can't proceed while disconnected"
msgstr "Kan ikke fortsette da du er koblet fra"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:105
+#: ../libempathy-gtk/empathy-new-message-dialog.c:104
msgid "Permission denied"
msgstr "Tilgang nektet"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:111
+#: ../libempathy-gtk/empathy-new-message-dialog.c:110
msgid "There was an error starting the conversation"
msgstr "Det oppsto en feil ved start av samtalen"
-#: ../libempathy-gtk/empathy-new-message-dialog.c:290
-#: ../libempathy-gtk/empathy-new-call-dialog.c:200
+#: ../libempathy-gtk/empathy-new-message-dialog.c:289
+#: ../libempathy-gtk/empathy-new-call-dialog.c:199
msgid "Enter a contact identifier or phone number:"
msgstr "Oppgi en kontaktidentifikator eller telefonnummer:"
#. Tweak the dialog
-#: ../libempathy-gtk/empathy-new-message-dialog.c:333
+#: ../libempathy-gtk/empathy-new-message-dialog.c:332
msgid "New Conversation"
msgstr "Ny samtale"
#. add video button
-#: ../libempathy-gtk/empathy-new-call-dialog.c:223
+#: ../libempathy-gtk/empathy-new-call-dialog.c:222
msgid "_Video Call"
msgstr "_Videosamtale"
#. add audio button
-#: ../libempathy-gtk/empathy-new-call-dialog.c:233
+#: ../libempathy-gtk/empathy-new-call-dialog.c:232
msgid "_Audio Call"
msgstr "_Lydsamtale"
#. Tweak the dialog
-#: ../libempathy-gtk/empathy-new-call-dialog.c:243
+#: ../libempathy-gtk/empathy-new-call-dialog.c:242
msgid "New Call"
msgstr "Ny samtale"
#: ../libempathy-gtk/empathy-bad-password-dialog.c:130
#, c-format
-msgid "Authentification failed for account <b>%s</b>"
-msgstr "Autentiseringen feilet for konto <b>%s</b>"
+msgid "Authentication failed for account <b>%s</b>"
+msgstr "Autentisering feilet for konto <b>%s</b>"
#: ../libempathy-gtk/empathy-base-password-dialog.c:224
#: ../libempathy-gtk/empathy-password-dialog.c:134
@@ -2565,30 +2562,41 @@ msgstr ""
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:167
-#: ../libempathy-gtk/empathy-presence-chooser.c:203
+#: ../libempathy-gtk/empathy-presence-chooser.c:165
+#: ../libempathy-gtk/empathy-presence-chooser.c:201
msgid "Custom Message…"
msgstr "Egendefinert melding …"
+#: ../libempathy-gtk/empathy-presence-chooser.c:218
#: ../libempathy-gtk/empathy-presence-chooser.c:220
-#: ../libempathy-gtk/empathy-presence-chooser.c:222
msgid "Edit Custom Messages…"
msgstr "Rediger egendefinerte meldinger …"
-#: ../libempathy-gtk/empathy-presence-chooser.c:345
+#: ../libempathy-gtk/empathy-presence-chooser.c:342
msgid "Click to remove this status as a favorite"
msgstr "Klikk for å fjerne denne statusen som favoritt"
-#: ../libempathy-gtk/empathy-presence-chooser.c:354
+#: ../libempathy-gtk/empathy-presence-chooser.c:351
msgid "Click to make this status a favorite"
msgstr "Klikk for å gjøre denne statusen til en favoritt"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#. Translators: %s is a status message like 'At the pub' for example
+#: ../libempathy-gtk/empathy-presence-chooser.c:385
+#, c-format
+msgid ""
+"<b>Current message: %s</b>\n"
+"<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"
+msgstr ""
+"<b>Aktiv melding: %s</b>\n"
+"<small><i>Trykk linjeskift for å sette ny melding eller Esc for å avbryte.</"
+"i></small>"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:394
msgid "Set status"
msgstr "Sett status"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1102
msgid "Custom messages…"
msgstr "Egendefinerte meldinger …"
@@ -2976,23 +2984,23 @@ msgstr "Ingen feilmelding"
msgid "Instant Message (Empathy)"
msgstr "Lynmelding (Empathy)"
-#: ../src/empathy.c:435
+#: ../src/empathy.c:428
msgid "Don't connect on startup"
msgstr "Ikke koble til ved oppstart"
-#: ../src/empathy.c:439
+#: ../src/empathy.c:432
msgid "Don't display the contact list or any other dialogs on startup"
msgstr "Ikke vis kontaktlisten eller andre dialoger ved oppstart"
-#: ../src/empathy.c:454
+#: ../src/empathy.c:448
msgid "- Empathy IM Client"
msgstr "- Empathy lynmeldingsprogram"
-#: ../src/empathy.c:641
+#: ../src/empathy.c:624
msgid "Error contacting the Account Manager"
msgstr "Feil ved forsøk på å kontakte kontohåndtering"
-#: ../src/empathy.c:643
+#: ../src/empathy.c:626
#, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. "
@@ -3052,42 +3060,40 @@ msgstr ""
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:72
+#: ../src/empathy-accounts-dialog.c:70
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "Det finnes ikke-lagrede endringer for din %s-konto."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:76
+#: ../src/empathy-accounts-dialog.c:74
msgid "Your new account has not been saved yet."
msgstr "Din nye konto er ikke lagret ennå."
-#: ../src/empathy-accounts-dialog.c:381
-#: ../src/empathy-streamed-media-window.c:759
-#: ../src/empathy-call-window.c:1278
+#: ../src/empathy-accounts-dialog.c:403 ../src/empathy-call-window.c:1265
msgid "Connecting…"
msgstr "Kobler til …"
-#: ../src/empathy-accounts-dialog.c:422
+#: ../src/empathy-accounts-dialog.c:444
#, c-format
msgid "Offline — %s"
msgstr "Frakoblet - %s"
-#: ../src/empathy-accounts-dialog.c:434
+#: ../src/empathy-accounts-dialog.c:456
#, c-format
msgid "Disconnected — %s"
msgstr "Koblet fra - %s"
-#: ../src/empathy-accounts-dialog.c:445
+#: ../src/empathy-accounts-dialog.c:467
msgid "Offline — No Network Connection"
msgstr "Frakoblet - Ingen nettverkstilkobling"
-#: ../src/empathy-accounts-dialog.c:452
+#: ../src/empathy-accounts-dialog.c:474
msgid "Unknown Status"
msgstr "Ukjent status"
-#: ../src/empathy-accounts-dialog.c:469
+#: ../src/empathy-accounts-dialog.c:491
msgid ""
"This account has been disabled because it relies on an old, unsupported "
"backend. Please install telepathy-haze and restart your session to migrate "
@@ -3097,36 +3103,36 @@ msgstr ""
"som ikke støttes. Vennligst installer telepathy-haze og start økten på nytt "
"for å migrere kontoen."
-#: ../src/empathy-accounts-dialog.c:479
+#: ../src/empathy-accounts-dialog.c:501
msgid "Offline — Account Disabled"
msgstr "Frakoblet - Konto deaktivert"
-#: ../src/empathy-accounts-dialog.c:585
+#: ../src/empathy-accounts-dialog.c:607
msgid "Edit Connection Parameters"
msgstr "Rediger parametere for tilkobling"
-#: ../src/empathy-accounts-dialog.c:750
+#: ../src/empathy-accounts-dialog.c:770
msgid "Failed to retrieve your personal information from the server."
msgstr "Klarte ikke å hente din personlige informasjon fra tjeneren."
-#: ../src/empathy-accounts-dialog.c:756
+#: ../src/empathy-accounts-dialog.c:776
msgid "Go online to edit your personal information."
msgstr "Rediger din personlige informasjon på nettet."
-#: ../src/empathy-accounts-dialog.c:843
+#: ../src/empathy-accounts-dialog.c:850
msgid "_Edit Connection Parameters..."
msgstr "R_ediger parametere for tilkoblingen …"
-#: ../src/empathy-accounts-dialog.c:1339
+#: ../src/empathy-accounts-dialog.c:1346
#, c-format
msgid "Do you want to remove %s from your computer?"
msgstr "Vil du fjerne %s fra din datamaskin?"
-#: ../src/empathy-accounts-dialog.c:1343
+#: ../src/empathy-accounts-dialog.c:1350
msgid "This will not remove your account on the server."
msgstr "Dette vil ikke fjerne din konto på tjeneren."
-#: ../src/empathy-accounts-dialog.c:1579
+#: ../src/empathy-accounts-dialog.c:1555
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3134,24 +3140,25 @@ msgstr ""
"Du er i ferd med å velge en annen konto hvilket vil forkaste\n"
"dine endringer. Er du sikker på at du vil fortsette?"
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1755
-msgid "_Enable"
-msgstr "Slå _på"
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1746
+msgid "_Enabled"
+msgstr "Slått _på"
-#: ../src/empathy-accounts-dialog.c:1756
-msgid "_Disable"
-msgstr "Slå _av"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1769
+msgid "Rename"
+msgstr "Endre navn"
-#: ../src/empathy-accounts-dialog.c:2184
+#: ../src/empathy-accounts-dialog.c:2185
msgid "_Skip"
msgstr "_Hopp over"
-#: ../src/empathy-accounts-dialog.c:2188
+#: ../src/empathy-accounts-dialog.c:2189
msgid "_Connect"
msgstr "_Koble til"
-#: ../src/empathy-accounts-dialog.c:2365
+#: ../src/empathy-accounts-dialog.c:2368
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3187,187 +3194,7 @@ msgstr "- Empathy autentiseringsklient"
msgid "Empathy authentication client"
msgstr "Empathy autentiseringsklient"
-#: ../src/empathy-av.c:118 ../src/empathy-call.c:201
-msgid "- Empathy Audio/Video Client"
-msgstr "- Empathy lyd-/bildeklient"
-
-#: ../src/empathy-av.c:134 ../src/empathy-call.c:223
-msgid "Empathy Audio/Video Client"
-msgstr "Empathy lyd-/bildeklient"
-
-#: ../src/empathy-streamed-media-window.c:434
-msgid "Contrast"
-msgstr "Kontrast"
-
-#: ../src/empathy-streamed-media-window.c:437
-msgid "Brightness"
-msgstr "Lysstyrke"
-
-#: ../src/empathy-streamed-media-window.c:440
-msgid "Gamma"
-msgstr "Gamma"
-
-#: ../src/empathy-streamed-media-window.c:547
-msgid "Volume"
-msgstr "Volum"
-
-#: ../src/empathy-streamed-media-window.c:1099
-msgid "_Sidebar"
-msgstr "_Sidelinje"
-
-#: ../src/empathy-streamed-media-window.c:1119
-msgid "Audio input"
-msgstr "Lydinngang"
-
-#: ../src/empathy-streamed-media-window.c:1123
-msgid "Video input"
-msgstr "Videoinngang"
-
-#: ../src/empathy-streamed-media-window.c:1131
-msgid "Dialpad"
-msgstr "Nummertavle"
-
-#: ../src/empathy-streamed-media-window.c:1142
-msgid "Details"
-msgstr "Detaljer"
-
-#. translators: Call is a noun and %s is the contact name. This string
-#. * is used in the window title
-#: ../src/empathy-streamed-media-window.c:1211
-#: ../src/empathy-call-window.c:1872
-#, c-format
-msgid "Call with %s"
-msgstr "Samtale med %s"
-
-#: ../src/empathy-streamed-media-window.c:1444
-#: ../src/empathy-call-window.c:2116
-msgid "The IP address as seen by the machine"
-msgstr "IP-adresse som sett av maskinen"
-
-#: ../src/empathy-streamed-media-window.c:1446
-#: ../src/empathy-call-window.c:2118
-msgid "The IP address as seen by a server on the Internet"
-msgstr "IP-adresse som sett av en tjener på internett"
-
-#: ../src/empathy-streamed-media-window.c:1448
-#: ../src/empathy-call-window.c:2120
-msgid "The IP address of the peer as seen by the other side"
-msgstr "IP-adresse for peer som sett av andre siden"
-
-#: ../src/empathy-streamed-media-window.c:1450
-#: ../src/empathy-call-window.c:2122
-msgid "The IP address of a relay server"
-msgstr "IP-adresse for en relay-tjener"
-
-#: ../src/empathy-streamed-media-window.c:1452
-#: ../src/empathy-call-window.c:2124
-msgid "The IP address of the multicast group"
-msgstr "IP-adresse for multicast-gruppe"
-
-#: ../src/empathy-streamed-media-window.c:1837
-#: ../src/empathy-streamed-media-window.c:1840
-#: ../src/empathy-streamed-media-window.c:1843
-#: ../src/empathy-streamed-media-window.c:1846
-msgctxt "codec"
-msgid "Unknown"
-msgstr "Ukjent"
-
-#. Translators: number of minutes:seconds the caller has been connected
-#: ../src/empathy-streamed-media-window.c:2138
-#, c-format
-msgid "Connected — %d:%02dm"
-msgstr "Koblet til - %d:%02dm"
-
-#: ../src/empathy-streamed-media-window.c:2199
-#: ../src/empathy-call-window.c:2975
-msgid "Technical Details"
-msgstr "Tekniske detaljer"
-
-#: ../src/empathy-streamed-media-window.c:2237
-#: ../src/empathy-call-window.c:3014
-#, c-format
-msgid ""
-"%s's software does not understand any of the audio formats supported by your "
-"computer"
-msgstr ""
-"Programvaren til %s forstår ikke noen av lydformatene som støttes av din "
-"datamaskin"
-
-#: ../src/empathy-streamed-media-window.c:2242
-#: ../src/empathy-call-window.c:3019
-#, c-format
-msgid ""
-"%s's software does not understand any of the video formats supported by your "
-"computer"
-msgstr ""
-"Programvaren til %s forstår ikke noen av videoformatene som støttes av din "
-"datamaskin"
-
-#: ../src/empathy-streamed-media-window.c:2248
-#: ../src/empathy-call-window.c:3025
-#, c-format
-msgid ""
-"Can't establish a connection to %s. One of you might be on a network that "
-"does not allow direct connections."
-msgstr ""
-"Kan ikke etablere tilkobling til %s. En av dere kan være på et nettverk som "
-"ikke tillater direkte tilkoblinger."
-
-#: ../src/empathy-streamed-media-window.c:2254
-#: ../src/empathy-call-window.c:3031
-msgid "There was a failure on the network"
-msgstr "Det oppsto en feil på nettverket"
-
-#: ../src/empathy-streamed-media-window.c:2258
-#: ../src/empathy-call-window.c:3035
-msgid ""
-"The audio formats necessary for this call are not installed on your computer"
-msgstr ""
-"Lydformatene som kreves for denne samtalen er ikke installert på din "
-"datamaskin"
-
-#: ../src/empathy-streamed-media-window.c:2261
-#: ../src/empathy-call-window.c:3038
-msgid ""
-"The video formats necessary for this call are not installed on your computer"
-msgstr ""
-"Videoformatene som kreves for denne samtalen er ikke installert på din "
-"datamaskin"
-
-#: ../src/empathy-streamed-media-window.c:2271
-#: ../src/empathy-call-window.c:3050
-#, c-format
-msgid ""
-"Something unexpected happened in a Telepathy component. Please <a href=\"%s"
-"\">report this bug</a> and attach logs gathered from the 'Debug' window in "
-"the Help menu."
-msgstr ""
-"Noe uventet skjedde i en Telepathy-komponent. Vennligst <a href=\"%s"
-"\">rapporter denne feilen</a> og legg ved loggene som samles inn i "
-"«Feilsøking»-vinduet i Hjelp-menyen."
-
-#: ../src/empathy-streamed-media-window.c:2279
-#: ../src/empathy-call-window.c:3059
-msgid "There was a failure in the call engine"
-msgstr "Det oppsto en feil i samtalemotoren"
-
-#: ../src/empathy-streamed-media-window.c:2282
-#: ../src/empathy-call-window.c:3062
-msgid "The end of the stream was reached"
-msgstr "Slutt på strømmen ble nådd"
-
-#: ../src/empathy-streamed-media-window.c:2322
-#: ../src/empathy-call-window.c:3102
-msgid "Can't establish audio stream"
-msgstr "Kan ikke etablere lydstrøm"
-
-#: ../src/empathy-streamed-media-window.c:2332
-#: ../src/empathy-call-window.c:3112
-msgid "Can't establish video stream"
-msgstr "Kan ikke etablere videostrøm"
-
#: ../src/empathy-call-window.ui.h:1
-#: ../src/empathy-streamed-media-window.ui.h:1
msgid "_Call"
msgstr "_Ring"
@@ -3384,23 +3211,18 @@ msgid "_Settings"
msgstr "Inn_stillinger"
#: ../src/empathy-call-window.ui.h:6
-#: ../src/empathy-roster-window-menubar.ui.h:17
-#: ../src/empathy-streamed-media-window.ui.h:8
msgid "_View"
msgstr "_Vis"
#: ../src/empathy-call-window.ui.h:7 ../src/empathy-chat-window.ui.h:17
-#: ../src/empathy-roster-window-menubar.ui.h:27
msgid "_Help"
msgstr "_Hjelp"
#: ../src/empathy-call-window.ui.h:8 ../src/empathy-chat-window.ui.h:18
-#: ../src/empathy-roster-window-menubar.ui.h:28
msgid "_Contents"
msgstr "_Innhold"
#: ../src/empathy-call-window.ui.h:9
-#: ../src/empathy-roster-window-menubar.ui.h:29
msgid "_Debug"
msgstr "_Feilsøk"
@@ -3421,12 +3243,10 @@ msgid "Disable camera"
msgstr "Slå av kamera"
#: ../src/empathy-call-window.ui.h:14
-#: ../src/empathy-streamed-media-window.ui.h:2
msgid "Hang up"
msgstr "Legg på"
#: ../src/empathy-call-window.ui.h:15
-#: ../src/empathy-streamed-media-window.ui.h:9
msgid "Hang up current call"
msgstr "Legg på denne samtalen"
@@ -3459,52 +3279,44 @@ msgid "Toggle video transmission"
msgstr "Slå av/på overføring av video"
#: ../src/empathy-call-window.ui.h:24
-#: ../src/empathy-streamed-media-window.ui.h:11
msgid "Send Audio"
msgstr "Send lyd"
#: ../src/empathy-call-window.ui.h:25
-#: ../src/empathy-streamed-media-window.ui.h:12
msgid "Toggle audio transmission"
msgstr "Slå av/på overføring av lyd"
#: ../src/empathy-call-window.ui.h:27
-#: ../src/empathy-streamed-media-window.ui.h:20
msgid "Encoding Codec:"
msgstr "Kodek for koding:"
-#: ../src/empathy-call-window.ui.h:28
-#: ../src/empathy-streamed-media-window.ui.h:21
-#: ../src/empathy-call-window.c:2525 ../src/empathy-call-window.c:2526
-#: ../src/empathy-call-window.c:2527 ../src/empathy-call-window.c:2528
+#: ../src/empathy-call-window.ui.h:28 ../src/empathy-call-window.c:2511
+#: ../src/empathy-call-window.c:2512 ../src/empathy-call-window.c:2513
+#: ../src/empathy-call-window.c:2514
msgid "Unknown"
msgstr "Ukjent"
#: ../src/empathy-call-window.ui.h:29
-#: ../src/empathy-streamed-media-window.ui.h:22
msgid "Decoding Codec:"
msgstr "Kodek for dekoding:"
#: ../src/empathy-call-window.ui.h:30
-#: ../src/empathy-streamed-media-window.ui.h:23
msgid "Remote Candidate:"
msgstr "Ekstern kandidat:"
#: ../src/empathy-call-window.ui.h:31
-#: ../src/empathy-streamed-media-window.ui.h:24
msgid "Local Candidate:"
msgstr "Lokal kandidat:"
-#: ../src/empathy-call-window.ui.h:32 ../src/empathy-preferences.ui.h:24
-#: ../src/empathy-streamed-media-window.ui.h:25
+#: ../src/empathy-call-window.ui.h:32 ../src/empathy-preferences.ui.h:31
msgid "Audio"
msgstr "Lyd"
-#: ../src/empathy-chat-window.c:289
+#: ../src/empathy-chat-window.c:287
msgid "Close this window?"
msgstr "Lukk dette vinduet?"
-#: ../src/empathy-chat-window.c:294
+#: ../src/empathy-chat-window.c:292
#, c-format
msgid ""
"Closing this window will leave %s. You will not receive any further messages "
@@ -3513,7 +3325,7 @@ msgstr ""
"Hvis du lukker dette vinduet vil du forlate %s. Du vil ikke motta videre "
"meldinger før du blir med igjen."
-#: ../src/empathy-chat-window.c:305
+#: ../src/empathy-chat-window.c:303
#, c-format
msgid ""
"Closing this window will leave a chat room. You will not receive any further "
@@ -3528,12 +3340,12 @@ msgstr[1] ""
"Hvis du lukker dette vinduet vil du forlate %u praterom. Du vil ikke motta "
"videre meldinger før du blir med igjen."
-#: ../src/empathy-chat-window.c:314
+#: ../src/empathy-chat-window.c:312
#, c-format
msgid "Leave %s?"
msgstr "Forlat %s?"
-#: ../src/empathy-chat-window.c:315
+#: ../src/empathy-chat-window.c:313
msgid ""
"You will not receive any further messages from this chat room until you "
"rejoin it."
@@ -3541,54 +3353,54 @@ msgstr ""
"Du vil ikke motta videre meldinger fra dette praterommet før du blir med "
"igjen."
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:332
msgid "Close window"
msgstr "Lukk vindu"
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:332
msgid "Leave room"
msgstr "Forlat rom"
-#: ../src/empathy-chat-window.c:640 ../src/empathy-chat-window.c:660
+#: ../src/empathy-chat-window.c:638 ../src/empathy-chat-window.c:658
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
msgstr[0] "%s (%d ulest)"
msgstr[1] "%s (%d uleste)"
-#: ../src/empathy-chat-window.c:652
+#: ../src/empathy-chat-window.c:650
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
msgstr[0] "%s (og %u annen)"
msgstr[1] "%s (og %u andre)"
-#: ../src/empathy-chat-window.c:668
+#: ../src/empathy-chat-window.c:666
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
msgstr[0] "%s (%d ulest fra andre)"
msgstr[1] "%s (%d uleste fra andre)"
-#: ../src/empathy-chat-window.c:677
+#: ../src/empathy-chat-window.c:675
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
msgstr[0] "%s (%d ulest fra alle)"
msgstr[1] "%s (%d uleste fra alle)"
-#: ../src/empathy-chat-window.c:892
+#: ../src/empathy-chat-window.c:890
msgid "SMS:"
msgstr "SMS:"
-#: ../src/empathy-chat-window.c:902
+#: ../src/empathy-chat-window.c:900
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
msgstr[0] "Sender %d melding"
msgstr[1] "Sender %d meldinger"
-#: ../src/empathy-chat-window.c:924
+#: ../src/empathy-chat-window.c:922
msgid "Typing a message."
msgstr "Skriver en melding"
@@ -3668,96 +3480,94 @@ msgstr "Koble til automatisk"
msgid "Manage Favorite Rooms"
msgstr "HÃ¥ndter favorittrom"
-#: ../src/empathy-event-manager.c:522
+#: ../src/empathy-event-manager.c:510
msgid "Incoming video call"
msgstr "Innkommende videosamtale"
-#: ../src/empathy-event-manager.c:522 ../src/empathy-call-window.c:1494
+#: ../src/empathy-event-manager.c:510 ../src/empathy-call-window.c:1480
msgid "Incoming call"
msgstr "Innkommende samtale"
-#: ../src/empathy-event-manager.c:526
+#: ../src/empathy-event-manager.c:514
#, c-format
msgid "%s is video calling you. Do you want to answer?"
msgstr "%s ringer deg med video. Vil du svare?"
-#: ../src/empathy-event-manager.c:527
+#: ../src/empathy-event-manager.c:515
#, c-format
msgid "%s is calling you. Do you want to answer?"
msgstr "%s ringer deg. Vil du svare?"
-#: ../src/empathy-event-manager.c:530 ../src/empathy-event-manager.c:731
-#: ../src/empathy-event-manager.c:764 ../src/empathy-call-window.c:1500
+#: ../src/empathy-event-manager.c:518 ../src/empathy-event-manager.c:915
+#: ../src/empathy-call-window.c:1486
#, c-format
msgid "Incoming call from %s"
msgstr "Innkommende samtale fra %s"
-#: ../src/empathy-event-manager.c:555
+#: ../src/empathy-event-manager.c:543
msgid "_Reject"
msgstr "Av_vis"
-#: ../src/empathy-event-manager.c:563 ../src/empathy-event-manager.c:571
+#: ../src/empathy-event-manager.c:551 ../src/empathy-event-manager.c:559
msgid "_Answer"
msgstr "Sv_ar"
-#: ../src/empathy-event-manager.c:571
+#: ../src/empathy-event-manager.c:559
msgid "_Answer with video"
msgstr "Sv_ar med video"
-#: ../src/empathy-event-manager.c:731 ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1500
-#, c-format
-msgid "Incoming video call from %s"
-msgstr "Innkommende videosamtale fra %s"
-
-#: ../src/empathy-event-manager.c:837
+#: ../src/empathy-event-manager.c:714
msgid "Room invitation"
msgstr "Invitasjon til rom"
-#: ../src/empathy-event-manager.c:839
+#: ../src/empathy-event-manager.c:716
#, c-format
msgid "Invitation to join %s"
msgstr "Invitasjon til å bli med i %s"
-#: ../src/empathy-event-manager.c:846
+#: ../src/empathy-event-manager.c:723
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s inviterer deg til å bli med i %s"
-#: ../src/empathy-event-manager.c:854
+#: ../src/empathy-event-manager.c:731
msgid "_Decline"
msgstr "_Avslå"
-#: ../src/empathy-event-manager.c:859
-#: ../src/empathy-new-chatroom-dialog.ui.h:2
+#: ../src/empathy-event-manager.c:736
msgid "_Join"
msgstr "_Bli med"
-#: ../src/empathy-event-manager.c:886
+#: ../src/empathy-event-manager.c:762
#, c-format
msgid "%s invited you to join %s"
msgstr "%s inviterte deg til å bli med i %s"
-#: ../src/empathy-event-manager.c:892
+#: ../src/empathy-event-manager.c:768
#, c-format
msgid "You have been invited to join %s"
msgstr "Du har blitt invitert til å bli med i %s"
-#: ../src/empathy-event-manager.c:943
+#: ../src/empathy-event-manager.c:915 ../src/empathy-call-window.c:1486
+#, c-format
+msgid "Incoming video call from %s"
+msgstr "Innkommende videosamtale fra %s"
+
+#: ../src/empathy-event-manager.c:947
#, c-format
msgid "Incoming file transfer from %s"
msgstr "Innkommende filoverføring fra %s"
-#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:374
+#: ../src/empathy-event-manager.c:983 ../src/empathy-roster-window.c:357
msgid "Password required"
msgstr "Passord kreves"
-#: ../src/empathy-event-manager.c:1216
+#: ../src/empathy-event-manager.c:1105
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s ønsker rettigheter til å se når du er tilkoblet"
-#: ../src/empathy-event-manager.c:1222
+#: ../src/empathy-event-manager.c:1111
#, c-format
msgid ""
"\n"
@@ -3892,86 +3702,70 @@ msgid "Import Accounts"
msgstr "Importer kontoer"
#. Translators: this is the header of a treeview column
-#: ../src/empathy-import-widget.c:306
+#: ../src/empathy-import-widget.c:303
msgid "Import"
msgstr "Importer"
-#: ../src/empathy-import-widget.c:315
+#: ../src/empathy-import-widget.c:312
msgid "Protocol"
msgstr "Protokoll"
-#: ../src/empathy-import-widget.c:339
+#: ../src/empathy-import-widget.c:336
msgid "Source"
msgstr "Kilde"
-#: ../src/empathy-roster-window.c:391
+#: ../src/empathy-roster-window.c:374
msgid "Provide Password"
msgstr "Oppgi passord"
-#: ../src/empathy-roster-window.c:397
+#: ../src/empathy-roster-window.c:380
msgid "Disconnect"
msgstr "Koble fra"
-#: ../src/empathy-roster-window.c:657
+#: ../src/empathy-roster-window.c:640
msgid "You need to setup an account to see contacts here."
msgstr "Du må sette opp en konto for å se kontakter her."
-#: ../src/empathy-roster-window.c:673
+#: ../src/empathy-roster-window.c:656
msgid "No match found"
msgstr "Ingen treff funnet"
-#: ../src/empathy-roster-window.c:783
+#: ../src/empathy-roster-window.c:766
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr "Beklager %s-kontoer kan ikke brukes før %s-programvaren er oppdatert."
-#: ../src/empathy-roster-window.c:849
+#: ../src/empathy-roster-window.c:832
msgid "Update software..."
msgstr "Oppdater programvare …"
-#: ../src/empathy-roster-window.c:855 ../src/empathy-roster-window.c:972
+#: ../src/empathy-roster-window.c:838 ../src/empathy-roster-window.c:955
msgid "Close"
msgstr "Lukk"
-#: ../src/empathy-roster-window.c:960
+#: ../src/empathy-roster-window.c:943
msgid "Reconnect"
msgstr "Koble til på nytt"
-#: ../src/empathy-roster-window.c:966
+#: ../src/empathy-roster-window.c:949
msgid "Edit Account"
msgstr "Rediger konto"
-#. Translators: this string will be something like:
-#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1110
-#, c-format
-msgid "Top up %s (%s)..."
-msgstr "Fyll opp %s (%s) …"
-
-#: ../src/empathy-roster-window.c:1156
-msgid "Top up account credit"
-msgstr "Fyll opp kreditt for konto"
+#: ../src/empathy-roster-window.c:1129
+msgid "Top up account"
+msgstr "Fyll opp konto"
-#. top up button
-#: ../src/empathy-roster-window.c:1228
-msgid "Top Up..."
-msgstr "Fyll opp …"
-
-#: ../src/empathy-roster-window.c:1952
-msgid "Contact"
-msgstr "Kontakt"
-
-#: ../src/empathy-roster-window.c:2150
+#: ../src/empathy-roster-window.c:1824
msgid "You need to enable one of your accounts to see contacts here."
msgstr "Du må slå på en av kontoene for å se kontakter her."
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2158
+#: ../src/empathy-roster-window.c:1832
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr "Du må slå på %s for å se kontakter her."
-#: ../src/empathy-roster-window.c:2460
+#: ../src/empathy-roster-window.c:2148 ../src/empathy-preferences.ui.h:7
msgid "Contact List"
msgstr "Kontaktliste"
@@ -3979,103 +3773,84 @@ msgstr "Kontaktliste"
msgid "Account settings"
msgstr "Innstillinger for konto"
-#: ../src/empathy-roster-window-menubar.ui.h:2
-#: ../src/empathy-status-icon.ui.h:2
-msgid "_New Conversation…"
+#: ../src/empathy-roster-window-menubar.ui.h:1
+msgid "_New Conversation..."
msgstr "_Ny samtale …"
-#: ../src/empathy-roster-window-menubar.ui.h:3
-#: ../src/empathy-status-icon.ui.h:3
-msgid "New _Call…"
+#: ../src/empathy-roster-window-menubar.ui.h:2
+msgid "New _Call..."
msgstr "Ny _samtale …"
-#: ../src/empathy-roster-window-menubar.ui.h:6
-msgid "_Search for Contacts…"
+#: ../src/empathy-roster-window-menubar.ui.h:3
+msgid "Contacts"
+msgstr "Kontakter"
+
+#: ../src/empathy-roster-window-menubar.ui.h:4
+msgid "_Add Contacts..."
+msgstr "_Legg til kontakter …"
+
+#: ../src/empathy-roster-window-menubar.ui.h:5
+msgid "_Search for Contacts..."
msgstr "_Søk etter kontakter …"
+#: ../src/empathy-roster-window-menubar.ui.h:6
+msgid "_Blocked Contacts"
+msgstr "_Blokkerte kontakter"
+
#: ../src/empathy-roster-window-menubar.ui.h:7
-msgid "_File Transfers"
-msgstr "_Filoverføringer"
+msgid "_Rooms"
+msgstr "_Rom"
#: ../src/empathy-roster-window-menubar.ui.h:8
-msgid "_Offline Contacts"
-msgstr "Frak_oblede kontakter"
+msgid "_Join..."
+msgstr "_Bli med …"
#: ../src/empathy-roster-window-menubar.ui.h:9
-msgid "Show P_rotocols"
-msgstr "Vis p_rotokoller"
+msgid "Join _Favorites"
+msgstr "Bli med i _favoritter"
#: ../src/empathy-roster-window-menubar.ui.h:10
-msgid "Credit Balance"
-msgstr "Kredittsaldo"
+msgid "_Manage Favorites"
+msgstr "_HÃ¥ndter favoritter"
-#: ../src/empathy-roster-window-menubar.ui.h:11
-msgid "Contacts on a _Map"
-msgstr "Kontakter på et _kart"
+#: ../src/empathy-roster-window-menubar.ui.h:12
+msgid "_File Transfers"
+msgstr "_Filoverføringer"
#: ../src/empathy-roster-window-menubar.ui.h:13
msgid "_Accounts"
msgstr "_Kontoer"
#: ../src/empathy-roster-window-menubar.ui.h:14
-msgid "_Blocked Contacts"
-msgstr "_Blokkerte kontakter"
-
-#: ../src/empathy-roster-window-menubar.ui.h:15
msgid "P_references"
msgstr "B_rukervalg"
-#: ../src/empathy-roster-window-menubar.ui.h:16
-msgid "Find in Contact _List"
-msgstr "Finn i kontakt_liste"
-
-#: ../src/empathy-roster-window-menubar.ui.h:18
-msgid "Sort by _Name"
-msgstr "Sorter på _navn"
-
-#: ../src/empathy-roster-window-menubar.ui.h:19
-msgid "Sort by _Status"
-msgstr "Sorter på _status"
-
-#: ../src/empathy-roster-window-menubar.ui.h:20
-msgid "Normal Size With _Avatars"
-msgstr "Normal størrelse med _avatarer"
-
-#: ../src/empathy-roster-window-menubar.ui.h:21
-msgid "N_ormal Size"
-msgstr "N_ormal størrelse"
-
-#: ../src/empathy-roster-window-menubar.ui.h:22
-msgid "_Compact Size"
-msgstr "_Kompakt størrelse"
-
-#: ../src/empathy-roster-window-menubar.ui.h:23
-msgid "_Room"
-msgstr "_Rom"
-
-#: ../src/empathy-roster-window-menubar.ui.h:24
-msgid "_Join…"
-msgstr "_Bli med …"
+#: ../src/empathy-roster-window-menubar.ui.h:15
+msgid "Help"
+msgstr "Hjelp"
-#: ../src/empathy-roster-window-menubar.ui.h:25
-msgid "Join _Favorites"
-msgstr "Bli med i _favoritter"
+#: ../src/empathy-roster-window-menubar.ui.h:16
+msgid "About Empathy"
+msgstr "Om Empathy"
-#: ../src/empathy-roster-window-menubar.ui.h:26
-msgid "Manage Favorites"
-msgstr "HÃ¥ndter favoritter"
+#: ../src/empathy-roster-window-menubar.ui.h:17
+#: ../src/empathy-status-icon.ui.h:5
+msgid "_Quit"
+msgstr "_Avslutt"
-#: ../src/empathy-new-chatroom-dialog.c:369
+#: ../src/empathy-new-chatroom-dialog.c:194
msgid "Chat Room"
msgstr "Samtalerom"
-#: ../src/empathy-new-chatroom-dialog.c:385
+#: ../src/empathy-new-chatroom-dialog.c:209
msgid "Members"
msgstr "Medlemmer"
-#. Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
-#. yes/no, yes/no and a number.
-#: ../src/empathy-new-chatroom-dialog.c:637
+#: ../src/empathy-new-chatroom-dialog.c:410
+msgid "Failed to list rooms"
+msgstr "Klarte ikke å vise rom"
+
+#: ../src/empathy-new-chatroom-dialog.c:439
#, c-format
msgid ""
"%s\n"
@@ -4088,40 +3863,38 @@ msgstr ""
"Passord kreves: %s\n"
"Medlemmer: %s"
-#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
+#: ../src/empathy-new-chatroom-dialog.c:441
+#: ../src/empathy-new-chatroom-dialog.c:442
msgid "Yes"
msgstr "Ja"
-#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
+#: ../src/empathy-new-chatroom-dialog.c:441
+#: ../src/empathy-new-chatroom-dialog.c:442
msgid "No"
msgstr "Nei"
-#: ../src/empathy-new-chatroom-dialog.c:668
-msgid "Could not start room listing"
-msgstr "Kunne ikke starte romliste"
-
-#: ../src/empathy-new-chatroom-dialog.c:678
-msgid "Could not stop room listing"
-msgstr "Kune ikke stoppe romliste"
-
-#: ../src/empathy-new-chatroom-dialog.ui.h:1
+#: ../src/empathy-new-chatroom-dialog.c:782
msgid "Join Room"
msgstr "Bli med i rom"
-#: ../src/empathy-new-chatroom-dialog.ui.h:3
+#: ../src/empathy-new-chatroom-dialog.ui.h:1
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.ui.h:4
+#: ../src/empathy-new-chatroom-dialog.ui.h:2
msgid "_Room:"
msgstr "_Rom:"
-#: ../src/empathy-new-chatroom-dialog.ui.h:5
+#: ../src/empathy-new-chatroom-dialog.ui.h:3
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account&apos;s server"
+msgstr "Oppgi tjener som er vert for rommet, eller la stå tom hvis rommet er på aktiv kontos tjener"
+
+#: ../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"
@@ -4129,179 +3902,195 @@ msgstr ""
"Oppgi tjener som er vert for rommet, eller la stå tom hvis rommet er på "
"aktiv kontos tjener"
-#: ../src/empathy-new-chatroom-dialog.ui.h:8
+#: ../src/empathy-new-chatroom-dialog.ui.h:7
msgid "Couldn't load room list"
msgstr "Kunne ikke laste romliste"
-#: ../src/empathy-new-chatroom-dialog.ui.h:9
+#: ../src/empathy-new-chatroom-dialog.ui.h:8
msgid "Room List"
msgstr "Romliste"
-#: ../src/empathy-preferences.c:166
+#: ../src/empathy-preferences.c:146
msgid "Message received"
msgstr "Melding mottatt"
-#: ../src/empathy-preferences.c:167
+#: ../src/empathy-preferences.c:147
msgid "Message sent"
msgstr "Melding sendt"
-#: ../src/empathy-preferences.c:168
+#: ../src/empathy-preferences.c:148
msgid "New conversation"
msgstr "Ny samtale"
-#: ../src/empathy-preferences.c:169
+#: ../src/empathy-preferences.c:149
msgid "Contact comes online"
msgstr "Kontakt kobler til"
-#: ../src/empathy-preferences.c:170
+#: ../src/empathy-preferences.c:150
msgid "Contact goes offline"
msgstr "Kontakt kobler fra"
-#: ../src/empathy-preferences.c:171
+#: ../src/empathy-preferences.c:151
msgid "Account connected"
msgstr "Konto koblet til"
-#: ../src/empathy-preferences.c:172
+#: ../src/empathy-preferences.c:152
msgid "Account disconnected"
msgstr "Konto koblet fra"
-#: ../src/empathy-preferences.c:475
+#: ../src/empathy-preferences.c:429
msgid "Language"
msgstr "Språk"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:726
+#: ../src/empathy-preferences.c:678
msgid "Juliet"
msgstr "Juliet"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:733
+#: ../src/empathy-preferences.c:685
msgid "Romeo"
msgstr "Romeo"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:739
+#: ../src/empathy-preferences.c:691
msgid "O Romeo, Romeo, wherefore art thou Romeo?"
msgstr "O Romeo, Romeo, wherefore art thou Romeo?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:743
+#: ../src/empathy-preferences.c:695
msgid "Deny thy father and refuse thy name;"
msgstr "Deny thy father and refuse thy name;"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:746
+#: ../src/empathy-preferences.c:698
msgid "Or if thou wilt not, be but sworn my love"
msgstr "Or if thou wilt not, be but sworn my love"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:749
+#: ../src/empathy-preferences.c:701
msgid "And I'll no longer be a Capulet."
msgstr "And I'll no longer be a Capulet."
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:752
+#: ../src/empathy-preferences.c:704
msgid "Shall I hear more, or shall I speak at this?"
msgstr "Shall I hear more, or shall I speak at this?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:755
+#: ../src/empathy-preferences.c:707
msgid "Juliet has disconnected"
msgstr "Juliet har koblet fra"
-#: ../src/empathy-preferences.c:1159
+#: ../src/empathy-preferences.c:1112
msgid "Preferences"
msgstr "Brukervalg"
-#: ../src/empathy-preferences.ui.h:1
-msgid "Show _smileys as images"
-msgstr "Vis _smilefjes som bilder"
-
#: ../src/empathy-preferences.ui.h:2
-msgid "Show contact _list in rooms"
-msgstr "Vis kontakt_liste i rom"
+msgid "Show protocol in avatar"
+msgstr "Vis protokoll i personbilder"
#: ../src/empathy-preferences.ui.h:3
-msgid "Appearance"
-msgstr "Utseende"
+msgid "Show account balances"
+msgstr "Vis saldo for konto"
#: ../src/empathy-preferences.ui.h:4
+msgid "Sort contacts by:"
+msgstr "Sorter kontakter etter:"
+
+#: ../src/empathy-preferences.ui.h:5
+msgid "status"
+msgstr "status"
+
+#: ../src/empathy-preferences.ui.h:6
+msgid "name"
+msgstr "navn"
+
+#: ../src/empathy-preferences.ui.h:8
msgid "Start chats in:"
msgstr "Start prat om:"
-#: ../src/empathy-preferences.ui.h:5
+#: ../src/empathy-preferences.ui.h:9
msgid "new ta_bs"
msgstr "nye fa_ner"
-#: ../src/empathy-preferences.ui.h:6
+#: ../src/empathy-preferences.ui.h:10
msgid "new _windows"
msgstr "nye _vinduer"
-#: ../src/empathy-preferences.ui.h:7
+#: ../src/empathy-preferences.ui.h:11
+msgid "Show _smileys as images"
+msgstr "Vis _smilefjes som bilder"
+
+#: ../src/empathy-preferences.ui.h:12
+msgid "Show contact _list in rooms"
+msgstr "Vis kontakt_liste i rom"
+
+#: ../src/empathy-preferences.ui.h:13
+msgid "Log conversations"
+msgstr "Logg samtaler"
+
+#: ../src/empathy-preferences.ui.h:15
msgid "Display incoming events in the notification area"
msgstr "Vis innkommende hendelser i varslingsområdet"
-#: ../src/empathy-preferences.ui.h:8
+#: ../src/empathy-preferences.ui.h:16
msgid "_Automatically connect on startup"
msgstr "Koble til _automatisk ved oppstart"
-#: ../src/empathy-preferences.ui.h:9
-msgid "Log conversations"
-msgstr "Logg samtaler"
-
-#: ../src/empathy-preferences.ui.h:10
+#: ../src/empathy-preferences.ui.h:17
msgid "Behavior"
msgstr "Oppførsel"
-#: ../src/empathy-preferences.ui.h:11
+#: ../src/empathy-preferences.ui.h:18
msgid "General"
msgstr "Generelt"
-#: ../src/empathy-preferences.ui.h:12
+#: ../src/empathy-preferences.ui.h:19
msgid "_Enable bubble notifications"
msgstr "_Aktiver varsling med bobler"
-#: ../src/empathy-preferences.ui.h:13
+#: ../src/empathy-preferences.ui.h:20
msgid "Disable notifications when _away or busy"
msgstr "Slå av varsling når du er borte eller oppt_att"
-#: ../src/empathy-preferences.ui.h:14
+#: ../src/empathy-preferences.ui.h:21
msgid "Enable notifications when the _chat is not focused"
msgstr "Aktiver varsling når _prat ikke er fokusert"
-#: ../src/empathy-preferences.ui.h:15
+#: ../src/empathy-preferences.ui.h:22
msgid "Enable notifications when a contact comes online"
msgstr "Slå på varsling når en kontakt kobler seg til"
-#: ../src/empathy-preferences.ui.h:16
+#: ../src/empathy-preferences.ui.h:23
msgid "Enable notifications when a contact goes offline"
msgstr "Slå på varsling når en kontakt kobler seg fra"
-#: ../src/empathy-preferences.ui.h:17
+#: ../src/empathy-preferences.ui.h:24
msgid "Notifications"
msgstr "Varsling"
-#: ../src/empathy-preferences.ui.h:18
+#: ../src/empathy-preferences.ui.h:25
msgid "_Enable sound notifications"
msgstr "_Aktiver varsling med lyder"
-#: ../src/empathy-preferences.ui.h:19
+#: ../src/empathy-preferences.ui.h:26
msgid "Disable sounds when _away or busy"
msgstr "Slå av lyder når du er b_orte eller opptatt"
-#: ../src/empathy-preferences.ui.h:20
+#: ../src/empathy-preferences.ui.h:27
msgid "Play sound for events"
msgstr "Spill av lyd for hendelser"
-#: ../src/empathy-preferences.ui.h:21
+#: ../src/empathy-preferences.ui.h:28
msgid "Sounds"
msgstr "Lyder"
-#: ../src/empathy-preferences.ui.h:22
+#: ../src/empathy-preferences.ui.h:29
msgid "Use _echo cancellation to improve call quality"
msgstr "Bruk _ekkokansellering for å forbedre kvaliteten på samtalen"
-#: ../src/empathy-preferences.ui.h:23
+#: ../src/empathy-preferences.ui.h:30
msgid ""
"Echo cancellation helps to make your voice sound clearer to the other "
"person, but may cause problems on some computers. If you or the other person "
@@ -4313,11 +4102,11 @@ msgstr ""
"den andre personen hører rare lyder eller feil under samtaler kan du prøve å "
"slå av utlikning av ekko og starte samtalen på nytt."
-#: ../src/empathy-preferences.ui.h:26
+#: ../src/empathy-preferences.ui.h:33
msgid "_Publish location to my contacts"
msgstr "_Publiser plassering til mine kontakter"
-#: ../src/empathy-preferences.ui.h:27
+#: ../src/empathy-preferences.ui.h:34
msgid ""
"Reduced location accuracy means that nothing more precise than your city, "
"state and country will be published. GPS coordinates will be accurate to 1 "
@@ -4327,208 +4116,164 @@ msgstr ""
"publisert. GPS-koordinater vil ha nøyaktighet lik en desimalplass."
#. To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees.
-#: ../src/empathy-preferences.ui.h:29
+#: ../src/empathy-preferences.ui.h:36
msgid "_Reduce location accuracy"
msgstr "_Reduser nøyaktighet for plassering"
-#: ../src/empathy-preferences.ui.h:30
+#: ../src/empathy-preferences.ui.h:37
msgid "Privacy"
msgstr "Personvern"
-#: ../src/empathy-preferences.ui.h:31
+#: ../src/empathy-preferences.ui.h:38
msgid "_GPS"
msgstr "_GPS"
-#: ../src/empathy-preferences.ui.h:32
+#: ../src/empathy-preferences.ui.h:39
msgid "_Cellphone"
msgstr "_Mobiltelefon"
-#: ../src/empathy-preferences.ui.h:33
+#: ../src/empathy-preferences.ui.h:40
msgid "_Network (IP, Wi-Fi)"
msgstr "_Nettverk (IP, Wi-Fi)"
-#: ../src/empathy-preferences.ui.h:34
+#: ../src/empathy-preferences.ui.h:41
msgid "Location sources:"
msgstr "Kilder for steder:"
-#: ../src/empathy-preferences.ui.h:36
+#: ../src/empathy-preferences.ui.h:43
msgid ""
"The list of languages reflects only the languages for which you have a "
"dictionary installed."
msgstr ""
"Listen med språk viser bare de språkene det er installert ordliste for."
-#: ../src/empathy-preferences.ui.h:37
+#: ../src/empathy-preferences.ui.h:44
msgid "Enable spell checking for languages:"
msgstr "Slå på stavekontroll for språk:"
-#: ../src/empathy-preferences.ui.h:38
+#: ../src/empathy-preferences.ui.h:45
msgid "Spell Checking"
msgstr "Stavekontroll"
-#: ../src/empathy-preferences.ui.h:39
+#: ../src/empathy-preferences.ui.h:46
msgid "Chat Th_eme:"
msgstr "Samtale_tema:"
-#: ../src/empathy-preferences.ui.h:40
+#: ../src/empathy-preferences.ui.h:47
msgid "Variant:"
msgstr "Variant:"
-#: ../src/empathy-preferences.ui.h:41
+#: ../src/empathy-preferences.ui.h:48
msgid "Themes"
msgstr "Temaer"
+#: ../src/empathy-status-icon.ui.h:2
+msgid "_New Conversation…"
+msgstr "_Ny samtale …"
+
+#: ../src/empathy-status-icon.ui.h:3
+msgid "New _Call…"
+msgstr "Ny _samtale …"
+
#: ../src/empathy-status-icon.ui.h:4
msgid "Status"
msgstr "Status"
-#: ../src/empathy-status-icon.ui.h:5
-msgid "_Quit"
-msgstr "_Avslutt"
-
-#: ../src/empathy-streamed-media-window.ui.h:3
-msgid "Redial"
-msgstr "Ring på nytt"
-
-#: ../src/empathy-streamed-media-window.ui.h:4
-msgid "V_ideo"
-msgstr "V_ideo"
-
-#: ../src/empathy-streamed-media-window.ui.h:5
-msgid "Video Off"
-msgstr "Video av"
-
-#: ../src/empathy-streamed-media-window.ui.h:6
-msgid "Video Preview"
-msgstr "Forhåndsvis video"
-
-#: ../src/empathy-streamed-media-window.ui.h:7
-msgid "Video On"
-msgstr "Video på"
-
-#: ../src/empathy-streamed-media-window.ui.h:10
-msgid "Call the contact again"
-msgstr "Ring kontakten igjen"
-
-#: ../src/empathy-streamed-media-window.ui.h:13
-msgid "Camera Off"
-msgstr "Kamera av"
-
-#: ../src/empathy-streamed-media-window.ui.h:14
-msgid "Disable camera and stop sending video"
-msgstr "Slå av kamera og stopp sending av video"
-
-#: ../src/empathy-streamed-media-window.ui.h:15
-msgid "Preview"
-msgstr "Forhåndsvis"
-
-#: ../src/empathy-streamed-media-window.ui.h:16
-msgid "Enable camera but don't send video"
-msgstr "Slå på kamera men ikke send video"
-
-#: ../src/empathy-streamed-media-window.ui.h:17
-msgid "Camera On"
-msgstr "Kamera på"
-
-#: ../src/empathy-streamed-media-window.ui.h:18
-msgid "Enable camera and send video"
-msgstr "Slå på kamera og send video"
-
#: ../src/empathy-map-view.c:471
msgid "Contact Map View"
msgstr "Kartvisning for kontakter"
-#: ../src/empathy-debug-window.c:1607
+#: ../src/empathy-debug-window.c:1603
msgid "Save"
msgstr "Lagre"
-#: ../src/empathy-debug-window.c:1667
+#: ../src/empathy-debug-window.c:1663
msgid "Pastebin link"
msgstr "Lenke til Pastebin"
-#: ../src/empathy-debug-window.c:1676
+#: ../src/empathy-debug-window.c:1672
msgid "Pastebin response"
msgstr "Svar fra Pastebin"
-#: ../src/empathy-debug-window.c:1683
+#: ../src/empathy-debug-window.c:1679
msgid "Data too large for a single paste. Please save logs to file."
msgstr ""
"Data for stor for en enkel klipp-og-lim operasjon. Vennligst lagre loggene "
"til en fil."
-#: ../src/empathy-debug-window.c:1912
+#: ../src/empathy-debug-window.c:1858
msgid "Debug Window"
msgstr "Feilsøkingsvindu"
-#: ../src/empathy-debug-window.c:1970
+#: ../src/empathy-debug-window.c:1918
msgid "Send to pastebin"
msgstr "Send til Pastebin"
-#: ../src/empathy-debug-window.c:2009
+#: ../src/empathy-debug-window.c:1962
msgid "Pause"
msgstr "Pause"
-#: ../src/empathy-debug-window.c:2021
+#: ../src/empathy-debug-window.c:1974
msgid "Level "
msgstr "Nivå "
-#: ../src/empathy-debug-window.c:2040
+#: ../src/empathy-debug-window.c:1993
msgid "Debug"
msgstr "Feilsøk"
-#: ../src/empathy-debug-window.c:2045
+#: ../src/empathy-debug-window.c:1998
msgid "Info"
msgstr "Info"
-#: ../src/empathy-debug-window.c:2050 ../src/empathy-debug-window.c:2096
+#: ../src/empathy-debug-window.c:2003 ../src/empathy-debug-window.c:2052
msgid "Message"
msgstr "Melding"
-#: ../src/empathy-debug-window.c:2055
+#: ../src/empathy-debug-window.c:2008
msgid "Warning"
msgstr "Advarsel"
-#: ../src/empathy-debug-window.c:2060
+#: ../src/empathy-debug-window.c:2013
msgid "Critical"
msgstr "Kritisk"
-#: ../src/empathy-debug-window.c:2065
+#: ../src/empathy-debug-window.c:2018
msgid "Error"
msgstr "Feil"
-#: ../src/empathy-debug-window.c:2084
+#: ../src/empathy-debug-window.c:2037
msgid "Time"
msgstr "Tid"
-#: ../src/empathy-debug-window.c:2087
+#: ../src/empathy-debug-window.c:2040
msgid "Domain"
msgstr "Domene"
-#: ../src/empathy-debug-window.c:2089
+#: ../src/empathy-debug-window.c:2043
msgid "Category"
msgstr "Kategori"
-#: ../src/empathy-debug-window.c:2091
+#: ../src/empathy-debug-window.c:2046
msgid "Level"
msgstr "Nivå"
-#: ../src/empathy-debug-window.c:2114
+#: ../src/empathy-debug-window.c:2075
msgid ""
"The selected connection manager does not support the remote debugging "
"extension."
msgstr ""
"Valgt tilkoblingshåndterer støtter ikke utvidelse for ekstern feilsøking."
-#: ../src/empathy-invite-participant-dialog.c:202
-#: ../src/empathy-invite-participant-dialog.c:230
+#: ../src/empathy-invite-participant-dialog.c:201
+#: ../src/empathy-invite-participant-dialog.c:229
msgid "Invite Participant"
msgstr "Inviter deltaker"
-#: ../src/empathy-invite-participant-dialog.c:203
+#: ../src/empathy-invite-participant-dialog.c:202
msgid "Choose a contact to invite into the conversation:"
msgstr "Velg en kontakt å invitere til samtalen:"
-#: ../src/empathy-invite-participant-dialog.c:226
+#: ../src/empathy-invite-participant-dialog.c:225
msgid "Invite"
msgstr "Inviter"
@@ -4556,7 +4301,7 @@ msgstr "<konto-id>"
msgid "- Empathy Accounts"
msgstr "- Empathy-kontoer"
-#: ../src/empathy-accounts.c:231
+#: ../src/empathy-accounts.c:232
msgid "Empathy Accounts"
msgstr "Empathy-kontoer"
@@ -4572,97 +4317,208 @@ msgstr "- Empathy feilsøking"
msgid "Empathy Debugger"
msgstr "Empathy feilsøking"
-#: ../src/empathy-chat.c:109
+#: ../src/empathy-chat.c:106
msgid "- Empathy Chat Client"
msgstr "- Empathy lynmeldingsprogram"
-#: ../src/empathy-notifications-approver.c:190
+#: ../src/empathy-notifications-approver.c:188
msgid "Respond"
msgstr "Svar"
-#: ../src/empathy-notifications-approver.c:204
-#: ../src/empathy-call-window.c:1504
+#: ../src/empathy-notifications-approver.c:197
+#: ../src/empathy-call-window.c:1490
msgid "Reject"
msgstr "Avvis"
-#: ../src/empathy-notifications-approver.c:209
-#: ../src/empathy-notifications-approver.c:214
-#: ../src/empathy-call-window.c:1505
+#: ../src/empathy-notifications-approver.c:202
+#: ../src/empathy-notifications-approver.c:207
+#: ../src/empathy-call-window.c:1491
msgid "Answer"
msgstr "Svar"
-#: ../src/empathy-notifications-approver.c:214
+#: ../src/empathy-notifications-approver.c:207
msgid "Answer with video"
msgstr "Svar med video"
-#: ../src/empathy-notifications-approver.c:222
-#: ../src/empathy-notifications-approver.c:232
+#: ../src/empathy-notifications-approver.c:215
+#: ../src/empathy-notifications-approver.c:225
msgid "Decline"
msgstr "Avslå"
-#: ../src/empathy-notifications-approver.c:226
-#: ../src/empathy-notifications-approver.c:237
+#: ../src/empathy-notifications-approver.c:219
+#: ../src/empathy-notifications-approver.c:230
msgid "Accept"
msgstr "Godta"
#. translators: the 'Provide' button is displayed in a notification
#. * bubble when Empathy is asking for an account password; clicking on it
#. * brings the password popup.
-#: ../src/empathy-notifications-approver.c:247
+#: ../src/empathy-notifications-approver.c:240
msgid "Provide"
msgstr "Oppgi"
-#: ../src/empathy-call-observer.c:132
+#: ../src/empathy-call-observer.c:119
#, c-format
msgid "%s just tried to call you, but you were in another call."
msgstr "%s prøvde å ringe deg, men du var i en annen samtale."
#. Translators: this is an "Info" label. It should be as short
#. * as possible.
-#: ../src/empathy-call-window.c:1135 ../src/empathy-call-window.c:1151
+#: ../src/empathy-call-window.c:1122 ../src/empathy-call-window.c:1138
msgid "i"
msgstr "i"
-#: ../src/empathy-call-window.c:2871
+#. translators: Call is a noun and %s is the contact name. This string
+#. * is used in the window title
+#: ../src/empathy-call-window.c:1858
+#, c-format
+msgid "Call with %s"
+msgstr "Samtale med %s"
+
+#: ../src/empathy-call-window.c:2102
+msgid "The IP address as seen by the machine"
+msgstr "IP-adresse som sett av maskinen"
+
+#: ../src/empathy-call-window.c:2104
+msgid "The IP address as seen by a server on the Internet"
+msgstr "IP-adresse som sett av en tjener på internett"
+
+#: ../src/empathy-call-window.c:2106
+msgid "The IP address of the peer as seen by the other side"
+msgstr "IP-adresse for peer som sett av andre siden"
+
+#: ../src/empathy-call-window.c:2108
+msgid "The IP address of a relay server"
+msgstr "IP-adresse for en relay-tjener"
+
+#: ../src/empathy-call-window.c:2110
+msgid "The IP address of the multicast group"
+msgstr "IP-adresse for multicast-gruppe"
+
+#: ../src/empathy-call-window.c:2857
msgid "On hold"
msgstr "PÃ¥ vent"
-#: ../src/empathy-call-window.c:2874
+#: ../src/empathy-call-window.c:2860
msgid "Mute"
msgstr "Demp"
-#: ../src/empathy-call-window.c:2876
+#: ../src/empathy-call-window.c:2862
msgid "Duration"
msgstr "Varighet"
#. Translators: 'status - minutes:seconds' the caller has been connected
-#: ../src/empathy-call-window.c:2879
+#: ../src/empathy-call-window.c:2865
#, c-format
msgid "%s — %d:%02dm"
msgstr "%s – %d:%02dm"
-#: ../src/empathy-call-window.c:3149
+#: ../src/empathy-call-window.c:2961
+msgid "Technical Details"
+msgstr "Tekniske detaljer"
+
+#: ../src/empathy-call-window.c:3000
+#, c-format
+msgid ""
+"%s's software does not understand any of the audio formats supported by your "
+"computer"
+msgstr ""
+"Programvaren til %s forstår ikke noen av lydformatene som støttes av din "
+"datamaskin"
+
+#: ../src/empathy-call-window.c:3005
+#, c-format
+msgid ""
+"%s's software does not understand any of the video formats supported by your "
+"computer"
+msgstr ""
+"Programvaren til %s forstår ikke noen av videoformatene som støttes av din "
+"datamaskin"
+
+#: ../src/empathy-call-window.c:3011
+#, c-format
+msgid ""
+"Can't establish a connection to %s. One of you might be on a network that "
+"does not allow direct connections."
+msgstr ""
+"Kan ikke etablere tilkobling til %s. En av dere kan være på et nettverk som "
+"ikke tillater direkte tilkoblinger."
+
+#: ../src/empathy-call-window.c:3017
+msgid "There was a failure on the network"
+msgstr "Det oppsto en feil på nettverket"
+
+#: ../src/empathy-call-window.c:3021
+msgid ""
+"The audio formats necessary for this call are not installed on your computer"
+msgstr ""
+"Lydformatene som kreves for denne samtalen er ikke installert på din "
+"datamaskin"
+
+#: ../src/empathy-call-window.c:3024
+msgid ""
+"The video formats necessary for this call are not installed on your computer"
+msgstr ""
+"Videoformatene som kreves for denne samtalen er ikke installert på din "
+"datamaskin"
+
+#: ../src/empathy-call-window.c:3036
+#, c-format
+msgid ""
+"Something unexpected happened in a Telepathy component. Please <a href=\"%s"
+"\">report this bug</a> and attach logs gathered from the 'Debug' window in "
+"the Help menu."
+msgstr ""
+"Noe uventet skjedde i en Telepathy-komponent. Vennligst <a href=\"%s"
+"\">rapporter denne feilen</a> og legg ved loggene som samles inn i "
+"«Feilsøking»-vinduet i Hjelp-menyen."
+
+#: ../src/empathy-call-window.c:3045
+msgid "There was a failure in the call engine"
+msgstr "Det oppsto en feil i samtalemotoren"
+
+#: ../src/empathy-call-window.c:3048
+msgid "The end of the stream was reached"
+msgstr "Slutt på strømmen ble nådd"
+
+#: ../src/empathy-call-window.c:3088
+msgid "Can't establish audio stream"
+msgstr "Kan ikke etablere lydstrøm"
+
+#: ../src/empathy-call-window.c:3098
+msgid "Can't establish video stream"
+msgstr "Kan ikke etablere videostrøm"
+
+#: ../src/empathy-call-window.c:3135
#, c-format
msgid "Your current balance is %s."
msgstr "Din saldo er %s."
-#: ../src/empathy-call-window.c:3153
+#: ../src/empathy-call-window.c:3139
msgid "Sorry, you don’t have enough credit for that call."
msgstr "Du har ikke nok kreditt til å starte denne samtalen."
-#: ../src/empathy-call-window.c:3155
+#: ../src/empathy-call-window.c:3141
msgid "Top Up"
msgstr "Fyll opp"
+#: ../src/empathy-call.c:198
+msgid "- Empathy Audio/Video Client"
+msgstr "- Empathy lyd-/bildeklient"
+
+#: ../src/empathy-call.c:222
+msgid "Empathy Audio/Video Client"
+msgstr "Empathy lyd-/bildeklient"
+
#: ../libempathy-gtk/empathy-search-bar.c:243
msgid "_Match case"
msgstr "Skill _mellom små/store bokstaver"
-#: ../libempathy-gtk/empathy-new-account-dialog.c:144
+#: ../libempathy-gtk/empathy-new-account-dialog.c:129
msgid "What kind of chat account do you have?"
msgstr "Hvilken type konto har du?"
-#: ../libempathy-gtk/empathy-new-account-dialog.c:166
+#: ../libempathy-gtk/empathy-new-account-dialog.c:151
msgid "Adding new account"
msgstr "Legger til ny konto"
@@ -4670,7 +4526,7 @@ msgstr "Legger til ny konto"
msgid "People nearby"
msgstr "Personer i nærheten"
-#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:150
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:149
msgid ""
"Empathy can automatically discover and chat with the people connected on the "
"same network as you. If you want to use this feature, please check that the "
@@ -4680,7 +4536,7 @@ msgstr ""
"deg automatisk. Hvis du vil bruke denne funksjonen må du sjekke om detaljene "
"under er riktige."
-#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:183
+#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:180
msgid ""
"You can change these details later or disable this feature by choosing <span "
"style=\"italic\">Edit → Accounts</span> in the Contact List."
diff --git a/po/sk.po b/po/sk.po
index b07c69b57..d0c12baee 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -9,14 +9,14 @@ msgstr ""
"Project-Id-Version: empathy\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=empathy&keywords=I18N+L10N&component=General\n"
-"POT-Creation-Date: 2012-04-16 08:59+0000\n"
+"POT-Creation-Date: 2012-04-11 09:10+0000\n"
"PO-Revision-Date: 2012-04-16 13:53+0200\n"
"Last-Translator: Pavol KlaÄanský <pavol@klacansky.com>\n"
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
-"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
#: ../data/empathy.desktop.in.in.h:1
@@ -37,7 +37,7 @@ msgstr "Komunikujte pomocou služieb Google Talk, Facebook, MSN a mnoho Äalší
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2552
+#: ../src/empathy-accounts-dialog.c:2527
msgid "Messaging and VoIP Accounts"
msgstr "Rozhovory a VoIP úÄty"
@@ -182,6 +182,7 @@ msgstr ""
#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
#, fuzzy
+#| msgid "Show contact list in rooms"
msgid "Show contact groups"
msgstr "Zobraziť zoznam kontaktov v miestnostiach"
@@ -363,8 +364,7 @@ msgstr "Variant témy okna rozhovoru"
msgid ""
"The theme variant that is used to display the conversation in chat windows."
msgstr ""
-"Variant témy, ktorý je použitý na zobrazenie konverzácie v oknách s "
-"rozhovormi."
+"Variant témy, ktorý je použitý na zobrazenie konverzácie v oknách s rozhovormi."
#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
msgid "Path of the Adium theme to use"
@@ -698,6 +698,7 @@ msgstr "Pripojenie bolo prerušené"
#: ../libempathy/empathy-utils.c:355
#, fuzzy
+#| msgid "This resource is already connected to the server"
msgid "This account is already connected to the server"
msgstr "Tento zdroj už je pripojený k serveru"
@@ -737,6 +738,7 @@ msgstr ""
#: ../libempathy/empathy-utils.c:375
#, fuzzy
+#| msgid "Interval (seconds)"
msgid "Internal error"
msgstr "Interval (sekundy)"
@@ -810,6 +812,7 @@ msgstr "v budúcnosti"
#: ../libempathy/empathy-keyring.c:75
#, fuzzy
+#| msgid "Phrase not found"
msgid "Password not found"
msgstr "Fráza sa nenašla"
@@ -865,11 +868,11 @@ msgstr "Po_užiť"
msgid "L_og in"
msgstr "_Prihlásiť sa"
-#: ../libempathy-gtk/empathy-account-widget.c:1812
+#: ../libempathy-gtk/empathy-account-widget.c:1810
msgid "This account already exists on the server"
msgstr "Tento úÄet už na serveri existuje"
-#: ../libempathy-gtk/empathy-account-widget.c:1816
+#: ../libempathy-gtk/empathy-account-widget.c:1814
msgid "Create a new account on the server"
msgstr "VytvoriÅ¥ na serveri nový úÄet"
@@ -878,19 +881,19 @@ msgstr "VytvoriÅ¥ na serveri nový úÄet"
#. * like: "MyUserName on freenode".
#. * You should reverse the order of these arguments if the
#. * server should come before the login id in your locale.
-#: ../libempathy-gtk/empathy-account-widget.c:2241
+#: ../libempathy-gtk/empathy-account-widget.c:2236
#, c-format
msgid "%1$s on %2$s"
msgstr "%1$s na %2$s"
#. To translators: The parameter is the protocol name. The resulting
#. * string will be something like: "Jabber Account"
-#: ../libempathy-gtk/empathy-account-widget.c:2267
+#: ../libempathy-gtk/empathy-account-widget.c:2262
#, c-format
msgid "%s Account"
msgstr "ÚÄet %s"
-#: ../libempathy-gtk/empathy-account-widget.c:2271
+#: ../libempathy-gtk/empathy-account-widget.c:2266
msgid "New account"
msgstr "Nový úÄet"
@@ -950,7 +953,7 @@ msgstr "_Server:"
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
msgid "Advanced"
msgstr "PokroÄilé"
@@ -968,7 +971,7 @@ msgstr "Aké je vaše heslo pre AIM?"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:10
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "Remember Password"
msgstr "Zapamätať heslo"
@@ -1018,34 +1021,34 @@ msgstr "Aké je vaše heslo pre ICQ?"
# * https://bugzilla.gnome.org/show_bug.cgi?id=645689
# PŠ: toto asi nebude správny odkaz na bugreport... opraviť!
-#: ../libempathy-gtk/empathy-account-widget-sip.c:205
-#: ../libempathy-gtk/empathy-account-widget-sip.c:238
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "Automaticky"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:208
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:211
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:214
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:243
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "Registrovať"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:248
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "Voľby"
# * https://bugzilla.gnome.org/show_bug.cgi?id=645689
# PŠ: toto asi nebude správny odkaz na bugreport... opraviť!
-#: ../libempathy-gtk/empathy-account-widget-sip.c:251
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "Žiadna"
@@ -1082,6 +1085,7 @@ msgstr ""
#. Translators: tooltip on a 'Go Down' button used to sort IRC servers by priority
#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
#, fuzzy
+#| msgid "Domain"
msgid "Down"
msgstr "Doména"
@@ -1309,11 +1313,17 @@ msgstr "Ignorovať chyby TLS"
msgid "Port:"
msgstr "Port:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#, fuzzy
+#| msgid "E-_mail address:"
+msgid "Local IP Address:"
+msgstr "E_mailová adresa:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP login ID?"
msgstr "Aký je váš identifikátor pre SIP prihlásenie?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP account password?"
msgstr "Aké je heslo pre váš SIP úÄet?"
@@ -1403,41 +1413,41 @@ msgstr "Tiesňové volania nie sú podporované týmto protokolom"
msgid "You don't have enough credit in order to place this call"
msgstr ""
-#: ../libempathy-gtk/empathy-chat.c:728
+#: ../libempathy-gtk/empathy-chat.c:727
msgid "Failed to open private chat"
msgstr "Zlyhalo otvorenie súkromného rozhovoru"
-#: ../libempathy-gtk/empathy-chat.c:786
+#: ../libempathy-gtk/empathy-chat.c:785
msgid "Topic not supported on this conversation"
msgstr "Téma nie je pri tejto konverzácii podporovaná"
-#: ../libempathy-gtk/empathy-chat.c:792
+#: ../libempathy-gtk/empathy-chat.c:791
msgid "You are not allowed to change the topic"
msgstr "Nie je vám dovolené meniť tému"
-#: ../libempathy-gtk/empathy-chat.c:991
+#: ../libempathy-gtk/empathy-chat.c:990
#, c-format
msgid "“%s†is not a valid contact ID"
msgstr "“%s†je neplatný identifikátor kontaktu"
-#: ../libempathy-gtk/empathy-chat.c:1086
+#: ../libempathy-gtk/empathy-chat.c:1085
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear: vymaže všetky správy z aktuálnej konverzácie"
-#: ../libempathy-gtk/empathy-chat.c:1089
+#: ../libempathy-gtk/empathy-chat.c:1088
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <téma>: nastaví tému aktuálnej konverzácie"
-#: ../libempathy-gtk/empathy-chat.c:1092
+#: ../libempathy-gtk/empathy-chat.c:1091
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <ID diskusnej miestnosti>: vstúpi do novej diskusnej miestnosti"
-#: ../libempathy-gtk/empathy-chat.c:1095
+#: ../libempathy-gtk/empathy-chat.c:1094
msgid "/j <chat room ID>: join a new chat room"
msgstr ""
"/j <identifikátor diskusnej miestnosti>: vstúpi do novej diskusnej miestnosti"
-#: ../libempathy-gtk/empathy-chat.c:1099
+#: ../libempathy-gtk/empathy-chat.c:1098
msgid ""
"/part [<chat room ID>] [<reason>]: leave the chat room, by default the "
"current one"
@@ -1445,23 +1455,23 @@ msgstr ""
"/part [<identifikátor diskusnej miestnosti>] [<dôvod>]: opustí diskusnú "
"miestnosť, predvolene aktuálnu"
-#: ../libempathy-gtk/empathy-chat.c:1103
+#: ../libempathy-gtk/empathy-chat.c:1102
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <identifikátor kontaktu> [<správa>]: otvorí súkromný rozhovor"
-#: ../libempathy-gtk/empathy-chat.c:1106
+#: ../libempathy-gtk/empathy-chat.c:1105
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <identifikátor kontaktu> <správa>: otvorí súkromný rozhovor"
-#: ../libempathy-gtk/empathy-chat.c:1109
+#: ../libempathy-gtk/empathy-chat.c:1108
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <prezývka>: zmeni vašu prezývku na aktuálnom serveri"
-#: ../libempathy-gtk/empathy-chat.c:1112
+#: ../libempathy-gtk/empathy-chat.c:1111
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <správa>: pošle ACTION správu do aktuálnej konverzácie"
-#: ../libempathy-gtk/empathy-chat.c:1115
+#: ../libempathy-gtk/empathy-chat.c:1114
msgid ""
"/say <message>: send <message> to the current conversation. This is used to "
"send a message starting with a '/'. For example: \"/say /join is used to "
@@ -1471,11 +1481,11 @@ msgstr ""
"odoslanie správy zaÄínajúcej s '/'. Napríklad: \"/say /join sa používa na "
"vstúpenie do novej diskusnej miestnosti\""
-#: ../libempathy-gtk/empathy-chat.c:1120
+#: ../libempathy-gtk/empathy-chat.c:1119
msgid "/whois <contact ID>: display information about a contact"
msgstr ""
-#: ../libempathy-gtk/empathy-chat.c:1123
+#: ../libempathy-gtk/empathy-chat.c:1122
msgid ""
"/help [<command>]: show all supported commands. If <command> is defined, "
"show its usage."
@@ -1483,95 +1493,96 @@ msgstr ""
"/help [<príkaz>]: zobrazí zoznam všetkých podporovaných príkazov. Ak je "
"zadaný aj <príkaz>, zobrazí sa jeho použitie."
-#: ../libempathy-gtk/empathy-chat.c:1142
+#: ../libempathy-gtk/empathy-chat.c:1141
#, c-format
msgid "Usage: %s"
msgstr "Použitie: %s"
-#: ../libempathy-gtk/empathy-chat.c:1187
+#: ../libempathy-gtk/empathy-chat.c:1186
msgid "Unknown command"
msgstr "Neznámy príkaz"
-#: ../libempathy-gtk/empathy-chat.c:1313
+#: ../libempathy-gtk/empathy-chat.c:1312
msgid "Unknown command; see /help for the available commands"
msgstr "Neznámy príkaz; použite /help na zobrazenie dostupných príkazov"
-#: ../libempathy-gtk/empathy-chat.c:1564
+#: ../libempathy-gtk/empathy-chat.c:1563
msgid "insufficient balance to send message"
msgstr ""
-#: ../libempathy-gtk/empathy-chat.c:1568 ../libempathy-gtk/empathy-chat.c:1582
-#: ../libempathy-gtk/empathy-chat.c:1645
+#: ../libempathy-gtk/empathy-chat.c:1567 ../libempathy-gtk/empathy-chat.c:1581
+#: ../libempathy-gtk/empathy-chat.c:1644
#, c-format
msgid "Error sending message '%s': %s"
msgstr "Chyba pri posielaní správy '%s': %s"
-#: ../libempathy-gtk/empathy-chat.c:1570 ../libempathy-gtk/empathy-chat.c:1587
-#: ../libempathy-gtk/empathy-chat.c:1649
+#: ../libempathy-gtk/empathy-chat.c:1569 ../libempathy-gtk/empathy-chat.c:1586
+#: ../libempathy-gtk/empathy-chat.c:1648
#, c-format
msgid "Error sending message: %s"
msgstr "Chyba pri posielaní správy: %s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1576
+#: ../libempathy-gtk/empathy-chat.c:1575
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr ""
-#: ../libempathy-gtk/empathy-chat.c:1616
+#: ../libempathy-gtk/empathy-chat.c:1615
msgid "not capable"
msgstr ""
-#: ../libempathy-gtk/empathy-chat.c:1623
+#: ../libempathy-gtk/empathy-chat.c:1622
msgid "offline"
msgstr "odpojený"
-#: ../libempathy-gtk/empathy-chat.c:1626
+#: ../libempathy-gtk/empathy-chat.c:1625
msgid "invalid contact"
msgstr "neplatný kontakt"
-#: ../libempathy-gtk/empathy-chat.c:1629
+#: ../libempathy-gtk/empathy-chat.c:1628
msgid "permission denied"
msgstr "prístup zamietnutý"
-#: ../libempathy-gtk/empathy-chat.c:1632
+#: ../libempathy-gtk/empathy-chat.c:1631
msgid "too long message"
msgstr "príliš dlhá správa"
-#: ../libempathy-gtk/empathy-chat.c:1635
+#: ../libempathy-gtk/empathy-chat.c:1634
msgid "not implemented"
msgstr "nie je implementované"
-#: ../libempathy-gtk/empathy-chat.c:1639
+#: ../libempathy-gtk/empathy-chat.c:1638
msgid "unknown"
msgstr "neznámy"
-#: ../libempathy-gtk/empathy-chat.c:1706 ../src/empathy-chat-window.c:920
+#: ../libempathy-gtk/empathy-chat.c:1705 ../src/empathy-chat-window.c:919
msgid "Topic:"
msgstr "Téma:"
-#: ../libempathy-gtk/empathy-chat.c:1721
+#: ../libempathy-gtk/empathy-chat.c:1720
#, c-format
msgid "Topic set to: %s"
msgstr "Téma nastavená na: %s"
-#: ../libempathy-gtk/empathy-chat.c:1723
+#: ../libempathy-gtk/empathy-chat.c:1722
#, fuzzy, c-format
+#| msgid "Topic set to: %s"
msgid "Topic set by %s to: %s"
msgstr "Téma nastavená na: %s"
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1728
+#: ../libempathy-gtk/empathy-chat.c:1727
msgid "No topic defined"
msgstr "Nebola nastavená žiadna téma"
-#: ../libempathy-gtk/empathy-chat.c:2244
+#: ../libempathy-gtk/empathy-chat.c:2243
msgid "(No Suggestions)"
msgstr "(Žiadne návrhy)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2312
+#: ../libempathy-gtk/empathy-chat.c:2311
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "Pridať '%s' do slovníka"
@@ -1579,32 +1590,32 @@ msgstr "Pridať '%s' do slovníka"
# slovnik je v tvare napr. "slovencina", "anglictina" (podst. m.)
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2349
+#: ../libempathy-gtk/empathy-chat.c:2348
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "Pridať '%s' do slovníka pre jazyk %s"
#  http://live.gnome.org/SlovakTranslation/Others/JULS
-#: ../libempathy-gtk/empathy-chat.c:2419
+#: ../libempathy-gtk/empathy-chat.c:2418
msgid "Insert Smiley"
msgstr "Vložiť smejka"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2437
+#: ../libempathy-gtk/empathy-chat.c:2436
#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "_Poslať"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2494
+#: ../libempathy-gtk/empathy-chat.c:2493
msgid "_Spelling Suggestions"
msgstr "_Návrhy kontroly pravopisu"
-#: ../libempathy-gtk/empathy-chat.c:2583
+#: ../libempathy-gtk/empathy-chat.c:2582
msgid "Failed to retrieve recent logs"
msgstr "Zlyhalo získavanie nedávnych záznamov"
-#: ../libempathy-gtk/empathy-chat.c:2722
+#: ../libempathy-gtk/empathy-chat.c:2721
#, c-format
msgid "%s has disconnected"
msgstr "Kontakt %s sa odpojil"
@@ -1612,12 +1623,12 @@ msgstr "Kontakt %s sa odpojil"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2729
+#: ../libempathy-gtk/empathy-chat.c:2728
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "Kontakt %1$s bol vykopnutý používateľom %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2732
+#: ../libempathy-gtk/empathy-chat.c:2731
#, c-format
msgid "%s was kicked"
msgstr "Kontakt %s bol vykopnutý"
@@ -1625,17 +1636,17 @@ msgstr "Kontakt %s bol vykopnutý"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2740
+#: ../libempathy-gtk/empathy-chat.c:2739
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "Kontakt %1$s dostal zákaz od %2$s"
-#: ../libempathy-gtk/empathy-chat.c:2743
+#: ../libempathy-gtk/empathy-chat.c:2742
#, c-format
msgid "%s was banned"
msgstr "Kontakt %s dostal zákaz"
-#: ../libempathy-gtk/empathy-chat.c:2747
+#: ../libempathy-gtk/empathy-chat.c:2746
#, c-format
msgid "%s has left the room"
msgstr "Kontakt %s opustil miestnosť"
@@ -1645,17 +1656,17 @@ msgstr "Kontakt %s opustil miestnosť"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2756
+#: ../libempathy-gtk/empathy-chat.c:2755
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: ../libempathy-gtk/empathy-chat.c:2781
+#: ../libempathy-gtk/empathy-chat.c:2780
#, c-format
msgid "%s has joined the room"
msgstr "Kontakt %s vstúpil do miestnosti"
-#: ../libempathy-gtk/empathy-chat.c:2806
+#: ../libempathy-gtk/empathy-chat.c:2805
#, c-format
msgid "%s is now known as %s"
msgstr "Kontakt %s je teraz známy ako %s"
@@ -1663,7 +1674,7 @@ msgstr "Kontakt %s je teraz známy ako %s"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2993
+#: ../libempathy-gtk/empathy-chat.c:2992
#: ../src/empathy-streamed-media-window.c:1888
#: ../src/empathy-event-manager.c:1279 ../src/empathy-call-window.c:1466
#: ../src/empathy-call-window.c:1516 ../src/empathy-call-window.c:2562
@@ -1671,47 +1682,47 @@ msgid "Disconnected"
msgstr "Odpojený"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3657
+#: ../libempathy-gtk/empathy-chat.c:3656
msgid "Would you like to store this password?"
msgstr "Želáte si uložiť toto heslo?"
-#: ../libempathy-gtk/empathy-chat.c:3663
+#: ../libempathy-gtk/empathy-chat.c:3662
msgid "Remember"
msgstr "Zapamätať"
-#: ../libempathy-gtk/empathy-chat.c:3673
+#: ../libempathy-gtk/empathy-chat.c:3672
msgid "Not now"
msgstr "Teraz nie"
-#: ../libempathy-gtk/empathy-chat.c:3717
+#: ../libempathy-gtk/empathy-chat.c:3716
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "Opakovať"
-#: ../libempathy-gtk/empathy-chat.c:3721
+#: ../libempathy-gtk/empathy-chat.c:3720
msgid "Wrong password; please try again:"
msgstr "Nesprávne heslo; prosím, skúste to znova:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3851
+#: ../libempathy-gtk/empathy-chat.c:3850
msgid "This room is protected by a password:"
msgstr "Miestnosť je chránená heslom:"
-#: ../libempathy-gtk/empathy-chat.c:3878
+#: ../libempathy-gtk/empathy-chat.c:3877
msgid "Join"
msgstr "Vstúpiť"
-#: ../libempathy-gtk/empathy-chat.c:4070 ../src/empathy-event-manager.c:1300
+#: ../libempathy-gtk/empathy-chat.c:4069 ../src/empathy-event-manager.c:1300
msgid "Connected"
msgstr "Pripojený"
-#: ../libempathy-gtk/empathy-chat.c:4125
+#: ../libempathy-gtk/empathy-chat.c:4124
msgid "Conversation"
msgstr "Konverzácia"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4130
+#: ../libempathy-gtk/empathy-chat.c:4129
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
@@ -1839,133 +1850,133 @@ msgstr "Správa, ktorá vás predstaví:"
msgid "Please let me see when you're online. Thanks!"
msgstr "Prosím, dovoľte mi vidieÅ¥, keÄ ste prihlásený. ÄŽakujem!"
-#: ../libempathy-gtk/empathy-contact-widget.c:567
+#: ../libempathy-gtk/empathy-contact-widget.c:566
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "Kanály:"
-#: ../libempathy-gtk/empathy-contact-widget.c:747
+#: ../libempathy-gtk/empathy-contact-widget.c:746
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "ISO kód krajiny:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:748
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "Krajina:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:750
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "Štát:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:752
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "Mesto:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:754
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "Oblasť:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:756
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "PSČ:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:758
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "Ulica:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:760
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "Budova:"
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:762
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "Poschodie:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:764
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "Miestnosť:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:766
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "Text:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:768
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "Popis:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:770
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "URI:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:772
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "Stupeň presnosti:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:774
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "Chyba:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:776
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "Vertikálna chyba (v metroch):"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:778
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "Horizontálna chyba (v metroch):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:780
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "Rýchlosť:"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:782
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "Azimut:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:784
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "Rýchlosť stúpania:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:786
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "Posledná aktualizácia:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:788
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "Zemepisná dĺžka:"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:790
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "Zemepisná šírka:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:792
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "Nadmorská výška:"
-#: ../libempathy-gtk/empathy-contact-widget.c:846
-#: ../libempathy-gtk/empathy-contact-widget.c:861
+#: ../libempathy-gtk/empathy-contact-widget.c:845
+#: ../libempathy-gtk/empathy-contact-widget.c:860
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
#: ../src/empathy-preferences.ui.h:35
@@ -1973,34 +1984,35 @@ msgid "Location"
msgstr "Poloha"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:862
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s, %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:915
+#: ../libempathy-gtk/empathy-contact-widget.c:914
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "%d. %B %Y, %R UTC"
-#: ../libempathy-gtk/empathy-contact-widget.c:997
+#: ../libempathy-gtk/empathy-contact-widget.c:996
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "Uložiť podobizeň"
-#: ../libempathy-gtk/empathy-contact-widget.c:1053
+#: ../libempathy-gtk/empathy-contact-widget.c:1052
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "Podobizeň sa nedá uložiť"
-#: ../libempathy-gtk/empathy-contact-widget.c:1455
+#: ../libempathy-gtk/empathy-contact-widget.c:1454
#, fuzzy
+#| msgid "Technical Details"
msgid "Personal Details"
msgstr "Technické údaje"
# Podrobnosti, že?
-#: ../libempathy-gtk/empathy-contact-widget.c:1458
+#: ../libempathy-gtk/empathy-contact-widget.c:1457
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
@@ -2008,26 +2020,31 @@ msgstr "Informácie o kontakte"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:104
#, fuzzy
+#| msgid "Full name:"
msgid "Full name"
msgstr "Celé meno:"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:105
#, fuzzy
+#| msgid "Phone number:"
msgid "Phone number"
msgstr "Telefónne Äíslo:"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:106
#, fuzzy
+#| msgid "E-mail address:"
msgid "E-mail address"
msgstr "Emailová adresa:"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:107
#, fuzzy
+#| msgid "Website:"
msgid "Website"
msgstr "Webová stránka:"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:108
#, fuzzy
+#| msgid "Birthday:"
msgid "Birthday"
msgstr "Narodeniny:"
@@ -2050,26 +2067,31 @@ msgstr "Správa pri odchode:"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:132
#, fuzzy
+#| msgid "Work"
msgid "work"
msgstr "Práca"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:133
#, fuzzy
+#| msgid "Romeo"
msgid "home"
msgstr "Rómeo"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:134
#, fuzzy
+#| msgid "Mobile"
msgid "mobile"
msgstr "Mobil"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:135
#, fuzzy
+#| msgid "Favorite"
msgid "voice"
msgstr "Obľúbený"
#: ../libempathy-gtk/empathy-contactinfo-utils.c:136
#, fuzzy
+#| msgid "Preferences"
msgid "preferred"
msgstr "Nastavenia"
@@ -2079,6 +2101,7 @@ msgstr ""
#: ../libempathy-gtk/empathy-contactinfo-utils.c:138
#, fuzzy
+#| msgid "Appearance"
msgid "parcel"
msgstr "Vzhľad"
@@ -2143,7 +2166,7 @@ msgid "Select"
msgstr "Vybrať"
#: ../libempathy-gtk/empathy-groups-widget.c:403
-#: ../src/empathy-roster-window.c:1970
+#: ../src/empathy-roster-window.c:1969
msgid "Group"
msgstr "Skupina"
@@ -2173,110 +2196,112 @@ msgstr "Prepojené kontakty"
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:173
+#: ../libempathy-gtk/empathy-individual-menu.c:172
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:345
+#: ../libempathy-gtk/empathy-individual-menu.c:344
msgid "Select account to use to place the call"
msgstr ""
#. translators: Call is a noun. This string is used in the window
#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:349
+#: ../libempathy-gtk/empathy-individual-menu.c:348
#: ../libempathy-gtk/empathy-log-window.ui.h:6
#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:18
msgid "Call"
msgstr "Hovor"
-#: ../libempathy-gtk/empathy-individual-menu.c:414
+#: ../libempathy-gtk/empathy-individual-menu.c:413
msgid "Mobile"
msgstr "Mobil"
-#: ../libempathy-gtk/empathy-individual-menu.c:416
+#: ../libempathy-gtk/empathy-individual-menu.c:415
msgid "Work"
msgstr "Práca"
-#: ../libempathy-gtk/empathy-individual-menu.c:418
+#: ../libempathy-gtk/empathy-individual-menu.c:417
msgid "HOME"
msgstr "DOMOV"
-#: ../libempathy-gtk/empathy-individual-menu.c:659
+#: ../libempathy-gtk/empathy-individual-menu.c:658
msgid "_Block Contact"
msgstr "Za_blokovať kontakt"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1018
+#: ../libempathy-gtk/empathy-individual-menu.c:1017
#: ../libempathy-gtk/empathy-new-message-dialog.c:319
#: ../src/empathy-roster-window-menubar.ui.h:1
msgid "_Chat"
msgstr "_Rozhovor"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1053
+#: ../libempathy-gtk/empathy-individual-menu.c:1052
#: ../libempathy-gtk/empathy-new-message-dialog.c:313
msgid "_SMS"
msgstr "_SMS"
# PŠ: navrhujem Hlasový
-#: ../libempathy-gtk/empathy-individual-menu.c:1086
+#: ../libempathy-gtk/empathy-individual-menu.c:1085
msgctxt "menu item"
msgid "_Audio Call"
msgstr "_Zvukový hovor"
-#: ../libempathy-gtk/empathy-individual-menu.c:1119
+#: ../libempathy-gtk/empathy-individual-menu.c:1118
msgctxt "menu item"
msgid "_Video Call"
msgstr "_Videohovor"
-#: ../libempathy-gtk/empathy-individual-menu.c:1160
+#: ../libempathy-gtk/empathy-individual-menu.c:1159
#: ../src/empathy-roster-window-menubar.ui.h:4
msgid "_Previous Conversations"
msgstr "P_redchádzajúce konverzácie"
-#: ../libempathy-gtk/empathy-individual-menu.c:1189
+#: ../libempathy-gtk/empathy-individual-menu.c:1188
msgid "Send File"
msgstr "Poslať súbor"
-#: ../libempathy-gtk/empathy-individual-menu.c:1219
+#: ../libempathy-gtk/empathy-individual-menu.c:1218
msgid "Share My Desktop"
msgstr "Zdieľať moju plochu"
-#: ../libempathy-gtk/empathy-individual-menu.c:1245
+#: ../libempathy-gtk/empathy-individual-menu.c:1244
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "Obľúbený"
-#: ../libempathy-gtk/empathy-individual-menu.c:1264
+#: ../libempathy-gtk/empathy-individual-menu.c:1263
#, fuzzy
+#| msgid "telepathy-salut not installed"
msgid "gnome-contacts not installed"
msgstr "telepathy-salut nie je nainštalovaný"
-#: ../libempathy-gtk/empathy-individual-menu.c:1267
+#: ../libempathy-gtk/empathy-individual-menu.c:1266
msgid "Please install gnome-contacts to access contacts details."
msgstr ""
-#: ../libempathy-gtk/empathy-individual-menu.c:1398
+#: ../libempathy-gtk/empathy-individual-menu.c:1397
msgid "Infor_mation"
msgstr "_Informácie"
-#: ../libempathy-gtk/empathy-individual-menu.c:1447
+#: ../libempathy-gtk/empathy-individual-menu.c:1446
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "_Upraviť"
-#: ../libempathy-gtk/empathy-individual-menu.c:1564
-#: ../src/empathy-chat-window.c:1192
+#. send invitation
+#: ../libempathy-gtk/empathy-individual-menu.c:1562
+#: ../src/empathy-chat-window.c:1190
msgid "Inviting you to this room"
msgstr "Pozýva vás do tejto miestnosti"
-#: ../libempathy-gtk/empathy-individual-menu.c:1610
+#: ../libempathy-gtk/empathy-individual-menu.c:1608
msgid "_Invite to Chat Room"
msgstr "_Pozvať do diskusnej miestnosti"
-#: ../libempathy-gtk/empathy-individual-menu.c:1806
+#: ../libempathy-gtk/empathy-individual-menu.c:1804
#: ../src/empathy-roster-window-menubar.ui.h:5
msgid "_Add Contact…"
msgstr "_Pridať kontakt…"
@@ -2532,16 +2557,19 @@ msgstr "<span size=\"x-large\">NaÄítava sa...</span>"
#: ../libempathy-gtk/empathy-new-message-dialog.c:83
#, fuzzy
+#| msgid "The specified contact is offline"
msgid "The contact is offline"
msgstr "Zvolený kontakt je odhlásený"
#: ../libempathy-gtk/empathy-new-message-dialog.c:85
#, fuzzy
+#| msgid "The specified contact is not valid"
msgid "The specified contact is either invalid or unknown"
msgstr "Zvolený kontakt nie je platný"
#: ../libempathy-gtk/empathy-new-message-dialog.c:87
#, fuzzy
+#| msgid "Topic not supported on this conversation"
msgid "The contact does not support this kind of conversation"
msgstr "Téma nie je pri tejto konverzácii podporovaná"
@@ -2563,21 +2591,25 @@ msgstr ""
#: ../libempathy-gtk/empathy-new-message-dialog.c:101
#, fuzzy
+#| msgid "You have been invited to join %s"
msgid "You must be invited to join this channel"
msgstr "Boli ste pozvaný na vstup do %s"
#: ../libempathy-gtk/empathy-new-message-dialog.c:103
#, fuzzy
+#| msgid "Contact disconnected"
msgid "Can't proceed while disconnected"
msgstr "Kontakt sa odpojil"
#: ../libempathy-gtk/empathy-new-message-dialog.c:105
#, fuzzy
+#| msgid "permission denied"
msgid "Permission denied"
msgstr "prístup zamietnutý"
#: ../libempathy-gtk/empathy-new-message-dialog.c:111
#, fuzzy
+#| msgid "There was an error starting the call"
msgid "There was an error starting the conversation"
msgstr "PoÄas vytvárania hovoru nastala chyba."
@@ -2600,6 +2632,8 @@ msgstr "_Videohovor"
#. add audio button
#: ../libempathy-gtk/empathy-new-call-dialog.c:233
#, fuzzy
+#| msgctxt "menu item"
+#| msgid "_Audio Call"
msgid "_Audio Call"
msgstr "_Zvukový hovor"
@@ -2610,6 +2644,7 @@ msgstr "Nový hovor"
#: ../libempathy-gtk/empathy-bad-password-dialog.c:130
#, fuzzy, c-format
+#| msgid "Authentication failed"
msgid "Authentification failed for account <b>%s</b>"
msgstr "Overenie totožnosti zlyhalo"
@@ -2629,30 +2664,38 @@ msgstr ""
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:167
-#: ../libempathy-gtk/empathy-presence-chooser.c:203
+#: ../libempathy-gtk/empathy-presence-chooser.c:166
+#: ../libempathy-gtk/empathy-presence-chooser.c:202
msgid "Custom Message…"
msgstr "Vlastná správa…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:220
-#: ../libempathy-gtk/empathy-presence-chooser.c:222
+#: ../libempathy-gtk/empathy-presence-chooser.c:219
+#: ../libempathy-gtk/empathy-presence-chooser.c:221
msgid "Edit Custom Messages…"
msgstr "Upraviť vlastné správy…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:345
+#: ../libempathy-gtk/empathy-presence-chooser.c:344
msgid "Click to remove this status as a favorite"
msgstr "Kliknutím odstránite tento stav z obľúbených"
-#: ../libempathy-gtk/empathy-presence-chooser.c:354
+#: ../libempathy-gtk/empathy-presence-chooser.c:353
msgid "Click to make this status a favorite"
msgstr "Kliknutím nastavíte tento stav ako obľúbený"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#. Translators: %s is a status message like 'At the pub' for example
+#: ../libempathy-gtk/empathy-presence-chooser.c:387
+#, c-format
+msgid ""
+"<b>Current message: %s</b>\n"
+"<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:396
msgid "Set status"
msgstr "Nastaviť stav"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1147
msgid "Custom messages…"
msgstr "Vlastné správy…"
@@ -2735,7 +2778,7 @@ msgid "Message edited at %s"
msgstr "Prijatá správa"
# Varianta:
-# PÅ : keÄ už, tak "variant"... rod upravený
+#PÅ : keÄ už, tak "variant"... rod upravený
#: ../libempathy-gtk/empathy-theme-adium.c:1757
msgid "Normal"
msgstr "Normálny"
@@ -2814,6 +2857,7 @@ msgstr "Názov hostiteľa certifikátu: %s"
#: ../libempathy-gtk/empathy-tls-dialog.c:281
#, fuzzy
+#| msgid "Continue"
msgid "C_ontinue"
msgstr "PokraÄovaÅ¥"
@@ -3028,11 +3072,15 @@ msgstr "Vietnamské"
#: ../libempathy-gtk/empathy-calendar-button.c:66
#, fuzzy
+#| msgctxt "verb in a column header displaying group names"
+#| msgid "Select"
msgid "Select..."
msgstr "Vybrať"
#: ../libempathy-gtk/empathy-calendar-button.c:154
#, fuzzy
+#| msgctxt "verb in a column header displaying group names"
+#| msgid "Select"
msgid "_Select"
msgstr "Vybrať"
@@ -3044,24 +3092,24 @@ msgstr "Žiadna chybová správa"
msgid "Instant Message (Empathy)"
msgstr "Okamžitá správa (Empathy)"
-#: ../src/empathy.c:428
+#: ../src/empathy.c:425
msgid "Don't connect on startup"
msgstr "Nepripájať sa po spustení"
-#: ../src/empathy.c:432
+#: ../src/empathy.c:429
msgid "Don't display the contact list or any other dialogs on startup"
msgstr ""
"Nezobrazovať zoznam kontaktov alebo akékoľvek iné dialógové okno pri spustení"
-#: ../src/empathy.c:447
+#: ../src/empathy.c:444
msgid "- Empathy IM Client"
msgstr "- Komunikátor Empathy"
-#: ../src/empathy.c:634
+#: ../src/empathy.c:620
msgid "Error contacting the Account Manager"
msgstr ""
-#: ../src/empathy.c:636
+#: ../src/empathy.c:622
#, fuzzy, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. "
@@ -3116,14 +3164,14 @@ msgstr ""
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:72
+#: ../src/empathy-accounts-dialog.c:71
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "Vo vaÅ¡om úÄte %s máte neuložené zmeny."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:76
+#: ../src/empathy-accounts-dialog.c:75
msgid "Your new account has not been saved yet."
msgstr "Váš nový úÄet eÅ¡te nebol uložený."
@@ -3164,6 +3212,7 @@ msgstr "Odhlásený — ÚÄet zablokovaný"
#: ../src/empathy-accounts-dialog.c:608
#, fuzzy
+#| msgid "Connection has been refused"
msgid "Edit Connection Parameters"
msgstr "Pripojenie bolo zamietnuté"
@@ -3188,7 +3237,7 @@ msgstr "Naozaj chcete odstrániÅ¥ %s z vášho poÄítaÄa?"
msgid "This will not remove your account on the server."
msgstr "Toto neodstráni váš úÄet na serveri."
-#: ../src/empathy-accounts-dialog.c:1602
+#: ../src/empathy-accounts-dialog.c:1571
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3198,26 +3247,31 @@ msgstr ""
# * https://bugzilla.gnome.org/show_bug.cgi?id=645689
# PŠ: toto asi nebude správny odkaz na bugreport... opraviť!
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1779
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1762
#, fuzzy
-msgid "_Enable"
+#| msgid "_Enable"
+msgid "_Enabled"
msgstr "_Povoliť"
-#: ../src/empathy-accounts-dialog.c:1780
-msgid "_Disable"
-msgstr "_Zakázať"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1785
+#, fuzzy
+#| msgid "Real name:"
+msgid "Rename"
+msgstr "SkutoÄné meno:"
-#: ../src/empathy-accounts-dialog.c:2221
+#: ../src/empathy-accounts-dialog.c:2201
msgid "_Skip"
msgstr ""
-#: ../src/empathy-accounts-dialog.c:2225
+#: ../src/empathy-accounts-dialog.c:2205
#, fuzzy
+#| msgid "Connected"
msgid "_Connect"
msgstr "Pripojený"
-#: ../src/empathy-accounts-dialog.c:2404
+#: ../src/empathy-accounts-dialog.c:2384
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3243,24 +3297,25 @@ msgstr ""
#: ../src/empathy-accounts-dialog.ui.h:6
#, fuzzy
+#| msgid "No protocol installed"
msgid "No protocol backends installed"
msgstr "Nebol nainštalovaný žiadny protokol"
-#: ../src/empathy-auth-client.c:288
+#: ../src/empathy-auth-client.c:286
#, fuzzy
msgid " - Empathy authentication client"
msgstr "- Komunikátor Empathy"
-#: ../src/empathy-auth-client.c:304
+#: ../src/empathy-auth-client.c:302
#, fuzzy
msgid "Empathy authentication client"
msgstr "Autentifikácia zlyhala"
-#: ../src/empathy-av.c:118 ../src/empathy-call.c:201
+#: ../src/empathy-av.c:115 ../src/empathy-call.c:198
msgid "- Empathy Audio/Video Client"
msgstr "- Empathy - klient pre zvuk a video"
-#: ../src/empathy-av.c:134 ../src/empathy-call.c:223
+#: ../src/empathy-av.c:131 ../src/empathy-call.c:220
msgid "Empathy Audio/Video Client"
msgstr "Empathy - klient pre zvuk a video"
@@ -3571,19 +3626,20 @@ msgstr ""
msgid "Audio"
msgstr "Zvuk"
-#: ../src/empathy-chat-window.c:289
+#: ../src/empathy-chat-window.c:288
#, fuzzy
+#| msgid "Hide the main window."
msgid "Close this window?"
msgstr "Skryje hlavné okno."
-#: ../src/empathy-chat-window.c:294
+#: ../src/empathy-chat-window.c:293
#, c-format
msgid ""
"Closing this window will leave %s. You will not receive any further messages "
"until you rejoin it."
msgstr ""
-#: ../src/empathy-chat-window.c:305
+#: ../src/empathy-chat-window.c:304
#, c-format
msgid ""
"Closing this window will leave a chat room. You will not receive any further "
@@ -3595,27 +3651,29 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#: ../src/empathy-chat-window.c:314
+#: ../src/empathy-chat-window.c:313
#, fuzzy, c-format
+#| msgid "Level "
msgid "Leave %s?"
msgstr "Úroveň"
-#: ../src/empathy-chat-window.c:315
+#: ../src/empathy-chat-window.c:314
msgid ""
"You will not receive any further messages from this chat room until you "
"rejoin it."
msgstr ""
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Close window"
msgstr ""
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
#, fuzzy
+#| msgid "Level "
msgid "Leave room"
msgstr "Úroveň"
-#: ../src/empathy-chat-window.c:640 ../src/empathy-chat-window.c:660
+#: ../src/empathy-chat-window.c:639 ../src/empathy-chat-window.c:659
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
@@ -3623,7 +3681,7 @@ msgstr[0] "%s (%d nepreÄítaných)"
msgstr[1] "%s (%d nepreÄítaná)"
msgstr[2] "%s (%d nepreÄítané)"
-#: ../src/empathy-chat-window.c:652
+#: ../src/empathy-chat-window.c:651
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
@@ -3631,7 +3689,7 @@ msgstr[0] "%s (a %u ostatných)"
msgstr[1] "%s (a %u ostatný)"
msgstr[2] "%s (a %u ostatní)"
-#: ../src/empathy-chat-window.c:668
+#: ../src/empathy-chat-window.c:667
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
@@ -3639,7 +3697,7 @@ msgstr[0] "%s (%d nepreÄítaných od iných)"
msgstr[1] "%s (%d nepreÄítaná od iných)"
msgstr[2] "%s (%d nepreÄítané od iných)"
-#: ../src/empathy-chat-window.c:677
+#: ../src/empathy-chat-window.c:676
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
@@ -3647,11 +3705,11 @@ msgstr[0] "%s (%d nepreÄítaných od vÅ¡etkých)"
msgstr[1] "%s (%d nepreÄítaná od vÅ¡etkých)"
msgstr[2] "%s (%d nepreÄítané od vÅ¡etkých)"
-#: ../src/empathy-chat-window.c:892
+#: ../src/empathy-chat-window.c:891
msgid "SMS:"
msgstr "SMS:"
-#: ../src/empathy-chat-window.c:902
+#: ../src/empathy-chat-window.c:901
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
@@ -3659,7 +3717,7 @@ msgstr[0] "Posiela sa %d správ"
msgstr[1] "Posiela sa %d správa"
msgstr[2] "Posielajú sa %d správy"
-#: ../src/empathy-chat-window.c:924
+#: ../src/empathy-chat-window.c:923
msgid "Typing a message."
msgstr "Píše správu."
@@ -3820,7 +3878,7 @@ msgstr "Boli ste pozvaný na vstup do %s"
msgid "Incoming file transfer from %s"
msgstr "Prichádzajúci prenos súboru od %s"
-#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:374
+#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:373
msgid "Password required"
msgstr "Vyžadované heslo"
@@ -3951,6 +4009,7 @@ msgstr "OdstrániÅ¥ dokonÄené, zruÅ¡ené a chybné prenosy súborov zo zoznamu
#: ../src/empathy-import-dialog.c:76
#, fuzzy
+#| msgid "Import"
msgid "_Import"
msgstr "Importovať"
@@ -3979,79 +4038,80 @@ msgstr "Protokol"
msgid "Source"
msgstr "Zdroj"
-#: ../src/empathy-roster-window.c:391
+#: ../src/empathy-roster-window.c:390
msgid "Provide Password"
msgstr "Poskytnite heslo"
-#: ../src/empathy-roster-window.c:397
+#: ../src/empathy-roster-window.c:396
msgid "Disconnect"
msgstr "Odpojiť"
-#: ../src/empathy-roster-window.c:657
+#: ../src/empathy-roster-window.c:656
msgid "You need to setup an account to see contacts here."
msgstr ""
-#: ../src/empathy-roster-window.c:673
+#: ../src/empathy-roster-window.c:672
msgid "No match found"
msgstr "Nenájdená žiadna zhoda"
-#: ../src/empathy-roster-window.c:783
+#: ../src/empathy-roster-window.c:782
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr ""
-#: ../src/empathy-roster-window.c:849
+#: ../src/empathy-roster-window.c:848
msgid "Update software..."
msgstr ""
-#: ../src/empathy-roster-window.c:855 ../src/empathy-roster-window.c:972
+#: ../src/empathy-roster-window.c:854 ../src/empathy-roster-window.c:971
msgid "Close"
msgstr "Zatvoriť"
-#: ../src/empathy-roster-window.c:960
+#: ../src/empathy-roster-window.c:959
msgid "Reconnect"
msgstr "Obnoviť spojenie"
-#: ../src/empathy-roster-window.c:966
+#: ../src/empathy-roster-window.c:965
msgid "Edit Account"
msgstr "UpraviÅ¥ úÄet"
#. Translators: this string will be something like:
#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1110
+#: ../src/empathy-roster-window.c:1109
#, c-format
msgid "Top up %s (%s)..."
msgstr "Dobiť %s (%s)..."
-#: ../src/empathy-roster-window.c:1156
+#: ../src/empathy-roster-window.c:1155
msgid "Top up account credit"
msgstr "DobiÅ¥ kredit na úÄte"
#. top up button
-#: ../src/empathy-roster-window.c:1228
+#: ../src/empathy-roster-window.c:1227
msgid "Top Up..."
msgstr "Dobiť..."
-#: ../src/empathy-roster-window.c:1952
+#: ../src/empathy-roster-window.c:1951
msgid "Contact"
msgstr "Kontakt"
-#: ../src/empathy-roster-window.c:2150
+#: ../src/empathy-roster-window.c:2149
msgid "You need to enable one of your accounts to see contacts here."
msgstr ""
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2158
+#: ../src/empathy-roster-window.c:2157
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr ""
-#: ../src/empathy-roster-window.c:2460
+#: ../src/empathy-roster-window.c:2459
msgid "Contact List"
msgstr "Zoznam kontaktov"
#: ../src/empathy-roster-window.ui.h:1
#, fuzzy
+#| msgid "_Accounts"
msgid "Account settings"
msgstr "ÚÄt_y"
@@ -4226,6 +4286,7 @@ msgid "New conversation"
msgstr "Nová konverzácia"
#: ../src/empathy-preferences.c:169
+#| msgid "Contact goes online"
msgid "Contact comes online"
msgstr "Kontakt sa prihlásil"
@@ -4386,8 +4447,8 @@ msgid ""
"off and restarting the call."
msgstr ""
"Druhá osoba vám bude lepÅ¡ie rozumieÅ¥ potlaÄením ozveny, ale môže to spôsobiÅ¥ "
-"problémy na niektorých poÄítaÄoch. Ak druhá osoba poÄuje podivné zvuky alebo "
-"zaznamená výpadky poÄas hovoru, skúste vypnúť potlaÄenie ozveny a "
+"problémy na niektorých poÄítaÄoch. Ak druhá osoba poÄuje podivné zvuky "
+"alebo zaznamená výpadky poÄas hovoru, skúste vypnúť potlaÄenie ozveny a "
"reštartovať hovor."
#: ../src/empathy-preferences.ui.h:26
@@ -4593,16 +4654,16 @@ msgid ""
msgstr ""
"Zvolený správca pripojenia nepodporuje rozšírenie pre vzdialené ladenie."
-#: ../src/empathy-invite-participant-dialog.c:202
-#: ../src/empathy-invite-participant-dialog.c:230
+#: ../src/empathy-invite-participant-dialog.c:200
+#: ../src/empathy-invite-participant-dialog.c:228
msgid "Invite Participant"
msgstr "PozvaÅ¥ úÄastníka"
-#: ../src/empathy-invite-participant-dialog.c:203
+#: ../src/empathy-invite-participant-dialog.c:201
msgid "Choose a contact to invite into the conversation:"
msgstr "Vyberte kontakt, ktorý chcete pozvať do konverzácie:"
-#: ../src/empathy-invite-participant-dialog.c:226
+#: ../src/empathy-invite-participant-dialog.c:224
msgid "Invite"
msgstr "Pozvať"
@@ -4630,7 +4691,7 @@ msgstr "<account-id>"
msgid "- Empathy Accounts"
msgstr "- úÄty Empathy"
-#: ../src/empathy-accounts.c:231
+#: ../src/empathy-accounts.c:230
msgid "Empathy Accounts"
msgstr "Empathy - úÄty"
@@ -4642,11 +4703,11 @@ msgstr ""
msgid "- Empathy Debugger"
msgstr "- OdlaÄovaÄ Empathy"
-#: ../src/empathy-debugger.c:113
+#: ../src/empathy-debugger.c:112
msgid "Empathy Debugger"
msgstr "OdlaÄovaÄ Empathy"
-#: ../src/empathy-chat.c:109
+#: ../src/empathy-chat.c:106
msgid "- Empathy Chat Client"
msgstr "- Komunikátor Empathy"
@@ -4728,6 +4789,7 @@ msgstr ""
#: ../src/empathy-call-window.c:3144
#, fuzzy
+#| msgid "Top Up..."
msgid "Top Up"
msgstr "Dobiť..."
@@ -4741,6 +4803,7 @@ msgstr "Aký typ úÄtu máte?"
#: ../libempathy-gtk/empathy-new-account-dialog.c:166
#, fuzzy
+#| msgid "New account"
msgid "Adding new account"
msgstr "Nový úÄet"
@@ -4765,16 +4828,6 @@ msgid ""
msgstr ""
#, fuzzy
-#~| msgid "E-_mail address:"
-#~ msgid "Local IP Address:"
-#~ msgstr "E_mailová adresa:"
-
-#, fuzzy
-#~| msgid "Real name:"
-#~ msgid "Rename"
-#~ msgstr "SkutoÄné meno:"
-
-#, fuzzy
#~ msgid "My Web Accounts"
#~ msgstr "- Empathy úÄty"
@@ -4956,6 +5009,9 @@ msgstr ""
#~ "Chystáte sa vytvoriÅ¥ nový úÄet, Äím zrušíte vaÅ¡e zmeny.\n"
#~ "Naozaj chcete pokraÄovaÅ¥?"
+#~ msgid "_Disable"
+#~ msgstr "_Zakázať"
+
#~ msgid "Protocol:"
#~ msgstr "Protokol:"
diff --git a/po/sl.po b/po/sl.po
index 660ae7df6..c89ef6809 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: empathy master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&keywords=I18N+L10N&component=General\n"
-"POT-Creation-Date: 2012-03-16 13:14+0000\n"
-"PO-Revision-Date: 2012-03-16 14:51+0100\n"
+"POT-Creation-Date: 2012-04-20 13:35+0000\n"
+"PO-Revision-Date: 2012-04-21 12:58+0100\n"
"Last-Translator: Matej UrbanÄiÄ <mateju@svn.gnome.org>\n"
"Language-Team: SlovenÅ¡Äina <gnome-si@googlegroups.com>\n"
"Language: \n"
@@ -41,7 +41,7 @@ msgstr "Klepet na Google Talk, Facebook, MSN in na mnogih drugih klepetalnih sto
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2512
+#: ../src/empathy-accounts-dialog.c:2527
msgid "Messaging and VoIP Accounts"
msgstr "SporoÄanje in raÄuni VoIP"
@@ -81,395 +81,396 @@ msgstr "Privzeta mapa za prenos datotek"
msgid "The default folder to save file transfers in."
msgstr "Privzeta mapa za shranjevanje prejetih datotek."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:9
+#. translators: Automatic tasks which are run once to port/update account settings. Ideally, this shouldn't be exposed to users at all, we just use a gsettings key here as an optimization to only run it only once.
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:10
msgid "Magic number used to check if sanity cleaning tasks should be run"
msgstr "MagiÄno Å¡tevilo, uporabljeno za preverjanje ali naj se naloge ÄiÅ¡Äenja izvedejo"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:10
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:11
msgid "empathy-sanity-cleaning.c uses this number to check if the cleaning tasks should be executed or not. Users should not change this key manually."
msgstr "Å tevilo empathy-sanity-cleaning.c preverja ali naj se naloge ÄiÅ¡Äenja izvedejo ali ne. Tega kljuÄa ni priporoÄljivo spreminjati roÄno."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:11
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
msgid "Show offline contacts"
msgstr "Pokaži tudi nepovezane stike"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:12
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
msgid "Whether to show contacts that are offline in the contact list."
msgstr "Ali naj bodo na seznamu stikov prikazani tudi nepovezani stiki."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:13
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
msgid "Show avatars"
msgstr "Pokaži podobe"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:14
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
msgid "Whether to show avatars for contacts in the contact list and chat windows."
msgstr "Ali naj bodo podobe stikov prikazane v seznamih in klepetalnih oknih."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:15
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
msgid "Show protocols"
msgstr "Pokaži protokole"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:16
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
msgid "Whether to show protocols for contacts in the contact list."
msgstr "Ali naj bodo v seznamih stikov in klepetalnih oknih prikazani protokoli stikov."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:17
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
msgid "Show Balance in contact list"
msgstr "Pokaži stanje na raÄunu v seznamu stikov"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:18
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
msgid "Whether to show account balances in the contact list."
msgstr "Ali naj se v seznamu stikov pokaže tudi stanje na raÄunu."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:19
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
msgid "Compact contact list"
msgstr "SkrÄi seznam stikov"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:20
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
msgid "Whether to show the contact list in compact mode."
msgstr "Ali naj bo v skrÄenem pogledu prikazan seznam stikov."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:21
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
msgid "Hide main window"
msgstr "Skrij glavno okno"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:22
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
msgid "Hide the main window."
msgstr "Skrivanje glavnega okna."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:23
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
msgid "Default directory to select an avatar image from"
msgstr "Privzeta mapa slik za izbor podobe"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:24
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
msgid "The last directory that an avatar image was chosen from."
msgstr "Zadnja mapa iz katere je bila izbrana podoba."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:25
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
msgid "Open new chats in separate windows"
msgstr "Nov klepet naj se odpre v loÄenem oknu"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:26
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
msgid "Always open a separate chat window for new chats."
msgstr "Za nov klepet vedno odpri loÄeno klepetalno okno."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:27
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
msgid "Display incoming events in the status area"
msgstr "Prikaz prihajajoÄih dogodkov v vrstici stanja."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:28
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
msgid "Display incoming events in the status area. If false, present them to the user immediately."
-msgstr "Prikaz prihajajoÄih dogodkov v vrstici stanja. V primeru, da možnost ni izbrana, bodo prikazane takoj."
+msgstr "Prikaz prihajajoÄih dogodkov v vrstici stanja. V primeru da možnost ni izbrana, bodo prikazane takoj."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:29
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
msgid "The position for the chat window side pane"
msgstr "Položaj stranskega pladnja v klepetalnem oknu"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:30
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
msgid "The stored position (in pixels) of the chat window side pane."
msgstr "Shranjen položaj (v toÄkah) stranskega pladnja v klepetalnem oknu."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:31
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
msgid "Show contact groups"
msgstr "Pokaži skupine stikov"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:32
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
msgid "Whether to show groups in the contact list."
msgstr "Ali naj se v seznamu stikov pokažejo skupine stikov."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:33
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
msgid "Contact list sort criterion"
msgstr "Kriterij razvrÅ¡Äanja seznama stikov"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:34
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
msgid "Which criterion to use when sorting the contact list. Default is to sort by the contact's state with the value \"state\". A value of \"name\" will sort the contact list by name."
msgstr "Kateri kriterij naj se uporabi za razvrÅ¡Äanje seznama stikov. Privzeto je razvrÅ¡Äanje po stanju stika z vrednostjo \"stanje\". Vrednost \"ime\" pa razvrsti seznam poimensko."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:35
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
msgid "Use notification sounds"
msgstr "Uporabi zvoke obvestil"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:36
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
msgid "Whether to play a sound to notify of events."
msgstr "Ali naj se predvaja zvok ob dogodkih."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:37
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
msgid "Disable sounds when away"
msgstr "OnemogoÄi zvok ob odsotnosti"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:38
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
msgid "Whether to play sound notifications when away or busy."
msgstr "Ali naj se predvaja zvok ob odsotnosti in zaposlenosti."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:39
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
msgid "Play a sound for incoming messages"
msgstr "Predvajaj zvok ob prejetju novih sporoÄil"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:40
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
msgid "Whether to play a sound to notify of incoming messages."
msgstr "Ali naj se predvaja zvok ob prejetju novega sporoÄila."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:41
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
msgid "Play a sound for outgoing messages"
msgstr "Predvajaj zvok ob poÅ¡iljanju sporoÄil"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:42
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
msgid "Whether to play a sound to notify of outgoing messages."
msgstr "Ali naj se predvaja zvok ob poÅ¡iljanju sporoÄil."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:43
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
msgid "Play a sound for new conversations"
msgstr "Predvajaj zvok ob novih pogovorih"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:44
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
msgid "Whether to play a sound to notify of new conversations."
msgstr "Ali naj se predvaja zvok ob novih pogovorih."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:45
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
msgid "Play a sound when a contact logs in"
msgstr "Predvajaj zvok ob prijavi stika"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:46
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
msgid "Whether to play a sound to notify of contacts logging into the network."
msgstr "Ali naj se predvaja zvok ob prijavi stika v omrežje."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:47
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
msgid "Play a sound when a contact logs out"
msgstr "Predvajaj zvok ob odjavi stika"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:48
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
msgid "Whether to play a sound to notify of contacts logging out of the network."
msgstr "Ali naj se predvaja zvok ob odjavi stika iz omrežja."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:49
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
msgid "Play a sound when we log in"
msgstr "Predvajaj zvok ob prijavi"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:50
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
msgid "Whether to play a sound when logging into a network."
msgstr "Ali naj se predvaja zvok ob prijavi v omrežje."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:51
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
msgid "Play a sound when we log out"
msgstr "Predvajaj zvok ob odjavi"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:52
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
msgid "Whether to play a sound when logging out of a network."
msgstr "Ali naj se predvaja zvok ob odjavi iz omrežja."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:53
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
msgid "Enable popup notifications for new messages"
msgstr "OmogoÄi pojavna obvestila ob novih sporoÄilih"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:54
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
msgid "Whether to show a popup notification when receiving a new message."
msgstr "Ali naj se pojavi obvestilo ob prejetju novega sporoÄila."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:55
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
msgid "Disable popup notifications when away"
msgstr "OnemogoÄi pojavna obvestila ob odsotnosti"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:56
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
msgid "Whether to show popup notifications when away or busy."
msgstr "Ali naj bodo pojavna obvestila prikazana ob odsotnosti ali zaposlenosti."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:57
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
msgid "Pop up notifications if the chat isn't focused"
msgstr "Pokaži pojavna obvestila, ko klepetalno okno ni v žariÅ¡Äu."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:58
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
msgid "Whether to show a popup notification when receiving a new message even if the chat is already opened, but not focused."
msgstr "Ali naj se pojavi obvestilo ob prejetju novega sporoÄila tudi, kadar je klepetalno okno že odprto, vendar ni v žariÅ¡Äu."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:59
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
msgid "Pop up notifications when a contact logs in"
msgstr "Pokaži pojavna obvestila ob prijavi stikov"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:60
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
msgid "Whether to show a popup notification when a contact goes online."
msgstr "Ali naj se pojavi obvestilo ob vzpostavitvi povezave stika."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:61
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
msgid "Pop up notifications when a contact logs out"
msgstr "Pokaži pojavna obvestila ob odjavi stikov"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:62
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
msgid "Whether to show a popup notification when a contact goes offline."
msgstr "Ali naj se pojavi obvestilo, ko stik izklopi povezavo."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:63
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
msgid "Use graphical smileys"
msgstr "Uporabi slikovne smeške"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:64
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
msgid "Whether to convert smileys into graphical images in conversations."
msgstr "Ali naj se pri pogovorih smeÅ¡ki pretvorijo v sliÄice."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:65
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
msgid "Show contact list in rooms"
msgstr "Pokaži seznam stikov v klepetalnicah"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:66
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
msgid "Whether to show the contact list in chat rooms."
msgstr "Ali naj bo v klepetalnicah prikazan seznam stikov."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:67
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
msgid "Chat window theme"
msgstr "Tema klepetalnega okna"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:68
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
msgid "The theme that is used to display the conversation in chat windows."
msgstr "Tema uporabljena za prikaz pogovorov v klepetalnih oknih."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:69
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
msgid "Chat window theme variant"
msgstr "RazliÄica teme klepetalnega okna"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:70
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
msgid "The theme variant that is used to display the conversation in chat windows."
msgstr "RazliÄica teme, ki je uporabljena za prikaz pogovorov v klepetalnih oknih."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:71
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
msgid "Path of the Adium theme to use"
msgstr "Pot do želene teme Adium "
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:72
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:73
msgid "Path of the Adium theme to use if the theme used for chat is Adium."
msgstr "Pot do želene teme Adium, kadar je ta doloÄena za klepet."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:73
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
msgid "Enable WebKit Developer Tools"
msgstr "OmogoÄi razvojna orodja WebKit"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:74
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:75
msgid "Whether WebKit developer tools, such as the Web Inspector, should be enabled."
msgstr "Ali naj bodo vkljuÄena razvijalna orodja WebKit kot je na primer Web Inspector."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:75
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:76
msgid "Inform other users when you are typing to them"
msgstr "Obvesti druge uporabnike, da jim tipkate besedilo"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:76
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:77
msgid "Whether to send the 'composing' or 'paused' chat states. Does not currently affect the 'gone' state."
msgstr "Ali naj se pošilja tudi stanje klepeta 'vpisovanje' ali pa 'v premoru'. Trenutno ne vpliva na stanje 'odsoten'."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:77
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
msgid "Use theme for chat rooms"
msgstr "Uporabi temo za klepetalnice"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:78
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
msgid "Whether to use the theme for chat rooms."
msgstr "Ali naj se za klepetalnice uporablja tema."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:79
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:80
msgid "Spell checking languages"
msgstr "Jeziki za Ärkovanje"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:80
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
msgid "Comma-separated list of spell checker languages to use (e.g. \"en, fr, nl\")."
msgstr "Z vejico loÄen seznam uporabljenih Ärkovalnikov (primer: \"sl, en, fr\")."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:81
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
msgid "Enable spell checker"
msgstr "OmogoÄi Ärkovalnik"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:82
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
msgid "Whether to check words typed against the languages you want to check with."
msgstr "Ali naj se preverja Ärkovanje besed v želenih jezikih."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:83
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:84
msgid "Nick completed character"
msgstr "Znak na koncu vzdevka"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:84
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
msgid "Character to add after nickname when using nick completion (tab) in group chat."
msgstr "Znak, ki naj bo dodan vzdevku ob uporabi možnosti dopolnjevanja vzdevkov (zavihek) v skupinskem klepetu."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:85
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
msgid "Empathy should use the avatar of the contact as the chat window icon"
msgstr "Program naj uporabi podobo stika kot ikono klepetalnega okna"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:86
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:87
msgid "Whether Empathy should use the avatar of the contact as the chat window icon."
msgstr "Ali naj program Empathy uporablja podobe stikov za ikone klepetalnih oken."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:87
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:88
msgid "Last account selected in Join Room dialog"
msgstr "Zadnji izbran raÄun v pogovornem oknu pridruženja klepetalnici"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:88
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
msgid "D-Bus object path of the last account selected to join a room."
msgstr "Pot predmeta vodila D-Bus zadnjega izbranega raÄuna pri pridruženju klepetalnici."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:89
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
msgid "Camera device"
msgstr "Naprava kamere"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:90
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
msgid "Default camera device to use in video calls, e.g. /dev/video0."
msgstr "Privzeta naprava kamere za uporabo pri video klicih, na primer /dev/video0."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:91
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
msgid "Camera position"
msgstr "Položaj kamere"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:92
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
msgid "Position the camera preview should be during a call."
msgstr "Položaj predogleda kamere med klicem."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:93
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
msgid "Echo cancellation support"
msgstr "Podpora odpravljanju odmevov"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:94
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
msgid "Whether to enable Pulseaudio's echo cancellation filter."
msgstr "Ali naj se omogoÄi filter odpravljanja odmevov Pulseaudio."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:95
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
msgid "Show hint about closing the main window"
msgstr "Pokaži namig ob zapiranju glavnega okna"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:96
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
msgid "Whether to show the message dialog about closing the main window with the 'x' button in the title bar."
msgstr "Ali naj bo pogovorno okno sporoÄila o zapiranju glavnega okna prikazano z gumbom 'x' v nazivni vrstici."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:97
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
msgid "Empathy can publish the user's location"
msgstr "Program Empathy lahko objavi mesto nahajanja uporabnika"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:98
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
msgid "Whether Empathy can publish the user's location to their contacts."
msgstr "Ali naj program Empathy objavlja mesta nahajanja uporabnika njegovim stikom."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:99
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
msgid "Empathy can use the network to guess the location"
msgstr "Program Empathy lahko uporabi omrežje za ugotavljanje mesta nahajanja"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:100
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:101
msgid "Whether Empathy can use the network to guess the location."
msgstr "Ali naj Empathy za pridobivanje mesta nahajanja uporablja omrežje."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:101
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:102
msgid "Empathy can use the cellular network to guess the location"
msgstr "Program Empathy lahko uporabi mobilni telefon za ugotavljanje mesta nahajanja"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:102
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:103
msgid "Whether Empathy can use the cellular network to guess the location."
msgstr "Ali naj Empathy za pridobivanje mesta nahajanja uporablja podatke mobilnega omrežja."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:103
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:104
msgid "Empathy can use the GPS to guess the location"
msgstr "Program Empathy lahko uporabi GPS za ugotavljanje mesta nahajanja"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:104
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:105
msgid "Whether Empathy can use the GPS to guess the location."
msgstr "Ali naj program Empathy za pridobivanje mesta nahajanja uporablja GPS."
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:105
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:106
msgid "Empathy should reduce the location's accuracy"
msgstr "Program Empathy naj zmanjÅ¡a natanÄnost doloÄevanja nahajanja"
-#: ../data/org.gnome.Empathy.gschema.xml.in.h:106
+#: ../data/org.gnome.Empathy.gschema.xml.in.h:107
msgid "Whether Empathy should reduce the location's accuracy for privacy reasons."
msgstr "Ali naj program Empathy zaradi zasebnosti zmanjÅ¡uje natanÄnost položaja."
@@ -518,19 +519,19 @@ msgstr "Izbrana datoteka ni obiÄajna datoteka"
msgid "The selected file is empty"
msgstr "Izbrana datoteka je prazna"
-#: ../libempathy/empathy-message.c:415
+#: ../libempathy/empathy-message.c:407
#: ../src/empathy-call-observer.c:129
#, c-format
msgid "Missed call from %s"
msgstr "Zgrešen klic od %s"
#. Translators: this is an outgoing call, e.g. 'Called Alice'
-#: ../libempathy/empathy-message.c:419
+#: ../libempathy/empathy-message.c:411
#, c-format
msgid "Called %s"
msgstr "Klicanje uporabnika %s"
-#: ../libempathy/empathy-message.c:422
+#: ../libempathy/empathy-message.c:414
#, c-format
msgid "Call from %s"
msgstr "Klic uporabnika %s"
@@ -779,7 +780,7 @@ msgid "All accounts"
msgstr "Vsi raÄuni"
#: ../libempathy-gtk/empathy-account-widget.c:682
-#: ../src/empathy-import-widget.c:336
+#: ../src/empathy-import-widget.c:323
msgid "Account"
msgstr "RaÄun"
@@ -804,7 +805,7 @@ msgid "%s:"
msgstr "%s:"
#: ../libempathy-gtk/empathy-account-widget.c:1398
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
msgid "Username:"
msgstr "Uporabniško ime:"
@@ -816,11 +817,11 @@ msgstr "_Uveljavi"
msgid "L_og in"
msgstr "_Prijava"
-#: ../libempathy-gtk/empathy-account-widget.c:1812
+#: ../libempathy-gtk/empathy-account-widget.c:1810
msgid "This account already exists on the server"
msgstr "Ta raÄun na strežniku že obstaja"
-#: ../libempathy-gtk/empathy-account-widget.c:1816
+#: ../libempathy-gtk/empathy-account-widget.c:1814
msgid "Create a new account on the server"
msgstr "Ustvari nov raÄun na strežniku"
@@ -829,19 +830,19 @@ msgstr "Ustvari nov raÄun na strežniku"
#. * like: "MyUserName on freenode".
#. * You should reverse the order of these arguments if the
#. * server should come before the login id in your locale.
-#: ../libempathy-gtk/empathy-account-widget.c:2241
+#: ../libempathy-gtk/empathy-account-widget.c:2236
#, c-format
msgid "%1$s on %2$s"
msgstr "%1$s na %2$s"
#. To translators: The parameter is the protocol name. The resulting
#. * string will be something like: "Jabber Account"
-#: ../libempathy-gtk/empathy-account-widget.c:2267
+#: ../libempathy-gtk/empathy-account-widget.c:2262
#, c-format
msgid "%s Account"
msgstr "%s raÄun"
-#: ../libempathy-gtk/empathy-account-widget.c:2271
+#: ../libempathy-gtk/empathy-account-widget.c:2266
msgid "New account"
msgstr "Nov raÄun"
@@ -897,11 +898,11 @@ msgstr "_Strežnik:"
#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1
#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
msgid "Advanced"
msgstr "Napredno"
@@ -919,7 +920,7 @@ msgstr "Kakšno je vaše geslo AIM?"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:10
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "Remember Password"
msgstr "Zapomni si geslo"
@@ -963,36 +964,32 @@ msgstr "Kakšen je vaš UIN ICQ?"
msgid "What is your ICQ password?"
msgstr "Kakšno je vaše geslo ICQ?"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:206
-#: ../libempathy-gtk/empathy-account-widget-sip.c:239
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "Samodejno"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:209
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:212
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:215
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:244
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "Vpiši se"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:249
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "Možnosti"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:252
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "Brez"
@@ -1021,43 +1018,45 @@ msgstr "Dodaj ..."
msgid "Remove"
msgstr "Odstrani"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6
+#. Translators: tooltip on a 'Go Up' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
msgid "Up"
msgstr "Navzgor"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7
+#. Translators: tooltip on a 'Go Down' button used to sort IRC servers by priority
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
msgid "Down"
msgstr "Navzdol"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
msgid "Servers"
msgstr "Strežniki"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
msgid "Most IRC servers don't need a password, so if you're not sure, don't enter a password."
msgstr "VeÄina strežnikov IRC ne zahteva gesla, zato ga, Äe niste prepriÄani, ne uporabite."
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:10
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
msgid "Nickname:"
msgstr "Vzdevek:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:11
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
msgid "Password:"
msgstr "Geslo:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:12
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:14
msgid "Quit message:"
msgstr "SporoÄilo konÄanja:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:13
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:15
msgid "Real name:"
msgstr "Pravo ime:"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:16
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:18
msgid "Which IRC network?"
msgstr "Katero IRC omrežje?"
-#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:17
+#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:19
msgid "What is your IRC nickname?"
msgstr "Kakšen je vaš IRC vzdevek?"
@@ -1073,7 +1072,7 @@ msgid ""
"Use <a href=\"http://www.facebook.com/username/\">this page</a> to choose a Facebook username if you don't have one."
msgstr ""
"To je vaÅ¡e uporabniÅ¡ko ime in ne obiÄajna Facebook prijava.\n"
-"V primeru, da ste facebook.com/<b>badger</b>, vnesite <b>badger</b>.\n"
+"V primeru da ste facebook.com/<b>badger</b>, vnesite <b>badger</b>.\n"
"Uporabite <a href=\"http://www.facebook.com/username/\">to stran</a> za izbor uporabniškega imena, v kolikor ga še nimate."
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6
@@ -1245,11 +1244,15 @@ msgstr "Prezri napake TLS"
msgid "Port:"
msgstr "Vrata:"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+msgid "Local IP Address:"
+msgstr "Krajevni naslov IP:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP login ID?"
msgstr "Kakšen je prijavni ID vaše SIP?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP account password?"
msgstr "Kakšno je vaše geslo SIP?"
@@ -1335,194 +1338,194 @@ msgstr "Klic v sili ni podprt s tem protokolom"
msgid "You don't have enough credit in order to place this call"
msgstr "Na raÄunu ni dovolj visokega zneska za vzpostavitev klica"
-#: ../libempathy-gtk/empathy-chat.c:729
+#: ../libempathy-gtk/empathy-chat.c:727
msgid "Failed to open private chat"
msgstr "Napaka med odpiranjem zasebnega klepeta"
-#: ../libempathy-gtk/empathy-chat.c:787
+#: ../libempathy-gtk/empathy-chat.c:785
msgid "Topic not supported on this conversation"
msgstr "Tema ni podprta pri tem pogovoru"
-#: ../libempathy-gtk/empathy-chat.c:793
+#: ../libempathy-gtk/empathy-chat.c:791
msgid "You are not allowed to change the topic"
msgstr "Za spreminjanje teme nimate ustreznih dovoljenj."
-#: ../libempathy-gtk/empathy-chat.c:992
+#: ../libempathy-gtk/empathy-chat.c:990
#, c-format
msgid "“%s†is not a valid contact ID"
msgstr "“%s†ni veljaven ID stika"
-#: ../libempathy-gtk/empathy-chat.c:1087
+#: ../libempathy-gtk/empathy-chat.c:1085
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear: poÄisti vsa sporoÄila trenutnega pogovora"
-#: ../libempathy-gtk/empathy-chat.c:1090
+#: ../libempathy-gtk/empathy-chat.c:1088
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <tema>: doloÄi temo trenutnega pogovora"
-#: ../libempathy-gtk/empathy-chat.c:1093
+#: ../libempathy-gtk/empathy-chat.c:1091
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <ID klepetalnice>: pridruževanje novi klepetalnici"
-#: ../libempathy-gtk/empathy-chat.c:1096
+#: ../libempathy-gtk/empathy-chat.c:1094
msgid "/j <chat room ID>: join a new chat room"
msgstr "/j <ID klepetalnice>: pridruži se novi klepetalnici"
-#: ../libempathy-gtk/empathy-chat.c:1100
+#: ../libempathy-gtk/empathy-chat.c:1098
msgid "/part [<chat room ID>] [<reason>]: leave the chat room, by default the current one"
msgstr "/part [<ID klepetalnice>] [<razlog>]: zapusti klepetalnico, privzeto je to trenutna klepetalnica"
-#: ../libempathy-gtk/empathy-chat.c:1104
+#: ../libempathy-gtk/empathy-chat.c:1102
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <ID stika> [<sporoÄilo>]: odpre zasebni klepet"
-#: ../libempathy-gtk/empathy-chat.c:1107
+#: ../libempathy-gtk/empathy-chat.c:1105
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <ID stika> <sporoÄilo>: odpre zasebni klepet"
-#: ../libempathy-gtk/empathy-chat.c:1110
+#: ../libempathy-gtk/empathy-chat.c:1108
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <vzdevek>: spremeni vaš vzdevek na trenutnem strežniku"
-#: ../libempathy-gtk/empathy-chat.c:1113
+#: ../libempathy-gtk/empathy-chat.c:1111
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <sporoÄilo>: poÅ¡lje sporoÄilo DEJANJA v trenutni pogovor"
-#: ../libempathy-gtk/empathy-chat.c:1116
+#: ../libempathy-gtk/empathy-chat.c:1114
msgid "/say <message>: send <message> to the current conversation. This is used to send a message starting with a '/'. For example: \"/say /join is used to join a new chat room\""
msgstr "/say <sporoÄilo>: poÅ¡lje <sporoÄilo> v trenutni pogovor. Možnost se uporablja za poÅ¡iljanje sporoÄila, ki se zaÄne z '/'. Primer: \"/say /join se uporablja za pridruževanje novi klepetalnici\""
-#: ../libempathy-gtk/empathy-chat.c:1121
+#: ../libempathy-gtk/empathy-chat.c:1119
msgid "/whois <contact ID>: display information about a contact"
msgstr "/whois <ID stika>: pokaže podrobnosti stika"
-#: ../libempathy-gtk/empathy-chat.c:1124
+#: ../libempathy-gtk/empathy-chat.c:1122
msgid "/help [<command>]: show all supported commands. If <command> is defined, show its usage."
msgstr "/help [<ukaz>], pokaže vse podprte ukaze in njihov naÄin uporabe."
-#: ../libempathy-gtk/empathy-chat.c:1143
+#: ../libempathy-gtk/empathy-chat.c:1141
#, c-format
msgid "Usage: %s"
msgstr "Uporaba: %s"
-#: ../libempathy-gtk/empathy-chat.c:1188
+#: ../libempathy-gtk/empathy-chat.c:1186
msgid "Unknown command"
msgstr "Neznan ukaz"
-#: ../libempathy-gtk/empathy-chat.c:1314
+#: ../libempathy-gtk/empathy-chat.c:1312
msgid "Unknown command; see /help for the available commands"
msgstr "Neznan ukaz, za veÄ si vpiÅ¡ite /help"
-#: ../libempathy-gtk/empathy-chat.c:1565
+#: ../libempathy-gtk/empathy-chat.c:1563
msgid "insufficient balance to send message"
msgstr "nezadostno stanje na raÄunu za poÅ¡iljanje sporoÄil"
-#: ../libempathy-gtk/empathy-chat.c:1569
-#: ../libempathy-gtk/empathy-chat.c:1583
-#: ../libempathy-gtk/empathy-chat.c:1646
+#: ../libempathy-gtk/empathy-chat.c:1567
+#: ../libempathy-gtk/empathy-chat.c:1581
+#: ../libempathy-gtk/empathy-chat.c:1644
#, c-format
msgid "Error sending message '%s': %s"
msgstr "Napaka med poÅ¡iljanjem sporoÄila '%s': %s"
-#: ../libempathy-gtk/empathy-chat.c:1571
-#: ../libempathy-gtk/empathy-chat.c:1588
-#: ../libempathy-gtk/empathy-chat.c:1650
+#: ../libempathy-gtk/empathy-chat.c:1569
+#: ../libempathy-gtk/empathy-chat.c:1586
+#: ../libempathy-gtk/empathy-chat.c:1648
#, c-format
msgid "Error sending message: %s"
msgstr "Napaka med poÅ¡iljanjem sporoÄila: %s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1577
+#: ../libempathy-gtk/empathy-chat.c:1575
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr "Nezadostno stanje na raÄuni za poÅ¡iljanje sporoÄila. <a href='%s'>PoviÅ¡aj</a>."
-#: ../libempathy-gtk/empathy-chat.c:1617
+#: ../libempathy-gtk/empathy-chat.c:1615
msgid "not capable"
msgstr "ni mogoÄe"
-#: ../libempathy-gtk/empathy-chat.c:1624
+#: ../libempathy-gtk/empathy-chat.c:1622
msgid "offline"
msgstr "brez povezave"
-#: ../libempathy-gtk/empathy-chat.c:1627
+#: ../libempathy-gtk/empathy-chat.c:1625
msgid "invalid contact"
msgstr "neveljaven stik"
-#: ../libempathy-gtk/empathy-chat.c:1630
+#: ../libempathy-gtk/empathy-chat.c:1628
msgid "permission denied"
msgstr "ni dovoljenja"
-#: ../libempathy-gtk/empathy-chat.c:1633
+#: ../libempathy-gtk/empathy-chat.c:1631
msgid "too long message"
msgstr "predolgo sporoÄilo"
-#: ../libempathy-gtk/empathy-chat.c:1636
+#: ../libempathy-gtk/empathy-chat.c:1634
msgid "not implemented"
msgstr "ni del programa"
-#: ../libempathy-gtk/empathy-chat.c:1640
+#: ../libempathy-gtk/empathy-chat.c:1638
msgid "unknown"
msgstr "neznano"
-#: ../libempathy-gtk/empathy-chat.c:1707
-#: ../src/empathy-chat-window.c:920
+#: ../libempathy-gtk/empathy-chat.c:1705
+#: ../src/empathy-chat-window.c:919
msgid "Topic:"
msgstr "Tema:"
-#: ../libempathy-gtk/empathy-chat.c:1722
+#: ../libempathy-gtk/empathy-chat.c:1720
#, c-format
msgid "Topic set to: %s"
msgstr "Tema je doloÄena na: %s"
-#: ../libempathy-gtk/empathy-chat.c:1724
+#: ../libempathy-gtk/empathy-chat.c:1722
#, c-format
msgid "Topic set by %s to: %s"
msgstr "%s doloÄa vsebino: %s"
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1729
+#: ../libempathy-gtk/empathy-chat.c:1727
msgid "No topic defined"
msgstr "Ni doloÄene teme"
-#: ../libempathy-gtk/empathy-chat.c:2245
+#: ../libempathy-gtk/empathy-chat.c:2243
msgid "(No Suggestions)"
msgstr "(Ni predlogov)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2313
+#: ../libempathy-gtk/empathy-chat.c:2311
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "Dodaj '%s' v slovar"
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2350
+#: ../libempathy-gtk/empathy-chat.c:2348
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "Dodaj '%s' v slovar %s"
-#: ../libempathy-gtk/empathy-chat.c:2420
+#: ../libempathy-gtk/empathy-chat.c:2418
msgid "Insert Smiley"
msgstr "Vstavi smeška"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2438
+#: ../libempathy-gtk/empathy-chat.c:2436
#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "_Pošlji"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2495
+#: ../libempathy-gtk/empathy-chat.c:2493
msgid "_Spelling Suggestions"
msgstr "Predlogi Är_kovalnika"
-#: ../libempathy-gtk/empathy-chat.c:2584
+#: ../libempathy-gtk/empathy-chat.c:2582
msgid "Failed to retrieve recent logs"
msgstr "Napaka med pridobivanjem nedavnih dnevnikov"
-#: ../libempathy-gtk/empathy-chat.c:2723
+#: ../libempathy-gtk/empathy-chat.c:2721
#, c-format
msgid "%s has disconnected"
msgstr "%s je prekinil povezavo"
@@ -1530,12 +1533,12 @@ msgstr "%s je prekinil povezavo"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2730
+#: ../libempathy-gtk/empathy-chat.c:2728
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "%2$s je izgnal %1$s"
-#: ../libempathy-gtk/empathy-chat.c:2733
+#: ../libempathy-gtk/empathy-chat.c:2731
#, c-format
msgid "%s was kicked"
msgstr "%s je bil izgnan"
@@ -1543,17 +1546,17 @@ msgstr "%s je bil izgnan"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2741
+#: ../libempathy-gtk/empathy-chat.c:2739
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "%2$s je izobÄil %1$s"
-#: ../libempathy-gtk/empathy-chat.c:2744
+#: ../libempathy-gtk/empathy-chat.c:2742
#, c-format
msgid "%s was banned"
msgstr "%s je izobÄen"
-#: ../libempathy-gtk/empathy-chat.c:2748
+#: ../libempathy-gtk/empathy-chat.c:2746
#, c-format
msgid "%s has left the room"
msgstr "%s je zapustil klepetalnico"
@@ -1563,17 +1566,17 @@ msgstr "%s je zapustil klepetalnico"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2757
+#: ../libempathy-gtk/empathy-chat.c:2755
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: ../libempathy-gtk/empathy-chat.c:2782
+#: ../libempathy-gtk/empathy-chat.c:2780
#, c-format
msgid "%s has joined the room"
msgstr "%s je vstopil v klepetalnico"
-#: ../libempathy-gtk/empathy-chat.c:2807
+#: ../libempathy-gtk/empathy-chat.c:2805
#, c-format
msgid "%s is now known as %s"
msgstr "%s je preimenovan v %s"
@@ -1581,58 +1584,58 @@ msgstr "%s je preimenovan v %s"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2994
+#: ../libempathy-gtk/empathy-chat.c:2992
#: ../src/empathy-streamed-media-window.c:1888
#: ../src/empathy-event-manager.c:1279
-#: ../src/empathy-call-window.c:1502
-#: ../src/empathy-call-window.c:1552
-#: ../src/empathy-call-window.c:2590
+#: ../src/empathy-call-window.c:1466
+#: ../src/empathy-call-window.c:1516
+#: ../src/empathy-call-window.c:2562
msgid "Disconnected"
msgstr "Prekinjena povezava"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3658
+#: ../libempathy-gtk/empathy-chat.c:3656
msgid "Would you like to store this password?"
msgstr "Ali želite shraniti geslo?"
-#: ../libempathy-gtk/empathy-chat.c:3664
+#: ../libempathy-gtk/empathy-chat.c:3662
msgid "Remember"
msgstr "Zapomni si"
-#: ../libempathy-gtk/empathy-chat.c:3674
+#: ../libempathy-gtk/empathy-chat.c:3672
msgid "Not now"
msgstr "Ne zdaj"
-#: ../libempathy-gtk/empathy-chat.c:3718
+#: ../libempathy-gtk/empathy-chat.c:3716
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "Poskusi znova"
-#: ../libempathy-gtk/empathy-chat.c:3722
+#: ../libempathy-gtk/empathy-chat.c:3720
msgid "Wrong password; please try again:"
msgstr "NapaÄno geslo; poskusite znova:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3852
+#: ../libempathy-gtk/empathy-chat.c:3850
msgid "This room is protected by a password:"
msgstr "Klepetalnica je zaÅ¡Äitena z geslom:"
-#: ../libempathy-gtk/empathy-chat.c:3879
+#: ../libempathy-gtk/empathy-chat.c:3877
msgid "Join"
msgstr "Pridruži se"
-#: ../libempathy-gtk/empathy-chat.c:4071
+#: ../libempathy-gtk/empathy-chat.c:4069
#: ../src/empathy-event-manager.c:1300
msgid "Connected"
msgstr "Povezano"
-#: ../libempathy-gtk/empathy-chat.c:4126
+#: ../libempathy-gtk/empathy-chat.c:4124
msgid "Conversation"
msgstr "Pogovor"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4131
+#: ../libempathy-gtk/empathy-chat.c:4129
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
@@ -1663,7 +1666,7 @@ msgstr "Uredi blokirane stike"
#. Account and Identifier
#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:506
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:503
#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
#: ../libempathy-gtk/empathy-individual-widget.c:1474
#: ../src/empathy-chatrooms-window.ui.h:2
@@ -1737,157 +1740,157 @@ msgid "Decide _Later"
msgstr "OdloÄi se _kasneje"
#. Title
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:499
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:496
msgid "Search contacts"
msgstr "Iskanje stikov"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:529
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:526
msgid "Search: "
msgstr "PoiÅ¡Äi:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:587
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:584
msgid "_Add Contact"
msgstr "_Dodaj stik"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:602
msgid "No contacts found"
msgstr "Ni najdenih stikov."
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:621
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:618
msgid "Your message introducing yourself:"
msgstr "Predstavitveno sporoÄilo:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:629
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:626
msgid "Please let me see when you're online. Thanks!"
-msgstr "Želel bi videti, kdaj ste na zvezi. Hvala!"
+msgstr "Želel bi videti, kdaj ste prisotni v klepetu. Hvala!"
-#: ../libempathy-gtk/empathy-contact-widget.c:567
+#: ../libempathy-gtk/empathy-contact-widget.c:566
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "Kanali:"
-#: ../libempathy-gtk/empathy-contact-widget.c:747
+#: ../libempathy-gtk/empathy-contact-widget.c:746
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "ISO oznaka države:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:748
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "Država:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:750
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "Okraj:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:752
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "Mesto:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:754
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "PodroÄje:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:756
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "Poštna številka:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:758
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "Ulica:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:760
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "Stavba:"
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:762
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "Nadstropje:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:764
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "Klepetalnica:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:766
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "Besedilo:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:768
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "Opis:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:770
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "URI:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:772
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "Raven natanÄnosti:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:774
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "Napaka:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:776
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "Napaka navpiÄno (v metrih):"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:778
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "Napaka vodoravno (v metrih):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:780
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "Hitrost:"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:782
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "Smer:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:784
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "Hitrost dviganja:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:786
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "ZadnjiÄ posodobljeno:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:788
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "Zemljepisna dolžina:"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:790
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "Zemljepisna Å¡irina:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:792
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "Nadmorska višina:"
-#: ../libempathy-gtk/empathy-contact-widget.c:846
-#: ../libempathy-gtk/empathy-contact-widget.c:861
+#: ../libempathy-gtk/empathy-contact-widget.c:845
+#: ../libempathy-gtk/empathy-contact-widget.c:860
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
#: ../src/empathy-preferences.ui.h:35
@@ -1895,32 +1898,32 @@ msgid "Location"
msgstr "Mesto"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:862
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s, %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:915
+#: ../libempathy-gtk/empathy-contact-widget.c:914
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "%e.%B %Y ob %R UTC"
-#: ../libempathy-gtk/empathy-contact-widget.c:997
+#: ../libempathy-gtk/empathy-contact-widget.c:996
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "Shrani podobo"
-#: ../libempathy-gtk/empathy-contact-widget.c:1053
+#: ../libempathy-gtk/empathy-contact-widget.c:1052
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "Ni mogoÄe shraniti podobe"
-#: ../libempathy-gtk/empathy-contact-widget.c:1444
+#: ../libempathy-gtk/empathy-contact-widget.c:1454
msgid "Personal Details"
msgstr "Osebne podrobnosti"
-#: ../libempathy-gtk/empathy-contact-widget.c:1447
+#: ../libempathy-gtk/empathy-contact-widget.c:1457
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
@@ -2029,25 +2032,25 @@ msgstr "RazliÄica:"
msgid "Client:"
msgstr "Odjemalec:"
-#: ../libempathy-gtk/empathy-groups-widget.c:331
+#: ../libempathy-gtk/empathy-groups-widget.c:327
msgid "Groups"
msgstr "Skupine"
-#: ../libempathy-gtk/empathy-groups-widget.c:343
+#: ../libempathy-gtk/empathy-groups-widget.c:339
msgid "Select the groups you want this contact to appear in. Note that you can select more than one group or no groups."
msgstr "Izbor skupin, ki jim stik pripada. Izbrati je mogoÄe eno ali veÄ skupin, lahko pa tudi nobene."
-#: ../libempathy-gtk/empathy-groups-widget.c:362
+#: ../libempathy-gtk/empathy-groups-widget.c:358
msgid "_Add Group"
msgstr "_Dodaj skupino"
-#: ../libempathy-gtk/empathy-groups-widget.c:397
+#: ../libempathy-gtk/empathy-groups-widget.c:393
msgctxt "verb in a column header displaying group names"
msgid "Select"
msgstr "Izbor"
-#: ../libempathy-gtk/empathy-groups-widget.c:407
-#: ../src/empathy-roster-window.c:1970
+#: ../libempathy-gtk/empathy-groups-widget.c:403
+#: ../src/empathy-roster-window.c:1969
msgid "Group"
msgstr "Skupina"
@@ -2079,142 +2082,147 @@ msgstr "Povezani stiki"
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:173
+#: ../libempathy-gtk/empathy-individual-menu.c:172
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:345
+#: ../libempathy-gtk/empathy-individual-menu.c:344
msgid "Select account to use to place the call"
msgstr "Izbor raÄuna za klicanje"
#. translators: Call is a noun. This string is used in the window
#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:349
+#: ../libempathy-gtk/empathy-individual-menu.c:348
#: ../libempathy-gtk/empathy-log-window.ui.h:6
#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:18
msgid "Call"
msgstr "KliÄi"
-#: ../libempathy-gtk/empathy-individual-menu.c:414
+#: ../libempathy-gtk/empathy-individual-menu.c:413
msgid "Mobile"
msgstr "Mobilni telefon"
-#: ../libempathy-gtk/empathy-individual-menu.c:416
+#: ../libempathy-gtk/empathy-individual-menu.c:415
msgid "Work"
msgstr "Delo"
-#: ../libempathy-gtk/empathy-individual-menu.c:418
+#: ../libempathy-gtk/empathy-individual-menu.c:417
msgid "HOME"
msgstr "DomaÄa mapa"
-#: ../libempathy-gtk/empathy-individual-menu.c:659
+#: ../libempathy-gtk/empathy-individual-menu.c:658
msgid "_Block Contact"
msgstr "_Blokiraj stik"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1018
+#: ../libempathy-gtk/empathy-individual-menu.c:1017
#: ../libempathy-gtk/empathy-new-message-dialog.c:319
#: ../src/empathy-roster-window-menubar.ui.h:1
msgid "_Chat"
msgstr "_Klepet"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1053
+#: ../libempathy-gtk/empathy-individual-menu.c:1052
#: ../libempathy-gtk/empathy-new-message-dialog.c:313
msgid "_SMS"
msgstr "_SMS"
-#: ../libempathy-gtk/empathy-individual-menu.c:1086
+#: ../libempathy-gtk/empathy-individual-menu.c:1085
msgctxt "menu item"
msgid "_Audio Call"
msgstr "_ZvoÄni klic"
-#: ../libempathy-gtk/empathy-individual-menu.c:1119
+#: ../libempathy-gtk/empathy-individual-menu.c:1118
msgctxt "menu item"
msgid "_Video Call"
msgstr "_Video klic"
-#: ../libempathy-gtk/empathy-individual-menu.c:1160
+#: ../libempathy-gtk/empathy-individual-menu.c:1159
#: ../src/empathy-roster-window-menubar.ui.h:4
msgid "_Previous Conversations"
msgstr "Predhodni po_govori"
-#: ../libempathy-gtk/empathy-individual-menu.c:1189
+#: ../libempathy-gtk/empathy-individual-menu.c:1188
msgid "Send File"
msgstr "Pošlji datoteko"
-#: ../libempathy-gtk/empathy-individual-menu.c:1219
+#: ../libempathy-gtk/empathy-individual-menu.c:1218
msgid "Share My Desktop"
msgstr "Souporaba namizja"
-#: ../libempathy-gtk/empathy-individual-menu.c:1245
+#: ../libempathy-gtk/empathy-individual-menu.c:1244
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "Priljubljeno"
-#: ../libempathy-gtk/empathy-individual-menu.c:1264
+#: ../libempathy-gtk/empathy-individual-menu.c:1263
msgid "gnome-contacts not installed"
msgstr "Paket gnome-contacts ni nameÅ¡Äen"
-#: ../libempathy-gtk/empathy-individual-menu.c:1267
+#: ../libempathy-gtk/empathy-individual-menu.c:1266
msgid "Please install gnome-contacts to access contacts details."
msgstr "Namestiti je treba paket gnome-contacts za dostop do podrobnosti stikov."
-#: ../libempathy-gtk/empathy-individual-menu.c:1398
+#: ../libempathy-gtk/empathy-individual-menu.c:1397
msgid "Infor_mation"
msgstr "_Podrobnosti"
-#: ../libempathy-gtk/empathy-individual-menu.c:1447
+#: ../libempathy-gtk/empathy-individual-menu.c:1446
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "_Uredi"
-#: ../libempathy-gtk/empathy-individual-menu.c:1564
-#: ../src/empathy-chat-window.c:1192
+#. send invitation
+#: ../libempathy-gtk/empathy-individual-menu.c:1562
+#: ../src/empathy-chat-window.c:1190
msgid "Inviting you to this room"
msgstr "Vabila v klepetalnico"
-#: ../libempathy-gtk/empathy-individual-menu.c:1610
+#: ../libempathy-gtk/empathy-individual-menu.c:1608
msgid "_Invite to Chat Room"
msgstr "_Povabi v klepetalnico"
-#: ../libempathy-gtk/empathy-individual-menu.c:1806
+#: ../libempathy-gtk/empathy-individual-menu.c:1804
#: ../src/empathy-roster-window-menubar.ui.h:5
msgid "_Add Contact…"
msgstr "_Dodaj stik ..."
-#: ../libempathy-gtk/empathy-individual-view.c:2304
+#: ../libempathy-gtk/empathy-individual-view.c:2364
msgid "Delete and _Block"
msgstr "Izbriši in _blokiraj"
-#: ../libempathy-gtk/empathy-individual-view.c:2339
+#: ../libempathy-gtk/empathy-individual-view.c:2399
#, c-format
msgid "Do you really want to remove the group '%s'?"
msgstr "Ali zares želite odstraniti skupino '%s'?"
-#: ../libempathy-gtk/empathy-individual-view.c:2342
+#: ../libempathy-gtk/empathy-individual-view.c:2402
msgid "Removing group"
msgstr "Odstranjevanje skupine"
+#: ../libempathy-gtk/empathy-individual-view.c:2470
+msgid "Re_name"
+msgstr "P_reimenuj"
+
#. Remove
-#: ../libempathy-gtk/empathy-individual-view.c:2397
-#: ../libempathy-gtk/empathy-individual-view.c:2601
+#: ../libempathy-gtk/empathy-individual-view.c:2479
+#: ../libempathy-gtk/empathy-individual-view.c:2683
msgid "_Remove"
msgstr "_Odstrani"
-#: ../libempathy-gtk/empathy-individual-view.c:2474
+#: ../libempathy-gtk/empathy-individual-view.c:2556
#, c-format
msgid "Do you really want to remove the contact '%s'?"
msgstr "Ali zares želite odstraniti stik '%s'?"
-#: ../libempathy-gtk/empathy-individual-view.c:2483
+#: ../libempathy-gtk/empathy-individual-view.c:2565
#, c-format
msgid "Do you really want to remove the linked contact '%s'? Note that this will remove all the contacts which make up this linked contact."
msgstr "Ali res želite odstraniti povezan stik '%s'? S tem bo odstranjeni tudi vsi stiki, ki so opredeljeni kot povezani."
-#: ../libempathy-gtk/empathy-individual-view.c:2495
+#: ../libempathy-gtk/empathy-individual-view.c:2577
msgid "Removing contact"
msgstr "Odstranjevanje stika"
@@ -2260,48 +2268,48 @@ msgstr "nov strežnik"
msgid "SSL"
msgstr "SSL"
-#: ../libempathy-gtk/empathy-log-window.c:620
+#: ../libempathy-gtk/empathy-log-window.c:617
msgid "History"
msgstr "Zgodovina"
-#: ../libempathy-gtk/empathy-log-window.c:675
+#: ../libempathy-gtk/empathy-log-window.c:672
msgid "Show"
msgstr "Pokaži"
-#: ../libempathy-gtk/empathy-log-window.c:697
+#: ../libempathy-gtk/empathy-log-window.c:694
msgid "Search"
msgstr "PoiÅ¡Äi"
-#: ../libempathy-gtk/empathy-log-window.c:1148
+#: ../libempathy-gtk/empathy-log-window.c:1145
#, c-format
msgid "Chat in %s"
msgstr "Klepet v %s"
-#: ../libempathy-gtk/empathy-log-window.c:1150
+#: ../libempathy-gtk/empathy-log-window.c:1147
#, c-format
msgid "Chat with %s"
msgstr "Klepet s stikom %s"
-#: ../libempathy-gtk/empathy-log-window.c:1200
-#: ../libempathy-gtk/empathy-log-window.c:1347
+#: ../libempathy-gtk/empathy-log-window.c:1197
+#: ../libempathy-gtk/empathy-log-window.c:1341
msgctxt "A date with the time"
msgid "%A, %e %B %Y %X"
msgstr "%A, %d. %B %Y"
#. Translators: this is an emote: '* Danielle waves'
-#: ../libempathy-gtk/empathy-log-window.c:1289
+#: ../libempathy-gtk/empathy-log-window.c:1284
#, c-format
msgid "<i>* %s %s</i>"
msgstr "<i>* %s %s</i>"
#. Translators: this is a message: 'Danielle: hello'
#. * The string in bold is the sender's name
-#: ../libempathy-gtk/empathy-log-window.c:1295
+#: ../libempathy-gtk/empathy-log-window.c:1290
#, c-format
msgid "<b>%s:</b> %s"
msgstr "<b>%s:</b> %s"
-#: ../libempathy-gtk/empathy-log-window.c:1371
+#: ../libempathy-gtk/empathy-log-window.c:1365
#, c-format
msgid "%s second"
msgid_plural "%s seconds"
@@ -2310,7 +2318,7 @@ msgstr[1] "%s sekunda"
msgstr[2] "%s sekundi"
msgstr[3] "%s sekunde"
-#: ../libempathy-gtk/empathy-log-window.c:1378
+#: ../libempathy-gtk/empathy-log-window.c:1372
#, c-format
msgid "%s minute"
msgid_plural "%s minutes"
@@ -2319,80 +2327,80 @@ msgstr[1] "%s minuta"
msgstr[2] "%s minuti"
msgstr[3] "%s minute"
-#: ../libempathy-gtk/empathy-log-window.c:1386
+#: ../libempathy-gtk/empathy-log-window.c:1380
#, c-format
msgid "Call took %s, ended at %s"
msgstr "Klic zaÄet %s, konÄan %s"
-#: ../libempathy-gtk/empathy-log-window.c:1720
+#: ../libempathy-gtk/empathy-log-window.c:1711
msgid "Today"
msgstr "Danes"
-#: ../libempathy-gtk/empathy-log-window.c:1724
+#: ../libempathy-gtk/empathy-log-window.c:1715
msgid "Yesterday"
msgstr "VÄeraj"
#. Translators: A date such as '23 May 2010' (strftime format)
-#: ../libempathy-gtk/empathy-log-window.c:1739
+#: ../libempathy-gtk/empathy-log-window.c:1730
msgid "%e %B %Y"
msgstr "%e. %B %Y"
-#: ../libempathy-gtk/empathy-log-window.c:1827
-#: ../libempathy-gtk/empathy-log-window.c:3487
+#: ../libempathy-gtk/empathy-log-window.c:1834
+#: ../libempathy-gtk/empathy-log-window.c:3457
msgid "Anytime"
msgstr "Kadarkoli"
-#: ../libempathy-gtk/empathy-log-window.c:1916
-#: ../libempathy-gtk/empathy-log-window.c:2400
+#: ../libempathy-gtk/empathy-log-window.c:1933
+#: ../libempathy-gtk/empathy-log-window.c:2392
msgid "Anyone"
msgstr "Kdorkoli"
-#: ../libempathy-gtk/empathy-log-window.c:2713
+#: ../libempathy-gtk/empathy-log-window.c:2705
msgid "Who"
msgstr "Kdo"
-#: ../libempathy-gtk/empathy-log-window.c:2922
+#: ../libempathy-gtk/empathy-log-window.c:2914
msgid "When"
msgstr "Kdaj"
-#: ../libempathy-gtk/empathy-log-window.c:3038
+#: ../libempathy-gtk/empathy-log-window.c:3032
msgid "Anything"
msgstr "Karkoli"
-#: ../libempathy-gtk/empathy-log-window.c:3040
+#: ../libempathy-gtk/empathy-log-window.c:3034
msgid "Text chats"
msgstr "Besedilni klepet"
-#: ../libempathy-gtk/empathy-log-window.c:3042
+#: ../libempathy-gtk/empathy-log-window.c:3035
#: ../src/empathy-preferences.ui.h:25
msgid "Calls"
msgstr "Klici"
-#: ../libempathy-gtk/empathy-log-window.c:3047
+#: ../libempathy-gtk/empathy-log-window.c:3039
msgid "Incoming calls"
msgstr "Dohodni klici"
-#: ../libempathy-gtk/empathy-log-window.c:3048
+#: ../libempathy-gtk/empathy-log-window.c:3040
msgid "Outgoing calls"
msgstr "Odhodni klici"
-#: ../libempathy-gtk/empathy-log-window.c:3049
+#: ../libempathy-gtk/empathy-log-window.c:3041
msgid "Missed calls"
msgstr "Prezrti klici"
-#: ../libempathy-gtk/empathy-log-window.c:3071
+#: ../libempathy-gtk/empathy-log-window.c:3061
msgid "What"
msgstr "Kaj"
-#: ../libempathy-gtk/empathy-log-window.c:3780
+#: ../libempathy-gtk/empathy-log-window.c:3750
msgid "Are you sure you want to delete all logs of previous conversations?"
msgstr "Ali ste prepriÄani, da želite izbrisati vse podatke beležanja predhodnih pogovorov?"
-#: ../libempathy-gtk/empathy-log-window.c:3784
+#: ../libempathy-gtk/empathy-log-window.c:3754
msgid "Clear All"
msgstr "PoÄisti vse"
-#: ../libempathy-gtk/empathy-log-window.c:3791
+#: ../libempathy-gtk/empathy-log-window.c:3761
msgid "Delete from:"
msgstr "Izbriši iz:"
@@ -2524,30 +2532,40 @@ msgstr ""
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:167
-#: ../libempathy-gtk/empathy-presence-chooser.c:203
+#: ../libempathy-gtk/empathy-presence-chooser.c:166
+#: ../libempathy-gtk/empathy-presence-chooser.c:202
msgid "Custom Message…"
msgstr "SporoÄilo po meri ..."
-#: ../libempathy-gtk/empathy-presence-chooser.c:220
-#: ../libempathy-gtk/empathy-presence-chooser.c:222
+#: ../libempathy-gtk/empathy-presence-chooser.c:219
+#: ../libempathy-gtk/empathy-presence-chooser.c:221
msgid "Edit Custom Messages…"
msgstr "Uredi sporoÄilo po meri ..."
-#: ../libempathy-gtk/empathy-presence-chooser.c:345
+#: ../libempathy-gtk/empathy-presence-chooser.c:344
msgid "Click to remove this status as a favorite"
msgstr "S klikom odstranite stanje kot priljubljeno"
-#: ../libempathy-gtk/empathy-presence-chooser.c:354
+#: ../libempathy-gtk/empathy-presence-chooser.c:353
msgid "Click to make this status a favorite"
msgstr "S klikom naredite to stanje priljubljeno"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#. Translators: %s is a status message like 'At the pub' for example
+#: ../libempathy-gtk/empathy-presence-chooser.c:387
+#, c-format
+msgid ""
+"<b>Current message: %s</b>\n"
+"<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"
+msgstr ""
+"<b>Trenutno sporoÄilo: %s</b>\n"
+"<small><i>Pritisnite vnosno tipko za nastavitev novega sporoÄila, ali pa pritisnite tipko Esc za preklic dejanja.</i></small>"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:396
msgid "Set status"
msgstr "Nastavi stanje"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1147
msgid "Custom messages…"
msgstr "SporoÄila po meri ..."
@@ -2920,31 +2938,31 @@ msgstr "Izberi ..."
msgid "_Select"
msgstr "_Izberi"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:202
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:201
msgid "No error message"
msgstr "Ni sporoÄil o napakah"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:275
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:274
msgid "Instant Message (Empathy)"
msgstr "Hipno sporoÄanje (Empathy)"
-#: ../src/empathy.c:435
+#: ../src/empathy.c:425
msgid "Don't connect on startup"
msgstr "Brez samodejne povezave ob zagonu"
-#: ../src/empathy.c:439
+#: ../src/empathy.c:429
msgid "Don't display the contact list or any other dialogs on startup"
msgstr "Ne prikaži seznama stikov in drugih pogovornih oken ob zagonu"
-#: ../src/empathy.c:454
+#: ../src/empathy.c:444
msgid "- Empathy IM Client"
msgstr "- Empathy sporoÄilnik"
-#: ../src/empathy.c:641
+#: ../src/empathy.c:620
msgid "Error contacting the Account Manager"
msgstr "Napaka delovanja upravljalnika raÄunov"
-#: ../src/empathy.c:643
+#: ../src/empathy.c:622
#, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. The error was:\n"
@@ -2976,75 +2994,75 @@ msgstr "Matej UrbanÄiÄ <mateju@svn.gnome.org>"
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:72
+#: ../src/empathy-accounts-dialog.c:71
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "Obstajajo neshranjene spremembe vaÅ¡ega %s raÄuna."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:76
+#: ../src/empathy-accounts-dialog.c:75
msgid "Your new account has not been saved yet."
msgstr "Novi raÄun Å¡e ni bil shranjen."
-#: ../src/empathy-accounts-dialog.c:381
+#: ../src/empathy-accounts-dialog.c:404
#: ../src/empathy-streamed-media-window.c:759
-#: ../src/empathy-call-window.c:1289
+#: ../src/empathy-call-window.c:1267
msgid "Connecting…"
msgstr "Povezovanje ..."
-#: ../src/empathy-accounts-dialog.c:422
+#: ../src/empathy-accounts-dialog.c:445
#, c-format
msgid "Offline — %s"
msgstr "Brez povezave - %s"
-#: ../src/empathy-accounts-dialog.c:434
+#: ../src/empathy-accounts-dialog.c:457
#, c-format
msgid "Disconnected — %s"
msgstr "Prekinjena povezava - %s"
-#: ../src/empathy-accounts-dialog.c:445
+#: ../src/empathy-accounts-dialog.c:468
msgid "Offline — No Network Connection"
msgstr "Brez povezave - ni omrežne povezave"
-#: ../src/empathy-accounts-dialog.c:452
+#: ../src/empathy-accounts-dialog.c:475
msgid "Unknown Status"
msgstr "Neznano stanje"
-#: ../src/empathy-accounts-dialog.c:469
+#: ../src/empathy-accounts-dialog.c:492
msgid "This account has been disabled because it relies on an old, unsupported backend. Please install telepathy-haze and restart your session to migrate the account."
msgstr "Ta raÄun je onemogoÄen, ker deluje na starem, nepodprtem ozadnjem programu. Namestiti je treba paket telepathy-haze in ponovno zagnati sejo za prenos raÄuna."
-#: ../src/empathy-accounts-dialog.c:479
+#: ../src/empathy-accounts-dialog.c:502
msgid "Offline — Account Disabled"
msgstr "Brez povezave - raÄun je onemogoÄen"
-#: ../src/empathy-accounts-dialog.c:585
+#: ../src/empathy-accounts-dialog.c:608
msgid "Edit Connection Parameters"
msgstr "Uredi parametre povezave"
-#: ../src/empathy-accounts-dialog.c:750
+#: ../src/empathy-accounts-dialog.c:773
msgid "Failed to retrieve your personal information from the server."
msgstr "Pridobivanje osebnih podrobnosti s strežnika je spodletelo."
-#: ../src/empathy-accounts-dialog.c:756
+#: ../src/empathy-accounts-dialog.c:779
msgid "Go online to edit your personal information."
msgstr "Prijava v omrežje za urejanje osebnih podrobnosti."
-#: ../src/empathy-accounts-dialog.c:843
+#: ../src/empathy-accounts-dialog.c:866
msgid "_Edit Connection Parameters..."
msgstr "_Uredi parametre povezave ..."
-#: ../src/empathy-accounts-dialog.c:1339
+#: ../src/empathy-accounts-dialog.c:1362
#, c-format
msgid "Do you want to remove %s from your computer?"
msgstr "Ali želite odstraniti %s iz raÄunalnika?"
-#: ../src/empathy-accounts-dialog.c:1343
+#: ../src/empathy-accounts-dialog.c:1366
msgid "This will not remove your account on the server."
msgstr "To ne bo odstranilo vaÅ¡ega raÄuna s strežnika."
-#: ../src/empathy-accounts-dialog.c:1579
+#: ../src/empathy-accounts-dialog.c:1571
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3052,24 +3070,25 @@ msgstr ""
"Izbran bo nov raÄun, trenutne spremembe pa bodo izgubljene\n"
"Ali ste prepriÄani, da želite nadaljevati?"
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1755
-msgid "_Enable"
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1762
+msgid "_Enabled"
msgstr "_OmogoÄi"
-#: ../src/empathy-accounts-dialog.c:1756
-msgid "_Disable"
-msgstr "O_nemogoÄi"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1785
+msgid "Rename"
+msgstr "Preimenuj"
-#: ../src/empathy-accounts-dialog.c:2184
+#: ../src/empathy-accounts-dialog.c:2201
msgid "_Skip"
msgstr "Pre_skoÄi"
-#: ../src/empathy-accounts-dialog.c:2188
+#: ../src/empathy-accounts-dialog.c:2205
msgid "_Connect"
msgstr "_Poveži"
-#: ../src/empathy-accounts-dialog.c:2365
+#: ../src/empathy-accounts-dialog.c:2384
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3093,21 +3112,21 @@ msgstr "Za dodajanje novega raÄuna morate najprej namestiti zaledje za vsak pro
msgid "No protocol backends installed"
msgstr "Ni nameÅ¡Äenega ozadnjega protokola"
-#: ../src/empathy-auth-client.c:288
+#: ../src/empathy-auth-client.c:286
msgid " - Empathy authentication client"
msgstr "- Empathy odjemalec overitve"
-#: ../src/empathy-auth-client.c:304
+#: ../src/empathy-auth-client.c:302
msgid "Empathy authentication client"
msgstr "Empathy odjemalec overitve"
-#: ../src/empathy-av.c:118
-#: ../src/empathy-call.c:201
+#: ../src/empathy-av.c:115
+#: ../src/empathy-call.c:198
msgid "- Empathy Audio/Video Client"
msgstr "- Empathy odjemalec zvoka in slike"
-#: ../src/empathy-av.c:134
-#: ../src/empathy-call.c:223
+#: ../src/empathy-av.c:131
+#: ../src/empathy-call.c:220
msgid "Empathy Audio/Video Client"
msgstr "Empathy odjemalec zvoka in slike"
@@ -3150,33 +3169,33 @@ msgstr "Podrobnosti"
#. translators: Call is a noun and %s is the contact name. This string
#. * is used in the window title
#: ../src/empathy-streamed-media-window.c:1211
-#: ../src/empathy-call-window.c:1889
+#: ../src/empathy-call-window.c:1861
#, c-format
msgid "Call with %s"
msgstr "Klic z %s"
#: ../src/empathy-streamed-media-window.c:1444
-#: ../src/empathy-call-window.c:2133
+#: ../src/empathy-call-window.c:2105
msgid "The IP address as seen by the machine"
msgstr "Naslov IP kot ga zazna strojna oprema"
#: ../src/empathy-streamed-media-window.c:1446
-#: ../src/empathy-call-window.c:2135
+#: ../src/empathy-call-window.c:2107
msgid "The IP address as seen by a server on the Internet"
msgstr "Naslov IP kot ga zazna strežnik v omrežju"
#: ../src/empathy-streamed-media-window.c:1448
-#: ../src/empathy-call-window.c:2137
+#: ../src/empathy-call-window.c:2109
msgid "The IP address of the peer as seen by the other side"
msgstr "Naslov IP kot ga zazna uporabnik na drugi strani"
#: ../src/empathy-streamed-media-window.c:1450
-#: ../src/empathy-call-window.c:2139
+#: ../src/empathy-call-window.c:2111
msgid "The IP address of a relay server"
msgstr "Naslov IP posredovalnega strežnika"
#: ../src/empathy-streamed-media-window.c:1452
-#: ../src/empathy-call-window.c:2141
+#: ../src/empathy-call-window.c:2113
msgid "The IP address of the multicast group"
msgstr "Naslov IP skupine za veÄsmerno oddajanje"
@@ -3195,66 +3214,66 @@ msgid "Connected — %d:%02dm"
msgstr "Povezan - %d:%02d m"
#: ../src/empathy-streamed-media-window.c:2199
-#: ../src/empathy-call-window.c:2992
+#: ../src/empathy-call-window.c:2964
msgid "Technical Details"
msgstr "TehniÄne podrobnosti"
#: ../src/empathy-streamed-media-window.c:2237
-#: ../src/empathy-call-window.c:3031
+#: ../src/empathy-call-window.c:3003
#, c-format
msgid "%s's software does not understand any of the audio formats supported by your computer"
msgstr "Program stika %s ne prepozna zvoÄnih zapisov podprtih na vaÅ¡em sistemu"
#: ../src/empathy-streamed-media-window.c:2242
-#: ../src/empathy-call-window.c:3036
+#: ../src/empathy-call-window.c:3008
#, c-format
msgid "%s's software does not understand any of the video formats supported by your computer"
msgstr "Program stika %s ne prepozna video zapisov podprtih na vašem sistemu"
#: ../src/empathy-streamed-media-window.c:2248
-#: ../src/empathy-call-window.c:3042
+#: ../src/empathy-call-window.c:3014
#, c-format
msgid "Can't establish a connection to %s. One of you might be on a network that does not allow direct connections."
msgstr "Ni mogoÄe vzpostaviti povezave z %s. Morda je eden od odjemalcev je v omrežju, ki ne dovoli neposrednih povezav."
#: ../src/empathy-streamed-media-window.c:2254
-#: ../src/empathy-call-window.c:3048
+#: ../src/empathy-call-window.c:3020
msgid "There was a failure on the network"
msgstr "Prišlo je do napake na omrežju"
#: ../src/empathy-streamed-media-window.c:2258
-#: ../src/empathy-call-window.c:3052
+#: ../src/empathy-call-window.c:3024
msgid "The audio formats necessary for this call are not installed on your computer"
msgstr "ZvoÄni zapisi za ta klic niso nameÅ¡Äeni"
#: ../src/empathy-streamed-media-window.c:2261
-#: ../src/empathy-call-window.c:3055
+#: ../src/empathy-call-window.c:3027
msgid "The video formats necessary for this call are not installed on your computer"
msgstr "Video zapisi za ta klic niso nameÅ¡Äeni"
#: ../src/empathy-streamed-media-window.c:2271
-#: ../src/empathy-call-window.c:3067
+#: ../src/empathy-call-window.c:3039
#, c-format
msgid "Something unexpected happened in a Telepathy component. Please <a href=\"%s\">report this bug</a> and attach logs gathered from the 'Debug' window in the Help menu."
msgstr "PriÅ¡lo je do nepriÄakovane napake v delu programa Telepathy. PoÅ¡ljite <a href=\"%s\">poroÄilo o hroÅ¡Äu</a> in pripnite dnevnik razhroÅ¡Äevanja iz menija pomoÄi."
#: ../src/empathy-streamed-media-window.c:2279
-#: ../src/empathy-call-window.c:3076
+#: ../src/empathy-call-window.c:3048
msgid "There was a failure in the call engine"
msgstr "Prišlo je do napake v klicnem programniku"
#: ../src/empathy-streamed-media-window.c:2282
-#: ../src/empathy-call-window.c:3079
+#: ../src/empathy-call-window.c:3051
msgid "The end of the stream was reached"
msgstr "Dosežen je konec pretoka"
#: ../src/empathy-streamed-media-window.c:2322
-#: ../src/empathy-call-window.c:3119
+#: ../src/empathy-call-window.c:3091
msgid "Can't establish audio stream"
msgstr "Ni mogoÄe vzpostaviti zvoÄnega pretoka"
#: ../src/empathy-streamed-media-window.c:2332
-#: ../src/empathy-call-window.c:3129
+#: ../src/empathy-call-window.c:3101
msgid "Can't establish video stream"
msgstr "Ni mogoÄe vzpostaviti video pretoka"
@@ -3369,10 +3388,10 @@ msgstr "Kodek kodiranja:"
#: ../src/empathy-call-window.ui.h:28
#: ../src/empathy-streamed-media-window.ui.h:21
-#: ../src/empathy-call-window.c:2542
-#: ../src/empathy-call-window.c:2543
-#: ../src/empathy-call-window.c:2544
-#: ../src/empathy-call-window.c:2545
+#: ../src/empathy-call-window.c:2514
+#: ../src/empathy-call-window.c:2515
+#: ../src/empathy-call-window.c:2516
+#: ../src/empathy-call-window.c:2517
msgid "Unknown"
msgstr "Neznano"
@@ -3397,16 +3416,16 @@ msgstr "Krajevni odjemalec:"
msgid "Audio"
msgstr "Zvok"
-#: ../src/empathy-chat-window.c:289
+#: ../src/empathy-chat-window.c:288
msgid "Close this window?"
msgstr "Ali naj se okno zapre?"
-#: ../src/empathy-chat-window.c:294
+#: ../src/empathy-chat-window.c:293
#, c-format
msgid "Closing this window will leave %s. You will not receive any further messages until you rejoin it."
msgstr "Z zapiranjem tega okna se prekine tudi povezava s klepetalnico %s. Nadaljnja sporoÄila ne bodo prikazana do ponovne povezave."
-#: ../src/empathy-chat-window.c:305
+#: ../src/empathy-chat-window.c:304
#, c-format
msgid "Closing this window will leave a chat room. You will not receive any further messages until you rejoin it."
msgid_plural "Closing this window will leave %u chat rooms. You will not receive any further messages until you rejoin them."
@@ -3415,25 +3434,25 @@ msgstr[1] "Z zapiranjem tega okna se prekine tudi povezava s %u klepetalnico. Na
msgstr[2] "Z zapiranjem tega okna se prekine tudi povezava z %u klepetalnicama. Nadaljnja sporoÄila ne bodo prikazana do ponovne povezave."
msgstr[3] "Z zapiranjem tega okna se prekine tudi povezava s %u klepetalnicami. Nadaljnja sporoÄila ne bodo prikazana do ponovne povezave."
-#: ../src/empathy-chat-window.c:314
+#: ../src/empathy-chat-window.c:313
#, c-format
msgid "Leave %s?"
msgstr "Ali naj se prekine povezava s klepetalnico %s?"
-#: ../src/empathy-chat-window.c:315
+#: ../src/empathy-chat-window.c:314
msgid "You will not receive any further messages from this chat room until you rejoin it."
msgstr "Nadaljnja sporoÄila s te klepetalnice ne bodo prikazana do ponovne povezave."
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Close window"
msgstr "Zapri okno"
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Leave room"
msgstr "Zapusti klepetalnico"
-#: ../src/empathy-chat-window.c:640
-#: ../src/empathy-chat-window.c:660
+#: ../src/empathy-chat-window.c:639
+#: ../src/empathy-chat-window.c:659
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
@@ -3442,16 +3461,16 @@ msgstr[1] "%s (%d neprebrano)"
msgstr[2] "%s (%d neprebrani)"
msgstr[3] "%s (%d neprebrana)"
-#: ../src/empathy-chat-window.c:652
+#: ../src/empathy-chat-window.c:651
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
msgstr[0] "%s (in %u drugih)"
-msgstr[1] "%s (in %u drugo)"
-msgstr[2] "%s (in %u drugi)"
-msgstr[3] "%s (in %u druga)"
+msgstr[1] "%s (in %u drug)"
+msgstr[2] "%s (in %u druga)"
+msgstr[3] "%s (in %u drugi)"
-#: ../src/empathy-chat-window.c:668
+#: ../src/empathy-chat-window.c:667
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
@@ -3460,7 +3479,7 @@ msgstr[1] "%s (%d neprebrano od drugih)"
msgstr[2] "%s (%d neprebrani od drugih)"
msgstr[3] "%s (%d neprebrana od drugih)"
-#: ../src/empathy-chat-window.c:677
+#: ../src/empathy-chat-window.c:676
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
@@ -3469,11 +3488,11 @@ msgstr[1] "%s (%d neprebrano od vseh)"
msgstr[2] "%s (%d neprebrani od vseh)"
msgstr[3] "%s (%d neprebrana od vseh)"
-#: ../src/empathy-chat-window.c:892
+#: ../src/empathy-chat-window.c:891
msgid "SMS:"
msgstr "SMS:"
-#: ../src/empathy-chat-window.c:902
+#: ../src/empathy-chat-window.c:901
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
@@ -3482,7 +3501,7 @@ msgstr[1] "PoÅ¡iljanje %d sporoÄila"
msgstr[2] "PoÅ¡iljanje %d sporoÄil"
msgstr[3] "PoÅ¡iljanje %d sporoÄil"
-#: ../src/empathy-chat-window.c:924
+#: ../src/empathy-chat-window.c:923
msgid "Typing a message."
msgstr "Pisanje sporoÄila."
@@ -3568,7 +3587,7 @@ msgid "Incoming video call"
msgstr "Dohodni video klic"
#: ../src/empathy-event-manager.c:522
-#: ../src/empathy-call-window.c:1519
+#: ../src/empathy-call-window.c:1483
msgid "Incoming call"
msgstr "Dohodni klic"
@@ -3585,7 +3604,7 @@ msgstr "%s vas kliÄe. Ali se želite javiti?"
#: ../src/empathy-event-manager.c:530
#: ../src/empathy-event-manager.c:731
#: ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
+#: ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming call from %s"
msgstr "Dohodni klic od %s"
@@ -3605,7 +3624,7 @@ msgstr "_Odgovori z videom"
#: ../src/empathy-event-manager.c:731
#: ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
+#: ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming video call from %s"
msgstr "Dohodni video klic od %s"
@@ -3649,7 +3668,7 @@ msgid "Incoming file transfer from %s"
msgstr "PrihajajoÄ prenos datoteke od %s"
#: ../src/empathy-event-manager.c:1146
-#: ../src/empathy-roster-window.c:374
+#: ../src/empathy-roster-window.c:373
msgid "Password required"
msgstr "Zahtevano geslo"
@@ -3794,87 +3813,87 @@ msgid "Import Accounts"
msgstr "Uvozi raÄune"
#. Translators: this is the header of a treeview column
-#: ../src/empathy-import-widget.c:316
+#: ../src/empathy-import-widget.c:303
msgid "Import"
msgstr "Uvozi"
-#: ../src/empathy-import-widget.c:325
+#: ../src/empathy-import-widget.c:312
msgid "Protocol"
msgstr "Protokol"
-#: ../src/empathy-import-widget.c:349
+#: ../src/empathy-import-widget.c:336
msgid "Source"
msgstr "Vir"
-#: ../src/empathy-roster-window.c:391
+#: ../src/empathy-roster-window.c:390
msgid "Provide Password"
msgstr "Vpis gesla"
-#: ../src/empathy-roster-window.c:397
+#: ../src/empathy-roster-window.c:396
msgid "Disconnect"
msgstr "Prekini povezavo"
-#: ../src/empathy-roster-window.c:657
+#: ../src/empathy-roster-window.c:656
msgid "You need to setup an account to see contacts here."
msgstr "Ustrezno je treba nastaviti raÄun za prikaz stikov."
-#: ../src/empathy-roster-window.c:673
+#: ../src/empathy-roster-window.c:672
msgid "No match found"
msgstr "Ni najdenih zadetkov."
-#: ../src/empathy-roster-window.c:783
+#: ../src/empathy-roster-window.c:782
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr "RaÄunov %s ni mogoÄe uporabljati, dokler ni posodobljena programska oprema %s."
-#: ../src/empathy-roster-window.c:849
+#: ../src/empathy-roster-window.c:848
msgid "Update software..."
msgstr "Posodobitev programske opreme ..."
-#: ../src/empathy-roster-window.c:855
-#: ../src/empathy-roster-window.c:972
+#: ../src/empathy-roster-window.c:854
+#: ../src/empathy-roster-window.c:971
msgid "Close"
msgstr "Zapri"
-#: ../src/empathy-roster-window.c:960
+#: ../src/empathy-roster-window.c:959
msgid "Reconnect"
msgstr "Ponovno se poveži"
-#: ../src/empathy-roster-window.c:966
+#: ../src/empathy-roster-window.c:965
msgid "Edit Account"
msgstr "Uredi raÄun"
#. Translators: this string will be something like:
#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1110
+#: ../src/empathy-roster-window.c:1109
#, c-format
msgid "Top up %s (%s)..."
msgstr "Povišaj %s (%s) ..."
-#: ../src/empathy-roster-window.c:1156
+#: ../src/empathy-roster-window.c:1155
msgid "Top up account credit"
msgstr "PoviÅ¡aj znesek na raÄunu"
#. top up button
-#: ../src/empathy-roster-window.c:1228
+#: ../src/empathy-roster-window.c:1227
msgid "Top Up..."
msgstr "Povišaj ..."
-#: ../src/empathy-roster-window.c:1952
+#: ../src/empathy-roster-window.c:1951
msgid "Contact"
msgstr "Stik"
-#: ../src/empathy-roster-window.c:2150
+#: ../src/empathy-roster-window.c:2149
msgid "You need to enable one of your accounts to see contacts here."
msgstr "OmogoÄiti je treba enega izmed raÄunov za prikaz stikov."
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2158
+#: ../src/empathy-roster-window.c:2157
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr "OmogoÄiti je treba raÄun %s za prikaz stikov."
-#: ../src/empathy-roster-window.c:2460
+#: ../src/empathy-roster-window.c:2459
msgid "Contact List"
msgstr "Seznam stikov"
@@ -3890,7 +3909,7 @@ msgstr "_Nov pogovor ..."
#: ../src/empathy-roster-window-menubar.ui.h:3
#: ../src/empathy-status-icon.ui.h:3
msgid "New _Call…"
-msgstr "Nov _klic ..."
+msgstr "Nov k_lic ..."
#: ../src/empathy-roster-window-menubar.ui.h:6
msgid "_Search for Contacts…"
@@ -3902,11 +3921,11 @@ msgstr "Prenosi _datotek"
#: ../src/empathy-roster-window-menubar.ui.h:8
msgid "_Offline Contacts"
-msgstr "Nepri_sotni stiki"
+msgstr "_Neprisotni stiki"
#: ../src/empathy-roster-window-menubar.ui.h:9
msgid "Show P_rotocols"
-msgstr "Pokaži _protokole"
+msgstr "Pokaži p_rotokole"
#: ../src/empathy-roster-window-menubar.ui.h:10
msgid "Credit Balance"
@@ -3950,7 +3969,7 @@ msgstr "_ObiÄajna velikost"
#: ../src/empathy-roster-window-menubar.ui.h:22
msgid "_Compact Size"
-msgstr "_SkrÄen pogled"
+msgstr "S_krÄen pogled"
#: ../src/empathy-roster-window-menubar.ui.h:23
msgid "_Room"
@@ -3962,7 +3981,7 @@ msgstr "_Pridruži se"
#: ../src/empathy-roster-window-menubar.ui.h:25
msgid "Join _Favorites"
-msgstr "Pridruži se _priljubljenim"
+msgstr "Pridruži se p_riljubljenim"
#: ../src/empathy-roster-window-menubar.ui.h:26
msgid "Manage Favorites"
@@ -3978,7 +3997,7 @@ msgstr "ÄŒlani"
#. Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
#. yes/no, yes/no and a number.
-#: ../src/empathy-new-chatroom-dialog.c:637
+#: ../src/empathy-new-chatroom-dialog.c:636
#, c-format
msgid ""
"%s\n"
@@ -3991,21 +4010,21 @@ msgstr ""
"Zahtevano geslo: %s\n"
"ÄŒlani: %s"
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "Yes"
msgstr "Da"
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "No"
msgstr "Ne"
-#: ../src/empathy-new-chatroom-dialog.c:668
+#: ../src/empathy-new-chatroom-dialog.c:666
msgid "Could not start room listing"
msgstr "Seznama klepetalnic ni bilo mogoÄe zaÄeti"
-#: ../src/empathy-new-chatroom-dialog.c:678
+#: ../src/empathy-new-chatroom-dialog.c:676
msgid "Could not stop room listing"
msgstr "Seznama klepetalnic ni bilo mogoÄe dokonÄati"
@@ -4066,46 +4085,46 @@ msgid "Language"
msgstr "Jezik"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:726
+#: ../src/empathy-preferences.c:724
msgid "Juliet"
msgstr "Julija"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:733
+#: ../src/empathy-preferences.c:731
msgid "Romeo"
msgstr "Romeo"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:739
+#: ../src/empathy-preferences.c:737
msgid "O Romeo, Romeo, wherefore art thou Romeo?"
msgstr "O, Romeo, Romeo, zakaj li Romeo?!"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:743
+#: ../src/empathy-preferences.c:741
msgid "Deny thy father and refuse thy name;"
msgstr "Odreci se rodu, odvrzi ime,"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:746
+#: ../src/empathy-preferences.c:744
msgid "Or if thou wilt not, be but sworn my love"
msgstr "Äe ne, prisezi veÄno mi ljubezen,"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:749
+#: ../src/empathy-preferences.c:747
msgid "And I'll no longer be a Capulet."
msgstr "in dlje nisem Kapuletova."
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:752
+#: ../src/empathy-preferences.c:750
msgid "Shall I hear more, or shall I speak at this?"
msgstr "Al' bi poslušal še, al govoril? "
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:755
+#: ../src/empathy-preferences.c:753
msgid "Juliet has disconnected"
msgstr "Julija je prekinila povezavo."
-#: ../src/empathy-preferences.c:1159
+#: ../src/empathy-preferences.c:1157
msgid "Preferences"
msgstr "Možnosti"
@@ -4115,7 +4134,7 @@ msgstr "Pokaži _smeške kot slike"
#: ../src/empathy-preferences.ui.h:2
msgid "Show contact _list in rooms"
-msgstr "Pokaži _seznam stikov v klepetalnicah"
+msgstr "Pokaži s_eznam stikov v klepetalnicah"
#: ../src/empathy-preferences.ui.h:3
msgid "Appearance"
@@ -4127,11 +4146,11 @@ msgstr "ZaÄni klepet v:"
#: ../src/empathy-preferences.ui.h:5
msgid "new ta_bs"
-msgstr "novi _zavihki"
+msgstr "novih _zavihkih"
#: ../src/empathy-preferences.ui.h:6
msgid "new _windows"
-msgstr "nova _okna"
+msgstr "novih _oknih"
#: ../src/empathy-preferences.ui.h:7
msgid "Display incoming events in the notification area"
@@ -4159,7 +4178,7 @@ msgstr "_OmogoÄi obvestila v oblaÄkih"
#: ../src/empathy-preferences.ui.h:13
msgid "Disable notifications when _away or busy"
-msgstr "OnemogoÄi obvestila ob _odsotnosti ali zaposlenosti"
+msgstr "OnemogoÄi obvestila ob odsotnosti ali _zaposlenosti"
#: ../src/empathy-preferences.ui.h:14
msgid "Enable notifications when the _chat is not focused"
@@ -4199,7 +4218,7 @@ msgstr "Uporabi _podporo odpravljanja odmevov za izboljšanje kakovosti klica."
#: ../src/empathy-preferences.ui.h:23
msgid "Echo cancellation helps to make your voice sound clearer to the other person, but may cause problems on some computers. If you or the other person hear strange noises or glitches during calls, try turning echo cancellation off and restarting the call."
-msgstr "Odpravljanje odmevov omogoÄi ÄistejÅ¡i zvok glasu med klicanjem, vendar pa se lahko na nekaterih sistemih pojavijo težave. V primeru, da med pogovorom zasliÅ¡ite nenavadne zvoke ali Å¡ume, onemogoÄite odpravljanje odmevov in ponovno vzpostavite klic."
+msgstr "Odpravljanje odmevov omogoÄi ÄistejÅ¡i zvok glasu med klicanjem, vendar pa se lahko na nekaterih sistemih pojavijo težave. V primeru da med pogovorom zasliÅ¡ite nenavadne zvoke ali Å¡ume, onemogoÄite odpravljanje odmevov in ponovno vzpostavite klic."
#: ../src/empathy-preferences.ui.h:26
msgid "_Publish location to my contacts"
@@ -4330,11 +4349,6 @@ msgstr "Povezava odložiÅ¡Äa Pastebin"
msgid "Pastebin response"
msgstr "Odziv odložiÅ¡Äa Pastebin"
-#: ../src/empathy-debug-window.c:1680
-#, c-format
-msgid "%s"
-msgstr "%s"
-
#: ../src/empathy-debug-window.c:1683
msgid "Data too large for a single paste. Please save logs to file."
msgstr "PreveÄ je podatkov za enkratno lepljenje. Beleženje dnevnika je priporoÄljivo shraniti v datoteko."
@@ -4400,16 +4414,16 @@ msgstr "Raven"
msgid "The selected connection manager does not support the remote debugging extension."
msgstr "Izbrani upravljalnik povezav ne podpira razÅ¡iritve za oddaljeno razhroÅ¡Äevanje."
-#: ../src/empathy-invite-participant-dialog.c:202
-#: ../src/empathy-invite-participant-dialog.c:230
+#: ../src/empathy-invite-participant-dialog.c:200
+#: ../src/empathy-invite-participant-dialog.c:228
msgid "Invite Participant"
msgstr "Povabi udeležence"
-#: ../src/empathy-invite-participant-dialog.c:203
+#: ../src/empathy-invite-participant-dialog.c:201
msgid "Choose a contact to invite into the conversation:"
msgstr "Izbor stika za povabilo v pogovor:"
-#: ../src/empathy-invite-participant-dialog.c:226
+#: ../src/empathy-invite-participant-dialog.c:224
msgid "Invite"
msgstr "Povabi"
@@ -4433,7 +4447,7 @@ msgstr "<id-raÄuna>"
msgid "- Empathy Accounts"
msgstr "- Empathy raÄuni"
-#: ../src/empathy-accounts.c:231
+#: ../src/empathy-accounts.c:230
msgid "Empathy Accounts"
msgstr "Empathy raÄuni"
@@ -4445,47 +4459,47 @@ msgstr "Pokaži posebno storitev"
msgid "- Empathy Debugger"
msgstr "- razhroÅ¡Äevalnik Empathy"
-#: ../src/empathy-debugger.c:113
+#: ../src/empathy-debugger.c:112
msgid "Empathy Debugger"
msgstr "Empathy razhroÅ¡Äevalnik"
-#: ../src/empathy-chat.c:109
+#: ../src/empathy-chat.c:106
msgid "- Empathy Chat Client"
msgstr "- sporoÄilnik Empathy"
-#: ../src/empathy-notifications-approver.c:189
+#: ../src/empathy-notifications-approver.c:190
msgid "Respond"
msgstr "Odgovori"
-#: ../src/empathy-notifications-approver.c:203
-#: ../src/empathy-call-window.c:1529
+#: ../src/empathy-notifications-approver.c:204
+#: ../src/empathy-call-window.c:1493
msgid "Reject"
msgstr "Zavrni"
-#: ../src/empathy-notifications-approver.c:208
-#: ../src/empathy-notifications-approver.c:213
-#: ../src/empathy-call-window.c:1530
+#: ../src/empathy-notifications-approver.c:209
+#: ../src/empathy-notifications-approver.c:214
+#: ../src/empathy-call-window.c:1494
msgid "Answer"
msgstr "Odgovori"
-#: ../src/empathy-notifications-approver.c:213
+#: ../src/empathy-notifications-approver.c:214
msgid "Answer with video"
msgstr "Odgovori z videom"
-#: ../src/empathy-notifications-approver.c:221
-#: ../src/empathy-notifications-approver.c:231
+#: ../src/empathy-notifications-approver.c:222
+#: ../src/empathy-notifications-approver.c:232
msgid "Decline"
msgstr "Odkloni"
-#: ../src/empathy-notifications-approver.c:225
-#: ../src/empathy-notifications-approver.c:236
+#: ../src/empathy-notifications-approver.c:226
+#: ../src/empathy-notifications-approver.c:237
msgid "Accept"
msgstr "Sprejmi"
#. translators: the 'Provide' button is displayed in a notification
#. * bubble when Empathy is asking for an account password; clicking on it
#. * brings the password popup.
-#: ../src/empathy-notifications-approver.c:246
+#: ../src/empathy-notifications-approver.c:247
msgid "Provide"
msgstr "Zagotovi"
@@ -4496,39 +4510,39 @@ msgstr "%s je klical med drugim pogovorom."
#. Translators: this is an "Info" label. It should be as short
#. * as possible.
+#: ../src/empathy-call-window.c:1124
#: ../src/empathy-call-window.c:1140
-#: ../src/empathy-call-window.c:1162
msgid "i"
msgstr "i"
-#: ../src/empathy-call-window.c:2888
+#: ../src/empathy-call-window.c:2860
msgid "On hold"
msgstr "Zadržano"
-#: ../src/empathy-call-window.c:2891
+#: ../src/empathy-call-window.c:2863
msgid "Mute"
msgstr "Utišaj"
-#: ../src/empathy-call-window.c:2893
+#: ../src/empathy-call-window.c:2865
msgid "Duration"
msgstr "Trajanje"
#. Translators: 'status - minutes:seconds' the caller has been connected
-#: ../src/empathy-call-window.c:2896
+#: ../src/empathy-call-window.c:2868
#, c-format
msgid "%s — %d:%02dm"
msgstr "%s — %d:%02dm"
-#: ../src/empathy-call-window.c:3166
+#: ../src/empathy-call-window.c:3138
#, c-format
msgid "Your current balance is %s."
msgstr "Trenutno stanje je %s."
-#: ../src/empathy-call-window.c:3170
+#: ../src/empathy-call-window.c:3142
msgid "Sorry, you don’t have enough credit for that call."
msgstr "Na raÄunu ni dovolj visokega zneska za vzpostavitev klica."
-#: ../src/empathy-call-window.c:3172
+#: ../src/empathy-call-window.c:3144
msgid "Top Up"
msgstr "Povišaj"
@@ -4550,12 +4564,21 @@ msgstr "Uporabniki v bližini"
#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:150
msgid "Empathy can automatically discover and chat with the people connected on the same network as you. If you want to use this feature, please check that the details below are correct."
-msgstr "Program Empathy lahko samodejno odkrije in izmenjuje podatke z uporabniki v istem omrežju. V primeru, da želite uporabljati to možnost, preverite spodnje podatke."
+msgstr "Program Empathy lahko samodejno odkrije in izmenjuje podatke z uporabniki v istem omrežju. V primeru da želite uporabljati to možnost, preverite spodnje podatke."
#: ../libempathy-gtk/empathy-local-xmpp-assistant-widget.c:183
msgid "You can change these details later or disable this feature by choosing <span style=\"italic\">Edit → Accounts</span> in the Contact List."
msgstr "Te podrobnosti je mogoÄe spreminjati in onemogoÄiti tudi kasneje preko menija <span style=\"italic\">Uredi → RaÄuni</span> v seznamu stikov."
+#~ msgid "_Enable"
+#~ msgstr "_OmogoÄi"
+
+#~ msgid "_Disable"
+#~ msgstr "O_nemogoÄi"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
#~ msgid "Select contacts to link"
#~ msgstr "Izbor stikov za povezovanje"
@@ -4847,9 +4870,6 @@ msgstr "Te podrobnosti je mogoÄe spreminjati in onemogoÄiti tudi kasneje preko
#~ msgid "_For:"
#~ msgstr "_Za:"
-#~ msgid "_Enabled"
-#~ msgstr "_OmogoÄi"
-
#~ msgid "%s is now offline."
#~ msgstr "%s ni povezan."
diff --git a/po/te.po b/po/te.po
index 856eae7fd..b57cad211 100644
--- a/po/te.po
+++ b/po/te.po
@@ -1,20 +1,19 @@
# translation of empathy.master.te.po to Telugu
-# Copyright (C) 2011, 2012 Swecha localisation Team
+# Copyright (C) 2011, 2012 Swecha Telugu localisation Team <localization@swecha.net>
# This file is distributed under the same license as the empathy package.
#
-#
# Krishna Babu K <kkrothap@redhat.com>, 2009.2011
# Praveen Illa <mail2ipn@gmail.com>, 2011.
# Sasi Bhushan Boddepalli <Sasi@swecha.net>,2011, 2012
-# Naveen kandimala <naveen@swecha.net>, 2012
-# GVS.Giri (Swecha Team) <gvs.giri947@gmail.com>,2012, 2012.
+# Naveen kandimala(Swecha) <naveen@swecha.net>, 2012
+# GVS.Giri (Swecha Team) <gvs.giri947@gmail.com>,2012.
msgid ""
msgstr ""
"Project-Id-Version: empathy.master.te\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=empathy&keywords=I18N+L10N&component=General\n"
-"POT-Creation-Date: 2012-03-24 07:45+0000\n"
-"PO-Revision-Date: 2012-03-24 14:54+0530\n"
+"POT-Creation-Date: 2012-04-16 18:23+0000\n"
+"PO-Revision-Date: 2012-04-17 18:24+0530\n"
"Last-Translator: Sasi Bhushan Boddepalli <sasi@swecha.net>\n"
"Language-Team: Telugu <indlinux-telugu@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
@@ -42,7 +41,7 @@ msgstr "గూగà±à°²à± టాకà±, ఫేసà±â€Œà°¬à±à°•à±, MSN వం
#. Tweak the dialog
#: ../data/empathy-accounts.desktop.in.in.h:1
-#: ../src/empathy-accounts-dialog.c:2513
+#: ../src/empathy-accounts-dialog.c:2527
msgid "Messaging and VoIP Accounts"
msgstr "సందేశకమౠమరియౠVoIP ఖాతాలà±"
@@ -558,18 +557,18 @@ msgstr "à°Žà°‚à°šà±à°•à±à°¨à±à°¨ ఫైలౠసాధారణ ఫైలà±
msgid "The selected file is empty"
msgstr "à°Žà°‚à°šà±à°•à±à°¨à±à°¨ ఫైలౠఖాళీది"
-#: ../libempathy/empathy-message.c:415 ../src/empathy-call-observer.c:129
+#: ../libempathy/empathy-message.c:407 ../src/empathy-call-observer.c:129
#, c-format
msgid "Missed call from %s"
msgstr "%s à°¨à±à°‚à°¡à°¿ మిసà±à°¸à±à°¡à± కాలౠవచà±à°šà°¿à°‚ది"
#. Translators: this is an outgoing call, e.g. 'Called Alice'
-#: ../libempathy/empathy-message.c:419
+#: ../libempathy/empathy-message.c:411
#, c-format
msgid "Called %s"
msgstr "%s పిలవబడినది"
-#: ../libempathy/empathy-message.c:422
+#: ../libempathy/empathy-message.c:414
#, c-format
msgid "Call from %s"
msgstr "%s à°¨à±à°ªà°¿à°²à±à°µà±à°®à±"
@@ -801,7 +800,7 @@ msgid "All accounts"
msgstr "ఖాతాలౠఅనà±à°¨à°¿à°¯à±"
#: ../libempathy-gtk/empathy-account-widget.c:682
-#: ../src/empathy-import-widget.c:336
+#: ../src/empathy-import-widget.c:323
msgid "Account"
msgstr "ఖాతా"
@@ -838,11 +837,11 @@ msgstr "à°…à°¨à±à°µà°°à±à°¤à°¿à°‚à°šà± (_p)"
msgid "L_og in"
msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà± (_J)"
-#: ../libempathy-gtk/empathy-account-widget.c:1812
+#: ../libempathy-gtk/empathy-account-widget.c:1810
msgid "This account already exists on the server"
msgstr "సేవకమà±à°²à±‹ à°ˆ ఖాతా ఇంతకà±à°®à±à°‚దే ఉనà±à°¨à°¦à°¿"
-#: ../libempathy-gtk/empathy-account-widget.c:1816
+#: ../libempathy-gtk/empathy-account-widget.c:1814
msgid "Create a new account on the server"
msgstr "à°ˆ సేవకమౠపై à°’à°• కొతà±à°¤ ఖాతానౠసృషà±à°Ÿà°¿à°‚à°šà±"
@@ -851,19 +850,19 @@ msgstr "à°ˆ సేవకమౠపై à°’à°• కొతà±à°¤ ఖాతానà±
#. * like: "MyUserName on freenode".
#. * You should reverse the order of these arguments if the
#. * server should come before the login id in your locale.
-#: ../libempathy-gtk/empathy-account-widget.c:2241
+#: ../libempathy-gtk/empathy-account-widget.c:2236
#, c-format
msgid "%1$s on %2$s"
msgstr "%2$s పై %1$s"
#. To translators: The parameter is the protocol name. The resulting
#. * string will be something like: "Jabber Account"
-#: ../libempathy-gtk/empathy-account-widget.c:2267
+#: ../libempathy-gtk/empathy-account-widget.c:2262
#, c-format
msgid "%s Account"
msgstr "%s ఖాతా"
-#: ../libempathy-gtk/empathy-account-widget.c:2271
+#: ../libempathy-gtk/empathy-account-widget.c:2266
msgid "New account"
msgstr "కొతà±à°¤ ఖాతా"
@@ -923,7 +922,7 @@ msgstr "సేవకమౠ(_S):"
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:23
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9
msgid "Advanced"
msgstr "à°…à°§à±à°¨à°¾à°¤à°¨"
@@ -941,7 +940,7 @@ msgstr "మీ AIM సంకేతపదమౠà°à°®à°¿à°Ÿà°¿?"
#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:11
#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7
#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:10
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:25
msgid "Remember Password"
msgstr "సంకేతపదం à°—à±à°°à±à°¤à°¿à°‚à°šà±à°•à±Šà°¨à±"
@@ -985,36 +984,32 @@ msgstr "మీ ICQ UIN à°à°®à°¿à°Ÿà°¿?"
msgid "What is your ICQ password?"
msgstr "మీ ICQ సంకేతపదమౠà°à°®à°¿à°Ÿà°¿?"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:206
-#: ../libempathy-gtk/empathy-account-widget-sip.c:239
+#: ../libempathy-gtk/empathy-account-widget-sip.c:207
+#: ../libempathy-gtk/empathy-account-widget-sip.c:240
msgid "Auto"
msgstr "à°¸à±à°µà°¯à°‚"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:209
+#: ../libempathy-gtk/empathy-account-widget-sip.c:210
msgid "UDP"
msgstr "UDP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:212
+#: ../libempathy-gtk/empathy-account-widget-sip.c:213
msgid "TCP"
msgstr "TCP"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:215
+#: ../libempathy-gtk/empathy-account-widget-sip.c:216
msgid "TLS"
msgstr "TLS"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:244
+#: ../libempathy-gtk/empathy-account-widget-sip.c:245
msgid "Register"
msgstr "నమోదà±à°šà±‡à°¸à±à°•à±Šà°¨à±"
-#. translators: this string is very specific to SIP's internal; maybe
-#. * best to keep the English version.
-#: ../libempathy-gtk/empathy-account-widget-sip.c:249
+#: ../libempathy-gtk/empathy-account-widget-sip.c:250
msgid "Options"
msgstr "à°à°šà±à°›à°¿à°•à°¾à°²à±"
-#: ../libempathy-gtk/empathy-account-widget-sip.c:252
+#: ../libempathy-gtk/empathy-account-widget-sip.c:253
msgid "None"
msgstr "à°à°¦à±€à°•à°¾à°¦à±"
@@ -1275,11 +1270,15 @@ msgstr "TLS దోషాలనౠవిసà±à°®à°°à°¿à°‚à°šà±"
msgid "Port:"
msgstr "పోరà±à°Ÿà± (_P):"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:22
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:21
+msgid "Local IP Address:"
+msgstr "à°¸à±à°¥à°¾à°¨à°¿à°• IP à°šà°¿à°°à±à°¨à°¾à°®à°¾: "
+
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
msgid "What is your SIP login ID?"
msgstr "మీ SIP à°ªà±à°°à°µà±‡à°¶ à°à°¡à°¿ à°à°®à°¿à°Ÿà°¿?"
-#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:23
+#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:24
msgid "What is your SIP account password?"
msgstr "మీ SIP ఖాతా సంకేతపదం à°à°®à°¿à°Ÿà°¿?"
@@ -1365,63 +1364,63 @@ msgstr " à°…à°¤à±à°¯à°µà°¸à°° కాలà±à°¸à± à°ˆ నియమావళి à
msgid "You don't have enough credit in order to place this call"
msgstr "మీరౠసంభాషించà±à°Ÿà°•à± సరిపోయినంత రొకà±à°•à°®à± లేదà±"
-#: ../libempathy-gtk/empathy-chat.c:729
+#: ../libempathy-gtk/empathy-chat.c:727
msgid "Failed to open private chat"
msgstr "రహసà±à°¯ చాటà±â€Œà°¨à°¿ తెరà±à°šà±à°Ÿà°²à±‹ విఫలమైంది"
-#: ../libempathy-gtk/empathy-chat.c:787
+#: ../libempathy-gtk/empathy-chat.c:785
msgid "Topic not supported on this conversation"
msgstr "à°ˆ సంభాషణ పై విషయమౠసహకరించà±à°Ÿ లేదà±"
-#: ../libempathy-gtk/empathy-chat.c:793
+#: ../libempathy-gtk/empathy-chat.c:791
msgid "You are not allowed to change the topic"
msgstr "విషయమà±à°¨à± మారà±à°šà±à°Ÿà°•à± మీరౠఅనà±à°®à°¤à°¿à°‚చబడరà±"
-#: ../libempathy-gtk/empathy-chat.c:992
+#: ../libempathy-gtk/empathy-chat.c:990
#, c-format
msgid "“%s†is not a valid contact ID"
msgstr "“%s†అనేది చెలà±à°²à°¨à°¿ పరిచయపౠà°à°¡à°¿"
-#: ../libempathy-gtk/empathy-chat.c:1087
+#: ../libempathy-gtk/empathy-chat.c:1085
msgid "/clear: clear all messages from the current conversation"
msgstr "/clear: à°ªà±à°°à°¸à±à°¤à±à°¤ సంభాషణలోని à°…à°¨à±à°¨à°¿ సందేశాలనౠతà±à°¡à°¿à°šà°¿à°µà±‡à°¯à°¿"
-#: ../libempathy-gtk/empathy-chat.c:1090
+#: ../libempathy-gtk/empathy-chat.c:1088
msgid "/topic <topic>: set the topic of the current conversation"
msgstr "/topic <topic>: à°ªà±à°°à°¸à±à°¤à±à°¤ సంభాషణ యొకà±à°• విషయమà±à°¨à± అమరà±à°šà±"
-#: ../libempathy-gtk/empathy-chat.c:1093
+#: ../libempathy-gtk/empathy-chat.c:1091
msgid "/join <chat room ID>: join a new chat room"
msgstr "/join <chat room ID>: à°’à°• కొతà±à°¤ చాటౠగదిలో చేరà±"
-#: ../libempathy-gtk/empathy-chat.c:1096
+#: ../libempathy-gtk/empathy-chat.c:1094
msgid "/j <chat room ID>: join a new chat room"
msgstr "/j <chat room ID>: à°’à°• కొతà±à°¤ చాటౠగదిలో చేరà±"
-#: ../libempathy-gtk/empathy-chat.c:1100
+#: ../libempathy-gtk/empathy-chat.c:1098
msgid ""
"/part [<chat room ID>] [<reason>]: leave the chat room, by default the "
"current one"
msgstr ""
"/part [<chat room ID>] [<reason>]: à°ªà±à°°à°¸à±à°¤à±à°¤à°ªà± దానితో à°…à°ªà±à°°à°®à±‡à°¯à°®à±à°—à°¾ చాటౠగదిని వదిలివెళà±à°³à±"
-#: ../libempathy-gtk/empathy-chat.c:1104
+#: ../libempathy-gtk/empathy-chat.c:1102
msgid "/query <contact ID> [<message>]: open a private chat"
msgstr "/query <contact ID> [<message>]: à°’à°• గోపà±à°¯ చాటà±â€Œà°¨à°¿ తెరà±à°µà±"
-#: ../libempathy-gtk/empathy-chat.c:1107
+#: ../libempathy-gtk/empathy-chat.c:1105
msgid "/msg <contact ID> <message>: open a private chat"
msgstr "/msg <contact ID> <message>: à°’à°• గోపà±à°¯ చాటà±â€Œà°¨à°¿ తెరà±à°µà±"
-#: ../libempathy-gtk/empathy-chat.c:1110
+#: ../libempathy-gtk/empathy-chat.c:1108
msgid "/nick <nickname>: change your nickname on the current server"
msgstr "/nick <nickname>: à°ªà±à°°à°¸à±à°¤à±à°¤ సేవకమà±à°²à±‹ మీ మారà±à°ªà±‡à°°à±à°¨à°¿ మారà±à°šà±"
-#: ../libempathy-gtk/empathy-chat.c:1113
+#: ../libempathy-gtk/empathy-chat.c:1111
msgid "/me <message>: send an ACTION message to the current conversation"
msgstr "/me <message>:à°ªà±à°°à°¸à±à°¤à±à°¤ సంభాషణకౠఒక ACTION సందేశానà±à°¨à°¿ పంపేందà±à°•à±"
-#: ../libempathy-gtk/empathy-chat.c:1116
+#: ../libempathy-gtk/empathy-chat.c:1114
msgid ""
"/say <message>: send <message> to the current conversation. This is used to "
"send a message starting with a '/'. For example: \"/say /join is used to "
@@ -1430,11 +1429,11 @@ msgstr ""
"/say <message> : à°ªà±à°°à°¸à±à°¤à±à°¤ సంభాషణకౠ<message> పంపండి. à°ˆ à°’à°• '/' తో మొదలయà±à°¯à±‡ à°’à°• సందేశానà±à°¨à°¿ "
"పంపడానికి ఉపయోగిసà±à°¤à°¾à°°à±. ఉదాహరణకà±: \"/ చేరడానికి / చెపà±à°ªà±‡ à°’à°• కొతà±à°¤ చాటౠరూమౠచేరడానికి ఉపయోగిసà±à°¤à°¾à°°à±\""
-#: ../libempathy-gtk/empathy-chat.c:1121
+#: ../libempathy-gtk/empathy-chat.c:1119
msgid "/whois <contact ID>: display information about a contact"
msgstr "/ WHOIS <contact ID>: à°’à°• పరిచయానà±à°¨à°¿ à°—à±à°°à°¿à°‚à°šà°¿ à°ªà±à°°à°¦à°°à±à°¶à°¨ సమాచారం"
-#: ../libempathy-gtk/empathy-chat.c:1124
+#: ../libempathy-gtk/empathy-chat.c:1122
msgid ""
"/help [<command>]: show all supported commands. If <command> is defined, "
"show its usage."
@@ -1442,126 +1441,126 @@ msgstr ""
"/help [<command>]: సహకారమౠఉనà±à°¨ à°…à°¨à±à°¨à°¿ ఆదేశాలనౠచూపిసà±à°¤à±à°‚ది. ఒకవేళ <command> "
"నిరà±à°µà°šà°¿à°‚చబడినటà±à°Ÿà°¯à°¿à°¤à±‡, దాని వాడà±à°•à°¨à°¿ చూపించà±."
-#: ../libempathy-gtk/empathy-chat.c:1143
+#: ../libempathy-gtk/empathy-chat.c:1141
#, c-format
msgid "Usage: %s"
msgstr "వాడà±à°•: %s"
-#: ../libempathy-gtk/empathy-chat.c:1188
+#: ../libempathy-gtk/empathy-chat.c:1186
msgid "Unknown command"
msgstr "తెలియని ఆదేశమà±"
-#: ../libempathy-gtk/empathy-chat.c:1314
+#: ../libempathy-gtk/empathy-chat.c:1312
msgid "Unknown command; see /help for the available commands"
msgstr "తెలియని ఆదేశమà±; à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹à°µà±à°¨à±à°¨ ఆదేశమà±à°² కోసం /help చూడండి"
-#: ../libempathy-gtk/empathy-chat.c:1565
+#: ../libempathy-gtk/empathy-chat.c:1563
msgid "insufficient balance to send message"
msgstr "సందేశం పంపà±à°Ÿà°•à± కావలసిన à°¬à±à°¯à°¾à°²à±†à°¨à±à°¸à± లేదà±"
-#: ../libempathy-gtk/empathy-chat.c:1569 ../libempathy-gtk/empathy-chat.c:1583
-#: ../libempathy-gtk/empathy-chat.c:1646
+#: ../libempathy-gtk/empathy-chat.c:1567 ../libempathy-gtk/empathy-chat.c:1581
+#: ../libempathy-gtk/empathy-chat.c:1644
#, c-format
msgid "Error sending message '%s': %s"
msgstr "'%s' సందేశం పంపà±à°Ÿà°²à±‹ దోషమà±: %s"
-#: ../libempathy-gtk/empathy-chat.c:1571 ../libempathy-gtk/empathy-chat.c:1588
-#: ../libempathy-gtk/empathy-chat.c:1650
+#: ../libempathy-gtk/empathy-chat.c:1569 ../libempathy-gtk/empathy-chat.c:1586
+#: ../libempathy-gtk/empathy-chat.c:1648
#, c-format
msgid "Error sending message: %s"
msgstr "సందేశం పంపడంలో దోషమà±: %s"
#. translators: error used when user doesn't have enough credit on his
#. * account to send the message.
-#: ../libempathy-gtk/empathy-chat.c:1577
+#: ../libempathy-gtk/empathy-chat.c:1575
#, c-format
msgid "insufficient balance to send message. <a href='%s'>Top up</a>."
msgstr "సందేశం పంపà±à°Ÿà°•à± కావలసినంత à°¬à±à°¯à°¾à°²à±†à°¨à±à°¸à± లేదà±. <a href='%s'>Top up</a>."
-#: ../libempathy-gtk/empathy-chat.c:1617
+#: ../libempathy-gtk/empathy-chat.c:1615
msgid "not capable"
msgstr "సామరà±à°§à±à°¯à°¾à°¨à±à°¨à°¿ కలిగి లేదà±"
-#: ../libempathy-gtk/empathy-chat.c:1624
+#: ../libempathy-gtk/empathy-chat.c:1622
msgid "offline"
msgstr "ఆఫà±â€Œà°²à±ˆà°¨à±"
-#: ../libempathy-gtk/empathy-chat.c:1627
+#: ../libempathy-gtk/empathy-chat.c:1625
msgid "invalid contact"
msgstr "చెలà±à°²à°¨à°¿ పరిచయం"
-#: ../libempathy-gtk/empathy-chat.c:1630
+#: ../libempathy-gtk/empathy-chat.c:1628
msgid "permission denied"
msgstr "à°…à°¨à±à°®à°¤à°¿ నిరాకరించబడింది"
-#: ../libempathy-gtk/empathy-chat.c:1633
+#: ../libempathy-gtk/empathy-chat.c:1631
msgid "too long message"
msgstr "మరీ పొడవైన సందేశమà±"
-#: ../libempathy-gtk/empathy-chat.c:1636
+#: ../libempathy-gtk/empathy-chat.c:1634
msgid "not implemented"
msgstr "అమలà±à°ªà°°à±à°šà°¬à°¡à°²à±‡à°¦à±"
-#: ../libempathy-gtk/empathy-chat.c:1640
+#: ../libempathy-gtk/empathy-chat.c:1638
msgid "unknown"
msgstr "తెలియదà±"
-#: ../libempathy-gtk/empathy-chat.c:1707 ../src/empathy-chat-window.c:920
+#: ../libempathy-gtk/empathy-chat.c:1705 ../src/empathy-chat-window.c:919
msgid "Topic:"
msgstr "విషయం:"
-#: ../libempathy-gtk/empathy-chat.c:1722
+#: ../libempathy-gtk/empathy-chat.c:1720
#, c-format
msgid "Topic set to: %s"
msgstr "విషయం దీనికి అమరà±à°šà°¬à°¡à°¿à°‚ది: %s"
-#: ../libempathy-gtk/empathy-chat.c:1724
+#: ../libempathy-gtk/empathy-chat.c:1722
#, c-format
msgid "Topic set by %s to: %s"
msgstr "విషయం దీనికి అమరà±à°šà°¬à°¡à°¿à°‚ది %s: %s"
#. No need to display this 'event' is no topic can be defined anyway
-#: ../libempathy-gtk/empathy-chat.c:1729
+#: ../libempathy-gtk/empathy-chat.c:1727
msgid "No topic defined"
msgstr "ఠవిషయం నిరà±à°µà°šà°¿à°‚చిలేదà±"
-#: ../libempathy-gtk/empathy-chat.c:2245
+#: ../libempathy-gtk/empathy-chat.c:2243
msgid "(No Suggestions)"
msgstr "(ఠసూచనలౠలేవà±)"
#. translators: %s is the selected word
-#: ../libempathy-gtk/empathy-chat.c:2313
+#: ../libempathy-gtk/empathy-chat.c:2311
#, c-format
msgid "Add '%s' to Dictionary"
msgstr "'%s'ని నిఘంటà±à°µà±à°•à°¿ చేరà±à°šà±"
#. translators: first %s is the selected word,
#. * second %s is the language name of the target dictionary
-#: ../libempathy-gtk/empathy-chat.c:2350
+#: ../libempathy-gtk/empathy-chat.c:2348
#, c-format
msgid "Add '%s' to %s Dictionary"
msgstr "'%s'ని %s నిఘంటà±à°µà±à°•à°¿ చేరà±à°šà±"
-#: ../libempathy-gtk/empathy-chat.c:2420
+#: ../libempathy-gtk/empathy-chat.c:2418
msgid "Insert Smiley"
msgstr "à°šà°¿à°°à±à°¨à°µà±à°µà±à°¨à± చేరà±à°šà±"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:2438
+#: ../libempathy-gtk/empathy-chat.c:2436
#: ../libempathy-gtk/empathy-ui-utils.c:1880
msgid "_Send"
msgstr "పంపౠ(_S)"
#. Spelling suggestions
-#: ../libempathy-gtk/empathy-chat.c:2495
+#: ../libempathy-gtk/empathy-chat.c:2493
msgid "_Spelling Suggestions"
msgstr "à°…à°•à±à°·à°°à°•à±à°°à°®à°‚ సూచనలౠ(_S)"
-#: ../libempathy-gtk/empathy-chat.c:2584
+#: ../libempathy-gtk/empathy-chat.c:2582
msgid "Failed to retrieve recent logs"
msgstr "ఇటీవలి à°šà°¿à°Ÿà±à°Ÿà°¾à°²à°¨à± పొందà±à°Ÿà°²à±‹ విఫలమైంది"
-#: ../libempathy-gtk/empathy-chat.c:2723
+#: ../libempathy-gtk/empathy-chat.c:2721
#, c-format
msgid "%s has disconnected"
msgstr "%s అననà±à°¸à°‚ధానించారà±"
@@ -1569,12 +1568,12 @@ msgstr "%s అననà±à°¸à°‚ధానించారà±"
#. translators: reverse the order of these arguments
#. * if the kicked should come before the kicker in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2730
+#: ../libempathy-gtk/empathy-chat.c:2728
#, c-format
msgid "%1$s was kicked by %2$s"
msgstr "%1$s à°…à°¨à±à°¨à°¦à°¿ %2$s చేత బయటకౠతోసివేయబడà±à°¡à°¾à°°à±"
-#: ../libempathy-gtk/empathy-chat.c:2733
+#: ../libempathy-gtk/empathy-chat.c:2731
#, c-format
msgid "%s was kicked"
msgstr "%s తోసివేయబడà±à°¡à°¾à°°à±"
@@ -1582,17 +1581,17 @@ msgstr "%s తోసివేయబడà±à°¡à°¾à°°à±"
#. translators: reverse the order of these arguments
#. * if the banned should come before the banner in your locale.
#.
-#: ../libempathy-gtk/empathy-chat.c:2741
+#: ../libempathy-gtk/empathy-chat.c:2739
#, c-format
msgid "%1$s was banned by %2$s"
msgstr "%1$s à°…à°¨à±à°µà°¾à°°à± %2$s చేత నిషేధించబడà±à°¡à°¾à°°à±"
-#: ../libempathy-gtk/empathy-chat.c:2744
+#: ../libempathy-gtk/empathy-chat.c:2742
#, c-format
msgid "%s was banned"
msgstr "%s నిషేధించబడà±à°¡à°¾à°°à±"
-#: ../libempathy-gtk/empathy-chat.c:2748
+#: ../libempathy-gtk/empathy-chat.c:2746
#, c-format
msgid "%s has left the room"
msgstr "%s గదిని వదిలివెళà±à°³à°¾à°°à±"
@@ -1602,17 +1601,17 @@ msgstr "%s గదిని వదిలివెళà±à°³à°¾à°°à±"
#. * given by the user living the room. If this poses a problem,
#. * please let us know. :-)
#.
-#: ../libempathy-gtk/empathy-chat.c:2757
+#: ../libempathy-gtk/empathy-chat.c:2755
#, c-format
msgid " (%s)"
msgstr " (%s)"
-#: ../libempathy-gtk/empathy-chat.c:2782
+#: ../libempathy-gtk/empathy-chat.c:2780
#, c-format
msgid "%s has joined the room"
msgstr "%s గదిలో చేరారà±"
-#: ../libempathy-gtk/empathy-chat.c:2807
+#: ../libempathy-gtk/empathy-chat.c:2805
#, c-format
msgid "%s is now known as %s"
msgstr "%s ఇపà±à°ªà±à°¡à± %s వలె అయినారà±"
@@ -1620,55 +1619,55 @@ msgstr "%s ఇపà±à°ªà±à°¡à± %s వలె అయినారà±"
#. We don't know if the incoming call has been accepted or not, so we
#. * assume it hasn't and if it has, we'll set the proper status when
#. * we get the new handler.
-#: ../libempathy-gtk/empathy-chat.c:2994
+#: ../libempathy-gtk/empathy-chat.c:2992
#: ../src/empathy-streamed-media-window.c:1888
-#: ../src/empathy-event-manager.c:1279 ../src/empathy-call-window.c:1502
-#: ../src/empathy-call-window.c:1552 ../src/empathy-call-window.c:2590
+#: ../src/empathy-event-manager.c:1279 ../src/empathy-call-window.c:1466
+#: ../src/empathy-call-window.c:1516 ../src/empathy-call-window.c:2562
msgid "Disconnected"
msgstr "అననà±à°¸à°‚ధానించబడà±à°¡à°¾à°°à±"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3658
+#: ../libempathy-gtk/empathy-chat.c:3656
msgid "Would you like to store this password?"
msgstr "à°ˆ సంకేతపదమà±à°¨à± à°­à°¦à±à°°à°ªà°°à°šà°¾à°²à°¨à±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾?"
-#: ../libempathy-gtk/empathy-chat.c:3664
+#: ../libempathy-gtk/empathy-chat.c:3662
msgid "Remember"
msgstr "à°—à±à°°à±à°¤à°¿à°‚à°šà±à°•à±Šà°¨à±"
-#: ../libempathy-gtk/empathy-chat.c:3674
+#: ../libempathy-gtk/empathy-chat.c:3672
msgid "Not now"
msgstr "ఇపà±à°ªà±à°¡à± కాదà±"
-#: ../libempathy-gtk/empathy-chat.c:3718
+#: ../libempathy-gtk/empathy-chat.c:3716
#: ../libempathy-gtk/empathy-bad-password-dialog.c:142
msgid "Retry"
msgstr "మరలా à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà±"
-#: ../libempathy-gtk/empathy-chat.c:3722
+#: ../libempathy-gtk/empathy-chat.c:3720
msgid "Wrong password; please try again:"
msgstr "సంకేతపదం తపà±à°ªà±; దయచేసి మళà±à°³à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿:"
#. Add message
-#: ../libempathy-gtk/empathy-chat.c:3852
+#: ../libempathy-gtk/empathy-chat.c:3850
msgid "This room is protected by a password:"
msgstr "à°ˆ గది సంకేతపదమà±à°¤à±‹ à°°à°•à±à°·à°£ కలిగివà±à°‚ది:"
-#: ../libempathy-gtk/empathy-chat.c:3879
+#: ../libempathy-gtk/empathy-chat.c:3877
msgid "Join"
msgstr "చేరà±"
-#: ../libempathy-gtk/empathy-chat.c:4071 ../src/empathy-event-manager.c:1300
+#: ../libempathy-gtk/empathy-chat.c:4069 ../src/empathy-event-manager.c:1300
msgid "Connected"
msgstr "à°…à°¨à±à°¸à°‚ధానించబడà±à°¡à°¾à°°à±"
-#: ../libempathy-gtk/empathy-chat.c:4126
+#: ../libempathy-gtk/empathy-chat.c:4124
msgid "Conversation"
msgstr "సంభాషణ"
#. Translators: this string is a something like
#. * "Escher Cat (SMS)"
-#: ../libempathy-gtk/empathy-chat.c:4131
+#: ../libempathy-gtk/empathy-chat.c:4129
#, c-format
msgid "%s (SMS)"
msgstr "%s (SMS)"
@@ -1699,7 +1698,7 @@ msgstr "నిరోధించబడిన పరిచయాలనౠసవà
#. Account and Identifier
#: ../libempathy-gtk/empathy-contact-blocking-dialog.ui.h:1
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:506
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:503
#: ../libempathy-gtk/empathy-contact-widget.ui.h:1
#: ../libempathy-gtk/empathy-individual-widget.c:1474
#: ../src/empathy-chatrooms-window.ui.h:2
@@ -1771,157 +1770,157 @@ msgid "Decide _Later"
msgstr "తరà±à°µà°¾à°¤ నిరà±à°£à°¯à°¿à°¸à±à°¤à°¾à°¨à± (_L)"
#. Title
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:499
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:496
msgid "Search contacts"
msgstr "పరిచయాలనౠవెతà±à°•à±"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:529
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:526
msgid "Search: "
msgstr "వెతà±à°•à±: "
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:587
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:584
msgid "_Add Contact"
msgstr "పరిచయానà±à°¨à°¿ జతచేయి...(_A)"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:605
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:602
msgid "No contacts found"
msgstr "ఠపరిచయాలౠకనపడలేదà±"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:621
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:618
msgid "Your message introducing yourself:"
msgstr "మీ సందేశం మిమà±à°®à°²à±à°¨à°¿ పరిచయం చెసà±à°¤à±à°‚ది:"
-#: ../libempathy-gtk/empathy-contact-search-dialog.c:629
+#: ../libempathy-gtk/empathy-contact-search-dialog.c:626
msgid "Please let me see when you're online. Thanks!"
msgstr "మీరౠఆనà±à°²à±†à±–నౠఉనà±à°¨à°ªà±à°ªà±à°¡à± ననà±à°¨à± చూడండి తెలియచేయండి. ధనà±à°¯à°µà°¾à°¦à°¾à°²à±!"
-#: ../libempathy-gtk/empathy-contact-widget.c:567
+#: ../libempathy-gtk/empathy-contact-widget.c:566
#: ../libempathy-gtk/empathy-individual-widget.c:304
msgid "Channels:"
msgstr "ఛానళà±à°³à±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:747
+#: ../libempathy-gtk/empathy-contact-widget.c:746
#: ../libempathy-gtk/empathy-individual-widget.c:455
msgid "Country ISO Code:"
msgstr "దేశమౠISO కోడà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:749
+#: ../libempathy-gtk/empathy-contact-widget.c:748
#: ../libempathy-gtk/empathy-individual-widget.c:457
msgid "Country:"
msgstr "దేశమà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:751
+#: ../libempathy-gtk/empathy-contact-widget.c:750
#: ../libempathy-gtk/empathy-individual-widget.c:459
msgid "State:"
msgstr "రాషà±à°Ÿà±à°°à°®à±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:753
+#: ../libempathy-gtk/empathy-contact-widget.c:752
#: ../libempathy-gtk/empathy-individual-widget.c:461
msgid "City:"
msgstr "పటà±à°Ÿà°£à°®à±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:755
+#: ../libempathy-gtk/empathy-contact-widget.c:754
#: ../libempathy-gtk/empathy-individual-widget.c:463
msgid "Area:"
msgstr "à°ªà±à°°à°¾à°‚తమà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:757
+#: ../libempathy-gtk/empathy-contact-widget.c:756
#: ../libempathy-gtk/empathy-individual-widget.c:465
msgid "Postal Code:"
msgstr "పోసà±à°Ÿà°²à± కోడà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:759
+#: ../libempathy-gtk/empathy-contact-widget.c:758
#: ../libempathy-gtk/empathy-individual-widget.c:467
msgid "Street:"
msgstr "వీధి:"
-#: ../libempathy-gtk/empathy-contact-widget.c:761
+#: ../libempathy-gtk/empathy-contact-widget.c:760
#: ../libempathy-gtk/empathy-individual-widget.c:469
msgid "Building:"
msgstr "భవనమà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:763
+#: ../libempathy-gtk/empathy-contact-widget.c:762
#: ../libempathy-gtk/empathy-individual-widget.c:471
msgid "Floor:"
msgstr "అంతసà±à°¥à±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:765
+#: ../libempathy-gtk/empathy-contact-widget.c:764
#: ../libempathy-gtk/empathy-individual-widget.c:473
msgid "Room:"
msgstr "గది:"
-#: ../libempathy-gtk/empathy-contact-widget.c:767
+#: ../libempathy-gtk/empathy-contact-widget.c:766
#: ../libempathy-gtk/empathy-individual-widget.c:475
msgid "Text:"
msgstr "పాఠà±à°¯à°®à±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:769
+#: ../libempathy-gtk/empathy-contact-widget.c:768
#: ../libempathy-gtk/empathy-individual-widget.c:477
msgid "Description:"
msgstr "వివరణ:"
-#: ../libempathy-gtk/empathy-contact-widget.c:771
+#: ../libempathy-gtk/empathy-contact-widget.c:770
#: ../libempathy-gtk/empathy-individual-widget.c:479
msgid "URI:"
msgstr "URI:"
-#: ../libempathy-gtk/empathy-contact-widget.c:773
+#: ../libempathy-gtk/empathy-contact-widget.c:772
#: ../libempathy-gtk/empathy-individual-widget.c:481
msgid "Accuracy Level:"
msgstr "à°–à°šà±à°šà°¿à°¤à°¤à±à°µ à°¸à±à°¥à°¾à°¯à°¿:"
-#: ../libempathy-gtk/empathy-contact-widget.c:775
+#: ../libempathy-gtk/empathy-contact-widget.c:774
#: ../libempathy-gtk/empathy-individual-widget.c:483
msgid "Error:"
msgstr "దోషమà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:777
+#: ../libempathy-gtk/empathy-contact-widget.c:776
#: ../libempathy-gtk/empathy-individual-widget.c:485
msgid "Vertical Error (meters):"
msgstr "నిలà±à°µà± దోషమౠ(మీటరà±à°²à±):"
-#: ../libempathy-gtk/empathy-contact-widget.c:779
+#: ../libempathy-gtk/empathy-contact-widget.c:778
#: ../libempathy-gtk/empathy-individual-widget.c:487
msgid "Horizontal Error (meters):"
msgstr "à°…à°¡à±à°¡ దోషమౠ(మీటరà±à°²à±):"
-#: ../libempathy-gtk/empathy-contact-widget.c:781
+#: ../libempathy-gtk/empathy-contact-widget.c:780
#: ../libempathy-gtk/empathy-individual-widget.c:489
msgid "Speed:"
msgstr "వేగమà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:783
+#: ../libempathy-gtk/empathy-contact-widget.c:782
#: ../libempathy-gtk/empathy-individual-widget.c:491
msgid "Bearing:"
msgstr "బేరింగà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:785
+#: ../libempathy-gtk/empathy-contact-widget.c:784
#: ../libempathy-gtk/empathy-individual-widget.c:493
msgid "Climb Speed:"
msgstr "à°Žà°•à±à°•à± వేగమà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:787
+#: ../libempathy-gtk/empathy-contact-widget.c:786
#: ../libempathy-gtk/empathy-individual-widget.c:495
msgid "Last Updated on:"
msgstr "చివరిగా నవీకరించబడింది:"
-#: ../libempathy-gtk/empathy-contact-widget.c:789
+#: ../libempathy-gtk/empathy-contact-widget.c:788
#: ../libempathy-gtk/empathy-individual-widget.c:497
msgid "Longitude:"
msgstr "రేఖాంశమà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:791
+#: ../libempathy-gtk/empathy-contact-widget.c:790
#: ../libempathy-gtk/empathy-individual-widget.c:499
msgid "Latitude:"
msgstr "à°…à°•à±à°·à°¾à°‚శమà±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:793
+#: ../libempathy-gtk/empathy-contact-widget.c:792
#: ../libempathy-gtk/empathy-individual-widget.c:501
msgid "Altitude:"
msgstr "à°Žà°¤à±à°¤à±:"
-#: ../libempathy-gtk/empathy-contact-widget.c:846
-#: ../libempathy-gtk/empathy-contact-widget.c:861
+#: ../libempathy-gtk/empathy-contact-widget.c:845
+#: ../libempathy-gtk/empathy-contact-widget.c:860
#: ../libempathy-gtk/empathy-individual-widget.c:593
#: ../libempathy-gtk/empathy-individual-widget.c:608
#: ../src/empathy-preferences.ui.h:35
@@ -1929,32 +1928,32 @@ msgid "Location"
msgstr "à°¸à±à°¥à°¾à°¨à°®à±"
#. translators: format is "Location, $date"
-#: ../libempathy-gtk/empathy-contact-widget.c:863
+#: ../libempathy-gtk/empathy-contact-widget.c:862
#: ../libempathy-gtk/empathy-individual-widget.c:610
#, c-format
msgid "%s, %s"
msgstr "%s, %s"
-#: ../libempathy-gtk/empathy-contact-widget.c:915
+#: ../libempathy-gtk/empathy-contact-widget.c:914
#: ../libempathy-gtk/empathy-individual-widget.c:659
msgid "%B %e, %Y at %R UTC"
msgstr "%B %e, %Y at %R UTC"
-#: ../libempathy-gtk/empathy-contact-widget.c:997
+#: ../libempathy-gtk/empathy-contact-widget.c:996
#: ../libempathy-gtk/empathy-individual-widget.c:900
msgid "Save Avatar"
msgstr "అవతారానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à±à°šà±"
-#: ../libempathy-gtk/empathy-contact-widget.c:1053
+#: ../libempathy-gtk/empathy-contact-widget.c:1052
#: ../libempathy-gtk/empathy-individual-widget.c:958
msgid "Unable to save avatar"
msgstr "అవతారానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à°ªà±‹à°¤à±à°‚ది"
-#: ../libempathy-gtk/empathy-contact-widget.c:1444
+#: ../libempathy-gtk/empathy-contact-widget.c:1454
msgid "Personal Details"
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ వివరాలà±"
-#: ../libempathy-gtk/empathy-contact-widget.c:1447
+#: ../libempathy-gtk/empathy-contact-widget.c:1457
#: ../libempathy-gtk/empathy-contact-widget.ui.h:6
#: ../libempathy-gtk/empathy-individual-widget.ui.h:3
msgid "Contact Details"
@@ -2063,11 +2062,11 @@ msgstr "వరà±à°·à°¨à±:"
msgid "Client:"
msgstr "à°•à±à°²à°¯à°¿à°‚à°Ÿà±:"
-#: ../libempathy-gtk/empathy-groups-widget.c:331
+#: ../libempathy-gtk/empathy-groups-widget.c:327
msgid "Groups"
msgstr "à°—à±à°‚à°ªà±à°²à±"
-#: ../libempathy-gtk/empathy-groups-widget.c:343
+#: ../libempathy-gtk/empathy-groups-widget.c:339
msgid ""
"Select the groups you want this contact to appear in. Note that you can "
"select more than one group or no groups."
@@ -2075,17 +2074,17 @@ msgstr ""
"à°—à±à°‚à°ªà±à°²à±‹ కనిపించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨ పరిచయానà±à°¨à°¿ à°Žà°‚à°šà±à°•à±‹à°‚à°¡à°¿. మీరౠఒకటి à°•à°¨à±à°¨à°¾ à°Žà°•à±à°•à±à°µ à°—à±à°‚à°ªà±à°²à°¨à± "
"à°Žà°‚à°šà±à°•à±Šà°¨à°µà°šà±à°šà± లేదా à°…à°¸à±à°¸à°²à± à°Žà°‚à°šà±à°•à±Šà°¨à°ªà±‹à°µà°šà±à°šà±à°¨à°¨à°¿ గమనించండి."
-#: ../libempathy-gtk/empathy-groups-widget.c:362
+#: ../libempathy-gtk/empathy-groups-widget.c:358
msgid "_Add Group"
msgstr "à°—à±à°‚à°ªà±à°¨à± జతచేయి (_A)"
-#: ../libempathy-gtk/empathy-groups-widget.c:397
+#: ../libempathy-gtk/empathy-groups-widget.c:393
msgctxt "verb in a column header displaying group names"
msgid "Select"
msgstr "à°Žà°‚à°šà±à°•à±‹à°‚à°¡à°¿"
-#: ../libempathy-gtk/empathy-groups-widget.c:407
-#: ../src/empathy-roster-window.c:1970
+#: ../libempathy-gtk/empathy-groups-widget.c:403
+#: ../src/empathy-roster-window.c:1969
msgid "Group"
msgstr "à°—à±à°‚à°ªà±"
@@ -2113,108 +2112,109 @@ msgstr "బంధన పరిచయాలౠ(_O)"
#. Translators: this is used in the context menu for a contact. The first
#. * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
#. * of the user's account IDs (e.g. me@hotmail.com).
-#: ../libempathy-gtk/empathy-individual-menu.c:173
+#: ../libempathy-gtk/empathy-individual-menu.c:172
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
-#: ../libempathy-gtk/empathy-individual-menu.c:345
+#: ../libempathy-gtk/empathy-individual-menu.c:344
msgid "Select account to use to place the call"
msgstr "కాలౠసà±à°¥à°¾à°¨à°¾à°¨à°¿à°•à°¿ ఉపయోగించడానికి ఖాతా à°Žà°‚à°šà±à°•à±‹à°‚à°¡à°¿"
#. translators: Call is a noun. This string is used in the window
#. * title
-#: ../libempathy-gtk/empathy-individual-menu.c:349
+#: ../libempathy-gtk/empathy-individual-menu.c:348
#: ../libempathy-gtk/empathy-log-window.ui.h:6
#: ../src/empathy-streamed-media-window.c:1290
#: ../src/empathy-call-window.ui.h:18
msgid "Call"
msgstr "కాలà±"
-#: ../libempathy-gtk/empathy-individual-menu.c:414
+#: ../libempathy-gtk/empathy-individual-menu.c:413
msgid "Mobile"
msgstr "మొబైలà±"
-#: ../libempathy-gtk/empathy-individual-menu.c:416
+#: ../libempathy-gtk/empathy-individual-menu.c:415
msgid "Work"
msgstr "పని "
-#: ../libempathy-gtk/empathy-individual-menu.c:418
+#: ../libempathy-gtk/empathy-individual-menu.c:417
msgid "HOME"
msgstr "ఇలà±à°²à± "
-#: ../libempathy-gtk/empathy-individual-menu.c:659
+#: ../libempathy-gtk/empathy-individual-menu.c:658
msgid "_Block Contact"
msgstr "పరిచయానà±à°¨à°¿ నిరోధించౠ(_B)"
#. add chat button
-#: ../libempathy-gtk/empathy-individual-menu.c:1018
+#: ../libempathy-gtk/empathy-individual-menu.c:1017
#: ../libempathy-gtk/empathy-new-message-dialog.c:319
#: ../src/empathy-roster-window-menubar.ui.h:1
msgid "_Chat"
msgstr "చాటౠ(_C)"
#. add SMS button
-#: ../libempathy-gtk/empathy-individual-menu.c:1053
+#: ../libempathy-gtk/empathy-individual-menu.c:1052
#: ../libempathy-gtk/empathy-new-message-dialog.c:313
msgid "_SMS"
msgstr "_SMS"
-#: ../libempathy-gtk/empathy-individual-menu.c:1086
+#: ../libempathy-gtk/empathy-individual-menu.c:1085
msgctxt "menu item"
msgid "_Audio Call"
msgstr "ఆడియో కాలౠ(_A)"
-#: ../libempathy-gtk/empathy-individual-menu.c:1119
+#: ../libempathy-gtk/empathy-individual-menu.c:1118
msgctxt "menu item"
msgid "_Video Call"
msgstr "వీడియో కాలౠ(_V)"
-#: ../libempathy-gtk/empathy-individual-menu.c:1160
+#: ../libempathy-gtk/empathy-individual-menu.c:1159
#: ../src/empathy-roster-window-menubar.ui.h:4
msgid "_Previous Conversations"
msgstr "à°®à±à°¨à±à°ªà°Ÿà°¿ సంభాషణలౠ(_P)"
-#: ../libempathy-gtk/empathy-individual-menu.c:1189
+#: ../libempathy-gtk/empathy-individual-menu.c:1188
msgid "Send File"
msgstr "ఫైలà±à°¨à± పంపà±"
-#: ../libempathy-gtk/empathy-individual-menu.c:1219
+#: ../libempathy-gtk/empathy-individual-menu.c:1218
msgid "Share My Desktop"
msgstr "నా డెసà±à°•à±â€à°Ÿà°¾à°ªà±â€Œà°¨à± పంచà±à°•à±Šà°¨à±"
-#: ../libempathy-gtk/empathy-individual-menu.c:1245
+#: ../libempathy-gtk/empathy-individual-menu.c:1244
#: ../libempathy-gtk/empathy-individual-widget.c:1357
msgid "Favorite"
msgstr "ఇషà±à°Ÿà°¾à°‚శమà±"
-#: ../libempathy-gtk/empathy-individual-menu.c:1264
+#: ../libempathy-gtk/empathy-individual-menu.c:1263
msgid "gnome-contacts not installed"
msgstr "à°—à±à°¨à±‹à°®à±â€Œ-à°šà°¿à°°à±à°¨à°¾à°®à°¾à°²à± à°¸à±à°¥à°¾à°ªà°¿à°‚చబడిలేదà±"
-#: ../libempathy-gtk/empathy-individual-menu.c:1267
+#: ../libempathy-gtk/empathy-individual-menu.c:1266
msgid "Please install gnome-contacts to access contacts details."
msgstr "à°šà°¿à°°à±à°¨à°¾à°®à°¾à°² వివరణమà±à°²à± పొందà±à°Ÿà°•à± à°—à±à°¨à±‹à°®à±â€Œ-à°šà°¿à°°à±à°¨à°¾à°®à°¾à°²à°¨à± à°¸à±à°¥à°¾à°ªà°¿à°‚à°šà°‚à°¡à°¿ "
-#: ../libempathy-gtk/empathy-individual-menu.c:1398
+#: ../libempathy-gtk/empathy-individual-menu.c:1397
msgid "Infor_mation"
msgstr "సమాచారమౠ(_m)"
-#: ../libempathy-gtk/empathy-individual-menu.c:1447
+#: ../libempathy-gtk/empathy-individual-menu.c:1446
msgctxt "Edit individual (contextual menu)"
msgid "_Edit"
msgstr "సవరణ (_E)"
-#: ../libempathy-gtk/empathy-individual-menu.c:1564
-#: ../src/empathy-chat-window.c:1192
+#. send invitation
+#: ../libempathy-gtk/empathy-individual-menu.c:1562
+#: ../src/empathy-chat-window.c:1190
msgid "Inviting you to this room"
msgstr "మిమà±à°®à°²à±à°¨à°¿ à°ˆ గదికి ఆహà±à°µà°¾à°¨à°¿à°¸à±à°¤à±à°¨à±à°¨à°¾à°°à±"
-#: ../libempathy-gtk/empathy-individual-menu.c:1610
+#: ../libempathy-gtk/empathy-individual-menu.c:1608
msgid "_Invite to Chat Room"
msgstr "చాటౠగదికి ఆహà±à°µà°¾à°¨à°¿à°‚à°šà± (_I)"
-#: ../libempathy-gtk/empathy-individual-menu.c:1806
+#: ../libempathy-gtk/empathy-individual-menu.c:1804
#: ../src/empathy-roster-window-menubar.ui.h:5
msgid "_Add Contact…"
msgstr "పరిచయానà±à°¨à°¿ జతచేయి...(_A)"
@@ -2296,137 +2296,135 @@ msgstr "కొతà±à°¤ సేవకమà±"
msgid "SSL"
msgstr "SSL"
-#: ../libempathy-gtk/empathy-log-window.c:620
+#: ../libempathy-gtk/empathy-log-window.c:617
msgid "History"
msgstr "à°šà°°à°¿à°¤à±à°°"
-#: ../libempathy-gtk/empathy-log-window.c:675
+#: ../libempathy-gtk/empathy-log-window.c:672
msgid "Show"
msgstr "చూపించà±"
-#: ../libempathy-gtk/empathy-log-window.c:697
+#: ../libempathy-gtk/empathy-log-window.c:694
msgid "Search"
msgstr "వెతà±à°•à±"
-#: ../libempathy-gtk/empathy-log-window.c:1148
+#: ../libempathy-gtk/empathy-log-window.c:1145
#, c-format
msgid "Chat in %s"
msgstr "%sతో చాటà±"
-#: ../libempathy-gtk/empathy-log-window.c:1150
+#: ../libempathy-gtk/empathy-log-window.c:1147
#, c-format
msgid "Chat with %s"
msgstr "చాటౠతో %s"
-#: ../libempathy-gtk/empathy-log-window.c:1200
-#: ../libempathy-gtk/empathy-log-window.c:1347
+#: ../libempathy-gtk/empathy-log-window.c:1197
+#: ../libempathy-gtk/empathy-log-window.c:1341
msgctxt "A date with the time"
msgid "%A, %e %B %Y %X"
msgstr "%A %B %d %Y %X"
#. Translators: this is an emote: '* Danielle waves'
-#: ../libempathy-gtk/empathy-log-window.c:1289
+#: ../libempathy-gtk/empathy-log-window.c:1284
#, c-format
msgid "<i>* %s %s</i>"
msgstr "<i>* %s %s</i>"
#. Translators: this is a message: 'Danielle: hello'
#. * The string in bold is the sender's name
-#: ../libempathy-gtk/empathy-log-window.c:1295
+#: ../libempathy-gtk/empathy-log-window.c:1290
#, c-format
msgid "<b>%s:</b> %s"
msgstr "<b>%s:</b> %s"
-#: ../libempathy-gtk/empathy-log-window.c:1371
+#: ../libempathy-gtk/empathy-log-window.c:1365
#, c-format
-#| msgid "%s second"
-#| msgid_plural "%s seconds"
msgid "%s second"
msgid_plural "%s seconds"
msgstr[0] "%s సెకనౠ"
msgstr[1] "%s సెకనà±à°²à±"
-#: ../libempathy-gtk/empathy-log-window.c:1378
+#: ../libempathy-gtk/empathy-log-window.c:1372
#, c-format
msgid "%s minute"
msgid_plural "%s minutes"
msgstr[0] "%s నిమà±à°·à°®à±"
msgstr[1] "%s నిమà±à°·à°¾à°²à±"
-#: ../libempathy-gtk/empathy-log-window.c:1386
+#: ../libempathy-gtk/empathy-log-window.c:1380
#, c-format
msgid "Call took %s, ended at %s"
msgstr "కాలà±,% s పటà±à°Ÿà°¿à°‚ది% s వదà±à°¦ à°®à±à°—ిసింది"
-#: ../libempathy-gtk/empathy-log-window.c:1720
+#: ../libempathy-gtk/empathy-log-window.c:1711
msgid "Today"
msgstr "నేడà±"
-#: ../libempathy-gtk/empathy-log-window.c:1724
+#: ../libempathy-gtk/empathy-log-window.c:1715
msgid "Yesterday"
msgstr "నినà±à°¨"
#. Translators: A date such as '23 May 2010' (strftime format)
-#: ../libempathy-gtk/empathy-log-window.c:1739
+#: ../libempathy-gtk/empathy-log-window.c:1730
msgid "%e %B %Y"
msgstr "%A %B %Y"
-#: ../libempathy-gtk/empathy-log-window.c:1827
-#: ../libempathy-gtk/empathy-log-window.c:3487
+#: ../libempathy-gtk/empathy-log-window.c:1834
+#: ../libempathy-gtk/empathy-log-window.c:3457
msgid "Anytime"
msgstr "ఠసమయమà±à°²à±‹à°¨à°¾"
-#: ../libempathy-gtk/empathy-log-window.c:1916
-#: ../libempathy-gtk/empathy-log-window.c:2400
+#: ../libempathy-gtk/empathy-log-window.c:1933
+#: ../libempathy-gtk/empathy-log-window.c:2392
msgid "Anyone"
msgstr "ఎవరైనా"
-#: ../libempathy-gtk/empathy-log-window.c:2713
+#: ../libempathy-gtk/empathy-log-window.c:2705
msgid "Who"
msgstr "ఎవరà±"
-#: ../libempathy-gtk/empathy-log-window.c:2922
+#: ../libempathy-gtk/empathy-log-window.c:2914
msgid "When"
msgstr "à°Žà°ªà±à°¡à±"
-#: ../libempathy-gtk/empathy-log-window.c:3038
+#: ../libempathy-gtk/empathy-log-window.c:3032
msgid "Anything"
msgstr "à°à°¦à±ˆà°¨à°¾"
-#: ../libempathy-gtk/empathy-log-window.c:3040
+#: ../libempathy-gtk/empathy-log-window.c:3034
msgid "Text chats"
msgstr "పాఠà±à°¯ చాటà±à°²à±"
-#: ../libempathy-gtk/empathy-log-window.c:3042
+#: ../libempathy-gtk/empathy-log-window.c:3035
#: ../src/empathy-preferences.ui.h:25
msgid "Calls"
msgstr "కాలà±à°¸à± "
-#: ../libempathy-gtk/empathy-log-window.c:3047
+#: ../libempathy-gtk/empathy-log-window.c:3039
msgid "Incoming calls"
msgstr "లోనికివచà±à°šà± కాలà±à°¸à±"
-#: ../libempathy-gtk/empathy-log-window.c:3048
+#: ../libempathy-gtk/empathy-log-window.c:3040
msgid "Outgoing calls"
msgstr "బయటకౠవెళà±à°³à± వాయిసౠకాలà±à°¸à±"
-#: ../libempathy-gtk/empathy-log-window.c:3049
+#: ../libempathy-gtk/empathy-log-window.c:3041
msgid "Missed calls"
msgstr "మిసà±à°¸à±à°¡à± కాలà±à°¸à±"
-#: ../libempathy-gtk/empathy-log-window.c:3071
+#: ../libempathy-gtk/empathy-log-window.c:3061
msgid "What"
msgstr "à°à°®à°¿à°Ÿà°¿"
-#: ../libempathy-gtk/empathy-log-window.c:3780
+#: ../libempathy-gtk/empathy-log-window.c:3750
msgid "Are you sure you want to delete all logs of previous conversations?"
msgstr "మీరౠమà±à°¨à±à°ªà°Ÿà°¿ సంభాషణలౠఅనà±à°¨à°¿ లాగà±à°²à°¨à± తొలగించడానికి నిశà±à°šà°¯à°¿à°‚à°šà±à°•à±à°¨à±à°¨à°¾à°°à°¾?"
-#: ../libempathy-gtk/empathy-log-window.c:3784
+#: ../libempathy-gtk/empathy-log-window.c:3754
msgid "Clear All"
msgstr "à°…à°¨à±à°¨ à°¶à±à°­à±à°°à°ªà°°à°šà± "
-#: ../libempathy-gtk/empathy-log-window.c:3791
+#: ../libempathy-gtk/empathy-log-window.c:3761
msgid "Delete from:"
msgstr "దీని à°¨à±à°‚à°¡à°¿ తొలగà±à°®à°¿à°šà±:"
@@ -2557,30 +2555,41 @@ msgstr ""
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:167
-#: ../libempathy-gtk/empathy-presence-chooser.c:203
+#: ../libempathy-gtk/empathy-presence-chooser.c:166
+#: ../libempathy-gtk/empathy-presence-chooser.c:202
msgid "Custom Message…"
msgstr "à°…à°¨à±à°°à±‚పిత సందేశమà±..."
-#: ../libempathy-gtk/empathy-presence-chooser.c:220
-#: ../libempathy-gtk/empathy-presence-chooser.c:222
+#: ../libempathy-gtk/empathy-presence-chooser.c:219
+#: ../libempathy-gtk/empathy-presence-chooser.c:221
msgid "Edit Custom Messages…"
msgstr "à°…à°¨à±à°°à±‚పిత సందేశాలనౠసవరించà±..."
-#: ../libempathy-gtk/empathy-presence-chooser.c:345
+#: ../libempathy-gtk/empathy-presence-chooser.c:344
msgid "Click to remove this status as a favorite"
msgstr "à°ˆ à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ ఇషà±à°Ÿà°¾à°‚శమౠనà±à°‚à°¡à°¿ తీసివేయà±à°Ÿà°•à± నొకà±à°•à°‚à°¡à°¿"
-#: ../libempathy-gtk/empathy-presence-chooser.c:354
+#: ../libempathy-gtk/empathy-presence-chooser.c:353
msgid "Click to make this status a favorite"
msgstr "à°ˆ à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ ఇషà±à°Ÿà°¾à°‚శమà±à°—à°¾ చేయà±à°Ÿà°•à± నొకà±à°•à°‚à°¡à°¿"
-#: ../libempathy-gtk/empathy-presence-chooser.c:388
+#. Translators: %s is a status message like 'At the pub' for example
+#: ../libempathy-gtk/empathy-presence-chooser.c:387
+#, c-format
+msgid ""
+"<b>Current message: %s</b>\n"
+"<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"
+msgstr ""
+"<b>à°ªà±à°°à°¸à±à°¤à±à°¤ సందేశం: %s</b>\n"
+"<small><i>కొతà±à°¤ సందేశం పెటà±à°Ÿà±à°Ÿ కోసం ఎంటరౠనౠనొకà±à°•à°‚à°¡à°¿ లేదా à°°à°¦à±à°¦à± చేయడం కోసం Esc నౠనొకà±à°•à°‚à°¡à°¿. </"
+"i></small>"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:396
msgid "Set status"
msgstr "à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ అమరà±à°šà±"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:1135
+#: ../libempathy-gtk/empathy-presence-chooser.c:1147
msgid "Custom messages…"
msgstr "à°…à°¨à±à°°à±‚పిత సందేశాలà±..."
@@ -2958,31 +2967,31 @@ msgstr "à°Žà°‚à°šà±à°•à±‹à°‚à°¡à°¿..."
msgid "_Select"
msgstr "à°Žà°‚à°šà±à°•à±‹à°‚à°¡à°¿_S"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:202
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:201
msgid "No error message"
msgstr "ఠదోష సందేశమౠలేదà±"
-#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:275
+#: ../nautilus-sendto-plugin/empathy-nautilus-sendto.c:274
msgid "Instant Message (Empathy)"
msgstr "సతà±à°µà°° సందేశం (ఎంపతి)"
-#: ../src/empathy.c:435
+#: ../src/empathy.c:425
msgid "Don't connect on startup"
msgstr "à°µà±à°¯à°µà°¸à±à°¥ à°ªà±à°°à°¾à°°à°‚à°­à°®à±à°²à±‹ à°…à°¨à±à°¸à°‚ధానించవదà±à°¦à±"
-#: ../src/empathy.c:439
+#: ../src/empathy.c:429
msgid "Don't display the contact list or any other dialogs on startup"
msgstr "à°µà±à°¯à°µà°¸à±à°¥ à°ªà±à°°à°¾à°°à°‚భమయినపà±à°¡à± పరిచయ జాబితా గాని లేక ఠఇతర డైలాగà±à°²à°¨à± చూపవదà±à°¦à±"
-#: ../src/empathy.c:454
+#: ../src/empathy.c:444
msgid "- Empathy IM Client"
msgstr "- ఎంపతి IM à°•à±à°²à°¯à°¿à°‚à°Ÿà±"
-#: ../src/empathy.c:641
+#: ../src/empathy.c:620
msgid "Error contacting the Account Manager"
msgstr "ఖాతా నిరà±à°µà°¾à°¹à°•à°¾à°¨à±à°¨à°¿ సంపà±à°°à°¦à°¿à°‚à°šà±à°Ÿà°²à±‹ దోషమà±"
-#: ../src/empathy.c:643
+#: ../src/empathy.c:622
#, c-format
msgid ""
"There was an error while trying to connect to the Telepathy Account Manager. "
@@ -3039,78 +3048,78 @@ msgstr ""
#. The primary text of the dialog shown to the user when he is about to lose
#. * unsaved changes
-#: ../src/empathy-accounts-dialog.c:72
+#: ../src/empathy-accounts-dialog.c:71
#, c-format
msgid "There are unsaved modifications to your %s account."
msgstr "మీ %s ఖాతాకి à°­à°¦à±à°°à°ªà°°à±à°šà°¬à°¡à°¨à°¿ సవరణలౠఉనà±à°¨à°¾à°¯à°¿."
#. The primary text of the dialog shown to the user when he is about to lose
#. * an unsaved new account
-#: ../src/empathy-accounts-dialog.c:76
+#: ../src/empathy-accounts-dialog.c:75
msgid "Your new account has not been saved yet."
msgstr "మీ కొతà±à°¤ ఖాతా ఇంకా à°­à°¦à±à°°à°ªà°°à±à°šà°¬à°¡à°²à±‡à°¦à±."
-#: ../src/empathy-accounts-dialog.c:381
+#: ../src/empathy-accounts-dialog.c:404
#: ../src/empathy-streamed-media-window.c:759
-#: ../src/empathy-call-window.c:1289
+#: ../src/empathy-call-window.c:1267
msgid "Connecting…"
msgstr "à°…à°¨à±à°¸à°‚ధానిసà±à°¤à±à°¨à±à°¨à°¦à°¿..."
-#: ../src/empathy-accounts-dialog.c:422
+#: ../src/empathy-accounts-dialog.c:445
#, c-format
msgid "Offline — %s"
msgstr "ఆఫà±â€Œà°²à±ˆà°¨à± — %s"
-#: ../src/empathy-accounts-dialog.c:434
+#: ../src/empathy-accounts-dialog.c:457
#, c-format
msgid "Disconnected — %s"
msgstr "అననà±à°¸à°‚ధానించబడà±à°¡à°¾à°°à± — %s"
-#: ../src/empathy-accounts-dialog.c:445
+#: ../src/empathy-accounts-dialog.c:468
msgid "Offline — No Network Connection"
msgstr "ఆఫà±â€Œà°²à±ˆà°¨à± — నెటà±â€Œà°µà°°à±à°•à± à°…à°¨à±à°¸à°‚ధానం లేదà±"
-#: ../src/empathy-accounts-dialog.c:452
+#: ../src/empathy-accounts-dialog.c:475
msgid "Unknown Status"
msgstr "తెలియని à°¸à±à°¥à°¿à°¤à°¿"
-#: ../src/empathy-accounts-dialog.c:469
+#: ../src/empathy-accounts-dialog.c:492
msgid ""
"This account has been disabled because it relies on an old, unsupported "
"backend. Please install telepathy-haze and restart your session to migrate "
"the account."
msgstr "à°ˆ ఖాతా నిలిపివేయబడà±à°¤à±à°¨à±à°¨à°¦à°¿ à°Žà°‚à°¦à±à°•à°¨à°—à°¾ ఇది పాతదాని మీద ఆధారపడినది లేదా సహాయమౠలేనందà±à°¨ "
-#: ../src/empathy-accounts-dialog.c:479
+#: ../src/empathy-accounts-dialog.c:502
msgid "Offline — Account Disabled"
msgstr "ఆఫà±â€Œà°²à±ˆà°¨à± — ఖాతా అచేతనం చేయబడింది"
-#: ../src/empathy-accounts-dialog.c:585
+#: ../src/empathy-accounts-dialog.c:608
msgid "Edit Connection Parameters"
msgstr "à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à°®à°¾à°£à°¾à°²à± సవరించండి "
-#: ../src/empathy-accounts-dialog.c:750
+#: ../src/empathy-accounts-dialog.c:773
msgid "Failed to retrieve your personal information from the server."
msgstr "మీ à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ వివరణమà±à°²à± సేవికనà±à°‚à°¡à°¿ తీసà±à°•à±Šà°¨à±à°Ÿà°²à±‹ విఫలం à°…à°µà±à°¤à±à°¨à±à°¨à°¦à°¿ "
-#: ../src/empathy-accounts-dialog.c:756
+#: ../src/empathy-accounts-dialog.c:779
msgid "Go online to edit your personal information."
msgstr "మీ à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ సమాచారమà±à°¨à± సవరించà±à°Ÿà°•à± ఆనà±â€Œà°²à±ˆà°¨à± à°•à°¿ వెళà±à°³à°‚à°¡à°¿ "
-#: ../src/empathy-accounts-dialog.c:843
+#: ../src/empathy-accounts-dialog.c:866
msgid "_Edit Connection Parameters..."
msgstr "à°…à°¨à±à°¸à°‚ధాన à°ªà±à°°à°®à°¾à°£à°¾à°²à± సవరించండి_E"
-#: ../src/empathy-accounts-dialog.c:1339
+#: ../src/empathy-accounts-dialog.c:1362
#, c-format
msgid "Do you want to remove %s from your computer?"
msgstr "à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à± à°¨à±à°‚à°¡à°¿ %s నౠతీసివేదà±à°¦à°¾à°®à°¨à±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾?"
-#: ../src/empathy-accounts-dialog.c:1343
+#: ../src/empathy-accounts-dialog.c:1366
msgid "This will not remove your account on the server."
msgstr "ఇది మీ ఖాతానౠసేవకమౠనà±à°‚à°¡à°¿ తీసివేయదà±à°²à±‡à°‚à°¡à°¿."
-#: ../src/empathy-accounts-dialog.c:1579
+#: ../src/empathy-accounts-dialog.c:1571
msgid ""
"You are about to select another account, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3118,24 +3127,25 @@ msgstr ""
"మీరౠవేరే ఖాతానౠఎంచà±à°•à±‹à°¬à±‹à°¤à±à°¨à±à°¨à°¾à°°à±, అది మీ మారà±à°ªà±à°²à°¨à±\n"
"తీసివేసà±à°¤à±à°‚ది. మీరౠఖచà±à°šà°¿à°¤à°‚à°—à°¾ కొనసాగాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾?"
-#. Menu items: to enabled/disable the account
-#: ../src/empathy-accounts-dialog.c:1755
-msgid "_Enable"
-msgstr "చేతనపరà±à°šà± (_E)"
+#. Menu item: to enabled/disable the account
+#: ../src/empathy-accounts-dialog.c:1762
+msgid "_Enabled"
+msgstr "చేతనపరà±à°šà± (_E) "
-#: ../src/empathy-accounts-dialog.c:1756
-msgid "_Disable"
-msgstr "అచేతనపరà±à°šà± (_D)"
+#. Menu item: Rename
+#: ../src/empathy-accounts-dialog.c:1785
+msgid "Rename"
+msgstr "పేరౠమారà±à°šà°‚à°¡à°¿ "
-#: ../src/empathy-accounts-dialog.c:2184
+#: ../src/empathy-accounts-dialog.c:2201
msgid "_Skip"
msgstr "దాటవేయà±_S"
-#: ../src/empathy-accounts-dialog.c:2188
+#: ../src/empathy-accounts-dialog.c:2205
msgid "_Connect"
msgstr "à°…à°¨à±à°¸à°‚ధానించండి_C"
-#: ../src/empathy-accounts-dialog.c:2365
+#: ../src/empathy-accounts-dialog.c:2384
msgid ""
"You are about to close the window, which will discard\n"
"your changes. Are you sure you want to proceed?"
@@ -3162,19 +3172,19 @@ msgstr ""
msgid "No protocol backends installed"
msgstr "à°ªà±à°°à±‹à°Ÿà±‹à°•à°¾à°²à± యొకà±à°• అంతరà±à°—à°¤ విషయమà±à°²à± à°¸à±à°¥à°¾à°ªà°¿à°‚చబడిలేదà±"
-#: ../src/empathy-auth-client.c:288
+#: ../src/empathy-auth-client.c:286
msgid " - Empathy authentication client"
msgstr "- ఎంపతి à°ªà±à°°à°¾à°®à°¾à°£à±€à°•à°°à°£ à°•à±à°²à°¯à°¿à°‚à°Ÿà±"
-#: ../src/empathy-auth-client.c:304
+#: ../src/empathy-auth-client.c:302
msgid "Empathy authentication client"
msgstr "ఎంపతి à°ªà±à°°à°¾à°®à°¾à°£à±€à°•à°°à°£ à°•à±à°²à°¯à°¿à°‚à°Ÿà±"
-#: ../src/empathy-av.c:118 ../src/empathy-call.c:201
+#: ../src/empathy-av.c:115 ../src/empathy-call.c:198
msgid "- Empathy Audio/Video Client"
msgstr "- ఎంపతి ఆడియో/వీడియో à°•à±à°²à°¯à°¿à°‚à°Ÿà±"
-#: ../src/empathy-av.c:134 ../src/empathy-call.c:223
+#: ../src/empathy-av.c:131 ../src/empathy-call.c:220
msgid "Empathy Audio/Video Client"
msgstr "ఎంపతి ఆడియో/వీడియో à°•à±à°²à°¯à°¿à°‚à°Ÿà±"
@@ -3217,33 +3227,33 @@ msgstr "వివరాలà±"
#. translators: Call is a noun and %s is the contact name. This string
#. * is used in the window title
#: ../src/empathy-streamed-media-window.c:1211
-#: ../src/empathy-call-window.c:1889
+#: ../src/empathy-call-window.c:1861
#, c-format
msgid "Call with %s"
msgstr "%sతో కాలౠచేయి"
#: ../src/empathy-streamed-media-window.c:1444
-#: ../src/empathy-call-window.c:2133
+#: ../src/empathy-call-window.c:2105
msgid "The IP address as seen by the machine"
msgstr "యంతà±à°°à°®à±à°¤à±‹ చూడబడిన IP à°šà°¿à°°à±à°¨à°¾à°®à°¾"
#: ../src/empathy-streamed-media-window.c:1446
-#: ../src/empathy-call-window.c:2135
+#: ../src/empathy-call-window.c:2107
msgid "The IP address as seen by a server on the Internet"
msgstr "అంతరà±à°œà°¾à°²à°‚తో à°’à°• సేవకమà±à°¤à±‹ చూడబడిన IP à°šà°¿à°°à±à°¨à°¾à°®à°¾"
#: ../src/empathy-streamed-media-window.c:1448
-#: ../src/empathy-call-window.c:2137
+#: ../src/empathy-call-window.c:2109
msgid "The IP address of the peer as seen by the other side"
msgstr "ఇతర వైపౠకనిపించే పీరౠయొకà±à°• IP à°šà°¿à°°à±à°¨à°¾à°®à°¾"
#: ../src/empathy-streamed-media-window.c:1450
-#: ../src/empathy-call-window.c:2139
+#: ../src/empathy-call-window.c:2111
msgid "The IP address of a relay server"
msgstr "రిలే సేవకమౠయొకà±à°• IP à°šà°¿à°°à±à°¨à°¾à°®à°¾"
#: ../src/empathy-streamed-media-window.c:1452
-#: ../src/empathy-call-window.c:2141
+#: ../src/empathy-call-window.c:2113
msgid "The IP address of the multicast group"
msgstr "బహà±à°³à°ªà±à°°à°¸à°¾à°° à°—à±à°‚పౠయొకà±à°• IP à°šà°¿à°°à±à°¨à°¾à°®à°¾"
@@ -3262,12 +3272,12 @@ msgid "Connected — %d:%02dm"
msgstr "à°…à°¨à±à°¸à°‚ధానించబడింది — %d:%02dm"
#: ../src/empathy-streamed-media-window.c:2199
-#: ../src/empathy-call-window.c:2992
+#: ../src/empathy-call-window.c:2964
msgid "Technical Details"
msgstr "సాంకేతిక వివరాలà±"
#: ../src/empathy-streamed-media-window.c:2237
-#: ../src/empathy-call-window.c:3031
+#: ../src/empathy-call-window.c:3003
#, c-format
msgid ""
"%s's software does not understand any of the audio formats supported by your "
@@ -3275,7 +3285,7 @@ msgid ""
msgstr "మీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±à°šà±‡ సహకరించబడà±à°¤à±à°¨à±à°¨ ఠఆడియో ఫారà±à°®à±‡à°Ÿà±à°²à°¨à± %s సాఫà±à°Ÿà±â€Œà°µà±‡à°°à± à°…à°°à±à°¥à°‚చేసà±à°•à±‹à°²à±‡à°•à°ªà±‹à°¤à±à°¨à±à°¨à°¦à°¿"
#: ../src/empathy-streamed-media-window.c:2242
-#: ../src/empathy-call-window.c:3036
+#: ../src/empathy-call-window.c:3008
#, c-format
msgid ""
"%s's software does not understand any of the video formats supported by your "
@@ -3283,7 +3293,7 @@ msgid ""
msgstr "% s యొకà±à°• సాఫà±à°Ÿà±à°µà±‡à°°à± మీ à°•à°‚à°ªà±à°¯à±‚టరౠమదà±à°¦à°¤à± వీడియో ఫారà±à°®à°¾à°Ÿà±à°²à°²à±‹ à°…à°°à±à°¥à°‚ లేదà±"
#: ../src/empathy-streamed-media-window.c:2248
-#: ../src/empathy-call-window.c:3042
+#: ../src/empathy-call-window.c:3014
#, c-format
msgid ""
"Can't establish a connection to %s. One of you might be on a network that "
@@ -3293,24 +3303,24 @@ msgstr ""
"ఉండి à°µà±à°‚డవచà±à°šà±à°¨à±."
#: ../src/empathy-streamed-media-window.c:2254
-#: ../src/empathy-call-window.c:3048
+#: ../src/empathy-call-window.c:3020
msgid "There was a failure on the network"
msgstr "నెటà±â€Œà°µà°°à±à°•à± నందౠవైఫలà±à°¯à°®à± ఉనà±à°¨à°¦à°¿"
#: ../src/empathy-streamed-media-window.c:2258
-#: ../src/empathy-call-window.c:3052
+#: ../src/empathy-call-window.c:3024
msgid ""
"The audio formats necessary for this call are not installed on your computer"
msgstr "à°ˆ కాలà±â€Œà°•à°¿ అవసరమైన ఆడియో ఫారà±à°®à±‡à°Ÿà±à°²à± మీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°²à±‹ à°¸à±à°¥à°¾à°ªà°¿à°‚చబడిలేవà±"
#: ../src/empathy-streamed-media-window.c:2261
-#: ../src/empathy-call-window.c:3055
+#: ../src/empathy-call-window.c:3027
msgid ""
"The video formats necessary for this call are not installed on your computer"
msgstr "à°ˆ కాలà±â€Œà°•à°¿ అవసరమైన వీడియో ఫారà±à°®à±‡à°Ÿà±à°²à± మీ à°•à°‚à°ªà±à°¯à±‚à°Ÿà°°à±â€Œà°²à±‹ à°¸à±à°¥à°¾à°ªà°¿à°‚చబడిలేవà±"
#: ../src/empathy-streamed-media-window.c:2271
-#: ../src/empathy-call-window.c:3067
+#: ../src/empathy-call-window.c:3039
#, c-format
msgid ""
"Something unexpected happened in a Telepathy component. Please <a href=\"%s"
@@ -3321,22 +3331,22 @@ msgstr ""
"సహాయం మెనౠలో 'డీబగà±' విండో à°¨à±à°‚à°¡à°¿ సేకరించిన లాగà±à°²à°¨à± అటాచà±."
#: ../src/empathy-streamed-media-window.c:2279
-#: ../src/empathy-call-window.c:3076
+#: ../src/empathy-call-window.c:3048
msgid "There was a failure in the call engine"
msgstr "కాలౠఇంజనà±à°²à±‹ à°’à°• వైఫలà±à°¯à°®à± ఉనà±à°¨à°¦à°¿"
#: ../src/empathy-streamed-media-window.c:2282
-#: ../src/empathy-call-window.c:3079
+#: ../src/empathy-call-window.c:3051
msgid "The end of the stream was reached"
msgstr "à°ªà±à°°à°µà°¾à°¹à°®à± చివరకౠచేరà±à°•à±à°¨à±à°¨à°¦à°¿"
#: ../src/empathy-streamed-media-window.c:2322
-#: ../src/empathy-call-window.c:3119
+#: ../src/empathy-call-window.c:3091
msgid "Can't establish audio stream"
msgstr "ఆడియో à°ªà±à°°à°µà°¾à°¹à°¾à°¨à±à°¨à°¿ à°¸à±à°¥à°¾à°ªà°¿à°‚చలేకపోతà±à°‚ది"
#: ../src/empathy-streamed-media-window.c:2332
-#: ../src/empathy-call-window.c:3129
+#: ../src/empathy-call-window.c:3101
msgid "Can't establish video stream"
msgstr "వీడియో à°ªà±à°°à°µà°¾à°¹à°¾à°¨à±à°¨à°¿ à°¸à±à°¥à°¾à°ªà°¿à°‚చలేకపోతà±à°‚ది"
@@ -3449,8 +3459,8 @@ msgstr "à°Žà°¨à±à°•à±‹à°¡à°¿à°‚గౠకొడెకà±:"
#: ../src/empathy-call-window.ui.h:28
#: ../src/empathy-streamed-media-window.ui.h:21
-#: ../src/empathy-call-window.c:2542 ../src/empathy-call-window.c:2543
-#: ../src/empathy-call-window.c:2544 ../src/empathy-call-window.c:2545
+#: ../src/empathy-call-window.c:2514 ../src/empathy-call-window.c:2515
+#: ../src/empathy-call-window.c:2516 ../src/empathy-call-window.c:2517
msgid "Unknown"
msgstr "తెలియదà±"
@@ -3474,11 +3484,11 @@ msgstr "à°¸à±à°¥à°¾à°¨à°¿à°• à°…à°­à±à°¯à°°à±à°§à°¿:"
msgid "Audio"
msgstr "ఆడియో"
-#: ../src/empathy-chat-window.c:289
+#: ../src/empathy-chat-window.c:288
msgid "Close this window?"
msgstr "à°ˆ విండోనౠమూయà±à°®à±?"
-#: ../src/empathy-chat-window.c:294
+#: ../src/empathy-chat-window.c:293
#, c-format
msgid ""
"Closing this window will leave %s. You will not receive any further messages "
@@ -3487,7 +3497,7 @@ msgstr ""
"మీరౠబయటకి వెళà±à°³à±à°¨à°ªà±à°ªà±à°¡à± à°ˆ విండోనౠమూయà±à°®à± %s. తరà±à°µà°¾à°¤à°¿ సందేశమà±à°²à± మీరౠపొందలేరà±à°®à±€à°°à± మరలా "
"వచà±à°šà±à°µà°°à°•à±"
-#: ../src/empathy-chat-window.c:305
+#: ../src/empathy-chat-window.c:304
#, c-format
msgid ""
"Closing this window will leave a chat room. You will not receive any further "
@@ -3502,66 +3512,66 @@ msgstr[1] ""
"మీరౠబయటకి వెళà±à°³à±à°¨à°ªà±à°ªà±à°¡à± %u చాటౠగదà±à°²à°¨à± మూయà±à°®à±. తరà±à°µà°¾à°¤à°¿ సందేశమà±à°²à± మీరౠపొందలేరà±à°®à±€à°°à± మరలా "
"వచà±à°šà±à°µà°°à°•à± "
-#: ../src/empathy-chat-window.c:314
+#: ../src/empathy-chat-window.c:313
#, c-format
msgid "Leave %s?"
msgstr "%s à°¸à±à°¥à°¾à°¯à°¿ ?"
-#: ../src/empathy-chat-window.c:315
+#: ../src/empathy-chat-window.c:314
msgid ""
"You will not receive any further messages from this chat room until you "
"rejoin it."
msgstr ""
"మీరౠమరలా వచà±à°šà±à°µà°°à°•à± à°ˆ ఛాటౠగది à°¨à±à°‚à°¡à°¿ తరà±à°µà°¾à°¤à°¿ సందేశమà±à°²à± మీరౠపొందలేరౠమీరౠమరలా వచà±à°šà±à°µà°°à°•à±"
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Close window"
msgstr "విండోనౠమూయà±à°®à± "
-#: ../src/empathy-chat-window.c:334
+#: ../src/empathy-chat-window.c:333
msgid "Leave room"
msgstr "గదిని వదలండి "
-#: ../src/empathy-chat-window.c:640 ../src/empathy-chat-window.c:660
+#: ../src/empathy-chat-window.c:639 ../src/empathy-chat-window.c:659
#, c-format
msgid "%s (%d unread)"
msgid_plural "%s (%d unread)"
msgstr[0] "%s (%d à°šà°¦à±à°µà°¨à°¿à°¦à°¿)"
msgstr[1] "%s (%d à°šà°¦à±à°µà°¨à°¿à°µà°¿)"
-#: ../src/empathy-chat-window.c:652
+#: ../src/empathy-chat-window.c:651
#, c-format
msgid "%s (and %u other)"
msgid_plural "%s (and %u others)"
msgstr[0] "%s (మరియౠ%u ఇతర)"
msgstr[1] "%s (మరియౠ%u ఇతరాలà±)"
-#: ../src/empathy-chat-window.c:668
+#: ../src/empathy-chat-window.c:667
#, c-format
msgid "%s (%d unread from others)"
msgid_plural "%s (%d unread from others)"
msgstr[0] "%s (%d ఇతరà±à°² à°¨à±à°‚à°¡à°¿ చదవనివి)"
msgstr[1] "%s (%d ఇతరà±à°² à°¨à±à°‚à°¡à°¿ చదవనివి)"
-#: ../src/empathy-chat-window.c:677
+#: ../src/empathy-chat-window.c:676
#, c-format
msgid "%s (%d unread from all)"
msgid_plural "%s (%d unread from all)"
msgstr[0] "%s (%d à°…à°¨à±à°¨à°¿à°Ÿà°¿à°¨à°¿ à°¨à±à°‚à°¡à°¿ చదవనివి)"
msgstr[1] "%s (%d à°…à°¨à±à°¨à°¿à°Ÿà°¿à°¨à°¿ à°¨à±à°‚à°¡à°¿ చదవనివి)"
-#: ../src/empathy-chat-window.c:892
+#: ../src/empathy-chat-window.c:891
msgid "SMS:"
msgstr "SMS:"
-#: ../src/empathy-chat-window.c:902
+#: ../src/empathy-chat-window.c:901
#, c-format
msgid "Sending %d message"
msgid_plural "Sending %d messages"
msgstr[0] "%d సందేశమà±à°¨à± పంపà±à°¤à±à°¨à±à°¨à°¦à°¿"
msgstr[1] "%d సందేశాలనౠపంపà±à°¤à±à°¨à±à°¨à°¦à°¿"
-#: ../src/empathy-chat-window.c:924
+#: ../src/empathy-chat-window.c:923
msgid "Typing a message."
msgstr "à°’à°• సందేశమà±à°¨à± టైపౠచేసà±à°¤à±à°¨à±à°¨à°¾à°°à±."
@@ -3645,7 +3655,7 @@ msgstr "ఇషà±à°Ÿà°®à±ˆà°¨ à°—à°¦à±à°²à°¨à± నిరà±à°µà°¹à°¿à°‚à°šà±"
msgid "Incoming video call"
msgstr "లోనికివచà±à°šà± వీడియో కాలà±"
-#: ../src/empathy-event-manager.c:522 ../src/empathy-call-window.c:1519
+#: ../src/empathy-event-manager.c:522 ../src/empathy-call-window.c:1483
msgid "Incoming call"
msgstr "లోనికివచà±à°šà± కాలà±"
@@ -3660,7 +3670,7 @@ msgid "%s is calling you. Do you want to answer?"
msgstr "%s మీకౠకాలౠచేసà±à°¤à±à°¨à±à°¨à°¾à°°à±. మీరౠసమాధానమివà±à°µà°¾à°²à°¨à±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾?"
#: ../src/empathy-event-manager.c:530 ../src/empathy-event-manager.c:731
-#: ../src/empathy-event-manager.c:764 ../src/empathy-call-window.c:1525
+#: ../src/empathy-event-manager.c:764 ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming call from %s"
msgstr "%s à°¨à±à°‚à°¡à°¿ లోనికి కాలౠవసà±à°¤à±à°¨à±à°¨à°¦à°¿"
@@ -3678,7 +3688,7 @@ msgid "_Answer with video"
msgstr "వీడియోతో జవాబà±à°µà±à°µà°‚à°¡à°¿ (_A)"
#: ../src/empathy-event-manager.c:731 ../src/empathy-event-manager.c:764
-#: ../src/empathy-call-window.c:1525
+#: ../src/empathy-call-window.c:1489
#, c-format
msgid "Incoming video call from %s"
msgstr "%s à°¨à±à°‚à°¡à°¿ వీడియో కాలౠవసà±à°¤à±à°¨à±à°¨à°¦à°¿"
@@ -3721,7 +3731,7 @@ msgstr "%s లో చేరà±à°Ÿà°•à± మీరౠఆహà±à°µà°¾à°¨à°¿à°‚à°š
msgid "Incoming file transfer from %s"
msgstr "%s à°¨à±à°‚à°¡à°¿ వచà±à°šà±à°šà±à°¨à±à°¨ ఫైలౠబదిలీకరణ"
-#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:374
+#: ../src/empathy-event-manager.c:1146 ../src/empathy-roster-window.c:373
msgid "Password required"
msgstr "సంకేతపదం అవసరం"
@@ -3867,86 +3877,86 @@ msgid "Import Accounts"
msgstr "ఖాతాలనౠదిగà±à°®à°¤à°¿à°šà±‡à°¯à°¿"
#. Translators: this is the header of a treeview column
-#: ../src/empathy-import-widget.c:316
+#: ../src/empathy-import-widget.c:303
msgid "Import"
msgstr "దిగà±à°®à°¤à°¿à°šà±‡à°¯à°¿"
-#: ../src/empathy-import-widget.c:325
+#: ../src/empathy-import-widget.c:312
msgid "Protocol"
msgstr "à°ªà±à°°à±‹à°Ÿà±‹à°•à°¾à°²à±"
-#: ../src/empathy-import-widget.c:349
+#: ../src/empathy-import-widget.c:336
msgid "Source"
msgstr "మూలమà±"
-#: ../src/empathy-roster-window.c:391
+#: ../src/empathy-roster-window.c:390
msgid "Provide Password"
msgstr "సంకేతపదానà±à°¨à°¿ సమకూరà±à°šà±"
-#: ../src/empathy-roster-window.c:397
+#: ../src/empathy-roster-window.c:396
msgid "Disconnect"
msgstr "అననà±à°¸à°‚ధానించà±"
-#: ../src/empathy-roster-window.c:657
+#: ../src/empathy-roster-window.c:656
msgid "You need to setup an account to see contacts here."
msgstr "మీరౠఇకà±à°•à°¡ à°šà°¿à°°à±à°¨à°¾à°®à°¾à°²à± చూడà±à°Ÿà°•à±Šà°°à°•à± ఖాతానౠపొందà±à°ªà°°à°šà°‚à°¡à°¿"
-#: ../src/empathy-roster-window.c:673
+#: ../src/empathy-roster-window.c:672
msgid "No match found"
msgstr "సరిపోలినది కనపడలేదà±"
-#: ../src/empathy-roster-window.c:783
+#: ../src/empathy-roster-window.c:782
#, c-format
msgid "Sorry, %s accounts can’t be used until your %s software is updated."
msgstr "à°•à±à°·à°®à°¿à°‚à°šà°‚à°¡à°¿, మీరౠ%sసాపà±à°Ÿà± వేరౠనవీకరించà±à°µà°°à°•à± %s ఖాతా వివరమà±à°²à± చూడలేరౠ"
-#: ../src/empathy-roster-window.c:849
+#: ../src/empathy-roster-window.c:848
msgid "Update software..."
msgstr "సాపà±à°Ÿà± వేరౠనవీకరించà±à°Ÿ..."
-#: ../src/empathy-roster-window.c:855 ../src/empathy-roster-window.c:972
+#: ../src/empathy-roster-window.c:854 ../src/empathy-roster-window.c:971
msgid "Close"
msgstr "మూసివేయి"
-#: ../src/empathy-roster-window.c:960
+#: ../src/empathy-roster-window.c:959
msgid "Reconnect"
msgstr "తిరిగి à°…à°¨à±à°¸à°‚ధానించà±"
-#: ../src/empathy-roster-window.c:966
+#: ../src/empathy-roster-window.c:965
msgid "Edit Account"
msgstr "ఖాతానౠసవరించà±"
#. Translators: this string will be something like:
#. * Top up My Account ($1.23)..."
-#: ../src/empathy-roster-window.c:1110
+#: ../src/empathy-roster-window.c:1109
#, c-format
msgid "Top up %s (%s)..."
msgstr "టాపౠఅపౠ%s (%s)..."
-#: ../src/empathy-roster-window.c:1156
+#: ../src/empathy-roster-window.c:1155
msgid "Top up account credit"
msgstr "టాపౠఅపౠఖాతా à°•à±à°°à±†à°¡à°¿à°Ÿà±"
#. top up button
-#: ../src/empathy-roster-window.c:1228
+#: ../src/empathy-roster-window.c:1227
msgid "Top Up..."
msgstr "టాపౠఅపà±..."
-#: ../src/empathy-roster-window.c:1952
+#: ../src/empathy-roster-window.c:1951
msgid "Contact"
msgstr "à°šà°¿à°°à±à°¨à°¾à°®à°¾"
-#: ../src/empathy-roster-window.c:2150
+#: ../src/empathy-roster-window.c:2149
msgid "You need to enable one of your accounts to see contacts here."
msgstr "మీరౠఇకà±à°•à°¡ ఖాతాలౠచూడà±à°Ÿà°•à±Šà°°à°•à± à°’à°• ఖాతానైన à°ªà±à°°à°¾à°°à°‚à°­à°¿à°‚à°šà°‚à°¡à°¿ "
#. translators: argument is an account name
-#: ../src/empathy-roster-window.c:2158
+#: ../src/empathy-roster-window.c:2157
#, c-format
msgid "You need to enable %s to see contacts here."
msgstr "మీరౠఖాతాలౠచూడà±à°Ÿà°•à±Šà°°à°•à± ఖాతానౠపà±à°°à°¾à°°à°‚à°­à°¿à°‚à°šà°‚à°¡à°¿ %s"
-#: ../src/empathy-roster-window.c:2460
+#: ../src/empathy-roster-window.c:2459
msgid "Contact List"
msgstr "పరిచయమà±à°² జాబితా"
@@ -4050,7 +4060,7 @@ msgstr "సభà±à°¯à±à°²à±"
#. Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
#. yes/no, yes/no and a number.
-#: ../src/empathy-new-chatroom-dialog.c:637
+#: ../src/empathy-new-chatroom-dialog.c:636
#, c-format
msgid ""
"%s\n"
@@ -4063,21 +4073,21 @@ msgstr ""
"సంకేతపదమౠఅవసరం: %s\n"
"సభà±à°¯à±à°²à±: %s"
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "Yes"
msgstr "à°…à°µà±à°¨à±"
+#: ../src/empathy-new-chatroom-dialog.c:638
#: ../src/empathy-new-chatroom-dialog.c:639
-#: ../src/empathy-new-chatroom-dialog.c:640
msgid "No"
msgstr "కాదà±"
-#: ../src/empathy-new-chatroom-dialog.c:668
+#: ../src/empathy-new-chatroom-dialog.c:666
msgid "Could not start room listing"
msgstr "గది జాబితాకరణనౠపà±à°°à°¾à°°à°‚భించలేకపోయింది"
-#: ../src/empathy-new-chatroom-dialog.c:678
+#: ../src/empathy-new-chatroom-dialog.c:676
msgid "Could not stop room listing"
msgstr "గది జాబితాకరణనౠఆపలేకపోయింది"
@@ -4142,46 +4152,46 @@ msgid "Language"
msgstr "భాష"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:726
+#: ../src/empathy-preferences.c:724
msgid "Juliet"
msgstr "జూలియటà±"
#. translators: Contact name for the chat theme preview
-#: ../src/empathy-preferences.c:733
+#: ../src/empathy-preferences.c:731
msgid "Romeo"
msgstr "రోమియో"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:739
+#: ../src/empathy-preferences.c:737
msgid "O Romeo, Romeo, wherefore art thou Romeo?"
msgstr "à°“ రోమియో, రోమియో, à°Žà°•à±à°•à°¡à±à°¨à±à°¨à°¾à°µà± రోమియో?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:743
+#: ../src/empathy-preferences.c:741
msgid "Deny thy father and refuse thy name;"
msgstr "నీ తండà±à°°à°¿ తిరసà±à°•à°°à°¿à°‚చౠమరియౠనీ పేరౠతిరసà±à°•à°°à°¿à°‚చవచà±à°šà±;"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:746
+#: ../src/empathy-preferences.c:744
msgid "Or if thou wilt not, be but sworn my love"
msgstr "లేదా నీవౠవిలà±à°Ÿà± లేకపోతే, కానీ నా à°ªà±à°°à±‡à°® à°ªà±à°°à°®à°¾à°£ à°¸à±à°µà±€à°•à°¾à°°à°‚"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:749
+#: ../src/empathy-preferences.c:747
msgid "And I'll no longer be a Capulet."
msgstr "నేనౠఇకపై ఒక Capulet ఉంటాం."
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:752
+#: ../src/empathy-preferences.c:750
msgid "Shall I hear more, or shall I speak at this?"
msgstr "నేనింకా à°Žà°•à±à°•à±à°µ వినాలా, లేక నేనౠఇక మాటà±à°²à°¾à°¡à°µà°šà±à°šà°¾?"
#. translators: Quote from Romeo & Julier, for chat theme preview
-#: ../src/empathy-preferences.c:755
+#: ../src/empathy-preferences.c:753
msgid "Juliet has disconnected"
msgstr "జూలియటౠఅననà±à°¸à°‚ధానించింది"
-#: ../src/empathy-preferences.c:1159
+#: ../src/empathy-preferences.c:1157
msgid "Preferences"
msgstr "à°ªà±à°°à°¾à°§à°¾à°¨à±à°¯à°¤à°²à±"
@@ -4486,16 +4496,16 @@ msgid ""
"extension."
msgstr "à°Žà°‚à°šà±à°•à±à°¨à±à°¨ à°…à°¨à±à°¸à°‚ధాన నిరà±à°µà°¾à°¹à°•à°®à± దూరసà±à°¥ దోషశà±à°¦à±à°§à°¿à°šà±‡à°¸à±‡ పొడిగింపà±à°•à± సహకరించà±à°Ÿà°²à±‡à°¦à±."
-#: ../src/empathy-invite-participant-dialog.c:202
-#: ../src/empathy-invite-participant-dialog.c:230
+#: ../src/empathy-invite-participant-dialog.c:200
+#: ../src/empathy-invite-participant-dialog.c:228
msgid "Invite Participant"
msgstr "భాగసà±à°µà°¾à°®à°¿à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
-#: ../src/empathy-invite-participant-dialog.c:203
+#: ../src/empathy-invite-participant-dialog.c:201
msgid "Choose a contact to invite into the conversation:"
msgstr "సంభాషణలోకి ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±à°Ÿà°•à± à°’à°• పరిచయానà±à°¨à°¿ à°Žà°¨à±à°¨à±à°•à±‹à°‚à°¡à°¿:"
-#: ../src/empathy-invite-participant-dialog.c:226
+#: ../src/empathy-invite-participant-dialog.c:224
msgid "Invite"
msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
@@ -4520,7 +4530,7 @@ msgstr "<account-id>"
msgid "- Empathy Accounts"
msgstr "- ఎంపతి ఖాతాలà±"
-#: ../src/empathy-accounts.c:231
+#: ../src/empathy-accounts.c:230
msgid "Empathy Accounts"
msgstr "ఎంపతి ఖాతాలà±"
@@ -4532,47 +4542,47 @@ msgstr "à°’à°• నిరà±à°¦à°¿à°·à±à°Ÿ సేవ చూపించà±"
msgid "- Empathy Debugger"
msgstr "- తాదాతà±à°®à±à°¯à°‚ డీబగà±à°—à°°à±"
-#: ../src/empathy-debugger.c:113
+#: ../src/empathy-debugger.c:112
msgid "Empathy Debugger"
msgstr "ఎంపతి దోష à°¶à±à°¦à±à°¦à°¿à°šà±‡à°¸à±‡à°¦à°¿"
-#: ../src/empathy-chat.c:109
+#: ../src/empathy-chat.c:106
msgid "- Empathy Chat Client"
msgstr "- ఎంపతి చాటౠకà±à°²à°¯à°¿à°‚à°Ÿà±"
-#: ../src/empathy-notifications-approver.c:189
+#: ../src/empathy-notifications-approver.c:190
msgid "Respond"
msgstr "à°¸à±à°ªà°‚దించà±"
-#: ../src/empathy-notifications-approver.c:203
-#: ../src/empathy-call-window.c:1529
+#: ../src/empathy-notifications-approver.c:204
+#: ../src/empathy-call-window.c:1493
msgid "Reject"
msgstr "తిరసà±à°•à°°à°¿à°‚à°šà±"
-#: ../src/empathy-notifications-approver.c:208
-#: ../src/empathy-notifications-approver.c:213
-#: ../src/empathy-call-window.c:1530
+#: ../src/empathy-notifications-approver.c:209
+#: ../src/empathy-notifications-approver.c:214
+#: ../src/empathy-call-window.c:1494
msgid "Answer"
msgstr "సమాధానమివà±à°µà±"
-#: ../src/empathy-notifications-approver.c:213
+#: ../src/empathy-notifications-approver.c:214
msgid "Answer with video"
msgstr "వీడియో తో సమాధానం"
-#: ../src/empathy-notifications-approver.c:221
-#: ../src/empathy-notifications-approver.c:231
+#: ../src/empathy-notifications-approver.c:222
+#: ../src/empathy-notifications-approver.c:232
msgid "Decline"
msgstr "నిరాకరించà±"
-#: ../src/empathy-notifications-approver.c:225
-#: ../src/empathy-notifications-approver.c:236
+#: ../src/empathy-notifications-approver.c:226
+#: ../src/empathy-notifications-approver.c:237
msgid "Accept"
msgstr "అంగీకరించà±"
#. translators: the 'Provide' button is displayed in a notification
#. * bubble when Empathy is asking for an account password; clicking on it
#. * brings the password popup.
-#: ../src/empathy-notifications-approver.c:246
+#: ../src/empathy-notifications-approver.c:247
msgid "Provide"
msgstr "సమకూరà±à°šà±"
@@ -4583,38 +4593,38 @@ msgstr "%s ఇపà±à°ªà±à°¡à±‡ కాలౠచేయడానికి à°ªà±
#. Translators: this is an "Info" label. It should be as short
#. * as possible.
-#: ../src/empathy-call-window.c:1140 ../src/empathy-call-window.c:1162
+#: ../src/empathy-call-window.c:1124 ../src/empathy-call-window.c:1140
msgid "i"
msgstr " నెనà±"
-#: ../src/empathy-call-window.c:2888
+#: ../src/empathy-call-window.c:2860
msgid "On hold"
msgstr "లొ దచà±"
-#: ../src/empathy-call-window.c:2891
+#: ../src/empathy-call-window.c:2863
msgid "Mute"
msgstr "నిశబà±à°¦à°‚"
-#: ../src/empathy-call-window.c:2893
+#: ../src/empathy-call-window.c:2865
msgid "Duration"
msgstr "నిడివి"
#. Translators: 'status - minutes:seconds' the caller has been connected
-#: ../src/empathy-call-window.c:2896
+#: ../src/empathy-call-window.c:2868
#, c-format
msgid "%s — %d:%02dm"
msgstr "%s — %d:%02dm"
-#: ../src/empathy-call-window.c:3166
+#: ../src/empathy-call-window.c:3138
#, c-format
msgid "Your current balance is %s."
msgstr "మీ యొకà±à°• రొకà±à°•à°®à± %s"
-#: ../src/empathy-call-window.c:3170
+#: ../src/empathy-call-window.c:3142
msgid "Sorry, you don’t have enough credit for that call."
msgstr "మీరౠసంభాషించà±à°Ÿà°•à± సరిపోయినంత రొకà±à°•à°®à± లేదౠ"
-#: ../src/empathy-call-window.c:3172
+#: ../src/empathy-call-window.c:3144
msgid "Top Up"
msgstr "టాపౠఅపà±..."
@@ -4652,6 +4662,9 @@ msgstr ""
"మీరౠ<span నౠఎంచà±à°•à±Šà°¨à±à°Ÿ à°¦à±à°µà°¾à°° à°ˆ లకà±à°·à°£à°®à± యొకà±à°• వివరమà±à°²à°¨à± తరà±à°µà°¾à°¤ మారà±à°šà°‚à°¡à°¿ లేదా అచేతనమౠచేయండి "
"style=\"italic\">Edit → ఖాతాలà±</span> à°šà°¿à°°à±à°¨à°¾à°®à°¾ జాబితాలో"
+#~ msgid "_Disable"
+#~ msgstr "అచేతనపరà±à°šà± (_D)"
+
#~| msgid "%s:"
#~ msgid "%s"
#~ msgstr "%s:"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 13bbbf49f..21c395f3a 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -28,7 +28,7 @@ msgstr ""
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=empathy&keywords=I18N+L10N&component=General\n"
"POT-Creation-Date: 2012-03-16 10:47+0000\n"
-"PO-Revision-Date: 2012-04-11 16:40+0000\n"
+"PO-Revision-Date: 2012-04-11 16:38+0000\n"
"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"MIME-Version: 1.0\n"
diff --git a/release.py b/release.py
index bfa71e6ed..9e668346b 100755
--- a/release.py
+++ b/release.py
@@ -9,7 +9,7 @@ import time
from string import Template
from optparse import OptionParser
-last_tag_pattern = 'EMPATHY_3_4*'
+last_tag_pattern = 'EMPATHY_3_5*'
upload_server = 'master.gnome.org'
template = '''\
$name $version is now available for download from:
diff --git a/src/Makefile.am b/src/Makefile.am
index dc85dd9ca..01de664b0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -74,38 +74,6 @@ empathy_debugger_SOURCES = \
empathy-debugger.c \
$(NULL)
-if HAVE_EMPATHY_AV
-empathy_av_SOURCES = \
- empathy-av.c \
- empathy-audio-sink.c \
- empathy-audio-sink.h \
- empathy-audio-src.c \
- empathy-audio-src.h \
- empathy-streamed-media-factory.c \
- empathy-streamed-media-factory.h \
- empathy-streamed-media-handler.c \
- empathy-streamed-media-handler.h \
- empathy-streamed-media-window-fullscreen.c \
- empathy-streamed-media-window-fullscreen.h \
- empathy-streamed-media-window.c \
- empathy-streamed-media-window.h \
- empathy-video-src.c \
- empathy-video-src.h \
- empathy-video-widget.c \
- empathy-video-widget.h \
- ev-sidebar.c \
- ev-sidebar.h \
- empathy-mic-monitor.c \
- empathy-mic-monitor.h
- $(NULL)
-
-empathy_av_CFLAGS = $(EMPATHY_AV_CFLAGS)
-empathy_av_LDFLAGS = $(EMPATHY_AV_LIBS) $(LIBM)
-
-libexec_PROGRAMS += empathy-av
-
-endif
-
empathy_auth_client_SOURCES = \
empathy-sanity-cleaning.c empathy-sanity-cleaning.h \
empathy-auth-client.c \
@@ -138,8 +106,6 @@ empathy_call_SOURCES = \
empathy-audio-src.h \
empathy-video-src.c \
empathy-video-src.h \
- empathy-video-widget.c \
- empathy-video-widget.h \
empathy-preferences.c \
empathy-preferences.h \
empathy-camera-menu.c \
@@ -206,7 +172,6 @@ ui_DATA = \
empathy-accounts-dialog.ui \
empathy-call-window-fullscreen.ui \
empathy-call-window.ui \
- empathy-streamed-media-window.ui \
empathy-chat-window.ui \
empathy-chatrooms-window.ui \
empathy-ft-manager.ui \
@@ -221,20 +186,6 @@ EXTRA_DIST = \
$(autostart_DATA) \
$(ui_DATA)
-if HAVE_LIBCHAMPLAIN
-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 = \
empathy.1 \
empathy-accounts.1
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c
index 0e004f5a5..4de6911e1 100644
--- a/src/empathy-accounts-dialog.c
+++ b/src/empathy-accounts-dialog.c
@@ -40,9 +40,7 @@
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-connection-managers.h>
-#include <libempathy/empathy-connectivity.h>
#include <libempathy/empathy-pkg-kit.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy-gtk/empathy-ui-utils.h>
#include <libempathy-gtk/empathy-protocol-chooser.h>
@@ -97,6 +95,7 @@ typedef struct {
GtkWidget *enabled_switch;
GtkWidget *treeview;
+ GtkCellRenderer *name_renderer;
GtkWidget *button_add;
GtkWidget *button_remove;
@@ -123,7 +122,7 @@ typedef struct {
* That's kinda ugly; cf bgo #640417.
*
* */
- EmpathyAccountWidget *setting_widget_object;
+ EmpathyAccountWidget *setting_widget;
gboolean connecting_show;
guint connecting_id;
@@ -133,7 +132,7 @@ typedef struct {
TpAccountManager *account_manager;
EmpathyConnectionManagers *cms;
- EmpathyConnectivity *connectivity;
+ GNetworkMonitor *connectivity;
GtkWindow *parent_window;
TpAccount *initial_selection;
@@ -463,7 +462,7 @@ accounts_dialog_update_status_infobar (EmpathyAccountsDialog *dialog,
g_free (message);
}
- if (!empathy_connectivity_is_online (priv->connectivity))
+ if (!g_network_monitor_get_network_available (priv->connectivity))
accounts_dialog_status_infobar_set_message (dialog,
_("Offline — No Network Connection"));
@@ -540,7 +539,7 @@ empathy_account_dialog_cancel (EmpathyAccountsDialog *dialog)
COL_ACCOUNT_SETTINGS, &settings,
COL_ACCOUNT, &account, -1);
- empathy_account_widget_discard_pending_changes (priv->setting_widget_object);
+ empathy_account_widget_discard_pending_changes (priv->setting_widget);
if (account == NULL)
{
@@ -580,7 +579,7 @@ accounts_dialog_has_valid_accounts (EmpathyAccountsDialog *dialog)
GtkTreeIter iter;
gboolean creating;
- g_object_get (priv->setting_widget_object,
+ g_object_get (priv->setting_widget,
"creating-account", &creating, NULL);
if (!creating)
@@ -599,7 +598,7 @@ account_dialog_create_edit_params_dialog (EmpathyAccountsDialog *dialog)
{
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
EmpathyAccountSettings *settings;
- GtkWidget *subdialog, *content, *content_area, *align;
+ GtkWidget *subdialog, *content_area, *align;
settings = accounts_dialog_model_get_selected_settings (dialog);
if (settings == NULL)
@@ -610,22 +609,20 @@ account_dialog_create_edit_params_dialog (EmpathyAccountsDialog *dialog)
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
NULL, NULL);
- priv->setting_widget_object =
+ priv->setting_widget = (EmpathyAccountWidget *)
empathy_account_widget_new_for_protocol (settings, FALSE);
- g_object_add_weak_pointer (G_OBJECT (priv->setting_widget_object),
- (gpointer *) &priv->setting_widget_object);
+ g_object_add_weak_pointer (G_OBJECT (priv->setting_widget),
+ (gpointer *) &priv->setting_widget);
if (accounts_dialog_has_valid_accounts (dialog))
empathy_account_widget_set_other_accounts_exist (
- priv->setting_widget_object, TRUE);
+ priv->setting_widget, TRUE);
- content = empathy_account_widget_get_widget (priv->setting_widget_object);
-
- g_signal_connect (priv->setting_widget_object, "cancelled",
+ g_signal_connect (priv->setting_widget, "cancelled",
G_CALLBACK (empathy_account_dialog_widget_cancelled_cb), dialog);
- g_signal_connect_swapped (priv->setting_widget_object, "close",
+ g_signal_connect_swapped (priv->setting_widget, "close",
G_CALLBACK (gtk_widget_destroy), subdialog);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (subdialog));
@@ -633,10 +630,10 @@ account_dialog_create_edit_params_dialog (EmpathyAccountsDialog *dialog)
align = gtk_alignment_new (0.5, 0.5, 1, 1);
gtk_alignment_set_padding (GTK_ALIGNMENT (align), 6, 0, 6, 6);
- gtk_container_add (GTK_CONTAINER (align), content);
+ gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (priv->setting_widget));
gtk_box_pack_start (GTK_BOX (content_area), align, TRUE, TRUE, 0);
- gtk_widget_show (content);
+ gtk_widget_show (GTK_WIDGET (priv->setting_widget));
gtk_widget_show (align);
gtk_widget_show (subdialog);
}
@@ -787,22 +784,15 @@ account_dialog_show_contact_details_failed (EmpathyAccountsDialog *dialog,
}
static void
-account_dialog_got_self_contact (TpConnection *conn,
- EmpathyContact *contact,
- const GError *in_error,
- gpointer user_data,
- GObject *dialog)
+create_contact_info_editor (EmpathyAccountsDialog *self,
+ TpConnection *conn)
{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
+ EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
GtkWidget *editor, *alig;
+ EmpathyContact *contact;
- if (in_error != NULL)
- {
- DEBUG ("Failed to get self-contact: %s", in_error->message);
- account_dialog_show_contact_details_failed (
- EMPATHY_ACCOUNTS_DIALOG (dialog), TRUE);
- return;
- }
+ contact = empathy_contact_dup_from_tp_contact (
+ tp_connection_get_self_contact (conn));
alig = gtk_alignment_new (0.5, 0, 1, 1);
@@ -818,6 +808,7 @@ account_dialog_got_self_contact (TpConnection *conn,
gtk_container_add (GTK_CONTAINER (alig), editor);
gtk_widget_show (alig);
gtk_widget_show (editor);
+ g_object_unref (contact);
}
static void
@@ -832,10 +823,6 @@ account_dialog_create_dialog_content (EmpathyAccountsDialog *dialog,
account = empathy_account_settings_get_account (settings);
- // if (priv->setting_widget_object != NULL)
- // g_object_remove_weak_pointer (G_OBJECT (priv->setting_widget_object),
- // (gpointer *) &priv->setting_widget_object);
-
priv->dialog_content = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
gtk_container_add (GTK_CONTAINER (priv->alignment_settings),
priv->dialog_content);
@@ -848,10 +835,7 @@ account_dialog_create_dialog_content (EmpathyAccountsDialog *dialog,
if (conn != NULL &&
tp_proxy_get_invalidated (conn) == NULL)
{
- empathy_tp_contact_factory_get_from_handle (conn,
- tp_connection_get_self_handle (conn),
- account_dialog_got_self_contact,
- NULL, NULL, G_OBJECT (dialog));
+ create_contact_info_editor (dialog, conn);
}
else
{
@@ -938,9 +922,9 @@ accounts_dialog_has_pending_change (EmpathyAccountsDialog *dialog,
if (gtk_tree_selection_get_selected (selection, &model, &iter))
gtk_tree_model_get (model, &iter, COL_ACCOUNT, account, -1);
- return priv->setting_widget_object != NULL
+ return priv->setting_widget != NULL
&& empathy_account_widget_contains_pending_changes (
- priv->setting_widget_object);
+ priv->setting_widget);
}
static void
@@ -1011,7 +995,7 @@ accounts_dialog_button_add_clicked_cb (GtkWidget *button,
response = gtk_dialog_run (GTK_DIALOG (dialog));
- if (response == GTK_RESPONSE_OK)
+ if (response == GTK_RESPONSE_APPLY)
{
EmpathyAccountSettings *settings;
TpAccount *account;
@@ -1390,24 +1374,6 @@ accounts_dialog_button_remove_clicked_cb (GtkWidget *button,
accounts_dialog_remove_account_iter (dialog, &iter);
}
-#ifdef HAVE_MEEGO
-static void
-accounts_dialog_view_delete_activated_cb (EmpathyCellRendererActivatable *cell,
- const gchar *path_string,
- EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- if (!gtk_tree_model_get_iter_from_string (model, &iter, path_string))
- return;
-
- accounts_dialog_remove_account_iter (dialog, &iter);
-}
-#endif /* HAVE_MEEGO */
-
static void
accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog)
{
@@ -1443,35 +1409,22 @@ accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog)
NULL);
/* Name renderer */
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell,
+ priv->name_renderer = gtk_cell_renderer_text_new ();
+ g_object_set (priv->name_renderer,
"ellipsize", PANGO_ELLIPSIZE_END,
"width-chars", 25,
"editable", TRUE,
NULL);
- gtk_tree_view_column_pack_start (column, cell, TRUE);
- gtk_tree_view_column_add_attribute (column, cell, "text", COL_NAME);
- g_signal_connect (cell, "edited",
+ gtk_tree_view_column_pack_start (column, priv->name_renderer, TRUE);
+ gtk_tree_view_column_add_attribute (column, priv->name_renderer,
+ "text", COL_NAME);
+ g_signal_connect (priv->name_renderer, "edited",
G_CALLBACK (accounts_dialog_name_edited_cb),
dialog);
- g_signal_connect (cell, "editing-started",
+ g_signal_connect (priv->name_renderer, "editing-started",
G_CALLBACK (accounts_dialog_name_editing_started_cb),
dialog);
- g_object_set (cell, "ypad", 4, NULL);
-
-#ifdef HAVE_MEEGO
- /* Delete column */
- cell = empathy_cell_renderer_activatable_new ();
- gtk_tree_view_column_pack_start (column, cell, FALSE);
- g_object_set (cell,
- "icon-name", GTK_STOCK_DELETE,
- "show-on-select", TRUE,
- NULL);
-
- g_signal_connect (cell, "path-activated",
- G_CALLBACK (accounts_dialog_view_delete_activated_cb),
- dialog);
-#endif /* HAVE_MEEGO */
+ g_object_set (priv->name_renderer, "ypad", 4, NULL);
}
static EmpathyAccountSettings *
@@ -1515,9 +1468,9 @@ accounts_dialog_model_selection_changed (GtkTreeSelection *selection,
if (settings != NULL)
g_object_unref (settings);
- if (priv->setting_widget_object != NULL)
+ if (priv->setting_widget != NULL)
{
- g_object_get (priv->setting_widget_object,
+ g_object_get (priv->setting_widget,
"creating-account", &creating, NULL);
}
@@ -1546,7 +1499,7 @@ accounts_dialog_selection_change_response_cb (GtkDialog *message_dialog,
priv->force_change_row = TRUE;
empathy_account_widget_discard_pending_changes (
- priv->setting_widget_object);
+ priv->setting_widget);
path = gtk_tree_row_reference_get_path (priv->destination_row);
selection = gtk_tree_view_get_selection (
@@ -1731,6 +1684,30 @@ accounts_dialog_treeview_enabled_cb (GtkMenuItem *item,
enable_and_connect_account (account, !enabled);
}
+static void
+accounts_dialog_treeview_rename_cb (GtkMenuItem *item,
+ EmpathyAccountsDialog *self)
+{
+ EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+ path = gtk_tree_model_get_path (model, &iter);
+
+ g_object_set (G_OBJECT (priv->name_renderer), "editable", TRUE, NULL);
+
+ gtk_widget_grab_focus (GTK_WIDGET (priv->treeview));
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->treeview), path,
+ gtk_tree_view_get_column (GTK_TREE_VIEW (priv->treeview), 0), TRUE);
+
+ gtk_tree_path_free (path);
+}
+
static gboolean
accounts_dialog_treeview_button_press_event_cb (GtkTreeView *view,
GdkEventButton *event,
@@ -1742,8 +1719,7 @@ accounts_dialog_treeview_button_press_event_cb (GtkTreeView *view,
GtkTreePath *path = NULL;
GtkTreeIter iter;
GtkWidget *menu;
- GtkWidget *item_enable, *item_disable;
- GtkWidget *image_enable, *image_disable;
+ GtkWidget *item;
/* ignore multiple clicks */
if (event->type != GDK_BUTTON_PRESS)
@@ -1766,49 +1742,37 @@ accounts_dialog_treeview_button_press_event_cb (GtkTreeView *view,
/* Create the menu */
menu = empathy_context_menu_new (GTK_WIDGET (view));
- /* Get images for menu items */
- image_enable = gtk_image_new_from_icon_name (empathy_icon_name_for_presence (
- tp_account_manager_get_most_available_presence (
- priv->account_manager, NULL, NULL)),
- GTK_ICON_SIZE_MENU);
- image_disable = gtk_image_new_from_icon_name (
- empathy_icon_name_for_presence (TP_CONNECTION_PRESENCE_TYPE_OFFLINE),
- GTK_ICON_SIZE_MENU);
-
- /* Menu items: to enabled/disable the account */
- item_enable = gtk_image_menu_item_new_with_mnemonic (_("_Enable"));
- item_disable = gtk_image_menu_item_new_with_mnemonic (_("_Disable"));
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item_enable),
- image_enable);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item_disable),
- image_disable);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item_enable);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item_disable);
+ /* Menu item: to enabled/disable the account */
+ item = gtk_check_menu_item_new_with_mnemonic (_("_Enabled"));
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
if (account_can_be_enabled (account))
{
- if (tp_account_is_enabled (account))
- {
- tp_g_signal_connect_object (item_disable, "activate",
- G_CALLBACK (accounts_dialog_treeview_enabled_cb), account, 0);
- gtk_widget_set_sensitive (item_enable, FALSE);
- }
- else
- {
- tp_g_signal_connect_object (item_enable, "activate",
- G_CALLBACK (accounts_dialog_treeview_enabled_cb), account, 0);
- gtk_widget_set_sensitive (item_disable, FALSE);
- }
+ gboolean active;
+
+ active = tp_account_is_enabled (account);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
+ active);
+
+ tp_g_signal_connect_object (item, "activate",
+ G_CALLBACK (accounts_dialog_treeview_enabled_cb), account, 0);
}
else
{
- gtk_widget_set_sensitive (item_enable, FALSE);
- gtk_widget_set_sensitive (item_disable, FALSE);
+ gtk_widget_set_sensitive (item, FALSE);
}
- gtk_widget_show (item_enable);
- gtk_widget_show (item_disable);
+ gtk_widget_show (item);
+
+ /* Menu item: Rename */
+ item = gtk_menu_item_new_with_mnemonic (_("Rename"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+ tp_g_signal_connect_object (item, "activate",
+ G_CALLBACK (accounts_dialog_treeview_rename_cb), dialog, 0);
+
+ gtk_widget_show (item);
/* FIXME: Add here presence items, to be able to set per-account presence */
@@ -2072,11 +2036,11 @@ accounts_dialog_accounts_model_row_inserted_cb (GtkTreeModel *model,
{
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- if (priv->setting_widget_object != NULL &&
+ if (priv->setting_widget != NULL &&
accounts_dialog_has_valid_accounts (dialog))
{
empathy_account_widget_set_other_accounts_exist (
- priv->setting_widget_object, TRUE);
+ priv->setting_widget, TRUE);
}
}
@@ -2087,11 +2051,11 @@ accounts_dialog_accounts_model_row_deleted_cb (GtkTreeModel *model,
{
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- if (priv->setting_widget_object != NULL &&
+ if (priv->setting_widget != NULL &&
!accounts_dialog_has_valid_accounts (dialog))
{
empathy_account_widget_set_other_accounts_exist (
- priv->setting_widget_object, FALSE);
+ priv->setting_widget, FALSE);
}
}
@@ -2467,11 +2431,6 @@ accounts_dialog_build_ui (EmpathyAccountsDialog *dialog)
action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
-#ifdef HAVE_MEEGO
- gtk_widget_hide (action_area);
- gtk_widget_hide (priv->button_remove);
-#endif /* HAVE_MEEGO */
-
/* Display loading page */
priv->loading = TRUE;
@@ -2590,6 +2549,12 @@ do_dispose (GObject *obj)
priv->connecting_id = 0;
}
+ if (priv->connectivity)
+ {
+ g_object_unref (priv->connectivity);
+ priv->connectivity = NULL;
+ }
+
if (priv->account_manager != NULL)
{
g_object_unref (priv->account_manager);
@@ -2602,12 +2567,6 @@ do_dispose (GObject *obj)
priv->cms = NULL;
}
- if (priv->connectivity)
- {
- g_object_unref (priv->connectivity);
- priv->connectivity = NULL;
- }
-
if (priv->initial_selection != NULL)
{
g_object_unref (priv->initial_selection);
@@ -2675,7 +2634,8 @@ do_constructed (GObject *object)
tp_proxy_prepare_async (priv->account_manager, NULL,
accounts_dialog_manager_ready_cb, dialog);
- priv->connectivity = empathy_connectivity_dup_singleton ();
+ priv->connectivity = g_network_monitor_get_default ();
+ g_object_ref (priv->connectivity);
}
static void
@@ -2777,10 +2737,10 @@ empathy_accounts_dialog_is_creating (EmpathyAccountsDialog *dialog)
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
gboolean result = FALSE;
- if (priv->setting_widget_object == NULL)
+ if (priv->setting_widget == NULL)
goto out;
- g_object_get (priv->setting_widget_object,
+ g_object_get (priv->setting_widget,
"creating-account", &result, NULL);
out:
diff --git a/src/empathy-accounts.c b/src/empathy-accounts.c
index efb98e9b3..027d99918 100644
--- a/src/empathy-accounts.c
+++ b/src/empathy-accounts.c
@@ -199,6 +199,7 @@ local_cmdline (GApplication *app,
optcontext = g_option_context_new (N_("- Empathy Accounts"));
g_option_context_add_group (optcontext, gtk_get_option_group (TRUE));
g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
+ g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
argv = *arguments;
for (i = 0; argv[i] != NULL; i++)
@@ -226,7 +227,6 @@ main (int argc, char *argv[])
GObjectClass *app_class;
gint retval;
- g_thread_init (NULL);
g_type_init ();
#ifdef HAVE_CHEESE
@@ -244,7 +244,6 @@ main (int argc, char *argv[])
/* Make empathy and empathy-accounts appear as the same app in gnome-shell */
gdk_set_program_class ("Empathy");
gtk_window_set_default_icon_name ("empathy");
- textdomain (GETTEXT_PACKAGE);
app = gtk_application_new (EMPATHY_ACCOUNTS_DBUS_NAME,
G_APPLICATION_HANDLES_COMMAND_LINE);
diff --git a/src/empathy-audio-sink.c b/src/empathy-audio-sink.c
index 2968fb53c..d48e6af20 100644
--- a/src/empathy-audio-sink.c
+++ b/src/empathy-audio-sink.c
@@ -65,7 +65,7 @@ struct _EmpathyGstAudioSinkPrivate
gboolean echo_cancel;
gdouble volume;
gint volume_idle_id;
- GStaticMutex volume_mutex;
+ GMutex volume_mutex;
};
#define EMPATHY_GST_AUDIO_SINK_GET_PRIVATE(o) \
@@ -77,7 +77,7 @@ empathy_audio_sink_init (EmpathyGstAudioSink *self)
{
self->priv = EMPATHY_GST_AUDIO_SINK_GET_PRIVATE (self);
self->priv->echo_cancel = TRUE;
- g_static_mutex_init (&self->priv->volume_mutex);
+ g_mutex_init (&self->priv->volume_mutex);
}
static GstPad * empathy_audio_sink_request_new_pad (GstElement *self,
@@ -95,9 +95,9 @@ empathy_audio_sink_set_property (GObject *object,
switch (property_id)
{
case PROP_VOLUME:
- g_static_mutex_lock (&self->priv->volume_mutex);
+ g_mutex_lock (&self->priv->volume_mutex);
self->priv->volume = g_value_get_double (value);
- g_static_mutex_unlock (&self->priv->volume_mutex);
+ g_mutex_unlock (&self->priv->volume_mutex);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -129,7 +129,7 @@ empathy_audio_sink_dispose (GObject *object)
g_source_remove (priv->volume_idle_id);
priv->volume_idle_id = 0;
- g_static_mutex_free (&self->priv->volume_mutex);
+ g_mutex_clear (&self->priv->volume_mutex);
/* release any references held by the object here */
if (G_OBJECT_CLASS (empathy_audio_sink_parent_class)->dispose)
@@ -236,9 +236,9 @@ empathy_audio_sink_volume_idle_updated (gpointer user_data)
{
EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (user_data);
- g_static_mutex_lock (&self->priv->volume_mutex);
+ g_mutex_lock (&self->priv->volume_mutex);
self->priv->volume_idle_id = 0;
- g_static_mutex_unlock (&self->priv->volume_mutex);
+ g_mutex_unlock (&self->priv->volume_mutex);
g_object_notify (G_OBJECT (self), "volume");
@@ -253,7 +253,7 @@ empathy_audio_sink_volume_updated (GObject *object,
EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (user_data);
gdouble volume;
- g_static_mutex_lock (&self->priv->volume_mutex);
+ g_mutex_lock (&self->priv->volume_mutex);
g_object_get (object, "volume", &volume, NULL);
if (self->priv->volume == volume)
@@ -265,7 +265,7 @@ empathy_audio_sink_volume_updated (GObject *object,
empathy_audio_sink_volume_idle_updated, self);
out:
- g_static_mutex_unlock (&self->priv->volume_mutex);
+ g_mutex_unlock (&self->priv->volume_mutex);
}
static gboolean
@@ -274,9 +274,9 @@ empathy_audio_sink_volume_idle_setup (gpointer user_data)
EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (user_data);
gdouble volume;
- g_static_mutex_lock (&self->priv->volume_mutex);
+ g_mutex_lock (&self->priv->volume_mutex);
self->priv->volume_idle_id = 0;
- g_static_mutex_unlock (&self->priv->volume_mutex);
+ g_mutex_unlock (&self->priv->volume_mutex);
/* We can't do a bidirection bind as the ::notify comes from another
* thread, for other bits of empathy it's most simpler if it comes from
@@ -329,11 +329,11 @@ empathy_audio_sink_request_new_pad (GstElement *element,
if (GST_IS_STREAM_VOLUME (self->priv->sink))
{
- g_static_mutex_lock (&self->priv->volume_mutex);
+ g_mutex_lock (&self->priv->volume_mutex);
if (self->priv->volume_idle_id == 0)
self->priv->volume_idle_id = g_idle_add (
empathy_audio_sink_volume_idle_setup, self);
- g_static_mutex_unlock (&self->priv->volume_mutex);
+ g_mutex_unlock (&self->priv->volume_mutex);
}
else
{
diff --git a/src/empathy-audio-src.c b/src/empathy-audio-src.c
index 9a882c146..590c65b66 100644
--- a/src/empathy-audio-src.c
+++ b/src/empathy-audio-src.c
@@ -77,7 +77,7 @@ struct _EmpathyGstAudioSrcPrivate
/* the mixer track on src we follow and adjust */
GstMixerTrack *track;
- GMutex *lock;
+ GMutex lock;
guint level_idle_id;
guint volume_idle_id;
};
@@ -93,7 +93,7 @@ struct _EmpathyGstAudioSrcPrivate
static void
empathy_audio_set_hw_mute (EmpathyGstAudioSrc *self, gboolean mute)
{
- g_mutex_lock (self->priv->lock);
+ g_mutex_lock (&self->priv->lock);
/* If there is no mixer available ignore the setting */
if (self->priv->track == NULL)
goto out;
@@ -101,7 +101,7 @@ empathy_audio_set_hw_mute (EmpathyGstAudioSrc *self, gboolean mute)
gst_mixer_set_mute (GST_MIXER (self->priv->src), self->priv->track, mute);
out:
- g_mutex_unlock (self->priv->lock);
+ g_mutex_unlock (&self->priv->lock);
self->priv->mute = mute;
}
@@ -110,13 +110,13 @@ empathy_audio_src_get_hw_mute (EmpathyGstAudioSrc *self)
{
gboolean result = self->priv->mute;
- g_mutex_lock (self->priv->lock);
+ g_mutex_lock (&self->priv->lock);
if (self->priv->track == NULL)
goto out;
result = GST_MIXER_TRACK_HAS_FLAG (self->priv->track, GST_MIXER_TRACK_MUTE);
out:
- g_mutex_unlock (self->priv->lock);
+ g_mutex_unlock (&self->priv->lock);
return result;
}
@@ -128,7 +128,7 @@ empathy_audio_src_set_hw_volume (EmpathyGstAudioSrc *self,
gint volumes[MAX_MIC_CHANNELS];
int i;
- g_mutex_lock (self->priv->lock);
+ g_mutex_lock (&self->priv->lock);
/* If there is no mixer available ignore the setting */
if (self->priv->track == NULL)
goto out;
@@ -140,7 +140,7 @@ empathy_audio_src_set_hw_volume (EmpathyGstAudioSrc *self,
self->priv->track, volumes);
out:
- g_mutex_unlock (self->priv->lock);
+ g_mutex_unlock (&self->priv->lock);
self->priv->volume = volume;
}
@@ -151,7 +151,7 @@ empathy_audio_src_get_hw_volume (EmpathyGstAudioSrc *self)
gint volumes[MAX_MIC_CHANNELS];
gdouble result = self->priv->volume;
- g_mutex_lock (self->priv->lock);
+ g_mutex_lock (&self->priv->lock);
if (self->priv->track == NULL)
goto out;
@@ -160,7 +160,7 @@ empathy_audio_src_get_hw_volume (EmpathyGstAudioSrc *self)
result = volumes[0]/(gdouble)self->priv->track->max_volume;
out:
- g_mutex_unlock (self->priv->lock);
+ g_mutex_unlock (&self->priv->lock);
return result;
}
@@ -347,7 +347,8 @@ empathy_audio_src_init (EmpathyGstAudioSrc *obj)
obj->priv = priv;
priv->peak_level = -G_MAXDOUBLE;
- priv->lock = g_mutex_new ();
+ g_mutex_init (&priv->lock);
+
priv->volume = 1.0;
priv->src = create_src ();
@@ -439,14 +440,14 @@ empathy_audio_src_get_property (GObject *object,
g_value_set_boolean (value, priv->mute);
break;
case PROP_PEAK_LEVEL:
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
g_value_set_double (value, priv->peak_level);
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
break;
case PROP_RMS_LEVEL:
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
g_value_set_double (value, priv->rms_level);
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
break;
case PROP_MICROPHONE:
g_value_set_uint (value, priv->source_idx);
@@ -552,7 +553,7 @@ empathy_audio_src_finalize (GObject *object)
EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
/* free any data held directly by the object here */
- g_mutex_free (priv->lock);
+ g_mutex_clear (&priv->lock);
G_OBJECT_CLASS (empathy_audio_src_parent_class)->finalize (object);
}
@@ -563,13 +564,13 @@ empathy_audio_src_levels_updated (gpointer user_data)
EmpathyGstAudioSrc *self = EMPATHY_GST_AUDIO_SRC (user_data);
EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
g_signal_emit (self, signals[PEAK_LEVEL_CHANGED], 0, priv->peak_level);
g_signal_emit (self, signals[RMS_LEVEL_CHANGED], 0, priv->rms_level);
priv->level_idle_id = 0;
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
return FALSE;
}
@@ -582,9 +583,9 @@ empathy_audio_src_volume_changed (gpointer user_data)
gdouble volume;
gboolean mute;
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
priv->volume_idle_id = 0;
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
volume = empathy_audio_src_get_hw_volume (self);
@@ -652,7 +653,7 @@ empathy_audio_src_handle_message (GstBin *bin, GstMessage *message)
rms = MAX (db, rms);
}
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
priv->peak_level = peak;
priv->rms_level = rms;
@@ -660,7 +661,7 @@ empathy_audio_src_handle_message (GstBin *bin, GstMessage *message)
priv->level_idle_id = g_idle_add (
empathy_audio_src_levels_updated, self);
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
}
else if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ELEMENT &&
GST_MESSAGE_SRC (message) == GST_OBJECT (priv->src))
@@ -677,13 +678,13 @@ empathy_audio_src_handle_message (GstBin *bin, GstMessage *message)
GST_MIXER_MESSAGE_MUTE_TOGGLED)
gst_mixer_message_parse_mute_toggled (message, &track, NULL);
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
if (track != NULL && track == priv->track && priv->volume_idle_id == 0)
priv->volume_idle_id = g_idle_add (
empathy_audio_src_volume_changed, self);
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
}
else if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_STATE_CHANGED &&
GST_MESSAGE_SRC (message) == GST_OBJECT (priv->src))
@@ -699,18 +700,18 @@ empathy_audio_src_handle_message (GstBin *bin, GstMessage *message)
* Empathy. We want to pick up the level pulseaudio saved */
if (old == GST_STATE_NULL && new == GST_STATE_READY)
{
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
priv->track = empathy_audio_src_get_track (priv->src);
if (priv->track != NULL)
priv->volume_idle_id = g_idle_add (
empathy_audio_src_volume_changed, self);
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
}
else if (old == GST_STATE_READY && new == GST_STATE_NULL)
{
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
priv->track = NULL;
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
}
}
diff --git a/src/empathy-auth-client.c b/src/empathy-auth-client.c
index ecf1ad173..3228738f4 100644
--- a/src/empathy-auth-client.c
+++ b/src/empathy-auth-client.c
@@ -93,8 +93,8 @@ tls_dialog_response_cb (GtkDialog *dialog,
gint response_id,
gpointer user_data)
{
- EmpathyTLSCertificate *certificate = NULL;
- EmpTLSCertificateRejectReason reason = 0;
+ TpTLSCertificate *certificate = NULL;
+ TpTLSCertificateRejectReason reason = 0;
GHashTable *details = NULL;
EmpathyTLSDialog *tls_dialog = EMPATHY_TLS_DIALOG (dialog);
gboolean remember = FALSE;
@@ -113,13 +113,15 @@ tls_dialog_response_cb (GtkDialog *dialog,
if (response_id == GTK_RESPONSE_YES)
{
- empathy_tls_certificate_accept_async (certificate, NULL, NULL);
+ tp_tls_certificate_accept_async (certificate, NULL, NULL);
}
else
{
tp_asv_set_boolean (details, "user-requested", TRUE);
- empathy_tls_certificate_reject_async (certificate, reason, details,
- NULL, NULL);
+ tp_tls_certificate_add_rejection (certificate, reason, NULL,
+ g_variant_new_parsed ("{ 'user-requested': <%b> }", TRUE));
+
+ tp_tls_certificate_reject_async (certificate, NULL, NULL);
}
if (remember)
@@ -138,9 +140,9 @@ tls_dialog_response_cb (GtkDialog *dialog,
}
static void
-display_interactive_dialog (EmpathyTLSCertificate *certificate,
+display_interactive_dialog (TpTLSCertificate *certificate,
EmpathyTLSVerifier *verifier,
- EmpTLSCertificateRejectReason reason,
+ TpTLSCertificateRejectReason reason,
GHashTable *details)
{
GtkWidget *tls_dialog;
@@ -162,9 +164,9 @@ verifier_verify_cb (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
- EmpTLSCertificateRejectReason reason;
+ TpTLSCertificateRejectReason reason;
GError *error = NULL;
- EmpathyTLSCertificate *certificate = NULL;
+ TpTLSCertificate *certificate = NULL;
GHashTable *details = NULL;
gchar *hostname = NULL;
@@ -185,7 +187,7 @@ verifier_verify_cb (GObject *source,
}
else
{
- empathy_tls_certificate_accept_async (certificate, NULL, NULL);
+ tp_tls_certificate_accept_async (certificate, NULL, NULL);
}
g_free (hostname);
@@ -197,7 +199,7 @@ auth_factory_new_tls_handler_cb (EmpathyAuthFactory *factory,
EmpathyServerTLSHandler *handler,
gpointer user_data)
{
- EmpathyTLSCertificate *certificate = NULL;
+ TpTLSCertificate *certificate = NULL;
gchar *hostname = NULL;
gchar **reference_identities = NULL;
EmpathyTLSVerifier *verifier;
@@ -261,7 +263,7 @@ auth_factory_auth_passsword_failed (EmpathyAuthFactory *factory,
{
GtkWidget *dialog;
- DEBUG ("Authentification on %s failed, popup password dialog",
+ DEBUG ("Authentication on %s failed, popup password dialog",
tp_account_get_path_suffix (account));
dialog = empathy_bad_password_dialog_new (account, password);
@@ -283,8 +285,6 @@ main (int argc,
TpSimpleClientFactory *tp_factory;
TpDBusDaemon *dbus;
- g_thread_init (NULL);
-
context = g_option_context_new (N_(" - Empathy authentication client"));
g_option_context_add_group (context, gtk_get_option_group (TRUE));
g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
diff --git a/src/empathy-av.c b/src/empathy-av.c
deleted file mode 100644
index 70acfc4f3..000000000
--- a/src/empathy-av.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include <telepathy-glib/debug-sender.h>
-
-#include <libempathy-gtk/empathy-ui-utils.h>
-
-#include "empathy-streamed-media-window.h"
-#include "empathy-streamed-media-factory.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include <libempathy/empathy-debug.h>
-
-#include <gst/gst.h>
-
-/* Exit after $TIMEOUT seconds if not displaying any call window */
-#define TIMEOUT 60
-
-#define EMPATHY_AV_DBUS_NAME "org.gnome.Empathy.AudioVideo"
-
-static GtkApplication *app = NULL;
-static gboolean activated = FALSE;
-static gboolean use_timer = TRUE;
-
-static EmpathyStreamedMediaFactory *call_factory = NULL;
-
-static void
-new_call_handler_cb (EmpathyStreamedMediaFactory *factory,
- EmpathyStreamedMediaHandler *handler,
- gboolean outgoing,
- gpointer user_data)
-{
- EmpathyStreamedMediaWindow *window;
-
- DEBUG ("Create a new StreamedMedia window");
-
- window = empathy_streamed_media_window_new (handler);
-
- g_application_hold (G_APPLICATION (app));
-
- g_signal_connect_swapped (window, "destroy",
- G_CALLBACK (g_application_release), app);
-
- gtk_widget_show (GTK_WIDGET (window));
-}
-
-static void
-activate_cb (GApplication *application)
-{
- GError *error = NULL;
-
- if (activated)
- return;
-
- activated = TRUE;
-
- if (!use_timer)
- {
- /* keep a 'ref' to the application */
- g_application_hold (G_APPLICATION (app));
- }
-
- g_assert (call_factory == NULL);
- call_factory = empathy_streamed_media_factory_initialise ();
-
- g_signal_connect (G_OBJECT (call_factory), "new-streamed-media-handler",
- G_CALLBACK (new_call_handler_cb), NULL);
-
- if (!empathy_streamed_media_factory_register (call_factory, &error))
- {
- g_critical ("Failed to register Handler: %s", error->message);
- g_error_free (error);
- }
-}
-
-int
-main (int argc,
- char *argv[])
-{
- GOptionContext *optcontext;
- GOptionEntry options[] = {
- { NULL }
- };
-#ifdef ENABLE_DEBUG
- TpDebugSender *debug_sender;
-#endif
- GError *error = NULL;
- gint retval;
-
- /* Init */
- g_thread_init (NULL);
-
- optcontext = g_option_context_new (N_("- Empathy Audio/Video Client"));
- g_option_context_add_group (optcontext, gst_init_get_option_group ());
- g_option_context_add_group (optcontext, gtk_get_option_group (TRUE));
- g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
-
- if (!g_option_context_parse (optcontext, &argc, &argv, &error)) {
- g_print ("%s\nRun '%s --help' to see a full list of available command "
- "line options.\n",
- error->message, argv[0]);
- g_warning ("Error in empathy-av init: %s", error->message);
- return EXIT_FAILURE;
- }
-
- g_option_context_free (optcontext);
-
- empathy_gtk_init ();
- g_set_application_name (_("Empathy Audio/Video Client"));
-
- /* Make empathy and empathy-av appear as the same app in gnome-shell */
- gdk_set_program_class ("Empathy");
- gtk_window_set_default_icon_name ("empathy");
- textdomain (GETTEXT_PACKAGE);
-
- app = gtk_application_new (EMPATHY_AV_DBUS_NAME, G_APPLICATION_FLAGS_NONE);
- g_signal_connect (app, "activate", G_CALLBACK (activate_cb), NULL);
-
-#ifdef ENABLE_DEBUG
- /* Set up debug sender */
- debug_sender = tp_debug_sender_dup ();
- g_log_set_default_handler (tp_debug_sender_log_handler, G_LOG_DOMAIN);
-#endif
-
- if (g_getenv ("EMPATHY_PERSIST") != NULL)
- {
- DEBUG ("Disable timer");
-
- use_timer = FALSE;
- }
-
- /* the inactivity timeout can only be set while the application is held */
- g_application_hold (G_APPLICATION (app));
- g_application_set_inactivity_timeout (G_APPLICATION (app), TIMEOUT * 1000);
- g_application_release (G_APPLICATION (app));
-
- retval = g_application_run (G_APPLICATION (app), argc, argv);
-
- g_object_unref (app);
- tp_clear_object (&call_factory);
-
-#ifdef ENABLE_DEBUG
- g_object_unref (debug_sender);
-#endif
-
- return retval;
-}
diff --git a/src/empathy-call-factory.c b/src/empathy-call-factory.c
index 783c44e95..9401ae71b 100644
--- a/src/empathy-call-factory.c
+++ b/src/empathy-call-factory.c
@@ -30,7 +30,6 @@
#include <libempathy/empathy-client-factory.h>
#include <libempathy/empathy-request-util.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-utils.h>
#include "empathy-call-factory.h"
diff --git a/src/empathy-call-handler.c b/src/empathy-call-handler.c
index 33ae9c709..be0987e95 100644
--- a/src/empathy-call-handler.c
+++ b/src/empathy-call-handler.c
@@ -30,7 +30,6 @@
#include <telepathy-farstream/telepathy-farstream.h>
#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy-gtk/empathy-call-utils.h>
diff --git a/src/empathy-call-observer.c b/src/empathy-call-observer.c
index 35ceeb046..de21506d5 100644
--- a/src/empathy-call-observer.c
+++ b/src/empathy-call-observer.c
@@ -102,29 +102,16 @@ auto_reject_ctx_free (AutoRejectCtx *ctx)
}
static void
-get_contact_cb (TpConnection *connection,
- guint n_contacts,
- TpContact * const *contacts,
- guint n_failed,
- const TpHandle *failed,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
+display_reject_notification (EmpathyCallObserver *self,
+ TpChannel *channel)
{
- EmpathyCallObserver *self = (EmpathyCallObserver *) weak_object;
- NotifyNotification *notification;
TpContact *contact;
+ NotifyNotification *notification;
gchar *summary, *body;
EmpathyContact *emp_contact;
GdkPixbuf *pixbuf;
- if (n_contacts != 1)
- {
- DEBUG ("Failed to get TpContact; ignoring notification bubble");
- return;
- }
-
- contact = contacts[0];
+ contact = tp_channel_get_target_contact (channel);
summary = g_strdup_printf (_("Missed call from %s"),
tp_contact_get_alias (contact));
@@ -152,21 +139,6 @@ get_contact_cb (TpConnection *connection,
g_object_unref (emp_contact);
}
-static void
-display_reject_notification (EmpathyCallObserver *self,
- TpChannel *channel)
-{
- TpHandle handle;
- TpContactFeature features[] = { TP_CONTACT_FEATURE_ALIAS,
- TP_CONTACT_FEATURE_AVATAR_DATA };
-
- handle = tp_channel_get_handle (channel, NULL);
-
- tp_connection_get_contacts_by_handle (tp_channel_borrow_connection (channel),
- 1, &handle, G_N_ELEMENTS (features), features, get_contact_cb,
- g_object_ref (channel), g_object_unref, G_OBJECT (self));
-}
-
static TpChannel *
find_main_channel (GList *channels)
{
diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c
index 191a23833..1081efa0d 100644
--- a/src/empathy-call-window.c
+++ b/src/empathy-call-window.c
@@ -43,7 +43,6 @@
#include <libempathy/empathy-camera-monitor.h>
#include <libempathy/empathy-gsettings.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-request-util.h>
#include <libempathy/empathy-utils.h>
@@ -61,7 +60,6 @@
#include "empathy-call-window.h"
#include "empathy-call-window-fullscreen.h"
#include "empathy-call-factory.h"
-#include "empathy-video-widget.h"
#include "empathy-about-dialog.h"
#include "empathy-audio-src.h"
#include "empathy-audio-sink.h"
@@ -77,6 +75,9 @@
#define CONTENT_HBOX_SPACING 3
#define CONTENT_HBOX_CHILDREN_PACKING_PADDING 3
+#define REMOTE_VIDEO_DEFAULT_WIDTH 320
+#define REMOTE_VIDEO_DEFAULT_HEIGHT 240
+
#define SELF_VIDEO_SECTION_WIDTH 120
#define SELF_VIDEO_SECTION_HEIGHT 90
#define SELF_VIDEO_SECTION_MARGIN 2
@@ -87,9 +88,8 @@
/* The avatar's default width and height are set to the same value because we
want a square icon. */
-#define REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT
-#define REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT \
- EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT
+#define REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT REMOTE_VIDEO_DEFAULT_HEIGHT
+#define REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH REMOTE_VIDEO_DEFAULT_HEIGHT
#define SMALL_TOOLBAR_SIZE 36
@@ -242,7 +242,7 @@ struct _EmpathyCallWindowPriv
GTimer *timer;
guint timer_id;
- GMutex *lock;
+ GMutex lock;
gboolean call_started;
gboolean sending_video;
CameraState camera_state;
@@ -1635,7 +1635,7 @@ empathy_call_window_init (EmpathyCallWindow *self)
g_signal_connect (priv->camera_monitor, "removed",
G_CALLBACK (empathy_call_window_camera_removed_cb), self);
- priv->lock = g_mutex_new ();
+ g_mutex_init (&priv->lock);
gtk_container_add (GTK_CONTAINER (self), top_vbox);
@@ -1655,7 +1655,7 @@ empathy_call_window_init (EmpathyCallWindow *self)
priv->video_container = gtk_clutter_embed_new ();
gtk_widget_set_size_request (priv->video_container,
- EMPATHY_VIDEO_WIDGET_DEFAULT_WIDTH, EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT);
+ REMOTE_VIDEO_DEFAULT_WIDTH, REMOTE_VIDEO_DEFAULT_HEIGHT);
/* Set the background color to that of the rest of the window */
context = gtk_widget_get_style_context (priv->content_hbox);
@@ -2369,7 +2369,7 @@ empathy_call_window_finalize (GObject *object)
disconnect_video_output_motion_handler (self);
/* free any data held directly by the object here */
- g_mutex_free (priv->lock);
+ g_mutex_clear (&priv->lock);
g_timer_destroy (priv->timer);
@@ -2542,7 +2542,7 @@ empathy_call_window_disconnected (EmpathyCallWindow *self,
if (could_reset_pipeline)
{
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
g_timer_stop (priv->timer);
@@ -2550,7 +2550,7 @@ empathy_call_window_disconnected (EmpathyCallWindow *self,
g_source_remove (priv->timer_id);
priv->timer_id = 0;
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
if (!restart)
/* We are about to destroy the window, no need to update it or create
@@ -3200,12 +3200,12 @@ empathy_call_window_state_changed_cb (EmpathyCallHandler *handler,
g_object_unref (call);
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
priv->timer_id = g_timeout_add_seconds (1,
empathy_call_window_update_timer, self);
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
empathy_call_window_update_timer (self);
@@ -3279,7 +3279,7 @@ empathy_call_window_src_added_cb (EmpathyCallHandler *handler,
GstPad *pad;
- g_mutex_lock (priv->lock);
+ g_mutex_lock (&priv->lock);
g_object_get (content, "media-type", &media_type, NULL);
@@ -3346,7 +3346,7 @@ empathy_call_window_src_added_cb (EmpathyCallHandler *handler,
}
- g_mutex_unlock (priv->lock);
+ g_mutex_unlock (&priv->lock);
return TRUE;
}
diff --git a/src/empathy-call.c b/src/empathy-call.c
index 2188d3726..9d7a2b355 100644
--- a/src/empathy-call.c
+++ b/src/empathy-call.c
@@ -186,9 +186,6 @@ main (int argc,
gint retval;
GtkSettings *gtk_settings;
- /* Init */
- g_thread_init (NULL);
-
#ifdef GDK_WINDOWING_X11
/* We can't call clutter_gst_init() before gtk_clutter_init(), so no choice
* but to intiialise X11 threading ourself */
@@ -203,6 +200,7 @@ main (int argc,
clutter_get_option_group_without_init ());
g_option_context_add_group (optcontext, gtk_clutter_get_option_group ());
g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
+ g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
if (!g_option_context_parse (optcontext, &argc, &argv, &error)) {
g_print ("%s\nRun '%s --help' to see a full list of available command "
@@ -217,12 +215,12 @@ main (int argc,
clutter_gst_init (&argc, &argv);
empathy_gtk_init ();
+ textdomain (GETTEXT_PACKAGE);
g_set_application_name (_("Empathy Audio/Video Client"));
/* Make empathy and empathy-call appear as the same app in gnome-shell */
gdk_set_program_class ("Empathy");
gtk_window_set_default_icon_name ("empathy");
- textdomain (GETTEXT_PACKAGE);
gtk_settings = gtk_settings_get_default ();
g_object_set (G_OBJECT (gtk_settings), "gtk-application-prefer-dark-theme",
diff --git a/src/empathy-chat-manager.c b/src/empathy-chat-manager.c
index dd828fa68..6a163aaae 100644
--- a/src/empathy-chat-manager.c
+++ b/src/empathy-chat-manager.c
@@ -136,6 +136,22 @@ chat_destroyed_cb (gpointer data,
}
static void
+join_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TpChannel *channel = TP_CHANNEL (source);
+ GError *error = NULL;
+
+ if (!tp_channel_join_finish (channel, result, &error))
+ {
+ DEBUG ("Failed to join chat (%s): %s",
+ tp_channel_get_identifier (channel), error->message);
+ g_error_free (error);
+ }
+}
+
+static void
process_tp_chat (EmpathyChatManager *self,
EmpathyTpChat *tp_chat,
TpAccount *account,
@@ -193,7 +209,7 @@ process_tp_chat (EmpathyChatManager *self,
{
/* We have been invited to the room. Add ourself as member as this
* channel has been approved. */
- empathy_tp_chat_join (tp_chat);
+ tp_channel_join_async (TP_CHANNEL (tp_chat), "", join_cb, self);
}
}
diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c
index ac3584f34..6de6db140 100644
--- a/src/empathy-chat-window.c
+++ b/src/empathy-chat-window.c
@@ -44,8 +44,6 @@
#include <libempathy/empathy-chatroom-manager.h>
#include <libempathy/empathy-gsettings.h>
#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-tp-contact-factory.h>
-#include <libempathy/empathy-contact-list.h>
#include <libempathy/empathy-request-util.h>
#include <libempathy/empathy-individual-manager.h>
@@ -1188,8 +1186,7 @@ chat_window_invite_participant_activate_cb (GtkAction *action,
contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_list_add (EMPATHY_CONTACT_LIST (tp_chat),
- contact, _("Inviting you to this room"));
+ empathy_tp_chat_add (tp_chat, contact, _("Inviting you to this room"));
g_object_unref (contact);
}
@@ -2045,7 +2042,7 @@ drag_data_received_individual_id (EmpathyChatWindow *self,
tp_channel_get_identifier ((TpChannel *) chat));
contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_list_add (EMPATHY_CONTACT_LIST (chat), contact, NULL);
+ empathy_tp_chat_add (chat, contact, NULL);
g_object_unref (contact);
out:
diff --git a/src/empathy-chat.c b/src/empathy-chat.c
index bebca4382..3094b5137 100644
--- a/src/empathy-chat.c
+++ b/src/empathy-chat.c
@@ -103,12 +103,10 @@ main (int argc,
gint retval;
EmpathyIndividualManager *individual_mgr;
- /* Init */
- g_thread_init (NULL);
-
optcontext = g_option_context_new (N_("- Empathy Chat Client"));
g_option_context_add_group (optcontext, gtk_get_option_group (TRUE));
g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
+ g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
if (!g_option_context_parse (optcontext, &argc, &argv, &error))
{
diff --git a/src/empathy-debug-window.c b/src/empathy-debug-window.c
index 8110a14f3..57549f4fc 100644
--- a/src/empathy-debug-window.c
+++ b/src/empathy-debug-window.c
@@ -58,12 +58,7 @@ typedef enum
enum
{
- COL_DEBUG_TIMESTAMP = 0,
- COL_DEBUG_DOMAIN,
- COL_DEBUG_CATEGORY,
- COL_DEBUG_LEVEL_STRING,
- COL_DEBUG_MESSAGE,
- COL_DEBUG_LEVEL_VALUE,
+ COL_DEBUG_MESSAGE = 0,
NUM_DEBUG_COLS
};
@@ -86,7 +81,7 @@ enum
};
#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyDebugWindow)
-typedef struct
+struct _EmpathyDebugWindowPriv
{
/* Toolbar items */
GtkWidget *chooser;
@@ -126,29 +121,29 @@ typedef struct
gboolean dispose_run;
TpAccountManager *am;
GtkListStore *all_active_buffer;
-} EmpathyDebugWindowPriv;
+};
static const gchar *
-log_level_to_string (guint level)
+log_level_to_string (GLogLevelFlags level)
{
switch (level)
{
- case TP_DEBUG_LEVEL_ERROR:
+ case G_LOG_LEVEL_ERROR:
return "Error";
break;
- case TP_DEBUG_LEVEL_CRITICAL:
+ case G_LOG_LEVEL_CRITICAL:
return "Critical";
break;
- case TP_DEBUG_LEVEL_WARNING:
+ case G_LOG_LEVEL_WARNING:
return "Warning";
break;
- case TP_DEBUG_LEVEL_MESSAGE:
+ case G_LOG_LEVEL_MESSAGE:
return "Message";
break;
- case TP_DEBUG_LEVEL_INFO:
+ case G_LOG_LEVEL_INFO:
return "Info";
break;
- case TP_DEBUG_LEVEL_DEBUG:
+ case G_LOG_LEVEL_DEBUG:
return "Debug";
break;
default:
@@ -160,14 +155,14 @@ log_level_to_string (guint level)
static gchar *
get_active_service_name (EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (self);
GtkTreeIter iter;
gchar *name;
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->chooser), &iter))
+ if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->priv->chooser),
+ &iter))
return NULL;
- gtk_tree_model_get (GTK_TREE_MODEL (priv->service_store), &iter,
+ gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), &iter,
COL_NAME, &name, -1);
return name;
@@ -181,184 +176,133 @@ copy_buffered_messages (GtkTreeModel *buffer,
{
GtkListStore *active_buffer = data;
GtkTreeIter active_buffer_iter;
- gdouble timestamp;
- gchar *domain, *category, *message, *level_string;
- guint level;
+ TpDebugMessage *msg;
gtk_tree_model_get (buffer, iter,
- COL_DEBUG_TIMESTAMP, &timestamp,
- COL_DEBUG_DOMAIN, &domain,
- COL_DEBUG_CATEGORY, &category,
- COL_DEBUG_LEVEL_STRING, &level_string,
- COL_DEBUG_MESSAGE, &message,
- COL_DEBUG_LEVEL_VALUE, &level,
+ COL_DEBUG_MESSAGE, &msg,
-1);
gtk_list_store_insert_with_values (active_buffer, &active_buffer_iter, -1,
- COL_DEBUG_TIMESTAMP, timestamp,
- COL_DEBUG_DOMAIN, domain,
- COL_DEBUG_CATEGORY, category,
- COL_DEBUG_LEVEL_STRING, level_string,
- COL_DEBUG_MESSAGE, message,
- COL_DEBUG_LEVEL_VALUE, level,
+ COL_DEBUG_MESSAGE, msg,
-1);
- g_free (domain);
- g_free (category);
- g_free (level_string);
- g_free (message);
+ g_object_unref (msg);
return FALSE;
}
static void
insert_values_in_buffer (GtkListStore *store,
- gdouble timestamp,
- const gchar *domain,
- const gchar *category,
- guint level,
- const gchar *string)
+ TpDebugMessage *msg)
{
GtkTreeIter iter;
gtk_list_store_insert_with_values (store, &iter, -1,
- COL_DEBUG_TIMESTAMP, timestamp,
- COL_DEBUG_DOMAIN, domain,
- COL_DEBUG_CATEGORY, category,
- COL_DEBUG_LEVEL_STRING, log_level_to_string (level),
- COL_DEBUG_MESSAGE, string,
- COL_DEBUG_LEVEL_VALUE, level,
+ COL_DEBUG_MESSAGE, msg,
-1);
}
static void
-debug_window_add_message (EmpathyDebugWindow *debug_window,
- TpProxy *proxy,
- gdouble timestamp,
- const gchar *domain_category,
- guint level,
- const gchar *message)
-{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
- gchar *domain, *category;
- gchar *string;
+debug_window_add_message (EmpathyDebugWindow *self,
+ TpDebugClient *debug,
+ TpDebugMessage *msg)
+{
GtkListStore *active_buffer, *pause_buffer;
- if (g_strrstr (domain_category, "/"))
- {
- gchar **parts = g_strsplit (domain_category, "/", 2);
- domain = g_strdup (parts[0]);
- category = g_strdup (parts[1]);
- g_strfreev (parts);
- }
- else
- {
- domain = g_strdup (domain_category);
- category = g_strdup ("");
- }
-
- if (g_str_has_suffix (message, "\n"))
- string = g_strchomp (g_strdup (message));
- else
- string = g_strdup (message);
-
- pause_buffer = g_object_get_data (G_OBJECT (proxy), "pause-buffer");
- active_buffer = g_object_get_data (G_OBJECT (proxy), "active-buffer");
+ pause_buffer = g_object_get_data (G_OBJECT (debug), "pause-buffer");
+ active_buffer = g_object_get_data (G_OBJECT (debug), "active-buffer");
- if (priv->paused)
+ if (self->priv->paused)
{
- insert_values_in_buffer (pause_buffer, timestamp,
- domain, category, level,
- string);
+ insert_values_in_buffer (pause_buffer, msg);
}
else
{
/* Append 'this' message to this service's and All's active-buffers */
- insert_values_in_buffer (active_buffer, timestamp,
- domain, category, level,
- string);
+ insert_values_in_buffer (active_buffer, msg);
- insert_values_in_buffer (priv->all_active_buffer, timestamp,
- domain, category, level,
- string);
+ insert_values_in_buffer (self->priv->all_active_buffer, msg);
}
-
- g_free (string);
- g_free (domain);
- g_free (category);
}
static void
-debug_window_new_debug_message_cb (TpProxy *proxy,
- gdouble timestamp,
- const gchar *domain,
- guint level,
- const gchar *message,
- gpointer user_data,
- GObject *weak_object)
+debug_window_new_debug_message_cb (TpDebugClient *debug,
+ TpDebugMessage *msg,
+ gpointer user_data)
{
- EmpathyDebugWindow *debug_window = (EmpathyDebugWindow *) user_data;
+ EmpathyDebugWindow *self = user_data;
- debug_window_add_message (debug_window, proxy, timestamp, domain, level,
- message);
+ debug_window_add_message (self, debug, msg);
}
static void
-debug_window_set_enabled (TpProxy *proxy,
- gboolean enabled)
+set_enabled_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- GValue *val;
-
- g_return_if_fail (proxy != NULL);
+ TpDebugClient *debug = TP_DEBUG_CLIENT (source);
+ gboolean enabled = GPOINTER_TO_UINT (user_data);
+ GError *error = NULL;
- val = tp_g_value_slice_new_boolean (enabled);
+ if (!tp_debug_client_set_enabled_finish (debug, result, &error))
+ {
+ DEBUG ("Failed to %s debugging on %s", enabled ? "enable" : "disable",
+ tp_proxy_get_bus_name (debug));
+ g_error_free (error);
+ }
+}
- tp_cli_dbus_properties_call_set (proxy, -1, TP_IFACE_DEBUG,
- "Enabled", val, NULL, NULL, NULL, NULL);
+static void
+debug_window_set_enabled (TpDebugClient *debug,
+ gboolean enabled)
+{
+ g_return_if_fail (debug != NULL);
- tp_g_value_slice_free (val);
+ tp_debug_client_set_enabled_async (debug, enabled,
+ set_enabled_cb, GUINT_TO_POINTER (enabled));
}
static void
-debug_window_set_toolbar_sensitivity (EmpathyDebugWindow *debug_window,
+debug_window_set_toolbar_sensitivity (EmpathyDebugWindow *self,
gboolean sensitive)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
- GtkWidget *vbox = gtk_bin_get_child (GTK_BIN (debug_window));
+ GtkWidget *vbox = gtk_bin_get_child (GTK_BIN (self));
- gtk_widget_set_sensitive (GTK_WIDGET (priv->save_button), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->send_to_pastebin), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->copy_button), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->clear_button), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pause_button), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->level_label), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->level_filter), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->view), sensitive);
+ gtk_widget_set_sensitive (GTK_WIDGET (self->priv->save_button), sensitive);
+ gtk_widget_set_sensitive (GTK_WIDGET (self->priv->send_to_pastebin),
+ sensitive);
+ gtk_widget_set_sensitive (GTK_WIDGET (self->priv->copy_button), sensitive);
+ gtk_widget_set_sensitive (GTK_WIDGET (self->priv->clear_button), sensitive);
+ gtk_widget_set_sensitive (GTK_WIDGET (self->priv->pause_button), sensitive);
+ gtk_widget_set_sensitive (GTK_WIDGET (self->priv->level_label), sensitive);
+ gtk_widget_set_sensitive (GTK_WIDGET (self->priv->level_filter), sensitive);
+ gtk_widget_set_sensitive (GTK_WIDGET (self->priv->view), sensitive);
- if (sensitive && !priv->view_visible)
+ if (sensitive && !self->priv->view_visible)
{
/* Add view and remove label */
- gtk_container_remove (GTK_CONTAINER (vbox), priv->not_supported_label);
- gtk_box_pack_start (GTK_BOX (vbox), priv->scrolled_win, TRUE, TRUE, 0);
- priv->view_visible = TRUE;
+ gtk_container_remove (GTK_CONTAINER (vbox),
+ self->priv->not_supported_label);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ self->priv->scrolled_win, TRUE, TRUE, 0);
+ self->priv->view_visible = TRUE;
}
- else if (!sensitive && priv->view_visible)
+ else if (!sensitive && self->priv->view_visible)
{
/* Add label and remove view */
- gtk_container_remove (GTK_CONTAINER (vbox), priv->scrolled_win);
- gtk_box_pack_start (GTK_BOX (vbox), priv->not_supported_label,
+ gtk_container_remove (GTK_CONTAINER (vbox), self->priv->scrolled_win);
+ gtk_box_pack_start (GTK_BOX (vbox), self->priv->not_supported_label,
TRUE, TRUE, 0);
- priv->view_visible = FALSE;
+ self->priv->view_visible = FALSE;
}
}
static gboolean
debug_window_get_iter_for_active_buffer (GtkListStore *active_buffer,
GtkTreeIter *iter,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
gboolean valid_iter;
- GtkTreeModel *model = GTK_TREE_MODEL (priv->service_store);
+ GtkTreeModel *model = GTK_TREE_MODEL (self->priv->service_store);
gtk_tree_model_get_iter_first (model, iter);
for (valid_iter = gtk_tree_model_iter_next (model, iter);
@@ -381,7 +325,7 @@ debug_window_get_iter_for_active_buffer (GtkListStore *active_buffer,
return valid_iter;
}
-static void refresh_all_buffer (EmpathyDebugWindow *debug_window);
+static void refresh_all_buffer (EmpathyDebugWindow *self);
static void
proxy_invalidated_cb (TpProxy *proxy,
@@ -391,8 +335,7 @@ proxy_invalidated_cb (TpProxy *proxy,
gpointer user_data)
{
EmpathyDebugWindow *self = (EmpathyDebugWindow *) user_data;
- EmpathyDebugWindowPriv *priv = GET_PRIV (self);
- GtkTreeModel *service_store = GTK_TREE_MODEL (priv->service_store);
+ GtkTreeModel *service_store = GTK_TREE_MODEL (self->priv->service_store);
TpProxy *stored_proxy;
GtkTreeIter iter;
gboolean valid_iter;
@@ -409,7 +352,7 @@ proxy_invalidated_cb (TpProxy *proxy,
-1);
if (proxy == stored_proxy)
- gtk_list_store_set (priv->service_store, &iter,
+ gtk_list_store_set (self->priv->service_store, &iter,
COL_PROXY, NULL,
-1);
}
@@ -420,57 +363,55 @@ proxy_invalidated_cb (TpProxy *proxy,
}
static void
-debug_window_get_messages_cb (TpProxy *proxy,
- const GPtrArray *messages,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
+debug_window_get_messages_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- EmpathyDebugWindow *debug_window = (EmpathyDebugWindow *) user_data;
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
+ TpDebugClient *debug = TP_DEBUG_CLIENT (object);
+ EmpathyDebugWindow *self = user_data;
gchar *active_service_name;
guint i;
GtkListStore *active_buffer;
gboolean valid_iter;
GtkTreeIter iter;
gchar *proxy_service_name;
+ GPtrArray *messages;
+ GError *error = NULL;
- active_buffer = g_object_get_data (G_OBJECT (proxy), "active-buffer");
+ active_buffer = g_object_get_data (object, "active-buffer");
valid_iter = debug_window_get_iter_for_active_buffer (active_buffer, &iter,
- debug_window);
- gtk_tree_model_get (GTK_TREE_MODEL (priv->service_store), &iter,
+ self);
+ gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), &iter,
COL_NAME, &proxy_service_name,
-1);
- active_service_name = get_active_service_name (debug_window);
- if (error != NULL)
+ active_service_name = get_active_service_name (self);
+
+ messages = tp_debug_client_get_messages_finish (debug, result, &error);
+ if (messages == NULL)
{
- DEBUG ("GetMessages failed: %s", error->message);
+ DEBUG ("Failed to get debug messsages: %s", error->message);
+ g_error_free (error);
/* We want to set the window sensitivity to false only when proxy for the
* selected service is unable to fetch debug messages */
if (!tp_strdiff (active_service_name, proxy_service_name))
- debug_window_set_toolbar_sensitivity (debug_window, FALSE);
+ debug_window_set_toolbar_sensitivity (self, FALSE);
/* We created the proxy for GetMessages call. Now destroy it. */
- tp_clear_object (&proxy);
+ tp_clear_object (&debug);
return;
}
DEBUG ("Retrieved debug messages for %s", active_service_name);
g_free (active_service_name);
- debug_window_set_toolbar_sensitivity (debug_window, TRUE);
-
+ debug_window_set_toolbar_sensitivity (self, TRUE);
for (i = 0; i < messages->len; i++)
{
- GValueArray *values = g_ptr_array_index (messages, i);
+ TpDebugMessage *msg = g_ptr_array_index (messages, i);
- debug_window_add_message (debug_window, proxy,
- g_value_get_double (g_value_array_get_nth (values, 0)),
- g_value_get_string (g_value_array_get_nth (values, 1)),
- g_value_get_uint (g_value_array_get_nth (values, 2)),
- g_value_get_string (g_value_array_get_nth (values, 3)));
+ debug_window_add_message (self, debug, msg);
}
/* Now we save this precious proxy in the service_store along its service */
@@ -479,42 +420,42 @@ debug_window_get_messages_cb (TpProxy *proxy,
DEBUG ("Proxy for service: %s was successful in fetching debug"
" messages. Saving it.", proxy_service_name);
- gtk_list_store_set (priv->service_store, &iter,
- COL_PROXY, proxy,
+ gtk_list_store_set (self->priv->service_store, &iter,
+ COL_PROXY, debug,
-1);
}
g_free (proxy_service_name);
/* Connect to "invalidated" signal */
- g_signal_connect (proxy, "invalidated",
- G_CALLBACK (proxy_invalidated_cb), debug_window);
+ g_signal_connect (debug, "invalidated",
+ G_CALLBACK (proxy_invalidated_cb), self);
/* Connect to NewDebugMessage */
- emp_cli_debug_connect_to_new_debug_message (
- proxy, debug_window_new_debug_message_cb, debug_window,
- NULL, NULL, NULL);
+ tp_g_signal_connect_object (debug, "new-debug-message",
+ G_CALLBACK (debug_window_new_debug_message_cb), self, 0);
/* Now that active-buffer is up to date, we can see which messages are
* to be visible */
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (priv->store_filter));
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (
+ self->priv->store_filter));
/* Set the proxy to signal for new debug messages */
- debug_window_set_enabled (proxy, TRUE);
+ debug_window_set_enabled (debug, TRUE);
}
static void
-create_proxy_to_get_messages (EmpathyDebugWindow *debug_window,
+create_proxy_to_get_messages (EmpathyDebugWindow *self,
GtkTreeIter *iter,
TpDBusDaemon *dbus)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
gchar *bus_name, *name = NULL;
- TpProxy *new_proxy, *stored_proxy = NULL;
+ TpDebugClient *new_proxy, *stored_proxy = NULL;
GtkTreeModel *pause_buffer, *active_buffer;
gboolean gone;
+ GError *error = NULL;
- gtk_tree_model_get (GTK_TREE_MODEL (priv->service_store), iter,
+ gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), iter,
COL_NAME, &name,
COL_GONE, &gone,
COL_ACTIVE_BUFFER, &active_buffer,
@@ -535,13 +476,19 @@ create_proxy_to_get_messages (EmpathyDebugWindow *debug_window,
DEBUG ("Preparing proxy to obtain messages for service %s", name);
- gtk_tree_model_get (GTK_TREE_MODEL (priv->service_store), iter,
+ gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), iter,
COL_UNIQUE_NAME, &bus_name, -1);
- new_proxy = g_object_new (TP_TYPE_PROXY,
- "bus-name", bus_name,
- "dbus-daemon", dbus,
- "object-path", DEBUG_OBJECT_PATH,
- NULL);
+
+ new_proxy = tp_debug_client_new (dbus, bus_name, &error);
+
+ if (new_proxy == NULL)
+ {
+ DEBUG ("Failed to create TpDebugClient on bus %s: %s", bus_name,
+ error->message);
+ g_free (bus_name);
+ goto finally;
+ }
+
g_free (bus_name);
g_object_set_data (G_OBJECT (new_proxy), "active-buffer", active_buffer);
@@ -552,10 +499,9 @@ create_proxy_to_get_messages (EmpathyDebugWindow *debug_window,
* * Wasn't saved as last GetMessages call failed
* * The service has newly arrived and no proxy has been prepared yet for it
* * A service with the same name has reappeared but the owner maybe new */
- tp_proxy_add_interface_by_id (new_proxy, emp_iface_quark_debug ());
- emp_cli_debug_call_get_messages (new_proxy, -1,
- debug_window_get_messages_cb, debug_window, NULL, NULL);
+ tp_debug_client_get_messages_async (TP_DEBUG_CLIENT (new_proxy),
+ debug_window_get_messages_cb, self);
finally:
g_free (name);
@@ -568,12 +514,7 @@ static GtkListStore *
new_list_store_for_service (void)
{
return gtk_list_store_new (NUM_DEBUG_COLS,
- G_TYPE_DOUBLE, /* COL_DEBUG_TIMESTAMP */
- G_TYPE_STRING, /* COL_DEBUG_DOMAIN */
- G_TYPE_STRING, /* COL_DEBUG_CATEGORY */
- G_TYPE_STRING, /* COL_DEBUG_LEVEL_STRING */
- G_TYPE_STRING, /* COL_DEBUG_MESSAGE */
- G_TYPE_UINT); /* COL_DEBUG_LEVEL_VALUE */
+ TP_TYPE_DEBUG_MESSAGE); /* COL_DEBUG_MESSAGE */
}
static gboolean
@@ -581,24 +522,26 @@ debug_window_visible_func (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer user_data)
{
- EmpathyDebugWindow *debug_window = (EmpathyDebugWindow *) user_data;
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
- guint filter_value, level;
+ EmpathyDebugWindow *self = user_data;
+ GLogLevelFlags filter_value;
GtkTreeModel *filter_model;
GtkTreeIter filter_iter;
+ TpDebugMessage *msg;
+ gboolean result;
- filter_model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->level_filter));
- gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->level_filter),
+ filter_model = gtk_combo_box_get_model (
+ GTK_COMBO_BOX (self->priv->level_filter));
+ gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->priv->level_filter),
&filter_iter);
- gtk_tree_model_get (model, iter, COL_DEBUG_LEVEL_VALUE, &level, -1);
+ gtk_tree_model_get (model, iter, COL_DEBUG_MESSAGE, &msg, -1);
gtk_tree_model_get (filter_model, &filter_iter,
COL_LEVEL_VALUE, &filter_value, -1);
- if (level <= filter_value)
- return TRUE;
+ result = (tp_debug_message_get_level (msg) <= filter_value);
+ g_object_unref (msg);
- return FALSE;
+ return result;
}
static gboolean
@@ -633,42 +576,40 @@ tree_view_search_equal_func_cb (GtkTreeModel *model,
}
static void
-update_store_filter (EmpathyDebugWindow *debug_window,
+update_store_filter (EmpathyDebugWindow *self,
GtkListStore *active_buffer)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
- debug_window_set_toolbar_sensitivity (debug_window, FALSE);
+ debug_window_set_toolbar_sensitivity (self, FALSE);
- tp_clear_object (&priv->store_filter);
- priv->store_filter = gtk_tree_model_filter_new (
+ tp_clear_object (&self->priv->store_filter);
+ self->priv->store_filter = gtk_tree_model_filter_new (
GTK_TREE_MODEL (active_buffer), NULL);
gtk_tree_model_filter_set_visible_func (
- GTK_TREE_MODEL_FILTER (priv->store_filter),
- debug_window_visible_func, debug_window, NULL);
- gtk_tree_view_set_model (GTK_TREE_VIEW (priv->view),
- priv->store_filter);
+ GTK_TREE_MODEL_FILTER (self->priv->store_filter),
+ debug_window_visible_func, self, NULL);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (self->priv->view),
+ self->priv->store_filter);
/* Since view's model has changed, reset the search column and
* search_equal_func */
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->view),
+ gtk_tree_view_set_search_column (GTK_TREE_VIEW (self->priv->view),
COL_DEBUG_MESSAGE);
- gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (priv->view),
+ gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (self->priv->view),
tree_view_search_equal_func_cb, NULL, NULL);
- debug_window_set_toolbar_sensitivity (debug_window, TRUE);
+ debug_window_set_toolbar_sensitivity (self, TRUE);
}
static void
-refresh_all_buffer (EmpathyDebugWindow *debug_window)
+refresh_all_buffer (EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
gboolean valid_iter;
GtkTreeIter iter;
- GtkTreeModel *service_store = GTK_TREE_MODEL (priv->service_store);
+ GtkTreeModel *service_store = GTK_TREE_MODEL (self->priv->service_store);
/* Clear All's active-buffer */
- gtk_list_store_clear (priv->all_active_buffer);
+ gtk_list_store_clear (self->priv->all_active_buffer);
/* Skipping the first service store iter which is reserved for "All" */
gtk_tree_model_get_iter_first (service_store, &iter);
@@ -689,7 +630,7 @@ refresh_all_buffer (EmpathyDebugWindow *debug_window)
if (gone)
{
gtk_tree_model_foreach (GTK_TREE_MODEL (service_active_buffer),
- copy_buffered_messages, priv->all_active_buffer);
+ copy_buffered_messages, self->priv->all_active_buffer);
}
else
{
@@ -700,7 +641,7 @@ refresh_all_buffer (EmpathyDebugWindow *debug_window)
/* Copy the debug messages to all_active_buffer */
gtk_tree_model_foreach (GTK_TREE_MODEL (service_active_buffer),
- copy_buffered_messages, priv->all_active_buffer);
+ copy_buffered_messages, self->priv->all_active_buffer);
}
else
{
@@ -713,7 +654,7 @@ refresh_all_buffer (EmpathyDebugWindow *debug_window)
g_error_free (error);
}
- create_proxy_to_get_messages (debug_window, &iter, dbus);
+ create_proxy_to_get_messages (self, &iter, dbus);
g_object_unref (dbus);
}
@@ -726,9 +667,8 @@ refresh_all_buffer (EmpathyDebugWindow *debug_window)
static void
debug_window_service_chooser_changed_cb (GtkComboBox *chooser,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
TpDBusDaemon *dbus;
GError *error = NULL;
GtkListStore *stored_active_buffer = NULL;
@@ -740,16 +680,16 @@ debug_window_service_chooser_changed_cb (GtkComboBox *chooser,
{
DEBUG ("No CM is selected");
if (gtk_tree_model_iter_n_children (
- GTK_TREE_MODEL (priv->service_store), NULL) > 0)
+ GTK_TREE_MODEL (self->priv->service_store), NULL) > 0)
{
gtk_combo_box_set_active (chooser, 0);
}
return;
}
- debug_window_set_toolbar_sensitivity (debug_window, TRUE);
+ debug_window_set_toolbar_sensitivity (self, TRUE);
- gtk_tree_model_get (GTK_TREE_MODEL (priv->service_store), &iter,
+ gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), &iter,
COL_NAME, &name,
COL_GONE, &gone,
COL_ACTIVE_BUFFER, &stored_active_buffer,
@@ -765,11 +705,11 @@ debug_window_service_chooser_changed_cb (GtkComboBox *chooser,
if (!tp_strdiff (name, "All"))
{
- update_store_filter (debug_window, priv->all_active_buffer);
+ update_store_filter (self, self->priv->all_active_buffer);
goto finally;
}
- update_store_filter (debug_window, stored_active_buffer);
+ update_store_filter (self, stored_active_buffer);
dbus = tp_dbus_daemon_dup (&error);
@@ -778,7 +718,7 @@ debug_window_service_chooser_changed_cb (GtkComboBox *chooser,
DEBUG ("Failed at duping the dbus daemon: %s", error->message);
}
- create_proxy_to_get_messages (debug_window, &iter, dbus);
+ create_proxy_to_get_messages (self, &iter, dbus);
g_object_unref (dbus);
@@ -823,12 +763,11 @@ debug_window_service_foreach (GtkTreeModel *model,
}
static gboolean
-debug_window_service_is_in_model (EmpathyDebugWindow *debug_window,
+debug_window_service_is_in_model (EmpathyDebugWindow *self,
const gchar *name,
GtkTreeIter **iter,
gboolean use_name)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
CmInModelForeachData *data;
gboolean found;
@@ -838,7 +777,7 @@ debug_window_service_is_in_model (EmpathyDebugWindow *debug_window,
data->found_iter = iter;
data->use_name = use_name;
- gtk_tree_model_foreach (GTK_TREE_MODEL (priv->service_store),
+ gtk_tree_model_foreach (GTK_TREE_MODEL (self->priv->service_store),
debug_window_service_foreach, data);
found = data->found;
@@ -852,12 +791,11 @@ static gchar *
get_cm_display_name (EmpathyDebugWindow *self,
const char *cm_name)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (self);
GHashTable *protocols = g_hash_table_new (g_str_hash, g_str_equal);
GList *accounts, *ptr;
char *retval;
- accounts = tp_account_manager_get_valid_accounts (priv->am);
+ accounts = tp_account_manager_get_valid_accounts (self->priv->am);
for (ptr = accounts; ptr != NULL; ptr = ptr->next)
{
@@ -906,7 +844,7 @@ get_cm_display_name (EmpathyDebugWindow *self,
typedef struct
{
- EmpathyDebugWindow *debug_window;
+ EmpathyDebugWindow *self;
gchar *name;
ServiceType type;
} FillServiceChooserData;
@@ -918,7 +856,7 @@ fill_service_chooser_data_new (EmpathyDebugWindow *window,
{
FillServiceChooserData * data = g_slice_new (FillServiceChooserData);
- data->debug_window = window;
+ data->self = window;
data->name = g_strdup (name);
data->type = SERVICE_TYPE_CM;
return data;
@@ -939,11 +877,10 @@ debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
GObject *weak_object)
{
FillServiceChooserData *data = (FillServiceChooserData *) user_data;
- EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (data->debug_window);
- EmpathyDebugWindowPriv *priv = GET_PRIV (data->debug_window);
+ EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (data->self);
GtkTreeIter iter;
- priv->name_owner_cb_count++;
+ self->priv->name_owner_cb_count++;
if (error != NULL)
{
@@ -951,7 +888,7 @@ debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
goto OUT;
}
- if (!debug_window_service_is_in_model (data->debug_window, out, NULL, FALSE))
+ if (!debug_window_service_is_in_model (data->self, out, NULL, FALSE))
{
char *name;
GtkListStore *active_buffer, *pause_buffer;
@@ -968,7 +905,7 @@ debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
active_buffer = new_list_store_for_service ();
pause_buffer = new_list_store_for_service ();
- gtk_list_store_insert_with_values (priv->service_store, &iter, -1,
+ gtk_list_store_insert_with_values (self->priv->service_store, &iter, -1,
COL_NAME, name,
COL_UNIQUE_NAME, out,
COL_GONE, FALSE,
@@ -980,30 +917,31 @@ debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
g_object_unref (active_buffer);
g_object_unref (pause_buffer);
- if (priv->select_name != NULL &&
- !tp_strdiff (name, priv->select_name))
+ if (self->priv->select_name != NULL &&
+ !tp_strdiff (name, self->priv->select_name))
{
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->chooser), &iter);
- tp_clear_pointer (&priv->select_name, g_free);
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self->priv->chooser),
+ &iter);
+ tp_clear_pointer (&self->priv->select_name, g_free);
}
g_free (name);
}
- if (priv->services_detected == priv->name_owner_cb_count)
+ if (self->priv->services_detected == self->priv->name_owner_cb_count)
{
/* Time to add "All" selection to service_store */
- gtk_list_store_insert_with_values (priv->service_store, &iter, 0,
+ gtk_list_store_insert_with_values (self->priv->service_store, &iter, 0,
COL_NAME, "All",
COL_ACTIVE_BUFFER, NULL,
-1);
- priv->all_active_buffer = new_list_store_for_service ();
+ self->priv->all_active_buffer = new_list_store_for_service ();
/* Populate active buffers for all services */
refresh_all_buffer (self);
- gtk_combo_box_set_active (GTK_COMBO_BOX (priv->chooser), 0);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (self->priv->chooser), 0);
}
OUT:
@@ -1019,8 +957,7 @@ debug_window_list_connection_names_cb (const gchar * const *names,
gpointer user_data,
GObject *weak_object)
{
- EmpathyDebugWindow *debug_window = (EmpathyDebugWindow *) user_data;
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
+ EmpathyDebugWindow *self = user_data;
guint i;
TpDBusDaemon *dbus;
GError *error2 = NULL;
@@ -1043,13 +980,13 @@ debug_window_list_connection_names_cb (const gchar * const *names,
for (i = 0; cms[i] != NULL; i++)
{
FillServiceChooserData *data = fill_service_chooser_data_new (
- debug_window, cms[i], SERVICE_TYPE_CM);
+ self, cms[i], SERVICE_TYPE_CM);
tp_cli_dbus_daemon_call_get_name_owner (dbus, -1,
names[i], debug_window_get_name_owner_cb,
data, NULL, NULL);
- priv->services_detected ++;
+ self->priv->services_detected ++;
}
g_object_unref (dbus);
@@ -1064,7 +1001,6 @@ debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
GObject *weak_object)
{
EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (user_data);
- EmpathyDebugWindowPriv *priv = GET_PRIV (user_data);
ServiceType type;
const gchar *name;
@@ -1105,7 +1041,8 @@ debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
active_buffer = new_list_store_for_service ();
pause_buffer = new_list_store_for_service ();
- gtk_list_store_insert_with_values (priv->service_store, &iter, -1,
+ gtk_list_store_insert_with_values (self->priv->service_store,
+ &iter, -1,
COL_NAME, display_name,
COL_UNIQUE_NAME, arg2,
COL_GONE, FALSE,
@@ -1130,12 +1067,12 @@ debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
active_buffer= new_list_store_for_service ();
pause_buffer = new_list_store_for_service ();
- gtk_tree_model_get (GTK_TREE_MODEL (priv->service_store),
+ gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store),
found_at_iter, COL_PROXY, &stored_proxy, -1);
tp_clear_object (&stored_proxy);
- gtk_list_store_set (priv->service_store, found_at_iter,
+ gtk_list_store_set (self->priv->service_store, found_at_iter,
COL_NAME, display_name,
COL_UNIQUE_NAME, arg2,
COL_GONE, FALSE,
@@ -1150,7 +1087,7 @@ debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
gtk_tree_iter_free (found_at_iter);
debug_window_service_chooser_changed_cb
- (GTK_COMBO_BOX (priv->chooser), user_data);
+ (GTK_COMBO_BOX (self->priv->chooser), user_data);
}
/* If a new service arrives when "All" is selected, the view will
@@ -1172,7 +1109,7 @@ debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
/* set the service as disabled in the model */
if (debug_window_service_is_in_model (user_data, arg1, &iter, FALSE))
{
- gtk_list_store_set (priv->service_store,
+ gtk_list_store_set (self->priv->service_store,
iter, COL_GONE, TRUE, -1);
gtk_tree_iter_free (iter);
}
@@ -1186,7 +1123,6 @@ static void
add_client (EmpathyDebugWindow *self,
const gchar *name)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (self);
const gchar *suffix;
FillServiceChooserData *data;
@@ -1194,10 +1130,10 @@ add_client (EmpathyDebugWindow *self,
data = fill_service_chooser_data_new (self, suffix, SERVICE_TYPE_CLIENT);
- tp_cli_dbus_daemon_call_get_name_owner (priv->dbus, -1,
+ tp_cli_dbus_daemon_call_get_name_owner (self->priv->dbus, -1,
name, debug_window_get_name_owner_cb, data, NULL, NULL);
- priv->services_detected ++;
+ self->priv->services_detected ++;
}
static void
@@ -1226,14 +1162,13 @@ list_names_cb (TpDBusDaemon *bus_daemon,
}
static void
-debug_window_fill_service_chooser (EmpathyDebugWindow *debug_window)
+debug_window_fill_service_chooser (EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
GError *error = NULL;
GtkTreeIter iter;
GtkListStore *active_buffer, *pause_buffer;
- priv->dbus = tp_dbus_daemon_dup (&error);
+ self->priv->dbus = tp_dbus_daemon_dup (&error);
if (error != NULL)
{
@@ -1243,18 +1178,18 @@ debug_window_fill_service_chooser (EmpathyDebugWindow *debug_window)
}
/* Keep a count of the services detected and added */
- priv->services_detected = 0;
- priv->name_owner_cb_count = 0;
+ self->priv->services_detected = 0;
+ self->priv->name_owner_cb_count = 0;
/* Add CMs to list */
- tp_list_connection_names (priv->dbus, debug_window_list_connection_names_cb,
- debug_window, NULL, NULL);
+ tp_list_connection_names (self->priv->dbus,
+ debug_window_list_connection_names_cb, self, NULL, NULL);
/* add Mission Control */
active_buffer= new_list_store_for_service ();
pause_buffer = new_list_store_for_service ();
- gtk_list_store_insert_with_values (priv->service_store, &iter, -1,
+ gtk_list_store_insert_with_values (self->priv->service_store, &iter, -1,
COL_NAME, "mission-control",
COL_UNIQUE_NAME, "org.freedesktop.Telepathy.MissionControl5",
COL_GONE, FALSE,
@@ -1266,29 +1201,28 @@ debug_window_fill_service_chooser (EmpathyDebugWindow *debug_window)
g_object_unref (pause_buffer);
/* add clients */
- tp_dbus_daemon_list_names (priv->dbus, 2000,
- list_names_cb, NULL, NULL, G_OBJECT (debug_window));
+ tp_dbus_daemon_list_names (self->priv->dbus, 2000,
+ list_names_cb, NULL, NULL, G_OBJECT (self));
- priv->name_owner_changed_signal =
- tp_cli_dbus_daemon_connect_to_name_owner_changed (priv->dbus,
- debug_window_name_owner_changed_cb, debug_window, NULL, NULL, NULL);
+ self->priv->name_owner_changed_signal =
+ tp_cli_dbus_daemon_connect_to_name_owner_changed (self->priv->dbus,
+ debug_window_name_owner_changed_cb, self, NULL, NULL, NULL);
}
static void
debug_window_pause_toggled_cb (GtkToggleToolButton *pause_,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
GtkTreeIter iter;
gboolean valid_iter;
- GtkTreeModel *model = GTK_TREE_MODEL (priv->service_store);
+ GtkTreeModel *model = GTK_TREE_MODEL (self->priv->service_store);
- priv->paused = gtk_toggle_tool_button_get_active (pause_);
+ self->priv->paused = gtk_toggle_tool_button_get_active (pause_);
- if (!priv->paused)
+ if (!self->priv->paused)
{
/* Pause has been released - flush all pause buffers */
- GtkTreeModel *service_store = GTK_TREE_MODEL (priv->service_store);
+ GtkTreeModel *service_store = GTK_TREE_MODEL (self->priv->service_store);
/* Skipping the first iter which is reserved for "All" */
gtk_tree_model_get_iter_first (model, &iter);
@@ -1306,7 +1240,7 @@ debug_window_pause_toggled_cb (GtkToggleToolButton *pause_,
gtk_tree_model_foreach (GTK_TREE_MODEL (pause_buffer),
copy_buffered_messages, active_buffer);
gtk_tree_model_foreach (GTK_TREE_MODEL (pause_buffer),
- copy_buffered_messages, priv->all_active_buffer);
+ copy_buffered_messages, self->priv->all_active_buffer);
gtk_list_store_clear (pause_buffer);
@@ -1318,33 +1252,30 @@ debug_window_pause_toggled_cb (GtkToggleToolButton *pause_,
static void
debug_window_filter_changed_cb (GtkComboBox *filter,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
-
gtk_tree_model_filter_refilter (
- GTK_TREE_MODEL_FILTER (priv->store_filter));
+ GTK_TREE_MODEL_FILTER (self->priv->store_filter));
}
static void
debug_window_clear_clicked_cb (GtkToolButton *clear_button,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
GtkTreeIter iter;
GtkListStore *active_buffer;
/* "All" is the first choice in the service chooser and it's buffer is
- * not saved in the service-store but is accessed using a private
+ * not saved in the service-store but is accessed using a self->private
* reference */
- if (gtk_combo_box_get_active (GTK_COMBO_BOX (priv->chooser)) == 0)
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (self->priv->chooser)) == 0)
{
- gtk_list_store_clear (priv->all_active_buffer);
+ gtk_list_store_clear (self->priv->all_active_buffer);
return;
}
- gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->chooser), &iter);
- gtk_tree_model_get (GTK_TREE_MODEL (priv->service_store), &iter,
+ gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->priv->chooser), &iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), &iter,
COL_ACTIVE_BUFFER, &active_buffer, -1);
gtk_list_store_clear (active_buffer);
@@ -1354,16 +1285,16 @@ debug_window_clear_clicked_cb (GtkToolButton *clear_button,
static void
debug_window_menu_copy_activate_cb (GtkMenuItem *menu_item,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
GtkTreePath *path;
GtkTreeViewColumn *focus_column;
GtkTreeIter iter;
- gchar *message;
+ TpDebugMessage *msg;
+ const gchar *message;
GtkClipboard *clipboard;
- gtk_tree_view_get_cursor (GTK_TREE_VIEW (priv->view),
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (self->priv->view),
&path, &focus_column);
if (path == NULL)
@@ -1372,12 +1303,14 @@ debug_window_menu_copy_activate_cb (GtkMenuItem *menu_item,
return;
}
- gtk_tree_model_get_iter (priv->store_filter, &iter, path);
+ gtk_tree_model_get_iter (self->priv->store_filter, &iter, path);
- gtk_tree_model_get (priv->store_filter, &iter,
- COL_DEBUG_MESSAGE, &message,
+ gtk_tree_model_get (self->priv->store_filter, &iter,
+ COL_DEBUG_MESSAGE, &msg,
-1);
+ message = tp_debug_message_get_message (msg);
+
if (EMP_STR_EMPTY (message))
{
DEBUG ("Log message is empty");
@@ -1390,12 +1323,12 @@ debug_window_menu_copy_activate_cb (GtkMenuItem *menu_item,
gtk_clipboard_set_text (clipboard, message, -1);
- g_free (message);
+ g_object_unref (msg);
}
typedef struct
{
- EmpathyDebugWindow *debug_window;
+ EmpathyDebugWindow *self;
guint button;
guint32 time;
} MenuPopupData;
@@ -1407,13 +1340,13 @@ debug_window_show_menu (gpointer user_data)
GtkWidget *menu, *item;
GtkMenuShell *shell;
- menu = empathy_context_menu_new (GTK_WIDGET (data->debug_window));
+ menu = empathy_context_menu_new (GTK_WIDGET (data->self));
shell = GTK_MENU_SHELL (menu);
item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL);
g_signal_connect (item, "activate",
- G_CALLBACK (debug_window_menu_copy_activate_cb), data->debug_window);
+ G_CALLBACK (debug_window_menu_copy_activate_cb), data->self);
gtk_menu_shell_append (shell, item);
gtk_widget_show (item);
@@ -1438,7 +1371,7 @@ debug_window_button_press_event_cb (GtkTreeView *view,
/* The tree view was right-clicked. (3 == third mouse button) */
MenuPopupData *data;
data = g_slice_new0 (MenuPopupData);
- data->debug_window = user_data;
+ data->self = user_data;
data->button = event->button;
data->time = event->time;
g_idle_add (debug_window_show_menu, data);
@@ -1448,25 +1381,20 @@ debug_window_button_press_event_cb (GtkTreeView *view,
}
static gchar *
-debug_window_format_timestamp (gdouble timestamp)
+debug_window_format_timestamp (TpDebugMessage *msg)
{
- struct tm *tstruct;
- char time_str[32];
+ GDateTime *t;
+ gchar *time_str, *text;
gint ms;
- time_t sec;
- gchar *text;
- ms = (int) ((timestamp - (int) timestamp)*1e6);
- sec = (long) timestamp;
- tstruct = localtime ((time_t *) &sec);
- if (!strftime (time_str, sizeof (time_str), "%x %T", tstruct))
- {
- DEBUG ("Failed to format timestamp: %e", timestamp);
- time_str[0] = '\0';
- }
+ t = tp_debug_message_get_time (msg);
+
+ time_str = g_date_time_format (t, "%x %T");
+ ms = g_date_time_get_microsecond (t);
text = g_strdup_printf ("%s.%d", time_str, ms);
+ g_free (time_str);
return text;
}
@@ -1477,62 +1405,131 @@ debug_window_time_formatter (GtkTreeViewColumn *tree_column,
GtkTreeIter *iter,
gpointer data)
{
- gdouble timestamp;
+ TpDebugMessage *msg;
gchar *time_str;
- gtk_tree_model_get (tree_model, iter, COL_DEBUG_TIMESTAMP, &timestamp, -1);
+ gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
- time_str = debug_window_format_timestamp (timestamp);
+ time_str = debug_window_format_timestamp (msg);
g_object_set (G_OBJECT (cell), "text", time_str, NULL);
- g_free (time_str);
+ g_object_unref (msg);
+}
+
+static void
+debug_window_domain_formatter (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ TpDebugMessage *msg;
+
+ gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
+
+ g_object_set (G_OBJECT (cell), "text", tp_debug_message_get_domain (msg),
+ NULL);
+
+ g_object_unref (msg);
+}
+
+static void
+debug_window_category_formatter (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ TpDebugMessage *msg;
+ const gchar *category;
+
+ gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
+
+ category = tp_debug_message_get_category (msg);
+
+ g_object_set (G_OBJECT (cell), "text", category ? category : "", NULL);
+
+ g_object_unref (msg);
+}
+
+static void
+debug_window_message_formatter (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ TpDebugMessage *msg;
+
+ gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
+
+ g_object_set (G_OBJECT (cell), "text",
+ tp_debug_message_get_message (msg), NULL);
+
+ g_object_unref (msg);
+}
+
+static void
+debug_window_level_formatter (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ TpDebugMessage *msg;
+ const gchar *level;
+
+ gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
+
+ level = log_level_to_string (tp_debug_message_get_level (msg));
+
+ g_object_set (G_OBJECT (cell), "text", level, NULL);
+
+ g_object_unref (msg);
}
static gboolean
-debug_window_store_filter_foreach (GtkTreeModel *model,
+debug_window_copy_model_foreach (GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer user_data)
{
- gchar **debug_data = (gchar **)user_data;
- gchar *domain, *category, *message, *level_str, *level_upper;
- gdouble timestamp;
- gchar *line, *time_str, *tmp;
+ gchar **text = (gchar **) user_data;
+ gchar *tmp;
+ gchar *level_upper;
+ const gchar *level_str, *category;
+ gchar *line, *time_str;
+ TpDebugMessage *msg;
+
+ if (*text == NULL)
+ *text = g_strdup ("");
gtk_tree_model_get (model, iter,
- COL_DEBUG_TIMESTAMP, &timestamp,
- COL_DEBUG_DOMAIN, &domain,
- COL_DEBUG_CATEGORY, &category,
- COL_DEBUG_LEVEL_STRING, &level_str,
- COL_DEBUG_MESSAGE, &message,
+ COL_DEBUG_MESSAGE, &msg,
-1);
+ level_str = log_level_to_string (tp_debug_message_get_level (msg));
level_upper = g_ascii_strup (level_str, -1);
- time_str = debug_window_format_timestamp (timestamp);
+ time_str = debug_window_format_timestamp (msg);
+ category = tp_debug_message_get_category (msg);
line = g_strdup_printf ("%s%s%s-%s: %s: %s\n",
- domain, EMP_STR_EMPTY (category) ? "" : "/",
- category, level_upper, time_str, message);
+ tp_debug_message_get_domain (msg),
+ category ? "" : "/", category ? category : "",
+ level_upper, time_str, tp_debug_message_get_message (msg));
g_free (time_str);
- /* Compact all message lines in the out parameter debug_data */
- if (!tp_str_empty (*debug_data))
- tmp = g_strconcat (*debug_data, line, NULL);
- else
- tmp = g_strdup (line);
-
- g_free (*debug_data);
- *debug_data = tmp;
+ tmp = g_strconcat (*text, line, NULL);
+ g_free (*text);
g_free (line);
g_free (level_upper);
- g_free (level_str);
- g_free (domain);
- g_free (category);
- g_free (message);
+ g_object_unref (msg);
+
+ *text = tmp;
return FALSE;
}
@@ -1540,9 +1537,8 @@ debug_window_store_filter_foreach (GtkTreeModel *model,
static void
debug_window_save_file_chooser_response_cb (GtkDialog *dialog,
gint response_id,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
gchar *filename = NULL;
GFile *gfile = NULL;
gchar *debug_data = NULL;
@@ -1568,8 +1564,8 @@ debug_window_save_file_chooser_response_cb (GtkDialog *dialog,
goto OUT;
}
- gtk_tree_model_foreach (priv->store_filter,
- debug_window_store_filter_foreach, &debug_data);
+ gtk_tree_model_foreach (self->priv->store_filter,
+ debug_window_copy_model_foreach, &debug_data);
g_output_stream_write (G_OUTPUT_STREAM (output_stream), debug_data,
strlen (debug_data), NULL, &file_write_error);
@@ -1596,7 +1592,7 @@ OUT:
static void
debug_window_save_clicked_cb (GtkToolButton *tool_button,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
GtkWidget *file_chooser;
gchar *name, *tmp = NULL;
@@ -1605,7 +1601,7 @@ debug_window_save_clicked_cb (GtkToolButton *tool_button,
struct tm *tm_s;
file_chooser = gtk_file_chooser_dialog_new (_("Save"),
- GTK_WINDOW (debug_window), GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_WINDOW (self), GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
@@ -1617,7 +1613,7 @@ debug_window_save_clicked_cb (GtkToolButton *tool_button,
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (file_chooser),
g_get_home_dir ());
- name = get_active_service_name (debug_window);
+ name = get_active_service_name (self);
t = time (NULL);
tm_s = localtime (&t);
@@ -1636,7 +1632,7 @@ debug_window_save_clicked_cb (GtkToolButton *tool_button,
g_signal_connect (file_chooser, "response",
G_CALLBACK (debug_window_save_file_chooser_response_cb),
- debug_window);
+ self);
gtk_widget_show (file_chooser);
}
@@ -1654,7 +1650,7 @@ debug_window_pastebin_response_dialog_closed_cb (GtkDialog *dialog,
static void
debug_window_pastebin_callback (SoupSession *session,
SoupMessage *msg,
- gpointer debug_window)
+ gpointer self)
{
GtkWidget *dialog;
SoupBuffer *buffer;
@@ -1662,7 +1658,7 @@ debug_window_pastebin_callback (SoupSession *session,
buffer = soup_message_body_flatten (msg->response_body);
if (g_str_has_prefix (buffer->data, "http://pastebin.com/"))
{
- dialog = gtk_message_dialog_new (GTK_WINDOW (debug_window),
+ dialog = gtk_message_dialog_new (GTK_WINDOW (self),
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
_("Pastebin link"));
@@ -1671,7 +1667,7 @@ debug_window_pastebin_callback (SoupSession *session,
}
else
{
- dialog = gtk_message_dialog_new (GTK_WINDOW (debug_window),
+ dialog = gtk_message_dialog_new (GTK_WINDOW (self),
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
_("Pastebin response"));
@@ -1685,7 +1681,7 @@ debug_window_pastebin_callback (SoupSession *session,
g_object_unref (session);
- gtk_window_set_transient_for (GTK_WINDOW (dialog), debug_window);
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), self);
gtk_widget_show_all (GTK_WIDGET (dialog));
@@ -1694,26 +1690,26 @@ debug_window_pastebin_callback (SoupSession *session,
}
static void
-debug_window_message_dialog (EmpathyDebugWindow *debug_window,
+debug_window_message_dialog (EmpathyDebugWindow *self,
const gchar *primary_text,
const gchar *secondary_text)
{
GtkWidget *dialog;
- dialog = gtk_message_dialog_new (GTK_WINDOW (debug_window),
+ dialog = gtk_message_dialog_new (GTK_WINDOW (self),
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
"%s", _(primary_text));
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
"%s", _(secondary_text));
gtk_window_set_transient_for (GTK_WINDOW (dialog),
- GTK_WINDOW (debug_window));
+ GTK_WINDOW (self));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
static void
-debug_window_send_to_pastebin (EmpathyDebugWindow *debug_window,
+debug_window_send_to_pastebin (EmpathyDebugWindow *self,
gchar *debug_data)
{
SoupSession *session;
@@ -1722,7 +1718,7 @@ debug_window_send_to_pastebin (EmpathyDebugWindow *debug_window,
if (tp_str_empty (debug_data))
{
- debug_window_message_dialog (debug_window, "Error", "No data to send");
+ debug_window_message_dialog (self, "Error", "No data to send");
return;
}
@@ -1751,81 +1747,32 @@ debug_window_send_to_pastebin (EmpathyDebugWindow *debug_window,
g_free (formdata);
soup_session_queue_message (session, msg, debug_window_pastebin_callback,
- debug_window);
+ self);
}
static void
debug_window_send_to_pastebin_cb (GtkToolButton *tool_button,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
gchar *debug_data = NULL;
DEBUG ("Preparing debug data for sending to pastebin.");
- gtk_tree_model_foreach (priv->store_filter,
- debug_window_store_filter_foreach, &debug_data);
+ gtk_tree_model_foreach (self->priv->store_filter,
+ debug_window_copy_model_foreach, &debug_data);
- debug_window_send_to_pastebin (debug_window, debug_data);
+ debug_window_send_to_pastebin (self, debug_data);
g_free (debug_data);
}
-static gboolean
-debug_window_copy_model_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- gchar **text = (gchar **) user_data;
- gchar *tmp;
- gchar *domain, *category, *message, *level_str, *level_upper;
- gdouble timestamp;
- gchar *line, *time_str;
-
- gtk_tree_model_get (model, iter,
- COL_DEBUG_TIMESTAMP, &timestamp,
- COL_DEBUG_DOMAIN, &domain,
- COL_DEBUG_CATEGORY, &category,
- COL_DEBUG_LEVEL_STRING, &level_str,
- COL_DEBUG_MESSAGE, &message,
- -1);
-
- level_upper = g_ascii_strup (level_str, -1);
-
- time_str = debug_window_format_timestamp (timestamp);
-
- line = g_strdup_printf ("%s%s%s-%s: %s: %s\n",
- domain, EMP_STR_EMPTY (category) ? "" : "/",
- category, level_upper, time_str, message);
-
- g_free (time_str);
-
- tmp = g_strconcat (*text, line, NULL);
-
- g_free (*text);
- g_free (line);
- g_free (level_upper);
- g_free (level_str);
- g_free (domain);
- g_free (category);
- g_free (message);
-
- *text = tmp;
-
- return FALSE;
-}
-
static void
debug_window_copy_clicked_cb (GtkToolButton *tool_button,
- EmpathyDebugWindow *debug_window)
+ EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window);
GtkClipboard *clipboard;
- gchar *text;
-
- text = g_strdup ("");
+ gchar *text = NULL;
- gtk_tree_model_foreach (priv->store_filter,
+ gtk_tree_model_foreach (self->priv->store_filter,
debug_window_copy_model_foreach, &text);
clipboard = gtk_clipboard_get_for_display (
@@ -1859,8 +1806,7 @@ static void
empathy_debug_window_select_name (EmpathyDebugWindow *self,
const gchar *name)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (self);
- GtkTreeModel *model = GTK_TREE_MODEL (priv->service_store);
+ GtkTreeModel *model = GTK_TREE_MODEL (self->priv->service_store);
GtkTreeIter iter;
gchar *iter_name;
gboolean valid, found = FALSE;
@@ -1883,7 +1829,7 @@ empathy_debug_window_select_name (EmpathyDebugWindow *self,
}
if (found)
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->chooser), &iter);
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self->priv->chooser), &iter);
}
static void
@@ -1891,8 +1837,8 @@ am_prepared_cb (GObject *am,
GAsyncResult *res,
gpointer user_data)
{
+ EmpathyDebugWindow *self = user_data;
GObject *object = user_data;
- EmpathyDebugWindowPriv *priv = GET_PRIV (object);
GtkWidget *vbox;
GtkWidget *toolbar;
GtkWidget *image;
@@ -1932,194 +1878,209 @@ am_prepared_cb (GObject *am,
gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
/* CM */
- priv->chooser = gtk_combo_box_text_new ();
- priv->service_store = gtk_list_store_new (NUM_COLS,
+ self->priv->chooser = gtk_combo_box_text_new ();
+ self->priv->service_store = gtk_list_store_new (NUM_COLS,
G_TYPE_STRING, /* COL_NAME */
G_TYPE_STRING, /* COL_UNIQUE_NAME */
G_TYPE_BOOLEAN, /* COL_GONE */
G_TYPE_OBJECT, /* COL_ACTIVE_BUFFER */
G_TYPE_OBJECT, /* COL_PAUSE_BUFFER */
TP_TYPE_PROXY); /* COL_PROXY */
- gtk_combo_box_set_model (GTK_COMBO_BOX (priv->chooser),
- GTK_TREE_MODEL (priv->service_store));
- gtk_widget_show (priv->chooser);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (self->priv->chooser),
+ GTK_TREE_MODEL (self->priv->service_store));
+ gtk_widget_show (self->priv->chooser);
item = gtk_tool_item_new ();
gtk_widget_show (GTK_WIDGET (item));
- gtk_container_add (GTK_CONTAINER (item), priv->chooser);
+ gtk_container_add (GTK_CONTAINER (item), self->priv->chooser);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
- g_signal_connect (priv->chooser, "changed",
+ g_signal_connect (self->priv->chooser, "changed",
G_CALLBACK (debug_window_service_chooser_changed_cb), object);
- gtk_widget_show (GTK_WIDGET (priv->chooser));
+ gtk_widget_show (GTK_WIDGET (self->priv->chooser));
item = gtk_separator_tool_item_new ();
gtk_widget_show (GTK_WIDGET (item));
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
/* Save */
- priv->save_button = gtk_tool_button_new_from_stock (GTK_STOCK_SAVE);
- g_signal_connect (priv->save_button, "clicked",
+ self->priv->save_button = gtk_tool_button_new_from_stock (GTK_STOCK_SAVE);
+ g_signal_connect (self->priv->save_button, "clicked",
G_CALLBACK (debug_window_save_clicked_cb), object);
- gtk_widget_show (GTK_WIDGET (priv->save_button));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (priv->save_button), TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->save_button, -1);
+ gtk_widget_show (GTK_WIDGET (self->priv->save_button));
+ gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->save_button),
+ TRUE);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->save_button, -1);
/* Send to pastebin */
- priv->send_to_pastebin = gtk_tool_button_new_from_stock (GTK_STOCK_PASTE);
- gtk_tool_button_set_label (GTK_TOOL_BUTTON (priv->send_to_pastebin),
+ self->priv->send_to_pastebin = gtk_tool_button_new_from_stock (
+ GTK_STOCK_PASTE);
+ gtk_tool_button_set_label (GTK_TOOL_BUTTON (self->priv->send_to_pastebin),
_("Send to pastebin"));
- g_signal_connect (priv->send_to_pastebin, "clicked",
+ g_signal_connect (self->priv->send_to_pastebin, "clicked",
G_CALLBACK (debug_window_send_to_pastebin_cb), object);
- gtk_widget_show (GTK_WIDGET (priv->send_to_pastebin));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (priv->send_to_pastebin), TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->send_to_pastebin, -1);
+ gtk_widget_show (GTK_WIDGET (self->priv->send_to_pastebin));
+ gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->send_to_pastebin),
+ TRUE);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->send_to_pastebin, -1);
/* Copy */
- priv->copy_button = gtk_tool_button_new_from_stock (GTK_STOCK_COPY);
- g_signal_connect (priv->copy_button, "clicked",
+ self->priv->copy_button = gtk_tool_button_new_from_stock (GTK_STOCK_COPY);
+ g_signal_connect (self->priv->copy_button, "clicked",
G_CALLBACK (debug_window_copy_clicked_cb), object);
- gtk_widget_show (GTK_WIDGET (priv->copy_button));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (priv->copy_button), TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->copy_button, -1);
+ gtk_widget_show (GTK_WIDGET (self->priv->copy_button));
+ gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->copy_button),
+ TRUE);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->copy_button, -1);
/* Clear */
- priv->clear_button = gtk_tool_button_new_from_stock (GTK_STOCK_CLEAR);
- g_signal_connect (priv->clear_button, "clicked",
+ self->priv->clear_button = gtk_tool_button_new_from_stock (GTK_STOCK_CLEAR);
+ g_signal_connect (self->priv->clear_button, "clicked",
G_CALLBACK (debug_window_clear_clicked_cb), object);
- gtk_widget_show (GTK_WIDGET (priv->clear_button));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (priv->clear_button), TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->clear_button, -1);
+ gtk_widget_show (GTK_WIDGET (self->priv->clear_button));
+ gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->clear_button),
+ TRUE);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->clear_button, -1);
item = gtk_separator_tool_item_new ();
gtk_widget_show (GTK_WIDGET (item));
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
/* Pause */
- priv->paused = FALSE;
+ self->priv->paused = FALSE;
image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PAUSE,
GTK_ICON_SIZE_MENU);
gtk_widget_show (image);
- priv->pause_button = gtk_toggle_tool_button_new ();
+ self->priv->pause_button = gtk_toggle_tool_button_new ();
gtk_toggle_tool_button_set_active (
- GTK_TOGGLE_TOOL_BUTTON (priv->pause_button), priv->paused);
- g_signal_connect (priv->pause_button, "toggled",
+ GTK_TOGGLE_TOOL_BUTTON (self->priv->pause_button), self->priv->paused);
+ g_signal_connect (self->priv->pause_button, "toggled",
G_CALLBACK (debug_window_pause_toggled_cb), object);
- gtk_widget_show (GTK_WIDGET (priv->pause_button));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (priv->pause_button), TRUE);
- gtk_tool_button_set_label (GTK_TOOL_BUTTON (priv->pause_button), _("Pause"));
+ gtk_widget_show (GTK_WIDGET (self->priv->pause_button));
+ gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->pause_button),
+ TRUE);
+ gtk_tool_button_set_label (GTK_TOOL_BUTTON (self->priv->pause_button),
+ _("Pause"));
gtk_tool_button_set_icon_widget (
- GTK_TOOL_BUTTON (priv->pause_button), image);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->pause_button, -1);
+ GTK_TOOL_BUTTON (self->priv->pause_button), image);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->pause_button, -1);
item = gtk_separator_tool_item_new ();
gtk_widget_show (GTK_WIDGET (item));
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
/* Level */
- priv->level_label = gtk_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (priv->level_label));
+ self->priv->level_label = gtk_tool_item_new ();
+ gtk_widget_show (GTK_WIDGET (self->priv->level_label));
label = gtk_label_new (_("Level "));
gtk_widget_show (label);
- gtk_container_add (GTK_CONTAINER (priv->level_label), label);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->level_label, -1);
+ gtk_container_add (GTK_CONTAINER (self->priv->level_label), label);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->level_label, -1);
- priv->level_filter = gtk_combo_box_text_new ();
- gtk_widget_show (priv->level_filter);
+ self->priv->level_filter = gtk_combo_box_text_new ();
+ gtk_widget_show (self->priv->level_filter);
item = gtk_tool_item_new ();
gtk_widget_show (GTK_WIDGET (item));
- gtk_container_add (GTK_CONTAINER (item), priv->level_filter);
+ gtk_container_add (GTK_CONTAINER (item), self->priv->level_filter);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
level_store = gtk_list_store_new (NUM_COLS_LEVEL,
G_TYPE_STRING, G_TYPE_UINT);
- gtk_combo_box_set_model (GTK_COMBO_BOX (priv->level_filter),
+ gtk_combo_box_set_model (GTK_COMBO_BOX (self->priv->level_filter),
GTK_TREE_MODEL (level_store));
gtk_list_store_insert_with_values (level_store, &iter, -1,
COL_LEVEL_NAME, _("Debug"),
- COL_LEVEL_VALUE, TP_DEBUG_LEVEL_DEBUG,
+ COL_LEVEL_VALUE, G_LOG_LEVEL_DEBUG,
-1);
gtk_list_store_insert_with_values (level_store, &iter, -1,
COL_LEVEL_NAME, _("Info"),
- COL_LEVEL_VALUE, TP_DEBUG_LEVEL_INFO,
+ COL_LEVEL_VALUE, G_LOG_LEVEL_INFO,
-1);
gtk_list_store_insert_with_values (level_store, &iter, -1,
COL_LEVEL_NAME, _("Message"),
- COL_LEVEL_VALUE, TP_DEBUG_LEVEL_MESSAGE,
+ COL_LEVEL_VALUE, G_LOG_LEVEL_MESSAGE,
-1);
gtk_list_store_insert_with_values (level_store, &iter, -1,
COL_LEVEL_NAME, _("Warning"),
- COL_LEVEL_VALUE, TP_DEBUG_LEVEL_WARNING,
+ COL_LEVEL_VALUE, G_LOG_LEVEL_WARNING,
-1);
gtk_list_store_insert_with_values (level_store, &iter, -1,
COL_LEVEL_NAME, _("Critical"),
- COL_LEVEL_VALUE, TP_DEBUG_LEVEL_CRITICAL,
+ COL_LEVEL_VALUE, G_LOG_LEVEL_CRITICAL,
-1);
gtk_list_store_insert_with_values (level_store, &iter, -1,
COL_LEVEL_NAME, _("Error"),
- COL_LEVEL_VALUE, TP_DEBUG_LEVEL_ERROR,
+ COL_LEVEL_VALUE, G_LOG_LEVEL_ERROR,
-1);
- gtk_combo_box_set_active (GTK_COMBO_BOX (priv->level_filter), 0);
- g_signal_connect (priv->level_filter, "changed",
+ gtk_combo_box_set_active (GTK_COMBO_BOX (self->priv->level_filter), 0);
+ g_signal_connect (self->priv->level_filter, "changed",
G_CALLBACK (debug_window_filter_changed_cb), object);
/* Debug treeview */
- priv->view = gtk_tree_view_new ();
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (priv->view), TRUE);
+ self->priv->view = gtk_tree_view_new ();
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (self->priv->view), TRUE);
- g_signal_connect (priv->view, "button-press-event",
+ g_signal_connect (self->priv->view, "button-press-event",
G_CALLBACK (debug_window_button_press_event_cb), object);
renderer = gtk_cell_renderer_text_new ();
g_object_set (renderer, "yalign", 0, NULL);
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (priv->view),
+ gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
-1, _("Time"), renderer,
(GtkTreeCellDataFunc) debug_window_time_formatter, NULL, NULL);
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->view),
- -1, _("Domain"), renderer, "text", COL_DEBUG_DOMAIN, NULL);
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->view),
- -1, _("Category"), renderer, "text", COL_DEBUG_CATEGORY, NULL);
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->view),
- -1, _("Level"), renderer, "text", COL_DEBUG_LEVEL_STRING, NULL);
+ gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
+ -1, _("Domain"), renderer,
+ (GtkTreeCellDataFunc) debug_window_domain_formatter, NULL, NULL);
+ gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
+ -1, _("Category"), renderer,
+ (GtkTreeCellDataFunc) debug_window_category_formatter, NULL, NULL);
+ gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
+ -1, _("Level"), renderer,
+ (GtkTreeCellDataFunc) debug_window_level_formatter, NULL, NULL);
renderer = gtk_cell_renderer_text_new ();
g_object_set (renderer, "family", "Monospace", NULL);
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->view),
- -1, _("Message"), renderer, "text", COL_DEBUG_MESSAGE, NULL);
+ gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
+ -1, _("Message"), renderer,
+ (GtkTreeCellDataFunc) debug_window_message_formatter, NULL, NULL);
- priv->store_filter = NULL;
+ self->priv->store_filter = NULL;
- gtk_tree_view_set_model (GTK_TREE_VIEW (priv->view), priv->store_filter);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (self->priv->view),
+ self->priv->store_filter);
/* Scrolled window */
- priv->scrolled_win = g_object_ref (gtk_scrolled_window_new (NULL, NULL));
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_win),
+ self->priv->scrolled_win = g_object_ref (gtk_scrolled_window_new (
+ NULL, NULL));
+ gtk_scrolled_window_set_policy (
+ GTK_SCROLLED_WINDOW (self->priv->scrolled_win),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_widget_show (priv->view);
- gtk_container_add (GTK_CONTAINER (priv->scrolled_win), priv->view);
+ gtk_widget_show (self->priv->view);
+ gtk_container_add (GTK_CONTAINER (self->priv->scrolled_win),
+ self->priv->view);
- gtk_widget_show (priv->scrolled_win);
+ gtk_widget_show (self->priv->scrolled_win);
/* Not supported label */
- priv->not_supported_label = g_object_ref (gtk_label_new (
+ self->priv->not_supported_label = g_object_ref (gtk_label_new (
_("The selected connection manager does not support the remote "
"debugging extension.")));
- gtk_widget_show (priv->not_supported_label);
- gtk_box_pack_start (GTK_BOX (vbox), priv->not_supported_label,
+ gtk_widget_show (self->priv->not_supported_label);
+ gtk_box_pack_start (GTK_BOX (vbox), self->priv->not_supported_label,
TRUE, TRUE, 0);
- priv->view_visible = FALSE;
+ self->priv->view_visible = FALSE;
- priv->all_active_buffer = NULL;
+ self->priv->all_active_buffer = NULL;
debug_window_set_toolbar_sensitivity (EMPATHY_DEBUG_WINDOW (object), FALSE);
debug_window_fill_service_chooser (EMPATHY_DEBUG_WINDOW (object));
@@ -2129,22 +2090,17 @@ am_prepared_cb (GObject *am,
static void
debug_window_constructed (GObject *object)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (object);
+ EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (object);
- priv->am = tp_account_manager_dup ();
- tp_proxy_prepare_async (priv->am, NULL, am_prepared_cb, object);
+ self->priv->am = tp_account_manager_dup ();
+ tp_proxy_prepare_async (self->priv->am, NULL, am_prepared_cb, object);
}
static void
-empathy_debug_window_init (EmpathyDebugWindow *empathy_debug_window)
+empathy_debug_window_init (EmpathyDebugWindow *self)
{
- EmpathyDebugWindowPriv *priv =
- G_TYPE_INSTANCE_GET_PRIVATE (empathy_debug_window,
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
EMPATHY_TYPE_DEBUG_WINDOW, EmpathyDebugWindowPriv);
-
- empathy_debug_window->priv = priv;
-
- priv->dispose_run = FALSE;
}
static void
@@ -2178,9 +2134,9 @@ debug_window_get_property (GObject *object,
static void
debug_window_finalize (GObject *object)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (object);
+ EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (object);
- g_free (priv->select_name);
+ g_free (self->priv->select_name);
(G_OBJECT_CLASS (empathy_debug_window_parent_class)->finalize) (object);
}
@@ -2188,30 +2144,16 @@ debug_window_finalize (GObject *object)
static void
debug_window_dispose (GObject *object)
{
- EmpathyDebugWindow *selector = EMPATHY_DEBUG_WINDOW (object);
- EmpathyDebugWindowPriv *priv = GET_PRIV (selector);
+ EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (object);
- if (priv->dispose_run)
- return;
+ if (self->priv->name_owner_changed_signal != NULL)
+ tp_proxy_signal_connection_disconnect (
+ self->priv->name_owner_changed_signal);
- priv->dispose_run = TRUE;
-
- if (priv->name_owner_changed_signal != NULL)
- tp_proxy_signal_connection_disconnect (priv->name_owner_changed_signal);
-
- if (priv->service_store != NULL)
- g_object_unref (priv->service_store);
-
- if (priv->dbus != NULL)
- g_object_unref (priv->dbus);
-
- if (priv->am != NULL)
- {
- g_object_unref (priv->am);
- priv->am = NULL;
- }
-
- tp_clear_object (&priv->all_active_buffer);
+ g_clear_object (&self->priv->service_store);
+ g_clear_object (&self->priv->dbus);
+ g_clear_object (&self->priv->am);
+ g_clear_object (&self->priv->all_active_buffer);
(G_OBJECT_CLASS (empathy_debug_window_parent_class)->dispose) (object);
}
@@ -2225,6 +2167,7 @@ empathy_debug_window_class_init (EmpathyDebugWindowClass *klass)
object_class->finalize = debug_window_finalize;
object_class->set_property = debug_window_set_property;
object_class->get_property = debug_window_get_property;
+
g_type_class_add_private (klass, sizeof (EmpathyDebugWindowPriv));
}
@@ -2243,15 +2186,13 @@ void
empathy_debug_window_show (EmpathyDebugWindow *self,
const gchar *name)
{
- EmpathyDebugWindowPriv *priv = GET_PRIV (self);
-
- if (priv->service_store != NULL)
+ if (self->priv->service_store != NULL)
{
empathy_debug_window_select_name (self, name);
}
else
{
- g_free (priv->select_name);
- priv->select_name = g_strdup (name);
+ g_free (self->priv->select_name);
+ self->priv->select_name = g_strdup (name);
}
}
diff --git a/src/empathy-debug-window.h b/src/empathy-debug-window.h
index 9815c85de..42bb43ef7 100644
--- a/src/empathy-debug-window.h
+++ b/src/empathy-debug-window.h
@@ -42,11 +42,12 @@ G_BEGIN_DECLS
typedef struct _EmpathyDebugWindow EmpathyDebugWindow;
typedef struct _EmpathyDebugWindowClass EmpathyDebugWindowClass;
+typedef struct _EmpathyDebugWindowPriv EmpathyDebugWindowPriv;
struct _EmpathyDebugWindow
{
GtkWindow parent;
- gpointer priv;
+ EmpathyDebugWindowPriv *priv;
};
struct _EmpathyDebugWindowClass
diff --git a/src/empathy-debugger.c b/src/empathy-debugger.c
index 0bf34e015..d4ce3273a 100644
--- a/src/empathy-debugger.c
+++ b/src/empathy-debugger.c
@@ -74,7 +74,7 @@ command_line_cb (GApplication *application,
optcontext = g_option_context_new (N_("- Empathy Debugger"));
g_option_context_add_group (optcontext, gtk_get_option_group (TRUE));
g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
-
+ g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
argv = g_application_command_line_get_arguments (command_line, &argc);
if (!g_option_context_parse (optcontext, &argc, &argv, &error))
@@ -101,9 +101,9 @@ main (int argc,
GtkApplication *app;
gint retval;
- g_thread_init (NULL);
gtk_init (&argc, &argv);
empathy_gtk_init ();
+ textdomain (GETTEXT_PACKAGE);
app = gtk_application_new (EMPATHY_DEBUGGER_DBUS_NAME,
G_APPLICATION_HANDLES_COMMAND_LINE);
@@ -115,7 +115,6 @@ main (int argc,
/* Make empathy and empathy-debugger appear as the same app in gnome-shell */
gdk_set_program_class ("Empathy");
gtk_window_set_default_icon_name ("empathy");
- textdomain (GETTEXT_PACKAGE);
retval = g_application_run (G_APPLICATION (app), argc, argv);
diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c
index 33854974b..d10af58e8 100644
--- a/src/empathy-event-manager.c
+++ b/src/empathy-event-manager.c
@@ -30,10 +30,8 @@
#include <telepathy-glib/simple-approver.h>
#include <libempathy/empathy-presence-manager.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-connection-aggregator.h>
#include <libempathy/empathy-tp-chat.h>
-#include <libempathy/empathy-tp-streamed-media.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-gsettings.h>
@@ -408,11 +406,7 @@ reject_channel_claim_cb (GObject *source,
goto out;
}
- if (EMPATHY_IS_TP_STREAMED_MEDIA (user_data))
- {
- empathy_tp_streamed_media_close (user_data);
- }
- else if (TP_IS_CALL_CHANNEL (user_data))
+ if (TP_IS_CALL_CHANNEL (user_data))
{
tp_call_channel_hangup_async (user_data,
TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED,
@@ -499,13 +493,7 @@ event_channel_process_voip_func (EventPriv *event)
return;
}
- if (etype == EMPATHY_EVENT_TYPE_VOIP)
- {
- EmpathyTpStreamedMedia *call;
- call = EMPATHY_TP_STREAMED_MEDIA (event->approval->handler_instance);
- video = empathy_tp_streamed_media_has_initial_video (call);
- }
- else if (etype == EMPATHY_EVENT_TYPE_CALL)
+ if (etype == EMPATHY_EVENT_TYPE_CALL)
{
TpCallChannel *call;
call = TP_CALL_CHANNEL (event->approval->handler_instance);
@@ -588,7 +576,6 @@ event_manager_chat_message_received_cb (EmpathyTpChat *tp_chat,
EmpathyMessage *message,
EventManagerApproval *approval)
{
- GtkWidget *window;
EmpathyContact *sender;
const gchar *header;
const gchar *msg;
@@ -616,12 +603,8 @@ event_manager_chat_message_received_cb (EmpathyTpChat *tp_chat,
EMPATHY_EVENT_TYPE_CHAT, EMPATHY_IMAGE_NEW_MESSAGE, header, msg,
approval, event_text_channel_process_func, NULL);
- window = empathy_roster_window_dup ();
-
- empathy_sound_manager_play (priv->sound_mgr, window,
+ empathy_sound_manager_play (priv->sound_mgr, NULL,
EMPATHY_SOUND_CONVERSATION_NEW);
-
- g_object_unref (window);
}
static void
@@ -690,112 +673,6 @@ event_manager_call_state_changed_cb (TpCallChannel *call,
}
static void
-event_manager_call_channel_got_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *object)
-{
- EventManagerApproval *approval = (EventManagerApproval *) user_data;
- EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
- GtkWidget *window;
- TpCallChannel *call;
- gchar *header;
- gboolean video;
-
- call = TP_CALL_CHANNEL (approval->handler_instance);
-
- if (error != NULL)
- {
- DEBUG ("Can't get the contact for the call.. Rejecting?");
- reject_approval (approval);
- return;
- }
-
- if (tp_call_channel_get_state (call, NULL, NULL, NULL) == TP_CALL_STATE_ENDED)
- {
- DEBUG ("Call already ended, seems we missed it :/");
- reject_approval (approval);
- return;
- }
-
- approval->handler = g_signal_connect (call, "state-changed",
- G_CALLBACK (event_manager_call_state_changed_cb), approval);
-
- window = empathy_roster_window_dup ();
- approval->contact = g_object_ref (contact);
-
- g_object_get (G_OBJECT (call), "initial-video", &video, NULL);
-
- header = g_strdup_printf (
- video ? _("Incoming video call from %s") :_("Incoming call from %s"),
- empathy_contact_get_alias (approval->contact));
-
- event_manager_add (approval->manager, NULL,
- approval->contact, EMPATHY_EVENT_TYPE_CALL,
- video ? EMPATHY_IMAGE_VIDEO_CALL : EMPATHY_IMAGE_VOIP,
- header, NULL, approval,
- event_channel_process_voip_func, NULL);
-
- g_free (header);
-
- priv->ringing++;
- if (priv->ringing == 1)
- empathy_sound_manager_start_playing (priv->sound_mgr, window,
- EMPATHY_SOUND_PHONE_INCOMING, MS_BETWEEN_RING);
-
- g_object_unref (window);
-}
-
-static void
-event_manager_media_channel_got_contact (EventManagerApproval *approval)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
- GtkWidget *window = empathy_roster_window_dup ();
- gchar *header;
- EmpathyTpStreamedMedia *call;
- gboolean video;
-
- call = EMPATHY_TP_STREAMED_MEDIA (approval->handler_instance);
-
- video = empathy_tp_streamed_media_has_initial_video (call);
-
- header = g_strdup_printf (
- video ? _("Incoming video call from %s") :_("Incoming call from %s"),
- empathy_contact_get_alias (approval->contact));
-
- event_manager_add (approval->manager, NULL,
- approval->contact, EMPATHY_EVENT_TYPE_VOIP,
- video ? EMPATHY_IMAGE_VIDEO_CALL : EMPATHY_IMAGE_VOIP,
- header, NULL, approval,
- event_channel_process_voip_func, NULL);
-
- g_free (header);
-
- priv->ringing++;
- if (priv->ringing == 1)
- empathy_sound_manager_start_playing (priv->sound_mgr, window,
- EMPATHY_SOUND_PHONE_INCOMING, MS_BETWEEN_RING);
-
- g_object_unref (window);
-}
-
-static void
-event_manager_media_channel_contact_changed_cb (EmpathyTpStreamedMedia *call,
- GParamSpec *param, EventManagerApproval *approval)
-{
- EmpathyContact *contact;
-
- g_object_get (G_OBJECT (call), "contact", &contact, NULL);
-
- if (contact == NULL)
- return;
-
- approval->contact = contact;
- event_manager_media_channel_got_contact (approval);
-}
-
-static void
invite_dialog_response_cb (GtkDialog *dialog,
gint response,
EventManagerApproval *approval)
@@ -871,15 +748,14 @@ event_room_channel_process_func (EventPriv *event)
static void
display_invite_room_dialog (EventManagerApproval *approval)
{
- GtkWidget *window = empathy_roster_window_dup ();
const gchar *invite_msg;
gchar *msg;
- TpHandle self_handle;
+ TpContact *self_contact;
EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
- self_handle = tp_channel_group_get_self_handle (approval->main_channel);
- tp_channel_group_get_local_pending_info (approval->main_channel, self_handle,
- NULL, NULL, &invite_msg);
+ self_contact = tp_channel_group_get_self_contact (approval->main_channel);
+ tp_channel_group_get_local_pending_contact_info (approval->main_channel,
+ self_contact, NULL, NULL, &invite_msg);
if (approval->contact != NULL)
{
@@ -898,50 +774,178 @@ display_invite_room_dialog (EventManagerApproval *approval)
EMPATHY_IMAGE_GROUP_MESSAGE, msg, invite_msg, approval,
event_room_channel_process_func, NULL);
- empathy_sound_manager_play (priv->sound_mgr, window,
+ empathy_sound_manager_play (priv->sound_mgr, NULL,
EMPATHY_SOUND_CONVERSATION_NEW);
g_free (msg);
- g_object_unref (window);
}
static void
-event_manager_muc_invite_got_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *object)
+event_manager_auth_process_func (EventPriv *event)
{
- EventManagerApproval *approval = (EventManagerApproval *) user_data;
+ empathy_event_approve ((EmpathyEvent *) event);
+}
- if (error != NULL)
+/* If there is a file-transfer, media, or auth channel consider it as
+ * the main one. */
+static TpChannel *
+find_main_channel (GList *channels)
+{
+ GList *l;
+ TpChannel *text = NULL;
+
+ for (l = channels; l != NULL; l = g_list_next (l))
{
- DEBUG ("Error: %s", error->message);
+ TpChannel *channel = l->data;
+ GQuark channel_type;
+
+ if (tp_proxy_get_invalidated (channel) != NULL)
+ continue;
+
+ channel_type = tp_channel_get_channel_type_id (channel);
+
+ if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA ||
+ channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL ||
+ channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER ||
+ channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION)
+ return channel;
+
+ else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT)
+ text = channel;
}
- else
+
+ return text;
+}
+
+static void
+approve_text_channel (EmpathyEventManager *self,
+ EventManagerApproval *approval,
+ TpAddDispatchOperationContext *context,
+ EmpathyTpChat *tp_chat)
+{
+ GList *messages, *l;
+
+ approval->handler_instance = g_object_ref (tp_chat);
+
+ if (tp_proxy_has_interface (tp_chat, TP_IFACE_CHANNEL_INTERFACE_GROUP))
{
- approval->contact = g_object_ref (contact);
+ /* Are we in local-pending ? */
+ TpContact *inviter;
+
+ if (empathy_tp_chat_is_invited (tp_chat, &inviter))
+ {
+ /* We are invited to a room */
+ DEBUG ("Have been invited to %s. Ask user if he wants to accept",
+ tp_channel_get_identifier (TP_CHANNEL_GROUP_CHANGE_REASON_NONE));
+
+ if (inviter != NULL)
+ {
+ approval->contact = empathy_contact_dup_from_tp_contact (
+ inviter);
+ }
+
+ display_invite_room_dialog (approval);
+ tp_add_dispatch_operation_context_accept (context);
+
+ return;
+ }
+
+ /* We are not invited, approve the channel right now */
+ tp_add_dispatch_operation_context_accept (context);
+
+ approval->auto_approved = TRUE;
+ event_manager_approval_approve (approval);
+ return;
}
- display_invite_room_dialog (approval);
+ /* 1-1 text channel, wait for the first message */
+ approval->handler = g_signal_connect (tp_chat, "message-received-empathy",
+ G_CALLBACK (event_manager_chat_message_received_cb), approval);
+
+ messages = (GList *) empathy_tp_chat_get_pending_messages (tp_chat);
+ for (l = messages; l != NULL; l = g_list_next (l))
+ {
+ EmpathyMessage *msg = l->data;
+
+ event_manager_chat_message_received_cb (tp_chat, msg, approval);
+ }
+
+ tp_add_dispatch_operation_context_accept (context);
+}
+
+static void
+approval_set_target_contact (EventManagerApproval *approval,
+ TpChannel *channel)
+{
+ TpContact *contact;
+
+ contact = tp_channel_get_target_contact (channel);
+ approval->contact = empathy_contact_dup_from_tp_contact (contact);
}
static void
-event_manager_ft_got_contact_cb (TpConnection *connection,
- EmpathyContact *contact,
- const GError *error,
- gpointer user_data,
- GObject *object)
+approve_call_channel (EmpathyEventManager *self,
+ EventManagerApproval *approval,
+ TpAddDispatchOperationContext *context,
+ TpCallChannel *call)
{
- EventManagerApproval *approval = (EventManagerApproval *) user_data;
- GtkWidget *window = empathy_roster_window_dup ();
- char *header;
+ TpChannel *channel = TP_CHANNEL (call);
EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
+ gchar *header;
+ gboolean video;
- approval->contact = g_object_ref (contact);
+ approval->handler_instance = g_object_ref (call);
+ approval_set_target_contact (approval, channel);
+
+ tp_add_dispatch_operation_context_accept (context);
+
+ if (tp_call_channel_get_state (call, NULL, NULL, NULL) == TP_CALL_STATE_ENDED)
+ {
+ DEBUG ("Call already ended, seems we missed it :/");
+ reject_approval (approval);
+ return;
+ }
+
+ approval->handler = g_signal_connect (call, "state-changed",
+ G_CALLBACK (event_manager_call_state_changed_cb), approval);
+
+ g_object_get (G_OBJECT (call), "initial-video", &video, NULL);
+
+ header = g_strdup_printf (
+ video ? _("Incoming video call from %s") :_("Incoming call from %s"),
+ empathy_contact_get_alias (approval->contact));
+
+ event_manager_add (approval->manager, NULL,
+ approval->contact, EMPATHY_EVENT_TYPE_CALL,
+ video ? EMPATHY_IMAGE_VIDEO_CALL : EMPATHY_IMAGE_VOIP,
+ header, NULL, approval,
+ event_channel_process_voip_func, NULL);
+
+ g_free (header);
+
+ priv->ringing++;
+ if (priv->ringing == 1)
+ empathy_sound_manager_start_playing (priv->sound_mgr, NULL,
+ EMPATHY_SOUND_PHONE_INCOMING, MS_BETWEEN_RING);
+}
+
+static void
+approve_ft_channel (EmpathyEventManager *self,
+ EventManagerApproval *approval,
+ TpAddDispatchOperationContext *context,
+ TpFileTransferChannel *ft)
+{
+ TpChannel *channel = TP_CHANNEL (ft);
+ EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
+ gchar *header;
+
+ approval->handler_instance = g_object_ref (ft);
+ approval_set_target_contact (approval, channel);
+
+ tp_add_dispatch_operation_context_accept (context);
header = g_strdup_printf (_("Incoming file transfer from %s"),
- empathy_contact_get_alias (approval->contact));
+ empathy_contact_get_alias (approval->contact));
event_manager_add (approval->manager, NULL,
approval->contact, EMPATHY_EVENT_TYPE_TRANSFER,
@@ -949,48 +953,46 @@ event_manager_ft_got_contact_cb (TpConnection *connection,
approval, event_channel_process_func, NULL);
/* FIXME better sound for incoming file transfers ?*/
- empathy_sound_manager_play (priv->sound_mgr, window,
+ empathy_sound_manager_play (priv->sound_mgr, NULL,
EMPATHY_SOUND_CONVERSATION_NEW);
g_free (header);
- g_object_unref (window);
}
static void
-event_manager_auth_process_func (EventPriv *event)
+approve_sasl_channel (EmpathyEventManager *self,
+ TpAccount *account,
+ EventManagerApproval *approval,
+ TpAddDispatchOperationContext *context,
+ TpChannel *channel)
{
- empathy_event_approve ((EmpathyEvent *) event);
-}
+ GHashTable *props;
+ const gchar * const *available_mechanisms;
-/* If there is a file-transfer, media, or auth channel consider it as
- * the main one. */
-static TpChannel *
-find_main_channel (GList *channels)
-{
- GList *l;
- TpChannel *text = NULL;
+ props = tp_channel_borrow_immutable_properties (channel);
+ available_mechanisms = tp_asv_get_boxed (props,
+ TP_PROP_CHANNEL_INTERFACE_SASL_AUTHENTICATION_AVAILABLE_MECHANISMS,
+ G_TYPE_STRV);
- for (l = channels; l != NULL; l = g_list_next (l))
+ if (tp_strv_contains (available_mechanisms, "X-TELEPATHY-PASSWORD"))
{
- TpChannel *channel = l->data;
- GQuark channel_type;
-
- if (tp_proxy_get_invalidated (channel) != NULL)
- continue;
-
- channel_type = tp_channel_get_channel_type_id (channel);
-
- if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA ||
- channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL ||
- channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER ||
- channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION)
- return channel;
+ event_manager_add (approval->manager, account, NULL,
+ EMPATHY_EVENT_TYPE_AUTH,
+ GTK_STOCK_DIALOG_AUTHENTICATION,
+ tp_account_get_display_name (account),
+ _("Password required"), approval,
+ event_manager_auth_process_func, NULL);
+ }
+ else
+ {
+ GError error = { TP_ERROR, TP_ERROR_NOT_IMPLEMENTED,
+ "Support only X-TELEPATHY-PASSWORD auth method" };
- else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT)
- text = channel;
+ tp_add_dispatch_operation_context_fail (context, &error);
+ return;
}
- return text;
+ tp_add_dispatch_operation_context_accept (context);
}
static void
@@ -1028,132 +1030,22 @@ approve_channels (TpSimpleApprover *approver,
channel_type = tp_channel_get_channel_type_id (channel);
- if (TP_IS_TEXT_CHANNEL (channel))
- {
- EmpathyTpChat *tp_chat = EMPATHY_TP_CHAT (channel);
- GList *messages, *l;
-
- approval->handler_instance = g_object_ref (tp_chat);
-
- if (tp_proxy_has_interface (channel, TP_IFACE_CHANNEL_INTERFACE_GROUP))
- {
- /* Are we in local-pending ? */
- TpHandle inviter;
-
- if (empathy_tp_chat_is_invited (tp_chat, &inviter))
- {
- /* We are invited to a room */
- DEBUG ("Have been invited to %s. Ask user if he wants to accept",
- tp_channel_get_identifier (channel));
-
- if (inviter != 0)
- {
- empathy_tp_contact_factory_get_from_handle (connection,
- inviter, event_manager_muc_invite_got_contact_cb,
- approval, NULL, G_OBJECT (self));
- }
- else
- {
- display_invite_room_dialog (approval);
- }
-
- goto out;
- }
-
- /* We are not invited, approve the channel right now */
- tp_add_dispatch_operation_context_accept (context);
-
- approval->auto_approved = TRUE;
- event_manager_approval_approve (approval);
- return;
- }
-
- /* 1-1 text channel, wait for the first message */
- approval->handler = g_signal_connect (tp_chat, "message-received-empathy",
- G_CALLBACK (event_manager_chat_message_received_cb), approval);
-
- messages = (GList *) empathy_tp_chat_get_pending_messages (tp_chat);
- for (l = messages; l != NULL; l = g_list_next (l))
- {
- EmpathyMessage *msg = l->data;
-
- event_manager_chat_message_received_cb (tp_chat, msg, approval);
- }
- }
- else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA)
+ if (EMPATHY_IS_TP_CHAT (channel))
{
- EmpathyContact *contact;
- EmpathyTpStreamedMedia *call = empathy_tp_streamed_media_new (account,
- channel);
-
- approval->handler_instance = G_OBJECT (call);
-
- g_object_get (G_OBJECT (call), "contact", &contact, NULL);
-
- if (contact == NULL)
- {
- g_signal_connect (call, "notify::contact",
- G_CALLBACK (event_manager_media_channel_contact_changed_cb),
- approval);
- }
- else
- {
- approval->contact = contact;
- event_manager_media_channel_got_contact (approval);
- }
-
+ approve_text_channel (self, approval, context, EMPATHY_TP_CHAT (channel));
}
- else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL)
+ else if (TP_IS_CALL_CHANNEL (channel))
{
- TpCallChannel *call = TP_CALL_CHANNEL (channel);
- const gchar *id;
-
- approval->handler_instance = g_object_ref (call);
-
- id = tp_channel_get_identifier (channel);
-
- empathy_tp_contact_factory_get_from_id (connection, id,
- event_manager_call_channel_got_contact_cb,
- approval, NULL, G_OBJECT (self));
+ approve_call_channel (self, approval, context, TP_CALL_CHANNEL (channel));
}
- else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER)
+ else if (TP_IS_FILE_TRANSFER_CHANNEL (channel))
{
- TpHandle handle;
-
- approval->handler_instance = g_object_ref (channel);
-
- handle = tp_channel_get_handle (channel, NULL);
-
- empathy_tp_contact_factory_get_from_handle (connection, handle,
- event_manager_ft_got_contact_cb, approval, NULL, G_OBJECT (self));
+ approve_ft_channel (self, approval, context,
+ TP_FILE_TRANSFER_CHANNEL (channel));
}
else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION)
{
- GHashTable *props;
- const gchar * const *available_mechanisms;
-
- props = tp_channel_borrow_immutable_properties (channel);
- available_mechanisms = tp_asv_get_boxed (props,
- TP_PROP_CHANNEL_INTERFACE_SASL_AUTHENTICATION_AVAILABLE_MECHANISMS,
- G_TYPE_STRV);
-
- if (tp_strv_contains (available_mechanisms, "X-TELEPATHY-PASSWORD"))
- {
- event_manager_add (approval->manager, account, NULL,
- EMPATHY_EVENT_TYPE_AUTH,
- GTK_STOCK_DIALOG_AUTHENTICATION,
- tp_account_get_display_name (account),
- _("Password required"), approval,
- event_manager_auth_process_func, NULL);
- }
- else
- {
- GError error = { TP_ERROR, TP_ERROR_NOT_IMPLEMENTED,
- "Support only X-TELEPATHY-PASSWORD auth method" };
-
- tp_add_dispatch_operation_context_fail (context, &error);
- return;
- }
+ approve_sasl_channel (self, account, approval, context, channel);
}
else
{
@@ -1166,9 +1058,6 @@ approve_channels (TpSimpleApprover *approver,
tp_add_dispatch_operation_context_fail (context, &error);
return;
}
-
-out:
- tp_add_dispatch_operation_context_accept (context);
}
static void
@@ -1251,7 +1140,6 @@ event_manager_presence_changed_cb (EmpathyContact *contact,
EmpathyEventManagerPriv *priv = GET_PRIV (manager);
TpAccount *account;
EmpathyPresenceManager *presence_mgr;
- GtkWidget *window = empathy_roster_window_dup ();
account = empathy_contact_get_account (contact);
presence_mgr = empathy_presence_manager_dup_singleton ();
@@ -1267,7 +1155,7 @@ event_manager_presence_changed_cb (EmpathyContact *contact,
TP_CONNECTION_PRESENCE_TYPE_OFFLINE) <= 0)
{
/* someone is logging off */
- empathy_sound_manager_play (priv->sound_mgr, window,
+ empathy_sound_manager_play (priv->sound_mgr, NULL,
EMPATHY_SOUND_CONTACT_DISCONNECTED);
if (g_settings_get_boolean (priv->gsettings_notif,
@@ -1288,7 +1176,7 @@ event_manager_presence_changed_cb (EmpathyContact *contact,
TP_CONNECTION_PRESENCE_TYPE_OFFLINE) > 0)
{
/* someone is logging in */
- empathy_sound_manager_play (priv->sound_mgr, window,
+ empathy_sound_manager_play (priv->sound_mgr, NULL,
EMPATHY_SOUND_CONTACT_CONNECTED);
if (g_settings_get_boolean (priv->gsettings_notif,
@@ -1305,7 +1193,6 @@ event_manager_presence_changed_cb (EmpathyContact *contact,
out:
g_object_unref (presence_mgr);
- g_object_unref (window);
}
static GObject *
diff --git a/src/empathy-event-manager.h b/src/empathy-event-manager.h
index e50ab8884..394db8d9c 100644
--- a/src/empathy-event-manager.h
+++ b/src/empathy-event-manager.h
@@ -50,7 +50,6 @@ struct _EmpathyEventManagerClass {
typedef enum {
EMPATHY_EVENT_TYPE_CHAT,
- EMPATHY_EVENT_TYPE_VOIP,
EMPATHY_EVENT_TYPE_CALL,
EMPATHY_EVENT_TYPE_TRANSFER,
EMPATHY_EVENT_TYPE_SUBSCRIPTION,
diff --git a/src/empathy-invite-participant-dialog.c b/src/empathy-invite-participant-dialog.c
index fd5bd8f76..ecbf00be9 100644
--- a/src/empathy-invite-participant-dialog.c
+++ b/src/empathy-invite-participant-dialog.c
@@ -17,7 +17,6 @@
#include "empathy-invite-participant-dialog.h"
#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-contact-list.h>
#include <libempathy-gtk/empathy-contact-chooser.h>
#include <libempathy-gtk/empathy-individual-view.h>
@@ -146,22 +145,22 @@ filter_individual (EmpathyContactChooser *chooser,
return FALSE;
/* Filter out contacts which are already in the chat */
- members = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (
- self->priv->tp_chat));
+ members = empathy_tp_chat_get_members (self->priv->tp_chat);
for (l = members; l != NULL; l = g_list_next (l))
{
EmpathyContact *member = l->data;
- TpHandle handle;
+ TpContact *owner;
- /* Try to get the non-channel specific handle. */
- handle = tp_channel_group_get_handle_owner (
+ /* Try to get the non-channel specific contact. */
+ owner = tp_channel_group_get_contact_owner (
TP_CHANNEL (self->priv->tp_chat),
- empathy_contact_get_handle (member));
- if (handle == 0)
- handle = empathy_contact_get_handle (member);
+ empathy_contact_get_tp_contact (member));
- if (handle == tp_contact_get_handle (contact))
+ if (owner == NULL)
+ owner = empathy_contact_get_tp_contact (member);
+
+ if (owner == contact)
{
display = FALSE;
break;
diff --git a/src/empathy-map-view.c b/src/empathy-map-view.c
deleted file mode 100644
index 9ab82c091..000000000
--- a/src/empathy-map-view.c
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * 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: Pierre-Luc Beaudoin <pierre-luc.beaudoin@collabora.co.uk>
- */
-
-#include <config.h>
-
-#include <sys/stat.h>
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-#include <gdk/gdkkeysyms.h>
-
-#include <champlain/champlain.h>
-#include <champlain-gtk/champlain-gtk.h>
-#include <clutter-gtk/clutter-gtk.h>
-#include <telepathy-glib/util.h>
-
-#include <libempathy/empathy-contact.h>
-#include <libempathy/empathy-connection-aggregator.h>
-#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-location.h>
-
-#include <libempathy-gtk/empathy-individual-menu.h>
-#include <libempathy-gtk/empathy-ui-utils.h>
-
-#include "empathy-map-view.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_LOCATION
-#include <libempathy/empathy-debug.h>
-
-G_DEFINE_TYPE (EmpathyMapView, empathy_map_view, GTK_TYPE_WINDOW);
-
-#define GET_PRIV(self) ((EmpathyMapViewPriv *)((EmpathyMapView *) self)->priv)
-
-struct _EmpathyMapViewPriv {
- EmpathyConnectionAggregator *aggregator;
-
- GtkWidget *zoom_in;
- GtkWidget *zoom_out;
- GtkWidget *throbber;
- ChamplainView *map_view;
- ChamplainMarkerLayer *layer;
- guint timeout_id;
- /* reffed (EmpathyContact *) => borrowed (ChamplainMarker *) */
- GHashTable *markers;
- gulong members_changed_id;
-
- /* TpContact -> EmpathyContact */
- GHashTable *contacts;
-};
-
-static void
-map_view_state_changed (ChamplainView *view,
- GParamSpec *gobject,
- EmpathyMapView *self)
-{
- ChamplainState state;
- EmpathyMapViewPriv *priv = GET_PRIV (self);
-
- g_object_get (G_OBJECT (view), "state", &state, NULL);
- if (state == CHAMPLAIN_STATE_LOADING)
- {
- gtk_spinner_start (GTK_SPINNER (priv->throbber));
- gtk_widget_show (priv->throbber);
- }
- else
- {
- gtk_spinner_stop (GTK_SPINNER (priv->throbber));
- gtk_widget_hide (priv->throbber);
- }
-}
-
-static gboolean
-contact_has_location (EmpathyContact *contact)
-{
- GHashTable *location;
-
- location = empathy_contact_get_location (contact);
-
- if (location == NULL || g_hash_table_size (location) == 0)
- return FALSE;
-
- return TRUE;
-}
-
-static ClutterActor * create_marker (EmpathyMapView *window,
- EmpathyContact *contact);
-
-static void
-map_view_update_contact_position (EmpathyMapView *self,
- EmpathyContact *contact)
-{
- EmpathyMapViewPriv *priv = GET_PRIV (self);
- gdouble lon, lat;
- GValue *value;
- GHashTable *location;
- ClutterActor *marker;
- gboolean has_location;
-
- has_location = contact_has_location (contact);
-
- marker = g_hash_table_lookup (priv->markers, contact);
- if (marker == NULL)
- {
- if (!has_location)
- return;
-
- marker = create_marker (self, contact);
- }
- else if (!has_location)
- {
- champlain_marker_animate_out (CHAMPLAIN_MARKER (marker));
- return;
- }
-
- location = empathy_contact_get_location (contact);
-
- value = g_hash_table_lookup (location, EMPATHY_LOCATION_LAT);
- if (value == NULL)
- {
- clutter_actor_hide (marker);
- return;
- }
- lat = g_value_get_double (value);
-
- value = g_hash_table_lookup (location, EMPATHY_LOCATION_LON);
- if (value == NULL)
- {
- clutter_actor_hide (marker);
- return;
- }
- lon = g_value_get_double (value);
-
- champlain_location_set_location (CHAMPLAIN_LOCATION (marker), lat, lon);
- champlain_marker_animate_in (CHAMPLAIN_MARKER (marker));
-}
-
-static void
-map_view_contact_location_notify (EmpathyContact *contact,
- GParamSpec *arg1,
- EmpathyMapView *self)
-{
- map_view_update_contact_position (self, contact);
-}
-
-static void
-map_view_zoom_in_cb (GtkWidget *widget,
- EmpathyMapView *self)
-{
- EmpathyMapViewPriv *priv = GET_PRIV (self);
-
- champlain_view_zoom_in (priv->map_view);
-}
-
-static void
-map_view_zoom_out_cb (GtkWidget *widget,
- EmpathyMapView *self)
-{
- EmpathyMapViewPriv *priv = GET_PRIV (self);
-
- champlain_view_zoom_out (priv->map_view);
-}
-
-static void
-map_view_zoom_fit_cb (GtkWidget *widget,
- EmpathyMapView *self)
-{
- EmpathyMapViewPriv *priv = GET_PRIV (self);
-
- champlain_view_ensure_layers_visible (priv->map_view, TRUE);
-}
-
-static gboolean
-marker_clicked_cb (ChamplainMarker *marker,
- ClutterButtonEvent *event,
- EmpathyMapView *self)
-{
- GtkWidget *menu;
- EmpathyContact *contact;
- TpContact *tp_contact;
- FolksIndividual *individual;
-
- if (event->button != 3)
- return FALSE;
-
- contact = g_object_get_data (G_OBJECT (marker), "contact");
- if (contact == NULL)
- return FALSE;
-
- tp_contact = empathy_contact_get_tp_contact (contact);
- if (tp_contact == NULL)
- return FALSE;
-
- individual = empathy_create_individual_from_tp_contact (tp_contact);
- if (individual == NULL)
- return FALSE;
-
- menu = empathy_individual_menu_new (individual,
- EMPATHY_INDIVIDUAL_FEATURE_CHAT |
- EMPATHY_INDIVIDUAL_FEATURE_CALL |
- EMPATHY_INDIVIDUAL_FEATURE_LOG |
- EMPATHY_INDIVIDUAL_FEATURE_INFO, NULL);
-
- if (menu == NULL)
- goto out;
-
- gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (self), NULL);
-
- gtk_widget_show (menu);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- event->button, event->time);
-
-out:
- g_object_unref (individual);
- return FALSE;
-}
-
-static void
-map_view_contacts_update_label (ClutterActor *marker)
-{
- const gchar *name;
- gchar *date;
- gchar *label;
- GValue *gtime;
- gint64 loctime;
- GHashTable *location;
- EmpathyContact *contact;
-
- contact = g_object_get_data (G_OBJECT (marker), "contact");
- location = empathy_contact_get_location (contact);
- name = empathy_contact_get_alias (contact);
- gtime = g_hash_table_lookup (location, EMPATHY_LOCATION_TIMESTAMP);
-
- if (gtime != NULL)
- {
- GDateTime *now, *d;
- GTimeSpan delta;
-
- loctime = g_value_get_int64 (gtime);
- date = empathy_time_to_string_relative (loctime);
- label = g_strconcat ("<b>", name, "</b>\n<small>", date, "</small>", NULL);
- g_free (date);
-
- now = g_date_time_new_now_utc ();
- d = g_date_time_new_from_unix_utc (loctime);
- delta = g_date_time_difference (now, d);
-
- /* if location is older than a week */
- if (delta > G_TIME_SPAN_DAY * 7)
- clutter_actor_set_opacity (marker, 0.75 * 255);
-
- g_date_time_unref (now);
- g_date_time_unref (d);
- }
- else
- {
- label = g_strconcat ("<b>", name, "</b>\n", NULL);
- }
-
- champlain_label_set_use_markup (CHAMPLAIN_LABEL (marker), TRUE);
- champlain_label_set_text (CHAMPLAIN_LABEL (marker), label);
-
- g_free (label);
-}
-
-static ClutterActor *
-create_marker (EmpathyMapView *self,
- EmpathyContact *contact)
-{
- EmpathyMapViewPriv *priv = GET_PRIV (self);
- ClutterActor *marker;
- GdkPixbuf *avatar;
- ClutterActor *texture = NULL;
-
- avatar = empathy_pixbuf_avatar_from_contact_scaled (contact, 32, 32);
- if (avatar != NULL)
- {
- texture = gtk_clutter_texture_new ();
-
- gtk_clutter_texture_set_from_pixbuf (GTK_CLUTTER_TEXTURE (texture),
- avatar, NULL);
-
- g_object_unref (avatar);
- }
-
- marker = champlain_label_new_with_image (texture);
-
- g_object_set_data_full (G_OBJECT (marker), "contact",
- g_object_ref (contact), g_object_unref);
-
- g_hash_table_insert (priv->markers, g_object_ref (contact), marker);
-
- map_view_contacts_update_label (marker);
-
- clutter_actor_set_reactive (CLUTTER_ACTOR (marker), TRUE);
- g_signal_connect (marker, "button-release-event",
- G_CALLBACK (marker_clicked_cb), self);
-
- champlain_marker_layer_add_marker (priv->layer, CHAMPLAIN_MARKER (marker));
-
- DEBUG ("Create marker for %s", empathy_contact_get_id (contact));
-
- tp_clear_object (&texture);
- return marker;
-}
-
-static gboolean
-map_view_key_press_cb (GtkWidget *widget,
- GdkEventKey *event,
- gpointer user_data)
-{
- if ((event->state & GDK_CONTROL_MASK && event->keyval == GDK_KEY_w)
- || event->keyval == GDK_KEY_Escape)
- {
- gtk_widget_destroy (widget);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-map_view_tick (EmpathyMapView *self)
-{
- EmpathyMapViewPriv *priv = GET_PRIV (self);
- GList *marker, *l;
-
- marker = champlain_marker_layer_get_markers (priv->layer);
-
- for (l = marker; l != NULL; l = g_list_next (l))
- map_view_contacts_update_label (l->data);
-
- g_list_free (marker);
- return TRUE;
-}
-
-static void
-contact_list_changed_cb (EmpathyConnectionAggregator *aggregator,
- GPtrArray *added,
- GPtrArray *removed,
- EmpathyMapView *self)
-{
- EmpathyMapViewPriv *priv = GET_PRIV (self);
- guint i;
-
- for (i = 0; i < added->len; i++)
- {
- TpContact *tp_contact = g_ptr_array_index (added, i);
- EmpathyContact *contact;
-
- if (g_hash_table_lookup (priv->contacts, tp_contact) != NULL)
- continue;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
-
- tp_g_signal_connect_object (contact, "notify::location",
- G_CALLBACK (map_view_contact_location_notify), self, 0);
-
- map_view_update_contact_position (self, contact);
-
- /* Pass ownership to the hash table */
- g_hash_table_insert (priv->contacts, g_object_ref (tp_contact),
- contact);
- }
-
- for (i = 0; i < removed->len; i++)
- {
- TpContact *tp_contact = g_ptr_array_index (removed, i);
- EmpathyContact *contact;
- ClutterActor *marker;
-
- contact = g_hash_table_lookup (priv->contacts, tp_contact);
- if (contact == NULL)
- continue;
-
- marker = g_hash_table_lookup (priv->markers, contact);
- if (marker != NULL)
- {
- clutter_actor_destroy (marker);
- g_hash_table_remove (priv->markers, contact);
- }
-
- g_signal_handlers_disconnect_by_func (contact,
- map_view_contact_location_notify, self);
-
- g_hash_table_remove (priv->contacts, tp_contact);
- }
-}
-
-static GObject *
-empathy_map_view_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- static GObject *window = NULL;
-
- if (window != NULL)
- return window;
-
- window = G_OBJECT_CLASS (empathy_map_view_parent_class)->constructor (
- type, n_construct_params, construct_params);
-
- g_object_add_weak_pointer (window, (gpointer) &window);
-
- return window;
-}
-
-static void
-empathy_map_view_finalize (GObject *object)
-{
- EmpathyMapViewPriv *priv = GET_PRIV (object);
- GHashTableIter iter;
- gpointer contact;
-
- g_source_remove (priv->timeout_id);
-
- g_hash_table_iter_init (&iter, priv->markers);
- while (g_hash_table_iter_next (&iter, &contact, NULL))
- g_signal_handlers_disconnect_by_func (contact,
- map_view_contact_location_notify, object);
-
- g_hash_table_unref (priv->markers);
- g_object_unref (priv->aggregator);
- g_object_unref (priv->layer);
- g_hash_table_unref (priv->contacts);
-
- G_OBJECT_CLASS (empathy_map_view_parent_class)->finalize (object);
-}
-
-static void
-empathy_map_view_class_init (EmpathyMapViewClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructor = empathy_map_view_constructor;
- object_class->finalize = empathy_map_view_finalize;
-
- g_type_class_add_private (object_class, sizeof (EmpathyMapViewPriv));
-}
-
-static void
-empathy_map_view_init (EmpathyMapView *self)
-{
- EmpathyMapViewPriv *priv;
- GtkBuilder *gui;
- GtkWidget *sw;
- GtkWidget *embed;
- GtkWidget *throbber_holder;
- gchar *filename;
- GPtrArray *contacts, *empty;
- GtkWidget *main_vbox;
-
- priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_MAP_VIEW, EmpathyMapViewPriv);
-
- gtk_window_set_title (GTK_WINDOW (self), _("Contact Map View"));
- gtk_window_set_role (GTK_WINDOW (self), "map_view");
- gtk_window_set_default_size (GTK_WINDOW (self), 512, 384);
- gtk_window_set_position (GTK_WINDOW (self), GTK_WIN_POS_CENTER);
-
- /* Set up interface */
- filename = empathy_file_lookup ("empathy-map-view.ui", "src");
- gui = empathy_builder_get_file (filename,
- "main_vbox", &main_vbox,
- "zoom_in", &priv->zoom_in,
- "zoom_out", &priv->zoom_out,
- "map_scrolledwindow", &sw,
- "throbber", &throbber_holder,
- NULL);
- g_free (filename);
-
- gtk_container_add (GTK_CONTAINER (self), main_vbox);
-
- empathy_builder_connect (gui, self,
- "zoom_in", "clicked", map_view_zoom_in_cb,
- "zoom_out", "clicked", map_view_zoom_out_cb,
- "zoom_fit", "clicked", map_view_zoom_fit_cb,
- NULL);
-
- g_signal_connect (self, "key-press-event",
- G_CALLBACK (map_view_key_press_cb), self);
-
- g_object_unref (gui);
-
- priv->throbber = gtk_spinner_new ();
- gtk_widget_set_size_request (priv->throbber, 16, 16);
- gtk_container_add (GTK_CONTAINER (throbber_holder), priv->throbber);
-
- /* Set up map view */
- embed = gtk_champlain_embed_new ();
- priv->map_view = gtk_champlain_embed_get_view (GTK_CHAMPLAIN_EMBED (embed));
- g_object_set (G_OBJECT (priv->map_view),
- "zoom-level", 1,
- "kinetic-mode", TRUE,
- NULL);
- champlain_view_center_on (priv->map_view, 36, 0);
-
- gtk_container_add (GTK_CONTAINER (sw), embed);
- gtk_widget_show_all (embed);
-
- priv->layer = g_object_ref (champlain_marker_layer_new ());
- champlain_view_add_layer (priv->map_view, CHAMPLAIN_LAYER (priv->layer));
-
- g_signal_connect (priv->map_view, "notify::state",
- G_CALLBACK (map_view_state_changed), self);
-
- /* Set up contact list. */
- priv->markers = g_hash_table_new_full (NULL, NULL,
- (GDestroyNotify) g_object_unref, NULL);
-
- priv->aggregator = empathy_connection_aggregator_dup_singleton ();
- priv->contacts = g_hash_table_new_full (NULL, NULL, g_object_unref,
- g_object_unref);
-
- tp_g_signal_connect_object (priv->aggregator, "contact-list-changed",
- G_CALLBACK (contact_list_changed_cb), self, 0);
-
- contacts = empathy_connection_aggregator_dup_all_contacts (priv->aggregator);
- empty = g_ptr_array_new ();
-
- contact_list_changed_cb (priv->aggregator, contacts, empty, self);
-
- g_ptr_array_unref (contacts);
- g_ptr_array_unref (empty);
-
- /* Set up time updating loop */
- priv->timeout_id = g_timeout_add_seconds (5,
- (GSourceFunc) map_view_tick, self);
-}
-
-GtkWidget *
-empathy_map_view_show (void)
-{
- GtkWidget *window;
-
- window = g_object_new (EMPATHY_TYPE_MAP_VIEW, NULL);
- gtk_widget_show_all (window);
- empathy_window_present (GTK_WINDOW (window));
-
- return window;
-}
diff --git a/src/empathy-map-view.h b/src/empathy-map-view.h
deleted file mode 100644
index 3184b8c9e..000000000
--- a/src/empathy-map-view.h
+++ /dev/null
@@ -1,56 +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: Pierre-Luc Beaudoin <pierre-luc@pierlux.com>
- */
-
-#ifndef __EMPATHY_MAP_VIEW_H__
-#define __EMPATHY_MAP_VIEW_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_MAP_VIEW (empathy_map_view_get_type ())
-#define EMPATHY_MAP_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_MAP_VIEW, EmpathyMapView))
-#define EMPATHY_MAP_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_MAP_VIEW, EmpathyMapViewClass))
-#define EMPATHY_IS_MAP_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_MAP_VIEW))
-#define EMPATHY_IS_MAP_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_MAP_VIEW))
-#define EMPATHY_MAP_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_MAP_VIEW, EmpathyMapViewClass))
-
-typedef struct _EmpathyMapView EmpathyMapView;
-typedef struct _EmpathyMapViewClass EmpathyMapViewClass;
-typedef struct _EmpathyMapViewPriv EmpathyMapViewPriv;
-
-struct _EmpathyMapView
-{
- GtkWindow parent;
- gpointer priv;
-};
-
-struct _EmpathyMapViewClass
-{
- GtkWindowClass parent_class;
-};
-
-GType empathy_map_view_get_type (void);
-
-GtkWidget *empathy_map_view_show (void);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_MAP_VIEW_H__ */
diff --git a/src/empathy-map-view.ui b/src/empathy-map-view.ui
deleted file mode 100644
index 715de8fa4..000000000
--- a/src/empathy-map-view.ui
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkVBox" id="main_vbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkToolbar" id="toolbar">
- <property name="visible">True</property>
- <child>
- <object class="GtkToolButton" id="zoom_in">
- <property name="visible">True</property>
- <property name="stock_id">gtk-zoom-in</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolButton" id="zoom_out">
- <property name="visible">True</property>
- <property name="stock_id">gtk-zoom-out</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolButton" id="zoom_fit">
- <property name="visible">True</property>
- <property name="stock_id">gtk-zoom-fit</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <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>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="map_scrolledwindow">
- <property name="visible">True</property>
- <property name="resize_mode">queue</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c
index dd7e70ac1..72505472c 100644
--- a/src/empathy-new-chatroom-dialog.c
+++ b/src/empathy-new-chatroom-dialog.c
@@ -1,7 +1,6 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2006-2007 Imendio AB
- * Copyright (C) 2007-2008 Collabora Ltd.
+ * Copyright (C) 2007-2011 Collabora Ltd.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -31,9 +30,8 @@
#include <glib/gi18n.h>
#include <glib/gprintf.h>
-#include <telepathy-glib/interfaces.h>
+#include <telepathy-glib/telepathy-glib.h>
-#include <libempathy/empathy-tp-roomlist.h>
#include <libempathy/empathy-chatroom.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-request-util.h>
@@ -47,793 +45,777 @@
#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
#include <libempathy/empathy-debug.h>
-typedef struct {
- EmpathyTpRoomlist *room_list;
- /* Currently selected account */
- TpAccount *account;
- /* Signal id of the "status-changed" signal connected on the currently
- * selected account */
- gulong status_changed_id;
-
- GtkWidget *window;
- GtkWidget *vbox_widgets;
- GtkWidget *table_grid;
- GtkWidget *label_account;
- GtkWidget *account_chooser;
- GtkWidget *label_server;
- GtkWidget *entry_server;
- GtkWidget *label_room;
- GtkWidget *entry_room;
- GtkWidget *expander_browse;
- GtkWidget *hbox_expander;
- GtkWidget *throbber;
- GtkWidget *treeview;
- GtkTreeModel *model;
- GtkWidget *button_join;
- GtkWidget *label_error_message;
- GtkWidget *viewport_error;
-
- GSettings *gsettings;
-} EmpathyNewChatroomDialog;
-
-enum {
- COL_NEED_PASSWORD,
- COL_INVITE_ONLY,
- COL_NAME,
- COL_ROOM,
- COL_MEMBERS,
- COL_MEMBERS_INT,
- COL_TOOLTIP,
- COL_COUNT
+G_DEFINE_TYPE (EmpathyNewChatroomDialog, empathy_new_chatroom_dialog,
+ GTK_TYPE_DIALOG)
+
+struct _EmpathyNewChatroomDialogPriv
+{
+ TpRoomList *room_list;
+ /* Currently selected account */
+ TpAccount *account;
+ /* Signal id of the "status-changed" signal connected on the currently
+ * selected account */
+ gulong status_changed_id;
+
+ GtkWidget *table_grid;
+ GtkWidget *label_account;
+ GtkWidget *account_chooser;
+ GtkWidget *label_server;
+ GtkWidget *entry_server;
+ GtkWidget *label_room;
+ GtkWidget *entry_room;
+ GtkWidget *expander_browse;
+ GtkWidget *hbox_expander;
+ GtkWidget *throbber;
+ GtkWidget *treeview;
+ GtkTreeModel *model;
+ GtkWidget *button_join;
+ GtkWidget *label_error_message;
+ GtkWidget *viewport_error;
+
+ GSettings *gsettings;
};
-static void new_chatroom_dialog_response_cb (GtkWidget *widget,
- gint response,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_destroy_cb (GtkWidget *widget,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_model_setup (EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_model_add_columns (EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_roomlist_destroy_cb (EmpathyTpRoomlist *room_list,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list,
- EmpathyChatroom *chatroom,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list,
- gpointer unused,
- EmpathyNewChatroomDialog *dialog);
-static void start_listing_error_cb (EmpathyTpRoomlist *room_list,
- GError *error,
- EmpathyNewChatroomDialog *dialog);
-static void stop_listing_error_cb (EmpathyTpRoomlist *room_list,
- GError *error,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_model_selection_changed (GtkTreeSelection *selection,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_entry_changed_cb (GtkWidget *entry,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_browse_start (EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_browse_stop (EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget,
- EmpathyNewChatroomDialog *dialog);
-static gboolean new_chatroom_dialog_entry_server_focus_out_cb (GtkWidget *widget,
- GdkEventFocus *event,
- EmpathyNewChatroomDialog *dialog);
-static void new_chatroom_dialog_button_close_error_clicked_cb (GtkButton *button,
- EmpathyNewChatroomDialog *dialog);
+enum
+{
+ COL_NEED_PASSWORD,
+ COL_INVITE_ONLY,
+ COL_NAME,
+ COL_ROOM,
+ COL_MEMBERS,
+ COL_MEMBERS_INT,
+ COL_TOOLTIP,
+ COL_COUNT
+};
static EmpathyNewChatroomDialog *dialog_p = NULL;
-
-void
-empathy_new_chatroom_dialog_show (GtkWindow *parent)
+static void
+new_chatroom_dialog_store_last_account (GSettings *gsettings,
+ EmpathyAccountChooser *account_chooser)
{
- EmpathyNewChatroomDialog *dialog;
- GtkBuilder *gui;
- GtkSizeGroup *size_group;
- gchar *filename;
-
- if (dialog_p) {
- gtk_window_present (GTK_WINDOW (dialog_p->window));
- return;
- }
-
- dialog_p = dialog = g_new0 (EmpathyNewChatroomDialog, 1);
-
- filename = empathy_file_lookup ("empathy-new-chatroom-dialog.ui", "src");
- gui = empathy_builder_get_file (filename,
- "new_chatroom_dialog", &dialog->window,
- "table_grid", &dialog->table_grid,
- "label_account", &dialog->label_account,
- "label_server", &dialog->label_server,
- "label_room", &dialog->label_room,
- "entry_server", &dialog->entry_server,
- "entry_room", &dialog->entry_room,
- "treeview", &dialog->treeview,
- "button_join", &dialog->button_join,
- "expander_browse", &dialog->expander_browse,
- "hbox_expander", &dialog->hbox_expander,
- "label_error_message", &dialog->label_error_message,
- "viewport_error", &dialog->viewport_error,
- NULL);
- g_free (filename);
-
- empathy_builder_connect (gui, dialog,
- "new_chatroom_dialog", "response", new_chatroom_dialog_response_cb,
- "new_chatroom_dialog", "destroy", new_chatroom_dialog_destroy_cb,
- "entry_server", "changed", new_chatroom_dialog_entry_changed_cb,
- "entry_server", "activate", new_chatroom_dialog_entry_server_activate_cb,
- "entry_server", "focus-out-event", new_chatroom_dialog_entry_server_focus_out_cb,
- "entry_room", "changed", new_chatroom_dialog_entry_changed_cb,
- "expander_browse", "activate", new_chatroom_dialog_expander_browse_activate_cb,
- "button_close_error", "clicked", new_chatroom_dialog_button_close_error_clicked_cb,
- NULL);
-
- g_object_unref (gui);
-
- g_object_add_weak_pointer (G_OBJECT (dialog->window), (gpointer) &dialog_p);
-
- /* Label alignment */
- size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
- gtk_size_group_add_widget (size_group, dialog->label_account);
- gtk_size_group_add_widget (size_group, dialog->label_server);
- gtk_size_group_add_widget (size_group, dialog->label_room);
-
- g_object_unref (size_group);
-
- /* Set up chatrooms treeview */
- new_chatroom_dialog_model_setup (dialog);
-
- /* Add throbber */
- dialog->throbber = gtk_spinner_new ();
- gtk_box_pack_start (GTK_BOX (dialog->hbox_expander), dialog->throbber,
- TRUE, TRUE, 0);
-
- dialog->gsettings = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
-
- /* Account chooser for custom */
- dialog->account_chooser = empathy_account_chooser_new ();
- empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser),
- empathy_account_chooser_filter_supports_chatrooms,
- NULL);
- gtk_grid_attach (GTK_GRID (dialog->table_grid),
- dialog->account_chooser,
- 1, 0, 1, 1);
- gtk_widget_show (dialog->account_chooser);
-
- g_signal_connect (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser), "ready",
- G_CALLBACK (new_chatroom_dialog_account_ready_cb),
- dialog);
- g_signal_connect (GTK_COMBO_BOX (dialog->account_chooser), "changed",
- G_CALLBACK (new_chatroom_dialog_account_changed_cb),
- dialog);
- new_chatroom_dialog_account_changed_cb (GTK_COMBO_BOX (dialog->account_chooser),
- dialog);
-
- if (parent) {
- gtk_window_set_transient_for (GTK_WINDOW (dialog->window),
- GTK_WINDOW (parent));
- }
-
- gtk_widget_show (dialog->window);
+ TpAccount *account;
+ const char *account_path;
+
+ account = empathy_account_chooser_get_account (account_chooser);
+ if (account == NULL)
+ return;
+
+ account_path = tp_proxy_get_object_path (account);
+ DEBUG ("Storing account path '%s'", account_path);
+
+ g_settings_set (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT,
+ "o", account_path);
}
static void
-new_chatroom_dialog_store_last_account (GSettings *gsettings,
- EmpathyAccountChooser *account_chooser)
+new_chatroom_dialog_join (EmpathyNewChatroomDialog *self)
{
- TpAccount *account;
- const char *account_path;
+ EmpathyAccountChooser *account_chooser;
+ TpAccount *account;
+ const gchar *room;
+ const gchar *server = NULL;
+ gchar *room_name = NULL;
+
+ room = gtk_entry_get_text (GTK_ENTRY (self->priv->entry_room));
+ server = gtk_entry_get_text (GTK_ENTRY (self->priv->entry_server));
+
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser);
+ account = empathy_account_chooser_get_account (account_chooser);
+
+ if (!EMP_STR_EMPTY (server))
+ room_name = g_strconcat (room, "@", server, NULL);
+ else
+ room_name = g_strdup (room);
- account = empathy_account_chooser_get_account (account_chooser);
- if (account == NULL)
- return;
+ g_strstrip (room_name);
- account_path = tp_proxy_get_object_path (account);
- DEBUG ("Storing account path '%s'", account_path);
+ DEBUG ("Requesting channel for '%s'", room_name);
- g_settings_set (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT,
- "o", account_path);
+ empathy_join_muc (account, room_name, empathy_get_current_action_time ());
+
+ g_free (room_name);
}
static void
-new_chatroom_dialog_response_cb (GtkWidget *widget,
- gint response,
- EmpathyNewChatroomDialog *dialog)
+empathy_new_chatroom_dialog_response (GtkDialog *dialog,
+ gint response)
{
- if (response == GTK_RESPONSE_OK) {
- new_chatroom_dialog_join (dialog);
- new_chatroom_dialog_store_last_account (dialog->gsettings,
- EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser));
- }
+ EmpathyNewChatroomDialog *self = EMPATHY_NEW_CHATROOM_DIALOG (dialog);
+
+ if (response == GTK_RESPONSE_OK)
+ {
+ new_chatroom_dialog_join (self);
+ new_chatroom_dialog_store_last_account (self->priv->gsettings,
+ EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser));
+ }
- gtk_widget_destroy (widget);
+ gtk_widget_destroy (GTK_WIDGET (dialog));
}
static void
-new_chatroom_dialog_destroy_cb (GtkWidget *widget,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_model_add_columns (EmpathyNewChatroomDialog *self)
{
- if (dialog->room_list) {
- g_object_unref (dialog->room_list);
- }
- g_object_unref (dialog->model);
+ GtkTreeView *view;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *cell;
+ gint width, height;
+
+ gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height);
+
+ view = GTK_TREE_VIEW (self->priv->treeview);
- if (dialog->account != NULL) {
- g_signal_handler_disconnect (dialog->account, dialog->status_changed_id);
- g_object_unref (dialog->account);
- }
+ cell = gtk_cell_renderer_pixbuf_new ();
+ g_object_set (cell,
+ "width", width,
+ "height", height,
+ "stock-size", GTK_ICON_SIZE_MENU,
+ NULL);
- g_clear_object (&dialog->gsettings);
+ column = gtk_tree_view_column_new_with_attributes (NULL, cell,
+ "stock-id", COL_INVITE_ONLY, NULL);
- g_free (dialog);
+ gtk_tree_view_column_set_sort_column_id (column, COL_INVITE_ONLY);
+ gtk_tree_view_append_column (view, column);
+
+ column = gtk_tree_view_column_new_with_attributes (NULL, cell,
+ "stock-id", COL_NEED_PASSWORD, NULL);
+
+ gtk_tree_view_column_set_sort_column_id (column, COL_NEED_PASSWORD);
+ gtk_tree_view_append_column (view, column);
+
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell,
+ "xpad", (guint) 4,
+ "ypad", (guint) 2,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
+
+ column = gtk_tree_view_column_new_with_attributes (_("Chat Room"), cell,
+ "text", COL_NAME, NULL);
+
+ gtk_tree_view_column_set_sort_column_id (column, COL_NAME);
+ gtk_tree_view_column_set_expand (column, TRUE);
+ gtk_tree_view_append_column (view, column);
+
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell,
+ "xpad", (guint) 4,
+ "ypad", (guint) 2,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ "alignment", PANGO_ALIGN_RIGHT,
+ NULL);
+
+ column = gtk_tree_view_column_new_with_attributes (_("Members"), cell,
+ "text", COL_MEMBERS, NULL);
+
+ gtk_tree_view_column_set_sort_column_id (column, COL_MEMBERS_INT);
+ gtk_tree_view_append_column (view, column);
}
static void
-new_chatroom_dialog_model_setup (EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ EmpathyNewChatroomDialog *self)
{
- GtkTreeView *view;
- GtkListStore *store;
- GtkTreeSelection *selection;
-
- /* View */
- view = GTK_TREE_VIEW (dialog->treeview);
-
- g_signal_connect (view, "row-activated",
- G_CALLBACK (new_chatroom_dialog_model_row_activated_cb),
- dialog);
-
- /* Store/Model */
- store = gtk_list_store_new (COL_COUNT,
- G_TYPE_STRING, /* Invite */
- G_TYPE_STRING, /* Password */
- G_TYPE_STRING, /* Name */
- G_TYPE_STRING, /* Room */
- G_TYPE_STRING, /* Member count */
- G_TYPE_INT, /* Member count int */
- G_TYPE_STRING); /* Tool tip */
-
- dialog->model = GTK_TREE_MODEL (store);
- gtk_tree_view_set_model (view, dialog->model);
- gtk_tree_view_set_tooltip_column (view, COL_TOOLTIP);
- gtk_tree_view_set_search_column (view, COL_NAME);
-
- /* Selection */
- selection = gtk_tree_view_get_selection (view);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
- COL_NAME, GTK_SORT_ASCENDING);
-
- g_signal_connect (selection, "changed",
- G_CALLBACK (new_chatroom_dialog_model_selection_changed),
- dialog);
-
- /* Columns */
- new_chatroom_dialog_model_add_columns (dialog);
+ gtk_widget_activate (self->priv->button_join);
}
static void
-new_chatroom_dialog_model_add_columns (EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_model_selection_changed (GtkTreeSelection *selection,
+ EmpathyNewChatroomDialog *self)
{
- GtkTreeView *view;
- GtkTreeViewColumn *column;
- GtkCellRenderer *cell;
- gint width, height;
-
- gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height);
-
- view = GTK_TREE_VIEW (dialog->treeview);
-
- cell = gtk_cell_renderer_pixbuf_new ();
- g_object_set (cell,
- "width", width,
- "height", height,
- "stock-size", GTK_ICON_SIZE_MENU,
- NULL);
- column = gtk_tree_view_column_new_with_attributes (NULL,
- cell,
- "stock-id", COL_INVITE_ONLY,
- NULL);
-
- gtk_tree_view_column_set_sort_column_id (column, COL_INVITE_ONLY);
- gtk_tree_view_append_column (view, column);
-
- column = gtk_tree_view_column_new_with_attributes (NULL,
- cell,
- "stock-id", COL_NEED_PASSWORD,
- NULL);
-
- gtk_tree_view_column_set_sort_column_id (column, COL_NEED_PASSWORD);
- gtk_tree_view_append_column (view, column);
-
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell,
- "xpad", (guint) 4,
- "ypad", (guint) 2,
- "ellipsize", PANGO_ELLIPSIZE_END,
- NULL);
-
- column = gtk_tree_view_column_new_with_attributes (_("Chat Room"),
- cell,
- "text", COL_NAME,
- NULL);
-
- gtk_tree_view_column_set_sort_column_id (column, COL_NAME);
- gtk_tree_view_column_set_expand (column, TRUE);
- gtk_tree_view_append_column (view, column);
-
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell,
- "xpad", (guint) 4,
- "ypad", (guint) 2,
- "ellipsize", PANGO_ELLIPSIZE_END,
- "alignment", PANGO_ALIGN_RIGHT,
- NULL);
- column = gtk_tree_view_column_new_with_attributes (_("Members"),
- cell,
- "text", COL_MEMBERS,
- NULL);
-
- gtk_tree_view_column_set_sort_column_id (column, COL_MEMBERS_INT);
- gtk_tree_view_append_column (view, column);
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gchar *room = NULL;
+ gchar *server = NULL;
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get (model, &iter, COL_ROOM, &room, -1);
+ server = strstr (room, "@");
+ if (server)
+ {
+ *server = '\0';
+ server++;
+ }
+
+ gtk_entry_set_text (GTK_ENTRY (self->priv->entry_server),
+ server ? server : "");
+ gtk_entry_set_text (GTK_ENTRY (self->priv->entry_room), room ? room : "");
+
+ g_free (room);
}
static void
-update_join_button_sensitivity (EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_model_setup (EmpathyNewChatroomDialog *self)
{
- const gchar *room;
- const gchar *protocol;
- gboolean sensitive = FALSE;
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkTreeSelection *selection;
+
+ /* View */
+ view = GTK_TREE_VIEW (self->priv->treeview);
+
+ g_signal_connect (view, "row-activated",
+ G_CALLBACK (new_chatroom_dialog_model_row_activated_cb), self);
+
+ /* Store/Model */
+ store = gtk_list_store_new (COL_COUNT,
+ G_TYPE_STRING, /* Invite */
+ G_TYPE_STRING, /* Password */
+ G_TYPE_STRING, /* Name */
+ G_TYPE_STRING, /* Room */
+ G_TYPE_STRING, /* Member count */
+ G_TYPE_INT, /* Member count int */
+ G_TYPE_STRING); /* Tool tip */
+
+ self->priv->model = GTK_TREE_MODEL (store);
+ gtk_tree_view_set_model (view, self->priv->model);
+ gtk_tree_view_set_tooltip_column (view, COL_TOOLTIP);
+ gtk_tree_view_set_search_column (view, COL_NAME);
+
+ /* Selection */
+ selection = gtk_tree_view_get_selection (view);
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ COL_NAME, GTK_SORT_ASCENDING);
+
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (new_chatroom_dialog_model_selection_changed), self);
+
+ /* Columns */
+ new_chatroom_dialog_model_add_columns (self);
+}
+static void
+update_join_button_sensitivity (EmpathyNewChatroomDialog *self)
+{
+ const gchar *room;
+ const gchar *protocol;
+ gboolean sensitive = FALSE;
- room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room));
- protocol = tp_account_get_protocol (dialog->account);
- if (EMP_STR_EMPTY (room))
- goto out;
+ room = gtk_entry_get_text (GTK_ENTRY (self->priv->entry_room));
+ protocol = tp_account_get_protocol (self->priv->account);
+ if (EMP_STR_EMPTY (room))
+ goto out;
- if (!tp_strdiff (protocol, "irc") && (!tp_strdiff (room, "#") ||
- !tp_strdiff (room, "&")))
- {
- goto out;
- }
+ if (!tp_strdiff (protocol, "irc") &&
+ (!tp_strdiff (room, "#") || !tp_strdiff (room, "&")))
+ goto out;
- if (dialog->account == NULL)
- goto out;
+ if (self->priv->account == NULL)
+ goto out;
- if (tp_account_get_connection_status (dialog->account, NULL) !=
- TP_CONNECTION_STATUS_CONNECTED)
- goto out;
+ if (tp_account_get_connection_status (self->priv->account, NULL) !=
+ TP_CONNECTION_STATUS_CONNECTED)
+ goto out;
- sensitive = TRUE;
+ sensitive = TRUE;
out:
- gtk_widget_set_sensitive (dialog->button_join, sensitive);
+ gtk_widget_set_sensitive (self->priv->button_join, sensitive);
}
static void
-new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *self)
{
- const gchar *protocol;
-
- if (dialog->account == NULL)
- return;
-
- protocol = tp_account_get_protocol (dialog->account);
-
- gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), "");
-
- /* hardcode here known protocols */
- if (strcmp (protocol, "jabber") == 0) {
- gtk_widget_set_sensitive (dialog->entry_server, TRUE);
- }
- else if (strcmp (protocol, "local-xmpp") == 0) {
- gtk_widget_set_sensitive (dialog->entry_server, FALSE);
- }
- else if (strcmp (protocol, "irc") == 0) {
- gtk_widget_set_sensitive (dialog->entry_server, FALSE);
- }
- else {
- gtk_widget_set_sensitive (dialog->entry_server, TRUE);
- }
-
- if (!tp_strdiff (protocol, "irc"))
- gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), "#");
- else
- gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), "");
-
- update_join_button_sensitivity (dialog);
-
- /* Final set up of the dialog */
- gtk_widget_grab_focus (dialog->entry_room);
- gtk_editable_set_position (GTK_EDITABLE (dialog->entry_room), -1);
+ const gchar *protocol;
+
+ if (self->priv->account == NULL)
+ return;
+
+ protocol = tp_account_get_protocol (self->priv->account);
+
+ gtk_entry_set_text (GTK_ENTRY (self->priv->entry_server), "");
+
+ /* hardcode here known protocols */
+ if (strcmp (protocol, "jabber") == 0)
+ gtk_widget_set_sensitive (self->priv->entry_server, TRUE);
+ else if (strcmp (protocol, "local-xmpp") == 0)
+ gtk_widget_set_sensitive (self->priv->entry_server, FALSE);
+ else if (strcmp (protocol, "irc") == 0)
+ gtk_widget_set_sensitive (self->priv->entry_server, FALSE);
+ else
+ gtk_widget_set_sensitive (self->priv->entry_server, TRUE);
+
+ if (!tp_strdiff (protocol, "irc"))
+ gtk_entry_set_text (GTK_ENTRY (self->priv->entry_room), "#");
+ else
+ gtk_entry_set_text (GTK_ENTRY (self->priv->entry_room), "");
+
+ update_join_button_sensitivity (self);
+
+ /* Final set up of the dialog */
+ gtk_widget_grab_focus (self->priv->entry_room);
+ gtk_editable_set_position (GTK_EDITABLE (self->priv->entry_room), -1);
}
static void
account_status_changed_cb (TpAccount *account,
- guint old_status,
- guint new_status,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- EmpathyNewChatroomDialog *self)
+ guint old_status,
+ guint new_status,
+ guint reason,
+ gchar *dbus_error_name,
+ GHashTable *details,
+ EmpathyNewChatroomDialog *self)
{
- update_join_button_sensitivity (self);
+ update_join_button_sensitivity (self);
}
static void
-new_chatroom_dialog_select_last_account (GSettings *gsettings,
- EmpathyAccountChooser *account_chooser)
+new_chatroom_dialog_select_last_account (GSettings *gsettings,
+ EmpathyAccountChooser *account_chooser)
{
- const gchar *account_path;
- TpAccountManager *manager;
- TpSimpleClientFactory *factory;
- TpAccount *account;
- TpConnectionStatus status;
-
- account_path = g_settings_get_string (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT);
- DEBUG ("Selecting account path '%s'", account_path);
-
- manager = tp_account_manager_dup ();
- factory = tp_proxy_get_factory (manager);
- account = tp_simple_client_factory_ensure_account (factory,
- account_path,
- NULL,
- NULL);
-
- if (account != NULL) {
- status = tp_account_get_connection_status (account, NULL);
- if (status == TP_CONNECTION_STATUS_CONNECTED) {
- empathy_account_chooser_set_account (account_chooser,
- account);
- }
- g_object_unref (account);
- }
- g_object_unref (manager);
+ const gchar *account_path;
+ TpAccountManager *manager;
+ TpSimpleClientFactory *factory;
+ TpAccount *account;
+ TpConnectionStatus status;
+
+ account_path = g_settings_get_string (gsettings,
+ EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT);
+ DEBUG ("Selecting account path '%s'", account_path);
+
+ manager = tp_account_manager_dup ();
+ factory = tp_proxy_get_factory (manager);
+ account = tp_simple_client_factory_ensure_account (factory, account_path,
+ NULL, NULL);
+
+ if (account != NULL)
+ {
+ status = tp_account_get_connection_status (account, NULL);
+ if (status == TP_CONNECTION_STATUS_CONNECTED)
+ empathy_account_chooser_set_account (account_chooser, account);
+ g_object_unref (account);
+ }
+
+ g_object_unref (manager);
}
static void
-new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox,
+ EmpathyNewChatroomDialog *self)
{
- new_chatroom_dialog_select_last_account (dialog->gsettings, combobox);
+ new_chatroom_dialog_select_last_account (self->priv->gsettings, combobox);
}
static void
-new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox,
- EmpathyNewChatroomDialog *dialog)
+listing_failed_cb (TpRoomList *room_list,
+ GError *error,
+ EmpathyNewChatroomDialog *self)
{
- EmpathyAccountChooser *account_chooser;
- gboolean listing = FALSE;
- gboolean expanded = FALSE;
- TpConnection *connection;
- TpCapabilities *caps;
-
- if (dialog->room_list) {
- g_object_unref (dialog->room_list);
- dialog->room_list = NULL;
- }
-
- gtk_spinner_stop (GTK_SPINNER (dialog->throbber));
- gtk_widget_hide (dialog->throbber);
- new_chatroom_dialog_model_clear (dialog);
-
- if (dialog->account != NULL) {
- g_signal_handler_disconnect (dialog->account, dialog->status_changed_id);
- g_object_unref (dialog->account);
- }
-
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser);
- dialog->account = empathy_account_chooser_dup_account (account_chooser);
- connection = empathy_account_chooser_get_connection (account_chooser);
- if (dialog->account == NULL)
- goto out;
-
- dialog->status_changed_id = g_signal_connect (dialog->account,
- "status-changed", G_CALLBACK (account_status_changed_cb), dialog);
-
- /* empathy_account_chooser_filter_supports_chatrooms ensures that the
- * account has a connection and CAPABILITIES has been prepared. */
- g_assert (connection != NULL);
- g_assert (tp_proxy_is_prepared (connection,
- TP_CONNECTION_FEATURE_CAPABILITIES));
- caps = tp_connection_get_capabilities (connection);
-
- if (tp_capabilities_supports_room_list (caps, NULL)) {
- /* Roomlist channels are supported */
- dialog->room_list = empathy_tp_roomlist_new (dialog->account);
- }
- else {
- dialog->room_list = NULL;
- }
-
- if (dialog->room_list) {
- g_signal_connect (dialog->room_list, "destroy",
- G_CALLBACK (new_chatroom_dialog_roomlist_destroy_cb),
- dialog);
- g_signal_connect (dialog->room_list, "new-room",
- G_CALLBACK (new_chatroom_dialog_new_room_cb),
- dialog);
- g_signal_connect (dialog->room_list, "notify::is-listing",
- G_CALLBACK (new_chatroom_dialog_listing_cb),
- dialog);
- g_signal_connect (dialog->room_list, "error::start",
- G_CALLBACK (start_listing_error_cb),
- dialog);
- g_signal_connect (dialog->room_list, "error::stop",
- G_CALLBACK (stop_listing_error_cb),
- dialog);
-
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (dialog->expander_browse));
- if (expanded) {
- gtk_widget_hide (dialog->viewport_error);
- gtk_widget_set_sensitive (dialog->treeview, TRUE);
- new_chatroom_dialog_browse_start (dialog);
- }
-
- listing = empathy_tp_roomlist_is_listing (dialog->room_list);
- if (listing) {
- gtk_spinner_start (GTK_SPINNER (dialog->throbber));
- gtk_widget_show (dialog->throbber);
- }
- }
-
- gtk_widget_set_sensitive (dialog->expander_browse, dialog->room_list != NULL);
+ gtk_label_set_text (GTK_LABEL (self->priv->label_error_message),
+ _("Failed to list rooms"));
+ gtk_widget_show_all (self->priv->viewport_error);
+ gtk_widget_set_sensitive (self->priv->treeview, FALSE);
+}
-out:
- new_chatroom_dialog_update_widgets (dialog);
+static void
+new_chatroom_dialog_got_room_cb (TpRoomList *room_list,
+ TpRoomInfo *room,
+ EmpathyNewChatroomDialog *self)
+{
+ GtkListStore *store;
+ gchar *members;
+ gchar *tooltip;
+ const gchar *need_password;
+ const gchar *invite_only;
+ gchar *tmp;
+
+ DEBUG ("New room listed: %s (%s)", tp_room_info_get_name (room),
+ tp_room_info_get_handle_name (room));
+
+ /* Add to model */
+ store = GTK_LIST_STORE (self->priv->model);
+ members = g_strdup_printf ("%d", tp_room_info_get_members_count (
+ room, NULL));
+ tmp = g_strdup_printf ("<b>%s</b>", tp_room_info_get_name (room));
+
+ /* Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
+ yes/no, yes/no and a number. */
+ tooltip = g_strdup_printf (
+ _("%s\nInvite required: %s\nPassword required: %s\nMembers: %s"),
+ tmp,
+ tp_room_info_get_invite_only (room, NULL) ? _("Yes") : _("No"),
+ tp_room_info_get_requires_password (room, NULL) ? _("Yes") : _("No"),
+ members);
+ g_free (tmp);
+
+ invite_only = (tp_room_info_get_invite_only (room, NULL) ?
+ GTK_STOCK_INDEX : NULL);
+ need_password = (tp_room_info_get_requires_password (room, NULL) ?
+ GTK_STOCK_DIALOG_AUTHENTICATION : NULL);
+
+ gtk_list_store_insert_with_values (store, NULL, -1,
+ COL_NEED_PASSWORD, need_password,
+ COL_INVITE_ONLY, invite_only,
+ COL_NAME, tp_room_info_get_name (room),
+ COL_ROOM, tp_room_info_get_handle_name (room),
+ COL_MEMBERS, members,
+ COL_MEMBERS_INT, tp_room_info_get_members_count (room, NULL),
+ COL_TOOLTIP, tooltip,
+ -1);
+
+ g_free (members);
+ g_free (tooltip);
}
static void
-new_chatroom_dialog_button_close_error_clicked_cb (GtkButton *button,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_listing_cb (TpRoomList *room_list,
+ GParamSpec *spec,
+ EmpathyNewChatroomDialog *self)
{
- gtk_widget_hide (dialog->viewport_error);
+ /* Update the throbber */
+ if (tp_room_list_is_listing (room_list))
+ {
+ gtk_spinner_start (GTK_SPINNER (self->priv->throbber));
+ gtk_widget_show (self->priv->throbber);
+ }
+ else
+ {
+ gtk_spinner_stop (GTK_SPINNER (self->priv->throbber));
+ gtk_widget_hide (self->priv->throbber);
+ }
}
static void
-new_chatroom_dialog_roomlist_destroy_cb (EmpathyTpRoomlist *room_list,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *self)
{
- g_object_unref (dialog->room_list);
- dialog->room_list = NULL;
+ GtkListStore *store;
+
+ store = GTK_LIST_STORE (self->priv->model);
+ gtk_list_store_clear (store);
}
static void
-new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list,
- EmpathyChatroom *chatroom,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_browse_start (EmpathyNewChatroomDialog *self)
{
- GtkListStore *store;
- gchar *members;
- gchar *tooltip;
- const gchar *need_password;
- const gchar *invite_only;
- gchar *tmp;
-
- DEBUG ("New chatroom listed: %s (%s)",
- empathy_chatroom_get_name (chatroom),
- empathy_chatroom_get_room (chatroom));
-
- /* Add to model */
- store = GTK_LIST_STORE (dialog->model);
- members = g_strdup_printf ("%d", empathy_chatroom_get_members_count (chatroom));
- tmp = g_strdup_printf ("<b>%s</b>", empathy_chatroom_get_name (chatroom));
- /* Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
- yes/no, yes/no and a number. */
- tooltip = g_strdup_printf (_("%s\nInvite required: %s\nPassword required: %s\nMembers: %s"),
- tmp,
- empathy_chatroom_get_invite_only (chatroom) ? _("Yes") : _("No"),
- empathy_chatroom_get_need_password (chatroom) ? _("Yes") : _("No"),
- members);
- g_free (tmp);
- invite_only = (empathy_chatroom_get_invite_only (chatroom) ?
- GTK_STOCK_INDEX : NULL);
- need_password = (empathy_chatroom_get_need_password (chatroom) ?
- GTK_STOCK_DIALOG_AUTHENTICATION : NULL);
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_NEED_PASSWORD, need_password,
- COL_INVITE_ONLY, invite_only,
- COL_NAME, empathy_chatroom_get_name (chatroom),
- COL_ROOM, empathy_chatroom_get_room (chatroom),
- COL_MEMBERS, members,
- COL_MEMBERS_INT, empathy_chatroom_get_members_count (chatroom),
- COL_TOOLTIP, tooltip,
- -1);
-
- g_free (members);
- g_free (tooltip);
+ new_chatroom_dialog_model_clear (self);
+
+ if (self->priv->room_list != NULL)
+ tp_room_list_start (self->priv->room_list);
}
static void
-start_listing_error_cb (EmpathyTpRoomlist *room_list,
- GError *error,
- EmpathyNewChatroomDialog *dialog)
+new_room_list_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- gtk_label_set_text (GTK_LABEL (dialog->label_error_message), _("Could not start room listing"));
- gtk_widget_show_all (dialog->viewport_error);
- gtk_widget_set_sensitive (dialog->treeview, FALSE);
+ EmpathyNewChatroomDialog *self = user_data;
+ GError *error = NULL;
+
+ self->priv->room_list = tp_room_list_new_finish (result, &error);
+ if (self->priv->room_list == NULL)
+ {
+ DEBUG ("Failed to create TpRoomList: %s\n", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_signal_connect (self->priv->room_list, "got-room",
+ G_CALLBACK (new_chatroom_dialog_got_room_cb), self);
+ g_signal_connect (self->priv->room_list, "failed",
+ G_CALLBACK (listing_failed_cb), self);
+ g_signal_connect (self->priv->room_list, "notify::listing",
+ G_CALLBACK (new_chatroom_dialog_listing_cb), self);
+
+ if (gtk_expander_get_expanded (GTK_EXPANDER (self->priv->expander_browse)))
+ {
+ gtk_widget_hide (self->priv->viewport_error);
+ gtk_widget_set_sensitive (self->priv->treeview, TRUE);
+ new_chatroom_dialog_browse_start (self);
+ }
+
+ if (tp_room_list_is_listing (self->priv->room_list))
+ {
+ gtk_spinner_start (GTK_SPINNER (self->priv->throbber));
+ gtk_widget_show (self->priv->throbber);
+ }
+
+ gtk_widget_set_sensitive (self->priv->expander_browse, TRUE);
+
+ new_chatroom_dialog_update_widgets (self);
+
}
static void
-stop_listing_error_cb (EmpathyTpRoomlist *room_list,
- GError *error,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox,
+ EmpathyNewChatroomDialog *self)
{
- gtk_label_set_text (GTK_LABEL (dialog->label_error_message), _("Could not stop room listing"));
- gtk_widget_show_all (dialog->viewport_error);
- gtk_widget_set_sensitive (dialog->treeview, FALSE);
+ EmpathyAccountChooser *account_chooser;
+ TpConnection *connection;
+ TpCapabilities *caps;
+
+ g_clear_object (&self->priv->room_list);
+
+ gtk_spinner_stop (GTK_SPINNER (self->priv->throbber));
+ gtk_widget_hide (self->priv->throbber);
+ new_chatroom_dialog_model_clear (self);
+
+ if (self->priv->account != NULL)
+ {
+ g_signal_handler_disconnect (self->priv->account,
+ self->priv->status_changed_id);
+ g_object_unref (self->priv->account);
+ }
+
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser);
+ self->priv->account = empathy_account_chooser_dup_account (account_chooser);
+ connection = empathy_account_chooser_get_connection (account_chooser);
+ if (self->priv->account == NULL)
+ goto out;
+
+ self->priv->status_changed_id = g_signal_connect (self->priv->account,
+ "status-changed", G_CALLBACK (account_status_changed_cb), self);
+
+ /* empathy_account_chooser_filter_supports_chatrooms ensures that the
+ * account has a connection and CAPABILITIES has been prepared. */
+ g_assert (connection != NULL);
+ g_assert (tp_proxy_is_prepared (connection,
+ TP_CONNECTION_FEATURE_CAPABILITIES));
+ caps = tp_connection_get_capabilities (connection);
+
+ if (tp_capabilities_supports_room_list (caps, NULL))
+ {
+ /* Roomlist channels are supported */
+ tp_room_list_new_async (self->priv->account, NULL, new_room_list_cb,
+ self);
+ }
+
+ gtk_widget_set_sensitive (self->priv->expander_browse, FALSE);
+
+out:
+ new_chatroom_dialog_update_widgets (self);
}
static void
-new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list,
- gpointer unused,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_button_close_error_clicked_cb (GtkButton *button,
+ EmpathyNewChatroomDialog *self)
{
- gboolean listing;
-
- listing = empathy_tp_roomlist_is_listing (room_list);
-
- /* Update the throbber */
- if (listing) {
- gtk_spinner_start (GTK_SPINNER (dialog->throbber));
- gtk_widget_show (dialog->throbber);
- } else {
- gtk_spinner_stop (GTK_SPINNER (dialog->throbber));
- gtk_widget_hide (dialog->throbber);
- }
+ gtk_widget_hide (self->priv->viewport_error);
}
static void
-new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_entry_changed_cb (GtkWidget *entry,
+ EmpathyNewChatroomDialog *self)
{
- GtkListStore *store;
+ if (entry == self->priv->entry_room)
+ {
+ update_join_button_sensitivity (self);
- store = GTK_LIST_STORE (dialog->model);
- gtk_list_store_clear (store);
+ /* FIXME: Select the room in the list */
+ }
}
static void
-new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget,
+ EmpathyNewChatroomDialog *self)
{
- gtk_widget_activate (dialog->button_join);
+ new_chatroom_dialog_browse_start (self);
}
static void
-new_chatroom_dialog_model_selection_changed (GtkTreeSelection *selection,
- EmpathyNewChatroomDialog *dialog)
+new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget,
+ EmpathyNewChatroomDialog *self)
{
- GtkTreeModel *model;
- GtkTreeIter iter;
- gchar *room = NULL;
- gchar *server = NULL;
-
- if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
- return;
- }
-
- gtk_tree_model_get (model, &iter, COL_ROOM, &room, -1);
- server = strstr (room, "@");
- if (server) {
- *server = '\0';
- server++;
- }
-
- gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), server ? server : "");
- gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), room ? room : "");
-
- g_free (room);
+ gboolean expanded;
+
+ expanded = gtk_expander_get_expanded (GTK_EXPANDER (widget));
+ if (expanded)
+ {
+ gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
+ }
+ else
+ {
+ gtk_widget_hide (self->priv->viewport_error);
+ gtk_widget_set_sensitive (self->priv->treeview, TRUE);
+ new_chatroom_dialog_browse_start (self);
+ gtk_window_set_resizable (GTK_WINDOW (self), TRUE);
+ }
}
-static void
-new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog)
+static gboolean
+new_chatroom_dialog_entry_server_focus_out_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ EmpathyNewChatroomDialog *self)
{
- EmpathyAccountChooser *account_chooser;
- TpAccount *account;
- const gchar *room;
- const gchar *server = NULL;
- gchar *room_name = NULL;
+ gboolean expanded;
- room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room));
- server = gtk_entry_get_text (GTK_ENTRY (dialog->entry_server));
+ expanded = gtk_expander_get_expanded (
+ GTK_EXPANDER (self->priv->expander_browse));
+ if (expanded)
+ new_chatroom_dialog_browse_start (self);
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser);
- account = empathy_account_chooser_get_account (account_chooser);
+ return FALSE;
+}
- if (!EMP_STR_EMPTY (server)) {
- room_name = g_strconcat (room, "@", server, NULL);
- } else {
- room_name = g_strdup (room);
- }
+static GObject *
+empathy_new_chatroom_dialog_constructor (GType type,
+ guint n_props,
+ GObjectConstructParam *props)
+{
+ GObject *retval;
+
+ if (dialog_p)
+ {
+ retval = G_OBJECT (dialog_p);
+ g_object_ref (retval);
+ }
+ else
+ {
+ retval = G_OBJECT_CLASS (
+ empathy_new_chatroom_dialog_parent_class)->constructor (type,
+ n_props, props);
+
+ dialog_p = EMPATHY_NEW_CHATROOM_DIALOG (retval);
+ g_object_add_weak_pointer (retval, (gpointer) &dialog_p);
+ }
+
+ return retval;
+}
- g_strstrip (room_name);
+GtkWidget *
+empathy_new_chatroom_dialog_show (GtkWindow *parent)
+{
+ GtkWidget *dialog;
- DEBUG ("Requesting channel for '%s'", room_name);
+ dialog = g_object_new (EMPATHY_TYPE_NEW_CHATROOM_DIALOG, NULL);
- empathy_join_muc (account, room_name, empathy_get_current_action_time ());
+ if (parent != NULL)
+ {
+ gtk_window_set_transient_for (GTK_WINDOW (dialog),
+ GTK_WINDOW (parent));
+ }
- g_free (room_name);
+ gtk_window_present (GTK_WINDOW (dialog));
+ return dialog;
}
static void
-new_chatroom_dialog_entry_changed_cb (GtkWidget *entry,
- EmpathyNewChatroomDialog *dialog)
+empathy_new_chatroom_dialog_dispose (GObject *object)
{
- if (entry == dialog->entry_room) {
- update_join_button_sensitivity (dialog);
+ EmpathyNewChatroomDialog *self = EMPATHY_NEW_CHATROOM_DIALOG (object);
+ void (*chain_up) (GObject *) =
+ ((GObjectClass *) empathy_new_chatroom_dialog_parent_class)->dispose;
- /* FIXME: Select the room in the list */
- }
-}
+ g_clear_object (&self->priv->room_list);
+ g_clear_object (&self->priv->model);
-static void
-new_chatroom_dialog_browse_start (EmpathyNewChatroomDialog *dialog)
-{
- new_chatroom_dialog_model_clear (dialog);
- if (dialog->room_list) {
- empathy_tp_roomlist_start (dialog->room_list);
- }
-}
+ if (self->priv->account != NULL)
+ {
+ g_signal_handler_disconnect (self->priv->account,
+ self->priv->status_changed_id);
+ g_clear_object (&self->priv->account);
+ }
-static void
-new_chatroom_dialog_browse_stop (EmpathyNewChatroomDialog *dialog)
-{
- if (dialog->room_list) {
- empathy_tp_roomlist_stop (dialog->room_list);
- }
-}
+ g_clear_object (&self->priv->gsettings);
-static void
-new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget,
- EmpathyNewChatroomDialog *dialog)
-{
- new_chatroom_dialog_browse_start (dialog);
+ if (chain_up != NULL)
+ chain_up (object);
}
static void
-new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget,
- EmpathyNewChatroomDialog *dialog)
+empathy_new_chatroom_dialog_class_init (EmpathyNewChatroomDialogClass *klass)
{
- gboolean expanded;
-
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (widget));
- if (expanded) {
- new_chatroom_dialog_browse_stop (dialog);
- gtk_window_set_resizable (GTK_WINDOW (dialog->window), FALSE);
- } else {
- gtk_widget_hide (dialog->viewport_error);
- gtk_widget_set_sensitive (dialog->treeview, TRUE);
- new_chatroom_dialog_browse_start (dialog);
- gtk_window_set_resizable (GTK_WINDOW (dialog->window), TRUE);
- }
+ GObjectClass *oclass = G_OBJECT_CLASS (klass);
+ GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
+
+ oclass->constructor = empathy_new_chatroom_dialog_constructor;
+ oclass->dispose = empathy_new_chatroom_dialog_dispose;
+
+ dialog_class->response = empathy_new_chatroom_dialog_response;
+
+ g_type_class_add_private (klass, sizeof (EmpathyNewChatroomDialogPriv));
}
-static gboolean
-new_chatroom_dialog_entry_server_focus_out_cb (GtkWidget *widget,
- GdkEventFocus *event,
- EmpathyNewChatroomDialog *dialog)
+static void
+empathy_new_chatroom_dialog_init (EmpathyNewChatroomDialog *self)
{
- gboolean expanded;
-
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (dialog->expander_browse));
- if (expanded) {
- new_chatroom_dialog_browse_start (dialog);
- }
- return FALSE;
+ GtkBuilder *gui;
+ GtkSizeGroup *size_group;
+ gchar *filename;
+ GtkWidget *vbox, *content;
+
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ EMPATHY_TYPE_NEW_CHATROOM_DIALOG, EmpathyNewChatroomDialogPriv);
+
+ filename = empathy_file_lookup ("empathy-new-chatroom-dialog.ui", "src");
+ gui = empathy_builder_get_file (filename,
+ "vbox_new_chatroom", &vbox,
+ "table_grid", &self->priv->table_grid,
+ "label_account", &self->priv->label_account,
+ "label_server", &self->priv->label_server,
+ "label_room", &self->priv->label_room,
+ "entry_server", &self->priv->entry_server,
+ "entry_room", &self->priv->entry_room,
+ "treeview", &self->priv->treeview,
+ "expander_browse", &self->priv->expander_browse,
+ "hbox_expander", &self->priv->hbox_expander,
+ "label_error_message", &self->priv->label_error_message,
+ "viewport_error", &self->priv->viewport_error,
+ NULL);
+ g_free (filename);
+
+ empathy_builder_connect (gui, self,
+ "entry_server", "changed", new_chatroom_dialog_entry_changed_cb,
+ "entry_server", "activate", new_chatroom_dialog_entry_server_activate_cb,
+ "entry_server", "focus-out-event",
+ new_chatroom_dialog_entry_server_focus_out_cb,
+ "entry_room", "changed", new_chatroom_dialog_entry_changed_cb,
+ "expander_browse", "activate",
+ new_chatroom_dialog_expander_browse_activate_cb,
+ "button_close_error", "clicked",
+ new_chatroom_dialog_button_close_error_clicked_cb,
+ NULL);
+
+ /* Create dialog */
+ content = gtk_dialog_get_content_area (GTK_DIALOG (self));
+ gtk_container_add (GTK_CONTAINER (content), vbox);
+
+ gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL);
+ self->priv->button_join = gtk_dialog_add_button (GTK_DIALOG (self),
+ _("Join"), GTK_RESPONSE_OK);
+
+ gtk_window_set_title (GTK_WINDOW (self), _("Join Room"));
+ gtk_window_set_role (GTK_WINDOW (self), "join_new_chatroom");
+
+ g_object_unref (gui);
+
+ /* Label alignment */
+ size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ gtk_size_group_add_widget (size_group, self->priv->label_account);
+ gtk_size_group_add_widget (size_group, self->priv->label_server);
+ gtk_size_group_add_widget (size_group, self->priv->label_room);
+
+ g_object_unref (size_group);
+
+ /* Set up chatrooms treeview */
+ new_chatroom_dialog_model_setup (self);
+
+ /* Add throbber */
+ self->priv->throbber = gtk_spinner_new ();
+ gtk_box_pack_start (GTK_BOX (self->priv->hbox_expander), self->priv->throbber,
+ TRUE, TRUE, 0);
+
+ self->priv->gsettings = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
+
+ /* Account chooser for custom */
+ self->priv->account_chooser = empathy_account_chooser_new ();
+ empathy_account_chooser_set_filter (
+ EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser),
+ empathy_account_chooser_filter_supports_chatrooms, NULL);
+ gtk_grid_attach (GTK_GRID (self->priv->table_grid),
+ self->priv->account_chooser, 1, 0, 1, 1);
+ gtk_widget_show (self->priv->account_chooser);
+
+ g_signal_connect (EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser),
+ "ready", G_CALLBACK (new_chatroom_dialog_account_ready_cb), self);
+ g_signal_connect (GTK_COMBO_BOX (self->priv->account_chooser), "changed",
+ G_CALLBACK (new_chatroom_dialog_account_changed_cb), self);
+ new_chatroom_dialog_account_changed_cb (
+ GTK_COMBO_BOX (self->priv->account_chooser), self);
}
diff --git a/src/empathy-new-chatroom-dialog.h b/src/empathy-new-chatroom-dialog.h
index b1cef0daa..02bf3b2a0 100644
--- a/src/empathy-new-chatroom-dialog.h
+++ b/src/empathy-new-chatroom-dialog.h
@@ -1,7 +1,6 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2006-2007 Imendio AB
- * Copyright (C) 2007-2008 Collabora Ltd.
+ * Copyright (C) 2007-2011 Collabora Ltd.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -22,13 +21,56 @@
* Xavier Claessens <xclaesse@gmail.com>
*/
-#ifndef __EMPATHY_NEW_CHATROOMS_WINDOW_H__
-#define __EMPATHY_NEW_CHATROOMS_WINDOW_H__
+#ifndef __EMPATHY_NEW_CHATROOM_DIALOG_H__
+#define __EMPATHY_NEW_CHATROOM_DIALOG_H__
+
+#include <glib-object.h>
G_BEGIN_DECLS
-void empathy_new_chatroom_dialog_show (GtkWindow *parent);
+typedef struct _EmpathyNewChatroomDialog EmpathyNewChatroomDialog;
+typedef struct _EmpathyNewChatroomDialogClass EmpathyNewChatroomDialogClass;
+typedef struct _EmpathyNewChatroomDialogPriv EmpathyNewChatroomDialogPriv;
+
+struct _EmpathyNewChatroomDialogClass
+{
+ /*<private>*/
+ GtkDialogClass parent_class;
+};
+
+struct _EmpathyNewChatroomDialog
+{
+ /*<private>*/
+ GtkDialog parent;
+ EmpathyNewChatroomDialogPriv *priv;
+};
+
+GType empathy_new_chatroom_dialog_get_type (void);
+
+/* TYPE MACROS */
+#define EMPATHY_TYPE_NEW_CHATROOM_DIALOG \
+ (empathy_new_chatroom_dialog_get_type ())
+#define EMPATHY_NEW_CHATROOM_DIALOG(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+ EMPATHY_TYPE_NEW_CHATROOM_DIALOG, \
+ EmpathyNewChatroomDialog))
+#define EMPATHY_NEW_CHATROOM_DIALOG_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), \
+ EMPATHY_TYPE_NEW_CHATROOM_DIALOG, \
+ EmpathyNewChatroomDialogClass))
+#define EMPATHY_IS_NEW_CHATROOM_DIALOG(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
+ EMPATHY_TYPE_NEW_CHATROOM_DIALOG))
+#define EMPATHY_IS_NEW_CHATROOM_DIALOG_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), \
+ EMPATHY_TYPE_NEW_CHATROOM_DIALOG))
+#define EMPATHY_NEW_CHATROOM_DIALOG_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ EMPATHY_TYPE_NEW_CHATROOM_DIALOG, \
+ EmpathyNewChatroomDialogClass))
+
+GtkWidget * empathy_new_chatroom_dialog_show (GtkWindow *parent);
G_END_DECLS
-#endif /* __EMPATHY_NEW_CHATROOMS_WINDOW_H__ */
+#endif /* #ifndef __EMPATHY_NEW_CHATROOM_DIALOG_H__*/
diff --git a/src/empathy-new-chatroom-dialog.ui b/src/empathy-new-chatroom-dialog.ui
index e77ec60cd..ee2d74bdf 100644
--- a/src/empathy-new-chatroom-dialog.ui
+++ b/src/empathy-new-chatroom-dialog.ui
@@ -1,259 +1,141 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
- <object class="GtkImage" id="join_image">
- <property name="can_focus">False</property>
- <property name="stock">gtk-jump-to</property>
- </object>
- <object class="GtkDialog" id="new_chatroom_dialog">
+ <object class="GtkVBox" id="vbox_new_chatroom">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">5</property>
- <property name="title" translatable="yes">Join Room</property>
- <property name="role">join_new_chatroom</property>
- <property name="default_width">350</property>
- <property name="type_hint">dialog</property>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox4">
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkGrid" id="table_grid">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area4">
+ <property name="row_spacing">5</property>
+ <property name="column_spacing">5</property>
+ <child>
+ <object class="GtkEntry" id="entry_room">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_markup" translatable="yes">Enter the room name to join here or click on one or more rooms in the list.</property>
+ <property name="tooltip_text" translatable="yes">Enter the room name to join here or click on one or more rooms in the list.</property>
+ <property name="activates_default">True</property>
+ <property name="width_chars">25</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_room">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button_cancel">
- <property name="label">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_join">
- <property name="label" translatable="yes">_Join</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="image">join_image</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Room:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_room</property>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox_widgets">
+ <object class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_markup" translatable="yes">Enter the server which hosts the room, or leave it empty if the room is on the current account&amp;apos;s server</property>
+ <property name="tooltip_text" translatable="yes">Enter the server which hosts the room, or leave it empty if the room is on the current account's server</property>
+ <property name="width_chars">25</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_server">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="spacing">5</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Server:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_server</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_account">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Account:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkExpander" id="expander_browse">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
<child>
- <object class="GtkGrid" id="table_grid">
- <property name="visible">True</property>
+ <object class="GtkViewport" id="viewport_error">
<property name="can_focus">False</property>
- <property name="row_spacing">5</property>
- <property name="column_spacing">5</property>
- <child>
- <object class="GtkEntry" id="entry_room">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Enter the room name to join here or click on one or more rooms in the list.</property>
- <property name="activates_default">True</property>
- <property name="width_chars">25</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_room">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Room:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">entry_room</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="entry_server">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Enter the server which hosts the room, or leave it empty if the room is on the current account's server</property>
- <property name="width_chars">25</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_server">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Server:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">entry_server</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_account">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Account:</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkExpander" id="expander_browse">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
+ <property name="resize_mode">queue</property>
<child>
- <object class="GtkVBox" id="vbox1">
+ <object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">2</property>
<child>
- <object class="GtkViewport" id="viewport_error">
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="resize_mode">queue</property>
- <child>
- <object class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-dialog-error</property>
- <property name="icon-size">1</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="padding">5</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_error_message">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="xpad">10</property>
- <property name="label" translatable="yes">Couldn't load room list</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_close_error">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
- <property name="relief">none</property>
- <child>
- <object class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-close</property>
- <property name="icon-size">1</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
+ <property name="stock">gtk-dialog-error</property>
+ <property name="icon-size">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
+ <property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="width_request">350</property>
- <property name="height_request">150</property>
+ <object class="GtkLabel" id="label_error_message">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="search_column">0</property>
- <property name="show_expanders">False</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection1"/>
- </child>
- </object>
- </child>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="xpad">10</property>
+ <property name="label" translatable="yes">Couldn't load room list</property>
</object>
<packing>
<property name="expand">True</property>
@@ -261,27 +143,53 @@
<property name="position">1</property>
</packing>
</child>
- </object>
- </child>
- <child type="label">
- <object class="GtkHBox" id="hbox_expander">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
<child>
- <object class="GtkLabel" id="label1">
+ <object class="GtkButton" id="button_close_error">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Room List</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="relief">none</property>
+ <child>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-close</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
</object>
<packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
</packing>
</child>
- <child>
- <placeholder/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow2">
+ <property name="width_request">350</property>
+ <property name="height_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="search_column">0</property>
+ <property name="show_expanders">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection"/>
</child>
</object>
</child>
@@ -293,17 +201,35 @@
</packing>
</child>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
+ </child>
+ <child type="label">
+ <object class="GtkHBox" id="hbox_expander">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Room List</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
</child>
</object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
</child>
- <action-widgets>
- <action-widget response="-7">button_cancel</action-widget>
- <action-widget response="-5">button_join</action-widget>
- </action-widgets>
</object>
</interface>
diff --git a/src/empathy-notifications-approver.c b/src/empathy-notifications-approver.c
index 92b3f7475..b6abd8c6b 100644
--- a/src/empathy-notifications-approver.c
+++ b/src/empathy-notifications-approver.c
@@ -25,8 +25,6 @@
#include <libnotify/notify.h>
#include <telepathy-glib/telepathy-glib.h>
-#include <libempathy/empathy-tp-streamed-media.h>
-
#include <libempathy-gtk/empathy-notify-manager.h>
#include <libempathy-gtk/empathy-call-utils.h>
@@ -191,12 +189,7 @@ add_notification_actions (EmpathyNotificationsApprover *self,
self, NULL);
break;
- case EMPATHY_EVENT_TYPE_VOIP:
case EMPATHY_EVENT_TYPE_CALL:
- if (self->priv->event->type == EMPATHY_EVENT_TYPE_VOIP)
- video = empathy_tp_streamed_media_has_initial_video (
- EMPATHY_TP_STREAMED_MEDIA (self->priv->event->handler_instance));
- else
video = tp_call_channel_has_initial_video (
TP_CALL_CHANNEL (self->priv->event->handler_instance), NULL);
@@ -261,7 +254,6 @@ notification_is_urgent (EmpathyNotificationsApprover *self,
* interact ASAP */
switch (self->priv->event->type) {
case EMPATHY_EVENT_TYPE_CHAT:
- case EMPATHY_EVENT_TYPE_VOIP:
case EMPATHY_EVENT_TYPE_CALL:
case EMPATHY_EVENT_TYPE_TRANSFER:
case EMPATHY_EVENT_TYPE_INVITATION:
@@ -288,7 +280,6 @@ get_category_for_event_type (EmpathyEventType type)
CASE(CHAT)
CASE(PRESENCE_ONLINE)
CASE(PRESENCE_OFFLINE)
- CASE(VOIP)
CASE(CALL)
CASE(TRANSFER)
CASE(INVITATION)
diff --git a/src/empathy-preferences.c b/src/empathy-preferences.c
index 14f178072..c72c6ae61 100644
--- a/src/empathy-preferences.c
+++ b/src/empathy-preferences.c
@@ -65,33 +65,11 @@ static const gchar * empathy_preferences_tabs[] =
struct _EmpathyPreferencesPriv {
GtkWidget *notebook;
- GtkWidget *checkbutton_show_smileys;
- GtkWidget *checkbutton_show_contacts_in_rooms;
- GtkWidget *radiobutton_chats_new_windows;
GtkWidget *checkbutton_events_notif_area;
- GtkWidget *checkbutton_autoconnect;
- GtkWidget *checkbutton_logging;
- GtkWidget *checkbutton_sounds_enabled;
- GtkWidget *checkbutton_sounds_disabled_away;
GtkWidget *treeview_sounds;
-
- GtkWidget *checkbutton_notifications_enabled;
- GtkWidget *checkbutton_notifications_disabled_away;
- GtkWidget *checkbutton_notifications_focus;
- GtkWidget *checkbutton_notifications_contact_signin;
- GtkWidget *checkbutton_notifications_contact_signout;
-
- GtkWidget *echo_cancellation;
-
GtkWidget *treeview_spell_checker;
- GtkWidget *checkbutton_location_publish;
- GtkWidget *checkbutton_location_reduce_accuracy;
- GtkWidget *checkbutton_location_resource_network;
- GtkWidget *checkbutton_location_resource_cell;
- GtkWidget *checkbutton_location_resource_gps;
-
GtkWidget *vbox_chat_theme;
GtkWidget *combobox_chat_theme;
GtkWidget *combobox_chat_theme_variant;
@@ -108,9 +86,11 @@ struct _EmpathyPreferencesPriv {
GSettings *gsettings_sound;
GSettings *gsettings_ui;
GSettings *gsettings_logger;
+ GSettings *gsettings_contacts;
};
-static void preferences_setup_widgets (EmpathyPreferences *preferences);
+static void preferences_setup_widgets (EmpathyPreferences *preferences,
+ GtkBuilder *gui);
static void preferences_languages_setup (EmpathyPreferences *preferences);
static void preferences_languages_add (EmpathyPreferences *preferences);
static void preferences_languages_save (EmpathyPreferences *preferences);
@@ -172,170 +152,144 @@ static SoundEventEntry sound_entries [] = {
{ N_("Account disconnected"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGOUT }
};
-static void
-preferences_setup_widgets (EmpathyPreferences *preferences)
+static gboolean
+sort_criterium_get_mapping (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
-
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
- priv->checkbutton_notifications_enabled,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_DISABLED_AWAY,
- priv->checkbutton_notifications_disabled_away,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_FOCUS,
- priv->checkbutton_notifications_focus,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNIN,
- priv->checkbutton_notifications_contact_signin,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNOUT,
- priv->checkbutton_notifications_contact_signout,
- "active",
- G_SETTINGS_BIND_DEFAULT);
+ const char *s = g_variant_get_string (variant, NULL);
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
- priv->checkbutton_notifications_disabled_away,
- "sensitive",
- G_SETTINGS_BIND_GET);
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
- priv->checkbutton_notifications_focus,
- "sensitive",
- G_SETTINGS_BIND_GET);
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
- priv->checkbutton_notifications_contact_signin,
- "sensitive",
- G_SETTINGS_BIND_GET);
- g_settings_bind (priv->gsettings_notify,
- EMPATHY_PREFS_NOTIFICATIONS_ENABLED,
- priv->checkbutton_notifications_contact_signout,
- "sensitive",
- G_SETTINGS_BIND_GET);
-
- g_settings_bind (priv->gsettings_sound,
- EMPATHY_PREFS_SOUNDS_ENABLED,
- priv->checkbutton_sounds_enabled,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_sound,
- EMPATHY_PREFS_SOUNDS_DISABLED_AWAY,
- priv->checkbutton_sounds_disabled_away,
- "active",
- G_SETTINGS_BIND_DEFAULT);
+ if (!tp_strdiff (s, "state"))
+ g_value_set_boolean (value, TRUE);
+ else if (!tp_strdiff (s, "name"))
+ g_value_set_boolean (value, FALSE);
+ else
+ return FALSE;
- g_settings_bind (priv->gsettings_sound,
- EMPATHY_PREFS_SOUNDS_ENABLED,
- priv->checkbutton_sounds_disabled_away,
- "sensitive",
- G_SETTINGS_BIND_GET);
- g_settings_bind (priv->gsettings_sound,
- EMPATHY_PREFS_SOUNDS_ENABLED,
- priv->treeview_sounds,
- "sensitive",
- G_SETTINGS_BIND_GET);
+ return TRUE;
+}
- g_settings_bind (priv->gsettings_ui,
- EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS,
- priv->radiobutton_chats_new_windows,
- "active",
- G_SETTINGS_BIND_DEFAULT);
+static GVariant *
+sort_criterium_set_mapping (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ gboolean b = g_value_get_boolean (value);
- g_settings_bind (priv->gsettings_ui,
- EMPATHY_PREFS_UI_EVENTS_NOTIFY_AREA,
- priv->checkbutton_events_notif_area,
- "active",
- G_SETTINGS_BIND_DEFAULT);
+ if (b)
+ return g_variant_new_string ("state");
+ else
+ return g_variant_new_string ("name");
+}
- g_settings_bind (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SHOW_SMILEYS,
- priv->checkbutton_show_smileys,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SHOW_CONTACTS_IN_ROOMS,
- priv->checkbutton_show_contacts_in_rooms,
- "active",
+static void
+preferences_setup_widgets (EmpathyPreferences *preferences,
+ GtkBuilder *gui)
+{
+ EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
+#define BIND_ACTIVE(schema, key, widget) \
+ g_settings_bind (priv->gsettings_##schema, EMPATHY_PREFS_##key, \
+ gtk_builder_get_object (gui, widget), "active", \
G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_call,
- EMPATHY_PREFS_CALL_ECHO_CANCELLATION,
- priv->echo_cancellation,
- "active",
- G_SETTINGS_BIND_DEFAULT);
+ BIND_ACTIVE (notify, NOTIFICATIONS_ENABLED,
+ "checkbutton_notifications_enabled");
+ BIND_ACTIVE (notify, NOTIFICATIONS_DISABLED_AWAY,
+ "checkbutton_notifications_disabled_away");
+ BIND_ACTIVE (notify, NOTIFICATIONS_FOCUS,
+ "checkbutton_notifications_focus");
+ BIND_ACTIVE (notify, NOTIFICATIONS_CONTACT_SIGNIN,
+ "checkbutton_notifications_contact_signin");
+ BIND_ACTIVE (notify, NOTIFICATIONS_CONTACT_SIGNOUT,
+ "checkbutton_notifications_contact_signout");
+
+ BIND_ACTIVE (sound, SOUNDS_ENABLED,
+ "checkbutton_sounds_enabled");
+ BIND_ACTIVE (sound, SOUNDS_DISABLED_AWAY,
+ "checkbutton_sounds_disabled_away");
+
+ BIND_ACTIVE (ui, UI_SHOW_OFFLINE,
+ "checkbutton_show_offline");
+ BIND_ACTIVE (ui, UI_SHOW_PROTOCOLS,
+ "checkbutton_show_protocols");
+ BIND_ACTIVE (ui, UI_SEPARATE_CHAT_WINDOWS,
+ "radiobutton_chats_new_windows");
+ BIND_ACTIVE (ui, UI_EVENTS_NOTIFY_AREA,
+ "checkbutton_events_notif_area");
+ BIND_ACTIVE (ui, UI_SHOW_BALANCES,
+ "checkbutton_show_balances");
+
+ BIND_ACTIVE (chat, CHAT_SHOW_SMILEYS,
+ "checkbutton_show_smileys");
+ BIND_ACTIVE (chat, CHAT_SHOW_CONTACTS_IN_ROOMS,
+ "checkbutton_show_contacts_in_rooms");
+
+ BIND_ACTIVE (call, CALL_ECHO_CANCELLATION,
+ "call_echo_cancellation");
+
+ BIND_ACTIVE (loc, LOCATION_PUBLISH,
+ "checkbutton_location_publish");
+ BIND_ACTIVE (loc, LOCATION_RESOURCE_NETWORK,
+ "checkbutton_location_resource_network");
+ BIND_ACTIVE (loc, LOCATION_RESOURCE_CELL,
+ "checkbutton_location_resource_cell");
+ BIND_ACTIVE (loc, LOCATION_RESOURCE_GPS,
+ "checkbutton_location_resource_gps");
+ BIND_ACTIVE (loc, LOCATION_REDUCE_ACCURACY,
+ "checkbutton_location_reduce_accuracy");
+
+ BIND_ACTIVE (logger, LOGGER_ENABLED,
+ "checkbutton_logging");
+
+#undef BIND_ACTIVE
+
+#define BIND_SENSITIVE(schema, key, widget) \
+ g_settings_bind (priv->gsettings_##schema, EMPATHY_PREFS_##key, \
+ gtk_builder_get_object (gui, widget), "sensitive", \
+ G_SETTINGS_BIND_GET);
+ /* N.B. BIND_SENSITIVE() is in addition to the sensitivity setting of
+ * BIND_ACTIVE() */
+ BIND_SENSITIVE (notify, NOTIFICATIONS_ENABLED,
+ "checkbutton_notifications_disabled_away");
+ BIND_SENSITIVE (notify, NOTIFICATIONS_ENABLED,
+ "checkbutton_notifications_focus");
+ BIND_SENSITIVE (notify, NOTIFICATIONS_ENABLED,
+ "checkbutton_notifications_contact_signin");
+ BIND_SENSITIVE (notify, NOTIFICATIONS_ENABLED,
+ "checkbutton_notifications_contact_signout");
+
+ BIND_SENSITIVE (sound, SOUNDS_ENABLED,
+ "checkbutton_sounds_disabled_away");
+ BIND_SENSITIVE (sound, SOUNDS_ENABLED,
+ "treeview_sounds");
+
+ BIND_SENSITIVE (loc, LOCATION_PUBLISH,
+ "checkbutton_location_resource_network");
+ BIND_SENSITIVE (loc, LOCATION_PUBLISH,
+ "checkbutton_location_resource_cell");
+ BIND_SENSITIVE (loc, LOCATION_PUBLISH,
+ "checkbutton_location_resource_gps");
+ BIND_SENSITIVE (loc, LOCATION_PUBLISH,
+ "checkbutton_location_reduce_accuracy");
+
+#undef BIND_SENSITIVE
g_settings_bind (priv->gsettings,
EMPATHY_PREFS_AUTOCONNECT,
- priv->checkbutton_autoconnect,
- "active",
- G_SETTINGS_BIND_DEFAULT);
-
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_PUBLISH,
- priv->checkbutton_location_publish,
+ gtk_builder_get_object (gui,
+ "checkbutton_autoconnect"),
"active",
G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_RESOURCE_NETWORK,
- priv->checkbutton_location_resource_network,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_PUBLISH,
- priv->checkbutton_location_resource_network,
- "sensitive",
- G_SETTINGS_BIND_GET);
-
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_RESOURCE_CELL,
- priv->checkbutton_location_resource_cell,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_PUBLISH,
- priv->checkbutton_location_resource_cell,
- "sensitive",
- G_SETTINGS_BIND_GET);
-
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_RESOURCE_GPS,
- priv->checkbutton_location_resource_gps,
- "active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_PUBLISH,
- priv->checkbutton_location_resource_gps,
- "sensitive",
- G_SETTINGS_BIND_GET);
-
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_REDUCE_ACCURACY,
- priv->checkbutton_location_reduce_accuracy,
+ g_settings_bind_with_mapping (priv->gsettings_contacts,
+ EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
+ gtk_builder_get_object (gui,
+ "radiobutton_sort_by_status"),
"active",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_PUBLISH,
- priv->checkbutton_location_reduce_accuracy,
- "sensitive",
- G_SETTINGS_BIND_GET);
-
- g_settings_bind (priv->gsettings_logger,
- EMPATHY_PREFS_LOGGER_ENABLED,
- priv->checkbutton_logging,
- "active",
- G_SETTINGS_BIND_DEFAULT);
+ G_SETTINGS_BIND_DEFAULT,
+ sort_criterium_get_mapping,
+ sort_criterium_set_mapping,
+ NULL, NULL);
}
static void
@@ -1121,6 +1075,7 @@ empathy_preferences_finalize (GObject *self)
g_object_unref (priv->gsettings_sound);
g_object_unref (priv->gsettings_ui);
g_object_unref (priv->gsettings_logger);
+ g_object_unref (priv->gsettings_contacts);
G_OBJECT_CLASS (empathy_preferences_parent_class)->finalize (self);
}
@@ -1163,40 +1118,20 @@ empathy_preferences_init (EmpathyPreferences *preferences)
filename = empathy_file_lookup ("empathy-preferences.ui", "src");
gui = empathy_builder_get_file (filename,
"notebook", &priv->notebook,
- "checkbutton_show_smileys", &priv->checkbutton_show_smileys,
- "checkbutton_show_contacts_in_rooms", &priv->checkbutton_show_contacts_in_rooms,
"vbox_chat_theme", &priv->vbox_chat_theme,
"combobox_chat_theme", &priv->combobox_chat_theme,
"combobox_chat_theme_variant", &priv->combobox_chat_theme_variant,
"hbox_chat_theme_variant", &priv->hbox_chat_theme_variant,
"sw_chat_theme_preview", &priv->sw_chat_theme_preview,
- "radiobutton_chats_new_windows", &priv->radiobutton_chats_new_windows,
"checkbutton_events_notif_area", &priv->checkbutton_events_notif_area,
- "checkbutton_autoconnect", &priv->checkbutton_autoconnect,
- "checkbutton_logging", &priv->checkbutton_logging,
- "checkbutton_notifications_enabled", &priv->checkbutton_notifications_enabled,
- "checkbutton_notifications_disabled_away", &priv->checkbutton_notifications_disabled_away,
- "checkbutton_notifications_focus", &priv->checkbutton_notifications_focus,
- "checkbutton_notifications_contact_signin", &priv->checkbutton_notifications_contact_signin,
- "checkbutton_notifications_contact_signout", &priv->checkbutton_notifications_contact_signout,
- "checkbutton_sounds_enabled", &priv->checkbutton_sounds_enabled,
- "checkbutton_sounds_disabled_away", &priv->checkbutton_sounds_disabled_away,
"treeview_sounds", &priv->treeview_sounds,
"treeview_spell_checker", &priv->treeview_spell_checker,
- "checkbutton_location_publish", &priv->checkbutton_location_publish,
- "checkbutton_location_reduce_accuracy", &priv->checkbutton_location_reduce_accuracy,
- "checkbutton_location_resource_network", &priv->checkbutton_location_resource_network,
- "checkbutton_location_resource_cell", &priv->checkbutton_location_resource_cell,
- "checkbutton_location_resource_gps", &priv->checkbutton_location_resource_gps,
- "call_echo_cancellation", &priv->echo_cancellation,
NULL);
g_free (filename);
gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (preferences))), priv->notebook);
gtk_widget_show (priv->notebook);
- g_object_unref (gui);
-
priv->gsettings = g_settings_new (EMPATHY_PREFS_SCHEMA);
priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
priv->gsettings_call = g_settings_new (EMPATHY_PREFS_CALL_SCHEMA);
@@ -1205,6 +1140,7 @@ empathy_preferences_init (EmpathyPreferences *preferences)
priv->gsettings_sound = g_settings_new (EMPATHY_PREFS_SOUNDS_SCHEMA);
priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
priv->gsettings_logger = g_settings_new (EMPATHY_PREFS_LOGGER_SCHEMA);
+ priv->gsettings_contacts = g_settings_new (EMPATHY_PREFS_CONTACTS_SCHEMA);
/* Create chat theme preview, and track changes */
priv->theme_manager = empathy_theme_manager_dup_singleton ();
@@ -1215,7 +1151,7 @@ empathy_preferences_init (EmpathyPreferences *preferences)
preferences_themes_setup (preferences);
- preferences_setup_widgets (preferences);
+ preferences_setup_widgets (preferences, gui);
preferences_languages_setup (preferences);
preferences_languages_add (preferences);
@@ -1224,6 +1160,8 @@ empathy_preferences_init (EmpathyPreferences *preferences)
preferences_sound_setup (preferences);
preferences_sound_load (preferences);
+ g_object_unref (gui);
+
if (empathy_spell_supported ()) {
page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), EMPATHY_PREFERENCES_TAB_SPELL);
gtk_widget_show (page);
diff --git a/src/empathy-preferences.ui b/src/empathy-preferences.ui
index f13f6c0b2..a17f00055 100644
--- a/src/empathy-preferences.ui
+++ b/src/empathy-preferences.ui
@@ -1,11 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.16"/>
- <object class="GtkAdjustment" id="call_volume_adjustment">
- <property name="upper">150</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
<object class="GtkNotebook" id="notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -18,53 +13,125 @@
<property name="orientation">vertical</property>
<property name="spacing">18</property>
<child>
- <object class="GtkFrame" id="frame3">
+ <object class="GtkFrame" id="frame6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
- <object class="GtkAlignment" id="alignment11">
+ <object class="GtkAlignment" id="alignment5">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="top_padding">6</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkBox" id="vbox199">
+ <object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
- <object class="GtkCheckButton" id="checkbutton_show_smileys">
- <property name="label" translatable="yes">Show _smileys as images</property>
+ <object class="GtkCheckButton" id="checkbutton_show_offline">
+ <property name="label" translatable="yes">Show offline contacts</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
+ <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="checkbutton_show_contacts_in_rooms">
- <property name="label" translatable="yes">Show contact _list in rooms</property>
+ <object class="GtkCheckButton" id="checkbutton_show_protocols">
+ <property name="label" translatable="yes">Show protocol in avatar</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
+ <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="checkbutton_show_balances">
+ <property name="label" translatable="yes">Show account balances</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Sort contacts by:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="radiobutton_sort_by_status">
+ <property name="label" translatable="yes">status</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="radiobutton_sort_by_name">
+ <property name="label" translatable="yes">name</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">radiobutton_sort_by_status</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
@@ -73,10 +140,11 @@
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="label611">
+ <object class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label" translatable="yes">Appearance</property>
+ <property name="label" translatable="yes">Contact List</property>
+ <property name="use_markup">True</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
@@ -85,24 +153,24 @@
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkFrame" id="frame4">
+ <object class="GtkFrame" id="frame3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
- <object class="GtkAlignment" id="alignment12">
+ <object class="GtkAlignment" id="alignment11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="top_padding">6</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkBox" id="vbox218">
+ <object class="GtkBox" id="vbox199">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
@@ -110,14 +178,16 @@
<object class="GtkBox" id="vbox2180">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">horizontal</property>
<property name="spacing">3</property>
<child>
<object class="GtkLabel" id="label1000">
- <property name="label" translatable="yes">Start chats in:</property>
<property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Start chats in:</property>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
@@ -127,10 +197,15 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
@@ -140,11 +215,15 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
<property name="draw_indicator">True</property>
<property name="group">radiobutton_chats_new_tabs</property>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
@@ -156,24 +235,25 @@
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="checkbutton_events_notif_area">
- <property name="label" translatable="yes">Display incoming events in the notification area</property>
+ <object class="GtkCheckButton" id="checkbutton_show_smileys">
+ <property name="label" translatable="yes">Show _smileys as images</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
+ <property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="checkbutton_autoconnect">
- <property name="label" translatable="yes">_Automatically connect on startup</property>
+ <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>
@@ -196,6 +276,7 @@
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
@@ -210,6 +291,77 @@
</object>
</child>
<child type="label">
+ <object class="GtkLabel" id="label611">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Chat</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkBox" id="vbox218">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkCheckButton" id="checkbutton_events_notif_area">
+ <property name="label" translatable="yes">Display incoming events in the notification area</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="checkbutton_autoconnect">
+ <property name="label" translatable="yes">_Automatically connect on startup</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
<object class="GtkLabel" id="label612">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -223,7 +375,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
@@ -523,7 +675,10 @@
<property name="label" translatable="yes">Use _echo cancellation to improve call quality</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
diff --git a/src/empathy-roster-window-menubar.ui b/src/empathy-roster-window-menubar.ui
index d342abca8..a70b7461e 100644
--- a/src/empathy-roster-window-menubar.ui
+++ b/src/empathy-roster-window-menubar.ui
@@ -1,301 +1,100 @@
<?xml version="1.0"?>
<!--*- mode: xml -*-->
<interface>
- <object class="GtkUIManager" id="ui_manager">
- <child>
- <object class="GtkActionGroup" id="actiongroup1">
- <child>
- <object class="GtkAction" id="chat">
- <property name="name">chat</property>
- <property name="label" translatable="yes">_Chat</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="chat_new_message">
- <property name="icon-name">im-message-new</property>
- <property name="name">chat_new_message</property>
- <property name="label" translatable="yes">_New Conversation…</property>
- </object>
- <accelerator key="N" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="chat_new_call">
- <property name="icon-name">audio-input-microphone</property>
- <property name="name">chat_new_call</property>
- <property name="label" translatable="yes">New _Call…</property>
- </object>
- <accelerator key="M" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="view_history">
- <property name="icon-name">document-open-recent</property>
- <property name="name">view_history</property>
- <property name="label" translatable="yes">_Previous Conversations</property>
- </object>
- <accelerator key="F3" modifiers=""/>
- </child>
- <child>
- <object class="GtkAction" id="chat_add_contact">
- <property name="stock_id">gtk-add</property>
- <property name="name">chat_add_contact</property>
- <property name="label" translatable="yes">_Add Contact…</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="chat_search_contacts">
- <property name="stock_id">gtk-find</property>
- <property name="name">chat_search_contacts</property>
- <property name="label" translatable="yes">_Search for Contacts…</property>
- </object>
- <accelerator key="f" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="view_show_ft_manager">
- <property name="icon-name">document-send</property>
- <property name="name">view_show_ft_manager</property>
- <property name="label" translatable="yes">_File Transfers</property>
- </object>
- </child>
- <child>
- <object class="GtkToggleAction" id="view_show_offline">
- <property name="name">view_show_offline</property>
- <property name="label" translatable="yes">_Offline Contacts</property>
- </object>
- <accelerator key="H" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkToggleAction" id="view_show_protocols">
- <property name="name">view_show_protocols</property>
- <property name="label" translatable="yes">Show P_rotocols</property>
- </object>
- </child>
- <child>
- <object class="GtkToggleAction" id="view_balance_show_in_roster">
- <property name="name">view_balance_show_in_roster</property>
- <property name="label" translatable="yes">Credit Balance</property>
- <property name="visible">False</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="view_show_map">
- <property name="name">view_show_map</property>
- <property name="label" translatable="yes">Contacts on a _Map</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="chat_quit">
- <property name="stock_id">gtk-quit</property>
- <property name="name">chat_quit</property>
- </object>
- <accelerator key="Q" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="edit">
- <property name="name">edit</property>
- <property name="label" translatable="yes">_Edit</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="edit_context">
- <property name="name">edit_context</property>
- <property name="label" translatable="no">Context</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="edit_accounts">
- <property name="name">edit_accounts</property>
- <property name="label" translatable="yes">_Accounts</property>
- </object>
- <accelerator key="F4" modifiers=""/>
- </child>
- <child>
- <object class="GtkAction" id="edit_blocked_contacts">
- <property name="name">edit_blocked_contacts</property>
- <property name="label" translatable="yes">_Blocked Contacts</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="edit_preferences">
- <property name="stock_id">gtk-preferences</property>
- <property name="name">edit_preferences</property>
- <property name="label" translatable="yes">P_references</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="edit_search_contacts">
- <property name="name">edit_search_contacts</property>
- <property name="label" translatable="yes">Find in Contact _List</property>
- </object>
- <accelerator key="f" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="view">
- <property name="name">view</property>
- <property name="label" translatable="yes">_View</property>
- </object>
- </child>
- <child>
- <object class="GtkRadioAction" id="view_sort_by_name">
- <property name="name">view_sort_by_name</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sort by _Name</property>
- <property name="draw_as_radio">True</property>
- <property name="value">1</property>
- <property name="current-value">1</property>
- </object>
- </child>
- <child>
- <object class="GtkRadioAction" id="view_sort_by_status">
- <property name="name">view_sort_by_status</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sort by _Status</property>
- <property name="draw_as_radio">True</property>
- <property name="group">view_sort_by_name</property>
- <property name="value">0</property>
- </object>
- </child>
- <child>
- <object class="GtkRadioAction" id="view_normal_size_with_avatars">
- <property name="name">view_normal_size_with_avatars</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">Normal Size With _Avatars</property>
- <property name="draw_as_radio">True</property>
- <property name="value">0</property>
- <property name="current-value">0</property>
- </object>
- <accelerator key="1" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkRadioAction" id="view_normal_size">
- <property name="name">view_normal_size</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">N_ormal Size</property>
- <property name="draw_as_radio">True</property>
- <property name="group">view_normal_size_with_avatars</property>
- <property name="value">1</property>
- </object>
- <accelerator key="2" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkRadioAction" id="view_compact_size">
- <property name="name">view_compact_size</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Compact Size</property>
- <property name="draw_as_radio">True</property>
- <property name="group">view_normal_size_with_avatars</property>
- <property name="value">2</property>
- </object>
- <accelerator key="3" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="room">
- <property name="name">room</property>
- <property name="label" translatable="yes">_Room</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="room_join_new">
- <property name="name">room_join_new</property>
- <property name="label" translatable="yes">_Join…</property>
- </object>
- <accelerator key="j" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="room_join_favorites">
- <property name="name">room_join_favorites</property>
- <property name="label" translatable="yes">Join _Favorites</property>
- </object>
- <accelerator key="F5" modifiers=""/>
- </child>
- <child>
- <object class="GtkAction" id="room_manage_favorites">
- <property name="icon-name">system-users</property>
- <property name="name">room_manage_favorites</property>
- <property name="label" translatable="yes">Manage Favorites</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="help">
- <property name="name">help</property>
- <property name="label" translatable="yes">_Help</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="help_contents">
- <property name="stock_id">gtk-help</property>
- <property name="name">help_contents</property>
- <property name="label" translatable="yes">_Contents</property>
- </object>
- <accelerator key="F1" modifiers=""/>
- </child>
- <child>
- <object class="GtkAction" id="help_debug">
- <property name="name">help_debug</property>
- <property name="label" translatable="yes">_Debug</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="help_about">
- <property name="stock_id">gtk-about</property>
- <property name="name">help_about</property>
- </object>
- </child>
- </object>
- </child>
- <ui>
- <menubar name="menubar">
- <menu action="chat">
- <menuitem action="chat_new_message"/>
- <menuitem action="chat_new_call"/>
- <separator/>
- <menuitem action="chat_add_contact"/>
- <menuitem action="chat_search_contacts"/>
- <separator/>
- <menuitem action="chat_quit"/>
- </menu>
- <menu action="edit">
- <menuitem action="edit_context"/>
- <separator name="edit_context_separator"/>
- <menuitem action="edit_accounts"/>
- <menuitem action="edit_search_contacts"/>
- <menuitem action="edit_blocked_contacts"/>
- <separator/>
- <menuitem action="edit_preferences"/>
- </menu>
- <menu action="view">
- <menuitem action="view_show_offline"/>
- <menuitem action="view_show_protocols"/>
- <separator/>
- <menuitem action="view_balance_show_in_roster"/>
- <placeholder name="view_balance_placeholder"/>
- <separator/>
- <menuitem action="view_sort_by_name"/>
- <menuitem action="view_sort_by_status"/>
- <separator/>
- <menuitem action="view_normal_size_with_avatars"/>
- <menuitem action="view_normal_size"/>
- <menuitem action="view_compact_size"/>
- <separator/>
- <menuitem action="view_history"/>
- <menuitem action="view_show_ft_manager"/>
- <menuitem action="view_show_map"/>
- </menu>
- <menu action="room">
- <menuitem action="room_join_new"/>
- <menuitem action="room_join_favorites"/>
- <separator/>
- <separator name="room_separator"/>
- <menuitem action="room_manage_favorites"/>
- </menu>
- <menu action="help">
- <menuitem action="help_contents"/>
- <menuitem action="help_debug"/>
- <menuitem action="help_about"/>
- </menu>
- </menubar>
- </ui>
- </object>
- <object class="GtkMenuBar" constructor="ui_manager" id="menubar">
- <property name="visible">True</property>
- </object>
+ <menu id="appmenu">
+ <section>
+ <item>
+ <attribute translatable="yes" name="label">_New Conversation...</attribute>
+ <attribute name="action">win.chat_new_message</attribute>
+ <attribute name="accel">&lt;Primary&gt;n</attribute>
+ </item>
+ <item>
+ <attribute translatable="yes" name="label">New _Call...</attribute>
+ <attribute name="action">win.chat_new_call</attribute>
+ <attribute name="accel">&lt;Primary&gt;m</attribute>
+ </item>
+ </section>
+ <submenu>
+ <attribute translatable="yes" name="label">Contacts</attribute>
+ <section>
+ <item>
+ <attribute translatable="yes" name="label">_Add Contacts...</attribute>
+ <attribute name="action">win.chat_add_contact</attribute>
+ </item>
+ <item>
+ <attribute translatable="yes" name="label">_Search for Contacts...</attribute>
+ <attribute name="action">win.chat_search_contacts</attribute>
+ <attribute name="accel">&lt;Shift&gt;f</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute translatable="yes" name="label">_Blocked Contacts</attribute>
+ <attribute name="action">win.edit_blocked_contacts</attribute>
+ </item>
+ </section>
+ </submenu>
+ <submenu>
+ <attribute translatable="yes" name="label">_Rooms</attribute>
+ <section>
+ <item>
+ <attribute translatable="yes" name="label">_Join...</attribute>
+ <attribute name="action">win.room_join_new</attribute>
+ <attribute name="accel">&lt;Primary&gt;j</attribute>
+ </item>
+ <item>
+ <attribute translatable="yes" name="label">Join _Favorites</attribute>
+ <attribute name="action">win.room_join_favorites</attribute>
+ <attribute name="accel">F5</attribute>
+ </item>
+ </section>
+ <item>
+ <link name="section" id="rooms"/>
+ </item>
+ <section>
+ <item>
+ <attribute translatable="yes" name="label">_Manage Favorites</attribute>
+ <attribute name="action">win.room_manage_favorites</attribute>
+ </item>
+ </section>
+ </submenu>
+ <section>
+ <item>
+ <attribute translatable="yes" name="label">_Previous Conversations</attribute>
+ <attribute name="action">win.view_history</attribute>
+ <attribute name="accel">F3</attribute>
+ </item>
+ <item>
+ <attribute translatable="yes" name="label">_File Transfers</attribute>
+ <attribute name="action">win.view_show_ft_manager</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute translatable="yes" name="label">_Accounts</attribute>
+ <attribute name="action">win.edit_accounts</attribute>
+ <attribute name="accel">F4</attribute>
+ </item>
+ <item>
+ <attribute translatable="yes" name="label">P_references</attribute>
+ <attribute name="action">win.edit_preferences</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute translatable="yes" name="label">Help</attribute>
+ <attribute name="action">win.help_contents</attribute>
+ <attribute name="accel">F1</attribute>
+ </item>
+ <item>
+ <attribute translatable="yes" name="label">About Empathy</attribute>
+ <attribute name="action">win.help_about</attribute>
+ </item>
+ <item>
+ <attribute translatable="yes" name="label">_Quit</attribute>
+ <attribute name="action">win.chat_quit</attribute>
+ <attribute name="accel">&lt;Primary&gt;q</attribute>
+ </item>
+ </section>
+ </menu>
</interface>
diff --git a/src/empathy-roster-window.c b/src/empathy-roster-window.c
index 203a5aede..afe3a4e60 100644
--- a/src/empathy-roster-window.c
+++ b/src/empathy-roster-window.c
@@ -37,12 +37,10 @@
#include <libempathy/empathy-request-util.h>
#include <libempathy/empathy-chatroom-manager.h>
#include <libempathy/empathy-chatroom.h>
-#include <libempathy/empathy-contact-list.h>
#include <libempathy/empathy-gsettings.h>
#include <libempathy/empathy-individual-manager.h>
#include <libempathy/empathy-gsettings.h>
#include <libempathy/empathy-status-presets.h>
-#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy-gtk/empathy-contact-dialogs.h>
#include <libempathy-gtk/empathy-live-search.h>
@@ -69,7 +67,6 @@
#include "empathy-about-dialog.h"
#include "empathy-debug-window.h"
#include "empathy-new-chatroom-dialog.h"
-#include "empathy-map-view.h"
#include "empathy-chatrooms-window.h"
#include "empathy-event-manager.h"
#include "empathy-ft-manager.h"
@@ -101,7 +98,7 @@ enum
PROP_SHELL_RUNNING
};
-G_DEFINE_TYPE (EmpathyRosterWindow, empathy_roster_window, GTK_TYPE_WINDOW);
+G_DEFINE_TYPE (EmpathyRosterWindow, empathy_roster_window, GTK_TYPE_APPLICATION_WINDOW)
struct _EmpathyRosterWindowPriv {
EmpathyIndividualStore *individual_store;
@@ -122,7 +119,6 @@ struct _EmpathyRosterWindowPriv {
GtkWidget *preferences;
GtkWidget *main_vbox;
GtkWidget *throbber;
- GtkWidget *throbber_tool_item;
GtkWidget *presence_toolbar;
GtkWidget *presence_chooser;
GtkWidget *errors_vbox;
@@ -133,23 +129,9 @@ struct _EmpathyRosterWindowPriv {
GtkWidget *button_account_settings;
GtkWidget *spinner_loading;
- GtkToggleAction *show_protocols;
- GtkRadioAction *sort_by_name;
- GtkRadioAction *sort_by_status;
- GtkRadioAction *normal_with_avatars;
- GtkRadioAction *normal_size;
- GtkRadioAction *compact_size;
-
- GtkUIManager *ui_manager;
- GtkAction *view_history;
- GtkAction *room_join_favorites;
- GtkWidget *room_menu;
- GtkWidget *room_separator;
- GtkWidget *edit_context;
- GtkWidget *edit_context_separator;
-
- GtkActionGroup *balance_action_group;
- GtkAction *view_balance_show_in_roster;
+ GMenu *menumodel;
+ GMenu *rooms_section;
+
GtkWidget *balance_vbox;
guint size_timeout_id;
@@ -1014,7 +996,7 @@ static void
roster_window_update_status (EmpathyRosterWindow *self)
{
gboolean connected, connecting;
- GList *l, *children;
+ GList *l;
connected = empathy_account_manager_get_accounts_connected (&connecting);
@@ -1022,70 +1004,33 @@ roster_window_update_status (EmpathyRosterWindow *self)
if (connecting)
{
gtk_spinner_start (GTK_SPINNER (self->priv->throbber));
- gtk_widget_show (self->priv->throbber_tool_item);
+ gtk_widget_show (self->priv->throbber);
}
else
{
gtk_spinner_stop (GTK_SPINNER (self->priv->throbber));
- gtk_widget_hide (self->priv->throbber_tool_item);
+ gtk_widget_hide (self->priv->throbber);
}
/* Update widgets sensibility */
for (l = self->priv->actions_connected; l; l = l->next)
- gtk_action_set_sensitive (l->data, connected);
-
- /* Update favourite rooms sensitivity */
- children = gtk_container_get_children (GTK_CONTAINER (self->priv->room_menu));
- for (l = children; l != NULL; l = l->next)
- {
- if (g_object_get_data (G_OBJECT (l->data), "is_favorite") != NULL)
- gtk_widget_set_sensitive (GTK_WIDGET (l->data), connected);
- }
-
- g_list_free (children);
-}
-
-static char *
-roster_window_account_to_action_name (TpAccount *account)
-{
- char *r;
-
- /* action names can't have '/' in them, replace it with '.' */
- r = g_strdup (tp_account_get_path_suffix (account));
- r = g_strdelimit (r, "/", '.');
-
- return r;
-}
-
-static void
-roster_window_balance_activate_cb (GtkAction *action,
- EmpathyRosterWindow *self)
-{
- const char *uri;
-
- uri = g_object_get_data (G_OBJECT (action), "manage-credit-uri");
-
- if (!tp_str_empty (uri))
- {
- DEBUG ("Top-up credit URI: %s", uri);
- empathy_url_show (GTK_WIDGET (self), uri);
- }
- else
- {
- DEBUG ("unknown protocol for top-up");
- }
+ g_simple_action_set_enabled (l->data, connected);
}
static void
-roster_window_balance_update_balance (GtkAction *action,
- TpConnection *conn)
+roster_window_balance_update_balance (EmpathyRosterWindow *self,
+ TpAccount *account)
{
- TpAccount *account = tp_connection_get_account (conn);
+ TpConnection *conn;
GtkWidget *label;
int amount = 0;
guint scale = G_MAXINT32;
const gchar *currency = "";
- char *money, *str;
+ char *money;
+
+ conn = tp_account_get_connection (account);
+ if (conn == NULL)
+ return;
if (!tp_connection_get_balance (conn, &amount, &scale, &currency))
return;
@@ -1105,16 +1050,8 @@ roster_window_balance_update_balance (GtkAction *action,
g_free (tmp);
}
- /* Translators: this string will be something like:
- * Top up My Account ($1.23)..." */
- str = g_strdup_printf (_("Top up %s (%s)..."),
- tp_account_get_display_name (account), money);
-
- gtk_action_set_label (action, str);
- g_free (str);
-
/* update the money label in the roster */
- label = g_object_get_data (G_OBJECT (action), "money-label");
+ label = g_object_get_data (G_OBJECT (account), "balance-money-label");
gtk_label_set_text (GTK_LABEL (label), money);
g_free (money);
@@ -1125,95 +1062,48 @@ roster_window_balance_changed_cb (TpConnection *conn,
guint balance,
guint scale,
const gchar *currency,
- GtkAction *action)
+ EmpathyRosterWindow *self)
{
- roster_window_balance_update_balance (action, conn);
+ TpAccount *account;
+
+ account = tp_connection_get_account (conn);
+ if (account == NULL)
+ return;
+
+ roster_window_balance_update_balance (self, account);
}
-static GtkAction *
-roster_window_setup_balance_create_action (EmpathyRosterWindow *self,
+static void
+roster_window_setup_balance (EmpathyRosterWindow *self,
TpAccount *account)
{
- GtkAction *action;
- char *name, *ui;
- guint merge_id;
- GError *error = NULL;
-
- /* create the action group if required */
- if (self->priv->balance_action_group == NULL)
- {
- self->priv->balance_action_group =
- gtk_action_group_new ("balance-action-group");
-
- gtk_ui_manager_insert_action_group (self->priv->ui_manager,
- self->priv->balance_action_group, -1);
- }
-
- /* create the action */
- name = roster_window_account_to_action_name (account);
- action = gtk_action_new (name,
- tp_account_get_display_name (account),
- _("Top up account credit"), NULL);
-
- g_object_bind_property (account, "icon-name", action, "icon-name",
- G_BINDING_SYNC_CREATE);
-
- g_signal_connect (action, "activate",
- G_CALLBACK (roster_window_balance_activate_cb), self);
-
- gtk_action_group_add_action (self->priv->balance_action_group, action);
- g_object_unref (action);
-
- ui = g_strdup_printf (
- "<ui>"
- " <menubar name='menubar'>"
- " <menu action='view'>"
- " <placeholder name='view_balance_placeholder'>"
- " <menuitem action='%s'/>"
- " </placeholder>"
- " </menu>"
- " </menubar>"
- "</ui>",
- name);
-
- merge_id = gtk_ui_manager_add_ui_from_string (self->priv->ui_manager,
- ui, -1, &error);
-
- if (error != NULL)
- {
- DEBUG ("Failed to add balance UI for %s: %s",
- tp_account_get_display_name (account),
- error->message);
- g_error_free (error);
- }
-
- g_object_set_data (G_OBJECT (action),
- "merge-id", GUINT_TO_POINTER (merge_id));
+ TpConnection *conn = tp_account_get_connection (account);
+ GtkWidget *hbox, *image, *label;
+ const gchar *uri;
- g_free (name);
- g_free (ui);
+ if (conn == NULL)
+ return;
- return action;
-}
+ if (!tp_proxy_is_prepared (conn, TP_CONNECTION_FEATURE_BALANCE))
+ return;
-static GtkWidget *
-roster_window_setup_balance_create_widget (EmpathyRosterWindow *self,
- GtkAction *action,
- TpAccount *account)
-{
- GtkWidget *hbox, *image, *label, *button;
+ DEBUG ("Setting up balance for acct: %s",
+ tp_account_get_display_name (account));
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ /* create the display widget */
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 3);
/* protocol icon */
image = gtk_image_new ();
gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0);
- g_object_bind_property (action, "icon-name", image, "icon-name",
+ g_object_bind_property (account, "icon-name", image, "icon-name",
G_BINDING_SYNC_CREATE);
/* account name label */
label = gtk_label_new ("");
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
g_object_bind_property (account, "display-name", label, "label",
G_BINDING_SYNC_CREATE);
@@ -1222,105 +1112,53 @@ roster_window_setup_balance_create_widget (EmpathyRosterWindow *self,
label = gtk_label_new ("");
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
- g_object_set_data (G_OBJECT (action), "money-label", label);
/* top up button */
- button = gtk_button_new_with_label (_("Top Up..."));
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0);
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (gtk_action_activate), action);
+ uri = tp_connection_get_balance_uri (conn);
+
+ if (!tp_str_empty (uri))
+ {
+ GtkWidget *button;
+
+ button = gtk_button_new ();
+ gtk_container_add (GTK_CONTAINER (button),
+ gtk_image_new_from_icon_name ("emblem-symbolic-link",
+ GTK_ICON_SIZE_SMALL_TOOLBAR));
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text (button, _("Top up account"));
+ gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0);
+
+ g_signal_connect_data (button, "clicked",
+ G_CALLBACK (empathy_url_show),
+ g_strdup (uri), (GClosureNotify) g_free,
+ 0);
+ }
gtk_box_pack_start (GTK_BOX (self->priv->balance_vbox), hbox, FALSE, TRUE, 0);
gtk_widget_show_all (hbox);
- /* tie the lifetime of the widget to the lifetime of the action */
- g_object_weak_ref (G_OBJECT (action),
- (GWeakNotify) gtk_widget_destroy, hbox);
+ g_object_set_data (G_OBJECT (account), "balance-money-label", label);
+ g_object_set_data (G_OBJECT (account), "balance-money-hbox", hbox);
- return hbox;
-}
-
-static void
-roster_window_setup_balance (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- TpConnection *conn = tp_account_get_connection (account);
- GtkAction *action;
- const gchar *uri;
-
- if (conn == NULL)
- return;
-
- if (!tp_proxy_is_prepared (conn, TP_CONNECTION_FEATURE_BALANCE))
- return;
-
- DEBUG ("Setting up balance for acct: %s",
- tp_account_get_display_name (account));
-
- /* create the action */
- action = roster_window_setup_balance_create_action (self, account);
-
- if (action == NULL)
- return;
-
- gtk_action_set_visible (self->priv->view_balance_show_in_roster, TRUE);
-
- /* create the display widget */
- roster_window_setup_balance_create_widget (self, action, account);
-
- /* check the current balance and monitor for any changes */
- uri = tp_connection_get_balance_uri (conn);
-
- g_object_set_data_full (G_OBJECT (action), "manage-credit-uri",
- g_strdup (uri), g_free);
- gtk_action_set_sensitive (GTK_ACTION (action), !tp_str_empty (uri));
-
- roster_window_balance_update_balance (GTK_ACTION (action), conn);
+ roster_window_balance_update_balance (self, account);
g_signal_connect (conn, "balance-changed",
- G_CALLBACK (roster_window_balance_changed_cb), action);
+ G_CALLBACK (roster_window_balance_changed_cb), self);
}
static void
roster_window_remove_balance_action (EmpathyRosterWindow *self,
TpAccount *account)
{
- GtkAction *action;
- char *name;
- GList *a;
+ GtkWidget *hbox =
+ g_object_get_data (G_OBJECT (account), "balance-money-hbox");
- if (self->priv->balance_action_group == NULL)
+ if (hbox == NULL)
return;
- name = roster_window_account_to_action_name (account);
+ g_return_if_fail (GTK_IS_BOX (hbox));
- action = gtk_action_group_get_action (
- self->priv->balance_action_group, name);
-
- if (action != NULL)
- {
- guint merge_id;
-
- DEBUG ("Removing action");
-
- merge_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (action),
- "merge-id"));
-
- gtk_ui_manager_remove_ui (self->priv->ui_manager,
- merge_id);
- gtk_action_group_remove_action (
- self->priv->balance_action_group, action);
- }
-
- g_free (name);
-
- a = gtk_action_group_list_actions (
- self->priv->balance_action_group);
-
- gtk_action_set_visible (self->priv->view_balance_show_in_roster,
- g_list_length (a) > 0);
-
- g_list_free (a);
+ gtk_widget_destroy (hbox);
}
static void
@@ -1421,13 +1259,15 @@ empathy_roster_window_finalize (GObject *window)
g_object_unref (self->priv->call_observer);
g_object_unref (self->priv->event_manager);
- g_object_unref (self->priv->ui_manager);
g_object_unref (self->priv->chatroom_manager);
g_object_unref (self->priv->gsettings_ui);
g_object_unref (self->priv->gsettings_contacts);
g_object_unref (self->priv->individual_manager);
+ g_object_unref (self->priv->menumodel);
+ g_object_unref (self->priv->rooms_section);
+
G_OBJECT_CLASS (empathy_roster_window_parent_class)->finalize (window);
}
@@ -1445,240 +1285,88 @@ roster_window_key_press_event_cb (GtkWidget *window,
}
static void
-roster_window_chat_quit_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_chat_quit_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
gtk_widget_destroy (GTK_WIDGET (self));
}
static void
-roster_window_view_history_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_view_history_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
empathy_log_window_show (NULL, NULL, FALSE, GTK_WINDOW (self));
}
static void
-roster_window_chat_new_message_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_chat_new_message_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
empathy_new_message_dialog_show (GTK_WINDOW (self));
}
static void
-roster_window_chat_new_call_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_chat_new_call_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
empathy_new_call_dialog_show (GTK_WINDOW (self));
}
static void
-roster_window_chat_add_contact_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_chat_add_contact_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
empathy_new_individual_dialog_show (GTK_WINDOW (self));
}
static void
-roster_window_chat_search_contacts_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_chat_search_contacts_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GtkWidget *dialog = empathy_contact_search_dialog_new (
+ EmpathyRosterWindow *self = user_data;
+ GtkWidget *dialog;
+
+ dialog = empathy_contact_search_dialog_new (
GTK_WINDOW (self));
gtk_widget_show (dialog);
}
static void
-roster_window_view_show_ft_manager (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_view_show_ft_manager (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
empathy_ft_manager_show ();
}
static void
-roster_window_view_show_offline_cb (GtkToggleAction *action,
- EmpathyRosterWindow *self)
-{
- gboolean current;
-
- current = gtk_toggle_action_get_active (action);
- g_settings_set_boolean (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_OFFLINE,
- current);
-
- empathy_individual_view_set_show_offline (self->priv->individual_view,
- current);
-}
-
-static void
-roster_window_notify_sort_contact_cb (GSettings *gsettings,
- const gchar *key,
- EmpathyRosterWindow *self)
-{
- gchar *str;
-
- str = g_settings_get_string (gsettings, key);
-
- if (str != NULL)
- {
- GType type;
- GEnumClass *enum_class;
- GEnumValue *enum_value;
-
- type = empathy_individual_store_sort_get_type ();
- enum_class = G_ENUM_CLASS (g_type_class_peek (type));
- enum_value = g_enum_get_value_by_nick (enum_class, str);
- if (enum_value)
- {
- /* By changing the value of the GtkRadioAction,
- it emits a signal that calls roster_window_view_sort_contacts_cb
- which updates the contacts list */
- gtk_radio_action_set_current_value (self->priv->sort_by_name,
- enum_value->value);
- }
- else
- {
- g_warning ("Wrong value for sort_criterium configuration : %s", str);
- }
- g_free (str);
- }
-}
-
-static void
-roster_window_view_sort_contacts_cb (GtkRadioAction *action,
- GtkRadioAction *current,
- EmpathyRosterWindow *self)
-{
- EmpathyIndividualStoreSort value;
- GSList *group;
- GType type;
- GEnumClass *enum_class;
- GEnumValue *enum_value;
-
- value = gtk_radio_action_get_current_value (action);
- group = gtk_radio_action_get_group (action);
-
- /* Get string from index */
- type = empathy_individual_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, current));
-
- if (!enum_value)
- g_warning ("No GEnumValue for EmpathyContactListSort with GtkRadioAction index:%d",
- g_slist_index (group, action));
- else
- g_settings_set_string (self->priv->gsettings_contacts,
- EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
- enum_value->value_nick);
-
- empathy_individual_store_set_sort_criterium (self->priv->individual_store,
- value);
-}
-
-static void
-roster_window_view_show_protocols_cb (GtkToggleAction *action,
- EmpathyRosterWindow *self)
-{
- gboolean value;
-
- value = gtk_toggle_action_get_active (action);
-
- g_settings_set_boolean (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_PROTOCOLS,
- value);
-
- empathy_individual_store_set_show_protocols (self->priv->individual_store,
- value);
-}
-
-/* Matches GtkRadioAction values set in empathy-roster-window.ui */
-#define CONTACT_LIST_NORMAL_SIZE_WITH_AVATARS 0
-#define CONTACT_LIST_NORMAL_SIZE 1
-#define CONTACT_LIST_COMPACT_SIZE 2
-
-static void
-roster_window_view_contacts_list_size_cb (GtkRadioAction *action,
- GtkRadioAction *current,
- EmpathyRosterWindow *self)
-{
- GSettings *gsettings_ui;
- gint value;
-
- value = gtk_radio_action_get_current_value (action);
- /* create a new GSettings, so we can delay the setting until both
- * values are set */
- gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
-
- DEBUG ("radio button toggled, value = %i", value);
-
- g_settings_delay (gsettings_ui);
- g_settings_set_boolean (gsettings_ui, EMPATHY_PREFS_UI_SHOW_AVATARS,
- value == CONTACT_LIST_NORMAL_SIZE_WITH_AVATARS);
-
- g_settings_set_boolean (gsettings_ui, EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
- value == CONTACT_LIST_COMPACT_SIZE);
- g_settings_apply (gsettings_ui);
-
- /* FIXME: these enums probably have the wrong namespace */
- empathy_individual_store_set_show_avatars (self->priv->individual_store,
- value == CONTACT_LIST_NORMAL_SIZE_WITH_AVATARS);
- empathy_individual_store_set_is_compact (self->priv->individual_store,
- value == CONTACT_LIST_COMPACT_SIZE);
-
- g_object_unref (gsettings_ui);
-}
-
-static void roster_window_notify_show_protocols_cb (GSettings *gsettings,
- const gchar *key,
- EmpathyRosterWindow *self)
-{
- gtk_toggle_action_set_active (self->priv->show_protocols,
- g_settings_get_boolean (gsettings, EMPATHY_PREFS_UI_SHOW_PROTOCOLS));
-}
-
-
-static void
-roster_window_notify_contact_list_size_cb (GSettings *gsettings,
- const gchar *key,
- EmpathyRosterWindow *self)
+roster_window_edit_search_contacts_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- gint value;
-
- if (g_settings_get_boolean (gsettings,
- EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST))
- value = CONTACT_LIST_COMPACT_SIZE;
- else if (g_settings_get_boolean (gsettings,
- EMPATHY_PREFS_UI_SHOW_AVATARS))
- value = CONTACT_LIST_NORMAL_SIZE_WITH_AVATARS;
- else
- value = CONTACT_LIST_NORMAL_SIZE;
-
- DEBUG ("setting changed, value = %i", value);
-
- /* By changing the value of the GtkRadioAction,
- it emits a signal that calls roster_window_view_contacts_list_size_cb
- which updates the contacts list */
- gtk_radio_action_set_current_value (self->priv->normal_with_avatars, value);
-}
+ EmpathyRosterWindow *self = user_data;
-static void
-roster_window_edit_search_contacts_cb (GtkCheckMenuItem *item,
- EmpathyRosterWindow *self)
-{
empathy_individual_view_start_search (self->priv->individual_view);
}
static void
-roster_window_view_show_map_cb (GtkCheckMenuItem *item,
- EmpathyRosterWindow *self)
-{
-#ifdef HAVE_LIBCHAMPLAIN
- empathy_map_view_show ();
-#endif
-}
-
-static void
join_chatroom (EmpathyChatroom *chatroom,
gint64 timestamp)
{
@@ -1799,41 +1487,55 @@ roster_window_favorite_chatroom_join (EmpathyChatroom *chatroom)
}
static void
-roster_window_favorite_chatroom_menu_activate_cb (GtkMenuItem *menu_item,
+roster_window_favorite_chatroom_menu_activate_cb (GAction *action,
+ GVariant *parameter,
EmpathyChatroom *chatroom)
{
roster_window_favorite_chatroom_join (chatroom);
}
+static gchar *
+dup_join_action_name (EmpathyChatroom *chatroom,
+ gboolean prefix)
+{
+ return g_strconcat (prefix ? "win." : "", "join-",
+ empathy_chatroom_get_name (chatroom), NULL);
+}
+
static void
roster_window_favorite_chatroom_menu_add (EmpathyRosterWindow *self,
EmpathyChatroom *chatroom)
{
- GtkWidget *menu_item;
+ GMenuItem *item;
const gchar *name, *account_name;
- gchar *label;
-
- if (g_object_get_data (G_OBJECT (chatroom), "menu_item"))
- return;
+ gchar *label, *action_name;
+ GAction *action;
name = empathy_chatroom_get_name (chatroom);
account_name = tp_account_get_display_name (
empathy_chatroom_get_account (chatroom));
+
label = g_strdup_printf ("%s (%s)", name, account_name);
- menu_item = gtk_menu_item_new_with_label (label);
- g_free (label);
- g_object_set_data (G_OBJECT (menu_item), "is_favorite",
- GUINT_TO_POINTER (TRUE));
+ action_name = dup_join_action_name (chatroom, FALSE);
- g_object_set_data (G_OBJECT (chatroom), "menu_item", menu_item);
- g_signal_connect (menu_item, "activate",
+ action = (GAction *) g_simple_action_new (action_name, NULL);
+ g_free (action_name);
+
+ g_signal_connect (action, "activate",
G_CALLBACK (roster_window_favorite_chatroom_menu_activate_cb),
chatroom);
- gtk_menu_shell_insert (GTK_MENU_SHELL (self->priv->room_menu),
- menu_item, 4);
+ g_action_map_add_action (G_ACTION_MAP (self), action);
+
+ action_name = dup_join_action_name (chatroom, TRUE);
- gtk_widget_show (menu_item);
+ item = g_menu_item_new (label, action_name);
+ g_menu_item_set_attribute (item, "room-name", "s", name);
+ g_menu_append_item (self->priv->rooms_section, item);
+
+ g_free (label);
+ g_free (action_name);
+ g_object_unref (action);
}
static void
@@ -1842,8 +1544,6 @@ roster_window_favorite_chatroom_menu_added_cb (EmpathyChatroomManager *manager,
EmpathyRosterWindow *self)
{
roster_window_favorite_chatroom_menu_add (self, chatroom);
- gtk_widget_show (self->priv->room_separator);
- gtk_action_set_sensitive (self->priv->room_join_favorites, TRUE);
}
static void
@@ -1852,21 +1552,32 @@ roster_window_favorite_chatroom_menu_removed_cb (
EmpathyChatroom *chatroom,
EmpathyRosterWindow *self)
{
- GtkWidget *menu_item;
GList *chatrooms;
+ gchar *act;
+ gint i;
- menu_item = g_object_get_data (G_OBJECT (chatroom), "menu_item");
- g_object_set_data (G_OBJECT (chatroom), "menu_item", NULL);
- gtk_widget_destroy (menu_item);
+ act = dup_join_action_name (chatroom, TRUE);
- chatrooms = empathy_chatroom_manager_get_chatrooms (self->priv->chatroom_manager,
- NULL);
- if (chatrooms)
- gtk_widget_show (self->priv->room_separator);
- else
- gtk_widget_hide (self->priv->room_separator);
+ g_action_map_remove_action (G_ACTION_MAP (self), act);
+
+ for (i = 0; i < g_menu_model_get_n_items (
+ G_MENU_MODEL (self->priv->rooms_section)); i++)
+ {
+ const gchar *name;
+
+ if (g_menu_model_get_item_attribute (
+ G_MENU_MODEL (self->priv->rooms_section), i, "room-name",
+ "s", &name)
+ && !tp_strdiff (name, empathy_chatroom_get_name (chatroom)))
+ {
+ g_menu_remove (self->priv->rooms_section, i);
+ break;
+ }
+ }
+
+ chatrooms = empathy_chatroom_manager_get_chatrooms (
+ self->priv->chatroom_manager, NULL);
- gtk_action_set_sensitive (self->priv->room_join_favorites, chatrooms != NULL);
g_list_free (chatrooms);
}
@@ -1874,25 +1585,15 @@ static void
roster_window_favorite_chatroom_menu_setup (EmpathyRosterWindow *self)
{
GList *chatrooms, *l;
- GtkWidget *room;
self->priv->chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
+
chatrooms = empathy_chatroom_manager_get_chatrooms (
self->priv->chatroom_manager, NULL);
- room = gtk_ui_manager_get_widget (self->priv->ui_manager,
- "/menubar/room");
- self->priv->room_menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (room));
- self->priv->room_separator = gtk_ui_manager_get_widget (self->priv->ui_manager,
- "/menubar/room/room_separator");
for (l = chatrooms; l; l = l->next)
roster_window_favorite_chatroom_menu_add (self, l->data);
- if (!chatrooms)
- gtk_widget_hide (self->priv->room_separator);
-
- gtk_action_set_sensitive (self->priv->room_join_favorites, chatrooms != NULL);
-
g_signal_connect (self->priv->chatroom_manager, "chatroom-added",
G_CALLBACK (roster_window_favorite_chatroom_menu_added_cb),
self);
@@ -1905,16 +1606,21 @@ roster_window_favorite_chatroom_menu_setup (EmpathyRosterWindow *self)
}
static void
-roster_window_room_join_new_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_room_join_new_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
empathy_new_chatroom_dialog_show (GTK_WINDOW (self));
}
static void
-roster_window_room_join_favorites_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_room_join_favorites_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
GList *chatrooms, *l;
chatrooms = empathy_chatroom_manager_get_chatrooms (self->priv->chatroom_manager,
@@ -1927,74 +1633,30 @@ roster_window_room_join_favorites_cb (GtkAction *action,
}
static void
-roster_window_room_manage_favorites_cb (GtkAction *action,
- EmpathyRosterWindow *self)
-{
- empathy_chatrooms_window_show (GTK_WINDOW (self));
-}
-
-static void
-roster_window_edit_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_room_manage_favorites_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GtkWidget *submenu;
-
- /* FIXME: It should use the UIManager to merge the contact/group submenu */
- submenu = empathy_individual_view_get_individual_menu (
- self->priv->individual_view);
- if (submenu)
- {
- GtkMenuItem *item;
- GtkWidget *label;
-
- item = GTK_MENU_ITEM (self->priv->edit_context);
- label = gtk_bin_get_child (GTK_BIN (item));
- gtk_label_set_text (GTK_LABEL (label), _("Contact"));
-
- gtk_widget_show (self->priv->edit_context);
- gtk_widget_show (self->priv->edit_context_separator);
-
- gtk_menu_item_set_submenu (item, submenu);
-
- return;
- }
-
- submenu = empathy_individual_view_get_group_menu (self->priv->individual_view);
- if (submenu)
- {
- GtkMenuItem *item;
- GtkWidget *label;
-
- item = GTK_MENU_ITEM (self->priv->edit_context);
- label = gtk_bin_get_child (GTK_BIN (item));
- gtk_label_set_text (GTK_LABEL (label), _("Group"));
-
- gtk_widget_show (self->priv->edit_context);
- gtk_widget_show (self->priv->edit_context_separator);
-
- gtk_menu_item_set_submenu (item, submenu);
-
- return;
- }
-
- gtk_widget_hide (self->priv->edit_context);
- gtk_widget_hide (self->priv->edit_context_separator);
+ EmpathyRosterWindow *self = user_data;
- return;
+ empathy_chatrooms_window_show (GTK_WINDOW (self));
}
static void
-roster_window_edit_accounts_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_edit_accounts_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
empathy_accounts_dialog_show_application (gdk_screen_get_default (),
NULL, FALSE, FALSE);
}
static void
-roster_window_edit_blocked_contacts_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_edit_blocked_contacts_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
GtkWidget *dialog;
dialog = empathy_contact_blocking_dialog_new (GTK_WINDOW (self));
@@ -2028,30 +1690,40 @@ empathy_roster_window_show_preferences (EmpathyRosterWindow *self,
}
static void
-roster_window_edit_preferences_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_edit_preferences_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
empathy_roster_window_show_preferences (self, NULL);
}
static void
-roster_window_help_about_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_help_about_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
empathy_about_dialog_new (GTK_WINDOW (self));
}
static void
-roster_window_help_debug_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_help_debug_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
empathy_launch_program (BIN_DIR, "empathy-debugger", NULL);
}
static void
-roster_window_help_contents_cb (GtkAction *action,
- EmpathyRosterWindow *self)
+roster_window_help_contents_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ EmpathyRosterWindow *self = user_data;
+
empathy_url_show (GTK_WIDGET (self), "help:empathy");
}
@@ -2076,15 +1748,6 @@ roster_window_account_removed_cb (TpAccountManager *manager,
TpAccount *account,
EmpathyRosterWindow *self)
{
- GList *a;
-
- a = tp_account_manager_get_valid_accounts (manager);
-
- gtk_action_set_sensitive (self->priv->view_history,
- g_list_length (a) > 0);
-
- g_list_free (a);
-
/* remove errors if any */
roster_window_remove_error (self, account);
@@ -2229,20 +1892,8 @@ roster_window_account_validity_changed_cb (TpAccountManager *manager,
}
static void
-roster_window_notify_show_offline_cb (GSettings *gsettings,
- const gchar *key,
- gpointer toggle_action)
-{
- gtk_toggle_action_set_active (toggle_action,
- g_settings_get_boolean (gsettings, key));
-}
-
-static void
-roster_window_connection_items_setup (EmpathyRosterWindow *self,
- GtkBuilder *gui)
+roster_window_connection_items_setup (EmpathyRosterWindow *self)
{
- GList *list;
- GObject *action;
guint i;
const gchar *actions_connected[] = {
"room_join_new",
@@ -2255,13 +1906,16 @@ roster_window_connection_items_setup (EmpathyRosterWindow *self,
"edit_search_contacts"
};
- for (i = 0, list = NULL; i < G_N_ELEMENTS (actions_connected); i++)
+ for (i = 0; i < G_N_ELEMENTS (actions_connected); i++)
{
- action = gtk_builder_get_object (gui, actions_connected[i]);
- list = g_list_prepend (list, action);
- }
+ GAction *action;
- self->priv->actions_connected = list;
+ action = g_action_map_lookup_action (G_ACTION_MAP (self),
+ actions_connected[i]);
+
+ self->priv->actions_connected = g_list_prepend (
+ self->priv->actions_connected, action);
+ }
}
static void
@@ -2314,10 +1968,6 @@ account_manager_prepared_cb (GObject *source_object,
roster_window_update_status (self);
- /* Disable the "Previous Conversations" menu entry if there is no account */
- gtk_action_set_sensitive (self->priv->view_history,
- g_list_length (accounts) > 0);
-
set_notebook_page (self);
g_list_free (accounts);
@@ -2352,6 +2002,30 @@ empathy_roster_window_constructor (GType type,
return window;
}
+static GActionEntry menubar_entries[] = {
+ { "chat_new_message", roster_window_chat_new_message_cb, NULL, NULL, NULL },
+ { "chat_new_call", roster_window_chat_new_call_cb, NULL, NULL, NULL },
+ { "chat_add_contact", roster_window_chat_add_contact_cb, NULL, NULL, NULL },
+ { "chat_search_contacts", roster_window_chat_search_contacts_cb, NULL, NULL, NULL },
+ { "chat_quit", roster_window_chat_quit_cb, NULL, NULL, NULL },
+
+ { "edit_accounts", roster_window_edit_accounts_cb, NULL, NULL, NULL },
+ { "edit_search_contacts", roster_window_edit_search_contacts_cb, NULL, NULL, NULL },
+ { "edit_blocked_contacts", roster_window_edit_blocked_contacts_cb, NULL, NULL, NULL },
+ { "edit_preferences", roster_window_edit_preferences_cb, NULL, NULL, NULL },
+
+ { "view_history", roster_window_view_history_cb, NULL, NULL, NULL },
+ { "view_show_ft_manager", roster_window_view_show_ft_manager, NULL, NULL, NULL },
+
+ { "room_join_new", roster_window_room_join_new_cb, NULL, NULL, NULL },
+ { "room_join_favorites", roster_window_room_join_favorites_cb, NULL, NULL, NULL },
+ { "room_manage_favorites", roster_window_room_manage_favorites_cb, NULL, NULL, NULL },
+
+ { "help_contents", roster_window_help_contents_cb, NULL, NULL, NULL },
+ { "help_debug", roster_window_help_debug_cb, NULL, NULL, NULL },
+ { "help_about", roster_window_help_about_cb, NULL, NULL, NULL },
+};
+
static void
empathy_roster_window_set_property (GObject *object,
guint property_id,
@@ -2391,6 +2065,12 @@ empathy_roster_window_get_property (GObject *object,
}
static void
+empathy_roster_window_constructed (GObject *self)
+{
+ G_OBJECT_CLASS (empathy_roster_window_parent_class)->constructed (self);
+}
+
+static void
empathy_roster_window_class_init (EmpathyRosterWindowClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -2398,6 +2078,7 @@ empathy_roster_window_class_init (EmpathyRosterWindowClass *klass)
object_class->finalize = empathy_roster_window_finalize;
object_class->constructor = empathy_roster_window_constructor;
+ object_class->constructed = empathy_roster_window_constructed;
object_class->set_property = empathy_roster_window_set_property;
object_class->get_property = empathy_roster_window_get_property;
@@ -2436,18 +2117,29 @@ contacts_loaded_cb (EmpathyIndividualManager *manager,
}
static void
+roster_window_setup_actions (EmpathyRosterWindow *self)
+{
+ GAction *action;
+
+#define ADD_GSETTINGS_ACTION(schema, key) \
+ action = g_settings_create_action (self->priv->gsettings_##schema, \
+ EMPATHY_PREFS_##key); \
+ g_action_map_add_action (G_ACTION_MAP (self), action); \
+ g_object_unref (action);
+
+ ADD_GSETTINGS_ACTION (ui, UI_SHOW_OFFLINE);
+
+#undef ADD_GSETTINGS_ACTION
+}
+
+static void
empathy_roster_window_init (EmpathyRosterWindow *self)
{
- GtkBuilder *gui, *gui_mgr;
+ GtkBuilder *gui;
GtkWidget *sw;
- GtkToggleAction *show_offline_widget;
- GtkAction *show_map_widget;
- GtkToolItem *item;
- gboolean show_offline;
gchar *filename;
GtkTreeModel *model;
GtkWidget *search_vbox;
- GtkWidget *menubar;
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
EMPATHY_TYPE_ROSTER_WINDOW, EmpathyRosterWindowPriv);
@@ -2482,73 +2174,13 @@ empathy_roster_window_init (EmpathyRosterWindow *self)
NULL);
g_free (filename);
- /* Set UI manager */
- filename = empathy_file_lookup ("empathy-roster-window-menubar.ui", "src");
- gui_mgr = empathy_builder_get_file (filename,
- "ui_manager", &self->priv->ui_manager,
- "view_show_offline", &show_offline_widget,
- "view_show_protocols", &self->priv->show_protocols,
- "view_sort_by_name", &self->priv->sort_by_name,
- "view_sort_by_status", &self->priv->sort_by_status,
- "view_normal_size_with_avatars", &self->priv->normal_with_avatars,
- "view_normal_size", &self->priv->normal_size,
- "view_compact_size", &self->priv->compact_size,
- "view_history", &self->priv->view_history,
- "view_show_map", &show_map_widget,
- "room_join_favorites", &self->priv->room_join_favorites,
- "view_balance_show_in_roster", &self->priv->view_balance_show_in_roster,
- "menubar", &menubar,
- NULL);
- g_free (filename);
-
- /* The UI manager is living in its own .ui file as Glade doesn't support
- * those. The GtkMenubar has to be in this file as well to we manually add
- * it to the first position of the vbox. */
- gtk_box_pack_start (GTK_BOX (self->priv->main_vbox), menubar, FALSE, FALSE, 0);
- gtk_box_reorder_child (GTK_BOX (self->priv->main_vbox), menubar, 0);
-
gtk_container_add (GTK_CONTAINER (self), self->priv->main_vbox);
gtk_widget_show (self->priv->main_vbox);
g_signal_connect (self, "key-press-event",
G_CALLBACK (roster_window_key_press_event_cb), NULL);
- empathy_builder_connect (gui_mgr, self,
- "chat_quit", "activate", roster_window_chat_quit_cb,
- "chat_new_message", "activate", roster_window_chat_new_message_cb,
- "chat_new_call", "activate", roster_window_chat_new_call_cb,
- "view_history", "activate", roster_window_view_history_cb,
- "room_join_new", "activate", roster_window_room_join_new_cb,
- "room_join_favorites", "activate", roster_window_room_join_favorites_cb,
- "room_manage_favorites", "activate", roster_window_room_manage_favorites_cb,
- "chat_add_contact", "activate", roster_window_chat_add_contact_cb,
- "chat_search_contacts", "activate", roster_window_chat_search_contacts_cb,
- "view_show_ft_manager", "activate", roster_window_view_show_ft_manager,
- "view_show_offline", "toggled", roster_window_view_show_offline_cb,
- "view_show_protocols", "toggled", roster_window_view_show_protocols_cb,
- "view_sort_by_name", "changed", roster_window_view_sort_contacts_cb,
- "view_normal_size_with_avatars", "changed", roster_window_view_contacts_list_size_cb,
- "view_show_map", "activate", roster_window_view_show_map_cb,
- "edit", "activate", roster_window_edit_cb,
- "edit_accounts", "activate", roster_window_edit_accounts_cb,
- "edit_blocked_contacts", "activate", roster_window_edit_blocked_contacts_cb,
- "edit_preferences", "activate", roster_window_edit_preferences_cb,
- "edit_search_contacts", "activate", roster_window_edit_search_contacts_cb,
- "help_about", "activate", roster_window_help_about_cb,
- "help_debug", "activate", roster_window_help_debug_cb,
- "help_contents", "activate", roster_window_help_contents_cb,
- NULL);
-
- /* Set up connection related widgets. */
- roster_window_connection_items_setup (self, gui_mgr);
-
- g_object_ref (self->priv->ui_manager);
g_object_unref (gui);
- g_object_unref (gui_mgr);
-
-#ifndef HAVE_LIBCHAMPLAIN
- gtk_action_set_visible (show_map_widget, FALSE);
-#endif
self->priv->account_manager = tp_account_manager_dup ();
@@ -2563,16 +2195,26 @@ empathy_roster_window_init (EmpathyRosterWindow *self)
self->priv->status_changed_handlers = g_hash_table_new_full (g_direct_hash,
g_direct_equal, NULL, NULL);
- /* Set up menu */
+ /* set up menus */
+ g_action_map_add_action_entries (G_ACTION_MAP (self),
+ menubar_entries, G_N_ELEMENTS (menubar_entries), self);
+ roster_window_setup_actions (self);
+
+ filename = empathy_file_lookup ("empathy-roster-window-menubar.ui", "src");
+ gui = empathy_builder_get_file (filename,
+ "appmenu", &self->priv->menumodel,
+ "rooms", &self->priv->rooms_section,
+ NULL);
+ g_free (filename);
+
+ g_object_ref (self->priv->menumodel);
+ g_object_ref (self->priv->rooms_section);
+
+ /* Set up connection related actions. */
+ roster_window_connection_items_setup (self);
roster_window_favorite_chatroom_menu_setup (self);
- self->priv->edit_context = gtk_ui_manager_get_widget (self->priv->ui_manager,
- "/menubar/edit/edit_context");
- self->priv->edit_context_separator = gtk_ui_manager_get_widget (
- self->priv->ui_manager,
- "/menubar/edit/edit_context_separator");
- gtk_widget_hide (self->priv->edit_context);
- gtk_widget_hide (self->priv->edit_context_separator);
+ g_object_unref (gui);
/* Set up contact list. */
empathy_status_presets_get_all ();
@@ -2580,13 +2222,9 @@ empathy_roster_window_init (EmpathyRosterWindow *self)
/* Set up presence chooser */
self->priv->presence_chooser = empathy_presence_chooser_new ();
gtk_widget_show (self->priv->presence_chooser);
- item = gtk_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (item));
- gtk_widget_set_size_request (self->priv->presence_chooser, 10, -1);
- gtk_container_add (GTK_CONTAINER (item), self->priv->presence_chooser);
- gtk_tool_item_set_is_important (item, TRUE);
- gtk_tool_item_set_expand (item, TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (self->priv->presence_toolbar), item, -1);
+ gtk_box_pack_start (GTK_BOX (self->priv->presence_toolbar),
+ self->priv->presence_chooser,
+ TRUE, TRUE, 0);
/* Set up the throbber */
self->priv->throbber = gtk_spinner_new ();
@@ -2595,13 +2233,9 @@ empathy_roster_window_init (EmpathyRosterWindow *self)
g_signal_connect (self->priv->throbber, "button-press-event",
G_CALLBACK (roster_window_throbber_button_press_event_cb),
self);
- gtk_widget_show (self->priv->throbber);
-
- item = gtk_tool_item_new ();
- gtk_container_set_border_width (GTK_CONTAINER (item), 6);
- gtk_toolbar_insert (GTK_TOOLBAR (self->priv->presence_toolbar), item, -1);
- gtk_container_add (GTK_CONTAINER (item), self->priv->throbber);
- self->priv->throbber_tool_item = GTK_WIDGET (item);
+ gtk_box_pack_start (GTK_BOX (self->priv->presence_toolbar),
+ self->priv->throbber,
+ FALSE, TRUE, 0);
/* XXX: this class is designed to live for the duration of the program,
* so it's got a race condition between its signal handlers and its
@@ -2675,20 +2309,10 @@ empathy_roster_window_init (EmpathyRosterWindow *self)
/* Load user-defined accelerators. */
roster_window_accels_load ();
+ gtk_window_set_default_size (GTK_WINDOW (self), -1, 600);
/* Set window size. */
empathy_geometry_bind (GTK_WINDOW (self), GEOMETRY_NAME);
- /* bind view_balance_show_in_roster */
- g_settings_bind (self->priv->gsettings_ui, "show-balance-in-roster",
- self->priv->view_balance_show_in_roster, "active",
- G_SETTINGS_BIND_DEFAULT);
- g_object_bind_property (self->priv->view_balance_show_in_roster, "active",
- self->priv->balance_vbox, "visible",
- G_BINDING_SYNC_CREATE);
-
- g_settings_bind (self->priv->gsettings_ui, "show-groups",
- self->priv->individual_store, "show-groups", G_SETTINGS_BIND_DEFAULT);
-
/* Enable event handling */
self->priv->call_observer = empathy_call_observer_dup_singleton ();
self->priv->event_manager = empathy_event_manager_dup_singleton ();
@@ -2704,51 +2328,41 @@ empathy_roster_window_init (EmpathyRosterWindow *self)
g_signal_connect (self->priv->account_manager, "account-disabled",
G_CALLBACK (roster_window_account_disabled_cb), self);
- /* Show offline ? */
- show_offline = g_settings_get_boolean (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_OFFLINE);
-
- g_signal_connect (self->priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_SHOW_OFFLINE,
- G_CALLBACK (roster_window_notify_show_offline_cb), show_offline_widget);
-
- gtk_toggle_action_set_active (show_offline_widget, show_offline);
-
- /* Show protocol ? */
- g_signal_connect (self->priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_SHOW_PROTOCOLS,
- G_CALLBACK (roster_window_notify_show_protocols_cb), self);
-
- roster_window_notify_show_protocols_cb (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_PROTOCOLS, self);
-
- /* Sort by name / by status ? */
- g_signal_connect (self->priv->gsettings_contacts,
- "changed::" EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
- G_CALLBACK (roster_window_notify_sort_contact_cb), self);
-
- roster_window_notify_sort_contact_cb (self->priv->gsettings_contacts,
- EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM, self);
-
- /* Contacts list size */
- g_signal_connect (self->priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
- G_CALLBACK (roster_window_notify_contact_list_size_cb), self);
-
- g_signal_connect (self->priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_SHOW_AVATARS,
- G_CALLBACK (roster_window_notify_contact_list_size_cb),
- self);
-
- roster_window_notify_contact_list_size_cb (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_AVATARS, self);
+ g_settings_bind (self->priv->gsettings_ui, EMPATHY_PREFS_UI_SHOW_OFFLINE,
+ self->priv->individual_view, "show-offline",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (self->priv->gsettings_ui, EMPATHY_PREFS_UI_SHOW_PROTOCOLS,
+ self->priv->individual_store, "show-protocols",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (self->priv->gsettings_ui, EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
+ self->priv->individual_store, "is-compact",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (self->priv->gsettings_ui, EMPATHY_PREFS_UI_SHOW_AVATARS,
+ self->priv->individual_store, "show-avatars",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (self->priv->gsettings_contacts, EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
+ self->priv->individual_store, "sort-criterium",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (self->priv->gsettings_ui, "show-balance-in-roster",
+ self->priv->balance_vbox, "visible",
+ G_SETTINGS_BIND_GET);
g_signal_connect (self->priv->button_account_settings, "clicked",
G_CALLBACK (button_account_settings_clicked_cb), self);
}
GtkWidget *
-empathy_roster_window_dup (void)
+empathy_roster_window_new (GtkApplication *app)
{
- return g_object_new (EMPATHY_TYPE_ROSTER_WINDOW, NULL);
+ return g_object_new (EMPATHY_TYPE_ROSTER_WINDOW,
+ "application", app,
+ NULL);
+}
+
+GMenuModel *
+empathy_roster_window_get_menu_model (EmpathyRosterWindow *self)
+{
+ g_return_val_if_fail (EMPATHY_IS_ROSTER_WINDOW (self), NULL);
+
+ return G_MENU_MODEL (self->priv->menumodel);
}
diff --git a/src/empathy-roster-window.h b/src/empathy-roster-window.h
index 54404ad38..4620a9980 100644
--- a/src/empathy-roster-window.h
+++ b/src/empathy-roster-window.h
@@ -41,18 +41,18 @@ typedef struct _EmpathyRosterWindowPriv EmpathyRosterWindowPriv;
struct _EmpathyRosterWindow
{
- GtkWindow parent;
+ GtkApplicationWindow parent;
EmpathyRosterWindowPriv *priv;
};
struct _EmpathyRosterWindowClass
{
- GtkWindowClass parent_class;
+ GtkApplicationWindowClass parent_class;
};
GType empathy_roster_window_get_type (void);
-GtkWidget *empathy_roster_window_dup (void);
+GtkWidget * empathy_roster_window_new (GtkApplication *app);
void empathy_roster_window_show_preferences (EmpathyRosterWindow *self,
const gchar *tab);
@@ -60,6 +60,8 @@ void empathy_roster_window_show_preferences (EmpathyRosterWindow *self,
void empathy_roster_window_set_shell_running (EmpathyRosterWindow *self,
gboolean shell_running);
+GMenuModel *empathy_roster_window_get_menu_model (EmpathyRosterWindow *self);
+
G_END_DECLS
#endif /* __EMPATHY_ROSTER_WINDOW_H__ */
diff --git a/src/empathy-roster-window.ui b/src/empathy-roster-window.ui
index 8c8f63001..843f94e69 100644
--- a/src/empathy-roster-window.ui
+++ b/src/empathy-roster-window.ui
@@ -5,13 +5,11 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <object class="GtkToolbar" id="presence_toolbar">
+ <object class="GtkHBox" id="presence_toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="toolbar_style">both</property>
- <style>
- <class name="primary-toolbar"/>
- </style>
+ <property name="spacing">3</property>
+ <property name="border-width">3</property>
</object>
<packing>
<property name="expand">False</property>
@@ -101,7 +99,7 @@
<property name="can_focus">False</property>
<property name="yalign">1</property>
<property name="ypad">1</property>
- <property name="icon_name">avatar-default</property>
+ <property name="icon_name">avatar-default-symbolic</property>
<property name="icon-size">6</property>
</object>
<packing>
diff --git a/src/empathy-streamed-media-factory.c b/src/empathy-streamed-media-factory.c
deleted file mode 100644
index 713d441df..000000000
--- a/src/empathy-streamed-media-factory.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * empathy-streamed-media-factory.c - Source for EmpathyStreamedMediaFactory
- * Copyright (C) 2008-2011 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * 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 <stdio.h>
-#include <stdlib.h>
-
-#include <telepathy-glib/account-channel-request.h>
-#include <telepathy-glib/simple-handler.h>
-#include <telepathy-glib/interfaces.h>
-#include <telepathy-glib/util.h>
-
-#include <libempathy/empathy-request-util.h>
-#include <libempathy/empathy-utils.h>
-
-#include "empathy-streamed-media-factory.h"
-#include "empathy-streamed-media-handler.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include <libempathy/empathy-debug.h>
-
-G_DEFINE_TYPE(EmpathyStreamedMediaFactory, empathy_streamed_media_factory, G_TYPE_OBJECT)
-
-static void handle_channels_cb (TpSimpleHandler *handler,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- GList *requests_satisfied,
- gint64 user_action_time,
- TpHandleChannelsContext *context,
- gpointer user_data);
-
-/* signal enum */
-enum
-{
- NEW_STREAMED_MEDIA_HANDLER,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-/* private structure */
-typedef struct {
- TpBaseClient *handler;
- gboolean dispose_has_run;
-} EmpathyStreamedMediaFactoryPriv;
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyStreamedMediaFactory)
-
-static GObject *call_factory = NULL;
-
-static void
-empathy_streamed_media_factory_init (EmpathyStreamedMediaFactory *obj)
-{
- EmpathyStreamedMediaFactoryPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (obj,
- EMPATHY_TYPE_STREAMED_MEDIA_FACTORY, EmpathyStreamedMediaFactoryPriv);
- TpAccountManager *am;
-
- obj->priv = priv;
-
- am = tp_account_manager_dup ();
-
- priv->handler = tp_simple_handler_new_with_am (am, FALSE, FALSE,
- EMPATHY_AV_BUS_NAME_SUFFIX, FALSE, handle_channels_cb, obj, NULL);
-
- tp_base_client_take_handler_filter (priv->handler, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- NULL));
-
- tp_base_client_take_handler_filter (priv->handler, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_AUDIO, G_TYPE_BOOLEAN, TRUE,
- NULL));
-
- tp_base_client_take_handler_filter (priv->handler, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TYPE_STREAMED_MEDIA_INITIAL_VIDEO, G_TYPE_BOOLEAN, TRUE,
- NULL));
-
- tp_base_client_add_handler_capabilities_varargs (priv->handler,
- "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/ice-udp",
- "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/gtalk-p2p",
- "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/h264",
- NULL);
-
- g_object_unref (am);
-}
-
-static GObject *
-empathy_streamed_media_factory_constructor (GType type, guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- g_return_val_if_fail (call_factory == NULL, NULL);
-
- call_factory = G_OBJECT_CLASS (empathy_streamed_media_factory_parent_class)->constructor
- (type, n_construct_params, construct_params);
- g_object_add_weak_pointer (call_factory, (gpointer)&call_factory);
-
- return call_factory;
-}
-
-static void
-empathy_streamed_media_factory_finalize (GObject *object)
-{
- /* free any data held directly by the object here */
-
- if (G_OBJECT_CLASS (empathy_streamed_media_factory_parent_class)->finalize)
- G_OBJECT_CLASS (empathy_streamed_media_factory_parent_class)->finalize (object);
-}
-
-static void
-empathy_streamed_media_factory_dispose (GObject *object)
-{
- EmpathyStreamedMediaFactoryPriv *priv = GET_PRIV (object);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- tp_clear_object (&priv->handler);
-
- if (G_OBJECT_CLASS (empathy_streamed_media_factory_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_streamed_media_factory_parent_class)->dispose (object);
-}
-
-static void
-empathy_streamed_media_factory_class_init (
- EmpathyStreamedMediaFactoryClass *empathy_streamed_media_factory_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_streamed_media_factory_class);
-
- g_type_class_add_private (empathy_streamed_media_factory_class,
- sizeof (EmpathyStreamedMediaFactoryPriv));
-
- object_class->constructor = empathy_streamed_media_factory_constructor;
- object_class->dispose = empathy_streamed_media_factory_dispose;
- object_class->finalize = empathy_streamed_media_factory_finalize;
-
- signals[NEW_STREAMED_MEDIA_HANDLER] =
- g_signal_new ("new-streamed-media-handler",
- G_TYPE_FROM_CLASS (empathy_streamed_media_factory_class),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, EMPATHY_TYPE_STREAMED_MEDIA_HANDLER, G_TYPE_BOOLEAN);
-}
-
-EmpathyStreamedMediaFactory *
-empathy_streamed_media_factory_initialise (void)
-{
- g_return_val_if_fail (call_factory == NULL, NULL);
-
- return EMPATHY_STREAMED_MEDIA_FACTORY (g_object_new (EMPATHY_TYPE_STREAMED_MEDIA_FACTORY, NULL));
-}
-
-EmpathyStreamedMediaFactory *
-empathy_streamed_media_factory_get (void)
-{
- g_return_val_if_fail (call_factory != NULL, NULL);
-
- return EMPATHY_STREAMED_MEDIA_FACTORY (call_factory);
-}
-
-static void
-create_streamed_media_handler (EmpathyStreamedMediaFactory *factory,
- EmpathyTpStreamedMedia *call)
-{
- EmpathyStreamedMediaHandler *handler;
-
- g_return_if_fail (factory != NULL);
-
- handler = empathy_streamed_media_handler_new_for_channel (call);
-
- g_signal_emit (factory, signals[NEW_STREAMED_MEDIA_HANDLER], 0,
- handler, FALSE);
-
- g_object_unref (handler);
-}
-
-static void
-call_status_changed_cb (EmpathyTpStreamedMedia *call,
- GParamSpec *spec,
- EmpathyStreamedMediaFactory *self)
-{
- if (empathy_tp_streamed_media_get_status (call) <= EMPATHY_TP_STREAMED_MEDIA_STATUS_READYING)
- return;
-
- create_streamed_media_handler (self, call);
-
- g_signal_handlers_disconnect_by_func (call, call_status_changed_cb, self);
- g_object_unref (call);
-}
-
-static void
-handle_channels_cb (TpSimpleHandler *handler,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- GList *requests_satisfied,
- gint64 user_action_time,
- TpHandleChannelsContext *context,
- gpointer user_data)
-{
- EmpathyStreamedMediaFactory *self = user_data;
- GList *l;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- TpChannel *channel = l->data;
- EmpathyTpStreamedMedia *call;
-
- if (tp_proxy_get_invalidated (channel) != NULL)
- continue;
-
- if (tp_channel_get_channel_type_id (channel) !=
- TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA)
- continue;
-
- call = empathy_tp_streamed_media_new (account, channel);
-
- if (empathy_tp_streamed_media_get_status (call) <= EMPATHY_TP_STREAMED_MEDIA_STATUS_READYING)
- {
- /* We have to wait that the TpStreamedMedia is ready as the
- * call-handler rely on it. */
- tp_g_signal_connect_object (call, "notify::status",
- G_CALLBACK (call_status_changed_cb), self, 0);
- continue;
- }
-
- create_streamed_media_handler (self, call);
- g_object_unref (call);
- }
-
- tp_handle_channels_context_accept (context);
-}
-
-gboolean
-empathy_streamed_media_factory_register (EmpathyStreamedMediaFactory *self,
- GError **error)
-{
- EmpathyStreamedMediaFactoryPriv *priv = GET_PRIV (self);
-
- return tp_base_client_register (priv->handler, error);
-}
diff --git a/src/empathy-streamed-media-factory.h b/src/empathy-streamed-media-factory.h
deleted file mode 100644
index c69073ec4..000000000
--- a/src/empathy-streamed-media-factory.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * empathy-streamed-media-factory.h - Header for EmpathyStreamedMediaFactory
- * Copyright (C) 2008-2011 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * 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_STREAMED_MEDIA_FACTORY_H__
-#define __EMPATHY_STREAMED_MEDIA_FACTORY_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyStreamedMediaFactory EmpathyStreamedMediaFactory;
-typedef struct _EmpathyStreamedMediaFactoryClass EmpathyStreamedMediaFactoryClass;
-
-struct _EmpathyStreamedMediaFactoryClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyStreamedMediaFactory {
- GObject parent;
- gpointer priv;
-};
-
-GType empathy_streamed_media_factory_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_STREAMED_MEDIA_FACTORY \
- (empathy_streamed_media_factory_get_type ())
-#define EMPATHY_STREAMED_MEDIA_FACTORY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_STREAMED_MEDIA_FACTORY, \
- EmpathyStreamedMediaFactory))
-#define EMPATHY_STREAMED_MEDIA_FACTORY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_STREAMED_MEDIA_FACTORY, \
- EmpathyStreamedMediaFactoryClass))
-#define EMPATHY_IS_STREAMED_MEDIA_FACTORY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_STREAMED_MEDIA_FACTORY))
-#define EMPATHY_IS_STREAMED_MEDIA_FACTORY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_STREAMED_MEDIA_FACTORY))
-#define EMPATHY_STREAMED_MEDIA_FACTORY_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_STREAMED_MEDIA_FACTORY, \
- EmpathyStreamedMediaFactoryClass))
-
-
-EmpathyStreamedMediaFactory *empathy_streamed_media_factory_initialise (void);
-
-EmpathyStreamedMediaFactory *empathy_streamed_media_factory_get (void);
-
-gboolean empathy_streamed_media_factory_register (EmpathyStreamedMediaFactory *self,
- GError **error);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_STREAMED_MEDIA_FACTORY_H__*/
diff --git a/src/empathy-streamed-media-handler.c b/src/empathy-streamed-media-handler.c
deleted file mode 100644
index 5e2cac50f..000000000
--- a/src/empathy-streamed-media-handler.c
+++ /dev/null
@@ -1,921 +0,0 @@
-/*
- * empathy-streamed-media-handler.c - Source for EmpathyStreamedMediaHandler
- * Copyright (C) 2008-2011 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * 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 <stdio.h>
-#include <stdlib.h>
-
-#include <telepathy-glib/account-channel-request.h>
-#include <telepathy-glib/util.h>
-#include <telepathy-glib/interfaces.h>
-
-#include <telepathy-farstream/telepathy-farstream.h>
-
-#include <libempathy/empathy-utils.h>
-
-#include <libempathy-gtk/empathy-call-utils.h>
-
-#include "empathy-streamed-media-handler.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include <libempathy/empathy-debug.h>
-
-G_DEFINE_TYPE(EmpathyStreamedMediaHandler, empathy_streamed_media_handler, G_TYPE_OBJECT)
-
-/* signal enum */
-enum {
- CONFERENCE_ADDED,
- SRC_PAD_ADDED,
- SINK_PAD_ADDED,
- START_RECEIVING,
- CLOSED,
- STREAM_CLOSED,
- CANDIDATES_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-enum {
- PROP_TP_STREAMED_MEDIA = 1,
- PROP_GST_BUS,
- PROP_CONTACT,
- PROP_INITIAL_AUDIO,
- PROP_INITIAL_VIDEO,
- PROP_SEND_AUDIO_CODEC,
- PROP_SEND_VIDEO_CODEC,
- PROP_RECV_AUDIO_CODECS,
- PROP_RECV_VIDEO_CODECS,
- PROP_AUDIO_REMOTE_CANDIDATE,
- PROP_VIDEO_REMOTE_CANDIDATE,
- PROP_AUDIO_LOCAL_CANDIDATE,
- PROP_VIDEO_LOCAL_CANDIDATE,
-};
-
-/* private structure */
-
-typedef struct {
- gboolean dispose_has_run;
- EmpathyTpStreamedMedia *call;
- EmpathyContact *contact;
- TfChannel *tfchannel;
- gboolean initial_audio;
- gboolean initial_video;
-
- FsCodec *send_audio_codec;
- FsCodec *send_video_codec;
- GList *recv_audio_codecs;
- GList *recv_video_codecs;
- FsCandidate *audio_remote_candidate;
- FsCandidate *video_remote_candidate;
- FsCandidate *audio_local_candidate;
- FsCandidate *video_local_candidate;
-} EmpathyStreamedMediaHandlerPriv;
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyStreamedMediaHandler)
-
-static void
-empathy_streamed_media_handler_dispose (GObject *object)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (object);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- if (priv->contact != NULL)
- g_object_unref (priv->contact);
-
- priv->contact = NULL;
-
- if (priv->tfchannel != NULL)
- g_object_unref (priv->tfchannel);
-
- priv->tfchannel = NULL;
-
- if (priv->call != NULL)
- {
- empathy_tp_streamed_media_close (priv->call);
- g_object_unref (priv->call);
- }
-
- priv->call = NULL;
-
- /* release any references held by the object here */
- if (G_OBJECT_CLASS (empathy_streamed_media_handler_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_streamed_media_handler_parent_class)->dispose (object);
-}
-
-static void
-empathy_streamed_media_handler_finalize (GObject *object)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (object);
-
- fs_codec_destroy (priv->send_audio_codec);
- fs_codec_destroy (priv->send_video_codec);
- fs_codec_list_destroy (priv->recv_audio_codecs);
- fs_codec_list_destroy (priv->recv_video_codecs);
- fs_candidate_destroy (priv->audio_remote_candidate);
- fs_candidate_destroy (priv->video_remote_candidate);
- fs_candidate_destroy (priv->audio_local_candidate);
- fs_candidate_destroy (priv->video_local_candidate);
-
- if (G_OBJECT_CLASS (empathy_streamed_media_handler_parent_class)->finalize)
- G_OBJECT_CLASS (empathy_streamed_media_handler_parent_class)->finalize (object);
-}
-
-static void
-empathy_streamed_media_handler_init (EmpathyStreamedMediaHandler *obj)
-{
- EmpathyStreamedMediaHandlerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (obj,
- EMPATHY_TYPE_STREAMED_MEDIA_HANDLER, EmpathyStreamedMediaHandlerPriv);
-
- obj->priv = priv;
-}
-
-static void
-empathy_streamed_media_handler_constructed (GObject *object)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (object);
-
- if (priv->contact == NULL)
- {
- g_object_get (priv->call, "contact", &(priv->contact), NULL);
- }
-}
-
-static void
-empathy_streamed_media_handler_set_property (GObject *object,
- guint property_id, const GValue *value, GParamSpec *pspec)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CONTACT:
- priv->contact = g_value_dup_object (value);
- break;
- case PROP_TP_STREAMED_MEDIA:
- priv->call = g_value_dup_object (value);
- break;
- case PROP_INITIAL_AUDIO:
- priv->initial_audio = g_value_get_boolean (value);
- break;
- case PROP_INITIAL_VIDEO:
- priv->initial_video = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_streamed_media_handler_get_property (GObject *object,
- guint property_id, GValue *value, GParamSpec *pspec)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CONTACT:
- g_value_set_object (value, priv->contact);
- break;
- case PROP_TP_STREAMED_MEDIA:
- g_value_set_object (value, priv->call);
- break;
- case PROP_INITIAL_AUDIO:
- g_value_set_boolean (value, priv->initial_audio);
- break;
- case PROP_INITIAL_VIDEO:
- g_value_set_boolean (value, priv->initial_video);
- break;
- case PROP_SEND_AUDIO_CODEC:
- g_value_set_boxed (value, priv->send_audio_codec);
- break;
- case PROP_SEND_VIDEO_CODEC:
- g_value_set_boxed (value, priv->send_video_codec);
- break;
- case PROP_RECV_AUDIO_CODECS:
- g_value_set_boxed (value, priv->recv_audio_codecs);
- break;
- case PROP_RECV_VIDEO_CODECS:
- g_value_set_boxed (value, priv->recv_video_codecs);
- break;
- case PROP_AUDIO_REMOTE_CANDIDATE:
- g_value_set_boxed (value, priv->audio_remote_candidate);
- break;
- case PROP_VIDEO_REMOTE_CANDIDATE:
- g_value_set_boxed (value, priv->video_remote_candidate);
- break;
- case PROP_AUDIO_LOCAL_CANDIDATE:
- g_value_set_boxed (value, priv->audio_local_candidate);
- break;
- case PROP_VIDEO_LOCAL_CANDIDATE:
- g_value_set_boxed (value, priv->video_local_candidate);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-
-static void
-empathy_streamed_media_handler_class_init (EmpathyStreamedMediaHandlerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *param_spec;
-
- g_type_class_add_private (klass, sizeof (EmpathyStreamedMediaHandlerPriv));
-
- object_class->constructed = empathy_streamed_media_handler_constructed;
- object_class->set_property = empathy_streamed_media_handler_set_property;
- object_class->get_property = empathy_streamed_media_handler_get_property;
- object_class->dispose = empathy_streamed_media_handler_dispose;
- object_class->finalize = empathy_streamed_media_handler_finalize;
-
- param_spec = g_param_spec_object ("contact",
- "contact", "The remote contact",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_CONTACT, param_spec);
-
- param_spec = g_param_spec_object ("tp-call",
- "tp-call", "The calls channel wrapper",
- EMPATHY_TYPE_TP_STREAMED_MEDIA,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_TP_STREAMED_MEDIA, param_spec);
-
- param_spec = g_param_spec_boolean ("initial-audio",
- "initial-audio", "Whether the call should start with audio",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_INITIAL_AUDIO,
- param_spec);
-
- param_spec = g_param_spec_boolean ("initial-video",
- "initial-video", "Whether the call should start with video",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_INITIAL_VIDEO,
- param_spec);
-
- param_spec = g_param_spec_boxed ("send-audio-codec",
- "send audio codec", "Codec used to encode the outgoing video stream",
- FS_TYPE_CODEC,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_SEND_AUDIO_CODEC,
- param_spec);
-
- param_spec = g_param_spec_boxed ("send-video-codec",
- "send video codec", "Codec used to encode the outgoing video stream",
- FS_TYPE_CODEC,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_SEND_VIDEO_CODEC,
- param_spec);
-
- param_spec = g_param_spec_boxed ("recv-audio-codecs",
- "recvs audio codec", "Codecs used to decode the incoming audio stream",
- FS_TYPE_CODEC_LIST,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_RECV_AUDIO_CODECS,
- param_spec);
-
- param_spec = g_param_spec_boxed ("recv-video-codecs",
- "recvs video codec", "Codecs used to decode the incoming video stream",
- FS_TYPE_CODEC_LIST,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_RECV_VIDEO_CODECS,
- param_spec);
-
- param_spec = g_param_spec_boxed ("audio-remote-candidate",
- "audio remote candidate",
- "Remote candidate used for the audio stream",
- FS_TYPE_CANDIDATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_AUDIO_REMOTE_CANDIDATE, param_spec);
-
- param_spec = g_param_spec_boxed ("video-remote-candidate",
- "video remote candidate",
- "Remote candidate used for the video stream",
- FS_TYPE_CANDIDATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_VIDEO_REMOTE_CANDIDATE, param_spec);
-
- param_spec = g_param_spec_boxed ("audio-local-candidate",
- "audio local candidate",
- "Local candidate used for the audio stream",
- FS_TYPE_CANDIDATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_AUDIO_REMOTE_CANDIDATE, param_spec);
-
- param_spec = g_param_spec_boxed ("video-local-candidate",
- "video local candidate",
- "Local candidate used for the video stream",
- FS_TYPE_CANDIDATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_VIDEO_REMOTE_CANDIDATE, param_spec);
-
- signals[CONFERENCE_ADDED] =
- g_signal_new ("conference-added", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, FS_TYPE_CONFERENCE);
-
- signals[SRC_PAD_ADDED] =
- g_signal_new ("src-pad-added", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN,
- 2, GST_TYPE_PAD, G_TYPE_UINT);
-
- signals[SINK_PAD_ADDED] =
- g_signal_new ("sink-pad-added", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN,
- 2, GST_TYPE_PAD, G_TYPE_UINT);
-
- signals[START_RECEIVING] =
- g_signal_new ("start-receiving", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- g_signal_accumulator_true_handled, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN, 2, G_TYPE_UINT, G_TYPE_UINT);
-
- signals[CLOSED] =
- g_signal_new ("closed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 0);
-
- signals[STREAM_CLOSED] =
- g_signal_new ("stream-closed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, TF_TYPE_CONTENT);
-
- signals[CANDIDATES_CHANGED] =
- g_signal_new ("candidates-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_UINT);
-}
-
-/**
- * empathy_streamed_media_handler_new_for_contact:
- * @contact: an #EmpathyContact
- *
- * Creates a new #EmpathyStreamedMediaHandler with contact @contact.
- *
- * Return value: a new #EmpathyStreamedMediaHandler
- */
-EmpathyStreamedMediaHandler *
-empathy_streamed_media_handler_new_for_contact (EmpathyContact *contact)
-{
- return EMPATHY_STREAMED_MEDIA_HANDLER (g_object_new (EMPATHY_TYPE_STREAMED_MEDIA_HANDLER,
- "contact", contact, NULL));
-}
-
-EmpathyStreamedMediaHandler *
-empathy_streamed_media_handler_new_for_channel (EmpathyTpStreamedMedia *call)
-{
- return EMPATHY_STREAMED_MEDIA_HANDLER (g_object_new (EMPATHY_TYPE_STREAMED_MEDIA_HANDLER,
- "tp-call", call,
- "initial-video", empathy_tp_streamed_media_is_receiving_video (call),
- NULL));
-}
-
-static void
-update_sending_codec (EmpathyStreamedMediaHandler *self,
- FsCodec *codec,
- FsSession *session)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
- FsMediaType type;
-
- if (codec == NULL || session == NULL)
- return;
-
- g_object_get (session, "media-type", &type, NULL);
-
- if (type == FS_MEDIA_TYPE_AUDIO)
- {
- priv->send_audio_codec = fs_codec_copy (codec);
- g_object_notify (G_OBJECT (self), "send-audio-codec");
- }
- else if (type == FS_MEDIA_TYPE_VIDEO)
- {
- priv->send_video_codec = fs_codec_copy (codec);
- g_object_notify (G_OBJECT (self), "send-video-codec");
- }
-}
-
-static void
-update_receiving_codec (EmpathyStreamedMediaHandler *self,
- GList *codecs,
- FsStream *stream)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
- FsSession *session;
- FsMediaType type;
-
- if (codecs == NULL || stream == NULL)
- return;
-
- g_object_get (stream, "session", &session, NULL);
- if (session == NULL)
- return;
-
- g_object_get (session, "media-type", &type, NULL);
-
- if (type == FS_MEDIA_TYPE_AUDIO)
- {
- priv->recv_audio_codecs = fs_codec_list_copy (codecs);
- g_object_notify (G_OBJECT (self), "recv-audio-codecs");
- }
- else if (type == FS_MEDIA_TYPE_VIDEO)
- {
- priv->recv_video_codecs = fs_codec_list_copy (codecs);
- g_object_notify (G_OBJECT (self), "recv-video-codecs");
- }
-
- g_object_unref (session);
-}
-
-static void
-update_candidates (EmpathyStreamedMediaHandler *self,
- FsCandidate *remote_candidate,
- FsCandidate *local_candidate,
- FsStream *stream)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
- FsSession *session;
- FsMediaType type;
-
- if (stream == NULL)
- return;
-
- g_object_get (stream, "session", &session, NULL);
- if (session == NULL)
- return;
-
- g_object_get (session, "media-type", &type, NULL);
-
- if (type == FS_MEDIA_TYPE_AUDIO)
- {
- if (remote_candidate != NULL)
- {
- fs_candidate_destroy (priv->audio_remote_candidate);
- priv->audio_remote_candidate = fs_candidate_copy (remote_candidate);
- g_object_notify (G_OBJECT (self), "audio-remote-candidate");
- }
-
- if (local_candidate != NULL)
- {
- fs_candidate_destroy (priv->audio_local_candidate);
- priv->audio_local_candidate = fs_candidate_copy (local_candidate);
- g_object_notify (G_OBJECT (self), "audio-local-candidate");
- }
-
- g_signal_emit (G_OBJECT (self), signals[CANDIDATES_CHANGED], 0,
- FS_MEDIA_TYPE_AUDIO);
- }
- else if (type == FS_MEDIA_TYPE_VIDEO)
- {
- if (remote_candidate != NULL)
- {
- fs_candidate_destroy (priv->video_remote_candidate);
- priv->video_remote_candidate = fs_candidate_copy (remote_candidate);
- g_object_notify (G_OBJECT (self), "video-remote-candidate");
- }
-
- if (local_candidate != NULL)
- {
- fs_candidate_destroy (priv->video_local_candidate);
- priv->video_local_candidate = fs_candidate_copy (local_candidate);
- g_object_notify (G_OBJECT (self), "video-local-candidate");
- }
-
- g_signal_emit (G_OBJECT (self), signals[CANDIDATES_CHANGED], 0,
- FS_MEDIA_TYPE_VIDEO);
- }
-
- g_object_unref (session);
-}
-
-void
-empathy_streamed_media_handler_bus_message (EmpathyStreamedMediaHandler *handler,
- GstBus *bus, GstMessage *message)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (handler);
- const GstStructure *s = gst_message_get_structure (message);
-
- if (priv->tfchannel == NULL)
- return;
-
- if (s != NULL &&
- gst_structure_has_name (s, "farstream-send-codec-changed"))
- {
- const GValue *val;
- FsCodec *codec;
- FsSession *session;
-
- val = gst_structure_get_value (s, "codec");
- codec = g_value_get_boxed (val);
-
- val = gst_structure_get_value (s, "session");
- session = g_value_get_object (val);
-
- update_sending_codec (handler, codec, session);
- }
- else if (s != NULL &&
- gst_structure_has_name (s, "farstream-recv-codecs-changed"))
- {
- const GValue *val;
- GList *codecs;
- FsStream *stream;
-
- val = gst_structure_get_value (s, "codecs");
- codecs = g_value_get_boxed (val);
-
- val = gst_structure_get_value (s, "stream");
- stream = g_value_get_object (val);
-
- update_receiving_codec (handler, codecs, stream);
- }
- else if (s != NULL &&
- gst_structure_has_name (s, "farstream-new-active-candidate-pair"))
- {
- const GValue *val;
- FsCandidate *remote_candidate, *local_candidate;
- FsStream *stream;
-
- val = gst_structure_get_value (s, "remote-candidate");
- remote_candidate = g_value_get_boxed (val);
-
- val = gst_structure_get_value (s, "local-candidate");
- local_candidate = g_value_get_boxed (val);
-
- val = gst_structure_get_value (s, "stream");
- stream = g_value_get_object (val);
-
- update_candidates (handler, remote_candidate, local_candidate, stream);
- }
-
- tf_channel_bus_message (priv->tfchannel, message);
-}
-
-static void
-empathy_streamed_media_handler_tf_channel_conference_added_cb (TfChannel *tfchannel,
- FsConference *conference,
- EmpathyStreamedMediaHandler *self)
-{
- g_signal_emit (G_OBJECT (self), signals[CONFERENCE_ADDED], 0,
- GST_ELEMENT (conference));
-}
-
-static gboolean
-src_pad_added_error_idle (gpointer data)
-{
- TfContent *content = data;
-
- tf_content_error_literal (content, "Could not link sink");
- g_object_unref (content);
-
- return FALSE;
-}
-
-static void
-empathy_streamed_media_handler_tf_content_src_pad_added_cb (TfContent *content,
- guint handle,
- FsStream *stream,
- GstPad *pad,
- FsCodec *codec,
- EmpathyStreamedMediaHandler *handler)
-{
- guint media_type;
- gboolean retval;
-
- g_object_get (content, "media-type", &media_type, NULL);
-
- g_signal_emit (G_OBJECT (handler), signals[SRC_PAD_ADDED], 0,
- pad, media_type, &retval);
-
- if (!retval)
- g_idle_add (src_pad_added_error_idle, g_object_ref (content));
-}
-
-
-static gboolean
-empathy_streamed_media_handler_tf_content_start_receiving_cb (TfContent *content,
- guint *handles, guint handle_count, EmpathyTpStreamedMedia *call)
-{
- gboolean ret = FALSE;
- guint media_type;
-
- g_object_get (G_OBJECT (content), "media-type", &media_type, NULL);
-
- g_signal_emit (G_OBJECT (call),
- signals[START_RECEIVING], 0, media_type, &ret);
-
- return ret;
-}
-
-static void
-empathy_streamed_media_handler_tf_content_removed_cb (TfChannel *channel,
- TfContent *content, EmpathyStreamedMediaHandler *handler)
-{
- g_signal_emit (handler, signals[STREAM_CLOSED], 0, content);
-}
-
-static void
-empathy_streamed_media_handler_tf_channel_content_added_cb (TfChannel *tfchannel,
- TfContent *content, EmpathyStreamedMediaHandler *handler)
-{
- guint media_type;
- GstPad *spad;
- gboolean retval;
- FsSession *session;
- FsCodec *codec;
-
- g_signal_connect (content, "src-pad-added",
- G_CALLBACK (empathy_streamed_media_handler_tf_content_src_pad_added_cb), handler);
-
- g_signal_connect (content, "start-receiving",
- G_CALLBACK (empathy_streamed_media_handler_tf_content_start_receiving_cb),
- handler);
-
- g_object_get (content, "media-type", &media_type,
- "sink-pad", &spad, NULL);
-
- g_signal_emit (G_OBJECT (handler), signals[SINK_PAD_ADDED], 0,
- spad, media_type, &retval);
-
- if (!retval)
- tf_content_error_literal (content, "Could not link source");
-
- /* Get sending codec */
- g_object_get (content, "fs-session", &session, NULL);
- g_object_get (session, "current-send-codec", &codec, NULL);
-
- update_sending_codec (handler, codec, session);
-
- tp_clear_object (&session);
- tp_clear_object (&codec);
-
- gst_object_unref (spad);
-}
-
-static void
-empathy_streamed_media_handler_tf_channel_closed_cb (TfChannel *tfchannel,
- EmpathyStreamedMediaHandler *handler)
-{
- g_signal_emit (G_OBJECT (handler), signals[CLOSED], 0);
-}
-
-static void
-empathy_streamed_media_handler_start_tpfs (GAsyncInitable *initable,
- GAsyncResult *res, EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
- GError *error = NULL;
- GPtrArray *conferences;
-
- if (g_async_initable_init_finish (initable, res, &error))
- {
- priv->tfchannel = TF_CHANNEL (initable);
-
- /* Set up the telepathy farsight channel */
- g_signal_connect (priv->tfchannel, "fs-conference-added",
- G_CALLBACK (empathy_streamed_media_handler_tf_channel_conference_added_cb), self);
- g_signal_connect (priv->tfchannel, "content-added",
- G_CALLBACK (empathy_streamed_media_handler_tf_channel_content_added_cb), self);
- g_signal_connect (priv->tfchannel, "content-removed",
- G_CALLBACK (empathy_streamed_media_handler_tf_content_removed_cb),
- self);
- g_signal_connect (priv->tfchannel, "closed",
- G_CALLBACK (empathy_streamed_media_handler_tf_channel_closed_cb), self);
-
- g_object_get (priv->tfchannel, "fs-conferences", &conferences, NULL);
- if (conferences)
- {
- if (conferences->len > 0)
- empathy_streamed_media_handler_tf_channel_conference_added_cb (
- priv->tfchannel, g_ptr_array_index (conferences, 0), self);
- g_ptr_array_unref (conferences);
- }
-
- empathy_tp_streamed_media_accept_incoming_call (priv->call);
- }
- else
- {
- g_warning ("Error creating tf channel");
- g_clear_error (&error);
- }
- g_object_unref (self);
-}
-
-static void
-empathy_streamed_media_handler_request_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyStreamedMediaHandler *self = EMPATHY_STREAMED_MEDIA_HANDLER (user_data);
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
- TpChannel *channel;
- GError *error = NULL;
- TpAccountChannelRequest *req = TP_ACCOUNT_CHANNEL_REQUEST (source);
- TpAccount *account;
-
- channel = tp_account_channel_request_create_and_handle_channel_finish (req,
- result, NULL, &error);
- if (channel == NULL)
- {
- DEBUG ("Failed to create the channel: %s", error->message);
- g_error_free (error);
- return;
- }
-
- account = tp_account_channel_request_get_account (req);
-
- priv->call = empathy_tp_streamed_media_new (account, channel);
-
- g_object_notify (G_OBJECT (self), "tp-call");
-
-
- tf_channel_new_async (channel,
- (GAsyncReadyCallback) empathy_streamed_media_handler_start_tpfs,
- g_object_ref (self));
-
- g_object_unref (channel);
-}
-
-void
-empathy_streamed_media_handler_start_call (EmpathyStreamedMediaHandler *handler,
- gint64 timestamp)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (handler);
- TpAccountChannelRequest *req;
- TpAccount *account;
- GHashTable *request;
-
- if (priv->call != NULL)
- {
- TpChannel *channel;
-
- g_object_get (priv->call, "channel", &channel, NULL);
-
- tf_channel_new_async (channel,
- (GAsyncReadyCallback) empathy_streamed_media_handler_start_tpfs,
- g_object_ref (handler));
- g_object_unref (channel);
- return;
- }
-
- /* No TpStreamedMedia object (we are redialing). Request a new media channel that
- * will be used to create a new EmpathyTpStreamedMedia. */
- g_assert (priv->contact != NULL);
-
- account = empathy_contact_get_account (priv->contact);
- request = empathy_call_create_streamed_media_request (
- empathy_contact_get_id (priv->contact),
- priv->initial_audio, priv->initial_video);
-
- req = tp_account_channel_request_new (account, request, timestamp);
-
- tp_account_channel_request_create_and_handle_channel_async (req, NULL,
- empathy_streamed_media_handler_request_cb, handler);
-
- g_object_unref (req);
- g_hash_table_unref (request);
-}
-
-/**
- * empathy_streamed_media_handler_stop_call:
- * @handler: an #EmpathyStreamedMediaHandler
- *
- * Closes the #EmpathyStreamedMediaHandler's call and frees its resources.
- */
-void
-empathy_streamed_media_handler_stop_call (EmpathyStreamedMediaHandler *handler)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (handler);
-
- if (priv->call != NULL)
- {
- empathy_tp_streamed_media_leave (priv->call);
- g_object_unref (priv->call);
- }
-
- priv->call = NULL;
-}
-
-/**
- * empathy_streamed_media_handler_has_initial_video:
- * @handler: an #EmpathyStreamedMediaHandler
- *
- * Return %TRUE if the call managed by this #EmpathyStreamedMediaHandler was
- * created with video enabled
- *
- * Return value: %TRUE if the call was created as a video conversation.
- */
-gboolean
-empathy_streamed_media_handler_has_initial_video (EmpathyStreamedMediaHandler *handler)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (handler);
-
- return priv->initial_video;
-}
-
-FsCodec *
-empathy_streamed_media_handler_get_send_audio_codec (EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
-
- return priv->send_audio_codec;
-}
-
-FsCodec *
-empathy_streamed_media_handler_get_send_video_codec (EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
-
- return priv->send_video_codec;
-}
-
-GList *
-empathy_streamed_media_handler_get_recv_audio_codecs (EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
-
- return priv->recv_audio_codecs;
-}
-
-GList *
-empathy_streamed_media_handler_get_recv_video_codecs (EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
-
- return priv->recv_video_codecs;
-}
-
-FsCandidate *
-empathy_streamed_media_handler_get_audio_remote_candidate (
- EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
-
- return priv->audio_remote_candidate;
-}
-
-FsCandidate *
-empathy_streamed_media_handler_get_audio_local_candidate (
- EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
-
- return priv->audio_local_candidate;
-}
-
-FsCandidate *
-empathy_streamed_media_handler_get_video_remote_candidate (
- EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
-
- return priv->video_remote_candidate;
-}
-
-FsCandidate *
-empathy_streamed_media_handler_get_video_local_candidate (
- EmpathyStreamedMediaHandler *self)
-{
- EmpathyStreamedMediaHandlerPriv *priv = GET_PRIV (self);
-
- return priv->video_local_candidate;
-}
diff --git a/src/empathy-streamed-media-handler.h b/src/empathy-streamed-media-handler.h
deleted file mode 100644
index 429c95447..000000000
--- a/src/empathy-streamed-media-handler.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * empathy-streamed-media-handler.h - Header for EmpathyStreamedMediaHandler
- * 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
- * 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_STREAMED_MEDIA_HANDLER_H__
-#define __EMPATHY_STREAMED_MEDIA_HANDLER_H__
-
-#include <glib-object.h>
-
-#include <gst/gst.h>
-#include <farstream/fs-conference.h>
-
-#include <libempathy/empathy-tp-streamed-media.h>
-#include <libempathy/empathy-contact.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyStreamedMediaHandler EmpathyStreamedMediaHandler;
-typedef struct _EmpathyStreamedMediaHandlerClass EmpathyStreamedMediaHandlerClass;
-
-struct _EmpathyStreamedMediaHandlerClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyStreamedMediaHandler {
- GObject parent;
- gpointer priv;
-};
-
-GType empathy_streamed_media_handler_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_STREAMED_MEDIA_HANDLER \
- (empathy_streamed_media_handler_get_type ())
-#define EMPATHY_STREAMED_MEDIA_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_STREAMED_MEDIA_HANDLER, \
- EmpathyStreamedMediaHandler))
-#define EMPATHY_STREAMED_MEDIA_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_STREAMED_MEDIA_HANDLER, \
- EmpathyStreamedMediaHandlerClass))
-#define EMPATHY_IS_STREAMED_MEDIA_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_STREAMED_MEDIA_HANDLER))
-#define EMPATHY_IS_STREAMED_MEDIA_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_STREAMED_MEDIA_HANDLER))
-#define EMPATHY_STREAMED_MEDIA_HANDLER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_STREAMED_MEDIA_HANDLER, \
- EmpathyStreamedMediaHandlerClass))
-
-EmpathyStreamedMediaHandler * empathy_streamed_media_handler_new_for_contact (
- EmpathyContact *contact);
-
-EmpathyStreamedMediaHandler * empathy_streamed_media_handler_new_for_channel (
- EmpathyTpStreamedMedia *call);
-
-void empathy_streamed_media_handler_start_call (EmpathyStreamedMediaHandler *handler,
- gint64 timestamp);
-void empathy_streamed_media_handler_stop_call (EmpathyStreamedMediaHandler *handler);
-
-gboolean empathy_streamed_media_handler_has_initial_video (EmpathyStreamedMediaHandler *handler);
-
-void empathy_streamed_media_handler_bus_message (EmpathyStreamedMediaHandler *handler,
- GstBus *bus, GstMessage *message);
-
-FsCodec * empathy_streamed_media_handler_get_send_audio_codec (
- EmpathyStreamedMediaHandler *self);
-
-FsCodec * empathy_streamed_media_handler_get_send_video_codec (
- EmpathyStreamedMediaHandler *self);
-
-GList * empathy_streamed_media_handler_get_recv_audio_codecs (
- EmpathyStreamedMediaHandler *self);
-
-GList * empathy_streamed_media_handler_get_recv_video_codecs (
- EmpathyStreamedMediaHandler *self);
-
-FsCandidate * empathy_streamed_media_handler_get_audio_remote_candidate (
- EmpathyStreamedMediaHandler *self);
-
-FsCandidate * empathy_streamed_media_handler_get_audio_local_candidate (
- EmpathyStreamedMediaHandler *self);
-
-FsCandidate * empathy_streamed_media_handler_get_video_remote_candidate (
- EmpathyStreamedMediaHandler *self);
-
-FsCandidate * empathy_streamed_media_handler_get_video_local_candidate (
- EmpathyStreamedMediaHandler *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_STREAMED_MEDIA_HANDLER_H__*/
diff --git a/src/empathy-streamed-media-window-fullscreen.c b/src/empathy-streamed-media-window-fullscreen.c
deleted file mode 100644
index caa34ffd1..000000000
--- a/src/empathy-streamed-media-window-fullscreen.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * empathy-streamed-media-window-fullscreen.c - Source for EmpathyStreamedMediaWindowFullscreen
- * Copyright (C) 2009 Collabora Ltd.
- *
- * Some code is based on the Totem Movie Player, especially
- * totem-fullscreen.c which has the following copyright:
- * Copyright (C) 2001-2007 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2007 Sunil Mohan Adapa <sunilmohan@gnu.org.in>
- *
- * 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-streamed-media-window-fullscreen.h"
-
-#include <gtk/gtk.h>
-
-#include <libempathy/empathy-utils.h>
-#include <libempathy-gtk/empathy-ui-utils.h>
-
-/* The number of seconds for which the "leave fullscreen" popup should
- be shown */
-#define FULLSCREEN_POPUP_TIMEOUT 5
-
-G_DEFINE_TYPE (EmpathyStreamedMediaWindowFullscreen, empathy_streamed_media_window_fullscreen,
- G_TYPE_OBJECT)
-
-/* private structure */
-typedef struct _EmpathyStreamedMediaWindowFullscreenPriv
- EmpathyStreamedMediaWindowFullscreenPriv;
-
-struct _EmpathyStreamedMediaWindowFullscreenPriv
-{
- EmpathyStreamedMediaWindow *parent_window;
-
- GtkWidget *leave_fullscreen_popup;
- GtkWidget *video_widget;
-
- guint popup_timeout;
- gboolean popup_creation_in_progress;
- gboolean dispose_has_run;
-};
-
-#define GET_PRIV(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, \
- EmpathyStreamedMediaWindowFullscreenPriv))
-
-static void empathy_streamed_media_window_fullscreen_dispose (GObject *object);
-static void empathy_streamed_media_window_fullscreen_finalize (GObject *object);
-
-static gboolean empathy_streamed_media_window_fullscreen_hide_popup (
- EmpathyStreamedMediaWindowFullscreen *fs);
-
-static void
-empathy_streamed_media_window_fullscreen_set_cursor_visible (
- EmpathyStreamedMediaWindowFullscreen *fs,
- gboolean show_cursor)
-{
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (fs);
- GdkWindow *window;
-
- if (priv->video_widget == NULL)
- return;
-
- window = gtk_widget_get_window (priv->video_widget);
-
- if (!show_cursor)
- gdk_window_set_cursor (window, gdk_cursor_new (GDK_BLANK_CURSOR));
- else
- gdk_window_set_cursor (window, NULL);
-}
-
-static void
-empathy_streamed_media_window_fullscreen_add_popup_timeout (
- EmpathyStreamedMediaWindowFullscreen *self)
-{
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
-
- if (priv->popup_timeout == 0)
- {
- priv->popup_timeout = g_timeout_add_seconds (FULLSCREEN_POPUP_TIMEOUT,
- (GSourceFunc) empathy_streamed_media_window_fullscreen_hide_popup, self);
- }
-}
-
-static void
-empathy_streamed_media_window_fullscreen_remove_popup_timeout (
- EmpathyStreamedMediaWindowFullscreen *self)
-{
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
-
- if (priv->popup_timeout != 0)
- {
- g_source_remove (priv->popup_timeout);
- priv->popup_timeout = 0;
- }
-}
-
-void
-empathy_streamed_media_window_fullscreen_show_popup (EmpathyStreamedMediaWindowFullscreen *self)
-{
- gint leave_fullscreen_width, leave_fullscreen_height;
- GdkScreen *screen;
- GdkRectangle fullscreen_rect;
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
-
- g_assert (self->is_fullscreen);
-
- g_return_if_fail (priv->parent_window != NULL);
-
- if (priv->popup_creation_in_progress)
- return;
-
- if (!gtk_window_is_active (GTK_WINDOW (priv->parent_window)))
- return;
-
- priv->popup_creation_in_progress = TRUE;
-
- empathy_streamed_media_window_fullscreen_set_cursor_visible (self, TRUE);
-
- /* Obtaining the screen rectangle */
- screen = gtk_window_get_screen (GTK_WINDOW (priv->parent_window));
- gdk_screen_get_monitor_geometry (screen,
- gdk_screen_get_monitor_at_window (screen,
- gtk_widget_get_window (GTK_WIDGET (priv->parent_window))),
- &fullscreen_rect);
-
- /* Getting the popup window sizes */
- gtk_window_get_size (GTK_WINDOW (priv->leave_fullscreen_popup),
- &leave_fullscreen_width, &leave_fullscreen_height);
-
- /* Moving the popup to the top-right corner (if the direction is LTR) or the
- top-left corner (if the direction is RTL).*/
- if (gtk_widget_get_direction (priv->leave_fullscreen_popup)
- == GTK_TEXT_DIR_LTR)
- {
- gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
- fullscreen_rect.width + fullscreen_rect.x - leave_fullscreen_width,
- fullscreen_rect.y);
-
- }
- else
- {
- gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
- fullscreen_rect.x, fullscreen_rect.y);
- }
-
- gtk_widget_show_all (priv->leave_fullscreen_popup);
- empathy_streamed_media_window_fullscreen_add_popup_timeout (self);
-
- priv->popup_creation_in_progress = FALSE;
-}
-
-static gboolean
-empathy_streamed_media_window_fullscreen_hide_popup (EmpathyStreamedMediaWindowFullscreen *fs)
-{
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (fs);
-
- if (priv->video_widget == NULL || !fs->is_fullscreen)
- return TRUE;
-
- gtk_widget_hide (priv->leave_fullscreen_popup);
- empathy_streamed_media_window_fullscreen_remove_popup_timeout (fs);
-
- empathy_streamed_media_window_fullscreen_set_cursor_visible (fs, FALSE);
-
- return FALSE;
-}
-
-static void
-empathy_streamed_media_window_fullscreen_init (EmpathyStreamedMediaWindowFullscreen *self)
-{
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
- GtkBuilder *gui;
- gchar *filename;
-
- filename = empathy_file_lookup ("empathy-call-window-fullscreen.ui", "src");
- gui = empathy_builder_get_file (filename,
- "leave_fullscreen_window", &priv->leave_fullscreen_popup,
- "leave_fullscreen_button", &self->leave_fullscreen_button,
- NULL);
-
- gtk_widget_add_events (priv->leave_fullscreen_popup, GDK_POINTER_MOTION_MASK);
-
- g_object_unref (gui);
- g_free (filename);
-}
-
-static void
-empathy_streamed_media_window_fullscreen_class_init (
- EmpathyStreamedMediaWindowFullscreenClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EmpathyStreamedMediaWindowFullscreenPriv));
-
- object_class->dispose = empathy_streamed_media_window_fullscreen_dispose;
- object_class->finalize = empathy_streamed_media_window_fullscreen_finalize;
-}
-
-void
-empathy_streamed_media_window_fullscreen_dispose (GObject *object)
-{
- EmpathyStreamedMediaWindowFullscreen *self = EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN (object);
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- if (priv->leave_fullscreen_popup != NULL)
- gtk_widget_destroy (priv->leave_fullscreen_popup);
- priv->leave_fullscreen_popup = NULL;
-
- if (G_OBJECT_CLASS (empathy_streamed_media_window_fullscreen_parent_class)->dispose)
- {
- G_OBJECT_CLASS (
- empathy_streamed_media_window_fullscreen_parent_class)->dispose (object);
- }
-}
-
-void
-empathy_streamed_media_window_fullscreen_finalize (GObject *object)
-{
- EmpathyStreamedMediaWindowFullscreen *self = EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN (object);
-
- empathy_streamed_media_window_fullscreen_remove_popup_timeout (self);
-
- G_OBJECT_CLASS (
- empathy_streamed_media_window_fullscreen_parent_class)->finalize (object);
-}
-
-static void
-empathy_streamed_media_window_fullscreen_parent_window_notify (GtkWidget *parent_window,
- GParamSpec *property, EmpathyStreamedMediaWindowFullscreen *fs)
-{
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (fs);
-
- if (!fs->is_fullscreen)
- return;
-
- if (parent_window == GTK_WIDGET (priv->parent_window) &&
- !gtk_window_is_active (GTK_WINDOW (parent_window)))
- {
- empathy_streamed_media_window_fullscreen_hide_popup (fs);
- empathy_streamed_media_window_fullscreen_set_cursor_visible (fs, TRUE);
- }
-}
-
-EmpathyStreamedMediaWindowFullscreen *
-empathy_streamed_media_window_fullscreen_new (EmpathyStreamedMediaWindow *parent_window)
-{
- EmpathyStreamedMediaWindowFullscreen *self = EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN (
- g_object_new (EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, NULL));
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
-
- priv->parent_window = parent_window;
- g_signal_connect (G_OBJECT (priv->parent_window), "notify::is-active",
- G_CALLBACK (empathy_streamed_media_window_fullscreen_parent_window_notify), self);
-
- return self;
-}
-
-void
-empathy_streamed_media_window_fullscreen_set_fullscreen (EmpathyStreamedMediaWindowFullscreen *fs,
- gboolean set_fullscreen)
-{
-
- if (set_fullscreen)
- empathy_streamed_media_window_fullscreen_remove_popup_timeout (fs);
- else
- empathy_streamed_media_window_fullscreen_hide_popup (fs);
-
- empathy_streamed_media_window_fullscreen_set_cursor_visible (fs, !set_fullscreen);
- fs->is_fullscreen = set_fullscreen;
-}
-
-static void
-video_widget_destroy_cb (GtkWidget *widget,
- EmpathyStreamedMediaWindowFullscreen *self)
-{
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
-
- priv->video_widget = NULL;
-}
-
-void
-empathy_streamed_media_window_fullscreen_set_video_widget (
- EmpathyStreamedMediaWindowFullscreen *fs,
- GtkWidget *video_widget)
-{
- EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (fs);
- priv->video_widget = video_widget;
-
- tp_g_signal_connect_object (video_widget, "destroy",
- G_CALLBACK (video_widget_destroy_cb), fs, 0);
-}
diff --git a/src/empathy-streamed-media-window-fullscreen.h b/src/empathy-streamed-media-window-fullscreen.h
deleted file mode 100644
index bdb95fb0b..000000000
--- a/src/empathy-streamed-media-window-fullscreen.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * empathy-streamed-media-window-fullscreen.h - Header for EmpathyStreamedMediaWindowFullscreen
- * 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_STREAMED_MEDIA_WINDOW_FULLSCREEN_H__
-#define __EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_H__
-
-#include <glib-object.h>
-#include <gtk/gtk.h>
-
-#include "empathy-streamed-media-window.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyStreamedMediaWindowFullscreen EmpathyStreamedMediaWindowFullscreen;
-typedef struct _EmpathyStreamedMediaWindowFullscreenClass
- EmpathyStreamedMediaWindowFullscreenClass;
-
-struct _EmpathyStreamedMediaWindowFullscreenClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyStreamedMediaWindowFullscreen {
- GObject parent;
- gboolean is_fullscreen;
- GtkWidget *leave_fullscreen_button;
-};
-
-GType empathy_streamed_media_window_fullscreen_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN \
- (empathy_streamed_media_window_fullscreen_get_type ())
-#define EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, \
- EmpathyStreamedMediaWindowFullscreen))
-#define EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, \
- EmpathyStreamedMediaWindowClassFullscreen))
-#define EMPATHY_IS_STREAMED_MEDIA_WINDOW_FULLSCREEN(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN))
-#define EMPATHY_IS_STREAMED_MEDIA_WINDOW_FULLSCREEN_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN))
-#define EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, \
- EmpathyStreamedMediaWindowFullscreenClass))
-
-EmpathyStreamedMediaWindowFullscreen *empathy_streamed_media_window_fullscreen_new (
- EmpathyStreamedMediaWindow *parent);
-
-void empathy_streamed_media_window_fullscreen_set_fullscreen (
- EmpathyStreamedMediaWindowFullscreen *fs,
- gboolean set_fullscreen);
-void empathy_streamed_media_window_fullscreen_set_video_widget (
- EmpathyStreamedMediaWindowFullscreen *fs,
- GtkWidget *video_widget);
-void empathy_streamed_media_window_fullscreen_show_popup (
- EmpathyStreamedMediaWindowFullscreen *fs);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_H__*/
diff --git a/src/empathy-streamed-media-window.c b/src/empathy-streamed-media-window.c
deleted file mode 100644
index 0984e5bb8..000000000
--- a/src/empathy-streamed-media-window.c
+++ /dev/null
@@ -1,3200 +0,0 @@
-/*
- * empathy-streamed-media-window.c - Source for EmpathyStreamedMediaWindow
- * 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
- * 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 <stdio.h>
-#include <stdlib.h>
-
-#include <math.h>
-
-#include <gdk/gdkkeysyms.h>
-#include <gst/gst.h>
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-
-#include <telepathy-glib/util.h>
-
-#include <telepathy-farstream/telepathy-farstream.h>
-
-#include <farstream/fs-element-added-notifier.h>
-#include <farstream/fs-utils.h>
-
-#include <libempathy/empathy-tp-contact-factory.h>
-#include <libempathy/empathy-utils.h>
-#include <libempathy-gtk/empathy-avatar-image.h>
-#include <libempathy-gtk/empathy-dialpad-widget.h>
-#include <libempathy-gtk/empathy-ui-utils.h>
-#include <libempathy-gtk/empathy-sound-manager.h>
-#include <libempathy-gtk/empathy-geometry.h>
-#include <libempathy-gtk/empathy-images.h>
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include <libempathy/empathy-debug.h>
-
-#include "empathy-streamed-media-window.h"
-#include "empathy-streamed-media-window-fullscreen.h"
-#include "empathy-video-widget.h"
-#include "empathy-audio-src.h"
-#include "empathy-audio-sink.h"
-#include "empathy-video-src.h"
-#include "ev-sidebar.h"
-
-#define CONTENT_HBOX_BORDER_WIDTH 6
-#define CONTENT_HBOX_SPACING 3
-#define CONTENT_HBOX_CHILDREN_PACKING_PADDING 3
-
-#define SELF_VIDEO_SECTION_WIDTH 160
-#define SELF_VIDEO_SECTION_HEIGTH 120
-
-/* The avatar's default width and height are set to the same value because we
- want a square icon. */
-#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(EmpathyStreamedMediaWindow, empathy_streamed_media_window, GTK_TYPE_WINDOW)
-
-/* signal enum */
-#if 0
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-#endif
-
-enum {
- PROP_STREAMED_MEDIA_HANDLER = 1,
-};
-
-typedef enum {
- CONNECTING,
- CONNECTED,
- DISCONNECTED,
- REDIALING
-} CallState;
-
-typedef enum {
- CAMERA_STATE_OFF = 0,
- CAMERA_STATE_PREVIEW,
- CAMERA_STATE_ON,
-} CameraState;
-
-/* private structure */
-typedef struct _EmpathyStreamedMediaWindowPriv EmpathyStreamedMediaWindowPriv;
-
-struct _EmpathyStreamedMediaWindowPriv
-{
- gboolean dispose_has_run;
- EmpathyStreamedMediaHandler *handler;
- EmpathyContact *contact;
-
- guint call_state;
- gboolean outgoing;
-
- GtkUIManager *ui_manager;
- GtkWidget *errors_vbox;
- /* widget displays the video received from the remote user. This widget is
- * alive only during call. */
- GtkWidget *video_output;
- GtkWidget *video_preview;
- GtkWidget *remote_user_avatar_widget;
- GtkWidget *self_user_avatar_widget;
- GtkWidget *sidebar;
- GtkWidget *sidebar_button;
- GtkWidget *statusbar;
- GtkWidget *volume_button;
- GtkWidget *redial_button;
- GtkWidget *mic_button;
- GtkWidget *toolbar;
- GtkWidget *pane;
- GtkAction *redial;
- GtkAction *menu_fullscreen;
- GtkAction *action_camera_on;
- GtkWidget *tool_button_camera_off;
- GtkWidget *tool_button_camera_preview;
- GtkWidget *tool_button_camera_on;
-
- /* 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 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;
- guint bus_message_source_id;
-
- gdouble volume;
- GtkWidget *volume_scale;
- GtkWidget *volume_progress_bar;
- GtkAdjustment *audio_input_adj;
-
- GtkWidget *dtmf_panel;
-
- /* Details vbox */
- GtkWidget *details_vbox;
- GtkWidget *vcodec_encoding_label;
- GtkWidget *acodec_encoding_label;
- GtkWidget *vcodec_decoding_label;
- GtkWidget *acodec_decoding_label;
-
- GtkWidget *audio_remote_candidate_label;
- GtkWidget *audio_local_candidate_label;
- GtkWidget *video_remote_candidate_label;
- GtkWidget *video_local_candidate_label;
- GtkWidget *video_remote_candidate_info_img;
- GtkWidget *video_local_candidate_info_img;
- GtkWidget *audio_remote_candidate_info_img;
- GtkWidget *audio_local_candidate_info_img;
-
- GstElement *video_input;
- GstElement *audio_input;
- GstElement *audio_output;
- GstElement *pipeline;
- GstElement *video_tee;
-
- GstElement *funnel;
-
- FsElementAddedNotifier *fsnotifier;
-
- guint context_id;
-
- GTimer *timer;
- guint timer_id;
-
- GtkWidget *video_contrast;
- GtkWidget *video_brightness;
- GtkWidget *video_gamma;
-
- GMutex *lock;
- gboolean call_started;
- gboolean sending_video;
- CameraState camera_state;
-
- EmpathyStreamedMediaWindowFullscreen *fullscreen;
- gboolean is_fullscreen;
-
- /* Those fields represent the state of the window before it actually was in
- fullscreen mode. */
- gboolean sidebar_was_visible_before_fs;
- gint original_width_before_fs;
- gint original_height_before_fs;
-
- /* TRUE if the call should be started when the pipeline is playing */
- gboolean start_call_when_playing;
- /* TRUE if we requested to set the pipeline in the playing state */
- gboolean pipeline_playing;
-
- EmpathySoundManager *sound_mgr;
-};
-
-#define GET_PRIV(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW, \
- EmpathyStreamedMediaWindowPriv))
-
-static void empathy_streamed_media_window_realized_cb (GtkWidget *widget,
- EmpathyStreamedMediaWindow *window);
-
-static gboolean empathy_streamed_media_window_delete_cb (GtkWidget *widget,
- GdkEvent *event, EmpathyStreamedMediaWindow *window);
-
-static gboolean empathy_streamed_media_window_state_event_cb (GtkWidget *widget,
- GdkEventWindowState *event, EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_sidebar_toggled_cb (GtkToggleButton *toggle,
- EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_set_send_video (EmpathyStreamedMediaWindow *window,
- CameraState state);
-
-static void empathy_streamed_media_window_mic_toggled_cb (
- GtkToggleToolButton *toggle, EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_sidebar_hidden_cb (EvSidebar *sidebar,
- EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_sidebar_shown_cb (EvSidebar *sidebar,
- EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_hangup_cb (gpointer object,
- EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_fullscreen_cb (gpointer object,
- EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_fullscreen_toggle (EmpathyStreamedMediaWindow *window);
-
-static gboolean empathy_streamed_media_window_video_button_press_cb (
- GtkWidget *video_output, GdkEventButton *event, EmpathyStreamedMediaWindow *window);
-
-static gboolean empathy_streamed_media_window_key_press_cb (GtkWidget *video_output,
- GdkEventKey *event, EmpathyStreamedMediaWindow *window);
-
-static gboolean empathy_streamed_media_window_video_output_motion_notify (
- GtkWidget *widget, GdkEventMotion *event, EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_video_menu_popup (EmpathyStreamedMediaWindow *window,
- guint button);
-
-static void empathy_streamed_media_window_redial_cb (gpointer object,
- EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_restart_call (EmpathyStreamedMediaWindow *window);
-
-static void empathy_streamed_media_window_status_message (EmpathyStreamedMediaWindow *window,
- gchar *message);
-
-static void empathy_streamed_media_window_update_avatars_visibility (EmpathyTpStreamedMedia *call,
- EmpathyStreamedMediaWindow *window);
-
-static gboolean empathy_streamed_media_window_bus_message (GstBus *bus,
- GstMessage *message, gpointer user_data);
-
-static void
-empathy_streamed_media_window_volume_changed_cb (GtkScaleButton *button,
- gdouble value, EmpathyStreamedMediaWindow *window);
-
-static void block_camera_control_signals (EmpathyStreamedMediaWindow *self);
-static void unblock_camera_control_signals (EmpathyStreamedMediaWindow *self);
-
-static void
-empathy_streamed_media_window_setup_toolbar (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GtkToolItem *tool_item;
- GtkWidget *camera_off_icon;
- GdkPixbuf *pixbuf, *modded_pixbuf;
-
- /* set the icon of the 'camera off' button by greying off the webcam icon */
- pixbuf = empathy_pixbuf_from_icon_name ("camera-web",
- GTK_ICON_SIZE_SMALL_TOOLBAR);
-
- modded_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
- gdk_pixbuf_get_width (pixbuf),
- gdk_pixbuf_get_height (pixbuf));
-
- gdk_pixbuf_saturate_and_pixelate (pixbuf, modded_pixbuf, 1.0, TRUE);
- g_object_unref (pixbuf);
-
- camera_off_icon = gtk_image_new_from_pixbuf (modded_pixbuf);
- g_object_unref (modded_pixbuf);
- gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (
- priv->tool_button_camera_off), camera_off_icon);
-
- /* Add an empty expanded GtkToolItem so the volume button is at the end of
- * the toolbar. */
- tool_item = gtk_tool_item_new ();
- gtk_tool_item_set_expand (tool_item, TRUE);
- gtk_widget_show (GTK_WIDGET (tool_item));
- gtk_toolbar_insert (GTK_TOOLBAR (priv->toolbar), tool_item, -1);
-
- priv->volume_button = gtk_volume_button_new ();
- /* FIXME listen to the audiosinks signals and update the button according to
- * that, for now starting out at 1.0 and assuming only the app changes the
- * volume will do */
- gtk_scale_button_set_value (GTK_SCALE_BUTTON (priv->volume_button), 1.0);
- g_signal_connect (G_OBJECT (priv->volume_button), "value-changed",
- G_CALLBACK (empathy_streamed_media_window_volume_changed_cb), self);
-
- tool_item = gtk_tool_item_new ();
- gtk_container_add (GTK_CONTAINER (tool_item), priv->volume_button);
- gtk_widget_show_all (GTK_WIDGET (tool_item));
- gtk_toolbar_insert (GTK_TOOLBAR (priv->toolbar), tool_item, -1);
-}
-
-static void
-dtmf_start_tone_cb (EmpathyDialpadWidget *dialpad,
- TpDTMFEvent event,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
- EmpathyTpStreamedMedia *call;
-
- g_object_get (priv->handler, "tp-call", &call, NULL);
-
- empathy_tp_streamed_media_start_tone (call, event);
-
- g_object_unref (call);
-}
-
-static void
-dtmf_stop_tone_cb (EmpathyDialpadWidget *self,
- TpDTMFEvent event,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
- EmpathyTpStreamedMedia *call;
-
- g_object_get (priv->handler, "tp-call", &call, NULL);
-
- empathy_tp_streamed_media_stop_tone (call);
-
- g_object_unref (call);
-}
-
-static GtkWidget *
-empathy_streamed_media_window_create_video_input_add_slider (EmpathyStreamedMediaWindow *self,
- gchar *label_text, GtkWidget *bin)
-{
- GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
- GtkWidget *scale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, 0,
- 100, 10);
- GtkWidget *label = gtk_label_new (label_text);
-
- gtk_widget_set_sensitive (scale, FALSE);
-
- gtk_container_add (GTK_CONTAINER (bin), vbox);
-
- gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
- gtk_box_pack_start (GTK_BOX (vbox), scale, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
-
- return scale;
-}
-
-static void
-empathy_streamed_media_window_video_contrast_changed_cb (GtkAdjustment *adj,
- EmpathyStreamedMediaWindow *self)
-
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- empathy_video_src_set_channel (priv->video_input,
- EMPATHY_GST_VIDEO_SRC_CHANNEL_CONTRAST, gtk_adjustment_get_value (adj));
-}
-
-static void
-empathy_streamed_media_window_video_brightness_changed_cb (GtkAdjustment *adj,
- EmpathyStreamedMediaWindow *self)
-
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- empathy_video_src_set_channel (priv->video_input,
- EMPATHY_GST_VIDEO_SRC_CHANNEL_BRIGHTNESS, gtk_adjustment_get_value (adj));
-}
-
-static void
-empathy_streamed_media_window_video_gamma_changed_cb (GtkAdjustment *adj,
- EmpathyStreamedMediaWindow *self)
-
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- empathy_video_src_set_channel (priv->video_input,
- EMPATHY_GST_VIDEO_SRC_CHANNEL_GAMMA, gtk_adjustment_get_value (adj));
-}
-
-
-static GtkWidget *
-empathy_streamed_media_window_create_video_input (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GtkWidget *hbox;
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
- gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
-
- priv->video_contrast = empathy_streamed_media_window_create_video_input_add_slider (
- self, _("Contrast"), hbox);
-
- priv->video_brightness = empathy_streamed_media_window_create_video_input_add_slider (
- self, _("Brightness"), hbox);
-
- priv->video_gamma = empathy_streamed_media_window_create_video_input_add_slider (
- self, _("Gamma"), hbox);
-
- return hbox;
-}
-
-static void
-empathy_streamed_media_window_setup_video_input (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- guint supported;
- GtkAdjustment *adj;
-
- supported = empathy_video_src_get_supported_channels (priv->video_input);
-
- if (supported & EMPATHY_GST_VIDEO_SRC_SUPPORTS_CONTRAST)
- {
- adj = gtk_range_get_adjustment (GTK_RANGE (priv->video_contrast));
-
- gtk_adjustment_set_value (adj,
- empathy_video_src_get_channel (priv->video_input,
- EMPATHY_GST_VIDEO_SRC_CHANNEL_CONTRAST));
-
- g_signal_connect (G_OBJECT (adj), "value-changed",
- G_CALLBACK (empathy_streamed_media_window_video_contrast_changed_cb), self);
-
- gtk_widget_set_sensitive (priv->video_contrast, TRUE);
- }
-
- if (supported & EMPATHY_GST_VIDEO_SRC_SUPPORTS_BRIGHTNESS)
- {
- adj = gtk_range_get_adjustment (GTK_RANGE (priv->video_brightness));
-
- gtk_adjustment_set_value (adj,
- empathy_video_src_get_channel (priv->video_input,
- EMPATHY_GST_VIDEO_SRC_CHANNEL_BRIGHTNESS));
-
- g_signal_connect (G_OBJECT (adj), "value-changed",
- G_CALLBACK (empathy_streamed_media_window_video_brightness_changed_cb), self);
- gtk_widget_set_sensitive (priv->video_brightness, TRUE);
- }
-
- if (supported & EMPATHY_GST_VIDEO_SRC_SUPPORTS_GAMMA)
- {
- adj = gtk_range_get_adjustment (GTK_RANGE (priv->video_gamma));
-
- gtk_adjustment_set_value (adj,
- empathy_video_src_get_channel (priv->video_input,
- EMPATHY_GST_VIDEO_SRC_CHANNEL_GAMMA));
-
- g_signal_connect (G_OBJECT (adj), "value-changed",
- G_CALLBACK (empathy_streamed_media_window_video_gamma_changed_cb), self);
- gtk_widget_set_sensitive (priv->video_gamma, TRUE);
- }
-}
-
-static void
-empathy_streamed_media_window_mic_volume_changed_cb (GtkAdjustment *adj,
- EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- gdouble volume;
-
- volume = gtk_adjustment_get_value (adj)/100.0;
-
- /* Don't store the volume because of muting */
- if (volume > 0 || gtk_toggle_tool_button_get_active (
- GTK_TOGGLE_TOOL_BUTTON (priv->mic_button)))
- priv->volume = volume;
-
- /* Ensure that the toggle button is active if the volume is > 0 and inactive
- * 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 (
- GTK_TOGGLE_TOOL_BUTTON (priv->mic_button), volume > 0);
-
- empathy_audio_src_set_volume (EMPATHY_GST_AUDIO_SRC (priv->audio_input),
- volume);
-}
-
-static void
-empathy_streamed_media_window_audio_input_level_changed_cb (EmpathyGstAudioSrc *src,
- gdouble level, EmpathyStreamedMediaWindow *window)
-{
- gdouble value;
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- value = CLAMP (pow (10, level / 20), 0.0, 1.0);
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->volume_progress_bar),
- value);
-}
-
-static GtkWidget *
-empathy_streamed_media_window_create_audio_input (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GtkWidget *hbox, *vbox, *label;
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
- gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 3);
-
- priv->volume_scale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, 0,
- 150, 100);
- gtk_range_set_inverted (GTK_RANGE (priv->volume_scale), TRUE);
- label = gtk_label_new (_("Volume"));
-
- priv->audio_input_adj = gtk_range_get_adjustment (
- GTK_RANGE (priv->volume_scale));
- priv->volume = empathy_audio_src_get_volume (EMPATHY_GST_AUDIO_SRC
- (priv->audio_input));
- gtk_adjustment_set_value (priv->audio_input_adj, priv->volume * 100);
-
- g_signal_connect (G_OBJECT (priv->audio_input_adj), "value-changed",
- G_CALLBACK (empathy_streamed_media_window_mic_volume_changed_cb), self);
-
- gtk_box_pack_start (GTK_BOX (vbox), priv->volume_scale, TRUE, TRUE, 3);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 3);
-
- priv->volume_progress_bar = gtk_progress_bar_new ();
-
- gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->volume_progress_bar),
- GTK_ORIENTATION_VERTICAL);
-
- 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
-create_video_output_widget (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstBus *bus;
-
- g_assert (priv->video_output == NULL);
- g_assert (priv->pipeline != NULL);
-
- bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
- 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_streamed_media_window_video_button_press_cb), self);
-
- g_object_unref (bus);
-}
-
-static void
-create_video_input (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- g_assert (priv->video_input == NULL);
- priv->video_input = empathy_video_src_new ();
- gst_object_ref_sink (priv->video_input);
-}
-
-static void
-create_audio_input (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- g_assert (priv->audio_input == NULL);
- priv->audio_input = empathy_audio_src_new ();
- gst_object_ref_sink (priv->audio_input);
-
- tp_g_signal_connect_object (priv->audio_input, "peak-level-changed",
- G_CALLBACK (empathy_streamed_media_window_audio_input_level_changed_cb),
- self, 0);
-}
-
-static void
-add_video_preview_to_pipeline (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstElement *preview;
-
- g_assert (priv->video_preview != NULL);
- g_assert (priv->pipeline != NULL);
- g_assert (priv->video_input != NULL);
- g_assert (priv->video_tee != NULL);
-
- preview = empathy_video_widget_get_element (
- EMPATHY_VIDEO_WIDGET (priv->video_preview));
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->video_input))
- {
- g_warning ("Could not add video input to pipeline");
- return;
- }
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->video_tee))
- {
- g_warning ("Could not add video tee to pipeline");
- return;
- }
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), preview))
- {
- g_warning ("Could not add video preview to pipeline");
- return;
- }
-
- if (!gst_element_link (priv->video_input, priv->video_tee))
- {
- g_warning ("Could not link video input to video tee");
- return;
- }
-
- if (!gst_element_link (priv->video_tee, preview))
- {
- g_warning ("Could not link video tee to video preview");
- return;
- }
-}
-
-static void
-create_video_preview (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstBus *bus;
-
- g_assert (priv->video_preview == NULL);
- g_assert (priv->video_tee == NULL);
-
- bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
-
- 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,
- "flip-video", TRUE,
- NULL);
-
- gtk_box_pack_start (GTK_BOX (priv->self_user_output_hbox),
- priv->video_preview, TRUE, TRUE, 0);
-
- priv->video_tee = gst_element_factory_make ("tee", NULL);
- gst_object_ref_sink (priv->video_tee);
-
- g_object_unref (bus);
-}
-
-static void
-play_camera (EmpathyStreamedMediaWindow *window,
- gboolean play)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
- GstElement *preview;
- GstState state;
-
- if (priv->video_preview == NULL)
- {
- create_video_preview (window);
- add_video_preview_to_pipeline (window);
- }
-
- if (play)
- state = GST_STATE_PLAYING;
- else
- state = GST_STATE_NULL;
-
- preview = empathy_video_widget_get_element (
- EMPATHY_VIDEO_WIDGET (priv->video_preview));
-
- gst_element_set_state (preview, state);
- gst_element_set_state (priv->video_input, state);
- gst_element_set_state (priv->video_tee, state);
-}
-
-static void
-display_video_preview (EmpathyStreamedMediaWindow *self,
- gboolean display)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (display)
- {
- /* Display the preview and hide the self avatar */
- DEBUG ("Show video preview");
-
- play_camera (self, TRUE);
- gtk_widget_show (priv->video_preview);
- gtk_widget_hide (priv->self_user_avatar_widget);
- }
- else
- {
- /* Display the self avatar and hide the preview */
- DEBUG ("Show self avatar");
-
- if (priv->video_preview != NULL)
- {
- gtk_widget_hide (priv->video_preview);
- play_camera (self, FALSE);
- }
- gtk_widget_show (priv->self_user_avatar_widget);
- }
-}
-
-static void
-empathy_streamed_media_window_set_state_connecting (EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- empathy_streamed_media_window_status_message (window, _("Connecting…"));
- priv->call_state = CONNECTING;
-
- if (priv->outgoing)
- empathy_sound_manager_start_playing (priv->sound_mgr, GTK_WIDGET (window),
- EMPATHY_SOUND_PHONE_OUTGOING, MS_BETWEEN_RING);
-}
-
-static void
-disable_camera (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (priv->camera_state == CAMERA_STATE_OFF)
- return;
-
- DEBUG ("Disable camera");
-
- display_video_preview (self, FALSE);
-
- if (priv->camera_state == CAMERA_STATE_ON)
- empathy_streamed_media_window_set_send_video (self, CAMERA_STATE_OFF);
-
- block_camera_control_signals (self);
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_on), FALSE);
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_preview), FALSE);
-
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_off), TRUE);
- gtk_radio_action_set_current_value (GTK_RADIO_ACTION (priv->action_camera_on),
- CAMERA_STATE_OFF);
- unblock_camera_control_signals (self);
-
- priv->camera_state = CAMERA_STATE_OFF;
-}
-
-static void
-tool_button_camera_off_toggled_cb (GtkToggleToolButton *toggle,
- EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (!gtk_toggle_tool_button_get_active (toggle))
- {
- if (priv->camera_state == CAMERA_STATE_OFF)
- {
- /* We can't change the state by disabling the button */
- block_camera_control_signals (self);
- gtk_toggle_tool_button_set_active (toggle, TRUE);
- unblock_camera_control_signals (self);
- }
-
- return;
- }
-
- disable_camera (self);
-}
-
-static void
-enable_preview (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (priv->camera_state == CAMERA_STATE_PREVIEW)
- return;
-
- DEBUG ("Enable preview");
-
- if (priv->camera_state == CAMERA_STATE_ON)
- {
- /* preview is already displayed so we just have to stop sending */
- empathy_streamed_media_window_set_send_video (self, CAMERA_STATE_PREVIEW);
- }
- else
- {
- display_video_preview (self, TRUE);
- }
-
- block_camera_control_signals (self);
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_off), FALSE);
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_on), FALSE);
-
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_preview), TRUE);
- gtk_radio_action_set_current_value (GTK_RADIO_ACTION (priv->action_camera_on),
- CAMERA_STATE_PREVIEW);
- unblock_camera_control_signals (self);
-
- priv->camera_state = CAMERA_STATE_PREVIEW;
-}
-
-static void
-tool_button_camera_preview_toggled_cb (GtkToggleToolButton *toggle,
- EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (!gtk_toggle_tool_button_get_active (toggle))
- {
- if (priv->camera_state == CAMERA_STATE_PREVIEW)
- {
- /* We can't change the state by disabling the button */
- block_camera_control_signals (self);
- gtk_toggle_tool_button_set_active (toggle, TRUE);
- unblock_camera_control_signals (self);
- }
-
- return;
- }
-
- enable_preview (self);
-}
-
-static void
-enable_camera (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (priv->camera_state == CAMERA_STATE_ON)
- return;
-
- if (priv->video_input == NULL)
- {
- DEBUG ("Can't enable camera, no input");
- return;
- }
-
-
- DEBUG ("Enable camera");
-
- empathy_streamed_media_window_set_send_video (self, CAMERA_STATE_ON);
-
- block_camera_control_signals (self);
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_off), FALSE);
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_preview), FALSE);
-
- gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
- priv->tool_button_camera_on), TRUE);
- gtk_radio_action_set_current_value (GTK_RADIO_ACTION (priv->action_camera_on),
- CAMERA_STATE_ON);
- unblock_camera_control_signals (self);
-
- priv->camera_state = CAMERA_STATE_ON;
-}
-
-static void
-tool_button_camera_on_toggled_cb (GtkToggleToolButton *toggle,
- EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (!gtk_toggle_tool_button_get_active (toggle))
- {
- if (priv->camera_state == CAMERA_STATE_ON)
- {
- /* We can't change the state by disabling the button */
- block_camera_control_signals (self);
- gtk_toggle_tool_button_set_active (toggle, TRUE);
- unblock_camera_control_signals (self);
- }
-
- return;
- }
-
- enable_camera (self);
-}
-
-static void
-action_camera_change_cb (GtkRadioAction *action,
- GtkRadioAction *current,
- EmpathyStreamedMediaWindow *self)
-{
- CameraState state;
-
- state = gtk_radio_action_get_current_value (current);
-
- switch (state)
- {
- case CAMERA_STATE_OFF:
- disable_camera (self);
- break;
-
- case CAMERA_STATE_PREVIEW:
- enable_preview (self);
- break;
-
- case CAMERA_STATE_ON:
- enable_camera (self);
- break;
-
- default:
- g_assert_not_reached ();
- }
-}
-
-static void
-create_pipeline (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstBus *bus;
-
- g_assert (priv->pipeline == NULL);
-
- priv->pipeline = gst_pipeline_new (NULL);
- priv->pipeline_playing = FALSE;
-
- bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
- priv->bus_message_source_id = gst_bus_add_watch (bus,
- empathy_streamed_media_window_bus_message, self);
-
- g_object_unref (bus);
-}
-
-
-static void
-empathy_streamed_media_window_init (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GtkBuilder *gui;
- GtkWidget *top_vbox;
- GtkWidget *h;
- GtkWidget *arrow;
- GtkWidget *page;
- gchar *filename;
- GtkWidget *scroll;
-
- filename = empathy_file_lookup ("empathy-streamed-media-window.ui", "src");
- gui = empathy_builder_get_file (filename,
- "call_window_vbox", &top_vbox,
- "errors_vbox", &priv->errors_vbox,
- "pane", &priv->pane,
- "statusbar", &priv->statusbar,
- "redial", &priv->redial_button,
- "microphone", &priv->mic_button,
- "toolbar", &priv->toolbar,
- "menuredial", &priv->redial,
- "ui_manager", &priv->ui_manager,
- "menufullscreen", &priv->menu_fullscreen,
- "camera_off", &priv->tool_button_camera_off,
- "camera_preview", &priv->tool_button_camera_preview,
- "camera_on", &priv->tool_button_camera_on,
- "action_camera_on", &priv->action_camera_on,
- "details_vbox", &priv->details_vbox,
- "vcodec_encoding_label", &priv->vcodec_encoding_label,
- "acodec_encoding_label", &priv->acodec_encoding_label,
- "acodec_decoding_label", &priv->acodec_decoding_label,
- "vcodec_decoding_label", &priv->vcodec_decoding_label,
- "audio_remote_candidate_label", &priv->audio_remote_candidate_label,
- "audio_local_candidate_label", &priv->audio_local_candidate_label,
- "video_remote_candidate_label", &priv->video_remote_candidate_label,
- "video_local_candidate_label", &priv->video_local_candidate_label,
- "video_remote_candidate_info_img", &priv->video_remote_candidate_info_img,
- "video_local_candidate_info_img", &priv->video_local_candidate_info_img,
- "audio_remote_candidate_info_img", &priv->audio_remote_candidate_info_img,
- "audio_local_candidate_info_img", &priv->audio_local_candidate_info_img,
- NULL);
- g_free (filename);
-
- empathy_builder_connect (gui, self,
- "menuhangup", "activate", empathy_streamed_media_window_hangup_cb,
- "hangup", "clicked", empathy_streamed_media_window_hangup_cb,
- "menuredial", "activate", empathy_streamed_media_window_redial_cb,
- "redial", "clicked", empathy_streamed_media_window_redial_cb,
- "microphone", "toggled", empathy_streamed_media_window_mic_toggled_cb,
- "menufullscreen", "activate", empathy_streamed_media_window_fullscreen_cb,
- "camera_off", "toggled", tool_button_camera_off_toggled_cb,
- "camera_preview", "toggled", tool_button_camera_preview_toggled_cb,
- "camera_on", "toggled", tool_button_camera_on_toggled_cb,
- "action_camera_on", "changed", action_camera_change_cb,
- NULL);
-
- gtk_action_set_sensitive (priv->menu_fullscreen, FALSE);
-
- priv->lock = g_mutex_new ();
-
- gtk_container_add (GTK_CONTAINER (self), top_vbox);
-
- priv->content_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,
- 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);
-
- /* 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);
- gtk_box_pack_start (GTK_BOX (priv->content_hbox),
- priv->remote_user_output_frame, TRUE, TRUE,
- CONTENT_HBOX_CHILDREN_PACKING_PADDING);
-
- priv->remote_user_output_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 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);
-
- gtk_container_add (GTK_CONTAINER (priv->remote_user_output_frame),
- priv->remote_user_output_hbox);
-
- /* self user output frame */
- 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->self_user_output_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 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);
-
- create_pipeline (self);
- create_video_output_widget (self);
- create_audio_input (self);
- create_video_input (self);
-
- priv->fsnotifier = fs_element_added_notifier_new ();
- fs_element_added_notifier_add (priv->fsnotifier, GST_BIN (priv->pipeline));
-
- /* The call will be started as soon the pipeline is playing */
- priv->start_call_when_playing = TRUE;
-
- priv->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
- gtk_box_pack_start (GTK_BOX (priv->content_hbox), priv->vbox,
- FALSE, FALSE, CONTENT_HBOX_CHILDREN_PACKING_PADDING);
- gtk_box_pack_start (GTK_BOX (priv->vbox), priv->self_user_output_frame,
- FALSE, FALSE, 0);
-
- empathy_streamed_media_window_setup_toolbar (self);
-
- priv->sidebar_button = gtk_toggle_button_new_with_mnemonic (_("_Sidebar"));
- arrow = gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
- g_signal_connect (G_OBJECT (priv->sidebar_button), "toggled",
- G_CALLBACK (empathy_streamed_media_window_sidebar_toggled_cb), self);
-
- gtk_button_set_image (GTK_BUTTON (priv->sidebar_button), arrow);
-
- h = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
- gtk_box_pack_end (GTK_BOX (priv->vbox), h, FALSE, FALSE, 3);
- gtk_box_pack_end (GTK_BOX (h), priv->sidebar_button, FALSE, FALSE, 3);
-
- priv->sidebar = ev_sidebar_new ();
- g_signal_connect (G_OBJECT (priv->sidebar),
- "hide", G_CALLBACK (empathy_streamed_media_window_sidebar_hidden_cb), self);
- g_signal_connect (G_OBJECT (priv->sidebar),
- "show", G_CALLBACK (empathy_streamed_media_window_sidebar_shown_cb), self);
- gtk_paned_pack2 (GTK_PANED (priv->pane), priv->sidebar, FALSE, FALSE);
-
- page = empathy_streamed_media_window_create_audio_input (self);
- ev_sidebar_add_page (EV_SIDEBAR (priv->sidebar), "audio-input",
- _("Audio input"), page);
-
- page = empathy_streamed_media_window_create_video_input (self);
- ev_sidebar_add_page (EV_SIDEBAR (priv->sidebar), "video-input",
- _("Video input"), page);
-
- priv->dtmf_panel = empathy_dialpad_widget_new ();
- g_signal_connect (priv->dtmf_panel, "start-tone",
- G_CALLBACK (dtmf_start_tone_cb), self);
- g_signal_connect (priv->dtmf_panel, "stop-tone",
- G_CALLBACK (dtmf_stop_tone_cb), self);
- ev_sidebar_add_page (EV_SIDEBAR (priv->sidebar), "dialpad",
- _("Dialpad"), priv->dtmf_panel);
-
- gtk_widget_set_sensitive (priv->dtmf_panel, FALSE);
-
- /* Put the details vbox in a scroll window as it can require a lot of
- * horizontal space. */
- scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll),
- priv->details_vbox);
-
- ev_sidebar_add_page (EV_SIDEBAR (priv->sidebar), "details",
- _("Details"), scroll);
-
- gtk_widget_show_all (top_vbox);
-
- gtk_widget_hide (priv->sidebar);
-
- priv->fullscreen = empathy_streamed_media_window_fullscreen_new (self);
- empathy_streamed_media_window_fullscreen_set_video_widget (priv->fullscreen,
- priv->video_output);
- g_signal_connect (G_OBJECT (priv->fullscreen->leave_fullscreen_button),
- "clicked", G_CALLBACK (empathy_streamed_media_window_fullscreen_cb), self);
-
- g_signal_connect (G_OBJECT (self), "realize",
- G_CALLBACK (empathy_streamed_media_window_realized_cb), self);
-
- g_signal_connect (G_OBJECT (self), "delete-event",
- G_CALLBACK (empathy_streamed_media_window_delete_cb), self);
-
- g_signal_connect (G_OBJECT (self), "window-state-event",
- G_CALLBACK (empathy_streamed_media_window_state_event_cb), self);
-
- g_signal_connect (G_OBJECT (self), "key-press-event",
- G_CALLBACK (empathy_streamed_media_window_key_press_cb), self);
-
- priv->timer = g_timer_new ();
-
- g_object_ref (priv->ui_manager);
- g_object_unref (gui);
-
- priv->sound_mgr = empathy_sound_manager_dup_singleton ();
-
- empathy_geometry_bind (GTK_WINDOW (self), "av-window");
-}
-
-/* Instead of specifying a width and a height, we specify only one size. That's
- because we want a square avatar icon. */
-static void
-init_contact_avatar_with_size (EmpathyContact *contact,
- GtkWidget *image_widget,
- gint size)
-{
- GdkPixbuf *pixbuf_avatar = NULL;
-
- if (contact != NULL)
- {
- pixbuf_avatar = empathy_pixbuf_avatar_from_contact_scaled (contact,
- size, size);
- }
-
- if (pixbuf_avatar == NULL)
- {
- pixbuf_avatar = empathy_pixbuf_from_icon_name_sized (
- EMPATHY_IMAGE_AVATAR_DEFAULT, size);
- }
-
- gtk_image_set_from_pixbuf (GTK_IMAGE (image_widget), pixbuf_avatar);
-
- if (pixbuf_avatar != NULL)
- g_object_unref (pixbuf_avatar);
-}
-
-static void
-set_window_title (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- gchar *tmp;
-
- /* translators: Call is a noun and %s is the contact name. This string
- * is used in the window title */
- tmp = g_strdup_printf (_("Call with %s"),
- empathy_contact_get_alias (priv->contact));
- gtk_window_set_title (GTK_WINDOW (self), tmp);
- g_free (tmp);
-}
-
-static void
-contact_name_changed_cb (EmpathyContact *contact,
- GParamSpec *pspec, EmpathyStreamedMediaWindow *self)
-{
- set_window_title (self);
-}
-
-static void
-contact_avatar_changed_cb (EmpathyContact *contact,
- GParamSpec *pspec, GtkWidget *avatar_widget)
-{
- int size;
- GtkAllocation allocation;
-
- gtk_widget_get_allocation (avatar_widget, &allocation);
- size = allocation.height;
-
- if (size == 0)
- {
- /* the widget is not allocated yet, set a default size */
- size = MIN (REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT,
- REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH);
- }
-
- init_contact_avatar_with_size (contact, avatar_widget, size);
-}
-
-static void
-empathy_streamed_media_window_got_self_contact_cb (TpConnection *connection,
- EmpathyContact *contact, const GError *error, gpointer user_data,
- GObject *weak_object)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- init_contact_avatar_with_size (contact, priv->self_user_avatar_widget,
- MIN (SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGTH));
-
- g_signal_connect (contact, "notify::avatar",
- G_CALLBACK (contact_avatar_changed_cb), priv->self_user_avatar_widget);
-}
-
-static void
-empathy_streamed_media_window_setup_avatars (EmpathyStreamedMediaWindow *self,
- EmpathyStreamedMediaHandler *handler)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- g_object_get (handler, "contact", &(priv->contact), NULL);
-
- if (priv->contact != NULL)
- {
- TpConnection *connection;
-
- set_window_title (self);
-
- g_signal_connect (priv->contact, "notify::name",
- G_CALLBACK (contact_name_changed_cb), self);
- g_signal_connect (priv->contact, "notify::avatar",
- G_CALLBACK (contact_avatar_changed_cb),
- priv->remote_user_avatar_widget);
-
- /* Retreiving the self avatar */
- connection = empathy_contact_get_connection (priv->contact);
- empathy_tp_contact_factory_get_from_handle (connection,
- tp_connection_get_self_handle (connection),
- empathy_streamed_media_window_got_self_contact_cb, self, NULL, G_OBJECT (self));
- }
- else
- {
- g_warning ("call handler doesn't have a contact");
- /* translators: Call is a noun. This string is used in the window
- * title */
- gtk_window_set_title (GTK_WINDOW (self), _("Call"));
-
- /* Since we can't access the remote contact, we can't get a connection
- to it and can't get the self contact (and its avatar). This means
- that we have to manually set the self avatar. */
- init_contact_avatar_with_size (NULL, priv->self_user_avatar_widget,
- MIN (SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGTH));
- }
-
- init_contact_avatar_with_size (priv->contact,
- priv->remote_user_avatar_widget,
- MIN (REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH,
- REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT));
-
- /* 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
-update_send_codec (EmpathyStreamedMediaWindow *self,
- gboolean audio)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- FsCodec *codec;
- GtkWidget *widget;
- gchar *tmp;
-
- if (audio)
- {
- codec = empathy_streamed_media_handler_get_send_audio_codec (priv->handler);
- widget = priv->acodec_encoding_label;
- }
- else
- {
- codec = empathy_streamed_media_handler_get_send_video_codec (priv->handler);
- widget = priv->vcodec_encoding_label;
- }
-
- if (codec == NULL)
- return;
-
- tmp = g_strdup_printf ("%s/%u", codec->encoding_name, codec->clock_rate);
- gtk_label_set_text (GTK_LABEL (widget), tmp);
- g_free (tmp);
-}
-
-static void
-send_audio_codec_notify_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = user_data;
-
- update_send_codec (self, TRUE);
-}
-
-static void
-send_video_codec_notify_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = user_data;
-
- update_send_codec (self, FALSE);
-}
-
-static void
-update_recv_codec (EmpathyStreamedMediaWindow *self,
- gboolean audio)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GList *codecs, *l;
- GtkWidget *widget;
- GString *str = NULL;
-
- if (audio)
- {
- codecs = empathy_streamed_media_handler_get_recv_audio_codecs (priv->handler);
- widget = priv->acodec_decoding_label;
- }
- else
- {
- codecs = empathy_streamed_media_handler_get_recv_video_codecs (priv->handler);
- widget = priv->vcodec_decoding_label;
- }
-
- if (codecs == NULL)
- return;
-
- for (l = codecs; l != NULL; l = g_list_next (l))
- {
- FsCodec *codec = l->data;
-
- if (str == NULL)
- str = g_string_new (NULL);
- else
- g_string_append (str, ", ");
-
- g_string_append_printf (str, "%s/%u", codec->encoding_name,
- codec->clock_rate);
- }
-
- gtk_label_set_text (GTK_LABEL (widget), str->str);
- g_string_free (str, TRUE);
-}
-
-static void
-recv_audio_codecs_notify_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = user_data;
-
- update_recv_codec (self, TRUE);
-}
-
-static void
-recv_video_codecs_notify_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = user_data;
-
- update_recv_codec (self, FALSE);
-}
-
-static const gchar *
-candidate_type_to_str (FsCandidate *candidate)
-{
- switch (candidate->type)
- {
- case FS_CANDIDATE_TYPE_HOST:
- return "host";
- case FS_CANDIDATE_TYPE_SRFLX:
- return "server reflexive";
- case FS_CANDIDATE_TYPE_PRFLX:
- return "peer reflexive";
- case FS_CANDIDATE_TYPE_RELAY:
- return "relay";
- case FS_CANDIDATE_TYPE_MULTICAST:
- return "multicast";
- }
-
- return NULL;
-}
-
-static const gchar *
-candidate_type_to_desc (FsCandidate *candidate)
-{
- switch (candidate->type)
- {
- case FS_CANDIDATE_TYPE_HOST:
- return _("The IP address as seen by the machine");
- case FS_CANDIDATE_TYPE_SRFLX:
- return _("The IP address as seen by a server on the Internet");
- case FS_CANDIDATE_TYPE_PRFLX:
- return _("The IP address of the peer as seen by the other side");
- case FS_CANDIDATE_TYPE_RELAY:
- return _("The IP address of a relay server");
- case FS_CANDIDATE_TYPE_MULTICAST:
- return _("The IP address of the multicast group");
- }
-
- return NULL;
-}
-
-static void
-update_candidat_widget (EmpathyStreamedMediaWindow *self,
- GtkWidget *label,
- GtkWidget *img,
- FsCandidate *candidate)
-{
- gchar *str;
-
- g_assert (candidate != NULL);
- str = g_strdup_printf ("%s %u (%s)", candidate->ip,
- candidate->port, candidate_type_to_str (candidate));
-
- gtk_label_set_text (GTK_LABEL (label), str);
- gtk_widget_set_tooltip_text (img, candidate_type_to_desc (candidate));
-
- g_free (str);
-}
-
-static void
-candidates_changed_cb (GObject *object,
- FsMediaType type,
- EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- FsCandidate *candidate = NULL;
-
- if (type == FS_MEDIA_TYPE_VIDEO)
- {
- /* Update remote candidate */
- candidate = empathy_streamed_media_handler_get_video_remote_candidate (
- priv->handler);
-
- update_candidat_widget (self, priv->video_remote_candidate_label,
- priv->video_remote_candidate_info_img, candidate);
-
- /* Update local candidate */
- candidate = empathy_streamed_media_handler_get_video_local_candidate (
- priv->handler);
-
- update_candidat_widget (self, priv->video_local_candidate_label,
- priv->video_local_candidate_info_img, candidate);
- }
- else
- {
- /* Update remote candidate */
- candidate = empathy_streamed_media_handler_get_audio_remote_candidate (
- priv->handler);
-
- update_candidat_widget (self, priv->audio_remote_candidate_label,
- priv->audio_remote_candidate_info_img, candidate);
-
- /* Update local candidate */
- candidate = empathy_streamed_media_handler_get_audio_local_candidate (
- priv->handler);
-
- update_candidat_widget (self, priv->audio_local_candidate_label,
- priv->audio_local_candidate_info_img, candidate);
- }
-}
-
-static void
-empathy_streamed_media_window_constructed (GObject *object)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (object);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- EmpathyTpStreamedMedia *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_streamed_media_window_setup_avatars (self, priv->handler);
- empathy_streamed_media_window_set_state_connecting (self);
-
- if (!empathy_streamed_media_handler_has_initial_video (priv->handler))
- {
- gtk_toggle_tool_button_set_active (
- GTK_TOGGLE_TOOL_BUTTON (priv->tool_button_camera_off), TRUE);
- }
- /* If call has InitialVideo, the preview will be started once the call has
- * been started (start_call()). */
-
- update_send_codec (self, TRUE);
- update_send_codec (self, FALSE);
- update_recv_codec (self, TRUE);
- update_recv_codec (self, FALSE);
-
- tp_g_signal_connect_object (priv->handler, "notify::send-audio-codec",
- G_CALLBACK (send_audio_codec_notify_cb), self, 0);
- tp_g_signal_connect_object (priv->handler, "notify::send-video-codec",
- G_CALLBACK (send_video_codec_notify_cb), self, 0);
- tp_g_signal_connect_object (priv->handler, "notify::recv-audio-codecs",
- G_CALLBACK (recv_audio_codecs_notify_cb), self, 0);
- tp_g_signal_connect_object (priv->handler, "notify::recv-video-codecs",
- G_CALLBACK (recv_video_codecs_notify_cb), self, 0);
-
- tp_g_signal_connect_object (priv->handler, "candidates-changed",
- G_CALLBACK (candidates_changed_cb), self, 0);
-}
-
-static void empathy_streamed_media_window_dispose (GObject *object);
-static void empathy_streamed_media_window_finalize (GObject *object);
-
-static void
-empathy_streamed_media_window_set_property (GObject *object,
- guint property_id, const GValue *value, GParamSpec *pspec)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_STREAMED_MEDIA_HANDLER:
- priv->handler = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_streamed_media_window_get_property (GObject *object,
- guint property_id, GValue *value, GParamSpec *pspec)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_STREAMED_MEDIA_HANDLER:
- g_value_set_object (value, priv->handler);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_streamed_media_window_class_init (
- EmpathyStreamedMediaWindowClass *empathy_streamed_media_window_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_streamed_media_window_class);
- GParamSpec *param_spec;
-
- g_type_class_add_private (empathy_streamed_media_window_class,
- sizeof (EmpathyStreamedMediaWindowPriv));
-
- object_class->constructed = empathy_streamed_media_window_constructed;
- object_class->set_property = empathy_streamed_media_window_set_property;
- object_class->get_property = empathy_streamed_media_window_get_property;
-
- object_class->dispose = empathy_streamed_media_window_dispose;
- object_class->finalize = empathy_streamed_media_window_finalize;
-
- param_spec = g_param_spec_object ("handler",
- "handler", "The call handler",
- EMPATHY_TYPE_STREAMED_MEDIA_HANDLER,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_STREAMED_MEDIA_HANDLER, param_spec);
-}
-
-static void
-empathy_streamed_media_window_video_stream_changed_cb (EmpathyTpStreamedMedia *call,
- GParamSpec *property, EmpathyStreamedMediaWindow *self)
-{
- DEBUG ("video stream changed");
- empathy_streamed_media_window_update_avatars_visibility (call, self);
-}
-
-void
-empathy_streamed_media_window_dispose (GObject *object)
-{
- EmpathyTpStreamedMedia *call;
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (object);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- g_object_get (priv->handler, "tp-call", &call, NULL);
-
- if (call != NULL)
- {
- g_object_unref (call);
- }
-
- if (priv->handler != NULL)
- {
- empathy_streamed_media_handler_stop_call (priv->handler);
- g_object_unref (priv->handler);
- }
- priv->handler = NULL;
-
- if (priv->bus_message_source_id != 0)
- {
- g_source_remove (priv->bus_message_source_id);
- priv->bus_message_source_id = 0;
- }
-
- 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->video_tee != NULL)
- g_object_unref (priv->video_tee);
- priv->video_tee = NULL;
-
- if (priv->fsnotifier != NULL)
- g_object_unref (priv->fsnotifier);
- priv->fsnotifier = NULL;
-
- if (priv->timer_id != 0)
- g_source_remove (priv->timer_id);
- priv->timer_id = 0;
-
- if (priv->ui_manager != NULL)
- g_object_unref (priv->ui_manager);
- priv->ui_manager = NULL;
-
- if (priv->fullscreen != NULL)
- g_object_unref (priv->fullscreen);
- priv->fullscreen = NULL;
-
- if (priv->contact != NULL)
- {
- g_signal_handlers_disconnect_by_func (priv->contact,
- contact_name_changed_cb, self);
- g_object_unref (priv->contact);
- priv->contact = NULL;
- }
-
- tp_clear_object (&priv->sound_mgr);
-
- /* release any references held by the object here */
- if (G_OBJECT_CLASS (empathy_streamed_media_window_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_streamed_media_window_parent_class)->dispose (object);
-}
-
-static void
-disconnect_video_output_motion_handler (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (priv->video_output_motion_handler_id != 0)
- {
- g_signal_handler_disconnect (G_OBJECT (priv->video_output),
- priv->video_output_motion_handler_id);
- priv->video_output_motion_handler_id = 0;
- }
-}
-
-void
-empathy_streamed_media_window_finalize (GObject *object)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (object);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- disconnect_video_output_motion_handler (self);
-
- /* free any data held directly by the object here */
- g_mutex_free (priv->lock);
-
- g_timer_destroy (priv->timer);
-
- G_OBJECT_CLASS (empathy_streamed_media_window_parent_class)->finalize (object);
-}
-
-
-EmpathyStreamedMediaWindow *
-empathy_streamed_media_window_new (EmpathyStreamedMediaHandler *handler)
-{
- return EMPATHY_STREAMED_MEDIA_WINDOW (
- g_object_new (EMPATHY_TYPE_STREAMED_MEDIA_WINDOW, "handler", handler, NULL));
-}
-
-static void
-empathy_streamed_media_window_conference_added_cb (EmpathyStreamedMediaHandler *handler,
- GstElement *conference, gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GKeyFile *keyfile;
-
- keyfile = fs_utils_get_default_element_properties (conference);
- if (keyfile != NULL)
- fs_element_added_notifier_set_properties_from_keyfile (priv->fsnotifier,
- keyfile);
-
- gst_bin_add (GST_BIN (priv->pipeline), conference);
-
- gst_element_set_state (conference, GST_STATE_PLAYING);
-}
-
-static gboolean
-empathy_streamed_media_window_start_receiving_cb (EmpathyStreamedMediaHandler *handler,
- FsMediaType type,gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (type != FS_MEDIA_TYPE_VIDEO)
- return TRUE;
-
- /* video and direction is send */
- return priv->video_input != NULL;
-}
-
-static gboolean
-empathy_streamed_media_window_reset_pipeline (EmpathyStreamedMediaWindow *self)
-{
- GstStateChangeReturn state_change_return;
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (priv->pipeline == NULL)
- return TRUE;
-
- if (priv->bus_message_source_id != 0)
- {
- g_source_remove (priv->bus_message_source_id);
- priv->bus_message_source_id = 0;
- }
-
- 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;
-
- g_signal_handlers_disconnect_by_func (priv->audio_input_adj,
- empathy_streamed_media_window_mic_volume_changed_cb, self);
-
- 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->funnel = NULL;
-
- create_pipeline (self);
- /* Call will be started when user will hit the 'redial' button */
- priv->start_call_when_playing = FALSE;
- gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
-
- return TRUE;
- }
- else
- {
- g_message ("Error: could not destroy pipeline. Closing call window");
- gtk_widget_destroy (GTK_WIDGET (self));
-
- return FALSE;
- }
-}
-
-static void
-reset_details_pane (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- /* translators: encoding video codec is unknown */
- gtk_label_set_text (GTK_LABEL (priv->vcodec_encoding_label),
- C_("codec", "Unknown"));
- /* translators: encoding audio codec is unknown */
- gtk_label_set_text (GTK_LABEL (priv->acodec_encoding_label),
- C_("codec", "Unknown"));
- /* translators: decoding video codec is unknown */
- gtk_label_set_text (GTK_LABEL (priv->vcodec_decoding_label),
- C_("codec", "Unknown"));
- /* translators: decoding audio codec is unknown */
- gtk_label_set_text (GTK_LABEL (priv->acodec_decoding_label),
- C_("codec", "Unknown"));
-}
-
-static gboolean
-empathy_streamed_media_window_disconnected (EmpathyStreamedMediaWindow *self,
- gboolean restart)
-{
- gboolean could_disconnect = FALSE;
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- gboolean could_reset_pipeline;
-
- /* Leave full screen mode if needed */
- gtk_window_unfullscreen (GTK_WINDOW (self));
-
- gtk_action_set_sensitive (priv->menu_fullscreen, FALSE);
-
- could_reset_pipeline = empathy_streamed_media_window_reset_pipeline (self);
-
- if (priv->call_state == CONNECTING)
- empathy_sound_manager_stop (priv->sound_mgr,
- EMPATHY_SOUND_PHONE_OUTGOING);
-
- if (priv->call_state != REDIALING)
- priv->call_state = DISCONNECTED;
-
- if (could_reset_pipeline)
- {
- g_mutex_lock (priv->lock);
-
- g_timer_stop (priv->timer);
-
- if (priv->timer_id != 0)
- g_source_remove (priv->timer_id);
- priv->timer_id = 0;
-
- g_mutex_unlock (priv->lock);
-
- if (!restart)
- /* We are about to destroy the window, no need to update it or create
- * a video preview */
- return TRUE;
-
- empathy_streamed_media_window_status_message (self, _("Disconnected"));
-
- gtk_action_set_sensitive (priv->redial, TRUE);
- gtk_widget_set_sensitive (priv->redial_button, TRUE);
-
- /* Unsensitive the camera and mic button */
- gtk_widget_set_sensitive (priv->tool_button_camera_on, FALSE);
- gtk_action_set_sensitive (priv->action_camera_on, FALSE);
- gtk_widget_set_sensitive (priv->mic_button, FALSE);
-
- /* Be sure that the mic button is enabled */
- gtk_toggle_tool_button_set_active (
- GTK_TOGGLE_TOOL_BUTTON (priv->mic_button), TRUE);
-
- if (priv->camera_state == CAMERA_STATE_ON)
- {
- /* Enable the 'preview' button as we are not sending atm. */
- gtk_toggle_tool_button_set_active (
- GTK_TOGGLE_TOOL_BUTTON (priv->tool_button_camera_preview), TRUE);
- }
- else if (priv->camera_state == CAMERA_STATE_PREVIEW)
- {
- /* Restart the preview with the new pipeline. */
- display_video_preview (self, TRUE);
- }
-
- gtk_progress_bar_set_fraction (
- GTK_PROGRESS_BAR (priv->volume_progress_bar), 0);
-
- /* destroy the video output; it will be recreated when we'll redial */
- disconnect_video_output_motion_handler (self);
- gtk_widget_destroy (priv->video_output);
- priv->video_output = NULL;
-
- gtk_widget_show (priv->remote_user_avatar_widget);
-
- reset_details_pane (self);
-
- priv->sending_video = FALSE;
- priv->call_started = FALSE;
-
- could_disconnect = TRUE;
-
- /* TODO: display the self avatar of the preview (depends if the "Always
- * Show Video Preview" is enabled or not) */
- }
-
- return could_disconnect;
-}
-
-
-static void
-empathy_streamed_media_window_channel_closed_cb (EmpathyStreamedMediaHandler *handler,
- gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- if (empathy_streamed_media_window_disconnected (self, TRUE) &&
- priv->call_state == REDIALING)
- empathy_streamed_media_window_restart_call (self);
-}
-
-
-static void
-empathy_streamed_media_window_channel_stream_closed_cb (EmpathyStreamedMediaHandler *handler,
- TfContent *content, gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- guint media_type;
-
- g_object_get (content, "media-type", &media_type, NULL);
-
- /*
- * This assumes that there is only one video stream per channel...
- */
-
- if (media_type == TP_MEDIA_STREAM_TYPE_VIDEO)
- {
- if (priv->funnel != NULL)
- {
- GstElement *output;
-
- output = empathy_video_widget_get_element (EMPATHY_VIDEO_WIDGET
- (priv->video_output));
-
- gst_element_set_state (output, GST_STATE_NULL);
- gst_element_set_state (priv->funnel, GST_STATE_NULL);
-
- gst_bin_remove (GST_BIN (priv->pipeline), output);
- gst_bin_remove (GST_BIN (priv->pipeline), priv->funnel);
- priv->funnel = NULL;
- }
- }
- else if (media_type == TP_MEDIA_STREAM_TYPE_AUDIO)
- {
- if (priv->audio_output != NULL)
- {
- gst_element_set_state (priv->audio_output, GST_STATE_NULL);
-
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_output);
- priv->audio_output = NULL;
- }
- }
-}
-
-/* Called with global lock held */
-static GstPad *
-empathy_streamed_media_window_get_video_sink_pad (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstPad *pad;
- GstElement *output;
-
- if (priv->funnel == NULL)
- {
- output = empathy_video_widget_get_element (EMPATHY_VIDEO_WIDGET
- (priv->video_output));
-
- priv->funnel = gst_element_factory_make ("fsfunnel", NULL);
-
- if (!priv->funnel)
- {
- g_warning ("Could not create fsfunnel");
- return NULL;
- }
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->funnel))
- {
- gst_object_unref (priv->funnel);
- priv->funnel = NULL;
- g_warning ("Could not add funnel to pipeline");
- return NULL;
- }
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), output))
- {
- g_warning ("Could not add the video output widget to the pipeline");
- goto error;
- }
-
- if (!gst_element_link (priv->funnel, output))
- {
- g_warning ("Could not link output sink to funnel");
- goto error_output_added;
- }
-
- if (gst_element_set_state (output, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
- {
- g_warning ("Could not start video sink");
- goto error_output_added;
- }
-
- if (gst_element_set_state (priv->funnel, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
- {
- g_warning ("Could not start funnel");
- goto error_output_added;
- }
- }
-
- pad = gst_element_get_request_pad (priv->funnel, "sink%d");
-
- if (!pad)
- g_warning ("Could not get request pad from funnel");
-
- return pad;
-
-
- error_output_added:
-
- gst_element_set_locked_state (priv->funnel, TRUE);
- gst_element_set_locked_state (output, TRUE);
-
- gst_element_set_state (priv->funnel, GST_STATE_NULL);
- gst_element_set_state (output, GST_STATE_NULL);
-
- gst_bin_remove (GST_BIN (priv->pipeline), output);
- gst_element_set_locked_state (output, FALSE);
-
- error:
-
- gst_bin_remove (GST_BIN (priv->pipeline), priv->funnel);
- priv->funnel = NULL;
-
- return NULL;
-}
-
-/* Called with global lock held */
-static GstPad *
-empathy_streamed_media_window_get_audio_sink_pad (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstPad *pad;
- GstPadTemplate *template;
-
- if (priv->audio_output == NULL)
- {
- priv->audio_output = empathy_audio_sink_new ();
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->audio_output))
- {
- g_warning ("Could not add audio sink to pipeline");
- g_object_unref (priv->audio_output);
- goto error_add_output;
- }
-
- if (gst_element_set_state (priv->audio_output, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
- {
- g_warning ("Could not start audio sink");
- goto error;
- }
- }
-
- template = gst_element_class_get_pad_template (
- GST_ELEMENT_GET_CLASS (priv->audio_output), "sink%d");
-
- pad = gst_element_request_pad (priv->audio_output,
- template, NULL, NULL);
-
- if (pad == NULL)
- {
- g_warning ("Could not get sink pad from sink");
- return NULL;
- }
-
- return pad;
-
-error:
- gst_element_set_locked_state (priv->audio_output, TRUE);
- gst_element_set_state (priv->audio_output, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_output);
- priv->audio_output = NULL;
-
-error_add_output:
-
- return NULL;
-}
-
-static gboolean
-empathy_streamed_media_window_update_timer (gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- gchar *str;
- gdouble time_;
-
- time_ = g_timer_elapsed (priv->timer, NULL);
-
- /* Translators: number of minutes:seconds the caller has been connected */
- str = g_strdup_printf (_("Connected — %d:%02dm"), (int) time_ / 60,
- (int) time_ % 60);
- empathy_streamed_media_window_status_message (self, str);
- g_free (str);
-
- return TRUE;
-}
-
-static void
-display_error (EmpathyStreamedMediaWindow *self,
- EmpathyTpStreamedMedia *call,
- const gchar *img,
- const gchar *title,
- const gchar *desc,
- const gchar *details)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GtkWidget *info_bar;
- GtkWidget *content_area;
- GtkWidget *hbox;
- GtkWidget *vbox;
- GtkWidget *image;
- GtkWidget *label;
- gchar *txt;
-
- /* Create info bar */
- info_bar = gtk_info_bar_new_with_buttons (GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
- NULL);
-
- gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_WARNING);
-
- content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
-
- /* hbox containing the image and the messages vbox */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
- gtk_container_add (GTK_CONTAINER (content_area), hbox);
-
- /* Add image */
- image = gtk_image_new_from_icon_name (img, GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-
- /* vbox containing the main message and the details expander */
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-
- /* Add text */
- txt = g_strdup_printf ("<b>%s</b>\n%s", title, desc);
-
- label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (label), txt);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
- g_free (txt);
-
- gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
-
- /* Add details */
- if (details != NULL)
- {
- GtkWidget *expander;
-
- expander = gtk_expander_new (_("Technical Details"));
-
- txt = g_strdup_printf ("<i>%s</i>", details);
-
- label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (label), txt);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
- g_free (txt);
-
- gtk_container_add (GTK_CONTAINER (expander), label);
- gtk_box_pack_start (GTK_BOX (vbox), expander, TRUE, TRUE, 0);
- }
-
- g_signal_connect (info_bar, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- gtk_box_pack_start (GTK_BOX (priv->errors_vbox), info_bar,
- FALSE, FALSE, CONTENT_HBOX_CHILDREN_PACKING_PADDING);
- gtk_widget_show_all (info_bar);
-}
-
-static gchar *
-media_stream_error_to_txt (EmpathyStreamedMediaWindow *self,
- EmpathyTpStreamedMedia *call,
- gboolean audio,
- TpMediaStreamError error)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- const gchar *cm;
- gchar *url;
- gchar *result;
-
- switch (error)
- {
- case TP_MEDIA_STREAM_ERROR_CODEC_NEGOTIATION_FAILED:
- if (audio)
- return g_strdup_printf (
- _("%s's software does not understand any of the audio formats "
- "supported by your computer"),
- empathy_contact_get_alias (priv->contact));
- else
- return g_strdup_printf (
- _("%s's software does not understand any of the video formats "
- "supported by your computer"),
- empathy_contact_get_alias (priv->contact));
-
- case TP_MEDIA_STREAM_ERROR_CONNECTION_FAILED:
- return g_strdup_printf (
- _("Can't establish a connection to %s. "
- "One of you might be on a network that does not allow "
- "direct connections."),
- empathy_contact_get_alias (priv->contact));
-
- case TP_MEDIA_STREAM_ERROR_NETWORK_ERROR:
- return g_strdup (_("There was a failure on the network"));
-
- case TP_MEDIA_STREAM_ERROR_NO_CODECS:
- if (audio)
- return g_strdup (_("The audio formats necessary for this call "
- "are not installed on your computer"));
- else
- return g_strdup (_("The video formats necessary for this call "
- "are not installed on your computer"));
-
- case TP_MEDIA_STREAM_ERROR_INVALID_CM_BEHAVIOR:
- cm = empathy_tp_streamed_media_get_connection_manager (call);
-
- url = g_strdup_printf ("http://bugs.freedesktop.org/enter_bug.cgi?"
- "product=Telepathy&amp;component=%s", cm);
-
- result = g_strdup_printf (
- _("Something unexpected happened in a Telepathy component. "
- "Please <a href=\"%s\">report this bug</a> and attach "
- "logs gathered from the 'Debug' window in the Help menu."), url);
-
- g_free (url);
- return result;
-
- case TP_MEDIA_STREAM_ERROR_MEDIA_ERROR:
- return g_strdup (_("There was a failure in the call engine"));
-
- case TP_MEDIA_STREAM_ERROR_EOS:
- return g_strdup (_("The end of the stream was reached"));
-
- case TP_MEDIA_STREAM_ERROR_UNKNOWN:
- default:
- return NULL;
- }
-}
-
-static void
-empathy_streamed_media_window_stream_error (EmpathyStreamedMediaWindow *self,
- EmpathyTpStreamedMedia *call,
- gboolean audio,
- guint code,
- const gchar *msg,
- const gchar *icon,
- const gchar *title)
-{
- gchar *desc;
-
- desc = media_stream_error_to_txt (self, call, audio, code);
- if (desc == NULL)
- {
- /* No description, use the error message. That's not great as it's not
- * localized but it's better than nothing. */
- display_error (self, call, icon, title, msg, NULL);
- }
- else
- {
- display_error (self, call, icon, title, desc, msg);
- g_free (desc);
- }
-}
-
-static void
-empathy_streamed_media_window_audio_stream_error (EmpathyTpStreamedMedia *call,
- guint code,
- const gchar *msg,
- EmpathyStreamedMediaWindow *self)
-{
- empathy_streamed_media_window_stream_error (self, call, TRUE, code, msg,
- "gnome-stock-mic", _("Can't establish audio stream"));
-}
-
-static void
-empathy_streamed_media_window_video_stream_error (EmpathyTpStreamedMedia *call,
- guint code,
- const gchar *msg,
- EmpathyStreamedMediaWindow *self)
-{
- empathy_streamed_media_window_stream_error (self, call, FALSE, code, msg,
- "camera-web", _("Can't establish video stream"));
-}
-
-static gboolean
-empathy_streamed_media_window_connected (gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- EmpathyTpStreamedMedia *call;
- gboolean can_send_video;
-
- empathy_sound_manager_stop (priv->sound_mgr, EMPATHY_SOUND_PHONE_OUTGOING);
-
- can_send_video = priv->video_input != NULL && priv->contact != NULL &&
- empathy_contact_can_voip_video (priv->contact);
-
- g_object_get (priv->handler, "tp-call", &call, NULL);
-
- tp_g_signal_connect_object (call, "notify::video-stream",
- G_CALLBACK (empathy_streamed_media_window_video_stream_changed_cb),
- self, 0);
-
- if (empathy_tp_streamed_media_has_dtmf (call))
- gtk_widget_set_sensitive (priv->dtmf_panel, TRUE);
-
- if (priv->video_input == NULL)
- empathy_streamed_media_window_set_send_video (self, CAMERA_STATE_OFF);
-
- priv->sending_video = can_send_video ?
- empathy_tp_streamed_media_is_sending_video (call) : FALSE;
-
- gtk_toggle_tool_button_set_active (
- GTK_TOGGLE_TOOL_BUTTON (priv->tool_button_camera_on),
- priv->sending_video && priv->video_input != NULL);
- gtk_widget_set_sensitive (priv->tool_button_camera_on, can_send_video);
- gtk_action_set_sensitive (priv->action_camera_on, can_send_video);
-
- gtk_action_set_sensitive (priv->redial, FALSE);
- gtk_widget_set_sensitive (priv->redial_button, FALSE);
-
- gtk_widget_set_sensitive (priv->mic_button, TRUE);
-
- empathy_streamed_media_window_update_avatars_visibility (call, self);
-
- g_object_unref (call);
-
- g_mutex_lock (priv->lock);
-
- priv->timer_id = g_timeout_add_seconds (1,
- empathy_streamed_media_window_update_timer, self);
-
- g_mutex_unlock (priv->lock);
-
- empathy_streamed_media_window_update_timer (self);
-
- gtk_action_set_sensitive (priv->menu_fullscreen, TRUE);
-
- return FALSE;
-}
-
-
-/* Called from the streaming thread */
-static gboolean
-empathy_streamed_media_window_src_added_cb (EmpathyStreamedMediaHandler *handler,
- GstPad *src, guint media_type, gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- gboolean retval = FALSE;
-
- GstPad *pad;
-
- g_mutex_lock (priv->lock);
-
- if (priv->call_state != CONNECTED)
- {
- g_timer_start (priv->timer);
- priv->timer_id = g_idle_add (empathy_streamed_media_window_connected, self);
- priv->call_state = CONNECTED;
- }
-
- switch (media_type)
- {
- case TP_MEDIA_STREAM_TYPE_AUDIO:
- pad = empathy_streamed_media_window_get_audio_sink_pad (self);
- break;
- case TP_MEDIA_STREAM_TYPE_VIDEO:
- gtk_widget_hide (priv->remote_user_avatar_widget);
- gtk_widget_show (priv->video_output);
- pad = empathy_streamed_media_window_get_video_sink_pad (self);
- break;
- default:
- g_assert_not_reached ();
- }
-
- if (pad == NULL)
- goto out;
-
- if (GST_PAD_LINK_FAILED (gst_pad_link (src, pad)))
- g_warning ("Could not link %s sink pad",
- media_type == TP_MEDIA_STREAM_TYPE_AUDIO ? "audio" : "video");
- else
- retval = TRUE;
-
- gst_object_unref (pad);
-
- out:
-
- /* If no sink could be linked, try to add fakesink to prevent the whole call
- * aborting */
-
- if (!retval)
- {
- GstElement *fakesink = gst_element_factory_make ("fakesink", NULL);
-
- if (gst_bin_add (GST_BIN (priv->pipeline), fakesink))
- {
- GstPad *sinkpad = gst_element_get_static_pad (fakesink, "sink");
- if (gst_element_set_state (fakesink, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE ||
- GST_PAD_LINK_FAILED (gst_pad_link (src, sinkpad)))
- {
- gst_element_set_locked_state (fakesink, TRUE);
- gst_element_set_state (fakesink, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (priv->pipeline), fakesink);
- }
- else
- {
- DEBUG ("Could not link real sink, linked fakesink instead");
- }
- gst_object_unref (sinkpad);
- }
- else
- {
- gst_object_unref (fakesink);
- }
- }
-
-
- g_mutex_unlock (priv->lock);
-
- return TRUE;
-}
-
-static gboolean
-empathy_streamed_media_window_sink_added_cb (EmpathyStreamedMediaHandler *handler,
- GstPad *sink, guint media_type, gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstPad *pad;
- gboolean retval = FALSE;
-
- switch (media_type)
- {
- case TP_MEDIA_STREAM_TYPE_AUDIO:
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->audio_input))
- {
- g_warning ("Could not add audio source to pipeline");
- break;
- }
-
- pad = gst_element_get_static_pad (priv->audio_input, "src");
- if (!pad)
- {
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_input);
- g_warning ("Could not get source pad from audio source");
- break;
- }
-
- if (GST_PAD_LINK_FAILED (gst_pad_link (pad, sink)))
- {
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_input);
- g_warning ("Could not link audio source to farsight");
- break;
- }
-
- if (gst_element_set_state (priv->audio_input, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
- {
- g_warning ("Could not start audio source");
- gst_element_set_state (priv->audio_input, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_input);
- break;
- }
-
- retval = TRUE;
- break;
- case TP_MEDIA_STREAM_TYPE_VIDEO:
- if (priv->video_input != NULL)
- {
- if (priv->video_tee != NULL)
- {
- pad = gst_element_get_request_pad (priv->video_tee, "src%d");
- if (GST_PAD_LINK_FAILED (gst_pad_link (pad, sink)))
- {
- g_warning ("Could not link videp soure input pipeline");
- break;
- }
- gst_object_unref (pad);
- }
-
- retval = TRUE;
- }
- break;
- default:
- g_assert_not_reached ();
- }
-
- return retval;
-}
-
-static void
-empathy_streamed_media_window_remove_video_input (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstElement *preview;
-
- disable_camera (self);
-
- DEBUG ("remove video input");
- preview = empathy_video_widget_get_element (
- EMPATHY_VIDEO_WIDGET (priv->video_preview));
-
- gst_element_set_state (priv->video_input, GST_STATE_NULL);
- gst_element_set_state (priv->video_tee, GST_STATE_NULL);
- gst_element_set_state (preview, GST_STATE_NULL);
-
- gst_bin_remove_many (GST_BIN (priv->pipeline), priv->video_input,
- priv->video_tee, preview, NULL);
-
- g_object_unref (priv->video_input);
- 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_widget_set_sensitive (priv->tool_button_camera_on, FALSE);
- gtk_action_set_sensitive (priv->action_camera_on, FALSE);
- gtk_widget_set_sensitive (priv->tool_button_camera_preview, FALSE);
-}
-
-static void
-start_call (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- priv->call_started = TRUE;
- empathy_streamed_media_handler_start_call (priv->handler,
- empathy_get_current_action_time ());
-
- if (empathy_streamed_media_handler_has_initial_video (priv->handler))
- {
- /* Enable 'send video' buttons and display the preview */
- gtk_toggle_tool_button_set_active (
- GTK_TOGGLE_TOOL_BUTTON (priv->tool_button_camera_on), TRUE);
- }
-}
-
-static gboolean
-empathy_streamed_media_window_bus_message (GstBus *bus, GstMessage *message,
- gpointer user_data)
-{
- EmpathyStreamedMediaWindow *self = EMPATHY_STREAMED_MEDIA_WINDOW (user_data);
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- GstState newstate;
-
- empathy_streamed_media_handler_bus_message (priv->handler, bus, message);
-
- switch (GST_MESSAGE_TYPE (message))
- {
- case GST_MESSAGE_STATE_CHANGED:
- if (GST_MESSAGE_SRC (message) == GST_OBJECT (priv->video_input))
- {
- gst_message_parse_state_changed (message, NULL, &newstate, NULL);
- if (newstate == GST_STATE_PAUSED)
- empathy_streamed_media_window_setup_video_input (self);
- }
- if (GST_MESSAGE_SRC (message) == GST_OBJECT (priv->pipeline) &&
- !priv->call_started)
- {
- gst_message_parse_state_changed (message, NULL, &newstate, NULL);
- if (newstate == GST_STATE_PAUSED)
- {
- gst_element_set_state (priv->pipeline, GST_STATE_PLAYING);
- priv->pipeline_playing = TRUE;
-
- if (priv->start_call_when_playing)
- start_call (self);
- }
- }
- break;
- case GST_MESSAGE_ERROR:
- {
- GError *error = NULL;
- GstElement *gst_error;
- gchar *debug;
- gchar *name;
-
- 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);
-
- name = gst_element_get_name (gst_error);
- if (g_str_has_prefix (name, VIDEO_INPUT_ERROR_PREFIX))
- {
- /* Remove the video input and continue */
- if (priv->video_input != NULL)
- empathy_streamed_media_window_remove_video_input (self);
- gst_element_set_state (priv->pipeline, GST_STATE_PLAYING);
- }
- else
- {
- empathy_streamed_media_window_disconnected (self, TRUE);
- }
- g_free (name);
- g_error_free (error);
- g_free (debug);
- }
- case GST_MESSAGE_UNKNOWN:
- case GST_MESSAGE_EOS:
- case GST_MESSAGE_WARNING:
- case GST_MESSAGE_INFO:
- case GST_MESSAGE_TAG:
- case GST_MESSAGE_BUFFERING:
- case GST_MESSAGE_STATE_DIRTY:
- case GST_MESSAGE_STEP_DONE:
- case GST_MESSAGE_CLOCK_PROVIDE:
- case GST_MESSAGE_CLOCK_LOST:
- case GST_MESSAGE_NEW_CLOCK:
- case GST_MESSAGE_STRUCTURE_CHANGE:
- case GST_MESSAGE_STREAM_STATUS:
- case GST_MESSAGE_APPLICATION:
- case GST_MESSAGE_ELEMENT:
- case GST_MESSAGE_SEGMENT_START:
- case GST_MESSAGE_SEGMENT_DONE:
- case GST_MESSAGE_DURATION:
- case GST_MESSAGE_ANY:
- default:
- break;
- }
-
- return TRUE;
-}
-
-static void
-empathy_streamed_media_window_update_avatars_visibility (EmpathyTpStreamedMedia *call,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- if (empathy_tp_streamed_media_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);
- }
-}
-
-static void
-call_handler_notify_tp_streamed_media_cb (EmpathyStreamedMediaHandler *handler,
- GParamSpec *spec,
- EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
- EmpathyTpStreamedMedia *call;
-
- g_object_get (priv->handler, "tp-call", &call, NULL);
- if (call == NULL)
- return;
-
- tp_g_signal_connect_object (call, "audio-stream-error",
- G_CALLBACK (empathy_streamed_media_window_audio_stream_error), self, 0);
- tp_g_signal_connect_object (call, "video-stream-error",
- G_CALLBACK (empathy_streamed_media_window_video_stream_error), self, 0);
-
- g_object_unref (call);
-}
-
-static void
-empathy_streamed_media_window_realized_cb (GtkWidget *widget, EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
- EmpathyTpStreamedMedia *call;
-
- g_signal_connect (priv->handler, "conference-added",
- G_CALLBACK (empathy_streamed_media_window_conference_added_cb), window);
- g_signal_connect (priv->handler, "start-receiving",
- G_CALLBACK (empathy_streamed_media_window_start_receiving_cb), window);
- g_signal_connect (priv->handler, "closed",
- G_CALLBACK (empathy_streamed_media_window_channel_closed_cb), window);
- g_signal_connect (priv->handler, "src-pad-added",
- G_CALLBACK (empathy_streamed_media_window_src_added_cb), window);
- g_signal_connect (priv->handler, "sink-pad-added",
- G_CALLBACK (empathy_streamed_media_window_sink_added_cb), window);
- g_signal_connect (priv->handler, "stream-closed",
- G_CALLBACK (empathy_streamed_media_window_channel_stream_closed_cb), window);
-
- g_object_get (priv->handler, "tp-call", &call, NULL);
- if (call != NULL)
- {
- tp_g_signal_connect_object (call, "audio-stream-error",
- G_CALLBACK (empathy_streamed_media_window_audio_stream_error), window,
- 0);
- tp_g_signal_connect_object (call, "video-stream-error",
- G_CALLBACK (empathy_streamed_media_window_video_stream_error), window,
- 0);
-
- g_object_unref (call);
- }
- else
- {
- /* tp-call doesn't exist yet, we'll connect signals once it has been
- * set */
- g_signal_connect (priv->handler, "notify::tp-call",
- G_CALLBACK (call_handler_notify_tp_streamed_media_cb), window);
- }
-
- gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
-}
-
-static gboolean
-empathy_streamed_media_window_delete_cb (GtkWidget *widget, GdkEvent*event,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- if (priv->pipeline != NULL)
- {
- if (priv->bus_message_source_id != 0)
- {
- g_source_remove (priv->bus_message_source_id);
- priv->bus_message_source_id = 0;
- }
-
- gst_element_set_state (priv->pipeline, GST_STATE_NULL);
- }
-
- if (priv->call_state == CONNECTING)
- empathy_sound_manager_stop (priv->sound_mgr, EMPATHY_SOUND_PHONE_OUTGOING);
-
- return FALSE;
-}
-
-static void
-show_controls (EmpathyStreamedMediaWindow *window, gboolean set_fullscreen)
-{
- GtkWidget *menu;
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- menu = gtk_ui_manager_get_widget (priv->ui_manager,
- "/menubar1");
-
- if (set_fullscreen)
- {
- gtk_widget_hide (priv->sidebar);
- gtk_widget_hide (menu);
- gtk_widget_hide (priv->vbox);
- gtk_widget_hide (priv->statusbar);
- gtk_widget_hide (priv->toolbar);
- }
- else
- {
- if (priv->sidebar_was_visible_before_fs)
- gtk_widget_show (priv->sidebar);
-
- gtk_widget_show (menu);
- gtk_widget_show (priv->vbox);
- gtk_widget_show (priv->statusbar);
- gtk_widget_show (priv->toolbar);
-
- gtk_window_resize (GTK_WINDOW (window), priv->original_width_before_fs,
- priv->original_height_before_fs);
- }
-}
-
-static void
-show_borders (EmpathyStreamedMediaWindow *window, gboolean set_fullscreen)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- gtk_container_set_border_width (GTK_CONTAINER (priv->content_hbox),
- set_fullscreen ? 0 : CONTENT_HBOX_BORDER_WIDTH);
- gtk_box_set_spacing (GTK_BOX (priv->content_hbox),
- set_fullscreen ? 0 : CONTENT_HBOX_SPACING);
-
- if (priv->video_output != NULL)
- {
- gtk_box_set_child_packing (GTK_BOX (priv->content_hbox),
- priv->video_output, TRUE, TRUE,
- set_fullscreen ? 0 : CONTENT_HBOX_CHILDREN_PACKING_PADDING,
- GTK_PACK_START);
- }
-
- gtk_box_set_child_packing (GTK_BOX (priv->content_hbox),
- priv->vbox, TRUE, TRUE,
- set_fullscreen ? 0 : CONTENT_HBOX_CHILDREN_PACKING_PADDING,
- GTK_PACK_START);
-}
-
-static gboolean
-empathy_streamed_media_window_state_event_cb (GtkWidget *widget,
- GdkEventWindowState *event, EmpathyStreamedMediaWindow *window)
-{
- if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN)
- {
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
- gboolean set_fullscreen = event->new_window_state &
- GDK_WINDOW_STATE_FULLSCREEN;
-
- if (set_fullscreen)
- {
- gboolean sidebar_was_visible;
- GtkAllocation allocation;
- gint original_width, original_height;
-
- gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
- original_width = allocation.width;
- original_height = allocation.height;
-
- g_object_get (priv->sidebar, "visible", &sidebar_was_visible, NULL);
-
- priv->sidebar_was_visible_before_fs = sidebar_was_visible;
- priv->original_width_before_fs = original_width;
- priv->original_height_before_fs = original_height;
-
- if (priv->video_output_motion_handler_id == 0 &&
- priv->video_output != NULL)
- {
- priv->video_output_motion_handler_id = g_signal_connect (
- G_OBJECT (priv->video_output), "motion-notify-event",
- G_CALLBACK (empathy_streamed_media_window_video_output_motion_notify),
- window);
- }
- }
- else
- {
- disconnect_video_output_motion_handler (window);
- }
-
- empathy_streamed_media_window_fullscreen_set_fullscreen (priv->fullscreen,
- set_fullscreen);
- show_controls (window, set_fullscreen);
- show_borders (window, set_fullscreen);
- gtk_action_set_stock_id (priv->menu_fullscreen,
- (set_fullscreen ? "gtk-leave-fullscreen" : "gtk-fullscreen"));
- priv->is_fullscreen = set_fullscreen;
- }
-
- return FALSE;
-}
-
-static void
-empathy_streamed_media_window_sidebar_toggled_cb (GtkToggleButton *toggle,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
- GtkWidget *arrow;
- int w, h, handle_size;
- GtkAllocation allocation, sidebar_allocation;
-
- gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
- w = allocation.width;
- h = allocation.height;
-
- gtk_widget_style_get (priv->pane, "handle_size", &handle_size, NULL);
-
- gtk_widget_get_allocation (priv->sidebar, &sidebar_allocation);
- if (gtk_toggle_button_get_active (toggle))
- {
- arrow = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE);
- gtk_widget_show (priv->sidebar);
- w += sidebar_allocation.width + handle_size;
- }
- else
- {
- arrow = gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
- w -= sidebar_allocation.width + handle_size;
- gtk_widget_hide (priv->sidebar);
- }
-
- gtk_button_set_image (GTK_BUTTON (priv->sidebar_button), arrow);
-
- if (w > 0 && h > 0)
- gtk_window_resize (GTK_WINDOW (window), w, h);
-}
-
-static void
-empathy_streamed_media_window_set_send_video (EmpathyStreamedMediaWindow *window,
- CameraState state)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
- EmpathyTpStreamedMedia *call;
-
- priv->sending_video = (state == CAMERA_STATE_ON);
-
- if (state == CAMERA_STATE_PREVIEW ||
- state == CAMERA_STATE_ON)
- {
- /* When we start sending video, we want to show the video preview by
- default. */
- display_video_preview (window, TRUE);
- }
- else
- {
- display_video_preview (window, FALSE);
- }
-
- if (priv->call_state != CONNECTED)
- return;
-
- g_object_get (priv->handler, "tp-call", &call, NULL);
- DEBUG ("%s sending video", priv->sending_video ? "start": "stop");
- empathy_tp_streamed_media_request_video_stream_direction (call, priv->sending_video);
- g_object_unref (call);
-}
-
-static void
-empathy_streamed_media_window_mic_toggled_cb (GtkToggleToolButton *toggle,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
- gboolean active;
-
- active = (gtk_toggle_tool_button_get_active (toggle));
-
- if (active)
- {
- empathy_audio_src_set_volume (EMPATHY_GST_AUDIO_SRC (priv->audio_input),
- priv->volume);
- gtk_adjustment_set_value (priv->audio_input_adj, priv->volume * 100);
- }
- else
- {
- /* TODO, Instead of setting the input volume to 0 we should probably
- * stop sending but this would cause the audio call to drop if both
- * sides mute at the same time on certain CMs AFAIK. Need to revisit this
- * in the future. GNOME #574574
- */
- empathy_audio_src_set_volume (EMPATHY_GST_AUDIO_SRC (priv->audio_input),
- 0);
- gtk_adjustment_set_value (priv->audio_input_adj, 0);
- }
-}
-
-static void
-empathy_streamed_media_window_sidebar_hidden_cb (EvSidebar *sidebar,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->sidebar_button),
- FALSE);
-}
-
-static void
-empathy_streamed_media_window_sidebar_shown_cb (EvSidebar *sidebar,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->sidebar_button),
- TRUE);
-}
-
-static void
-empathy_streamed_media_window_hangup_cb (gpointer object,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- empathy_streamed_media_handler_stop_call (priv->handler);
-
- if (empathy_streamed_media_window_disconnected (window, FALSE))
- gtk_widget_destroy (GTK_WIDGET (window));
-}
-
-static void
-empathy_streamed_media_window_restart_call (EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- /* Remove error info bars */
- gtk_container_forall (GTK_CONTAINER (priv->errors_vbox),
- (GtkCallback) gtk_widget_destroy, NULL);
-
- create_video_output_widget (window);
-
- g_signal_connect (G_OBJECT (priv->audio_input_adj), "value-changed",
- G_CALLBACK (empathy_streamed_media_window_mic_volume_changed_cb), window);
-
- /* While the call was disconnected, the input volume might have changed.
- * However, since the audio_input source was destroyed, its volume has not
- * been updated during that time. That's why we manually update it here */
- empathy_streamed_media_window_mic_volume_changed_cb (priv->audio_input_adj, window);
-
- priv->outgoing = TRUE;
- empathy_streamed_media_window_set_state_connecting (window);
-
- if (priv->pipeline_playing)
- start_call (window);
- else
- /* call will be started when the pipeline is ready */
- priv->start_call_when_playing = TRUE;
-
-
- empathy_streamed_media_window_setup_avatars (window, priv->handler);
-
- gtk_action_set_sensitive (priv->redial, FALSE);
- gtk_widget_set_sensitive (priv->redial_button, FALSE);
-}
-
-static void
-empathy_streamed_media_window_redial_cb (gpointer object,
- EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- if (priv->call_state == CONNECTED)
- priv->call_state = REDIALING;
-
- empathy_streamed_media_handler_stop_call (priv->handler);
-
- if (priv->call_state != CONNECTED)
- empathy_streamed_media_window_restart_call (window);
-}
-
-static void
-empathy_streamed_media_window_fullscreen_cb (gpointer object,
- EmpathyStreamedMediaWindow *window)
-{
- empathy_streamed_media_window_fullscreen_toggle (window);
-}
-
-static void
-empathy_streamed_media_window_fullscreen_toggle (EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- if (priv->is_fullscreen)
- gtk_window_unfullscreen (GTK_WINDOW (window));
- else
- gtk_window_fullscreen (GTK_WINDOW (window));
-}
-
-static gboolean
-empathy_streamed_media_window_video_button_press_cb (GtkWidget *video_output,
- GdkEventButton *event, EmpathyStreamedMediaWindow *window)
-{
- if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
- {
- empathy_streamed_media_window_video_menu_popup (window, event->button);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-empathy_streamed_media_window_key_press_cb (GtkWidget *video_output,
- GdkEventKey *event, EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- if (priv->is_fullscreen && event->keyval == GDK_KEY_Escape)
- {
- /* Since we are in fullscreen mode, toggling will bring us back to
- normal mode. */
- empathy_streamed_media_window_fullscreen_toggle (window);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-empathy_streamed_media_window_video_output_motion_notify (GtkWidget *widget,
- GdkEventMotion *event, EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- if (priv->is_fullscreen)
- {
- empathy_streamed_media_window_fullscreen_show_popup (priv->fullscreen);
- return TRUE;
- }
- return FALSE;
-}
-
-static void
-empathy_streamed_media_window_video_menu_popup (EmpathyStreamedMediaWindow *window,
- guint button)
-{
- GtkWidget *menu;
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- menu = gtk_ui_manager_get_widget (priv->ui_manager,
- "/video-popup");
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- button, gtk_get_current_event_time ());
- gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
-}
-
-static void
-empathy_streamed_media_window_status_message (EmpathyStreamedMediaWindow *window,
- gchar *message)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- if (priv->context_id == 0)
- {
- priv->context_id = gtk_statusbar_get_context_id (
- GTK_STATUSBAR (priv->statusbar), "voip call status messages");
- }
- else
- {
- gtk_statusbar_pop (GTK_STATUSBAR (priv->statusbar), priv->context_id);
- }
-
- gtk_statusbar_push (GTK_STATUSBAR (priv->statusbar), priv->context_id,
- message);
-}
-
-static void
-empathy_streamed_media_window_volume_changed_cb (GtkScaleButton *button,
- gdouble value, EmpathyStreamedMediaWindow *window)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
-
- if (priv->audio_output == NULL)
- return;
-
- empathy_audio_sink_set_volume (EMPATHY_GST_AUDIO_SINK (priv->audio_output),
- value);
-}
-
-/* block all the signals related to camera control widgets. This is useful
- * when we are manually updating the UI and so don't want to fire the
- * callbacks */
-static void
-block_camera_control_signals (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- g_signal_handlers_block_by_func (priv->tool_button_camera_off,
- tool_button_camera_off_toggled_cb, self);
- g_signal_handlers_block_by_func (priv->tool_button_camera_preview,
- tool_button_camera_preview_toggled_cb, self);
- g_signal_handlers_block_by_func (priv->tool_button_camera_on,
- tool_button_camera_on_toggled_cb, self);
- g_signal_handlers_block_by_func (priv->action_camera_on,
- action_camera_change_cb, self);
-}
-
-static void
-unblock_camera_control_signals (EmpathyStreamedMediaWindow *self)
-{
- EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (self);
-
- g_signal_handlers_unblock_by_func (priv->tool_button_camera_off,
- tool_button_camera_off_toggled_cb, self);
- g_signal_handlers_unblock_by_func (priv->tool_button_camera_preview,
- tool_button_camera_preview_toggled_cb, self);
- g_signal_handlers_unblock_by_func (priv->tool_button_camera_on,
- tool_button_camera_on_toggled_cb, self);
- g_signal_handlers_unblock_by_func (priv->action_camera_on,
- action_camera_change_cb, self);
-}
diff --git a/src/empathy-streamed-media-window.h b/src/empathy-streamed-media-window.h
deleted file mode 100644
index aae56d882..000000000
--- a/src/empathy-streamed-media-window.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * empathy-streamed-media-window.h - Header for EmpathyStreamedMediaWindow
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * 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_STREAMED_MEDIA_WINDOW_H__
-#define __EMPATHY_STREAMED_MEDIA_WINDOW_H__
-
-#include <glib-object.h>
-#include <gtk/gtk.h>
-
-#include "empathy-streamed-media-handler.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyStreamedMediaWindow EmpathyStreamedMediaWindow;
-typedef struct _EmpathyStreamedMediaWindowClass EmpathyStreamedMediaWindowClass;
-
-struct _EmpathyStreamedMediaWindowClass {
- GtkWindowClass parent_class;
-};
-
-struct _EmpathyStreamedMediaWindow {
- GtkWindow parent;
-};
-
-GType empathy_streamed_media_window_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_STREAMED_MEDIA_WINDOW \
- (empathy_streamed_media_window_get_type ())
-#define EMPATHY_STREAMED_MEDIA_WINDOW(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW, \
- EmpathyStreamedMediaWindow))
-#define EMPATHY_STREAMED_MEDIA_WINDOW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW, \
- EmpathyStreamedMediaWindowClass))
-#define EMPATHY_IS_STREAMED_MEDIA_WINDOW(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW))
-#define EMPATHY_IS_STREAMED_MEDIA_WINDOW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW))
-#define EMPATHY_STREAMED_MEDIA_WINDOW_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW, \
- EmpathyStreamedMediaWindowClass))
-
-EmpathyStreamedMediaWindow *empathy_streamed_media_window_new (EmpathyStreamedMediaHandler *handler);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_STREAMED_MEDIA_WINDOW_H__*/
diff --git a/src/empathy-streamed-media-window.ui b/src/empathy-streamed-media-window.ui
deleted file mode 100644
index 5f1a16e8c..000000000
--- a/src/empathy-streamed-media-window.ui
+++ /dev/null
@@ -1,861 +0,0 @@
-<?xml version="1.0"?>
-<!--Generated with glade3 3.4.5 on Mon Feb 16 12:31:56 2009 -->
-<interface>
- <object class="GtkUIManager" id="ui_manager">
- <child>
- <object class="GtkActionGroup" id="actiongroup1">
- <child>
- <object class="GtkAction" id="call">
- <property name="name">call</property>
- <property name="label" translatable="yes">_Call</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menuhangup">
- <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="camera">
- <property name="name">camera</property>
- <property name="label" translatable="yes">V_ideo</property>
- </object>
- </child>
- <child>
- <object class="GtkRadioAction" id="action_camera_off">
- <property name="name">action_camera_off</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">Video Off</property>
- <property name="draw_as_radio">True</property>
- <property name="value">0</property>
- <property name="current-value">0</property>
- </object>
- </child>
- <child>
- <object class="GtkRadioAction" id="action_camera_preview">
- <property name="name">action_camera_preview</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes">Video Preview</property>
- <property name="draw_as_radio">True</property>
- <property name="group">action_camera_off</property>
- <property name="value">1</property>
- </object>
- </child>
- <child>
- <object class="GtkRadioAction" id="action_camera_on">
- <property name="name">action_camera_on</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="label" translatable="yes">Video On</property>
- <property name="draw_as_radio">True</property>
- <property name="group">action_camera_off</property>
- <property name="value">2</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="view">
- <property name="name">view</property>
- <property name="label" translatable="yes">_View</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menufullscreen">
- <property name="stock_id">gtk-fullscreen</property>
- <property name="name">menufullscreen</property>
- </object>
- <accelerator key="F11"/>
- </child>
- </object>
- </child>
- <ui>
- <menubar name="menubar1">
- <menu action="call">
- <menuitem action="menuhangup"/>
- <menuitem action="menuredial"/>
- </menu>
- <menu action="camera">
- <menuitem action="action_camera_off"/>
- <menuitem action="action_camera_preview"/>
- <menuitem action="action_camera_on"/>
- </menu>
- <menu action="view">
- <menuitem action="menufullscreen"/>
- </menu>
- </menubar>
- <popup name="video-popup">
- <menuitem name="menufullscreen" action="menufullscreen"/>
- </popup>
- </ui>
- </object>
- <object class="GtkVBox" id="call_window_vbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuBar" constructor="ui_manager" id="menubar1">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="toolbar">
- <property name="visible">True</property>
- <style>
- <class name="primary-toolbar"/>
- </style>
- <child>
- <object class="GtkToolButton" id="hangup">
- <property name="visible">True</property>
- <property name="is_important">True</property>
- <property name="label" translatable="yes">Hang up</property>
- <property name="icon_name">call-stop</property>
- <property name="tooltip_text" translatable="yes">Hang up current call</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>
- <property name="tooltip_text" translatable="yes">Call the contact again</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkSeparatorToolItem" id="toolbutton1">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToggleToolButton" id="microphone">
- <property name="visible">True</property>
- <property name="active">True</property>
- <property name="label" translatable="yes">Send Audio</property>
- <property name="icon_name">gnome-stock-mic</property>
- <property name="tooltip_text" translatable="yes">Toggle audio transmission</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkSeparatorToolItem" id="camera_separator">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToggleToolButton" id="camera_off">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Camera Off</property>
- <property name="sensitive">True</property>
- <property name="tooltip_text" translatable="yes">Disable camera and stop sending video</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToggleToolButton" id="camera_preview">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Preview</property>
- <property name="icon_name">avatar-default</property>
- <property name="sensitive">True</property>
- <property name="tooltip_text" translatable="yes">Enable camera but don't send video</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToggleToolButton" id="camera_on">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Camera On</property>
- <property name="icon_name">camera-web</property>
- <property name="sensitive">False</property>
- <property name="tooltip_text" translatable="yes">Enable camera and send video</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="errors_vbox">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkHPaned" id="pane">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkStatusbar" id="statusbar">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">4</property>
- </packing>
- </child>
- </object>
-
- <object class="GtkVBox" id="details_vbox">
- <property name="border_width">6</property>
- <property name="visible">False</property>
- <property name="homogeneous">False</property>
- <property name="spacing">18</property>
- <property name="orientation">vertical</property>
-
- <child>
- <object class="GtkVBox" id="video_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
- <property name="orientation">vertical</property>
-
- <child>
- <object class="GtkLabel" id="video_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Video</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">12</property>
- <property name="right_padding">0</property>
-
- <child>
- <object class="GtkGrid" id="video">
- <property name="visible">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
-
- <child>
- <object class="GtkLabel" id="vcodec1_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Encoding Codec:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
-
- <child>
-
- <object class="GtkLabel" id="vcodec_encoding_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="vcodec2_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Decoding Codec:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
-
- <object class="GtkLabel" id="vcodec_decoding_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="vrc_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Remote Candidate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="video_remote_candidate_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkImage" id="video_remote_candidate_info_img">
- <property name="visible">True</property>
- <property name="stock">gtk-info</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
-
- <child>
- <object class="GtkLabel" id="vlc_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Local Candidate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">4</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="video_local_candidate_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">4</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkImage" id="video_local_candidate_info_img">
- <property name="visible">True</property>
- <property name="stock">gtk-info</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">4</property>
- </packing>
- </child>
-
- </object>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkVBox" id="audio_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
- <property name="orientation">vertical</property>
-
- <child>
- <object class="GtkLabel" id="bvwp_audio_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Audio</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkAlignment" id="alignment3">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">12</property>
- <property name="right_padding">0</property>
-
- <child>
- <object class="GtkGrid" id="audio">
- <property name="visible">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
-
- <child>
- <object class="GtkLabel" id="acodec1_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Encoding Codec:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="acodec_encoding_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="acodec2_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Decoding Codec:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="acodec_decoding_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="arc_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Remote Candidate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="audio_remote_candidate_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkImage" id="audio_remote_candidate_info_img">
- <property name="visible">True</property>
- <property name="stock">gtk-info</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="alc_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Local Candidate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="audio_local_candidate_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkImage" id="audio_local_candidate_info_img">
- <property name="visible">True</property>
- <property name="stock">gtk-info</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- </object>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
-
-</interface>
diff --git a/src/empathy-video-widget.c b/src/empathy-video-widget.c
deleted file mode 100644
index 43ea212d5..000000000
--- a/src/empathy-video-widget.c
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * empathy-gst-gtk-widget.c - Source for EmpathyVideoWidget
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * 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 <stdio.h>
-#include <stdlib.h>
-
-#include <gdk/gdkx.h>
-#include <gst/interfaces/xoverlay.h>
-#include <farstream/fs-element-added-notifier.h>
-
-#include "empathy-video-widget.h"
-
-G_DEFINE_TYPE(EmpathyVideoWidget, empathy_video_widget,
- GTK_TYPE_DRAWING_AREA)
-
-static void empathy_video_widget_element_added_cb (
- FsElementAddedNotifier *notifier, GstBin *bin, GstElement *element,
- EmpathyVideoWidget *self);
-
-static void empathy_video_widget_sync_message_cb (
- GstBus *bus, GstMessage *message, EmpathyVideoWidget *self);
-
-/* signal enum */
-#if 0
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-#endif
-
-enum {
- PROP_GST_ELEMENT = 1,
- PROP_GST_BUS,
- PROP_MIN_WIDTH,
- PROP_MIN_HEIGHT,
- PROP_SYNC,
- PROP_ASYNC,
- PROP_FLIP_VIDEO,
-};
-
-/* private structure */
-typedef struct _EmpathyVideoWidgetPriv EmpathyVideoWidgetPriv;
-
-struct _EmpathyVideoWidgetPriv
-{
- gboolean dispose_has_run;
- GstBus *bus;
- GstElement *videosink;
- GstPad *sink_pad;
- GstElement *overlay;
- GstElement *flip;
- FsElementAddedNotifier *notifier;
- gint min_width;
- gint min_height;
- gboolean sync;
- gboolean async;
- gboolean flip_video;
- guintptr xid;
-
- GMutex *lock;
-};
-
-#define GET_PRIV(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- EMPATHY_TYPE_VIDEO_WIDGET, EmpathyVideoWidgetPriv))
-
-static void
-empathy_video_widget_init (EmpathyVideoWidget *obj)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (obj);
- GdkRGBA black;
-
- priv->lock = g_mutex_new ();
-
- priv->notifier = fs_element_added_notifier_new ();
- g_signal_connect (priv->notifier, "element-added",
- G_CALLBACK (empathy_video_widget_element_added_cb),
- obj);
-
- if (gdk_rgba_parse (&black, "Black"))
- gtk_widget_override_background_color (GTK_WIDGET (obj), 0, &black);
-
- gtk_widget_set_double_buffered (GTK_WIDGET (obj), FALSE);
-}
-
-static void
-empathy_video_widget_realized (GtkWidget *widget, gpointer user_data)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (widget);
-
- /* requesting the XID forces the GdkWindow to be native in GTK+ 2.18
- * onwards, requesting the native window in a thread causes a BadWindowID,
- * so we need to request it now. We could call gdk_window_ensure_native(),
- * but that would mean we require GTK+ 2.18, so instead we call this */
- priv->xid = GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (widget)));
-}
-
-static void
-empathy_video_widget_constructed (GObject *object)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (object);
- GstElement *colorspace, *videoscale, *sink;
- GstPad *pad;
-
- g_signal_connect (object, "realize",
- G_CALLBACK (empathy_video_widget_realized), NULL);
-
- priv->videosink = gst_bin_new (NULL);
-
- gst_object_ref_sink (priv->videosink);
-
- sink = gst_element_factory_make ("gconfvideosink", NULL);
- g_assert (sink != NULL);
-
- videoscale = gst_element_factory_make ("videoscale", NULL);
- g_assert (videoscale != NULL);
-
- g_object_set (videoscale, "qos", FALSE, NULL);
-
- colorspace = gst_element_factory_make ("ffmpegcolorspace", NULL);
- g_assert (colorspace != NULL);
-
- g_object_set (colorspace, "qos", FALSE, NULL);
-
- priv->flip = gst_element_factory_make ("videoflip", NULL);
- g_assert (priv->flip != NULL);
-
- gst_bin_add_many (GST_BIN (priv->videosink), colorspace, videoscale,
- priv->flip, sink, NULL);
-
- if (!gst_element_link (colorspace, videoscale))
- g_error ("Failed to link ffmpegcolorspace and videoscale");
-
- if (!gst_element_link (videoscale, priv->flip))
- g_error ("Failed to link videoscale and videoflip");
-
- if (!gst_element_link (priv->flip, sink))
- g_error ("Failed to link videoflip and gconfvideosink");
-
- pad = gst_element_get_static_pad (colorspace, "sink");
- g_assert (pad != NULL);
-
- priv->sink_pad = gst_ghost_pad_new ("sink", pad);
- if (!gst_element_add_pad (priv->videosink, priv->sink_pad))
- g_error ("Couldn't add sink ghostpad to the bin");
-
- gst_object_unref (pad);
-
- fs_element_added_notifier_add (priv->notifier, GST_BIN (priv->videosink));
- gst_bus_enable_sync_message_emission (priv->bus);
-
- g_signal_connect (priv->bus, "sync-message",
- G_CALLBACK (empathy_video_widget_sync_message_cb), object);
-
- gtk_widget_set_size_request (GTK_WIDGET (object), priv->min_width,
- priv->min_height);
-}
-
-static void empathy_video_widget_dispose (GObject *object);
-static void empathy_video_widget_finalize (GObject *object);
-
-
-static gboolean empathy_video_widget_draw (GtkWidget *widget,
- cairo_t *cr);
-
-static void
-empathy_video_widget_element_set_sink_properties (EmpathyVideoWidget *self);
-
-static void
-empathy_video_widget_set_property (GObject *object,
- guint property_id, const GValue *value, GParamSpec *pspec)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_GST_BUS:
- priv->bus = g_value_dup_object (value);
- break;
- case PROP_MIN_WIDTH:
- priv->min_width = g_value_get_int (value);
- break;
- case PROP_MIN_HEIGHT:
- priv->min_height = g_value_get_int (value);
- break;
- case PROP_SYNC:
- priv->sync = g_value_get_boolean (value);
- empathy_video_widget_element_set_sink_properties (
- EMPATHY_VIDEO_WIDGET (object));
- break;
- case PROP_ASYNC:
- priv->async = g_value_get_boolean (value);
- empathy_video_widget_element_set_sink_properties (
- EMPATHY_VIDEO_WIDGET (object));
- break;
- case PROP_FLIP_VIDEO:
- priv->flip_video = g_value_get_boolean (value);
- gst_util_set_object_arg (G_OBJECT (priv->flip), "method",
- priv->flip_video ? "horizontal-flip" : "none");
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_video_widget_get_property (GObject *object,
- guint property_id, GValue *value, GParamSpec *pspec)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_GST_ELEMENT:
- g_value_set_object (value, priv->videosink);
- break;
- case PROP_GST_BUS:
- g_value_set_object (value, priv->bus);
- break;
- case PROP_MIN_WIDTH:
- g_value_set_int (value, priv->min_width);
- break;
- case PROP_MIN_HEIGHT:
- g_value_set_int (value, priv->min_height);
- break;
- case PROP_SYNC:
- g_value_set_boolean (value, priv->sync);
- break;
- case PROP_ASYNC:
- g_value_set_boolean (value, priv->async);
- break;
- case PROP_FLIP_VIDEO:
- g_value_set_boolean (value, priv->flip_video);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-
-static void
-empathy_video_widget_class_init (
- EmpathyVideoWidgetClass *empathy_video_widget_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_video_widget_class);
- GtkWidgetClass *widget_class =
- GTK_WIDGET_CLASS (empathy_video_widget_class);
- GParamSpec *param_spec;
-
- g_type_class_add_private (empathy_video_widget_class,
- sizeof (EmpathyVideoWidgetPriv));
-
- object_class->dispose = empathy_video_widget_dispose;
- object_class->finalize = empathy_video_widget_finalize;
- object_class->constructed = empathy_video_widget_constructed;
-
- object_class->set_property = empathy_video_widget_set_property;
- object_class->get_property = empathy_video_widget_get_property;
-
- widget_class->draw = empathy_video_widget_draw;
-
- param_spec = g_param_spec_object ("gst-element",
- "gst-element", "The underlaying gstreamer element",
- GST_TYPE_ELEMENT,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_GST_ELEMENT, param_spec);
-
- param_spec = g_param_spec_object ("gst-bus",
- "gst-bus",
- "The toplevel bus from the pipeline in which this bin will be added",
- GST_TYPE_BUS,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_GST_BUS, param_spec);
-
- param_spec = g_param_spec_int ("min-width",
- "min-width",
- "Minimal width of the widget",
- 0, G_MAXINT, EMPATHY_VIDEO_WIDGET_DEFAULT_WIDTH,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_MIN_WIDTH, param_spec);
-
- param_spec = g_param_spec_int ("min-height",
- "min-height",
- "Minimal height of the widget",
- 0, G_MAXINT, EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_MIN_HEIGHT, param_spec);
-
- param_spec = g_param_spec_boolean ("sync",
- "sync",
- "Whether the underlying sink should be sync or not",
- TRUE,
- G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_SYNC, param_spec);
-
- param_spec = g_param_spec_boolean ("async",
- "async",
- "Whether the underlying sink should be async or not",
- TRUE,
- G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_ASYNC, param_spec);
-
- param_spec = g_param_spec_boolean ("flip-video",
- "flip video",
- "Whether the video should be flipped horizontally or not",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_FLIP_VIDEO, param_spec);
-}
-
-void
-empathy_video_widget_dispose (GObject *object)
-{
- EmpathyVideoWidget *self = EMPATHY_VIDEO_WIDGET (object);
- EmpathyVideoWidgetPriv *priv = GET_PRIV (self);
-
- if (priv->dispose_has_run)
- return;
-
- 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);
-
- priv->bus = NULL;
-
- if (priv->videosink != NULL)
- g_object_unref (priv->videosink);
-
- priv->videosink = NULL;
-
-
- /* release any references held by the object here */
-
- if (G_OBJECT_CLASS (empathy_video_widget_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_video_widget_parent_class)->dispose (object);
-}
-
-void
-empathy_video_widget_finalize (GObject *object)
-{
- EmpathyVideoWidget *self = EMPATHY_VIDEO_WIDGET (object);
- EmpathyVideoWidgetPriv *priv = GET_PRIV (self);
-
- /* free any data held directly by the object here */
- g_mutex_free (priv->lock);
-
- G_OBJECT_CLASS (empathy_video_widget_parent_class)->finalize (object);
-}
-
-
-static void
-empathy_video_widget_element_set_sink_properties_unlocked (
- EmpathyVideoWidget *self)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (self);
-
- if (priv->overlay == NULL)
- return;
-
- if (g_object_class_find_property (G_OBJECT_GET_CLASS (priv->overlay),
- "force-aspect-ratio"))
- g_object_set (G_OBJECT (priv->overlay), "force-aspect-ratio", TRUE, NULL);
-
- if (g_object_class_find_property (
- G_OBJECT_GET_CLASS (priv->overlay), "sync"))
- g_object_set (G_OBJECT (priv->overlay), "sync", priv->sync, NULL);
-
- if (g_object_class_find_property (G_OBJECT_GET_CLASS (priv->overlay),
- "async"))
- g_object_set (G_OBJECT (priv->overlay), "async", priv->async, NULL);
-}
-
-static void
-empathy_video_widget_element_set_sink_properties (EmpathyVideoWidget *self)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (self);
-
- g_mutex_lock (priv->lock);
- empathy_video_widget_element_set_sink_properties_unlocked (self);
- g_mutex_unlock (priv->lock);
-}
-
-static void
-empathy_video_widget_element_added_cb (FsElementAddedNotifier *notifier,
- GstBin *bin, GstElement *element, EmpathyVideoWidget *self)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (self);
-
- /* We assume the overlay is the sink */
- g_mutex_lock (priv->lock);
- if (priv->overlay == NULL && GST_IS_X_OVERLAY (element))
- {
- priv->overlay = element;
- g_object_add_weak_pointer (G_OBJECT (element),
- (gpointer) &priv->overlay);
- empathy_video_widget_element_set_sink_properties_unlocked (self);
- gst_x_overlay_expose (GST_X_OVERLAY (priv->overlay));
- }
- g_mutex_unlock (priv->lock);
-}
-
-static void
-empathy_video_widget_sync_message_cb (GstBus *bus, GstMessage *message,
- EmpathyVideoWidget *self)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (self);
- const GstStructure *s;
-
- if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
- return;
-
- if (GST_MESSAGE_SRC (message) != (GstObject *) priv->overlay)
- return;
-
- s = gst_message_get_structure (message);
-
- if (gst_structure_has_name (s, "prepare-xwindow-id"))
- {
- g_assert (priv->xid != 0);
- gst_x_overlay_set_window_handle (GST_X_OVERLAY (priv->overlay),
- priv->xid);
- }
-}
-
-static gboolean
-empathy_video_widget_draw (GtkWidget *widget,
- cairo_t *cr)
-{
- EmpathyVideoWidget *self = EMPATHY_VIDEO_WIDGET (widget);
- EmpathyVideoWidgetPriv *priv = GET_PRIV (self);
- GtkAllocation allocation;
-
- if (priv->overlay == NULL)
- {
- gtk_widget_get_allocation (widget, &allocation);
-
- gtk_render_frame (gtk_widget_get_style_context (widget), cr,
- 0, 0,
- gtk_widget_get_allocated_width (widget),
- gtk_widget_get_allocated_height (widget));
- return TRUE;
- }
-
- gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (priv->overlay),
- GDK_WINDOW_XID (gtk_widget_get_window (widget)));
-
- gst_x_overlay_expose (GST_X_OVERLAY (priv->overlay));
-
- return TRUE;
-}
-
-GtkWidget *
-empathy_video_widget_new_with_size (GstBus *bus, gint width, gint height)
-{
- g_return_val_if_fail (bus != NULL, NULL);
-
- return GTK_WIDGET (g_object_new (EMPATHY_TYPE_VIDEO_WIDGET,
- "gst-bus", bus,
- "min-width", width,
- "min-height", height,
- NULL));
-}
-
-GtkWidget *
-empathy_video_widget_new (GstBus *bus)
-{
- g_return_val_if_fail (bus != NULL, NULL);
-
- return GTK_WIDGET (g_object_new (EMPATHY_TYPE_VIDEO_WIDGET,
- "gst-bus", bus,
- NULL));
-}
-
-GstPad *
-empathy_video_widget_get_sink (EmpathyVideoWidget *widget)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (widget);
-
- return priv->sink_pad;
-}
-
-GstElement *
-empathy_video_widget_get_element (EmpathyVideoWidget *widget)
-{
- EmpathyVideoWidgetPriv *priv = GET_PRIV (widget);
-
- return priv->videosink;
-}
diff --git a/src/empathy-video-widget.h b/src/empathy-video-widget.h
deleted file mode 100644
index cfdd0354c..000000000
--- a/src/empathy-video-widget.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * empathy-gst-gtk-widget.h - Header for EmpathyVideoWidget
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * 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_VIDEO_WIDGET_H__
-#define __EMPATHY_VIDEO_WIDGET_H__
-
-#define EMPATHY_VIDEO_WIDGET_DEFAULT_WIDTH 320
-#define EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT 240
-
-#include <glib-object.h>
-#include <gst/gst.h>
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyVideoWidget EmpathyVideoWidget;
-typedef struct _EmpathyVideoWidgetClass EmpathyVideoWidgetClass;
-
-struct _EmpathyVideoWidgetClass {
- GtkDrawingAreaClass parent_class;
-};
-
-struct _EmpathyVideoWidget {
- GtkDrawingArea parent;
-};
-
-GType empathy_video_widget_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_VIDEO_WIDGET \
- (empathy_video_widget_get_type ())
-#define EMPATHY_VIDEO_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_VIDEO_WIDGET, \
- EmpathyVideoWidget))
-#define EMPATHY_VIDEO_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_VIDEO_WIDGET, \
- EmpathyVideoWidgetClass))
-#define EMPATHY_IS_VIDEO_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_VIDEO_WIDGET))
-#define EMPATHY_IS_VIDEO_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_VIDEO_WIDGET))
-#define EMPATHY_VIDEO_WIDGET_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_VIDEO_WIDGET, \
- EmpathyVideoWidgetClass))
-
-GtkWidget *empathy_video_widget_new (GstBus *bus);
-GtkWidget *empathy_video_widget_new_with_size (GstBus *bus,
- gint width, gint height);
-
-GstElement *empathy_video_widget_get_element (EmpathyVideoWidget *widget);
-GstPad *empathy_video_widget_get_sink (EmpathyVideoWidget *widget);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_VIDEO_WIDGET_H__*/
diff --git a/src/empathy.c b/src/empathy.c
index b06b595e6..e2ae2632f 100644
--- a/src/empathy.c
+++ b/src/empathy.c
@@ -52,7 +52,6 @@
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-chatroom-manager.h>
#include <libempathy/empathy-account-settings.h>
-#include <libempathy/empathy-connectivity.h>
#include <libempathy/empathy-connection-managers.h>
#include <libempathy/empathy-request-util.h>
#include <libempathy/empathy-ft-factory.h>
@@ -119,7 +118,6 @@ struct _EmpathyApp
EmpathyChatroomManager *chatroom_manager;
EmpathyFTFactory *ft_factory;
EmpathyPresenceManager *presence_mgr;
- EmpathyConnectivity *connectivity;
GSettings *gsettings;
EmpathyNotificationsApprover *notifications_approver;
EmpathyConnectionAggregator *conn_aggregator;
@@ -157,7 +155,6 @@ empathy_app_dispose (GObject *object)
#endif
tp_clear_object (&self->presence_mgr);
- tp_clear_object (&self->connectivity);
tp_clear_object (&self->icon);
tp_clear_object (&self->account_manager);
tp_clear_object (&self->log_manager);
@@ -353,10 +350,17 @@ empathy_app_command_line (GApplication *app,
self->activated = TRUE;
/* Setting up UI */
- self->window = empathy_roster_window_dup ();
+ self->window = empathy_roster_window_new (GTK_APPLICATION (app));
+ gtk_application_set_app_menu (GTK_APPLICATION (self),
+ empathy_roster_window_get_menu_model (
+ EMPATHY_ROSTER_WINDOW (self->window)));
gtk_application_add_window (GTK_APPLICATION (app),
GTK_WINDOW (self->window));
+ gtk_application_add_accelerator (GTK_APPLICATION (app),
+ "<Primary>h",
+ "win." EMPATHY_PREFS_UI_SHOW_OFFLINE,
+ NULL);
/* check if Shell is running */
dbus = tp_dbus_daemon_dup (&error);
@@ -442,6 +446,7 @@ empathy_app_local_command_line (GApplication *app,
/* We create a group so that GOptionArgFuncs get the user data */
group = g_option_group_new ("empathy", NULL, NULL, app, NULL);
+ g_option_group_set_translation_domain (group, GETTEXT_PACKAGE);
g_option_group_add_entries (group, options);
optcontext = g_option_context_new (N_("- Empathy IM Client"));
@@ -515,17 +520,6 @@ empathy_app_init (EmpathyApp *self)
}
static void
-use_conn_notify_cb (GSettings *gsettings,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyConnectivity *connectivity = user_data;
-
- empathy_connectivity_set_use_conn (connectivity,
- g_settings_get_boolean (gsettings, key));
-}
-
-static void
migrate_config_to_xdg_dir (void)
{
gchar *xdg_dir, *old_dir, *xdg_filename, *old_filename;
@@ -748,10 +742,10 @@ empathy_app_constructed (GObject *object)
EmpathyApp *self = (EmpathyApp *) object;
gboolean chatroom_manager_ready;
+ textdomain (GETTEXT_PACKAGE);
g_set_application_name (_(PACKAGE_NAME));
gtk_window_set_default_icon_name ("empathy");
- textdomain (GETTEXT_PACKAGE);
#ifdef ENABLE_DEBUG
/* Set up debug sender */
@@ -766,14 +760,6 @@ empathy_app_constructed (GObject *object)
self->gsettings = g_settings_new (EMPATHY_PREFS_SCHEMA);
- /* Setting up Connectivity */
- self->connectivity = empathy_connectivity_dup_singleton ();
- use_conn_notify_cb (self->gsettings, EMPATHY_PREFS_USE_CONN,
- self->connectivity);
- g_signal_connect (self->gsettings,
- "changed::" EMPATHY_PREFS_USE_CONN,
- G_CALLBACK (use_conn_notify_cb), self->connectivity);
-
/* account management */
self->account_manager = tp_account_manager_dup ();
tp_proxy_prepare_async (self->account_manager, NULL,
@@ -837,7 +823,6 @@ main (int argc, char *argv[])
EmpathyApp *app;
gint retval;
- g_thread_init (NULL);
g_type_init ();
#ifdef HAVE_LIBCHAMPLAIN
diff --git a/src/ev-sidebar.c b/src/ev-sidebar.c
deleted file mode 100644
index a9eca76d9..000000000
--- a/src/ev-sidebar.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/* this file is part of evince, a gnome document viewer
- *
- * Copyright (C) 2004 Red Hat, Inc.
- * (C) 2007 Jan Arne Petersen
- *
- * Authors:
- * Jonathan Blandford <jrb@alum.mit.edu>
- * Jan Arne Petersen <jpetersen@jpetersen.org>
- *
- * Evince 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.
- *
- * Evince 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 02110-1301 USA.
- *
- * Thursday 03 May 2007: Bastien Nocera: Add exception clause.
- * See license_change file for details.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "ev-sidebar.h"
-
-enum
-{
- PAGE_COLUMN_ID,
- PAGE_COLUMN_TITLE,
- PAGE_COLUMN_NUM_COLS
-};
-
-struct _EvSidebarPrivate {
- GtkWidget *combobox;
- GtkWidget *notebook;
-};
-
-enum {
- CLOSED,
- CHANGED,
- LAST_SIGNAL
-};
-
-static int ev_sidebar_table_signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (EvSidebar, ev_sidebar, GTK_TYPE_VBOX)
-
-#define EV_SIDEBAR_GET_PRIVATE(object) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR, EvSidebarPrivate))
-
-static void
-ev_sidebar_class_init (EvSidebarClass *ev_sidebar_class)
-{
- GObjectClass *g_object_class;
-
- g_object_class = G_OBJECT_CLASS (ev_sidebar_class);
-
- g_type_class_add_private (g_object_class, sizeof (EvSidebarPrivate));
-
- ev_sidebar_table_signals[CLOSED] =
- g_signal_new ("closed",
- G_TYPE_FROM_CLASS (g_object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvSidebarClass, closed),
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 0);
-
- ev_sidebar_table_signals[CHANGED] =
- g_signal_new ("changed",
- G_TYPE_FROM_CLASS (g_object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvSidebarClass, closed),
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_STRING);
-
-}
-
-static void
-ev_sidebar_close_clicked_cb (GtkWidget *widget,
- gpointer user_data)
-{
- EvSidebar *ev_sidebar = EV_SIDEBAR (user_data);
-
- g_signal_emit (G_OBJECT (ev_sidebar),
- ev_sidebar_table_signals[CLOSED], 0, NULL);
- gtk_widget_hide (GTK_WIDGET (ev_sidebar));
-}
-
-static void
-ev_sidebar_combobox_changed_cb (GtkComboBox *combo_box,
- gpointer user_data)
-{
- EvSidebar *ev_sidebar = EV_SIDEBAR (user_data);
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- model = gtk_combo_box_get_model (combo_box);
-
- if (gtk_combo_box_get_active_iter (combo_box, &iter)) {
- GtkTreePath *path;
- gint *indices;
-
- path = gtk_tree_model_get_path (model, &iter);
- indices = gtk_tree_path_get_indices (path);
-
- if (indices != NULL) {
- gchar *page;
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook), indices[0]);
- gtk_tree_model_get (model, &iter, PAGE_COLUMN_ID, &page, -1);
- g_signal_emit (G_OBJECT (ev_sidebar), ev_sidebar_table_signals[CHANGED], 0, page);
- g_free (page);
- }
-
- gtk_tree_path_free (path);
- }
-
-}
-
-static void
-ev_sidebar_init (EvSidebar *ev_sidebar)
-{
- GtkTreeModel *page_model;
- GtkWidget *vbox, *hbox;
- GtkWidget *close_button;
- GtkCellRenderer *renderer;
- GtkWidget *image;
-
- ev_sidebar->priv = EV_SIDEBAR_GET_PRIVATE (ev_sidebar);
-
- /* data model */
- page_model = (GtkTreeModel *)
- gtk_list_store_new (PAGE_COLUMN_NUM_COLS,
- G_TYPE_STRING,
- G_TYPE_STRING,
- GTK_TYPE_WIDGET,
- G_TYPE_INT);
-
- /* create a 6 6 6 0 border with GtkBoxes */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- gtk_box_pack_start (GTK_BOX (ev_sidebar), hbox, TRUE, TRUE, 6);
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), gtk_box_new (GTK_ORIENTATION_VERTICAL, 0), FALSE, FALSE, 0);
-
- /* top option menu */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
- gtk_widget_show (hbox);
-
- ev_sidebar->priv->combobox = gtk_combo_box_new_with_model (page_model);
- g_signal_connect (ev_sidebar->priv->combobox, "changed",
- G_CALLBACK (ev_sidebar_combobox_changed_cb),
- ev_sidebar);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (ev_sidebar->priv->combobox), renderer, TRUE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (ev_sidebar->priv->combobox), renderer, "text", PAGE_COLUMN_TITLE);
-
- gtk_box_pack_start (GTK_BOX (hbox), ev_sidebar->priv->combobox, TRUE, TRUE, 0);
- gtk_widget_show (ev_sidebar->priv->combobox);
-
- g_object_unref (G_OBJECT (page_model));
-
- close_button = gtk_button_new ();
- gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
- g_signal_connect (close_button, "clicked",
- G_CALLBACK (ev_sidebar_close_clicked_cb),
- ev_sidebar);
-
- image = gtk_image_new_from_stock (GTK_STOCK_CLOSE,
- GTK_ICON_SIZE_MENU);
- gtk_container_add (GTK_CONTAINER (close_button), image);
- gtk_widget_show (image);
-
- gtk_box_pack_end (GTK_BOX (hbox), close_button, FALSE, FALSE, 0);
- gtk_widget_show (close_button);
-
- ev_sidebar->priv->notebook = gtk_notebook_new ();
- gtk_notebook_set_show_border (GTK_NOTEBOOK (ev_sidebar->priv->notebook), FALSE);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (ev_sidebar->priv->notebook), FALSE);
- gtk_box_pack_start (GTK_BOX (vbox), ev_sidebar->priv->notebook,
- TRUE, TRUE, 0);
- gtk_widget_show (ev_sidebar->priv->notebook);
-}
-
-/* Public functions */
-
-GtkWidget *
-ev_sidebar_new (void)
-{
- GtkWidget *ev_sidebar;
-
- ev_sidebar = g_object_new (EV_TYPE_SIDEBAR, NULL);
-
- return ev_sidebar;
-}
-
-/* NOTE: Return values from this have to be g_free()d */
-char *
-ev_sidebar_get_current_page (EvSidebar *ev_sidebar)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
- char *id;
-
- g_return_val_if_fail (EV_IS_SIDEBAR (ev_sidebar), NULL);
- g_return_val_if_fail (ev_sidebar->priv != NULL, NULL);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (ev_sidebar->priv->combobox));
-
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (ev_sidebar->priv->combobox), &iter)) {
- gtk_tree_model_get (model, &iter, PAGE_COLUMN_ID, &id, -1);
-
- return id;
- }
-
- return NULL;
-}
-
-static gboolean
-ev_sidebar_get_iter_for_page_id (EvSidebar *ev_sidebar,
- const char *new_page_id,
- GtkTreeIter *iter)
-{
- GtkTreeModel *model;
- gboolean valid;
- gchar *page_id;
-
- g_return_val_if_fail (EV_IS_SIDEBAR (ev_sidebar), FALSE);
- g_return_val_if_fail (ev_sidebar->priv != NULL, FALSE);
- g_return_val_if_fail (iter != NULL, FALSE);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (ev_sidebar->priv->combobox));
-
- valid = gtk_tree_model_get_iter_first (model, iter);
-
- while (valid) {
- gtk_tree_model_get (model, iter, PAGE_COLUMN_ID, &page_id, -1);
-
- if (page_id != NULL && strcmp (new_page_id, page_id) == 0) {
- g_free (page_id);
- return TRUE;
- }
- g_free (page_id);
-
- valid = gtk_tree_model_iter_next (model, iter);
- }
-
- return FALSE;
-}
-
-void
-ev_sidebar_set_current_page (EvSidebar *ev_sidebar, const char *new_page_id)
-{
- GtkTreeIter iter;
-
- g_return_if_fail (EV_IS_SIDEBAR (ev_sidebar));
- g_return_if_fail (new_page_id != NULL);
-
-
- if (ev_sidebar_get_iter_for_page_id (ev_sidebar, new_page_id, &iter)) {
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (ev_sidebar->priv->combobox), &iter);
- }
-}
-
-void
-ev_sidebar_add_page (EvSidebar *ev_sidebar,
- const gchar *page_id,
- const gchar *title,
- GtkWidget *main_widget)
-{
- GtkTreeIter iter, iter2;
- GtkTreeModel *model;
-
- g_return_if_fail (EV_IS_SIDEBAR (ev_sidebar));
- g_return_if_fail (page_id != NULL);
- g_return_if_fail (title != NULL);
- g_return_if_fail (GTK_IS_WIDGET (main_widget));
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (ev_sidebar->priv->combobox));
-
- gtk_widget_set_sensitive (GTK_WIDGET (ev_sidebar), TRUE);
-
- gtk_widget_show (main_widget);
- gtk_notebook_append_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook), main_widget, NULL);
-
- gtk_list_store_insert_with_values (GTK_LIST_STORE (model), &iter, -1,
- PAGE_COLUMN_ID, page_id,
- PAGE_COLUMN_TITLE, title,
- -1);
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (ev_sidebar->priv->combobox), &iter2)) {
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (ev_sidebar->priv->combobox), &iter);
- }
-}
-
-void
-ev_sidebar_remove_page (EvSidebar *ev_sidebar,
- const gchar *page_id)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- g_return_if_fail (EV_IS_SIDEBAR (ev_sidebar));
- g_return_if_fail (page_id != NULL);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (ev_sidebar->priv->combobox));
-
- if (ev_sidebar_get_iter_for_page_id (ev_sidebar, page_id, &iter)) {
- GtkTreePath *path;
- gint *indices;
-
- path = gtk_tree_model_get_path (model, &iter);
- indices = gtk_tree_path_get_indices (path);
-
- g_assert (indices != NULL);
- gtk_notebook_remove_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook), indices[0]);
-
- gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
-
- if (gtk_tree_model_iter_n_children (model, NULL) != 0) {
- gtk_tree_path_prev (path);
-
- if (gtk_tree_model_get_iter (model, &iter, path)) {
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (ev_sidebar->priv->combobox), &iter);
- }
- } else {
- gtk_widget_set_sensitive (GTK_WIDGET (ev_sidebar), FALSE);
- }
-
- gtk_tree_path_free (path);
- }
-}
-
diff --git a/src/ev-sidebar.h b/src/ev-sidebar.h
deleted file mode 100644
index cfb57f2eb..000000000
--- a/src/ev-sidebar.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ev-sidebar.h
- * this file is part of evince, a gnome document viewer
- *
- * Copyright (C) 2004 Red Hat, Inc.
- *
- * Author:
- * Jonathan Blandford <jrb@alum.mit.edu>
- *
- * Evince 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.
- *
- * Evince 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 02110-1301 USA.
- *
- * Thursday 03 May 2007: Bastien Nocera: Add exception clause.
- * See license_change file for details.
- *
- */
-
-#ifndef __EV_SIDEBAR_H__
-#define __EV_SIDEBAR_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EvSidebar EvSidebar;
-typedef struct _EvSidebarClass EvSidebarClass;
-typedef struct _EvSidebarPrivate EvSidebarPrivate;
-
-#define EV_TYPE_SIDEBAR (ev_sidebar_get_type())
-#define EV_SIDEBAR(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_SIDEBAR, EvSidebar))
-#define EV_SIDEBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_SIDEBAR, EvSidebarClass))
-#define EV_IS_SIDEBAR(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_SIDEBAR))
-#define EV_IS_SIDEBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_SIDEBAR))
-#define EV_SIDEBAR_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_SIDEBAR, EvSidebarClass))
-
-struct _EvSidebar {
- GtkVBox base_instance;
-
- EvSidebarPrivate *priv;
-};
-
-struct _EvSidebarClass {
- GtkVBoxClass base_class;
-
- void (*closed) (EvSidebar *sidebar);
-};
-
-GType ev_sidebar_get_type (void);
-GtkWidget *ev_sidebar_new (void);
-void ev_sidebar_add_page (EvSidebar *ev_sidebar,
- const gchar *page_id,
- const gchar *title,
- GtkWidget *main_widget);
-void ev_sidebar_set_current_page
- (EvSidebar *ev_sidebar,
- const char *page_id);
-char *ev_sidebar_get_current_page
- (EvSidebar *ev_sidebar);
-void ev_sidebar_remove_page (EvSidebar *ev_sidebar,
- const gchar *page_id);
-
-G_END_DECLS
-
-#endif /* __EV_SIDEBAR_H__ */
-
-
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7bcfa5e49..fdd67482a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = interactive xml
+SUBDIRS = interactive xml certificates
CLEANFILES=
@@ -16,6 +16,7 @@ AM_CPPFLAGS = \
$(EMPATHY_CFLAGS) \
$(WARN_CFLAGS) \
$(DISABLE_DEPRECATED) \
+ -DSRCDIR=\""$(abs_srcdir)"\" \
$(NULL)
LDADD = \
@@ -24,7 +25,7 @@ LDADD = \
$(EMPATHY_LIBS) \
$(NULL)
-TEST_PROGS = \
+tests_list = \
empathy-irc-server-test \
empathy-irc-network-test \
empathy-irc-network-manager-test \
@@ -34,8 +35,12 @@ TEST_PROGS = \
empathy-live-search-test \
empathy-tls-test
+noinst_PROGRAMS = $(tests_list)
+TESTS = $(tests_list)
+
empathy_tls_test_SOURCES = empathy-tls-test.c \
- test-helper.c test-helper.h
+ test-helper.c test-helper.h \
+ mock-pkcs11.c mock-pkcs11.h
empathy_irc_server_test_SOURCES = empathy-irc-server-test.c \
test-helper.c test-helper.h \
@@ -61,8 +66,6 @@ empathy_parser_test_SOURCES = empathy-parser-test.c \
empathy_live_search_test_SOURCES = empathy-live-search-test.c \
test-helper.c test-helper.h
-check_PROGRAMS = $(TEST_PROGS)
-
TESTS_ENVIRONMENT = EMPATHY_SRCDIR=@abs_top_srcdir@ \
MC_PROFILE_DIR=@abs_top_srcdir@/tests \
MC_MANAGER_DIR=@abs_top_srcdir@/tests
@@ -71,10 +74,10 @@ test-report: test-report.xml
gtester-report $(top_builddir)/tests/$@.xml > \
$(top_builddir)/tests/$@.html
-test-report.xml: ${TEST_PROGS} test
+test-report.xml: ${TESTS} test
-test: ${TEST_PROGS}
- gtester -o test-report.xml -k --verbose ${TEST_PROGS}
+test: ${TESTS}
+ gtester -o test-report.xml -k --verbose ${TESTS}
test-%: empathy-%-test
gtester -o $@-report.xml -k --verbose $<
diff --git a/tests/certificates/Makefile.am b/tests/certificates/Makefile.am
new file mode 100644
index 000000000..08fefe9f1
--- /dev/null
+++ b/tests/certificates/Makefile.am
@@ -0,0 +1,3 @@
+EXTRA_DIST = \
+ collabora-ca.cer \
+ dhansak-collabora.cer
diff --git a/tests/certificates/collabora-ca/collabora-ca.cer b/tests/certificates/collabora-ca.cer
index 2842c696f..2842c696f 100644
--- a/tests/certificates/collabora-ca/collabora-ca.cer
+++ b/tests/certificates/collabora-ca.cer
Binary files differ
diff --git a/tests/empathy-tls-test.c b/tests/empathy-tls-test.c
index 58c53dc6b..c663aad2d 100644
--- a/tests/empathy-tls-test.c
+++ b/tests/empathy-tls-test.c
@@ -2,20 +2,17 @@
#include <stdio.h>
#include <string.h>
-#include <libempathy/empathy-tls-certificate.h>
#include <libempathy/empathy-tls-verifier.h>
#include "test-helper.h"
+#include "mock-pkcs11.h"
#include <gcr/gcr.h>
#include <gnutls/gnutls.h>
-#include <telepathy-glib/dbus-properties-mixin.h>
-#include <telepathy-glib/enums.h>
-#include <telepathy-glib/interfaces.h>
+#include <telepathy-glib/telepathy-glib.h>
#include <telepathy-glib/svc-tls.h>
#include <telepathy-glib/svc-generic.h>
-#include <telepathy-glib/telepathy-glib.h>
#define MOCK_TLS_CERTIFICATE_PATH "/mock/certificate"
@@ -205,10 +202,10 @@ mock_tls_certificate_iface_init (gpointer g_iface,
#if 0
static void
mock_tls_certificate_assert_rejected (MockTLSCertificate *self,
- EmpTLSCertificateRejectReason reason)
+ TpTLSCertificateRejectReason reason)
{
GValueArray *rejection;
- EmpTLSCertificateRejectReason rejection_reason;
+ TpTLSCertificateRejectReason rejection_reason;
gchar *rejection_error;
GHashTable *rejection_details;
guint i;
@@ -281,7 +278,7 @@ typedef struct {
TpDBusDaemon *dbus;
const gchar *dbus_name;
MockTLSCertificate *mock;
- EmpathyTLSCertificate *cert;
+ TpTLSCertificate *cert;
GAsyncResult *result;
} Test;
@@ -289,6 +286,9 @@ static void
setup (Test *test, gconstpointer data)
{
GError *error = NULL;
+ GckModule *module;
+ const gchar *trust_uris[2] = { MOCK_SLOT_ONE_URI, NULL };
+
test->loop = g_main_loop_new (NULL, FALSE);
test->dbus = tp_dbus_daemon_dup (&error);
@@ -299,13 +299,20 @@ setup (Test *test, gconstpointer data)
test->result = NULL;
test->cert = NULL;
- /* No PKCS#11 modules by default, tests add them */
+ /* Add our mock module as the only PKCS#11 module */
+ module = gck_module_new (&mock_default_functions);
+ mock_C_Initialize (NULL);
+
gcr_pkcs11_set_modules (NULL);
+ gcr_pkcs11_add_module (module);
+ gcr_pkcs11_set_trust_lookup_uris (trust_uris);
}
static void
teardown (Test *test, gconstpointer data)
{
+ mock_C_Finalize (NULL);
+
test->dbus_name = NULL;
if (test->mock)
@@ -331,42 +338,30 @@ teardown (Test *test, gconstpointer data)
}
static void
-add_pkcs11_module_for_testing (Test *test,
- const gchar *filename,
- const gchar *subdir)
+add_certificate_to_mock (Test *test,
+ const gchar *certificate,
+ const gchar *peer)
{
GError *error = NULL;
- gchar *args, *path, *directory;
- gchar *standalone, *error_output;
- gint exit_status;
+ GcrCertificate *cert;
+ gchar *contents;
+ gsize length;
+ gchar *path;
- directory = g_build_filename (g_getenv ("EMPATHY_SRCDIR"),
- "tests", "certificates", subdir, NULL);
+ path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"),
+ "tests", "certificates", certificate, NULL);
- /*
- * Lookup the directory for standalone pkcs11 modules installed by
- * gnome-keyring. We use these for testing our implementation.
- */
- g_spawn_command_line_sync ("pkg-config --variable=pkcs11standalonedir gcr-3",
- &standalone, &error_output, &exit_status, &error);
+ g_file_get_contents (path, &contents, &length, &error);
g_assert_no_error (error);
- if (exit_status != 0)
- {
- g_warning ("couldn't determine standalone pkcs11 module directory: %d: %s",
- exit_status, error_output);
- g_assert_not_reached ();
- }
- g_strstrip (standalone);
- args = g_strdup_printf ("directory=\"%s\"", directory);
- path = g_build_filename (standalone, filename, NULL);
- gcr_pkcs11_add_module_from_file (path, args, &error);
- g_assert_no_error (error);
+ cert = gcr_simple_certificate_new ((const guchar *)contents, length);
+ mock_module_add_certificate (cert);
+ mock_module_add_assertion (cert,
+ peer ? CKT_X_PINNED_CERTIFICATE : CKT_X_ANCHORED_CERTIFICATE,
+ GCR_PURPOSE_SERVER_AUTH, peer);
+ g_object_unref (cert);
- g_free (directory);
- g_free (standalone);
- g_free (error_output);
- g_free (args);
+ g_free (contents);
g_free (path);
}
@@ -385,17 +380,22 @@ static void
ensure_certificate_proxy (Test *test)
{
GError *error = NULL;
+ GQuark features[] = { TP_TLS_CERTIFICATE_FEATURE_CORE, 0 };
if (test->cert)
return;
/* Create and prepare a certificate */
- test->cert = empathy_tls_certificate_new (test->dbus, test->dbus_name,
- MOCK_TLS_CERTIFICATE_PATH, &error);
- g_assert_no_error (error);
- empathy_tls_certificate_prepare_async (test->cert, fetch_callback_result, test);
+ /* We don't use tp_tls_certificate_new() as we don't pass a parent */
+ test->cert = g_object_new (TP_TYPE_TLS_CERTIFICATE,
+ "dbus-daemon", test->dbus,
+ "bus-name", test->dbus_name,
+ "object-path", MOCK_TLS_CERTIFICATE_PATH,
+ NULL);
+
+ tp_proxy_prepare_async (test->cert, features, fetch_callback_result, test);
g_main_loop_run (test->loop);
- empathy_tls_certificate_prepare_finish (test->cert, test->result, &error);
+ tp_proxy_prepare_finish (test->cert, test->result, &error);
g_assert_no_error (error);
/* Clear for any future async stuff */
@@ -415,9 +415,9 @@ test_certificate_mock_basics (Test *test,
ensure_certificate_proxy (test);
- empathy_tls_certificate_accept_async (test->cert, fetch_callback_result, test);
+ tp_tls_certificate_accept_async (test->cert, fetch_callback_result, test);
g_main_loop_run (test->loop);
- empathy_tls_certificate_accept_finish (test->cert, test->result, &error);
+ tp_tls_certificate_accept_finish (test->cert, test->result, &error);
g_assert_no_error (error);
g_assert (test->mock->state == TP_TLS_CERTIFICATE_STATE_ACCEPTED);
@@ -427,7 +427,7 @@ static void
test_certificate_verify_success_with_pkcs11_lookup (Test *test,
gconstpointer data G_GNUC_UNUSED)
{
- EmpTLSCertificateRejectReason reason = 0;
+ TpTLSCertificateRejectReason reason = 0;
GError *error = NULL;
EmpathyTLSVerifier *verifier;
const gchar *reference_identities[] = {
@@ -445,8 +445,7 @@ test_certificate_verify_success_with_pkcs11_lookup (Test *test,
"dhansak-collabora.cer", NULL);
/* We add the collabora directory with the collabora root */
- add_pkcs11_module_for_testing (test, "gkm-roots-store-standalone.so",
- "collabora-ca");
+ add_certificate_to_mock (test, "collabora-ca.cer", NULL);
ensure_certificate_proxy (test);
@@ -469,7 +468,7 @@ static void
test_certificate_verify_success_with_full_chain (Test *test,
gconstpointer data G_GNUC_UNUSED)
{
- EmpTLSCertificateRejectReason reason = 0;
+ TpTLSCertificateRejectReason reason = 0;
GError *error = NULL;
EmpathyTLSVerifier *verifier;
const gchar *reference_identities[] = {
@@ -483,11 +482,10 @@ test_certificate_verify_success_with_full_chain (Test *test,
*/
test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "dhansak-collabora.cer", "collabora-ca/collabora-ca.cer", NULL);
+ "dhansak-collabora.cer", "collabora-ca.cer", NULL);
/* We add the collabora directory with the collabora root */
- add_pkcs11_module_for_testing (test, "gkm-roots-store-standalone.so",
- "collabora-ca");
+ add_certificate_to_mock (test, "collabora-ca.cer", NULL);
ensure_certificate_proxy (test);
@@ -509,7 +507,7 @@ static void
test_certificate_verify_root_not_found (Test *test,
gconstpointer data G_GNUC_UNUSED)
{
- EmpTLSCertificateRejectReason reason = 0;
+ TpTLSCertificateRejectReason reason = 0;
GError *error = NULL;
EmpathyTLSVerifier *verifier;
const gchar *reference_identities[] = {
@@ -534,7 +532,7 @@ test_certificate_verify_root_not_found (Test *test,
/* And it should say we're self-signed (oddly enough) */
g_assert_error (error, G_IO_ERROR,
- EMP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED);
+ TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED);
g_clear_error (&error);
g_object_unref (verifier);
@@ -544,7 +542,7 @@ static void
test_certificate_verify_root_not_anchored (Test *test,
gconstpointer data G_GNUC_UNUSED)
{
- EmpTLSCertificateRejectReason reason = 0;
+ TpTLSCertificateRejectReason reason = 0;
GError *error = NULL;
EmpathyTLSVerifier *verifier;
const gchar *reference_identities[] = {
@@ -553,7 +551,7 @@ test_certificate_verify_root_not_anchored (Test *test,
};
test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "dhansak-collabora.cer", "collabora-ca/collabora-ca.cer", NULL);
+ "dhansak-collabora.cer", "collabora-ca.cer", NULL);
/* Note that we're not adding any place to find root certs */
@@ -569,7 +567,7 @@ test_certificate_verify_root_not_anchored (Test *test,
/* And it should say we're self-signed (oddly enough) */
g_assert_error (error, G_IO_ERROR,
- EMP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED);
+ TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED);
g_clear_error (&error);
g_object_unref (verifier);
@@ -579,7 +577,7 @@ static void
test_certificate_verify_identities_invalid (Test *test,
gconstpointer data G_GNUC_UNUSED)
{
- EmpTLSCertificateRejectReason reason = 0;
+ TpTLSCertificateRejectReason reason = 0;
GError *error = NULL;
EmpathyTLSVerifier *verifier;
const gchar *reference_identities[] = {
@@ -588,11 +586,10 @@ test_certificate_verify_identities_invalid (Test *test,
};
test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "dhansak-collabora.cer", "collabora-ca/collabora-ca.cer", NULL);
+ "dhansak-collabora.cer", "collabora-ca.cer", NULL);
/* We add the collabora directory with the collabora root */
- add_pkcs11_module_for_testing (test, "gkm-roots-store-standalone.so",
- "collabora-ca");
+ add_certificate_to_mock (test, "collabora-ca.cer", NULL);
ensure_certificate_proxy (test);
@@ -606,7 +603,7 @@ test_certificate_verify_identities_invalid (Test *test,
/* And it should say we're self-signed (oddly enough) */
g_assert_error (error, G_IO_ERROR,
- EMP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
+ TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
g_clear_error (&error);
g_object_unref (verifier);
@@ -616,7 +613,7 @@ static void
test_certificate_verify_uses_reference_identities (Test *test,
gconstpointer data G_GNUC_UNUSED)
{
- EmpTLSCertificateRejectReason reason = 0;
+ TpTLSCertificateRejectReason reason = 0;
GError *error = NULL;
EmpathyTLSVerifier *verifier;
const gchar *reference_identities[] = {
@@ -625,11 +622,10 @@ test_certificate_verify_uses_reference_identities (Test *test,
};
test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "dhansak-collabora.cer", "collabora-ca/collabora-ca.cer", NULL);
+ "dhansak-collabora.cer", "collabora-ca.cer", NULL);
/* We add the collabora directory with the collabora root */
- add_pkcs11_module_for_testing (test, "gkm-roots-store-standalone.so",
- "collabora-ca");
+ add_certificate_to_mock (test, "collabora-ca.cer", NULL);
ensure_certificate_proxy (test);
@@ -644,7 +640,81 @@ test_certificate_verify_uses_reference_identities (Test *test,
/* And it should say we're self-signed (oddly enough) */
g_assert_error (error, G_IO_ERROR,
- EMP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
+ TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
+
+ g_clear_error (&error);
+ g_object_unref (verifier);
+}
+
+static void
+test_certificate_verify_success_with_pinned (Test *test,
+ gconstpointer data G_GNUC_UNUSED)
+{
+ TpTLSCertificateRejectReason reason = 0;
+ GError *error = NULL;
+ EmpathyTLSVerifier *verifier;
+ const gchar *reference_identities[] = {
+ "www.collabora.co.uk",
+ NULL
+ };
+
+ /*
+ * In this test the mock TLS connection has a full certificate
+ * chain. We look for an anchor certificate in the chain.
+ */
+
+ test->mock = mock_tls_certificate_new_and_register (test->dbus,
+ "dhansak-collabora.cer", NULL);
+
+ /* We add the collabora directory with the collabora root */
+ add_certificate_to_mock (test, "dhansak-collabora.cer", "www.collabora.co.uk");
+
+ ensure_certificate_proxy (test);
+
+ verifier = empathy_tls_verifier_new (test->cert, "www.collabora.co.uk",
+ reference_identities);
+ empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
+ g_main_loop_run (test->loop);
+ empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ /* Yay the verification was a success! */
+
+ g_clear_error (&error);
+ g_object_unref (verifier);
+}
+
+static void
+test_certificate_verify_pinned_wrong_host (Test *test,
+ gconstpointer data G_GNUC_UNUSED)
+{
+ TpTLSCertificateRejectReason reason = 0;
+ GError *error = NULL;
+ EmpathyTLSVerifier *verifier;
+ const gchar *reference_identities[] = {
+ "www.collabora.co.uk",
+ NULL
+ };
+
+ test->mock = mock_tls_certificate_new_and_register (test->dbus,
+ "dhansak-collabora.cer", NULL);
+
+ /* Note that we're not adding any place to find root certs */
+
+ ensure_certificate_proxy (test);
+
+ verifier = empathy_tls_verifier_new (test->cert, "another.collabora.co.uk",
+ reference_identities);
+ empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
+ g_main_loop_run (test->loop);
+
+ empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
+ NULL, &error);
+
+ /* And it should say we're self-signed */
+ g_assert_error (error, G_IO_ERROR,
+ TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED);
g_clear_error (&error);
g_object_unref (verifier);
@@ -673,6 +743,10 @@ main (int argc,
setup, test_certificate_verify_identities_invalid, teardown);
g_test_add ("/tls/certificate_verify_uses_reference_identities", Test, NULL,
setup, test_certificate_verify_uses_reference_identities, teardown);
+ g_test_add ("/tls/certificate_verify_success_with_pinned", Test, NULL,
+ setup, test_certificate_verify_success_with_pinned, teardown);
+ g_test_add ("/tls/certificate_verify_pinned_wrong_host", Test, NULL,
+ setup, test_certificate_verify_pinned_wrong_host, teardown);
result = g_test_run ();
test_deinit ();
diff --git a/tests/interactive/empathy-logs.c b/tests/interactive/empathy-logs.c
index 76717596e..0ed9f95e4 100644
--- a/tests/interactive/empathy-logs.c
+++ b/tests/interactive/empathy-logs.c
@@ -58,7 +58,6 @@ main (int argc,
{
TpAccountManager *mgr;
- g_thread_init (NULL);
gtk_init (&argc, &argv);
empathy_gtk_init ();
g_set_application_name (PACKAGE_NAME);
diff --git a/tests/mock-pkcs11.c b/tests/mock-pkcs11.c
new file mode 100644
index 000000000..4b1219f2c
--- /dev/null
+++ b/tests/mock-pkcs11.c
@@ -0,0 +1,1351 @@
+/*
+ * Copyright (C) 2010 Stefan Walter
+ * Copyright (C) 2011 Collabora Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General License as
+ * published by the Free Software Foundation; either version 2.1 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
+ * Lesser General License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * 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 "mock-pkcs11.h"
+
+#include <gcr/gcr.h>
+
+#include <glib.h>
+
+#include <string.h>
+
+/*
+ * This is *NOT* how you'd want to implement a PKCS#11 module. This
+ * fake module simply provides enough for gnutls-pkcs11 backend to test against.
+ * It doesn't pass any tests, or behave as expected from a PKCS#11 module.
+ */
+
+static gboolean initialized = FALSE;
+
+typedef enum {
+ OP_FIND = 1,
+} Operation;
+
+static CK_OBJECT_HANDLE unique_identifier = 100;
+static GHashTable *the_sessions = NULL;
+static GHashTable *the_certificates = NULL;
+static GHashTable *the_assertions = NULL;
+
+typedef struct {
+ GcrCertificate *cert;
+ CK_ULONG assertion_type;
+ gchar *purpose;
+ gchar *peer;
+} Assertion;
+
+static void
+free_assertion (gpointer data)
+{
+ Assertion *assertion = data;
+ g_clear_object (&assertion->cert);
+ g_free (assertion->purpose);
+ g_free (assertion->peer);
+ g_free (assertion);
+}
+
+typedef struct {
+ CK_SESSION_HANDLE handle;
+ CK_SESSION_INFO info;
+
+ Operation operation;
+
+ /* For find operations */
+ GList *matches;
+} Session;
+
+static void
+free_session (gpointer data)
+{
+ Session *sess = (Session*)data;
+ g_list_free (sess->matches);
+ g_free (sess);
+}
+
+CK_OBJECT_HANDLE
+mock_module_add_certificate (GcrCertificate *cert)
+{
+ CK_OBJECT_HANDLE handle;
+
+ g_return_val_if_fail (GCR_IS_CERTIFICATE (cert), 0);
+
+ handle = unique_identifier++;
+ g_hash_table_insert (the_certificates, GUINT_TO_POINTER (handle), g_object_ref (cert));
+ return handle;
+}
+
+CK_OBJECT_HANDLE
+mock_module_add_assertion (GcrCertificate *cert,
+ CK_X_ASSERTION_TYPE assertion_type,
+ const gchar *purpose,
+ const gchar *peer)
+{
+ Assertion *assertion;
+ CK_OBJECT_HANDLE handle;
+
+ g_return_val_if_fail (GCR_IS_CERTIFICATE (cert), 0);
+
+ assertion = g_new0 (Assertion, 1);
+ assertion->cert = g_object_ref (cert);
+ assertion->assertion_type = assertion_type;
+ assertion->purpose = g_strdup (purpose);
+ assertion->peer = g_strdup (peer);
+
+ handle = unique_identifier++;
+ g_hash_table_insert (the_assertions, GUINT_TO_POINTER (handle), assertion);
+ return handle;
+}
+
+CK_RV
+mock_C_Initialize (CK_VOID_PTR init_args)
+{
+ CK_C_INITIALIZE_ARGS_PTR args;
+
+ g_return_val_if_fail (initialized == FALSE, CKR_CRYPTOKI_ALREADY_INITIALIZED);
+
+ args = (CK_C_INITIALIZE_ARGS_PTR)init_args;
+ if (args)
+ {
+ g_return_val_if_fail(
+ (args->CreateMutex == NULL && args->DestroyMutex == NULL &&
+ args->LockMutex == NULL && args->UnlockMutex == NULL) ||
+ (args->CreateMutex != NULL && args->DestroyMutex != NULL &&
+ args->LockMutex != NULL && args->UnlockMutex != NULL),
+ CKR_ARGUMENTS_BAD);
+
+ /* Flags should allow OS locking and os threads */
+ g_return_val_if_fail ((args->flags & CKF_OS_LOCKING_OK), CKR_CANT_LOCK);
+ g_return_val_if_fail ((args->flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS) == 0, CKR_NEED_TO_CREATE_THREADS);
+ }
+
+ the_sessions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, free_session);
+ the_certificates = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)g_object_unref);
+ the_assertions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, free_assertion);
+
+ initialized = TRUE;
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_Finalize (CK_VOID_PTR reserved)
+{
+ g_return_val_if_fail (reserved == NULL, CKR_ARGUMENTS_BAD);
+ g_return_val_if_fail (initialized == TRUE, CKR_CRYPTOKI_NOT_INITIALIZED);
+
+ initialized = FALSE;
+
+ g_hash_table_destroy (the_certificates);
+ the_certificates = NULL;
+
+ g_hash_table_destroy (the_assertions);
+ the_assertions = NULL;
+
+ g_hash_table_destroy (the_sessions);
+ the_sessions = NULL;
+
+ return CKR_OK;
+}
+
+static const CK_INFO TEST_INFO = {
+ { CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR },
+ "TEST MANUFACTURER ",
+ 0,
+ "TEST LIBRARY ",
+ { 45, 145 }
+};
+
+CK_RV
+mock_C_GetInfo (CK_INFO_PTR info)
+{
+ g_return_val_if_fail (info, CKR_ARGUMENTS_BAD);
+ memcpy (info, &TEST_INFO, sizeof (*info));
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list)
+{
+ g_return_val_if_fail (list, CKR_ARGUMENTS_BAD);
+ *list = &mock_default_functions;
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_GetSlotList (CK_BBOOL token_present,
+ CK_SLOT_ID_PTR slot_list,
+ CK_ULONG_PTR count)
+{
+ CK_ULONG num = 1;
+
+ g_return_val_if_fail (count, CKR_ARGUMENTS_BAD);
+
+ /* Application only wants to know the number of slots. */
+ if (slot_list == NULL)
+ {
+ *count = num;
+ return CKR_OK;
+ }
+
+ if (*count < num)
+ g_return_val_if_reached (CKR_BUFFER_TOO_SMALL);
+
+ *count = num;
+ slot_list[0] = MOCK_SLOT_ONE_ID;
+ return CKR_OK;
+}
+
+/* Update mock-pkcs11.h URIs when updating this */
+
+static const CK_SLOT_INFO MOCK_INFO_ONE = {
+ "MOCK SLOT ",
+ "MOCK MANUFACTURER ",
+ CKF_TOKEN_PRESENT | CKF_REMOVABLE_DEVICE,
+ { 55, 155 },
+ { 65, 165 },
+};
+
+CK_RV
+mock_C_GetSlotInfo (CK_SLOT_ID slot_id,
+ CK_SLOT_INFO_PTR info)
+{
+ g_return_val_if_fail (info, CKR_ARGUMENTS_BAD);
+
+ if (slot_id == MOCK_SLOT_ONE_ID)
+ {
+ memcpy (info, &MOCK_INFO_ONE, sizeof (*info));
+ return CKR_OK;
+ }
+ else
+ {
+ g_return_val_if_reached (CKR_SLOT_ID_INVALID);
+ }
+}
+
+/* Update mock-pkcs11.h URIs when updating this */
+
+static const CK_TOKEN_INFO MOCK_TOKEN_ONE = {
+ "MOCK LABEL ",
+ "MOCK MANUFACTURER ",
+ "MOCK MODEL ",
+ "MOCK SERIAL ",
+ CKF_TOKEN_INITIALIZED | CKF_WRITE_PROTECTED,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ { 75, 175 },
+ { 85, 185 },
+ { '1', '9', '9', '9', '0', '5', '2', '5', '0', '9', '1', '9', '5', '9', '0', '0' }
+};
+
+CK_RV
+mock_C_GetTokenInfo (CK_SLOT_ID slot_id,
+ CK_TOKEN_INFO_PTR info)
+{
+ g_return_val_if_fail (info != NULL, CKR_ARGUMENTS_BAD);
+
+ if (slot_id == MOCK_SLOT_ONE_ID)
+ {
+ memcpy (info, &MOCK_TOKEN_ONE, sizeof (*info));
+ return CKR_OK;
+ }
+ else
+ {
+ g_return_val_if_reached (CKR_SLOT_ID_INVALID);
+ }
+}
+
+CK_RV
+mock_C_GetMechanismList (CK_SLOT_ID slot_id,
+ CK_MECHANISM_TYPE_PTR mechanism_list,
+ CK_ULONG_PTR count)
+{
+ g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
+ g_return_val_if_fail (count, CKR_ARGUMENTS_BAD);
+
+ /* Application only wants to know the number of slots. */
+ if (mechanism_list == NULL)
+ {
+ *count = 0;
+ return CKR_OK;
+ }
+
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_GetMechanismInfo (CK_SLOT_ID slot_id,
+ CK_MECHANISM_TYPE type,
+ CK_MECHANISM_INFO_PTR info)
+{
+ g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
+ g_return_val_if_fail (info, CKR_ARGUMENTS_BAD);
+
+ g_return_val_if_reached (CKR_MECHANISM_INVALID);
+}
+
+CK_RV
+mock_unsupported_C_InitToken (CK_SLOT_ID slot_id,
+ CK_UTF8CHAR_PTR pin,
+ CK_ULONG pin_len,
+ CK_UTF8CHAR_PTR label)
+{
+ g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_WaitForSlotEvent (CK_FLAGS flags,
+ CK_SLOT_ID_PTR slot_id,
+ CK_VOID_PTR reserved)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_C_OpenSession (CK_SLOT_ID slot_id,
+ CK_FLAGS flags,
+ CK_VOID_PTR application,
+ CK_NOTIFY notify,
+ CK_SESSION_HANDLE_PTR session)
+{
+ Session *sess;
+
+ g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
+ g_return_val_if_fail (session != NULL, CKR_ARGUMENTS_BAD);
+ g_return_val_if_fail ((flags & CKF_SERIAL_SESSION) == CKF_SERIAL_SESSION, CKR_SESSION_PARALLEL_NOT_SUPPORTED);
+
+ if (flags & CKF_RW_SESSION)
+ return CKR_TOKEN_WRITE_PROTECTED;
+
+ sess = g_new0 (Session, 1);
+ sess->handle = ++unique_identifier;
+ sess->info.flags = flags;
+ sess->info.slotID = slot_id;
+ sess->info.state = CKS_RO_PUBLIC_SESSION;
+ sess->info.ulDeviceError = 0;
+ *session = sess->handle;
+
+ g_hash_table_replace (the_sessions, GUINT_TO_POINTER (sess->handle), sess);
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_CloseSession (CK_SESSION_HANDLE session)
+{
+ Session *sess;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ g_hash_table_remove (the_sessions, GUINT_TO_POINTER (sess));
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_CloseAllSessions (CK_SLOT_ID slot_id)
+{
+ g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
+
+ g_hash_table_remove_all (the_sessions);
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_GetFunctionStatus (CK_SESSION_HANDLE session)
+{
+ return CKR_FUNCTION_NOT_PARALLEL;
+}
+
+CK_RV
+mock_C_CancelFunction (CK_SESSION_HANDLE session)
+{
+ return CKR_FUNCTION_NOT_PARALLEL;
+}
+
+CK_RV
+mock_C_GetSessionInfo (CK_SESSION_HANDLE session,
+ CK_SESSION_INFO_PTR info)
+{
+ Session *sess;
+
+ g_return_val_if_fail (info != NULL, CKR_ARGUMENTS_BAD);
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ memcpy (info, &sess->info, sizeof (*info));
+ return CKR_OK;
+}
+
+CK_RV
+mock_unsupported_C_InitPIN (CK_SESSION_HANDLE session,
+ CK_UTF8CHAR_PTR pin,
+ CK_ULONG pin_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_SetPIN (CK_SESSION_HANDLE session,
+ CK_UTF8CHAR_PTR old_pin,
+ CK_ULONG old_len,
+ CK_UTF8CHAR_PTR new_pin,
+ CK_ULONG new_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_GetOperationState (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR operation_state,
+ CK_ULONG_PTR operation_state_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_SetOperationState (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR operation_state,
+ CK_ULONG operation_state_len,
+ CK_OBJECT_HANDLE encryption_key,
+ CK_OBJECT_HANDLE authentication_key)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_Login (CK_SESSION_HANDLE session,
+ CK_USER_TYPE user_type,
+ CK_UTF8CHAR_PTR pin,
+ CK_ULONG pin_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_Logout (CK_SESSION_HANDLE session)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_readonly_C_CreateObject (CK_SESSION_HANDLE session,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count,
+ CK_OBJECT_HANDLE_PTR object)
+{
+ Session *sess;
+
+ g_return_val_if_fail (object, CKR_ARGUMENTS_BAD);
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_TOKEN_WRITE_PROTECTED;
+}
+
+CK_RV
+mock_unsupported_C_CopyObject (CK_SESSION_HANDLE session,
+ CK_OBJECT_HANDLE object,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count,
+ CK_OBJECT_HANDLE_PTR new_object)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_readonly_C_DestroyObject (CK_SESSION_HANDLE session,
+ CK_OBJECT_HANDLE object)
+{
+ Session *sess;
+
+ g_return_val_if_fail (object, CKR_ARGUMENTS_BAD);
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_TOKEN_WRITE_PROTECTED;
+}
+
+CK_RV
+mock_unsupported_C_GetObjectSize (CK_SESSION_HANDLE session,
+ CK_OBJECT_HANDLE object,
+ CK_ULONG_PTR pulSize)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+static CK_RV
+fill_data_attribute (CK_ATTRIBUTE *attr,
+ gconstpointer data,
+ gsize length)
+{
+ if (!attr->pValue) {
+ attr->ulValueLen = length;
+ return CKR_OK;
+ } else if (attr->ulValueLen < length) {
+ attr->ulValueLen = length;
+ return CKR_BUFFER_TOO_SMALL;
+ } else {
+ memcpy (attr->pValue, data, length);
+ attr->ulValueLen = length;
+ return CKR_OK;
+ }
+}
+
+static CK_RV
+fill_check_value_attribute (CK_ATTRIBUTE *attr,
+ GcrCertificate *cert)
+{
+ guchar *data;
+ gsize length;
+ CK_RV rv;
+
+ data = gcr_certificate_get_fingerprint (cert, G_CHECKSUM_SHA1, &length);
+ rv = fill_data_attribute (attr, data, 3);
+ g_free (data);
+
+ return rv;
+}
+
+static CK_RV
+fill_subject_attribute (CK_ATTRIBUTE *attr,
+ GcrCertificate *cert)
+{
+ guchar *data;
+ gsize length;
+ CK_RV rv;
+
+ data = gcr_certificate_get_subject_raw (cert, &length);
+ rv = fill_data_attribute (attr, data, length);
+ g_free (data);
+
+ return rv;
+}
+
+static CK_RV
+fill_issuer_attribute (CK_ATTRIBUTE *attr,
+ GcrCertificate *cert)
+{
+ guchar *data;
+ gsize length;
+ CK_RV rv;
+
+ data = gcr_certificate_get_issuer_raw (cert, &length);
+ rv = fill_data_attribute (attr, data, length);
+ g_free (data);
+
+ return rv;
+}
+
+static CK_RV
+fill_serial_attribute (CK_ATTRIBUTE *attr,
+ GcrCertificate *cert)
+{
+ guchar *data;
+ gsize length;
+ CK_RV rv;
+
+ data = gcr_certificate_get_serial_number (cert, &length);
+ rv = fill_data_attribute (attr, data, length);
+ g_free (data);
+
+ return rv;
+}
+
+static CK_RV
+fill_string_attribute (CK_ATTRIBUTE *attr,
+ const gchar *data)
+{
+ return fill_data_attribute (attr, data, strlen (data));
+}
+
+static CK_RV
+fill_id_attribute (CK_ATTRIBUTE *attr,
+ GcrCertificate *cert)
+{
+ gchar *data;
+ CK_RV rv;
+
+ data = g_strdup_printf ("%p", cert);
+ rv = fill_string_attribute (attr, data);
+ g_free (data);
+
+ return rv;
+}
+
+static CK_RV
+fill_value_attribute (CK_ATTRIBUTE *attr,
+ GcrCertificate *cert)
+{
+ const guchar *data;
+ gsize length;
+
+ data = gcr_certificate_get_der_data (cert, &length);
+ return fill_data_attribute (attr, data, length);
+}
+
+static CK_RV
+fill_ulong_attribute (CK_ATTRIBUTE *attr,
+ CK_ULONG value)
+{
+ return fill_data_attribute (attr, &value, sizeof (value));
+}
+
+static CK_RV
+fill_bool_attribute (CK_ATTRIBUTE *attr,
+ CK_BBOOL value)
+{
+ return fill_data_attribute (attr, &value, sizeof (value));
+}
+
+static CK_RV
+fill_certificate_attribute (CK_ATTRIBUTE *attr,
+ GcrCertificate *cert)
+{
+ switch (attr->type)
+ {
+ case CKA_CLASS:
+ return fill_ulong_attribute (attr, CKO_CERTIFICATE);
+ case CKA_TOKEN:
+ return fill_bool_attribute (attr, CK_TRUE);
+ case CKA_PRIVATE:
+ case CKA_MODIFIABLE:
+ case CKA_TRUSTED:
+ return fill_bool_attribute (attr, CK_FALSE);
+ case CKA_LABEL:
+ return fill_string_attribute (attr, "Certificate");
+ case CKA_CERTIFICATE_TYPE:
+ return fill_ulong_attribute (attr, CKC_X_509);
+ case CKA_CERTIFICATE_CATEGORY:
+ return fill_ulong_attribute (attr, 2);
+ case CKA_CHECK_VALUE:
+ return fill_check_value_attribute (attr, cert);
+ case CKA_START_DATE:
+ case CKA_END_DATE:
+ return fill_data_attribute (attr, "", 0);
+ case CKA_SUBJECT:
+ return fill_subject_attribute (attr, cert);
+ case CKA_ID:
+ return fill_id_attribute (attr, cert);
+ case CKA_ISSUER:
+ return fill_issuer_attribute (attr, cert);
+ case CKA_SERIAL_NUMBER:
+ return fill_serial_attribute (attr, cert);
+ case CKA_VALUE:
+ return fill_value_attribute (attr, cert);
+ case CKA_URL:
+ case CKA_HASH_OF_SUBJECT_PUBLIC_KEY:
+ case CKA_HASH_OF_ISSUER_PUBLIC_KEY:
+ case CKA_JAVA_MIDP_SECURITY_DOMAIN:
+ default:
+ return CKR_ATTRIBUTE_TYPE_INVALID;
+ }
+}
+
+static CK_RV
+fill_assertion_attribute (CK_ATTRIBUTE *attr,
+ Assertion *assertion)
+{
+ CK_RV rv;
+
+ switch (attr->type)
+ {
+ case CKA_CLASS:
+ return fill_ulong_attribute (attr, CKO_X_TRUST_ASSERTION);
+ case CKA_TOKEN:
+ return fill_bool_attribute (attr, CK_TRUE);
+ case CKA_PRIVATE:
+ case CKA_MODIFIABLE:
+ case CKA_TRUSTED:
+ return fill_bool_attribute (attr, CK_FALSE);
+ case CKA_LABEL:
+ return fill_string_attribute (attr, "Assertion");
+ case CKA_X_ASSERTION_TYPE:
+ return fill_ulong_attribute (attr, assertion->assertion_type);
+ case CKA_X_PURPOSE:
+ return fill_string_attribute (attr, assertion->purpose);
+ case CKA_X_PEER:
+ if (!assertion->peer)
+ return CKR_ATTRIBUTE_TYPE_INVALID;
+ return fill_string_attribute (attr, assertion->peer);
+ case CKA_SERIAL_NUMBER:
+ case CKA_ISSUER:
+ return fill_certificate_attribute (attr, assertion->cert);
+ case CKA_X_CERTIFICATE_VALUE:
+ attr->type = CKA_VALUE;
+ rv = fill_certificate_attribute (attr, assertion->cert);
+ attr->type = CKA_X_CERTIFICATE_VALUE;
+ return rv;
+
+ default:
+ return CKR_ATTRIBUTE_TYPE_INVALID;
+ }
+}
+
+CK_RV
+mock_C_GetAttributeValue (CK_SESSION_HANDLE session,
+ CK_OBJECT_HANDLE object,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count)
+{
+ CK_RV rv, ret = CKR_OK;
+ GcrCertificate *cert;
+ Assertion *assertion;
+ Session *sess;
+ CK_ULONG i;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ cert = g_hash_table_lookup (the_certificates, GUINT_TO_POINTER (object));
+ assertion = g_hash_table_lookup (the_assertions, GUINT_TO_POINTER (object));
+
+ if (cert != NULL) {
+ for (i = 0; i < count; i++) {
+ rv = fill_certificate_attribute (template + i, cert);
+ if (rv != CKR_OK)
+ template[i].ulValueLen = (CK_ULONG)-1;
+ if (ret != CKR_OK)
+ ret = rv;
+ }
+ } else if (assertion != NULL) {
+ for (i = 0; i < count; i++) {
+ rv = fill_assertion_attribute (template + i, assertion);
+ if (rv != CKR_OK)
+ template[i].ulValueLen = (CK_ULONG)-1;
+ if (ret != CKR_OK)
+ ret = rv;
+ }
+ } else {
+ ret = CKR_OBJECT_HANDLE_INVALID;
+ }
+
+ return ret;
+}
+
+CK_RV
+mock_readonly_C_SetAttributeValue (CK_SESSION_HANDLE session,
+ CK_OBJECT_HANDLE object,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count)
+{
+ Session *sess;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_TOKEN_WRITE_PROTECTED;
+}
+
+static gboolean
+match_object_attributes (CK_SESSION_HANDLE session,
+ CK_ULONG object,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count)
+{
+ CK_ATTRIBUTE_PTR values;
+ gboolean mismatch = FALSE;
+ CK_RV rv;
+ CK_ULONG i;
+
+ values = g_new0 (CK_ATTRIBUTE, count);
+ for (i = 0; i < count; i++) {
+ values[i].type = template[i].type;
+ if (template[i].ulValueLen != 0 &&
+ template[i].ulValueLen != (CK_ULONG)-1)
+ values[i].pValue = g_malloc (template[i].ulValueLen);
+ values[i].ulValueLen = template[i].ulValueLen;
+ }
+
+ rv = mock_C_GetAttributeValue (session, object, values, count);
+
+ if (rv == CKR_OK) {
+ for (i = 0; i < count; i++) {
+ if (gcr_comparable_memcmp (values[i].pValue, values[i].ulValueLen,
+ template[i].pValue, template[i].ulValueLen) != 0) {
+ mismatch = TRUE;
+ break;
+ }
+ }
+ }
+
+ for (i = 0; i < count; i++)
+ g_free (values[i].pValue);
+ g_free (values);
+
+ if (rv != CKR_OK)
+ return FALSE;
+
+ return !mismatch;
+}
+
+CK_RV
+mock_C_FindObjectsInit (CK_SESSION_HANDLE session,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count)
+{
+ GList *objects = NULL, *l;
+ Session *sess;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ /* Starting an operation, cancels any previous one */
+ if (sess->operation != 0)
+ sess->operation = 0;
+
+ sess->operation = OP_FIND;
+ g_list_free (sess->matches);
+ sess->matches = NULL;
+
+ objects = g_list_concat (objects, g_hash_table_get_keys (the_certificates));
+ objects = g_list_concat (objects, g_hash_table_get_keys (the_assertions));
+
+ for (l = objects; l != NULL; l = g_list_next (l)) {
+ if (match_object_attributes (session, GPOINTER_TO_UINT (l->data), template, count))
+ sess->matches = g_list_prepend (sess->matches, l->data);
+ }
+
+ g_list_free (objects);
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_FindObjects (CK_SESSION_HANDLE session,
+ CK_OBJECT_HANDLE_PTR object,
+ CK_ULONG max_object_count,
+ CK_ULONG_PTR object_count)
+{
+ Session *sess;
+
+ g_return_val_if_fail (object, CKR_ARGUMENTS_BAD);
+ g_return_val_if_fail (object_count, CKR_ARGUMENTS_BAD);
+ g_return_val_if_fail (max_object_count != 0, CKR_ARGUMENTS_BAD);
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+ g_return_val_if_fail (sess->operation == OP_FIND, CKR_OPERATION_NOT_INITIALIZED);
+
+ *object_count = 0;
+ while (max_object_count > 0 && sess->matches)
+ {
+ *object = GPOINTER_TO_UINT (sess->matches->data);
+ ++object;
+ --max_object_count;
+ ++(*object_count);
+ sess->matches = g_list_remove (sess->matches, sess->matches->data);
+ }
+
+ return CKR_OK;
+}
+
+CK_RV
+mock_C_FindObjectsFinal (CK_SESSION_HANDLE session)
+{
+ Session *sess;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+ g_return_val_if_fail (sess->operation == OP_FIND, CKR_OPERATION_NOT_INITIALIZED);
+
+ sess->operation = 0;
+ g_list_free (sess->matches);
+ sess->matches = NULL;
+
+ return CKR_OK;
+}
+
+CK_RV
+mock_no_mechanisms_C_EncryptInit (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE key)
+{
+ Session *sess;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_MECHANISM_INVALID;
+}
+
+CK_RV
+mock_not_initialized_C_Encrypt (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR data,
+ CK_ULONG data_len,
+ CK_BYTE_PTR encrypted_data,
+ CK_ULONG_PTR encrypted_data_len)
+{
+ return CKR_OPERATION_NOT_INITIALIZED;
+}
+
+CK_RV
+mock_unsupported_C_EncryptUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR part,
+ CK_ULONG part_len,
+ CK_BYTE_PTR encrypted_part,
+ CK_ULONG_PTR encrypted_part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_EncryptFinal (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR last_encrypted_part,
+ CK_ULONG_PTR last_encrypted_part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_no_mechanisms_C_DecryptInit (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE key)
+{
+ Session *sess;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_MECHANISM_INVALID;
+}
+
+CK_RV
+mock_not_initialized_C_Decrypt (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR encrypted_data,
+ CK_ULONG encrypted_data_len,
+ CK_BYTE_PTR data,
+ CK_ULONG_PTR data_len)
+{
+ return CKR_OPERATION_NOT_INITIALIZED;
+}
+
+CK_RV
+mock_unsupported_C_DecryptUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR encrypted_part,
+ CK_ULONG encrypted_key_len,
+ CK_BYTE_PTR part,
+ CK_ULONG_PTR part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_DecryptFinal (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR last_part,
+ CK_ULONG_PTR last_part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_DigestInit (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_Digest (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR data,
+ CK_ULONG data_len,
+ CK_BYTE_PTR digest,
+ CK_ULONG_PTR digest_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_DigestUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR part,
+ CK_ULONG part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_DigestKey (CK_SESSION_HANDLE session,
+ CK_OBJECT_HANDLE key)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_DigestFinal (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR digest,
+ CK_ULONG_PTR digest_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_no_mechanisms_C_SignInit (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE key)
+{
+ Session *sess;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_MECHANISM_INVALID;
+}
+
+CK_RV
+mock_not_initialized_C_Sign (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR data,
+ CK_ULONG data_len,
+ CK_BYTE_PTR signature,
+ CK_ULONG_PTR signature_len)
+{
+ return CKR_OPERATION_NOT_INITIALIZED;
+}
+
+CK_RV
+mock_unsupported_C_SignUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR part,
+ CK_ULONG part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_SignFinal (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR signature,
+ CK_ULONG_PTR signature_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_SignRecoverInit (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE key)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_SignRecover (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR data,
+ CK_ULONG data_len,
+ CK_BYTE_PTR signature,
+ CK_ULONG_PTR signature_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_no_mechanisms_C_VerifyInit (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE key)
+{
+ Session *sess;
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_MECHANISM_INVALID;
+}
+
+CK_RV
+mock_not_initialized_C_Verify (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR data,
+ CK_ULONG data_len,
+ CK_BYTE_PTR signature,
+ CK_ULONG signature_len)
+{
+ return CKR_OPERATION_NOT_INITIALIZED;
+}
+
+CK_RV
+mock_unsupported_C_VerifyUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR part,
+ CK_ULONG part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_VerifyFinal (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR signature,
+ CK_ULONG signature_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_VerifyRecoverInit (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE key)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_VerifyRecover (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR signature,
+ CK_ULONG signature_len,
+ CK_BYTE_PTR data,
+ CK_ULONG_PTR data_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_DigestEncryptUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR part,
+ CK_ULONG part_len,
+ CK_BYTE_PTR encrypted_part,
+ CK_ULONG_PTR encrypted_key_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_DecryptDigestUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR encrypted_part,
+ CK_ULONG encrypted_key_len,
+ CK_BYTE_PTR part,
+ CK_ULONG_PTR part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_SignEncryptUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR part,
+ CK_ULONG part_len,
+ CK_BYTE_PTR encrypted_part,
+ CK_ULONG_PTR encrypted_key_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_DecryptVerifyUpdate (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR encrypted_part,
+ CK_ULONG encrypted_key_len,
+ CK_BYTE_PTR part,
+ CK_ULONG_PTR part_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_GenerateKey (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count,
+ CK_OBJECT_HANDLE_PTR key)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_no_mechanisms_C_GenerateKeyPair (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_ATTRIBUTE_PTR public_key_template,
+ CK_ULONG public_key_attribute_count,
+ CK_ATTRIBUTE_PTR private_key_template,
+ CK_ULONG private_key_attribute_count,
+ CK_OBJECT_HANDLE_PTR public_key,
+ CK_OBJECT_HANDLE_PTR private_key)
+{
+ Session *sess;
+
+ g_return_val_if_fail (mechanism, CKR_MECHANISM_INVALID);
+ g_return_val_if_fail (public_key_template, CKR_TEMPLATE_INCOMPLETE);
+ g_return_val_if_fail (public_key_attribute_count, CKR_TEMPLATE_INCOMPLETE);
+ g_return_val_if_fail (private_key_template, CKR_TEMPLATE_INCOMPLETE);
+ g_return_val_if_fail (private_key_attribute_count, CKR_TEMPLATE_INCOMPLETE);
+ g_return_val_if_fail (public_key, CKR_ARGUMENTS_BAD);
+ g_return_val_if_fail (private_key, CKR_ARGUMENTS_BAD);
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_MECHANISM_INVALID;
+}
+
+CK_RV
+mock_no_mechanisms_C_WrapKey (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE wrapping_key,
+ CK_OBJECT_HANDLE key,
+ CK_BYTE_PTR wrapped_key,
+ CK_ULONG_PTR wrapped_key_len)
+{
+ Session *sess;
+
+ g_return_val_if_fail (mechanism, CKR_MECHANISM_INVALID);
+ g_return_val_if_fail (wrapping_key, CKR_OBJECT_HANDLE_INVALID);
+ g_return_val_if_fail (key, CKR_OBJECT_HANDLE_INVALID);
+ g_return_val_if_fail (wrapped_key_len, CKR_WRAPPED_KEY_LEN_RANGE);
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_MECHANISM_INVALID;
+}
+
+CK_RV
+mock_no_mechanisms_C_UnwrapKey (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE unwrapping_key,
+ CK_BYTE_PTR wrapped_key,
+ CK_ULONG wrapped_key_len,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count,
+ CK_OBJECT_HANDLE_PTR key)
+{
+ Session *sess;
+
+ g_return_val_if_fail (mechanism, CKR_MECHANISM_INVALID);
+ g_return_val_if_fail (unwrapping_key, CKR_WRAPPING_KEY_HANDLE_INVALID);
+ g_return_val_if_fail (wrapped_key, CKR_WRAPPED_KEY_INVALID);
+ g_return_val_if_fail (wrapped_key_len, CKR_WRAPPED_KEY_LEN_RANGE);
+ g_return_val_if_fail (key, CKR_ARGUMENTS_BAD);
+ g_return_val_if_fail (template, CKR_TEMPLATE_INCOMPLETE);
+ g_return_val_if_fail (count, CKR_TEMPLATE_INCONSISTENT);
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_MECHANISM_INVALID;
+}
+
+CK_RV
+mock_no_mechanisms_C_DeriveKey (CK_SESSION_HANDLE session,
+ CK_MECHANISM_PTR mechanism,
+ CK_OBJECT_HANDLE base_key,
+ CK_ATTRIBUTE_PTR template,
+ CK_ULONG count,
+ CK_OBJECT_HANDLE_PTR key)
+{
+ Session *sess;
+
+ g_return_val_if_fail (mechanism, CKR_MECHANISM_INVALID);
+ g_return_val_if_fail (count, CKR_TEMPLATE_INCOMPLETE);
+ g_return_val_if_fail (template, CKR_TEMPLATE_INCOMPLETE);
+ g_return_val_if_fail (key, CKR_ARGUMENTS_BAD);
+
+ sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
+ g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
+
+ return CKR_MECHANISM_INVALID;
+}
+
+CK_RV
+mock_unsupported_C_SeedRandom (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR pSeed,
+ CK_ULONG seed_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_RV
+mock_unsupported_C_GenerateRandom (CK_SESSION_HANDLE session,
+ CK_BYTE_PTR random_data,
+ CK_ULONG random_len)
+{
+ return CKR_FUNCTION_NOT_SUPPORTED;
+}
+
+CK_FUNCTION_LIST mock_default_functions = {
+ { 2, 11 }, /* version */
+ mock_C_Initialize,
+ mock_C_Finalize,
+ mock_C_GetInfo,
+ mock_C_GetFunctionList,
+ mock_C_GetSlotList,
+ mock_C_GetSlotInfo,
+ mock_C_GetTokenInfo,
+ mock_C_GetMechanismList,
+ mock_C_GetMechanismInfo,
+ mock_unsupported_C_InitToken,
+ mock_unsupported_C_InitPIN,
+ mock_unsupported_C_SetPIN,
+ mock_C_OpenSession,
+ mock_C_CloseSession,
+ mock_C_CloseAllSessions,
+ mock_C_GetSessionInfo,
+ mock_unsupported_C_GetOperationState,
+ mock_unsupported_C_SetOperationState,
+ mock_unsupported_C_Login,
+ mock_unsupported_C_Logout,
+ mock_readonly_C_CreateObject,
+ mock_unsupported_C_CopyObject,
+ mock_readonly_C_DestroyObject,
+ mock_unsupported_C_GetObjectSize,
+ mock_C_GetAttributeValue,
+ mock_readonly_C_SetAttributeValue,
+ mock_C_FindObjectsInit,
+ mock_C_FindObjects,
+ mock_C_FindObjectsFinal,
+ mock_no_mechanisms_C_EncryptInit,
+ mock_not_initialized_C_Encrypt,
+ mock_unsupported_C_EncryptUpdate,
+ mock_unsupported_C_EncryptFinal,
+ mock_no_mechanisms_C_DecryptInit,
+ mock_not_initialized_C_Decrypt,
+ mock_unsupported_C_DecryptUpdate,
+ mock_unsupported_C_DecryptFinal,
+ mock_unsupported_C_DigestInit,
+ mock_unsupported_C_Digest,
+ mock_unsupported_C_DigestUpdate,
+ mock_unsupported_C_DigestKey,
+ mock_unsupported_C_DigestFinal,
+ mock_no_mechanisms_C_SignInit,
+ mock_not_initialized_C_Sign,
+ mock_unsupported_C_SignUpdate,
+ mock_unsupported_C_SignFinal,
+ mock_unsupported_C_SignRecoverInit,
+ mock_unsupported_C_SignRecover,
+ mock_no_mechanisms_C_VerifyInit,
+ mock_not_initialized_C_Verify,
+ mock_unsupported_C_VerifyUpdate,
+ mock_unsupported_C_VerifyFinal,
+ mock_unsupported_C_VerifyRecoverInit,
+ mock_unsupported_C_VerifyRecover,
+ mock_unsupported_C_DigestEncryptUpdate,
+ mock_unsupported_C_DecryptDigestUpdate,
+ mock_unsupported_C_SignEncryptUpdate,
+ mock_unsupported_C_DecryptVerifyUpdate,
+ mock_unsupported_C_GenerateKey,
+ mock_no_mechanisms_C_GenerateKeyPair,
+ mock_no_mechanisms_C_WrapKey,
+ mock_no_mechanisms_C_UnwrapKey,
+ mock_no_mechanisms_C_DeriveKey,
+ mock_unsupported_C_SeedRandom,
+ mock_unsupported_C_GenerateRandom,
+ mock_C_GetFunctionStatus,
+ mock_C_CancelFunction,
+ mock_unsupported_C_WaitForSlotEvent
+};
diff --git a/tests/mock-pkcs11.h b/tests/mock-pkcs11.h
new file mode 100644
index 000000000..40ef1f28a
--- /dev/null
+++ b/tests/mock-pkcs11.h
@@ -0,0 +1,352 @@
+/*
+ * Copyright (C) 2010-2012 Stefan Walter
+ * Copyright (C) 2011 Collabora Ltd.
+ *
+ * This program 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 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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 <glib.h>
+
+#include <gcr/gcr.h>
+
+#include <gck/pkcs11.h>
+#include <gck/pkcs11x.h>
+
+#ifndef MOCK_MODULE_H
+#define MOCK_MODULE_H
+
+extern CK_FUNCTION_LIST mock_default_functions;
+
+CK_RV mock_C_Initialize (CK_VOID_PTR pInitArgs);
+
+CK_RV mock_C_Finalize (CK_VOID_PTR pReserved);
+
+CK_RV mock_C_GetInfo (CK_INFO_PTR pInfo);
+
+CK_RV mock_C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list);
+
+CK_RV mock_C_GetSlotList (CK_BBOOL tokenPresent,
+ CK_SLOT_ID_PTR pSlotList,
+ CK_ULONG_PTR pulCount);
+
+CK_RV mock_C_GetSlotInfo (CK_SLOT_ID slotID,
+ CK_SLOT_INFO_PTR pInfo);
+
+CK_RV mock_C_GetTokenInfo (CK_SLOT_ID slotID,
+ CK_TOKEN_INFO_PTR pInfo);
+
+CK_RV mock_C_GetMechanismList (CK_SLOT_ID slotID,
+ CK_MECHANISM_TYPE_PTR pMechanismList,
+ CK_ULONG_PTR pulCount);
+
+CK_RV mock_C_GetMechanismInfo (CK_SLOT_ID slotID,
+ CK_MECHANISM_TYPE type,
+ CK_MECHANISM_INFO_PTR pInfo);
+
+CK_RV mock_unsupported_C_InitToken (CK_SLOT_ID slotID,
+ CK_UTF8CHAR_PTR pPin,
+ CK_ULONG ulPinLen,
+ CK_UTF8CHAR_PTR pLabel);
+
+CK_RV mock_unsupported_C_WaitForSlotEvent (CK_FLAGS flags,
+ CK_SLOT_ID_PTR pSlot,
+ CK_VOID_PTR pReserved);
+
+CK_RV mock_C_OpenSession (CK_SLOT_ID slotID,
+ CK_FLAGS flags,
+ CK_VOID_PTR pApplication,
+ CK_NOTIFY Notify,
+ CK_SESSION_HANDLE_PTR phSession);
+
+CK_RV mock_C_CloseSession (CK_SESSION_HANDLE hSession);
+
+CK_RV mock_C_CloseAllSessions (CK_SLOT_ID slotID);
+
+CK_RV mock_C_GetFunctionStatus (CK_SESSION_HANDLE hSession);
+
+CK_RV mock_C_CancelFunction (CK_SESSION_HANDLE hSession);
+
+CK_RV mock_C_GetSessionInfo (CK_SESSION_HANDLE hSession,
+ CK_SESSION_INFO_PTR pInfo);
+
+CK_RV mock_unsupported_C_InitPIN (CK_SESSION_HANDLE hSession,
+ CK_UTF8CHAR_PTR pPin,
+ CK_ULONG ulPinLen);
+
+CK_RV mock_unsupported_C_SetPIN (CK_SESSION_HANDLE hSession,
+ CK_UTF8CHAR_PTR pOldPin,
+ CK_ULONG ulOldLen,
+ CK_UTF8CHAR_PTR pNewPin,
+ CK_ULONG ulNewLen);
+
+CK_RV mock_unsupported_C_GetOperationState (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pOperationState,
+ CK_ULONG_PTR pulOperationStateLen);
+
+CK_RV mock_unsupported_C_SetOperationState (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pOperationState,
+ CK_ULONG ulOperationStateLen,
+ CK_OBJECT_HANDLE hEncryptionKey,
+ CK_OBJECT_HANDLE hAuthenticationKey);
+
+CK_RV mock_unsupported_C_Login (CK_SESSION_HANDLE hSession,
+ CK_USER_TYPE userType,
+ CK_UTF8CHAR_PTR pPin,
+ CK_ULONG pPinLen);
+
+CK_RV mock_unsupported_C_Logout (CK_SESSION_HANDLE hSession);
+
+CK_RV mock_readonly_C_CreateObject (CK_SESSION_HANDLE hSession,
+ CK_ATTRIBUTE_PTR pTemplate,
+ CK_ULONG ulCount,
+ CK_OBJECT_HANDLE_PTR phObject);
+
+CK_RV mock_unsupported_C_CopyObject (CK_SESSION_HANDLE hSession,
+ CK_OBJECT_HANDLE hObject,
+ CK_ATTRIBUTE_PTR pTemplate,
+ CK_ULONG ulCount,
+ CK_OBJECT_HANDLE_PTR phNewObject);
+
+CK_RV mock_readonly_C_DestroyObject (CK_SESSION_HANDLE hSession,
+ CK_OBJECT_HANDLE hObject);
+
+CK_RV mock_unsupported_C_GetObjectSize (CK_SESSION_HANDLE hSession,
+ CK_OBJECT_HANDLE hObject,
+ CK_ULONG_PTR pulSize);
+
+CK_RV mock_C_GetAttributeValue (CK_SESSION_HANDLE hSession,
+ CK_OBJECT_HANDLE hObject,
+ CK_ATTRIBUTE_PTR pTemplate,
+ CK_ULONG ulCount);
+
+CK_RV mock_readonly_C_SetAttributeValue (CK_SESSION_HANDLE hSession,
+ CK_OBJECT_HANDLE hObject,
+ CK_ATTRIBUTE_PTR pTemplate,
+ CK_ULONG ulCount);
+
+CK_RV mock_C_FindObjectsInit (CK_SESSION_HANDLE hSession,
+ CK_ATTRIBUTE_PTR pTemplate,
+ CK_ULONG ulCount);
+
+CK_RV mock_C_FindObjects (CK_SESSION_HANDLE hSession,
+ CK_OBJECT_HANDLE_PTR phObject,
+ CK_ULONG ulMaxObjectCount,
+ CK_ULONG_PTR pulObjectCount);
+
+CK_RV mock_fail_C_FindObjects (CK_SESSION_HANDLE hSession,
+ CK_OBJECT_HANDLE_PTR phObject,
+ CK_ULONG ulMaxObjectCount,
+ CK_ULONG_PTR pulObjectCount);
+
+CK_RV mock_C_FindObjectsFinal (CK_SESSION_HANDLE hSession);
+
+CK_RV mock_no_mechanisms_C_EncryptInit (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE hKey);
+
+CK_RV mock_not_initialized_C_Encrypt (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pData,
+ CK_ULONG ulDataLen,
+ CK_BYTE_PTR pEncryptedData,
+ CK_ULONG_PTR pulEncryptedDataLen);
+
+CK_RV mock_unsupported_C_EncryptUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pPart,
+ CK_ULONG ulPartLen,
+ CK_BYTE_PTR pEncryptedPart,
+ CK_ULONG_PTR pulEncryptedPartLen);
+
+CK_RV mock_unsupported_C_EncryptFinal (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pLastEncryptedPart,
+ CK_ULONG_PTR pulLastEncryptedPartLen);
+
+CK_RV mock_no_mechanisms_C_DecryptInit (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE hKey);
+
+CK_RV mock_not_initialized_C_Decrypt (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pEncryptedData,
+ CK_ULONG ulEncryptedDataLen,
+ CK_BYTE_PTR pData,
+ CK_ULONG_PTR pulDataLen);
+
+CK_RV mock_unsupported_C_DecryptUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pEncryptedPart,
+ CK_ULONG ulEncryptedPartLen,
+ CK_BYTE_PTR pPart,
+ CK_ULONG_PTR pulPartLen);
+
+CK_RV mock_unsupported_C_DecryptFinal (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pLastPart,
+ CK_ULONG_PTR pulLastPartLen);
+
+CK_RV mock_unsupported_C_DigestInit (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism);
+
+CK_RV mock_unsupported_C_Digest (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pData,
+ CK_ULONG ulDataLen,
+ CK_BYTE_PTR pDigest,
+ CK_ULONG_PTR pulDigestLen);
+
+CK_RV mock_unsupported_C_DigestUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pPart,
+ CK_ULONG ulPartLen);
+
+CK_RV mock_unsupported_C_DigestKey (CK_SESSION_HANDLE hSession,
+ CK_OBJECT_HANDLE hKey);
+
+CK_RV mock_unsupported_C_DigestFinal (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pDigest,
+ CK_ULONG_PTR pulDigestLen);
+
+CK_RV mock_no_mechanisms_C_SignInit (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE hKey);
+
+CK_RV mock_not_initialized_C_Sign (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pData,
+ CK_ULONG ulDataLen,
+ CK_BYTE_PTR pSignature,
+ CK_ULONG_PTR pulSignatureLen);
+
+CK_RV mock_unsupported_C_SignUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pPart,
+ CK_ULONG ulPartLen);
+
+CK_RV mock_unsupported_C_SignFinal (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pSignature,
+ CK_ULONG_PTR pulSignatureLen);
+
+CK_RV mock_unsupported_C_SignRecoverInit (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE hKey);
+
+CK_RV mock_unsupported_C_SignRecover (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pData,
+ CK_ULONG ulDataLen,
+ CK_BYTE_PTR pSignature,
+ CK_ULONG_PTR pulSignatureLen);
+
+CK_RV mock_no_mechanisms_C_VerifyInit (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE hKey);
+
+CK_RV mock_not_initialized_C_Verify (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pData,
+ CK_ULONG ulDataLen,
+ CK_BYTE_PTR pSignature,
+ CK_ULONG ulSignatureLen);
+
+CK_RV mock_unsupported_C_VerifyUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pPart,
+ CK_ULONG ulPartLen);
+
+CK_RV mock_unsupported_C_VerifyFinal (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pSignature,
+ CK_ULONG pulSignatureLen);
+
+CK_RV mock_unsupported_C_VerifyRecoverInit (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE hKey);
+
+CK_RV mock_unsupported_C_VerifyRecover (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pSignature,
+ CK_ULONG pulSignatureLen,
+ CK_BYTE_PTR pData,
+ CK_ULONG_PTR pulDataLen);
+
+CK_RV mock_unsupported_C_DigestEncryptUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pPart,
+ CK_ULONG ulPartLen,
+ CK_BYTE_PTR pEncryptedPart,
+ CK_ULONG_PTR ulEncryptedPartLen);
+
+CK_RV mock_unsupported_C_DecryptDigestUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pEncryptedPart,
+ CK_ULONG ulEncryptedPartLen,
+ CK_BYTE_PTR pPart,
+ CK_ULONG_PTR pulPartLen);
+
+CK_RV mock_unsupported_C_SignEncryptUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pPart,
+ CK_ULONG ulPartLen,
+ CK_BYTE_PTR pEncryptedPart,
+ CK_ULONG_PTR ulEncryptedPartLen);
+
+CK_RV mock_unsupported_C_DecryptVerifyUpdate (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pEncryptedPart,
+ CK_ULONG ulEncryptedPartLen,
+ CK_BYTE_PTR pPart,
+ CK_ULONG_PTR pulPartLen);
+
+CK_RV mock_unsupported_C_GenerateKey (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_ATTRIBUTE_PTR pTemplate,
+ CK_ULONG ulCount,
+ CK_OBJECT_HANDLE_PTR phKey);
+
+CK_RV mock_no_mechanisms_C_GenerateKeyPair (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_ATTRIBUTE_PTR pPublicKeyTemplate,
+ CK_ULONG ulPublicKeyAttributeCount,
+ CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
+ CK_ULONG ulPrivateKeyAttributeCount,
+ CK_OBJECT_HANDLE_PTR phPublicKey,
+ CK_OBJECT_HANDLE_PTR phPrivateKey);
+
+CK_RV mock_no_mechanisms_C_WrapKey (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE hWrappingKey,
+ CK_OBJECT_HANDLE hKey,
+ CK_BYTE_PTR pWrappedKey,
+ CK_ULONG_PTR pulWrappedKeyLen);
+
+CK_RV mock_no_mechanisms_C_UnwrapKey (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE pUnwrappingKey,
+ CK_BYTE_PTR pWrappedKey,
+ CK_ULONG pulWrappedKeyLen,
+ CK_ATTRIBUTE_PTR pTemplate,
+ CK_ULONG ulCount,
+ CK_OBJECT_HANDLE_PTR phKey);
+
+CK_RV mock_no_mechanisms_C_DeriveKey (CK_SESSION_HANDLE hSession,
+ CK_MECHANISM_PTR pMechanism,
+ CK_OBJECT_HANDLE hBaseKey,
+ CK_ATTRIBUTE_PTR pTemplate,
+ CK_ULONG ulCount,
+ CK_OBJECT_HANDLE_PTR phKey);
+
+CK_RV mock_unsupported_C_SeedRandom (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pSeed,
+ CK_ULONG ulSeedLen);
+
+CK_RV mock_unsupported_C_GenerateRandom (CK_SESSION_HANDLE hSession,
+ CK_BYTE_PTR pRandomData,
+ CK_ULONG ulRandomLen);
+
+CK_OBJECT_HANDLE mock_module_add_certificate (GcrCertificate *cert);
+
+CK_OBJECT_HANDLE mock_module_add_assertion (GcrCertificate *cert,
+ CK_X_ASSERTION_TYPE assertion_type,
+ const gchar *purpose,
+ const gchar *peer);
+
+#define MOCK_SLOT_ONE_ID 1
+#define MOCK_SLOT_ONE_URI "pkcs11:manufacturer=MOCK%20MANUFACTURER;serial=MOCK%20SERIAL"
+
+#endif /* MOCK_MODULE_H */